Verilog中的内存代码错误



我编写了Verilog程序来模拟向Temp的内存传输,但我遇到了很多错误,请帮忙。

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

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) 我不认为你的意思是tempmem一样是65x257阵列吗?你是说"64"吗?还是"63"?或者(见下文)"71"?你是说"256"吗?还是"255"?

ii)不能从程序块内部指定给wire

b) 这也需要是一个reg,因为(再次)不能从过程块内部指定给wire

reg    [7:0]       block_nr;

c) 此代码需要进入程序块(initialalways)内部。这取决于你的设计意图——我无法从你的代码片段中看出这一点。假设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。如果你真的打算合成这个,你离一个可行的解决方案还有很长的路要走。

不过,我必须强调,这些只是建议。不可能完全纠正设计意图未知的代码中的错误。

相关内容

  • 没有找到相关文章

最新更新