所以我遇到了一些我必须复制的旧代码,但它不能用新的Xilinx编译器编译,所以我需要弄清楚它的作用。我有这样的事情:
if rising_edge(clk) then
—do some things
if rising_edge(clk) then
—do some other things
end if
end if
到达内部if语句需要2个时钟周期,还是第二个if语句只是冗余?
此外,赛灵思还提出错误:“信号逻辑由时钟控制,但似乎不是有效的顺序描述”
谢谢,任何帮助表示赞赏。
答案 0 :(得分:6)
鉴于第一个rising_edge(clk)
的{{1}}为true
,肯定在第二个嵌套if
时仍然如此。假设在if
部分内没有时间过去,这可能就是这种情况。
因此,第二个if可以被-- do some stuff
替换......或者确实被遗漏了!
答案 1 :(得分:1)
在我见过的任何工具中,这都不会合成。即使是模拟,也不要这样做。
第二个语句rising_edge不是顺序语句,例如作业。这是一个涉及时间的陈述,所以你可以肯定。
答案 2 :(得分:1)
如果它在合成器故障/错误之前合成。你有多确定代码是否符合测试和确定的工作? (听起来你只有一个人的话,因为这是以前合成的正确代码。)
现有系统是否可用于比较和测试?涉及的工具版本是什么?您可以使用旧工具并验证它是否合成以及它提供了哪些警告?根据您使用的版本,您可以使用综合报告fpgaeditor(或类似)来查看实际合成的内容。
或者,您可以分析代码以查看设计人员的意图,并使用有效的HDL复制该代码。
没有你所剩下的就是反复试验。 试着假设:
答案 3 :(得分:0)
实际上你要推断的是嵌套的时钟进程。
这不应该合成,因为它不代表有意义的硬件。
您应该根据xst.pdf重写代码(例如,如果您使用Xilinx ISE)。
亲切的问候, Nikolaos Kavvadias