verilog中的for循环综合成Latch
(2011-03-25 13:37:18)
标签:
杂谈 |
分类: FPGA |
for循环是可以综合的,可是在异步复位中的for循环综合出来居然把循环变量综合成了latch,
编译器对语言的解释真是让人无语。
integer itor;
always @ (posedge clk or negedge rst_n)
if (!rst_n) begin
for (itor = 0; itor < MAX; itor = itor+1)
begin
mem[itor] <= 0;
end
end
else begin
mem[cnt] <= ...;
...
end
在这样的一个语句里面,变量itor会被综合成latch,主要原因是因为它在一个异步复位里面,如果是同步上升沿它就会按照我们预定的样子展开。
怎么解决呢?如果MAX是个预定好的数字,那就按照笨办法展开……如果MAX是个parameter,展开也没办法,解决办法之一是在process外面套generate,然后process里的else寻址部分再做些修改。
genvar itor;
generate
for (itor = 0; itor < MAX; itor = itor+1) begin :
unwrap
always @ (posedge clk or negedge rst_n)
if (!rst_n) begin
mem[itor] <= 0;
end
else begin
if (cnt == itor) begin
mem[itor] <= ...;
...
end
end
end
endgenerate
其实觉得这种方法也太绕,期待牛人指点啊。。。
前一篇:Matlab产生随机数
后一篇:好吧,还是PDCCH