这只是一个实验,我正在试着把我的大脑包裹起来。
所以我有两个寄存器,两条线,r1,r2,w1,w2。我想要的是,如果两个r都是1,那么两个w都应该是1,如果一个r是1,那么对应的w应该是1,而另一个应该是0。如果r's都为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被拉低?
发布于 2012-07-05 00:15:39
不,我认为如果没有额外的线路/信号和交叉依赖,就没有干净的方法来做到这一点。
顺便说一下,您的“循环线”通常被称为组合循环,避免这种情况是一种很好的做法。
同样,即使您的模拟是ok的,并且您的合成工具允许这样做,也应该避免组合循环。
发布于 2012-07-06 06:48:23
您当前拥有的非常类似于SR闩锁,因此它具有亚稳态条件(也称为竞争条件)。
从上面的真值表来看,看起来w2应该只设置为r2。assign w2 = r2;
这一变化应该会修复您的竞争条件;尽管如上所述,但要小心组合逻辑造成的巨大限制。
https://stackoverflow.com/questions/11332363
复制相似问题