'VHDL'에 해당되는 글 9건
- 2010.06.12 Digital Clock - 디지털공학
- 2010.06.12 엘레베이터-정보제어기초실험
- 2010.01.09 VHDL Simulation
- 2010.01.09 VHDL Basic End
- 2010.01.09 VHDL Basic 6
- 2010.01.09 VHDL Basic 4 2
- 2010.01.09 VHDL Basic 3
- 2010.01.08 VHDL Basic 2
- 2010.01.08 VHDL Basic 1
광운대학교/디지털공학2010. 6. 12. 00:48
광운대학교/정보제어기초실험2010. 6. 12. 00:45
Studyhard/VHDL2010. 1. 9. 02:57
-Quartus 6.0 Simulation 확인하기
File- New- Other Files 선택
Vector Waveform File 선택
이렇게 생긴 창이 뜨게 된다.
그럼 왼쪽 Name ,Value at 12.43ns 어쩌고 써있는 아래 하얀 부분에 마우스 오른쪽 버튼을 클릭한다.
그럼 왼쪽 과 같은 창이 하나 뜨게 된다. 여기서는
Insert Node of Bus 를 선택한다.
여기서는 OK 버튼 밑에 있는 Node Finder를 선택한다.
그럼 Node Finder 창이 뜨게 된다. 해당 창 위쪽 가운데 보이는 Filter -> Pins all -> 그리고 우측에 보이는 List 버튼을 누르게 되면 그림과 같이 컴파일 완료된 핀이 창에 뜨게 된다.
a 핀이 std_logic_vector (2 downto 0) 형이므로 우측 창에 넘기는 핀은 a 핀 하나면 된다
(a[0],a[1],a[2]) 핀은 선택할 필요가 없다)
- 우측창에 넘긴다는 의미는 시뮬레이션 창에 추가시킨다는 의미
a, b 핀을 선택하고 가운데 있는 > 화살표 버튼을 누르면 우측으로 a,b 핀이 이동된걸 확인 할 수 있다.
그리고 OK, OK 버튼을 눌러 주면,
다음과 같이 아까 생성한 파일에 a, b 가 추가 된 것을 확인 할 수 있다.
Edit - End Time
그리고 파형을 보기 좋게 확인 하기 위해서는 End Time 을 설정해 주어야 한다. 보통 16us , 혹은 20us 정도로 설정한다.
Time 옆에 보이는 1.0 을 20us 로 변화 시켜 주자.. 물론.. 1s 도 가능하다. 하지만 Simulation 이 오래 걸린다.
궁금하면 해보시길
그 다음에는 Grid Size를 수정 해준다.
End Time 이 20us 이기 때문에 1us 로 설정 한다.
설정한 뒤에 확인해 보면 end time 이 20.0us 로 설정 하였지만 보이는 것은 2.0us 까지 이다. 그렇다면!
View 에 Fit in Window 를 선택하거나.
좌측에 보이는 돋보기 아이콘을 선택해 조절해 주면 된다
완성된 VWF 파일이다.
이제 해 주어야 할 일은 파형을 생생해 주는 일!
우선 파형을 생성할 핀을 선택하면 우측에 있는 Icon들이 활성화 된다.
자세히 살펴 보면.. 여러 가지가 있다. ^^
우리는 Clock 을 만들어 주는 것이 목적이기 때문에 왼쪽 아래에 있는 C 를 선택한다.
C 는 Count Value 의 약자! 그럼 나머지는? 하나 하나 눌러보면 이해가 갈 것이다.
Count Value 창이 뜨게 된다.
Counting Tab 부분
Radix = Data Type 선택
Start Value = 시작할 값 선택
Increment by = 증가 할 값 선택
Timing Tab 부분
Start Time = Count 시작할 시간
End Time = Count 끝날 시간(End Time 이 20us 로 설정 하였으니 최대 20us)
Count Every = 1 us 로 설정
- > 우리가 Grid size를 us 단위로 설정 하였기
때문에 1us 로 설정한다.
Multiplied by = Grid 마다 동작 설정
- > 지금은 1us Grid Size 이고 1 Multiplied 로 설정 되었기 때문에 1us 마다 Count Value 가 바뀐다
완성된 Count Value 화면이다.
a 가 std_logic_vector (2 downto 0) 이기 때문에 000, 001, 010 형식으로 증가 하는 것을 알 수 있고
a 옆에 놓여진 + 버튼을 누르면 a[2],a[1],a[0] 이 어떻게 변화 되는지 눈으로 직접 확인 하는 것을 알 수 있다. 물론 각 입력핀 하나 하나 세부 설정도 가능할 것이다.
P.S
Hard Ware 설계 전에 Simulation을 돌려 파형을 확인 하다는 것은 굉장한 작업이 아닐 수 없다. 실제로 Chip이 나오기 전에 Test 를 거친다면 소모되는 비용을 더욱더 줄일 수 있으며, 우리 같은 공대생들은 Bug 잡는 일이 한층 쉬워 지지 않을 까 생각한다.
Studyhard/VHDL2010. 1. 9. 02:32
- Integer 형을 이용한 10 Counter 를 설계하시오
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY mod_10_count IS
PORT(n_cp, n_rd : IN std_logic;
q : BUFFER integer RANGE 0 TO 9);
END mod_10_count ;
ARCHITECTURE arc OF mod_10_count IS
BEGIN
PROCESS (n_cp, n_rd)
BEGIN
IF (n_rd='0' OR q=9) THEN
q <= 0;
ELSIF (n_cp'EVENT AND n_cp='0') THEN
q <=q+1;
END IF;
END PROCESS;
END arc;
- 20Mhz 를 1초로 분주시오
library ieee;
use ieee.std_logic_1164.all;
entity divone is
port(clk : in std_logic;
clk_one : buffer std_logic);
end divone;
architecture arc of divone is
begin
process (clk)
variable cnt : integer range 0 to 1999999;
begin
if (clk'EVENT and clk='1')then
if (cnt=1999999)then
cnt:=0;
clk_one <= not clk_one;
else
cnt:=cnt+1;
end if;
end if;
end process;
end arc;
- 2상 여자 Stepmotor 구동기를 설계하시오
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
ENTITY step IS
PORT(clk : IN STD_LOGIC;
clock : buffer std_logic;
q : OUT STD_LOGIC_VECTOR(3 downto 0));
END step;
ARCHITECTURE arc OF step IS
type state_type is (s0, s1, s2, s3);
SIGNAL state: state_type;
BEGIN
process(clk)
variable cnt : integer range 0 to 49999; --49999 적정
begin
if (clk'EVENT and clk='1') then
if (cnt=49999)then
clock <= not clock;
cnt:=0;
else
cnt:=cnt+1;
end if;
end if;
end process;
PROCESS (clock)
BEGIN
IF clock'EVENT AND clock = '1' THEN
CASE state IS
WHEN s0 => state <= s1;
WHEN s1 => state <= s2;
WHEN s2 => state <= s3;
WHEN s3 => state <= s0;
END CASE;
END IF;
END PROCESS;
WITH state SELECT
q <= "1100" WHEN s0,
"0110" WHEN s1,
"0011" WHEN s2,
"1001" WHEN s3;
END arc;
Studyhard/VHDL2010. 1. 9. 02:31
과제
* JK플립플롭이 Project 폴더 내에 있어야 한다.
library ieee;
use ieee.std_logic_1164.all;
entity upcount is
port( cclk, logic : in std_logic;
q : buffer std_logic_vector (3 downto 0));
end upcount;
architecture arc of upcount is
component jk_f
port( j, k, clk : in std_logic;
q, n_q : buffer std_logic);
end component;
begin
ff3: jk_f port map(j => logic, k => logic, clk =>q(2), q=>q(3));
ff2: jk_f port map(j => logic, k => logic, clk =>q(1), q=>q(2));
ff1: jk_f port map(j => logic, k => logic, clk =>q(0), q=>q(1));
ff0: jk_f port map(j => logic, k => logic, clk =>cclk, q=>q(0));
end arc;
VHDL Basic 6
-상태머신(State Machine)
-State Machine의 정의
- 순차회로시스템의 원하는 동작을 모델링하는 도구
- 외부 입력과 시스템 클럭에 의해 State가 천이되고, State에 의존되어 출력 값 결정
- 여러 개의 State로 구성, 복잡한 시스템 설계에 적합 (예 : 마이크로프로세서)
-State Machine의 종류
-Moore Machine
-Mealy Machine
# Mealy Machine
출력이 현재상태와 입력값에 의존
# Moore Machine
출력이 현재 상태에만 의존되는 모델
- 두 모델의 차이점
◯ Moore Machine : 출력회로의 입력이 현재의 상태인 레지스터의 값으로만 결정, 출력의 변화는 Clock과 동기되어 발생.
◯ Mealy Machine : 출력회로의 입력이 현재 레지스터의 값과 입력값 두 가지를 가짐. 따라서 입력값의 변화가 있게되면 Clock과 동기하지 않더라도 그 출력값은 변화
- 두 모델의 공통점
◯ 입력과 현재의 상태에 의해 다음 상태 변화
- 설계 예시
architecture arc of mode is --Begin 시작 전에 삽입
type state_type is (stay, ready, action); -- State 머신 상태 설정(3가지 상태)
signal state : state_type; -- State_type 을 Signal 로 설정
- Integer 및 Variable 구문
- Integer 변수
- 알고 있는 Vector 형과 마찬가지로 사용할 변수의 범위를 지정하는데 사용
- 벡터형 보다 변수가 차지하는 셀의 수가 더 작다
- 범위를 좀더 자세히 지정할 수 있다.
* 설계 예시
entity Counter is
port ( a : in integer range 0 to 255; -- < = in std_logic_vector(7 downto 0);
b : out integer range 0 to 255; -- < = out std_logic_vector(7 donwto 0);
end counter ;
범위를 실수형으로 지정함으로써 좀더 자세한 선언이 가능함을 알 수 있다.
-Variable 구문
- Process 내에서만 사용 되며, 내적 변수이다
- 합성 보다는 중간 연산 단계에서 주로 이용된다.
- Variable에서 사용되는 대입기호는 :=
* 설계 예시
Process(clk, clear, load)
Variable cnt : integer range 0 to 255;
begin
if(조건) then
cnt := 0;
*Variable은 내적 변수이기 때문에 Process 가 끝나면 그 값을 잊어버린다. 때문에 값을 보존 시키기 위해선
Signal에 최종 값을 대입시켜야 한다.
과제
- Integer 형을 이용한 10 Counter 를 설계하시오
- 20Mhz 를 1초로 분주시오
- 2상 여자 Stepmotor 구동기를 설계하시오
Studyhard/VHDL2010. 1. 9. 02:12
4 비트 전가산기 설계
- 1비트 가산기
library ieee;
use ieee.std_logic_1164.all;
entity ADD is
port( a,b,c: in std_logic;
sum,cout : out std_logic);
end ADD;
architecture arc of ADD is
begin
sum <= (a xor b)xor c ;
cout <= (a and b) or ((a xor b) and c);
end arc;
* 4비트 전 가산기 설계하기 전에 위의 1비트 가산기가 Project 폴더 안에 있어야 한다.
- 4비트 전가산기
library ieee;
use ieee.std_logic_1164.all;
entity FA4 is
port(a, b :in std_logic_vector(3 downto 0);
cin : in std_logic;
sum : out std_logic_vector(3 downto 0);
cout: buffer std_logic_vector(2 downto 0);
carry: out std_logic);
end FA4;
architecture arc of FA4 is
component ADD port( a,b,c: in std_logic;
sum,cout : out std_logic);
end component;
begin
f0: ADD port map(a=>a(0),b=>b(0),c=>cin,cout=>cout(0),sum=>sum(0));
f1: ADD port map(a=>a(1),b=>b(1),c=>cout(0),cout=>cout(1),sum=>sum(1));
f2: ADD port map(a=>a(2),b=>b(2),c=>cout(1),cout=>cout(2),sum=>sum(2));
f3: ADD port map(a=>a(3),b=>b(3),c=>cout(2),cout=>carry,sum=>sum(3));
end arc;
- 시뮬레이션 파형은 각자 확인해 보도록 한다.
VHDL Basic 4
- Clock Pulse 로 동작하기
- 일반적으로 if 구문을 쓸 때,
if (A=1) then < = 이런 식으로 Cording한다.
그럼, Clock Pulse는 어떻게 Cording 할 수 있을까?
if(clock'EVENT and clock ='1') then <= Rising Edge Trigger
if(clock'EVENT and clock ='0') then <= Falling Edge Trigger
위의 보기처럼 Clock 과 동기화 시킬 경우 선언된 if 문 안에 원하는 Source를 Cording 하면 된다.
* 단, 비동기와 동기가 겹칠 경우
ex) if(A=1) then
elsif(clock'EVENT and clock='1')then
elsif(B = 0) then
동기화된 EVENT를 먼저 코딩해주고 비동기 EVENT 를 아래쪽에 코딩하자
-래치 (Latch) 및 플립플롭(Flip Flop) 설계
- 기본 개념
• 안정 상태
- 회로의 외부로부터 입력을 가하지 않는 한 본래의 상태를 유지
• 두 가지 안정 상태
- Q = 1, /Q = 0 상태 혹은 그 반대인 상태
• 래치
- 레벨 트리거에 의해서 동작, 1상태인 동안 입력의 변화를 출력에 반영
• 플립플롭
- 엣지 트리거(Edge Trigger)에 의해서 동작, 클럭 펄스가 나타나기 바로 이전의 입력이
출력에 반영되어 다음 클럭 펄스가 나타날 때까지 그 상태를 유지함
• 비동기 동작
- 입력 신호의 변화가 일어 나면 그에 따라 동작 하는 것
• 동기식 동작
- 클럭 펄스라는 시간적인 신호로 모든 플립플롭이 펄스에 동기가 되어 동작을 하는 것
* 비동기와 동기식 동작의 차이점을 잘 이해하도록 한다.
○ S-R 플립플롭
그림 - S-R 플립플롭
- 펄스입력은 다른 2개의 입력에 대한 인에이블 신호의 역할을 한다.
뒷 부분의 두 NAND 게이트 출력은 CP 입력이 0에 머물러 있는 한 논리 값 1을 갖는다.
이것이 기본 플립플롭의 정지 조건이다.
표 - S-R FF 의 진리표
○ D 래치 및 D 플립 플롭
- D 래치(Latch)
그림 - D 래치.
- D래치는 제어 신호가 0 일 때 과거의 값을 가지고 오고, 과거의 값이 없으면 X(무변화)이다.
제어신호가 1일 때, 1인 동안에 입력 값에 의해서 결과 값이 변화 한다.
- D 플립플롭(Flip Flop)
- D 래치와는 달리 클럭의 상승이나 하강일 때 입력값에 의해 출력 값이 정해진다
○ J- K 플립플롭
그림 - J-K 플립플롭
- J K 플립플롭은 SR 플립플롭에서의 비결정 상태를 명백히 구분해 준다. 입력 J,K는 플립플롭을 각각 셋하고 클리어학 위하여 S,R처럼 동작한다. J 입력은 셋, K 입력은 리셋을 위한 것이다.
○ T 플립플롭
- T 플립플롭은 J-K 플립플롭을 단일 입력 형태로 고쳐 놓은 것이다. T라는 이름은 플립플롭의 토글, 즉 그의 상태를 반전(보수화)시킬 수 있는데 기인한다.
- 과제
- 각 래치, 플립플롭을 VHDL 언어로 코딩해본다.
Studyhard/VHDL2010. 1. 9. 01:57
(1) 7segment Decoder 동작을 하는 7447 IC를 설계
http://www.alldatasheet.com 에서 확인한 74ls47 BCD-to-SEGMENT Truth Table 이다
library ieee;
use ieee.std_logic_1164.all;
entity segment is
port( s : in std_logic_vector(3 downto 0);
o : out std_logic_vector(6 downto 0));
end segment;
architecture arc of segment is
begin
process (s)
begin
case s is
when "0000" => o <="0000001";
when "0001" => o <="1001111";
when "0010" => o <="0010010";
when "0011" => o <="0000110";
when "0100" => o <="1001100";
when "0101" => o <="0100100";
when "0110" => o <="1100000";
when "0111" => o <="0001111";
when "1000" => o <="0000000";
when "1001" => o <="0001100";
end case;
end process;
end arc;
Truth Table 을 참고하여 SEGMENT 에 0 - 9 까지 출력이 가능한 BCD TO SEGMENT DECODER 를 설계하였다. DECODER 설계와 마찬가지로 ENCODER 설계도 어렵지 않으니, 각자 DATA SHEET 를 참고하여 만들어 보기 바란다.
(2) MUX 와 DEMUX 를 각각 설계
MUX = > MULTIPLEXER 회로에서 입력되는 신호 중 어느 하나의 입력신호를 선택하여 출력회로에 실어 주 는 기능을 수행하는 데이터 선택 논리회로
DEMUX = > DEMULTIPLEXER, MULTIPLEXER의 정반대의 역할을 하는 논리회로
MUX 설계
library ieee;
use ieee.std_logic_1164.all;
entity Mux_4to1 is
port (a : in std_logic_vector(3 downto 0);
Data : out std_logic;
s : in std_logic_vector(1 downto 0));
end Mux_4to1;
architecture arc of Mux_4to1 is
begin
with s select
Data <= a(0) when "00",
a(1) when "01",
a(2) when "10",
a(3) when "11",
'0' when others;
end arc;
위의 소스와 같이 MUX 는 SELECT 로 출력이 바뀌는 것을 알 수 있다.
DEMUX 설계
library ieee;
use ieee.std_logic_1164.all;
entity Demux_1to4 is
port(a : in std_logic;
y : out std_logic_vector(3 downto 0);
sel : in std_logic_vector(1 downto 0));
end Demux_1to4;
architecture arc of Demux_1to4 is
begin
process (sel)
begin
y<="0000";
case sel is
when "00" => y(0)<=a;
when "01" => y(1)<=a;
when "10" => y(2)<=a;
when "11" => y(3)<=a;
when others=> y<="0000";
end case;
end process;
end arc;
VHDL Basic 3
우리가 Hardware 를 만들 때, 나중에 쓰기 위해 모듈을 만들거나, 사서 쓰는 경우가 있다. 모듈의 장점은 나중에 어디다 써도 분해 하지 않고 쓸 수 있다는 것이다. VHDL 언어도 이와 마찬 가지로 Component 라는 기능을 가지고 있다. 예를 들어, 디지털 시계를 만들 때, 초를 세는 부분, Segment 디스플레이 부분, Stopwatch 부분 등 따로 따로 분리해서 만들어 놓고 Component 로 합치면 디지털 시계가 만들어 지는 것이다.
Component
- Component 로 합성할 Source 는 Main Source 와 같은 경로로 저장 되어 있어야 한다.
- Architecture 아래에 놓여진다.
ex)
architecture arc of x is
component (모듈 부분 entity name) port ( a : in std_logic;
d : out std_logic);
end component;
* 모듈에서 port 가 a, b, c 가 입력이고 d 가 출력인데, 그중 a, d 만 필요하다면, 위와 같이 코딩 해주면 된다.
- begin 후에 Main 부분의 포트와 Component 의 포트를 서로 연결해 주기만 하면 된다.
ex)
begin
u0 : (모듈 부분 entity name) port map(모듈 포트 = > 연결 포트, 모듈 포트 => 연결 포트);
end arc;
* 단지 연결해 줄 뿐이다. => ◀ 이 표시가 있다고 해서 대입이라는 의미가 절대 아니다
* 한 모듈을 여러 번 쓸 수 가 있다.
과제
library ieee;
use ieee.std_logic_1164.all;
entity ADD is
port( a,b,c: in std_logic;
sum,cout : out std_logic);
end ADD;
architecture arc of ADD is
begin
sum <= (a xor b)xor c ;
cout <= (a and b) or ((a xor b) and c);
end arc;
위 소스는 1비트 전가산기 소스이다. 다음을 참고하여 4비트 전가산기를 설계하라.
Studyhard/VHDL2010. 1. 8. 00:30
AND, OR, NAND, NOR, XOR, XNOR 설계 예시
library ieee;
use ieee.std_logic_1164.all;
entity AAAA is
port(a, b : in std_logic;
x : out std_logic_vector(5 downto 0));
end AAAA;
architecture arc of AAAA is
begin
x(0) <= a and b;
x(1) <= a or b;
x(2) <= a nand b;
x(3) <= a nor b;
x(4) <= a xor b;
x(5) <= a xnor b;
end arc;
x : out std_logic_vector (5 downto 0); <- ????
C 언어에서 배열과 같은 의미로 이해하면 빠를 듯 싶다.
std_logic 형으로 여러개를 설계 하는 것보다, 같은 형태의 출력 핀이면 std_logic_vector 형이 간편하다.
입력도 마찬가지로 vector 형으로 정의가 가능하다
(5 downto 0) < = 000000 (왼쪽 첫 번째 비트가 5번, 오른쪽 마지막 비트가 0번)
(0 downto 5) < = 000000 (왼쪽 첫 번째 비트가 0번, 오른쪽 마지막 비트가 5번)
VHDL Basic 2
VHDL 은 C 와 마찬가지로 조건문이 가능하다.
(1) IF ELSE 문 (괄호 안에 조건)
- IF ( ) THEN
- IF ( )THEN
ELSIF( ) THEN < = 조건이 들어갈땐 ELSIF
- IF ( ) THEN
ELSE < = 조건이 없을 땐 ELSE
* 마지막엔 항상 END IF 로 마무리를 해주는 센스!
(2) CASE 문
- CASE ( 대상 ) IS
WHEN " 상태 " = > 출력 <= 값
WHEN OTHERS = > 출력 <= 값
* 마지막엔 END CASE;
(3) FOR LOOP 문
- FOR I IN 0 TO 7 LOOP
Y(I) <= A(I) AND B(I);
(4) SELECT 문
WITH 대상 SELECT
출력 <= "값" WHEN 상태,
"값" WHEN 상태,
"값" WHEN 상태,
"값" WHEN 상태;
* 마지막엔 END SELECT;
* VHDL에서 모든 조건문은 architecture 안에 process 문에 쓰여 져야 한다.
- 예
architecture arc of KITEL is
begin
process(a) -- architecture 안에 process는 여러 개가 와도 된다.
begin -- process 시작
if (a ="0")then -- 조건문의 대상은 process(대상 ) 에 정의 되어야한다
b <= '1'; -- 한 비트일 때는 ‘0’ 2개 이상일 때는 “00”
elsif(a ="1")then
b <= '0'; -- 마땅히 조건이 없으면 NULL; 처리를 하여도 무방하다.
end if;
end process; -- process 끝, process 가 여러개일 때는 병렬로 동시에 실행된다
end arc; -- process 안에서는 순차 architecture안의 process는 병렬처리
과제
(1) 7segment Decoder 동작을 하는 7447 IC를 설계
(2) MUX 와 DEMUX 를 각각 설계
Studyhard/VHDL2010. 1. 8. 00:28
VHDL Basic 1
(1)
- 범용 IC : 일반적으로 쓰는 IC
- 주문형 IC(ASIC): Application Specified Integrated Circuit
- 완전 : 개발비 ↑, 개발기간 ↑, LSI 급
- 반주문 : CAD설계, VLSI 급 => 완전형에 비해 칩면적이 더 크다
(2)
- PLD : Programmable Logic Device
- 논리 기능을 직접 만들어 쓸 수 있는 IC
- PROM : Programmable Read Only Memory : 한개의 Decoder, 이차원 OR
- PLA : Programmable Logic Array : 입력 = AND 설계, 출력 OR설계
- PAL : Programmable Array Logic : AND 설계, OR 고정, PLA 에 비해 속도↑
- SPLD : Simple Programmable Logic Device : PAL 형식, GATE 200EA
- CPLD : Complex Programmable Logic Device : 빠른 성능, 정확한 Timing 예측
- FPGA : Field Programmable Gate Array : GATE 수가 많다
CPLD 내부구조
FPGA 내부구조
- FPGA는 CPLD 에 비해 속도가 느리지만, GATE가 더 많다
(3) 칩 제조사
- ALTERA : MAX, Flex, Apex
- Xlinx : Virtex FPGA, Spartan
- Vantis : Actel, Atmel, QuickLogic
(4)
VHDL 이란?
- Very High speed integrated circuit Hardware Description Language 의 약자
- 1981. 6~1993년 IEEE 제정
- CAD 업계 및 IEEE 표준 언어
- 칩의 집적화에 따라 VHDL 의 중요성 대두 (TR 수 : 486=100만개, 586=310만개, 686=55만개)
VHDL 이전?
- AHPL(A Hareware Programming Language)
- CDL(Computer Design Language)
- C 언어
- IDL (Interative Design Language)
- ISPS(Instruction Set Processor Specification)
- TDL(TEGAS HDL or Texas Instrument HDL)
- TDL(TEGAS HDL or Texas Instrument HDL)
- UDL / I (Unfied Design Language for IC)
- Verilog HDL
- ZEUS
- HILO
VHDL 특징
- 전체적인 설계 비용↓, 쉬운 정보교환, 대규모 설계용이, 재사용이 쉬움
- 미국 정부는 Hardware 문서화에 VHDL 사용
- 유럽 연합에서도 채택
문제점
- 설계 자체를 위한 것들을 위해서는 적합하지 않다
- 정확한 Timing, 임계 경로의 계산이 어려움
- 합성도구에 대한 지원 부족
- 설계 도구들 간의 호환성 결여
- Hardware Engineer 가 Software 설계 기법에 익숙치 못함
- 아날로그 시스템 모델링의 어려움 => CAD 업체의 노력으로 극복 중
(5) VHDL 의 표현 방법
동작적 모델링, 자료흐름 모델링, 구조적 모델링
동작적 모델링 | 구조적 모델링 | |
칩 | 알고리즘 | MP, RAM, ROM |
회로 | 미분 방정식 | TR, R, L, C |
게이트 | 부울 | 게이트 |
시스템 | 설계 명세 | 컴퓨터, 디스크 |
레지스터 | RTL | ALU, 카운터, 레지스터 |
(6)VHDL Language 의 특징
- 대, 소문자 구별 X
- 주석 은 --
- Line 의 끝은 ;
- Space와 Tab으로 낱말 구분
- Data Type 변형 용이
(7) VHDL 프로그래밍
AAAA.VHD
library ieee; -- C언어의 Header File이라 생각하면 됨
use ieee.std_logic_1164.all; --ieee의 std_logic_1164.를 쓰겠다는 의미
-- use ieee.std_logic_signed.all 도 있으며 다양함
entity AAAA is -- Entity 선언 다음에 오는 이름은 파일명과 같아야 한다
port (a, b : in std_logic; -- 다르게 하고 싶다면
c : out std_logic); -- Assignment-> Device-> General-> Top-level entity를 바꿔야 한다
end AAAA;
architecture arc of AAAA is -- arc 부분은 마음대로 쓸 수 있다.(ex :sample , ex 등)
begin
c <= a and b;
end arc;
--> 사용할 Quartus 6.0은 ALTERA 사에서 WEB EDITION으로 무료로 제공하고 있다.
--> Project 시작시 저장 할 폴더를 귀찮더라도 폴더별로 정리를 하면 나중에 편하므로 폴더별로 저장할 것을 권장한다
과제
AND, OR, NAND, NOR, XOR, XNOR 입력 2개 출력 6개로 설계 하고 시뮬레이션 확인