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