'VHDL 기초'에 해당되는 글 5건

  1. 2010.01.09 VHDL Basic 6
  2. 2010.01.09 VHDL Basic 4 2
  3. 2010.01.09 VHDL Basic 3
  4. 2010.01.08 VHDL Basic 2
  5. 2010.01.08 VHDL Basic 1
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 구동기를 설계하시오 

Posted by 리얼한놈
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 언어로 코딩해본다.

Posted by 리얼한놈
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비트 전가산기를 설계하라.



Posted by 리얼한놈
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 를 각각 설계













 

Posted by 리얼한놈
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)
 - 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 리얼한놈