|
悬赏50资产已解决
数字电路的输入端是一个256hz的信号,我的数字电路每100秒要处理一次,数据量太大处理就需要用for循环(以下贴一小段,为接受信号,每一百个打包一下塞给下一个模块,用vivado行为级别仿真能出正确的结果,但是这么简单的一段已经无法导入了design_vision了,outsignal并不重要)
module tfor(input [10:0]insignal,
output wire [10:0]outsignal,
input rst,
input clk
);
reg [15:0]count;
reg [10:0]memory[25559:0];
reg [10:0]memory2[25559:0];
integer i;
always @(posedge clk or negedge rst)begin
if (rst==1'b0) begin
count<=0;
for(i=0;i<25600;i=i+1)begin
memory[ i ]<=0;
end
end
else if(count<25600)begin
memory[count][10:0]<=insignal[10:0];
count<=count+1;
end
else begin
for(i=0;i<25600;i=i+1)begin
memory2[ i ]<=memory[ i ];
end
count<=0;
end
end
assign outsignal=memory2[10];
endmodule
我在design_vision中file>>read之后,会提示我有error,说是到循环上限了,然后我用“set helin_while_loop_iterations 25601” 调高循环上限。
然后又报错栈到上限了,于是我用"limit stacksize 25601"调高栈的上限然后终于没有error了,然后design_vision给我报了几个warming,之后卡死了,试了几次都这样
我推测是循环可能写的不对,据说是不是要用generate for才能复制电路,但是我又查找资料说是always中不适合用generate for,所以应该怎么避免这个问题呢?是循环上限25600数字太大了吗?我代码里面又应该怎么避免这个问题呢?救救孩子
|
最佳答案
查看完整内容
Brother verilog is a Hardware Description Language and you are trying to use it like normal software language!
Think about what hardware your code is going to produce!
|