定義
賦全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的方式較為簡潔。