전공지식정리/디지털시스템설계

VHDL1.개발과정, 특징, 구조, 검증, 엔티티, 설계과정

TimeSave 2020. 12. 8. 23:21

0. VHDL
; VHSIC(Very High Speed Integrated Circuit) Hardware Description
Language의 약자
; 디지털 시스템의 설계, 검증, 구현 관련된 대부분의 기능 제공

1. 개발과정
1.1
- 미국방부의 반도체 집적회로 납품 문제
- 업체별로 서로 다른 HDL 언어를 사용하여 납품
=> 회로 재사용, 재생산에 많은 문제 야기 

1.2. VHSIC 개발 프로젝트 (1980 ~ 1989) : HDL 표준 언어 개발
- IBM, TI, Intermetrics사 합동 개발팀
- 1985년 VHDL version 7.2 개발 및 공개
- IEEE 표준화
- 1987년 12월 IEEE Standard 1076으로 표준화
1993 2000 2002 2008년 일부 내용 개정


2.  특징
- 순차 동작, 병렬동작, net-list, waveform(파형생성), 테스트환경
- 병렬처리 ; 낮은 클럭으로 CPU의 수천배 처리속도 가능.



3. 구조(패키지[library,use] + 입출력[entity] + 내부회로[architecture])
 3.1 패키지 선언(library, use) ; 신호 형태 등을 가져 옴.
 3.2 입출력 신호 선언 (entity) ; block의 in out설정
 3.3 내부회로 서술 (architecture) ; 동작관계 규정



4. 검증
 방법 1 논리합성으로 실제 회로로 구현
 방법 2 ASIC 이나 FPGA로 회로 테스트
 방법 3 test bench로 설계 단계에서 테스트 
  => 논리합성 가능여부와 무관, 가급적 실제 회로를 신경써야 함.
  => 입출력 선언 불필요, 로직을 component로 선언.
  => 파형생성문으로 입력신호 생성 -> component 실체화 문으로 신호인가

5. 문법

5.1 VHDL의 문장(statement) 구성
   -> 사용 가능 문자(191 도형문자, 포멧제어문자, 주석, 보조문자세트)
   -> 분류 : (분리어, 구분어, 예약어, 식별어, 리터럴, 주석, 연산자, 형)

5.2 VHDL의 구조 detail

5.2.1 설계 엔티티
- entity delaration ; 설계 엔티티와 외부 환경 사이 인터페이스 정의
- architecture body ; 입출력 신호의 동작관계 규정
- configuration declaration ; 아키텍쳐 body와 엔티티 연결 정의

VHDL의 구조를 시각적으로 나타낸 것.

 

VHDL의 구조, 위 그림의 오른쪽 부분.


5.2.1.1 엔티티 선언(entity declaration)
    ; entity is 헤더, 선언부, end 가 주요 구조이다.

entity declaration

 - 디지털 시스템 : 반드시 엔티티 헤더  서술
 - 테스트 벤치 : 엔티티 헤더 없어도 됨.
 - 선언부, 문장부는 선택사항.

ex1) 
entity AND_Gate is
generic (N: Natural := 2);
port (Inputs: in bit_vector (1 to N);
Result: out bit);
end entity And_Gate;

ex2)
entity Full_Adder is
port (X, Y, Cin: in Bit; Cout, Sum: out Bit);
end Full_Adder;

ex3) 테스트 벤치 선언
entity TestBench is
end TestBench;

.1 엔티티 헤더
- 제네릭(generic clause) : 외부 환경 정보를 정의, 설계 엔티티로 전달. 
- 포트(port clause) : 설계 엔티티의 외부 인터페이스 입출력 신호 정의.
=> 포트절의 모드
  in : Read only( 할당 X ), 신호 배정문( '<=' )의 오른편에만 가능. 
        대부분 신호속성(attribute) 읽기 가능.
 out : Write only(할당만 가능). 신호 배정문( '<=' )의 왼편에만 가능.
         대부분 신호속성(attribute) 읽기 가능.

inout : Read & Write. 신호 배정문( '<=' ) 양쪽 가능, 
           대부분 신호속성(attribute) 읽기 가능.

buffer : Read & Write. 신호 배정문( '<=' ) 양쪽 가능, 
           대부분 신호속성(attribute) 읽기 가능.

linkage : Read & Write. 신호 배정문( '<=' ) 양쪽 가능. 이외 없음. 

-> inout과 buffer의 차이     
inout = in + out
 ; 양방향 버스, 메모리의 data port 모델링에 사용.
buffer = out + internal signal
 ; 출력신호의 내부적 사용이 필요할 때.
  -> 포트 모드는 in,out, inout만 권장.

.2 엔티티 선언부 ; 엔티티에 일관되게 적용되는 항목을 선언
entity ROM is
               port ( Addr: in Word;
                          Data: out Word;
                             Sel: in Bit);
               type Instruction is array (1 to 5) of Natural;
               type Program is array (Natural range <>) of Instruction;  
               useWork.OpCodes.all, Work.RegisterNames.all
               constant ROM_Code: Program :=
                          ( (STM, R14, R12, 12, R13), (LD, R7, 32, 0, R1 )) ;
end ROM;

.3 엔티티 문장부(entity statement)
  ; 엔티티에 공통으로 사용되는 문장 선언.
  ; 동작조건, 특성의 모니터 용
