2012-11-12 18 views
12

運行在verilog中的$size$bits運算符有什麼區別? 如果我有變數,[9:0]a[6:0]b,[31:0]c

c <= [($size(a)+$size(b)-1]-:$bits(b)]; 

從上述表達式'c'的輸出是什麼?

回答

9

$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]

+0

'$ size(a)'= 10,'$ size(b)= 7','$ bits(b)'= 7:'c <= x [17-1-:7]'這些都是標準類型,所以'$ bits'和'$ size'將是相同的。 – Morgan

+0

你說得對。但我只是沒有意識到是'c <= [17 + 7-1] - :7]的錯字或真實意圖;' – jclin

+0

啊是的,錯字17 + 7-1。還要注意這個問題沒有變量,它只是一個範圍,所以它不是有效的verilog。 – Morgan

19

$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()將是同樣的事情。