liminfo

Verilog Reference

Verilog/SystemVerilog 문법/모듈/테스트벤치 레퍼런스

23개 결과

Verilog Reference 소개

Verilog 레퍼런스는 Verilog HDL의 기본 구문(모듈 선언, wire/reg 타입, 숫자 리터럴, 파라미터, assign 문, 연산자), 순차 논리 패턴(always @(posedge clk) 플립플롭, 조합 논리 always @(*) 블록, if-else/case 문, 카운터, FSM, 시프트 레지스터), 구조적 설계(모듈 인스턴스화, generate 구문, 메모리 추론), 테스트벤치 기법, 합성 지시어를 포괄하는 종합 검색 가이드입니다.

복사 가능한 완전한 코드 예제와 함께 다섯 가지 카테고리로 정리된 20개의 상세 항목을 포함합니다. 동기/비동기 리셋 D 플립플롭, casex를 사용한 우선순위 인코더, 3-블록 FSM 상태 머신, SIPO/PISO 시프트 레지스터, 동기식 단일/이중 포트 RAM 추론, generate 루프를 이용한 파라미터화된 모듈 인스턴스화, CDC 2-FF 동기화기, Xilinx/Altera 합성 속성 등 실무 RTL 패턴을 보여줍니다.

Xilinx Vivado나 Intel Quartus용 FPGA 로직 설계, ASIC 합성을 위한 RTL 작성, 자기 점검 어설션이 포함된 테스트벤치 구축, 디지털 설계 기초 학습 등 어떤 작업이든 모든 Verilog 구문에 실용적인 예제와 함께 즉시 접근할 수 있습니다. 서버 처리 없이 브라우저에서 완전히 동작합니다.

주요 기능

  • 포트 정의, wire/reg 타입, 숫자 리터럴(2진수, 16진수, 10진수), parameter/localparam 상수를 포함한 모듈 선언 구문
  • D 플립플롭(동기/비동기 리셋, 인에이블), always @(posedge clk) 블록의 논블로킹 할당, 카운터 설계를 포함한 순차 논리 패턴
  • always @(*) 블록, 멀티플렉서, 우선순위 인코더, 디코더, 래치 방지 규칙을 다루는 조합 논리 레퍼런스
  • localparam 상태 인코딩을 사용한 표준 3-블록 패턴(상태 레지스터, 다음 상태 로직, 출력 로직) FSM 설계 템플릿
  • 이름 기반 포트 인스턴스화, 파라미터 재정의, generate for/if/case 구문, 단일/이중 포트 RAM 추론을 다루는 구조적 설계 예제
  • 클럭 생성, DUT 인스턴스화, 자극 타이밍, 시스템 태스크($display, $monitor, $readmemh), 자기 점검 패턴을 포함한 테스트벤치 템플릿
  • 래치 방지, 블로킹/논블로킹 할당 가이드라인, CDC 2-FF 동기화기, FPGA 벤더 속성을 포함한 합성 코딩 규칙
  • 산술, 논리, 비트, 축약, 시프트, 비교 연산자와 우선순위 정보를 포함한 전체 연산자 레퍼런스

자주 묻는 질문

이 레퍼런스에서 어떤 Verilog 주제를 다루나요?

기본 문법(module, wire/reg, 리터럴, 파라미터, assign, 연산자), 순차 논리(플립플롭, always 블록, if-else/case, 카운터, FSM, 시프트 레지스터), 구조적 설계(인스턴스화, generate, 메모리), 테스트벤치(구조, initial 블록, 시스템 태스크, 어설션), 합성 지시어(코딩 규칙, CDC, 속성, 타이밍) 다섯 가지 카테고리를 다룹니다.

Verilog에서 wire와 reg는 언제 사용하나요?

wire는 연속 할당(assign 문)과 모듈 출력 연결에 사용합니다. reg는 always 블록 내부에서 값을 할당할 때 사용합니다. reg가 항상 하드웨어 레지스터를 추론하는 것은 아닙니다. 조합 논리 always @(*) 블록에서 reg 변수는 조합 논리로 합성됩니다. 핵심 규칙은 assign에는 wire, always에는 reg입니다.

Verilog에서 올바른 FSM은 어떻게 작성하나요?

표준 3-블록 FSM 패턴을 사용합니다. 블록 1은 상태 레지스터를 위한 동기 always 블록(always @(posedge clk)), 블록 2는 case 문을 포함한 다음 상태 로직용 조합 always @(*) 블록, 블록 3은 출력 로직용 조합 always 블록입니다. 상태는 localparam으로 정의하고, 래치 방지를 위해 next_state에 반드시 기본 할당을 포함해야 합니다.

블로킹 할당과 논블로킹 할당의 차이점은 무엇인가요?

순차 논리 always @(posedge clk) 블록에서는 논블로킹 할당(<=)을 사용하여 플립플롭 동작을 올바르게 모델링합니다. 조합 논리 always @(*) 블록에서는 블로킹 할당(=)을 사용합니다. 같은 블록에서 혼용하면 시뮬레이션과 합성 결과가 불일치할 수 있습니다. 가장 중요한 Verilog 코딩 규칙 중 하나입니다.

조합 논리에서 의도치 않은 래치를 어떻게 방지하나요?

세 가지 규칙으로 래치를 방지합니다. (1) 조합 always @(*) 블록 시작 부분에 기본값을 할당, (2) case 문에 항상 default 포함, (3) 모든 가능한 경로에서 모든 출력이 할당되도록 보장합니다. 레퍼런스에 각 방지 기법의 예제가 포함되어 있습니다.

Verilog 테스트벤치는 어떻게 작성하나요?

테스트벤치 모듈은 포트가 없습니다. DUT 입력에는 reg 시그널, 출력에는 wire 시그널을 선언합니다. "always #5 clk = ~clk"로 클럭을 생성합니다. initial 블록으로 리셋 시퀀스와 자극을 작성하고, $dumpfile/$dumpvars로 파형을 출력합니다. 자기 점검 어설션이 포함된 완전한 테스트벤치 템플릿을 제공합니다.

CDC(클럭 도메인 교차) 기법에는 어떤 것이 있나요?

단일 비트 신호에는 2-FF 동기화기를 사용합니다. 목적지 클럭 도메인에 두 개의 플립플롭을 배치하여 메타스태이빌리티 확률을 줄입니다. 다중 비트 신호에는 그레이코드 인코딩이나 비동기 FIFO를 사용합니다. 펄스 전송에는 토글 기반 핸드셰이크 동기화기를 사용합니다.

어떤 합성 속성을 다루나요?

Xilinx 속성(dont_touch, mark_debug, BRAM/LUTRAM 선택용 ram_style, 원핫/바이너리용 fsm_encoding), Intel/Altera 속성(syn_encoding), 일반 합성 프라그마(시뮬레이션 전용 코드를 위한 translate_off/on, case 최적화용 full_case/parallel_case)를 다룹니다.