所以我遇到了一些必须复制的旧代码,但它不能用新的Xilinx编译器编译,所以我需要弄清楚它到底是做什么的。我有这样的东西:
if rising_edge(clk) then
—do some things
if rising_edge(clk) then
—do some other things
end if
end if
是否需要2个时钟周期才能到达内部的if语句,或者第二个if语句只是多余的?
此外,Xilinx给出了错误:“信号的逻辑由时钟控制,但似乎不是有效的顺序描述”
谢谢,任何帮助我们都很感激。
发布于 2011-06-17 02:44:46
如果它是在合成器故障/bug之前合成的。您如何确定代码与测试并确定为有效的代码相匹配?(听起来你只知道某人的话,这是之前合成的正确代码。)
现有的系统是否可以进行比较和测试?所涉及的工具版本是什么?您是否可以使用旧工具并验证它是否综合,以及它提供了哪些警告?根据您使用的版本,您可能能够使用合成报告、fpgaeditor (或类似)来查看实际合成的内容。
或者,您可以分析代码以了解设计者的意图,并使用有效的HDL复制该代码。
如果做不到这一点,你所剩下的就是反复试验和犯错。试着假设:
发布于 2011-06-17 18:48:26
如果第一个if
的rising_edge(clk)
为true
,那么在第二个嵌套的if
中肯定也是如此。这假设在-- do some stuff
部分中没有经过任何时间,情况大概就是这样。
因此,第二个if可以用if true then
代替...或者确实被遗漏了!
发布于 2011-06-17 01:17:52
这在我见过的任何工具中都无法合成。不要这样做,即使是为了模拟。
第二个语句rising_edge不是顺序语句,例如赋值语句。这是一个涉及时间的陈述,所以这是你可以确定的。
https://stackoverflow.com/questions/6375625
复制相似问题