2012-03-05 9 views
9

मैं verilog में एक बहु-स्तरीय तुलनित्र बनाने की कोशिश कर रहा हूं और मैं यह नहीं समझ सकता कि एकल जेनरेटर में एकाधिक जेनरेटर कैसे बढ़ाएं।वेरिलोग जनरेट स्टेटमेंट में एकाधिक जेनवार्स बढ़ाना

genvar i,j; 
//Level 1 
generate 
    j=0; 
    for (i=0;i<128;i=i+1) 
    begin: level1Comp 
    assign ci1[i] = minw(tc[j],tc[j+1]); 
    j = j+2; 
    end 
endgenerate 

और हो रही निम्न त्रुटि: मैं निम्नलिखित कोशिश कर रहा हूँ

Error-[SE] Syntax error 
    Following verilog source has syntax error : 
    "encoder.v", 322: token is '=' 
    j=0; 

किसी को भी पता है कि एक ही बयान उत्पन्न में एक से अधिक genvars बढ़ाने के लिए कैसे? या कम से कम समकक्ष कार्यक्षमता मिलता है?

उत्तर

5

मान लिया जाये कि ci1tc के आधे गहराई है और आप चाहते हैं कि, कहते हैं कि ci1[0] = min(tc[0], tc[1]), ci[1] = min(tc[2], tc[3]) आदि, निम्नलिखित काम करना चाहिए:

module st_genvar(); 

    int ci1 [0:127]; 
    int tc [0:255]; 

    function int minw(int i1, int i2); 
     if(i1 < i2) 
     minw = i1; 
     else 
     minw = i2; 
    endfunction 

    genvar i; 
    //Level 1 
    generate 
     for (i=0;i<128;i=i+1) 
     begin: level1Comp 
      assign ci1[i] = minw(tc[i*2],tc[i*2+1]); 
     end 
    endgenerate 

endmodule 
11

Anyone know how to increment multiple genvars in the same generate statement?

इसका कारण यह है एक पाश के लिए उत्पन्न एक अंतर्निहित बनाता अनुमति नहीं है लूप वैरिएबल के लिए स्थानीयपरम स्टेटमेंट और लूप में आइटम्स को केवल उस स्थानीय स्पेक्ट्रम पर आधारित करता है। इसका मतलब है कि अगर लूप के अंदर कोई भी आइटम लूप के बाहर मान्य होना चाहिए तो जेनवर को स्थानीय स्पेक्ट्रम के रूप में घोषित किया गया था।

genvar i,j; 
//Level 1 
generate 
    j=0; 
    for (i=0;i<128;i=i+1) 
    begin: level1Comp 
    assign ci1[i] = minw(tc[j],tc[j+1]); 
    j = j+2; 
    end 
endgenerate 

//Done for each value of i 
genvar j; 
localparam integer i = i_for_each_iteration; 

j=0; //Not valid outside a procedural context so modelsim complains 
assign ci1[i] = minw(tc[j],tc[j+1]); 
j = j+2; //Also not valid outside a procedural context 

हो जाता है इस मामले आप एक 'निरंतर' मूल्य genvar एक स्पष्ट पैरामीटर पाश अंदर के प्रयोग पर निर्भर बना सकते हैं।

genvar i; 
//Level 1 
generate 
    for (i=0;i<128;i=i+1) 
    begin: level1Comp 
    localparam integer j = i*2; 
    assign ci1[i] = minw(tc[j],tc[j+1]); 
    end 
endgenerate 
+0

बहुत रोचक! क्या स्थानीय स्पेक्ट्रम हार्डवेयर में कुछ बनाता है? – Adam

+1

नहीं। स्थानीयपरैम स्थिरांक हैं जिनका उपयोग डिज़ाइन विस्तार के लिए किया जाता है। –

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