728x90
728x90
요약
- ~(비트 NOT) + 사이즈 안 줬던 파라미터 → 32 bit로 확장돼서 사고 난다.
- !(논리 NOT) 은 1-bit 불리언이므로 조건식엔 얘가 안전하다.
- 파라미터/상수엔 반드시 bit/logic 타입이나 [0:0] 식 크기를 붙여라.
- 실무에서 if (~USE_EN || valid) 같은 식은 “항상 1”로 고정될 수 있다.
- → 시뮬 파형 안 뜨고, 합성 땐 로직 통채로 날아감.
👶 왜 이런 일이?
상황 시뮬레이터 내부에서 벌어지는 일
parameter USE_EN = 1; (폭 없음) | 32-bit 정수 32'h0000_0001 로 변신 |
~USE_EN | 32'hFFFF_FFFE (LSB만 0) |
`~USE_EN |
→ valid가 바뀌어도 결과는 1
→ 파형 평평, 디버그 지옥.
320x100
🛠️ 실전 회피법
체크리스트 한 줄 팁
논리 조건 | !USE_EN && ready 처럼 ! 쓰기 |
폭 명시 | parameter logic USE_EN = 1'b1; |
슬라이스 | ~USE_EN[0] 처럼 필요한 비트만 |
캐스트 | ~$unsigned(USE_EN) or ~{1'b0, USE_EN} |
🧐 ~ vs ! 10초 비교
~ 비트 NOT ! 논리 NOT
결과 폭 | 입력과 동일 | 항상 1-bit |
용도 | 마스크 뒤집기·버스 인버터 | 조건 부정, enable/disable |
X/Z 처리 | 그대로 뒤집음 | 결과 1’bX |
폭 함정 | 있음 (unsized → 32 bit) | 거의 없음 |
✅ 실무 템플릿
module foo
#(parameter bit USE_EN = 1) // 크기/타입 명시!
(
input logic clk,
input logic valid,
output logic out
);
// 조건엔 항상 논리 NOT
assign out = !USE_EN || valid;
endmodule
한 줄 요약:
“폭 없는 상수 + ~ = 불길한 조합”
폭 붙이거나 !로 갈아타라 — 이거면 시뮬/합성 불일치 끝! 💯
728x90
본문은 chatgpt를 통해 내용을 가독성 좋게 요약하였습니다.
728x90
반응형
'공부 > Verilog' 카테고리의 다른 글
Combinational logic delay (2) | 2022.08.26 |
---|---|
Verilog - Assign & Always 차이 (0) | 2022.08.22 |
[그냥 공부]#2 signed & unsigned (1) | 2022.03.06 |
[그냥 공부]#1 등가 연산자 , 타이밍 제어 (0) | 2022.03.01 |
플립플롭(Flip - Flop) S-R , D , J-K , T (0) | 2022.02.26 |