2012-11-12 36 views
12

verilog में $size और $bits ऑपरेटर के बीच क्या अंतर है? यदि मेरे पास चर हैं, [9:0]a, [6:0]b, [31:0]c

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

उपरोक्त अभिव्यक्ति से 'सी' पर आउटपुट क्या होगा?

उत्तर

9

$size आयाम में तत्वों की संख्या वापस करेगा, जो $high - $low + 1 के बराबर है। यह आयाम के सापेक्ष है, न केवल बिट मायने रखता है। यदि प्रकार 1 डी पैक सरणी या अभिन्न प्रकार है, तो यह $bits के बराबर है।

$bits सिस्टम फ़ंक्शन बिट स्ट्रीम के रूप में अभिव्यक्ति को पकड़ने के लिए आवश्यक बिट्स की संख्या देता है।

$bits ([expression|type_identifier]) 

यह 0 लौटाता है जब गतिशील रूप से आकार के साथ वर्तमान में खाली होता है। $bits सिस्टम फ़ंक्शन का उपयोग गतिशील रूप से आकार के पहचानकर्ता के साथ सीधे करने में त्रुटि है।

मुझे आपके प्रश्न, c <= [($size(a)+$size(b)-1]-:$bits(b)]; के बारे में कोई जानकारी नहीं है। क्या यह आरएचएस में वैध अभिव्यक्ति है? क्या आप सरणी रेंज अभिव्यक्ति, [n +: m] या [n -: m] के बारे में बात कर रहे हैं?

+0

'$ आकार (ए)' = 10, '$ आकार (बी) = 7',' $ बिट्स (बी) '= 7:' सी <= x [17-1-: 7] 'ये सभी हैं मानक प्रकार तो '$ बिट्स 'और' $ आकार' समान होंगे। – 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 आयामी सरणी, नहीं यादें या structs तो $size() और $bits() है एक ही बात होगी।