HDL代码中X是用还是不用?
最近一直在想一个问题:在写代码的时候是在代码中允许使用X呢?还是不用?比如case语句:假设b位宽为[1:0],case的输出为[1:0] c;我这样写代码:
case(b)
2'b00: ....;
2'b01: .....;
2'b10: ....;
2'b11: ....;
default:c=2'bxx;
endcase
还是
case(b)
2'b00: ....;
2'b01: .....;
2'b10: ....;
2'b11: ....;
default:c=2'b00;
endcase
好?
我个人感觉所有状态写完的话,第一种好,因为X态可以传递下去,如果c输出是X,那么输入就一定是X。有利于测试是不是?
我还以为你想用casex呢,casex要谨慎点,
这样写法0或者x都没有问题的,严格来说,与case都没啥关系,只是普通的赋值。
另外,case条件已经写全了,连加不加default都没关系,习惯性地加一下。
最好不用,不利于仿真
全case的话毫无疑问地该用X,有利于前后仿一致。
要写成X-Propagation,不要写X-Termination或X-Insertion。老生常谈了。
你的第一个例子就是X-Propagation,第二个例子是X-Termination。第一个例子如果default以外的条件不全,就是X-Insertion。
X-Propagation:输入有不定态,输出就一定有不定态;输出没有不定态,输出就一定没有不定态
X-Termination:输入有不定态,输出可能没有不定态
X-Insertion: 输入没有不定态,输出可能有不定态
谢谢,了解了!
想问一下,如果除default外条件不全时,这时default应该给固定值还是X,如果给X就是X-insertion,那么应该给固定值?即使会带来面积和逻辑复杂度。是这样吗?前辈。
还是说写成default:a<=a;综合为一个latch。
learning
最好的方法:写成最简门级描述。
比如Onehot Mux就写成Sum-of-Product,Onehot to Binary Encoding就写成OR Tree,等等...
最好别用,有些综合软件会报警告
The "X" is unknown value that is for simulation, but the real system doesn't has unknown state.
00好点吧,给个确定态
最有一个分支改成default不久行了
fjdljsaflsajfljsalkfjsalkjflksa
