定义
赋全0:指各位均为二进制0,其余依此类推。
以WIDTH表示din/dout位宽,为了说明方便定义这样一个模块
module evaluate
#(
parameter WIDTH = 16
)
( input clk,
input rst,
input [WIDTH-1:0] din,
output reg [WIDTH-1:0] dout
);
always @(posedge clk)
begin
if (rst)
dout <= 'b0; //如何赋值
else
dout <= din;
end
endmodule
由于位宽已经参数化,那么如何解决参数化赋值问题,以使赋值能“适应参数”。
赋全0的方法
(1)直接赋0
dout <= 0;此种情况下默认0为十进制以32位表示,如果din位宽大于32位,则高位补零,如果din位宽小于32位,则截取低位,仍为0。
(2)直接赋'b0
dout <= 'b0;
(3)利用位拼接
dout <= {WIDTH{1'b0}};
(4)supply0
定义supply0 [WIDTH-1:0] dout_gnd,dout <= dout_gnd;
赋全1的方法
(1)直接赋~0
dout <= ~0;
(2)直接赋-1
dout <= -1;
(3)利用位拼接
dout <= {WIDTH{1'b1}};
(4)利用supply1
定义supply1 [WIDTH-1:0] dout_vcc dout <= dout_vcc;
需要注意的是Verilog中并没有'b1的赋全1方式。
赋全x或者全z的方法
可采用'bx或者'bz的方式
结论:
- 赋全0、全x或者全z可采用'b0、'bx或者'bz的方式;
- 赋全1可采用赋~0或赋-1的方式较为简洁。