2013-08-05 23 views
16

मैं SystemVerilog में एक कोड है जो कुछ इस तरह है देख रहा हूँ:अनुक्रमण वैक्टर और साथ + सरणियों:

if(address[2*pointer+:2]) 
    do_something; 

मैं कैसे समझना चाहिए +: जब इस सदिश का अनुक्रमण?

मुझे पता चला कि इसे थोड़ा टुकड़ा कहा जाता है, लेकिन मुझे इसके बारे में कोई स्पष्टीकरण नहीं मिल रहा है।

+2

यह http://stackoverflow.com/questions/17778418 – dwikle

उत्तर

39

विवरण और उदाहरण IEEE Std 1800-2012 § 11.5.1 "वेक्टर बिट-सिलेक्ट और पार्ट-सिलेक्ट एड्रेसिंग" में पाया जा सकता है। पहली आईईईई उपस्थिति आईईईई 1364-2001 (वेरिलोग) § 4.2.1 "वेक्टर बिट-सिलेक्ट और पार्ट-सिलेक्ट एड्रेसिंग" है। यहाँ LRM से एक प्रत्यक्ष उदाहरण है:

logic [31: 0] a_vect; 
logic [0 :31] b_vect; 
logic [63: 0] dword; 
integer sel; 
a_vect[ 0 +: 8] // == a_vect[ 7 : 0] 
a_vect[15 -: 8] // == a_vect[15 : 8] 
b_vect[ 0 +: 8] // == b_vect[0 : 7] 
b_vect[15 -: 8] // == b_vect[8 :15] 
dword[8*sel +: 8] // variable part-select with fixed width 

हैं sel 0 तो dword[8*(0) +: 8] == dword[7:0]
हैं sel 7 है तो

बाईं हमेशा प्रारंभिक सूचकांक करने के लिए मूल्य। दाईं ओर की संख्या चौड़ाई है और सकारात्मक स्थिर होना चाहिए। + और - एक उच्च या निचले सूचकांक मान के प्रारंभिक अनुक्रमणिका के बिट्स का चयन करने के लिए इंगित करता है।

address मान लिया जाये कि थोड़ा endian में है ([MSB: LSB]) प्रारूप, तो if(address[2*pointer+:2])if({address[2*pointer+1],address[2*pointer]})

+0

के पास डुप्लीकेट तो अगर हम a_vect इस्तेमाल किया क्या होगा है [15 -: 32]? – umayneverknow

+0

@umayneverknow मुझे याद नहीं है कि क्या एलआरएम ने बताया कि परिदृश्य में क्या होता है। इसे 'a_vect [15: -16]' के रूप में हल/त्रुटि करना चाहिए। इसे आज़माएं और पता लगाएं – Greg

15

इस के बराबर है एक और तरीका बिट वेक्टर की श्रेणी निर्दिष्ट करने के लिए है। एन, इस मामले में: -:

x + एन, वेक्टर के शुरू होने से स्थिति एक्स द्वारा दिया जाता है और आप एन से एक्स से अप गिनती

वहाँ भी

एक्स है प्रारंभ स्थिति x है और आप नीचे से 0 से एन

एन स्थिर है और एक्स एक अभिव्यक्ति है जिसमें इटरेटर शामिल हो सकते हैं।

  1. यह कोड अधिक पठनीय बनाता है -

    यह लाभ के एक जोड़े हैं।

  2. आप "गैर-स्थिर मूल्य नहीं हो सकता" त्रुटि प्राप्त किए बिना बिट-स्लाइस का संदर्भ देते समय एक इटरेटर निर्दिष्ट कर सकते हैं।

संबंधित मुद्दे