- 병렬문, 수동문(신호 배정 불가) 형태여야 함.

ex) entity Latch is
                port (      Din: in Word;
                             Dout: out Word;
                             Load: in Bit;
                                Clk: in Bit );
                 constant Setup: Time := 12 ns;
                 constant PulseWidth: Time := 50 ns;
                 useWork.TimingMonitors.all
                 begin
                             assert Clk='1' or Clk'Delayed'Stable (PulseWidth);
                             CheckTiming (Setup, Din, Load, Clk);
                 end Latch ;

5.2.1.2 아키텍쳐 본체(architecture body)

     - 입출력 신호의 동작관계 서술 ; structural, dataflow, behavioral
     - concurrent 다.
- ex1)
architecture DataFlow of Full_Adder is
                signal A,B: Bit;
  begin
                A <= X xor Y;
                B <= A and Cin;
                Sum <= A xor Cin;
                Cout <= B or (X and Y);
end architecture DataFlow;

- ex2)
library Test;
use Test.Components.all
architecture Structure of TestBench is
                  component Full_Adder
                                 port (X, Y, Cin: in Bit; Cout, Sum: out Bit);
                  end component;
                  signal A, B, C, D, E, F, G: Bit;
                  signal OK: Boolean;
begin
                   UUT: Full_Adder port map (A, B, C, D, E);
                   Generator: AdderTest port map (A, B, C, F, G);
                   Comparator: AdderCheck port map (D, E, F, G, OK);  
end Structure;
- ex3)
architecture Behavior of And_Gate is
begin
                              process (Inputs)
                                               variable Temp: Bit;
                               begin
                                               Temp := '1';
                                               for i in Inputs'Range loop
                                                           if Inputs(i) = '0' then
                                                                            Temp := '0'; exit;
                                                           end if;
                                                end loop;
                                                Result <= Temp after 10 ns;
                                end process;
  end Behavior;

- ex4) ; 반가산기 구현 => 출처 참고할 것.




5.2.1.3 configuration(구성)

 엔티티에 복수의 아키텍쳐가 존재할 경우,
      => 아키텍쳐와 엔티티를 연결하는 part.
 - 별도의 library에 존재하는 component를 연결짓는 part

ex1)
library IEEE;
use IEEE.std_logic_1164.all;
entity HalfAdder is
                     port (A, B: in std_logic; S, C : out std_logic);
end HalfAdder;
architecture Dataflow of HalfAdder is
begin
                       S <= A xor B; C <= A and B;
end Dataflow;
configuration HalfAdder_Conf of HalfAdder is
                  for Dataflow
                  end for;
end configuration HalfAdder_Conf;

ex2) 
 architecture Structure_View of Processor is
                  component ALU port ( ··· ); end component;
                  component MUX port ( ··· ); end component;
                  component Latch port ( ··· ); end component;
 begin
                  A1: ALU port map ( ··· );
                  M1: MUX port map ( ··· );
                  M2: MUX port map ( ··· );
                  M3: MUX port map ( ··· );
                   L1: Latch port map ( ··· );
                   L2: Latch port map ( ··· );
  end Structure_View;

library TTL, Work;
configuration Processor_Conf1 of Processor is
                 use Work.all
                 for Structure_View
                                for A1: ALU
                                             use configuration TTL.SN74LS181;
                 end for ;
                 for M1,M2,M3: MUX
                                     use entity Multiplex4 (Behavior);
                 end for ;
                 for all: Latch
                                     -- use defaults
               end for ;
       end for ;
end configuration Processor_Conf1;



6. VHDL을 이용한 설계 과정

 - architecture : 모두 병렬문(대부분 프로세스문)
 - 프로세스문 : 내부는 순차문
 - 부프로그램(프로시저,함수) : 내부는 순차문
 
- 나머지는 문법을 통한 기계적인 서술
    ; type, attribute(속성), interface, 가명, 콤포넌트 선언
    ; 식별어 선정(entity, architectucre, signal, variable)
    ; 콤포넌트 실체화, 부프로그램 호출, 생성문, 패키지, 라이브러리 사용


6.1 순차문 & 병렬문

 6.1.1 순차문 : 부프로그램이나 프로세스문의 수행을 위한 알고리즘 서술.
   -> 함수, 프로시저,프로세스문 내부알고리즘, 
   -> 순서대로 동작

순차문의 종류

-> 대기문, 보고문, 주장문,  지연 메커니즘, 배정문, 프로시저 호출문
if, case, loop, next, exit, return, null


 6.1.2 병렬문 : 회로의 동작이나 구조 서술

병렬문의 종류

    -> 프로세스, 블록사이 연결상태
    -> 아키텍쳐 내부 부분
    -> 각 병렬문은 독립,비동기적 동작.(하드웨어 동작 표현)
    -> 프로세스문, 블록문, 병렬 프로시저 호출문, 병렬 주장문, 병렬 신호 배정문, 콤포넌트 실체화 문, 생성문, 


                        




출처 :  http://dasan.sejong.ac.kr/~dihan/vhdl.htm

 

'전공지식정리 > 디지털시스템설계' 카테고리의 다른 글

VHDL 3.병렬문  (0) 2020.12.08
VHDL2.순차문  (0) 2020.12.08
Practical Combinational Logic design3  (0) 2020.12.08
Practical Combinational Logic design2  (0) 2020.12.08
practical combinational logic design 1  (0) 2020.12.08