You are on page 1of 22

1.

Entity:
- Define Extenal Interface(port: Input Port, Output Port, InOutput Port)

2. Architecture
- Entity의 내부 동작 또는 부품 간의 연결 구조 명세
- Entity -- N개 Architecture 가능

3. process(sensitive list)
- Process 내부는 순차 실행
- sensitive list: process 실행 트리거 신호(Signal), 신호 또는 변수의 변화를 야기하는 이벤트
- 하나의 Architecture에 여러 개의 Process문이 있다면, 이 각각의 Process 문은 병렬로 동작

4. Component
4. Configuration
- 하나의 Entity가 여러 Architecture를 가지고 있을 때, 특정 Architecture를 지목하여 연결 또는
특정 Entity와 Component Instances를 연결
- 테스트 벤치와 같은 것을 작성할 때 유용
5. Package
- 여러 설계에서 사용할 수 있는 전역 데이터형(Type), 부품개체(Component), 함수(Function) 및
프로시저(Procedure) 선언 및 구현
- 여러 설계에서 중복하여 정의하지 않고 공통으로 사용할 수 있도록 만들어 놓은 코드
5. Function 및 Procedure
- 주로 Package에 포함되어 사용되는 서브프로그램
- 예제) Package에 입력 X와 Y를 논리연산 OR를 하여 그 결과를 돌려(Return)주는 Function을 기
술한다고 가정하여 설계하면 다음과 같다.
- Package에 정의된 함수를 사용하여 논리연산 OR를 수행하는 동작을 VHDL 코드로 작성하면 다
음과 같다.
- Procedure에서는 매개변수 목록에 입력 변수와 출력 변수를 모두 포함
- Procedure는 매개변수의 모드로서 in, out, inout을 사용할 수 있음
- 특별히 지정하지 않는 경우에는 in으로 인식함.
- 주의: 몇몇 시뮬레이션 툴에서는 Procedure의 signal 매개변수의 사용이 지원되지 않는 경우도
있음. 이러한 경우에는 Procedure 선언 시 signal 매개변수 대신에 variable 매개변수 사용함..
- 순차처리 문은 항상 Process 문, 함수, 프로시저에서 쓰여짐.

6. 변수(Variable)와 신호(Signal)
- 변수는 프로세스 또는 함수, 프로시저와 같은 서브프로그램 내에서만 선언 가능
- 변수는 값의 할당과 동시에 즉시 값이 갱신
- 신호는 Entity, Architecture, Package, Block에서만 선언 되며, 값의 할당 시에는 일정 지연
후에 값이 갱신됨.
참고: Variable과 Signal의 할당은 VHDL 루프문 내에 모두 사용할 수 있다. 그러나 다음과 같은
이유로 루프 내에는 변수를 사용하도록 하는 것이 좋다.
․ 시뮬레이션이 빨라짐.
․ 합성결과로 생성된 회로를 쉽게 예측할 수 있음.

- 결과를 출력인 D에 할당. 이때 출력 신호는 할당 후, 1 ns 이후에 나타나며, 지연시간 1 ns는


합성 시에 고려되지 않음을 유의. 단, 시뮬레이션 파형을 관찰하면, 지연시간 1 ns로 지정한 내용이
반영되어 실제 출력 신호는 1 ns 지연 후에 나타남을 확인할 수 있음.

7. 동기회로

출력을 클록에 동기시키는 D 플립플롭이 추가됨.


- 동기회로는 클록의 상승 엣지(Rising Edge) 또는 하강 엣지(Falling Edge)를 기준으로 모든 신
호가 전달되는 것을 말함. 변화의 기준이 클록임.

8. 신호 지연

- A와 B의 논리 연산 AND가 수행되자마자 해당 정보가 변수에 반영되지만, Temp 신호는 지연


시간 3 ns 이후에 출력이 나타남.

- 그림은 Signal 로 변경하여 출력 지연시간을 갖는 동기회로를 나타냄. 입력신호 A, B 에 대한 논


리 AND 연산의 결과가 바로 OR 게이트로 전달되지 않고 도중에 D 플립플롭에 임시로 머물게
됨. 이때 신호전달 지연의 3 ns 시간 동안 플립플롭에 머물다 OR 게이트로 전달되고, 이후에 최종
출력 D 에도 신호 전달 지연을 1 ns 시간 동안 신호가 플립플롭에 머물다 최총 출력 D 에 전달됨.
9. 루프에서의 변수(Variable)와 신호(Signal)의 할당문

- 루프 반복변수 N 은 별도로 변수지정을 하지 않음. for 루프는 위의 코드에서 보인 바와 같이 3


에서 1 까지 1 씩 감소하면서 “for ... loop”와 “end loop” 사이의 할당문을 반복실행.
- 루프의 루프변수의 감소방향의 반복을 아래의 코드와 같이 증가방향의 코드로 바꾼 경우
- 아래 코드는 단지 Variable을 Signal로 변경. 주의, Signal과 Variable의 선언 위치가 서로 다름.
Signal을 이용한 시프트 레지스터의 설계는 Variable을 이용한 시프트 레지스터의 설계에서와 같
이 동일한 동작을 수행(시그널의 값 할당은 Delta Delay가 있기 때문임). Variable과 Signal의 특징
에 대해 유념하여 VHDL 코딩해야 함.

10. 열거형 데이터형(Enumeration Data Type)

11. 정수 데이터형(Integer Data Type)

범위는 항상 명시하여야 함. 만일 명시하지 않는다면 (-231+1)에서 (231-1)까지의 범위로 결정


