如何定义和初始化仅包含Verilog中的向量的向量?

Ver*_*ian 9 verilog register-transfer-level system-verilog

如果我想声明所有1的128位向量,这些方法中的哪一个始终是正确的?

wire [127:0] mywire;

assign mywire = 128'b1;
assign mywire = {128{1'b1}};
assign mywire = 128'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
Run Code Online (Sandbox Code Playgroud)

too*_*lic 14

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

以下两者始终将所有128位分配给1:

assign mywire = {128{1'b1}};
assign mywire = 128'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
Run Code Online (Sandbox Code Playgroud)

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

使用SystemVerilog,以下语法也始终将所有128位分配给1:

assign mywire = '1;
Run Code Online (Sandbox Code Playgroud)


Cli*_*nna 7

我会用以下语句代替:

assign mywire = ~0;
Run Code Online (Sandbox Code Playgroud)

在这样的简单表达式中,赋值左侧的宽度设置右侧表达式的宽度.因此0,这是一个32位常数,首先扩展到mywire的完整128位,然后翻转所有位,并分配得到的全1矢量.

我更喜欢这个版本,因为它不需要你在赋值中的任何地方指定mywire的宽度.