verilog 문법 관련 질문 드립니다.
wire a_and_b;
assign a_and_b = a&b;
이런 식으로 wire를 선언하고 assign을 하는 것과
wire a_and_b = a & b
이런 식으로 wire 선언하면서 값을 할당하는 것이 합성할 때 차이가 없나요? 둘 중에 편한 것을 사용하면 되나요?
두 번째 방식을 사용하면 합성할 때 문제가 생길 수도 있다고 들은 것 같아서 질문드립니다.
Answer 1
0
안녕하세요, 답변 남겨드립니다.
작성해주신 두 가지 Verilog 코드 스타일
wire a_and_b;
assign a_and_b = a & b;
와
wire a_and_b = a & b;
는 합성(Synthesis) 결과 측면에서는 동일한 하드웨어 구조를 만듭니다. 즉, 논리 게이트 수준에서 보면 단순히 a & b를 구현하는 AND 게이트가 생성되므로 RTL에서 차이는 없습니다.
다만 차이가 발생하는 부분은 Verilog 문법 해석 방식과 합성 툴의 지원 범위입니다.
첫 번째 방식은 전통적인 Verilog 스타일로, wire 신호를 선언한 뒤 assign을 통해 값을 바인딩하는 구조입니다. 대부분의 합성 툴과 시뮬레이터에서 명확하게 지원되며, RTL 코딩 가이드라인에서도 가장 많이 권장되는 방식입니다. 예를 들어 ASIC 설계 시 Synopsys Design Compiler, Cadence Genus 같은 툴에서 안정적으로 합성됩니다.
두 번째 방식은 Verilog-2001 이후 문법에서 허용된 wire 선언과 동시에 continuous assignment 방식입니다. 합성 툴에 따라 지원이 다르거나 제한이 있을 수 있으며, 특히 구형 합성기나 Lint 툴에서는 warning을 발생시키는 경우가 있습니다. 예를 들어, Mentor Questa Lint 같은 환경에서는 일부 rule set에서 "declaration with assignment is discouraged"라는 메시지를 띄우기도 합니다.
실무적으로는 팀에서 정한 코딩 컨벤션을 따르는 것이 중요합니다. 예를 들어 삼성전자나 하이닉스 RTL 코딩 가이드라인에서는 첫 번째 방식(assign)을 권장하는 경우가 많습니다. 이유는 코드의 가독성과 디버깅 편의성 때문입니다. 예를 들어,
wire a_and_b = a & b;
wire c_and_d = c & d;
wire result = a_and_b | c_and_d;
와 같이 연속적으로 선언·할당하는 방식은 깔끔해 보이지만, signal dependency 추적이나 gate-level netlist 확인 시 assign 구문이 명확한 연결을 보여주는 장점이 있습니다.
정리하자면, 합성 결과 자체에는 차이가 없으므로 둘 다 사용해도 하드웨어적으로 동일합니다. 다만 합성기 호환성과 팀 코딩 스타일을 고려할 때는 첫 번째 방식(assign 사용)이 더 안정적이고 널리 권장됩니다. 실제 대규모 SoC 프로젝트에서는 Lint tool, CDC tool, Formal tool 등이 모두 assign 구문에 최적화된 parsing rule을 적용하는 경우가 많습니다.
[HDL 32장-2부] 참고 링크 관련
1
36
2
[LTspice 질문] PSRR 측정 방법 질문드립니다.
0
35
2
강의 만료일 연장 신청
0
33
2
기초예제 파일 불러오기 문의
0
26
2
Zybo 환경에서 PL RTL UART 보드 검증 방법
0
31
2
혹시 별도의 자료가 있나요?
0
34
2
queue assignment pattern 문의 건
0
33
1
Differential Amp의 4가지 종류
0
42
1
Active load differential amp 질문
0
61
1
single-stage amp 시뮬레이션 해보기 회차에 mosfet 정보가 안뜹니다
0
91
2
SPICE Output Log에 대한 질문
0
74
2
active load differential amp 설계
0
73
2
16_bitRCA 테스트벤치 관련질문드립니다.
0
76
2
4-Input NAND Gate 모듈 코드에 대해 질문 드립니다.
0
124
2
Active load Diffrential amp 설계와 관련하여 질문이 있습니다.
0
101
5
module FA_CLA_1b assign 구문 질문
0
73
2
single stage amp 시뮬레이션 질문드립니다
0
83
2
Slew rate 질문드립니다
0
262
2
view에 mosfet 정보가 안뜨고 있습니다.
0
128
2
Trade Off 강의에서 궁금한 점이 있습니다.
0
175
2
부품 심볼이 없습니다.
0
107
1
여기서 강사님이 보여주신 내용대로 안나옵니다/
0
167
2
강의 질문드립니다.
0
179
2
메모리 제품 검증에서 FPGA 활용
0
234
2