됨. 이런 범위는 너무 큰 범위이기 때문에 필요한 것보다 훨씬 많은 논리회로로 합성됨. 물론 최
적화 과정에서 제거될 수도 있지만 그 또한 합성에 있어 필요 없는 부담을 주게됨.

12. 복합 데이터형(Composite Data Type)


- 배열(Array): 배열형은 RAM이나 ROM과 같은 구조를 모델링하는데 매우 편리
- 배열형은 무제한적 배열(Unconstrained Array)과 제한적 배열(Constrained Array)이 있으며 그
예는 아래 그림임.

13. RAM
- 8bit address, 8bit 입력 데이터버스, 8bit 출력데이터 버스, 메모리크기는 8 × 256bit
- WRITE_ENABLE 쓰기 가능 신호로서 논리 ‘1’이고 클록이 상승 엣지이면 ADDRESS가 가리키는
주소에 데이터를 쓰고, 논리 ‘0’이고 클록이 상승 엣지이면 ADDRESS가 가리키는 주소의 데이터를
OUT으로 출력.
- 동기적 RAM을 VHDL로 모델링하면 다음과 같음.
- 메모리 워드의 비트열를 subtype에서 정의
- 전체 Addressing 가능한 주소영역으로 이 비트열을 확장시켜 메모리 배열을 만듦
- 그 데이터형을 type문을 사용하여 RAM_TABLE이라는 이름으로 정의
- 데이터의 입력 및 출력이 클록 상승 엣지에서 동작

14. ROM
- 7bit 데이터워드에 100개의 Address가 있는 ROM을 구현한 VHDL 코드
- 메모리의 데이터가 이미 정해져 있는 ROM이므로 실제로 ROM_TABLE 형으로 정의되는 것
은 signal이 아닌 constant로 정의됨.
- 또한 ROM 내부에 저장되는 값은 초기치 할당 연산자인 “:=”로 정의되어 있음.
15. 레코드(Record)
- 구조체
- 레코드 필드 전체가 피연산자에 사용되는 예제
16. 실수형(Floating Point Type)
- 실수형은 합성을 위한 회로에서는 사용해서는 안되고 다만 상위 레벨의 동작 모델링에서만 사

- 부동소수점에서는 정의된 실수값이 한정된 비트로 환산되어 근사값으로 표현됨.
- 표현범위는 -1.0×1038에서 1.0×1038까지

17. 부울대수형(Boolean Type)


- 부울대수형은 논리의 참과 거짓을 나타내는 데에만 쓰이는 것으로 논리 상태를 나타내는 0, 1
과는 다른 의미

18. Bit 및 Bit_Vector형


- Bit Type형은 ‘0’과 ‘1’의 이진 상태만을 나타냄
- 산술연산지원이 안되고 3상태 논리(Tristate)나 와이어드 로직(Wired Logic)이 지원이
안되는 데이터형임.
- Bit_Vector는 다수 비트의 비트형 데이터를 정의할 때 사용됨.

19. Std_Ulogic 및 Std_Ulogic_Vector형


- ‘0’, ‘1’, ‘U(undefined)’, ‘Z(High Impedance)’ 상태 등 여러 논리 상태를 표현할 수는 있음

20. Std_Logic 및 Std_Logic_Vector형


- 회로 합성을 목적으로 VHDL로 설계할 때 가장 보편적으로 쓰일뿐만 아니라 가장 권
장되는 데이터형임.
- ‘0’, ‘1’, ‘U(undefined)’, ‘Z(High Impedance)’ 등 다양한 형태의 논리 상태를 표현할 수 있
고, 한 신호에서 Multiple Driver 형태의 하드웨어를 모델링할 수 있음.
- Std_Logic_Vector는 Std_Logic형의 데이터가 다수의 비트로 구성되어 있을 때 사용함.

21. IEEE 1076.3 Unsigned와 Signed형


- unsigned형은 부호가 없는 수를 나타낼 때 쓰이고 Std_Logic을 기본형으로 만들어졌음.
- signed형은 전체 비트의 최상위 Bit가 부호(Sign)로 사용되며, 연산 시 2의 보수(2‘s
Complement) 형태로 연산함.
- Std_Logic이 기본형이지만 Std_Logic에 직접 할당할 수 없음. 따라서 이러한 경우에는
데이터형 변환(Data Conversion) 함수를 통해 데이터형을 동일하게 맞춘 다음 할당하여야
함.
- 데이터변환 함수는 IEEE 라이브러리의 Std_Logic_Arith에 정의되어 있으며, 다음과 같은
함수가 제공

〮 CONV_INTEGER : Integer, Unsigned, Signed 또는 Std_Ulogic을 Integer 값을 변환.


CONV_INTEGER 함수로 변환하고자 하는 수의 범위는 –2147483647에서 2147483647로
제한되어 있으며, 이는 31-Bit Unsigned 값 또는 32-Bit Signed 값임.
〮 CONV_UNSIGNED : Integer, Unsigned, Signed 또는 Std_Ulogic을 파라미터에 명시한 크
기의 Unsigned 값으로 변환함.
〮 CONV_SIGNED : Integer, Unsigned, Signed 또는 Std_Ulogic 파라미터에 명시한 크기
의 Signed 값으로 변환함.
〮 CONV_STD_LOGIC_VECTOR : Integer, Unsigned, Signed 또는 Std_Ulogic을 파라미터에
명시한 크기의 Std_Logic_Vector 값으로 변환함.
- Conv_Integer 함수의 사용의 예시
21. 연산자(Operators)

You might also like