1、几种不同的赋值方式
在Verilog编码过程中,经常会给信号赋值,赋值有时候需要指定信号位宽,如下所示。Verilog 2005 版本支持使用省略位宽的方式赋值。
//采用常数位宽直接赋值
wire [512-1:0] func_id;
assign func_id = 512'b0 ;
//采用宏定义 指定位宽
// `define PCIE_FUNC_ID 512 ;
wire [512-1:0] func_id;
assign func_id = {(`PCIE_FUNC_ID){1’b0}};
//省略写法,省略位宽512bit
wire [512-1:0] func_id;
assign func_id = ’b0 ;
2、采用省略位宽的方式赋值
Verilog 2005 版本支持使用省略位宽的方式赋值,’b,’d,’h,采用省略位宽的方式可以向左主动补齐,如果省略了进制符合b/d/h/o,则默认是十进制。
Example 4—Automatic left padding
reg [11:0] a, b, c, d;
initial begin
a = 'h x; // yields xxx
b = 'h 3x; // yields 03x
c = 'h z3; // yields zz3
d = 'h 0z3; // yields 0z3
end
reg [84:0] e, f, g,j;
e = 'h5; // yields {82{1'b0},3'b101}
f = 'hx; // yields {85{1'hx}}
g = 'hz; // yields {85{1'hz}}
j = ‘5 ; // yields {82{1'b0},3'b101} //新增