我编写了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) 我不认为你的意思是temp
和mem
一样是65x257阵列吗?你是说"64"吗?还是"63"?或者(见下文)"71"?你是说"256"吗?还是"255"?
ii)不能从程序块内部指定给wire
。
b) 这也需要是一个reg
,因为(再次)不能从过程块内部指定给wire
。
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
。如果你真的打算合成这个,你离一个可行的解决方案还有很长的路要走。
不过,我必须强调,这些只是建议。不可能完全纠正设计意图未知的代码中的错误。