今日,在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,是他的留言让我一下子明白过来!
文章评论(0条评论)
登录后参与讨论