gpt4 book ai didi

vhdl - HDL中的组合循环

转载 作者:行者123 更新时间:2023-12-03 23:49:28 24 4
gpt4 key购买 nike

这只是一个我正在尝试的实验。

所以我有两个寄存器 r1 r2 和两条线 w1 w2。我想要的是,如果两个r都是1,那么两个w都应该是1。如果一个r是1,对应的w应该是1,另一个应该是0。如果两个r都是0,w1应该是1,w2应该是0.

11=>11

10=>10

01=>01

00=>10

需要注意的是,我希望 w1 的分配不要直接包含 r2,反之亦然。所以,我有(例如在 Verilog 中——VHDL 的答案也很好)

assign w1 = r1 | !w2;
assign w2 = r2 | !w1;

这是必要的,但还不够。上述所有情况都为真,但 00=>01 也为真。实际上当r1=r2=0时,它只是创建了一个没有驱动程序的电线循环,所以我认为结果是不确定的。

有没有什么方法可以得到我正在寻找的结果而不在 w1 的分配中包含 r2,反之亦然? (并且没有引入新变量)。基本上只是为了确保在一个线周期中,w1 被拉高,w2 被拉低?

最佳答案

不,我认为没有额外的电线/信号并且没有您的交叉依赖,没有干净的方法可以做到这一点。

顺便说一句,您的“循环线”通常被称为组合循环,最好避免这些。

  1. 对于具有组合回路的 VHDL 模型的仿真,只要仿真器收敛到一个稳定点,即不再有信号值变化,结果是确定性的。如果信号值不断变化,那么您很可能会达到模拟器的迭代限制。我不知道 Verilog,但我认为它也是确定性的。
  2. 至于综合,工具要么拒绝此构造并引发错误,要么尝试处理此问题,这可能会对时序产生非常糟糕的影响。

同样,即使您的仿真没问题并且您的综合工具允许这样做,也应该避免组合循环。

关于vhdl - HDL中的组合循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11332363/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com