这只是我试图包裹大脑的一个实验.
所以我有两个寄存器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;
Run Code Online (Sandbox Code Playgroud)
这是必要但不充分的.以上所有情况都是正确的,但00 => 01也是如此.实际上当r1 = r2 = 0时,它只是创建一个没有驱动器的导线循环,所以我认为结果是非确定性的.
有没有办法得到我正在寻找的结果而不包括在w1的赋值中的r2,反之亦然?(并且不引入新变量).基本上只是为了确保在线周期中,w1被拉高并且w2被拉低?
不,我认为没有额外的电线/信号并且没有交叉依赖性,没有干净的方法可以做到这一点.
顺便说一句,你的"循环线"通常被称为组合循环,避免这些是一个好习惯.
同样,即使您的模拟正常并且您的综合工具允许这样做,也应避免使用组合循环.