wind330

再辨For...Loop语句

0
阅读(1782)

今日,在Modelsim仿真工程中有如下一段代码(注意:原先代码中使用的是注释部分代码,而不是For…Generate)。


改进后代码


原始代码

当使用注释代码进行仿真时,始终无法得到正确的信号延时链,得到的一堆不确定值(如下图),于是,使出浑身,从源头至结尾地地毯式搜索才把问题确定到上述代码(惭愧啊!!)。


使用修改后的代码:


以前写过一篇文章,For…Loop的可综合化分析, 里面描述了For…Loop在组合逻辑上的应用,也有写到“注意:FOR ...GENERATE 和FOR...LOOP的语句不同,在FOR ...GENERATE语句中所列举的是并行处理语句。因此,内部语句不是按书写顺序执行的,而是并行执行的,这样的语句中就不能使用EXIT语句和 NEXT语句。”

也就是说:fvh_chain(0)~fvh_chain(5)相当于是同一个信号,没有产生所想的延时,而最终fvh_chain(5)也没有综合成寄存器,所以造成Modelsim仿真错误。

最后,在这里感谢一下coyoo,是他的留言让我一下子明白过来!