자격/임베디드기사

[임베디드기사] [필기] 프로그래머블 로직 - HDL

HDL

하드웨어 기술언어(HDL; Hardware Description Language)은 전자회로를 기술하는데 사용하는 컴퓨터언어이다. 즉 임베디드의 소자 제어를 위한 컴퓨터언어라고 할 수 있겠다.(이 무슨... 전자공학과 컴퓨터공학에 가교역할을 하는 혼종이란 말인가..) HDL은 설계(Design)과 기술(Description) 모든 목적으로 사용된다. 프로그램을 사용할 수 있으면 미리 회로를 작성하고 시뮬레이션하여 기댓값을 예측해 볼 수 있다.(비용 효율적!!)

 

FPGA(Field Programmable Gate Array)

FPGAHDL를 통해서 설계가 가능한 반도체 소자이다. 단순한 Gate(AND / NOR / NOT )이나 이를 활용한 조합논리나 순서논리회로를 내부에 포함하고 있고 이를 복제하여 사용자가 원하는 방향으로 커스터마이즈된 설계를 할 수 있다. 일반적으로 HDL의 표준으로 분류되는 VHDLVerilog를 사용한다. 둘다 임베디드 기사의 시험범위이기 때문에 간단하게 알아보자


HDL VHDL(VHSIC HW Description Language)

VHDL의 시작은 미국 국방부였다고 한다. 주문형 집적회로(ASIC)의 문서화를 위해서 사용된 언어였으나 오늘날에는 설계나 검증 등 범용적으로 사용되고 있다고 한다.

 

다음은 VHDL을 활용한 대표적인 코드 형태이다. (AND게이트)

-- (this is a VHDL comment)

-- import std_logic from the IEEE library
library IEEE;

use IEEE.std_logic_1164.all;

-- this is the entity

entity ANDGATE is
port (
I1 : in std_logic;
I2 : in std_logic;
O : out std_logic);
end entity ANDGATE;

-- this is the architecture
architecture RTL of ANDGATE is
begin
O <= I1 and I2;
end architecture RTL;

 

위를 통해서 알 수 있는 것은 주석(--), Library의 사용선언(Library)과 모듈 import(use) 게이트의 선언(entity ~ is ~ end entitiy) 키워드 등이 있는 것을 알 수 있다. 다행이도 직관적인거 같다. 조금 더 자세한 코드를 보면 아래 링크에 자세한 반복문과 제어문, 펄스생성등의 코드등이 존재한다. 읽어보면 직관적이어서 알기 쉽다.

 

VHDL - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 가산기를 표현하는 VHDL 소스. VHDL(VHSIC Hardware Description Language)은 디지털 회로 및 혼합 신호(mixed-signal, 아날로그 신호 포함)를 표현하는 하드웨어 기술 언어이다.

ko.wikipedia.org


HDL Standard – Verilog

무려 IEEE 1364으로 표준화가 되어있다. Verilogc언어와 비슷한 문법을 가지고 있어서 가독성이 높다. ifwhile과 같은 제어 반복문도 C와 동일하며 큰 차이점은 begin ~ end로 대체되는 중괄호 정도가 있겠다. VerilogVHDL보다 시험에서 정교하게 물어본다. 시험범위로 VHDL은 맥락적으로 질의하지만 Verilog는 이용한 논리회로 설계까지 물어보니 간단한 프로그램코드는 읽을 수 있게 하는게 좋을 거 같다.

 

Verilog 수

컴퓨터 상수 표현을 위해서 0x, 0o등을 사용하듯이 Verilog에서도 수를 특정한 방식으로 표현한다. [bit]’[진수][숫자] 순서로 표현되는데, 예시로 8’o4728비트 8진수 472를 의미한다.

 

Verilog에는 시스템 태스크라고 불리우는 특정 상수(일종의 기능포함)가 있다. 보통 테스트를 위해서 사용된다고 하며 대표적인 상수/함수는 다음과 같은 것들이 있다.

  • $display(인자) : 표준출력으로 표현하다. 개행이 포함되어있다.
  • $write(인자) : 표준출력으로 표현하나, 개행이 포함되어있지 않다.
  • $finish, $stop : 시뮬레이션을 종료한다. $stop의 경우 회로가 꺼지는 것은 아니고, 대기 상태가 된다. 반대로 $fisnish는 진짜 회로가 꺼진다.(제어권이 박탈된다.)
  • $time : 현재의 시간이 표현된다.
  • $random : 난수가 출력된다.

 

c와 비슷하다고 해서 필자도 공부를 위해 읽어보았는데, 이게 진짜 C랑 비슷한건지 싶긴했다... 코드로 작성된 것을 여러번 읽어보는게 좋을 거 같다. 사용되는 연산자도 의미가 살짝살짝 다르다. 아래의 Site에서 Verilog읽는 법을 공부할 수 있다.

 

Verilog Tutorial

This complete Verilog beginners tutorial will take you from basic datatypes to building hardware circuits in no time using real simple examples - click now !

www.chipverify.com


정리

이번시간에는 회로를 표현하고 설계할 수 있는 프로그래머블 언어인 HDL에 대하여 알아보았다. HDL에는 대표적으로 VHDLVerilog가 있고 시험을 위해서는 Verilog를 조금 더 구체적으로 알고 있어야 한다.

 

다음시간에는

다음시간에는 CPU대해서 자세하게 알아보는 시간을 가질 것이다. 구조부터 살펴보는 시간이 있겠다.