首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VHDL语言中嵌套的if (rising_edge(clk))语句

VHDL语言中嵌套的if (rising_edge(clk))语句
EN

Stack Overflow用户
提问于 2011-06-17 00:51:06
回答 4查看 6.9K关注 0票数 3

所以我遇到了一些必须复制的旧代码,但它不能用新的Xilinx编译器编译,所以我需要弄清楚它到底是做什么的。我有这样的东西:

代码语言:javascript
运行
复制
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给出了错误:“信号的逻辑由时钟控制,但似乎不是有效的顺序描述”

谢谢,任何帮助我们都很感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-17 02:44:46

如果它是在合成器故障/bug之前合成的。您如何确定代码与测试并确定为有效的代码相匹配?(听起来你只知道某人的话,这是之前合成的正确代码。)

现有的系统是否可以进行比较和测试?所涉及的工具版本是什么?您是否可以使用旧工具并验证它是否综合,以及它提供了哪些警告?根据您使用的版本,您可能能够使用合成报告、fpgaeditor (或类似)来查看实际合成的内容。

或者,您可以分析代码以了解设计者的意图,并使用有效的HDL复制该代码。

如果做不到这一点,你所剩下的就是反复试验和犯错。试着假设:

  1. 嵌套上升沿内的语句始终处于活动状态。(删除嵌套的上升沿if语句,使代码阻塞它。嵌套上升沿内的surrounded).
  2. The语句永远不会激活。删除整个嵌套的上升沿块。
  3. 你可以尝试一下,但我真的无法想象合成器怎么会产生2个周期的延迟。您可能会被迫尝试这种情况或其他更不可能的情况。很难预测这种失败模式是什么。
票数 1
EN

Stack Overflow用户

发布于 2011-06-17 18:48:26

如果第一个ifrising_edge(clk)true,那么在第二个嵌套的if中肯定也是如此。这假设在-- do some stuff部分中没有经过任何时间,情况大概就是这样。

因此,第二个if可以用if true then代替...或者确实被遗漏了!

票数 6
EN

Stack Overflow用户

发布于 2011-06-17 01:17:52

这在我见过的任何工具中都无法合成。不要这样做,即使是为了模拟。

第二个语句rising_edge不是顺序语句,例如赋值语句。这是一个涉及时间的陈述,所以这是你可以确定的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6375625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档