如果我想声明一个全为 128 位的向量,这些方法中哪一种总是正确的?
wire [127:0] mywire;
assign mywire = 128'b1;
assign mywire = {128{1'b1}};
assign mywire = 128'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
如果我想声明一个全为 128 位的向量,这些方法中哪一种总是正确的?
wire [127:0] mywire;
assign mywire = 128'b1;
assign mywire = {128{1'b1}};
assign mywire = 128'hFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
正如快速模拟所证明的那样,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;
我会改用以下语句:
assign mywire = ~0;
在像这样的简单表达式中,赋值左侧的宽度设置右侧表达式的宽度。因此0
,它是一个 32 位常量,首先将其扩展到 mywire 的完整 128 位,然后翻转所有位并分配生成的全一向量。
我更喜欢这个版本,因为它不需要您在作业中的任何位置指定 mywire 的宽度。