運行在verilog中的$size
和$bits
運算符有什麼區別? 如果我有變數,[9:0]a
,[6:0]b
,[31:0]c
。
c <= [($size(a)+$size(b)-1]-:$bits(b)];
從上述表達式'c'的輸出是什麼?
運行在verilog中的$size
和$bits
運算符有什麼區別? 如果我有變數,[9:0]a
,[6:0]b
,[31:0]c
。
c <= [($size(a)+$size(b)-1]-:$bits(b)];
從上述表達式'c'的輸出是什麼?
$size
應返回該維度中的元素數量,相當於$high - $low + 1
。它與維度相關,不僅是位數。如果類型是一維打包數組或整數類型,則等於$bits
。
$bits
系統函數返回將表達式保存爲位流所需的位數。
$bits ([expression|type_identifier])
當使用當前爲空的動態大小類型調用時,它返回0。將動態大小的類型標識符直接使用系統函數$bits
是錯誤的。我不知道你的問題,c <= [($size(a)+$size(b)-1]-:$bits(b)];
。這是RHS中的一個有效表達式嗎?你在談論陣列表達式,[n +: m]
或[n -: m]
?
$size()
給出單個維度的位數。 $bits()
給出了完全表示變量的位數。
例如:
reg [9:0] a;
reg [9:0] b [5:0];
initial begin
$display("a Size ", $size(a));
$display("a Bits ", $bits(a));
$display("b Size ", $size(b));
$display("b Bits ", $bits(b)) ;
end
給出:
a Size 10
a Bits 10
b Size 6 // Depth of memory
b Bits 60 // Width * Depth
你的情況,你只需要1個維數組,而不是記憶或結構使$size()
和$bits()
將是同樣的事情。
'$ size(a)'= 10,'$ size(b)= 7','$ bits(b)'= 7:'c <= x [17-1-:7]'這些都是標準類型,所以'$ bits'和'$ size'將是相同的。 – Morgan
你說得對。但我只是沒有意識到是'c <= [17 + 7-1] - :7]的錯字或真實意圖;' – jclin
啊是的,錯字17 + 7-1。還要注意這個問題沒有變量,它只是一個範圍,所以它不是有效的verilog。 – Morgan