2016-03-24 3 views
-3

私はVerilogプログラムを使ってTempへのメモリ転送をシミュレートしますが、エラーが多発しています。Verilogのメモリコードエラー

wire [64:0] temp,mem [0:256]; 
wire [15:0]  w0, w1, w2, w3; 
wire [7:0]  block_nr; 
integer i ; 



for (i=0; i <3; i = i + 1) begin 
    temp = mem [i]; 
    data_mem [i] = {block_nr, w0,w1, w2, w3 }; 
    block_nr = block_nr +1; 


end 
+1

どのようなエラーがありますか? forループは、最初のブロックまたはalwaysブロックのいずれかにする必要があります。 – toolic

+0

Temp = mem [i]のこのエラーは、レジスタのないtempへの手続き代入は許可されず、左側はreg/integer/time/genva、 –

+0

でなければなりません。利用される。どの割り当ても手順ブロックで行う必要があります。 regと配線の使用方法については、(http://stackoverflow.com/questions/5360508/using-wire-or-reg-with-input-or-output-in-verilog)を参照してください。 – sharvil111

答えて

0

5コードに多くの誤りがあります。これに代えて

A):

wire [64:0] temp,mem [0:256]; 

おそらくあなたは、このことを意味ここではいくつかは何ですか?

wire [64:0] mem [0:256]; // this might be a reg, too, one cannot tell from your code snippet 
reg  [64:0] temp; 

i)は、私はあなたが65x257配列だけでなく、memするtempを意味だと思いませんか?そして、あなたは "64"を意味しましたか?または "63"?または(下記参照) "71"?そして、あなたは "256"を意味しましたか?または "255"?

ii)手順ブロック内からwireに割り当てることはできません。

b)手順ブロック内からwireに割り当てることができないため、これもregである必要があります。

reg [7:0]  block_nr; 

C)このコードは、手続きブロック内で行くことinitialまたはalwaysのいずれかが必要です。どちらがあなたの設計意図にかかっていますか?私はコードのスニペットからこれを伝えることはできません。さんはinitialを想定してみましょう:

initial begin 
for (i=0; i <3; i = i + 1) begin 
    temp = mem [i]; 
    data_mem [i] = {block_nr, w0,w1, w2, w3 }; // what is "data_mem"? Did you mean "mem"? 
               // if you did mean "mem", did you notice that "{block_nr, w0,w1, w2, w3 }" is 72 bits wide? 
    block_nr = block_nr +1; 
    end 
end 

をこれが合成されることを意図されている場合は、initialを使用することはできません。これを合成するつもりなら、実用的なソリューションから遠く離れています。

しかし、これらは単なる提案に過ぎないことを強調する必要があります。設計意図がわからないコードのエラーを完全に修正することはできません。