'VHDL Basic'에 해당되는 글 4건

  1. 2010.01.09 VHDL Basic 4 (2)
  2. 2010.01.09 VHDL Basic 3
  3. 2010.01.08 VHDL Basic 2
  4. 2010.01.08 VHDL Basic 1
Studyhard/VHDL2010.01.09 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 언어로 코딩해본다.

저작자 표시 비영리 변경 금지
신고
Posted by 리얼한놈
Studyhard/VHDL2010.01.09 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비트 전가산기를 설계하라.



저작자 표시 비영리 변경 금지
신고
Posted by 리얼한놈
Studyhard/VHDL2010.01.08 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 를 각각 설계













 

저작자 표시 비영리 변경 금지
신고
Posted by 리얼한놈
Studyhard/VHDL2010.01.08 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)
 - 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개로 설계 하고 시뮬레이션 확인
  


 







저작자 표시 비영리 변경 금지
신고
Posted by 리얼한놈

티스토리 툴바