2013-03-22 10 views
5

मुझे पता है कि निम्नलिखित कोड पर काम नहीं करता है न, लेकिन यह अभ्यस्त संश्लेषण:शिफ्टिंग 2 डी सरणी Verilog

reg [7:0] FIFO [0:8]; 

[email protected](posedge clk) begin 
    if(wr & !rd & !full) begin 
     FIFO[0:8] <= {data_in, FIFO[1:8]}; 
    end 
end 

मैं फीफो अन्य तरीकों से भी सूचकांक की कोशिश की, लेकिन कुछ भी काम करता है। इस विषय को Xilinx फोरम पर मिला लेकिन मैं सिर्फ यह नहीं समझ सकता कि वह इसके साथ क्या कहना चाहता था।

http://forums.xilinx.com/t5/General-Technical-Discussion/2-dimensional-array-problem-in-Verilog/td-p/42368

धन्यवाद

उत्तर

4

आप कैसे पैक और अनपैक सरणियों काम का एक याद आती है समझ है: यहाँ की कड़ी है। मैं आपको IEEE1800-2012 अनुभाग 7.4.1, 7.4.2, 7.4.4, & 7.4.5 पढ़ने की सलाह देता हूं। तकनीकी रूप से आईईईई 1800 सिस्टम वेरिलोग के लिए है जो वेरिलोग का एक सुपर सेट है। दोनों स्थिर आकार वाले सरणी के लिए समान हैं और मुझे लगता है कि आईईईई 1800 में आईईईई 1364 के बाद बेहतर स्पष्टीकरण और उदाहरण हैं।

आप पहले से ही LRM की एक प्रति की जरूरत नहीं है, तो आप इसे मुक्त करने के लिए ieee.org वेबसाइट पर डाउनलोड कर सकते हैं: IEEE Std 1800-2012

प्रदान की कोड के लिए, आप एक पैक सरणी में प्रत्येक तत्व असाइन नहीं कर सकते इस तरह से। आपके पास दो विकल्प हैं: सरणी के अनपॅक किए गए हिस्से को असाइन करने के लिए फॉर-लूप का उपयोग करें, या अपनी सरणी को डबल पैक करें।

/* Using for-loop */ 
reg [7:0] FIFO [0:8]; 
integer i; 
[email protected](posedge clk) begin 
    if(wr & !rd & !full) begin 
     for(i = 8; i > 0; i=i-i) begin 
      FIFO[i] <= FIFO[i-1]; 
     end 
     FIFO[0] <= data_in; 
    end 
end 

/* Using double packed array */ 
reg [0:8] [7:0] FIFO; // NOTE: format and usage explained in IEEE1800-2012 7.4.5 
[email protected](posedge clk) begin 
    if(wr & !rd & !full) begin 
     FIFO[0:8] <= {data_in,FIFO[0:7]}; 
    end 
end 
+1

धन्यवाद, आपने मेरा दिन बचाया :)। मैं वास्तव में पैक और अनपॅक किए गए सरणी के बीच का अंतर नहीं जानता था। मैंने लूप के साथ इसे लागू करने के लिए औपचारिक रूप से कोशिश की लेकिन मैंने जेनवर का इस्तेमाल किया। डाउनलोड लिंक के लिए भी धन्यवाद मैं पूछने से पहले एलआरएम देखूँगा :)। – zsidanyi

1

निम्नलिखित कार्य भी करेगा। यह काम करता है कि फीफो पैक की एक अनपॅकेड सरणी है (reg [7: 0] फीफो [0: 8]) या पैक की एक पैक सरणी (reg [7: 0] [0: 8] फीफो)।

reg [7:0] FIFO [0:8]; 

[email protected](posedge clk) begin 
    if(wr & !rd & !full) begin 
     FIFO[0] <= data_in; 
     FIFO[1:8] <= FIFO[0:7]; 
    end 
end