Verilog中给参数化位宽(可变位宽)的变量赋值:赋全0,赋全1,赋全Z,赋全x

定义
赋全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的方式

结论:

  1. 赋全0、全x或者全z可采用'b0、'bx或者'bz的方式;
  2. 赋全1可采用赋~0或赋-1的方式较为简洁。
posted @ 2022-04-10 00:13  Kevin_BewithU  阅读(4784)  评论(0)    收藏  举报