본문으로 이동
주 메뉴
주 메뉴
사이드바로 이동
숨기기
둘러보기
대문
최근 바뀜
요즘 화제
임의의 문서로
sitesupport
사용자 모임
사랑방
사용자 모임
관리 요청
편집 안내
소개
도움말
정책과 지침
질문방
한울위키
검색
검색
보이기
로그인
개인 도구
로그인
VHDL 문서 원본 보기
문서
토론
한국어
읽기
원본 보기
역사 보기
도구
도구
사이드바로 이동
숨기기
동작
읽기
원본 보기
역사 보기
일반
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
보이기
사이드바로 이동
숨기기
←
VHDL
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
일반 사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
[[파일:Vhdl signed adder source.svg|섬네일|[[가산기]]를 표현하는 VHDL 소스]] '''VHDL'''({{lang|en|[[VHSIC]] [[하드웨어 기술 언어|Hardware Description Language]]}})은 [[디지털 회로]] 및 [[혼합 신호]](mixed-signal, 아날로그 신호 포함)를 표현하는 [[하드웨어 기술 언어]]이다. [[FPGA]]나 [[집적회로]] 등의 [[전자공학]] 회로를 처리하는 [[컴퓨터 지원 설계|설계 자동화]]에 사용한다. 주로 디지털 회로 설계에 사용된다. 기존의 심볼에 의한 [[회로도]] 작성 대신 언어적 형태로 전자회로의 기능을 표현한다. 아날로그 신호(mixed-signal)는 VHDL-AMS(VHDL Analog and Mixed-Signal Extensions)<ref>{{웹 인용| |언어=en |url=http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=808837&isnumber=17511 |제목=IEEE Standard VHDL Analog and Mixed-Signal Extensions," IEEE Std 1076.1-1999 , vol., no., pp.i,, 1999 |출판사=IEEE standards |웹사이트=IEEE Standard VHDL Analog and Mixed-Signal Extensions |확인날짜=2013-09-21 |연도=1999}} <!--IEEE Standard VHDL Analog and Mixed-Signal Extensions," IEEE Std 1076.1-1999 , vol., no., pp.i,, 1999 doi: 10.1109/IEEESTD.1999.90578 keywords: {IEEE standards;IEEE 1076.1 language;IEEE standard;VHDL-AMS;analog systems;digital systems;hardware description language;mixed-signal systems;simulation language}, URL: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=808837&isnumber=17511--> </ref>로 표현하나, 실제 활용면에서 디지털회로에 많이 적용되어 사용한다. VHDL로 표현된 회로는, 실제 동작하는 기능적 소자로 변환하는 합성(synthesis) 과정을 거치면 동작할 수 있는 회로가 완성된다. 이때 FPGA나 ASIC 등을 위한 환경에 따라 합성된 실제회로의 소자가 달라지기 때문에 칩 설계 시 목적에 맞는 소자가 합성되도록 하는 개발도구가 존재한다. 예를 들어 FPGA를 판매하는 회사는 보통, 회로 입력(심볼 및 VHDL코드)부터 시작해서 VHDL 코드의 합성, 모듈(소자)의 배치 등을 지원하는 도구를 지원한다.<ref>{{웹 인용| |언어=en |url=https://www.xilinx.com/support/download.html |제목=Xilinx 도구 내려받기 |출판사=Xilix |웹사이트=Vivado Design Suite |확인날짜=2020-06-22}}</ref> == 역사 == VHDL는 원래 [[미국 국방부]]에서 [[주문형 집적회로]](ASIC)의 문서화에 사용하기 위해 만든 언어였다. 즉, 복잡한 매뉴얼로 회로의 동작 내용을 설명하는 대신, 회로의 동작 내용을 문서화하여 설명하기 위해 개발했다. 그러나 이런 문서를 회로 디자인 과정에서 시뮬레이션에 사용하게 되었고, VHDL 파일을 읽어들여서 논리 합성을 한 다음 실제 회로 형태를 출력하는 기능을 덧붙이게 되었다. 오늘날에는 [[디지털 회로]]의 설계, 검증, 구현 등의 모든 용도로 사용하고 있다. VHDL은 [[에이다 (프로그래밍 언어)|에이다]] 프로그래밍 언어의 부분집합에 디지털 회로에 필수적인 시간 개념을 추가하는 방식으로 만들어졌으나 [[IEEE]] 표준화 작업을 거치면서 오늘날과 같은 형태와 문법을 가지게 되었다. == 예제 == VHDL을 이용한 간단한 [[논리연산]] 중 [[AND]] 게이트는 다음과 같다. <syntaxhighlight lang="VHDL"> -- (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; </syntaxhighlight> === MUX 템플릿 === [[멀티플렉서]](multiplexer, 또는 'MUX') 논리회로에서 다양하게 사용한다. 다음 MUX 예에서, 선택 입력 <code>S</code>에 의해 입력 <code>A</code>와 <code>B</code>를 선택적으로 출력 <code>X</code> 반영한다. 다음과 같이 MUX를 VHDL로 코딩할 수 있다: <syntaxhighlight lang="VHDL">X <= A when S = '1' else B;</syntaxhighlight> === 래치 템플릿 === [[플립플럽#래치|트랜스페어런스 래치]](transparent latch) 메모리의 한 비트 정보를 저장 유지하는 회로로 게이트 신호에 ''enable''에 의해 입력 D가 출력된다. VHDL에서 D 래치는: <syntaxhighlight lang="VHDL"> -- latch template 1: Q <= D when Enable = '1' else Q; -- latch template 2: process(D,Enable) begin if Enable = '1' then Q <= D; end if; end process; </syntaxhighlight> === D 플립플럽 === [[플립플럽#D 플립플럽|D 플립플럽]] [[클럭 신호]] 상승 또는 하강 엣지에서 입력 D가 출력 Q에 반영된다. 다음 예는 비동기 RESET 신호와 함께 있는 플립플럽 예이다: <syntaxhighlight lang="VHDL"> DFF : process(RST, CLK) begin if RST = '1' then Q <= '0'; elsif rising_edge(CLK) then Q <= D; end if; end process DFF; </syntaxhighlight> VHDL의 다른 표현으로 엣지 트리거(edge-triggered)의 동작은 '''event''' 신호 특성으로 나타낼수 있다. ''event''을 사용한 엣지 표현 예: <syntaxhighlight lang="VHDL"> DFF : process(RST, CLK) begin if RST = '1' then Q <= '0'; elsif CLK'event and CLK = '1' then Q <= D; end if; end process DFF; </syntaxhighlight> === 카운터 예 === 비동기 ''RESET''과 함께, 증감 카운터 예이다. 32비트 카운터로 'unsigned' 형이다. 이를 위해 'unsigned', 'std_logic_vector', VHDL ''generics''을 사용하였다. <syntaxhighlight lang="VHDL"> library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all; -- unsigned형을 위해 entity COUNTER is generic ( WIDTH : in natural := 32); port ( RST : in std_logic; CLK : in std_logic; LOAD : in std_logic; Q : out std_logic_vector(WIDTH-1 downto 0)); end entity COUNTER; architecture RTL of COUNTER is signal CNT : unsigned(WIDTH-1 downto 0); begin process(RST, CLK) is begin if RST = '1' then CNT <= (others => '0'); elsif rising_edge(CLK) then if LOAD = '1' then CNT <= unsigned(DATA); -- unsigned형으로 변환 else CNT <= CNT + 1; end if; end if; end process; Q <= std_logic_vector(CNT); -- type is converted back to std_logic_vector end architecture RTL; </syntaxhighlight> === 시뮬레이션을 위한 구조 === VHDL 코드 중에 회로의 표현이 주이지만 다음의 경우는 하드웨어로 합성하지 않고 시뮬레이션을 위한 방법으로 사용한 예이다. 따라서 이 VHDL 코드는 하드웨어로 합성되지 않고(non-synthesizable) 다양한 용도로 사용할 수 있다. 예를 들어 다음 코드는 50 MHz [[클럭 신호]]를 표현하는 예이다. 이것은 실제 하드웨어 회로의 시뮬레이션 입력 신호로 사용하기 위해, 시뮬레이션에서만 클럭이 생성되는 코드이다. 실제로 클럭을 생성하지 않고 시뮬레이션 상에서만 신호가 생성되기 때문에 실제 하드웨어에서 동작하려면 클럭신호를 별도로 만들어 주어야 한다. <syntaxhighlight Lang="VHDL"> process begin CLK <= '1'; wait for 10 NS; CLK <= '0'; wait for 10 NS; end process; </syntaxhighlight> 클럭 뿐만 아니라, 시뮬레이션을 위해 다음과 같은 여러 가지 신호를 만들어 VHDL 코드 모듈에 입력으로 사용할 수 있다. <syntaxhighlight Lang="VHDL"> process begin wait until START = '1'; -- START=H가 될 때까지 기다린다. for i in 1 to 10 loop -- 몇 개의 클럭 주기동안 기다리고... wait until rising_edge(CLK); end loop; for i in 1 to 10 loop -- 1부터 10까지 DATA에 넣기, 1 매 주기마다 DATA <= to_unsigned(i, 8); wait until rising_edge(CLK); end loop; -- 출력이 변할 때까지 기다림. wait on RESULT; -- 한 클럭 주기 동안 ACK 펄스를 만든다. ACK <= '1'; wait until rising_edge(CLK); ACK <= '0'; -- 계속... end process; </syntaxhighlight> == 각주 == <references/> == 같이 보기 == * [[하드웨어 기술 언어]] * [[아벨 프로그래밍 언어|ABEL]] ("Advanced Boolean Expression Language") * [[AHDL]] (알테라 HDL, [[알테라|Altera]]가 만든 상용 언어) * [[PALASM]] * [[Verilog]] ([[IEEE 1364]]) * [[GHDL]] - VHDL [[자유 소프트웨어]] 시뮬레이터 == 외부 링크 == * {{위키공용분류-줄}} * [http://esd.cs.ucr.edu/labs/tutorial/ VHDL 예제들] * [http://www.asic-world.com/vhdl/tutorial.html VHDL 강좌] {{IEEE 표준}} {{전거 통제}} {{위키데이터 속성 추적}} [[분류:하드웨어 기술 언어]] [[분류:디지털 전자공학]] [[분류:전자공학]]
VHDL
문서로 돌아갑니다.
검색
검색
VHDL 문서 원본 보기
새 주제