개발 편의성을 위한 소소한 Tips/04 질의 응답 정리

[Verilog HDL Q/A. 019] Equality operators ==, != , ===, !===

반응형

Q

testbench에서 if의 조건문에서 !== 의 연산자를 사용해주셨는데 !== 보통 잘 사용하지 않는 걸로 권장하는 걸로 알고 있습니다! 왜 굳이 != 말고 !==을 사용하셨는지 궁금합니다!

 

A

시간이 있어서 미리 작성드립니다.

IEEE Std (1800-2009), section 11.4.5 "Equality operators"

For the logical equality and logical inequality operators (== and !=), if, due to unknown or high-impedance bits in the operands, the relation is ambiguous, then the result shall be a 1-bit unknown value (x).



!= 는 logical 0,1 만을 비교하게됩니다.

HW 는 0,1 뿐만아니라, z, x 의 state 도 존재하죠.

!== 연산은 나머지 z,x 의 상태또한 비교하게 됩니다.

 

저는 필요에 따라서 써야한다 생각하구요. 실무에서 !== 비교로 버그를 Fix 했던 적이 있었습니다. 

"x" 는 초기화를 해주지 않았을때, 발생하는 case 이구요.

x 는 0,1 상관없는 값이죠. 즉 x type 이 포함된 연산을 하게 되면, 잘못된 결과가 출력되게 됩니다. ex) 1+1 = 2,  x+1 = ? 

대신 !== 는 4가지 Type 을 check 함으로 상대적으로 != 대비 simulation 속도는 느려지는 단점이 존재하겠네요. 아니면 x 를 포함에도 설계자가 보장한다, 이러면 != 이거 쓰셔도 되구요.

 

결론

1. 지금 예제코드에서는 != 이걸로 하셔도 돼요. (x 가 들어올일이 없으니..)

2. !== 비교는 상황에 맞게 사용하면 됩니다.

즐공하세요 :)

반응형