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)
我会用以下语句代替:
assign mywire = ~0;
Run Code Online (Sandbox Code Playgroud)
在这样的简单表达式中,赋值左侧的宽度设置右侧表达式的宽度.因此0
,这是一个32位常数,首先扩展到mywire的完整128位,然后翻转所有位,并分配得到的全1矢量.
我更喜欢这个版本,因为它不需要你在赋值中的任何地方指定mywire的宽度.