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的方式较为简洁。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM