본문 바로가기
HW Design/1. Verilog HDL Basic

[Verilog Tutorial] 1 - Introduction

by 한PU 2023. 10. 4.
728x90
반응형

(www.asic-world.com/verilog/veritut.html의 글을 읽고 번역한 내용입니다.)

 

모든 예제는 Icarus Verilog 시뮬레이터를 사용합니다.

 

Introduction -소개

Verilog는 HARDWARE DESCRIPTION LANGUAGE (HDL)이다. 즉, 하드웨어를 표현하기 위한 언어이다.

HDL은 digital system을 표현하기 위한 언어인데, 그 예로 network switch, microprocessor, memory, flip-flop 등이 있다.

HDL은 모든 level의 digital HW를 표현할 수 있다.

 

[그림1] D_FF schmatic

// D_Filp-Flop Code

module d_ff ( d, clk, q, q_bar);
input d, clk;
output q, q_bar;
wire d, clk;
reg q, q_bar;

always @ (posedge clk)
begin
	q <= d;
    q_bar <= !d;
end

endmodule

D_FF을 설명하고 있다. Verilog Code에서 D_FF가 작동하는 방법을 알 수 있다.

 

Verilog를 통해 Behavior Level, Register Transfer Level (RTL), Gate level, switch Level에서 디지털 설계를 할 수 있다.

Verilog를 사용하면 설계자는 동작 구성으로 설계를 간단히 표현할 수 있으며, 세부 디테일은 나중으로 미룰 수 있다.

 

엔지니어가 Verilog를 배우는데 얼마나 많은 시간이 걸릴까? 답은 "적어도 하나의 프로그래밍 언어를 안다면 일주일도 채 걸리지 않을 것"이다.

 

Design Styles -설계 방식

Verilog는 다른 HDL처럼 Bottom-Up Design 방법과 Top-Down Design 언어를 차용한다.

 

Bottom-Up Design

전통적인 설계 방식이다. 각 설계는 표준 Gate를 사용하여 Gate Level에서 수행된다.

새로운 설계가 복잡해짐에 따라, 이 방식을 차용하는 것이 거의 불가능해졌다.

새로운 시스템을 설계하기 위해선 수천개의 transistor로 이루어진 복잡한 ASIC 혹은, microprocessor를 구성해야 하는데, Bottom-Up Design은 이런 복잡한 시스템을 설계하기에 알맞지 않다.

 

Top-Down Design

거의 모든 엔지니어들이 선호하는 디자인 스타일이다. Top-Down 설계는 시범 테스트, 다양한 기술의 쉬운 변경, 구조화된 시스템을 설계하는 데에 많은 이점이 있다.

하지만 100% Top-Down 방식을 지향하는 것은 매우 어렵다는 단점도 존재한다. 대부분의 설계는 Bottom-Up 방식과 Top-Down 방식을 혼합하여, 두 방식의 핵심 요소를 구현한다.

[그림 2] Top-Down Design

Verilog Abstraction Levels -Verilog 추상화 수준

앞서 서술했듯, Verilog는 다양한 추상화 수준의 설계를 할 수 있다.

중요 세 가지

  • Behavioral level -행위 수준
  • Register-Transfer Level -레지스터 전송 수준 (RTL)
  • Gate level -게이트 수준

Behavioral level -행위 수준

이 level에선 동시 알고리즘 (행위)을 통해 시스템을 설명한다,

각 알고리즘은 순차적이다. 즉, 차례대로 실행되는 명령으로 구성된다.

Functions, Tasks, Always 블록 등이 주요 요소이다.

이 level에서는 설계의 구조적 구현을 고려하지 않는다.

 

Register-Transfer Level -레지스터 전송 수준 (RTL)

레지스터 전송 수준(Register-Transfer Level)을 사용한 설계는 연산과 레지스터 간의 데이터 전송을 통해 회로의 특성을 지정한다.

명시적인 clock이 사용된다. RTL 설계는 정확한 타이밍 경계를 포함한다: 연산은 특정 시간에 발생하도록 예약.

현대의 RTL 코드 정의 "합성 가능한 모든 코드 = RTL 코드"

 

Gate level -게이트 수준

이 level 시스템은 논리적 연결과 타이밍에 의해 설명된다.

모든 신호가 이산 신호이다. 논리값 ( 0 , 1 , X , Z ) 만을 가질 수 있다.

사용 가능한 연산은 미리 정의된 AND, OR, NOT 등의 Gate 이다.

Gate level code는 합성 도구 등의 도구로 생성되며, net-list는 gate level simultaion과 Back-end에 사용된다.

Gate level까지 모델링하는 것은 별로 좋지 않다.

 

728x90
반응형