2010-10-17 10 views
6

में reg के लिए पूर्णांक असाइन करें मुझे इस Verilog कोड में समस्याएं हैं। असल में, यह मुझे Y = 3'di कथन नहीं करने देगा। असल में, मुझे Y बराबर i चाहिए। मुझे यकीन है कि समस्या i है। तो, Verilog में ऐसा करने का कोई तरीका है? इसके अलावा, W 8 बिट्स के साथ एक इनपुट है (दूसरे शब्दों में, W[7:0])।Verilog

for (i = 7; i >= 0; i = i - 1) 
begin 
    if(W[i]) Y=3'di; 
end 

धन्यवाद।

+1

'W' और' Y' की परिभाषा क्या है? – ChaosPandion

+1

इनपुट [7: 0] डब्ल्यू, आउटपुट रेग [2: 0] वाई – DemonicImpact

उत्तर

9

आप ब्रैकेट का उपयोग करके बिट्स का चयन कर सकते हैं।

for (i = 7; i >= 0; i = i - 1) 
begin 
    if(W[i]) Y = i[2:0]; 
end 

लेकिन यह भी नहीं आवश्यक हो तो i एक पूर्णांक घोषित किया गया था। हालांकि 0 बिटमें स्वचालित रूप से कई बिट्स फिट होंगे और आप केवल एलएसबी चाहते थे।

+0

धन्यवाद! इसके अलावा, बस स्पष्ट करने के लिए, मैं [2] सबसे महत्वपूर्ण बिट है, है ना? – DemonicImpact

+0

इस मामले में, हाँ। –

2

आप यहाँ एक case कथन का उपयोग करना चाहते हैं हो सकता है:

case (1'b1) 
    W[0]: Y=3'd0; 
    W[1]: Y=3'd1; 
    W[2]: Y=3'd2; 
    W[3]: Y=3'd3; 
    W[4]: Y=3'd4; 
    W[5]: Y=3'd5; 
    W[6]: Y=3'd6; 
    W[7]: Y=3'd7; 
    default: Y=3'd0; // to avoid inferring a latch when W==8'd0 
endcase 

यह आपके कोड के पाठकों के लिए प्राथमिकता और अधिक स्पष्ट कर देता है।

+0

यह सिर्फ उलझन में है और स्केलेबल नहीं है। यह मेरे साथ कोड समीक्षा के माध्यम से नहीं बनायेगा। –

+0

मुझे यह देखने में दिलचस्पी होगी कि आप जो भी दृष्टिकोण सोचते हैं वह बेहतर है। जैसा कि मैंने कहा था, 'केस' दृष्टिकोण जो मैंने उपयोग किया है, पाठकों को प्राथमिकता स्पष्ट करता है, और आईएमओ उपरोक्त 'लूप दृष्टिकोण' से कहीं अधिक स्पष्ट है, जिनमें से प्रत्येक संभावित रूप से वाई को कई असाइनमेंट करता है, जिसमें प्रत्येक लगातार असाइनमेंट पिछले ओवरराइडिंग के साथ होता है। विशेष रूप से कम अनुभवी इंजीनियरों के लिए, कोड के आकस्मिक पढ़ने के दौरान अनदेखा करना एक आसान बात है। 'I> = 0' की निकास स्थितियों वाले लूपों में बिना हस्ताक्षर किए गए चर के अनजान उपयोग इस दृष्टिकोण के साथ एक और आम नुकसान है। – jlf

+0

स्केलेबिलिटी के लिए, यह केवल 3-बिट प्राथमिकता एन्कोडर है; स्केलेबिलिटी के लिए डिज़ाइन केवल उन चीजों में ही है जो स्केल करने की आवश्यकता हो सकती है और केवल जरूरी होने पर स्पष्टता के नुकसान के लिए, जो यहां नहीं है। – jlf

0

मुझे पता चला है कि "फॉर-लूप" दिनचर्या करने के लिए राज्य मशीनों का उपयोग करना बेहतर है। कुछ इस तरह:

module yourthing(clk, W, i, Y) 
input clk; 
input [7:0] W; 
output [2:0] Y; 
reg [2:0] i; 

[email protected](posedge clk) begin 
    if(reset) begin 
    i = 3'd7; 
    Y = 3'd0; 
    end 

    else begin 
    case(i) 
     3'd7 : begin 
       if(W[i]) Y = i; 
       i = 3'd6; 
      end 
     3'd6 : begin 
       if(W[i]) Y = i; 
       i = 3'd5; 
      end 
     3'd5 : begin 
       if(W[i]) Y = i; 
       i = 3'd4; 
      end 
     3'd4 : begin 
       if(W[i]) Y = i; 
       i = 3'd3; 
      end 
     3'd3 : begin 
       if(W[i]) Y = i; 
       i = 3'd2; 
      end 
     3'd2 : begin 
       if(W[i]) Y = i; 
       i = 3'd1; 
      end 
     3'd1 : begin 
       if(W[i]) Y = i; 
       i = 3'd0; 
      end 
     3'd0 : begin 
       if(W[i]) Y = i; 
       i = 3'd7; 
      end 
    endcase 
    end 
endmodule 

आशा इस मदद करता है ...

+0

वही बात नहीं है। यह कई घड़ी चक्र ले जाएगा। –

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