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. !== 비교는 상황에 맞게 사용하면 됩니다.
즐공하세요 :)
'개발 편의성을 위한 소소한 Tips > 04 질의 응답 정리' 카테고리의 다른 글
[Verilog HDL Q/A. 021] reset을 negative로 주시는 이유가 뭐죠? positive에는이미 clk이 할당되있어서그런가요? (0) | 2022.02.04 |
---|---|
[Verilog HDL Q/A. 020] Testbench 에서의 input 신호 handling. # 10, @(posedge clk) 에 따른 DUT 결과의 다름. (Verilog Race Condition) (0) | 2022.02.03 |
[FPGA Q/A. 018] BRAM의 1cycle delay (0) | 2022.01.25 |
[FPGA Q/A. 017] always @(*) 문장 질문 (0) | 2022.01.21 |
[FPGA Q/A. 016] 강의에 사용한 보드로 추가적으로 공부를 하고싶은데... (0) | 2021.12.23 |