加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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
其实觉得这种方法也太绕,期待牛人指点啊。。。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有