17

如果我想声明一个全为 128 位的向量,这些方法中哪一种总是正确的?

wire [127:0] mywire;

assign mywire = 128'b1;
assign mywire = {128{1'b1}};
assign mywire = 128'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
4

2 回答 2

23

正如快速模拟所证明的那样,assign mywire = 128'b1;不会将 的所有位分配mywire给 1。只有位 0 被分配 1。

以下两项始终将所有 128 位分配为 1:

assign mywire = {128{1'b1}};
assign mywire = 128'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;

第一行的一个优点是它更容易扩展到大于和小于 128 的宽度。

使用 SystemVerilog,以下语法也总是将所有 128 位分配为 1:

assign mywire = '1;
于 2013-09-30T23:56:07.377 回答
13

我会改用以下语句:

assign mywire = ~0;

在像这样的简单表达式中,赋值左侧的宽度设置右侧表达式的宽度。因此0,它是一个 32 位常量,首先将其扩展到 mywire 的完整 128 位,然后翻转所有位并分配生成的全一向量。

我更喜欢这个版本,因为它不需要您在作业中的任何位置指定 mywire 的宽度。

于 2013-10-04T09:38:01.267 回答