Verilog HDL - Verilog HDL을 이용한 디지털 시스템 설계
Verilog HDL은 하드웨어를 기술하는 언어입니다. 즉 설계하고자 하는 하드웨어의 기능을 컴퓨터가 이해할 수 있는 언어로 표현하고, 컴퓨터를 이용한 회로 설계를 통해 검증을 효율적으로 완료하기 위한 언어입니다. 따라서 하드웨어의 특성 이해를 통해 하드웨어의 동작을 컴퓨터가 잘 이해할 수 있는 코딩 스타일이 필요합니다. 컴퓨터는 우리가 기술한 Verilog HDL 코드를 충실히 이행할 준비가 되어 있지만 사용자가 잘못 기술하여 문제가 생깁니다. 이 책은 Verilog HDL을 이용하여 디지털 하드웨어를 구현하고자 하는 설계자가 위에 말한 네 가지의 문제점을 겪지 않도록 도움을 주고자 합니다.
1장은 디지털 시스템(Digital System)에 대하여 설명합니다. 디지털 시스템의 2진수와 비트, 바이트, 워드에 대하여 정의하고, 스위칭 소자 및 AND, OR, NOT 게이트를 소개합니다. 논리값 1과 0을 구분하는 논리 레벨을 이해하고, CMOS 기술로 구현된 게이트의 특성을 알아봅니다. 마지막으로 FPGA와 ASIC에 대하여 설명합니다.
2장은 디지털 시스템에서 사용하는 부울 대수(Boolean Algebra)를 간단히 설명합니다. 공리(Axiom)를 정의하고 정리(Theorem)의 특성을 게이트 회로를 이용하여 이해합니다. 진리표를 SOP와 POS 형태의 논리식으로 나타내는 방법과, 논리식을 간단하게 할 수 있는 카노맵을 소개합니다.
3장은 Verilog HDL과 기본 문법을 소개합니다. 모듈과 입출력을 정의하는 방법, 데이터를 표현하는 방법, 지원하는 연산자를 사용하는 방법, 여러 개의 모듈을 연결하는 방법, 모델링 방법 등을 정리합니다. 또한, Verilog HDL을 이용하여 기술한 회로를 검증하기 위한 테스트 벤치 작성 방법을 설명합니다. 설계 검증 시 유용하게 사용할 수 있는 시스템 태스크를 살펴봅니다.
4장은 조합회로(Combinational Logic)를 Verilog HDL 코드와 함께 설명합니다. 먼저 게이트를 간단한 조합회로의 동작적(Behavioral) 기술과 구조적(Structural) 기술 방법을 살펴봅니다. 조합회로 기술에 사용되는 assign과 always의 특징 및 if-else, case문의 기술 방법을 소개합니다. 디지털 시스템 설계에서 자주 사용하는 멀티플렉서, 인코더, 디코더 회로의 동작을 설명하고, Verilog HDL로 기술합니다. 산술 연산회로인 반가산기, 전가산기, Carry Look-Ahead 덧셈기, Prefix 덧셈기의 원리를 설명합니다. 마지막으로 조합회로의 테스트 벤치 작성 방법을 소개합니다.
5장은 순차회로(Sequential Logic)를 Verilog HDL 코드와 함께 설명합니다. 먼저 순차회로에 꼭 필요한 기억 소자를 소개합니다. 순차회로 기술에서 주의해야 하는 Non-blocking과 Blocking 표현 방법의 차이를 하드웨어의 합성 결과를 이용하여 이해합니다. 동기 순차회로에 대하여 알아보고, 대표적인 동기 순차회로인 FSM 설계 과정을 카운터와 신호등 제어기 FSM 설계를 이용하여 설명합니다. 또한, FSM 기술에 사용하기 편한 Verilog HDL 코드를 소개합니다. 마지막으로 자주 사용되는 시프트 레지스터의 동작과 Verilog HDL코드를 살펴봅니다.
6장은 조합회로와 순차회로의 타이밍(Timing)에 대하여 설명합니다. 전파 지연(Propagation Delay)과 오염 지연(Contamination Delay)을 정의하고 글리치(Glitch)에 대하여 알아봅니다. 동기 순차회로의 동작 주파수를 결정하는 방법과 셋업(setup) 타임과 홀드(hold) 타임 위배(violation)에 대하여 설명합니다. 회로의 출력 형태에 따라 설계 시 고려해야 할 사항을 설명하고, Verilog HDL에서 시간 지연(delay)을 표현하는 방법을 소개합니다.
7장에서는 게이트와 브레드 보드를 이용하여 세그먼트 디코더, 카운터, 자판기 FSM을 설계합니다. 브레드 보드에 IC를 꽂고 전선으로 연결하여 설계한 회로의 기능을 검증합니다. 실습을 통해서 하드웨어의 특성을 이해할 수 있기를 기대합니다. 브레드 보드에서 동작하는 여러 개의 IC와 내부에 내장된 게이트와 플립플롭이 모두 동시에 동작하는 하드웨어의 동시성을 이해합니다.
8장에서는 Verilog HDL을 이용하여 하드웨어를 기술하고, 시뮬레이션하여 기술한 코드를 검증합니다. 또한, 기능이 검증된 Verilog HDL 코드를 FPGA에 구현하는 과정을 소개합니다. 세그먼트 디코더 회로를 Verilog HDL로 기술합니다. 모델심(Modelsim)을 이용하여 시뮬레이션하는 방법과, Quartus II 프로그램을 사용하여 Intel사의 FPGA에 구현하는 과정을 소개합니다. 6개의 세그먼트를 구동하기 위한 디스플레이 컨트롤러 회로를 설계하고, 이 회로를 이용하여 스톱워치 설계에 재사용합니다. 프로세서의 구성 요소인 ALU와 기본 통신 채널인 UART 송수신 회로를 설계하고 구현합니다. 마지막으로 설계한 회로를 재사용하여 간단한 마이크로프로세서를 구현합니다.
Verilog HDL은 이 책에 설명한 내용 외에도 많은 편리한 명령어와 사용 방법이 있습니다. 그러나 초보자들과 입문자들은 이 책에 언급된 내용만으로도 충분히 디지털 회로를 기술할 수 있습니다. 이 책의 내용을 숙지하면 조금은 더 많은 타이핑을 해야 할 수도 있지만, 좋은 코딩 스타일의 Verilog HDL 코드를 작성할 수 있습니다. Verilog HDL은 모든 구성 요소가 동시에 동작하는 하드웨어를 기술하는 언어입니다. 좋은 코딩 스타일이란 실수할 가능성을 낮추면서 하드웨어의 구조를 잘 보여 주는 코딩입니다.
Verilog HDL이 많은 명령어와 사용 방법들을 지원하지만, 초보자나 입문자들은 이 책에서 다룬 내용만을 사용해서 하드웨어를 기술하기를 권장합니다. 프로세서, 디지털 신호처리기(DSP), 통신 반도체, 디스플레이 반도체, 영상 인식 및 음성 인식 반도체, 인공지능 반도체 등 많은 반도체를 설계하는 데 있어서 이 책에 언급된 Verilog HDL 기술 방법만을 사용하여도 충분히 회로를 설계할 수 있습니다. 이러한 기술 방법으로 모든 칩이 제조되어 동작하고 있습니다. 컴퓨터를 사용하여 Verilog HDL로 하드웨어를 기술할 때 소프트웨어 프로그래밍이 아니라 동시에 동작하는 하드웨어를 기술하고 있다는 사실을 꼭 기억하시기를 바랍니다.
디지털 회로 설계를 위한 Verilog HDL 책의 필요성을 느끼면서 미뤄 왔던 책을 쓰기 시작하였습니다. 저자는 Intel, Broadcom 등 기업체에서의 설계 경험과 전자부품연구원에서의 연구 경험, 그리고 서울과학기술대학교에서의 교육 경험을 바탕으로, 실수하지 않는 Verilog HDL 코딩 방법을 설명하기 위하여 노력하였습니다. 오타나 버그를 정정하기 위해 노력을 기울였습니다만 아직도 남아 있는 오타나 버그를 찾으시면 연락 부탁드립니다.
이 책이 Verilog HDL을 이용하여 하드웨어 설계를 시작하는 초보자들이 디지털 회로 설계자로서 첫 발걸음을 떼는 데 도움이 되길 바랍니다.
1998 KAIST 전기 및 전자공학과 학사
2000 KAIST 전기 및 전자공학과 석사
2000-2005 전자부품연구원(KETI)
2005-2008 Univ. of California at Irvine 전기컴퓨터공학과 박사
2008-2010 Intel Labs, Hillsboro, OR
2010-현재 서울과학기술대학교 전자공학과 교수
Chapter 01. 디지털 시스템(Digital System)
Chapter 02. 부울 대수(Boolean Algebra)
Chapter 03. Verilog HDL
Chapter 04. 조합회로(Combinational Logic)
Chapter 05. 순차회로(Sequential Logic)
Chapter 06. 타이밍(Timing)
Chapter 07. IC를 이용한 디지털 시스템 설계 실습
Chapter 08. Verilog HDL을 이용한 디지털 시스템 설계 실습