VHDL의 기본 Lecture #4.

Slides:



Advertisements
Similar presentations
Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 언어론 2nd edition Tucker and Noonan 5 장 타입 “ 타입은 컴퓨터 프로그래밍의 효소이다 ; 프로그래밍은 타입을 통해 소화할만한 것이 된다.” 로빈.
Advertisements


Chapter 9. 컴퓨터설계기초 9-1 머리말 9-2 데이터 처리장치 (Datapath)
1 08 Simple Sequential Logic Design with Finite State Machines & Timing Design.
Introduction 2007년 2학기.
VHDL Package & Subprogram
C++ Tutorial 1 서강대학교 데이터베이스 연구실.
Copyright SangSangDom, All Rights Reserved.
VHDL 프로그램은 비동기 Reset을 갖는 D 플립플롭을 구현한 것이다
Dept. of Electronics & Info. Eng. Prof. Jongbok Lee
ASIC의 개요 ASIC(Application Specific Integrated Circuit) 특정 용도 주문형 집적회로
디지털 시계 설계.
제 1장 C 언어의 소개.
4장. 조합 논리 회로 Lecture #4.
Digital Logic Structures
Design of Digital Clock (디지털 시계의 설계)
디지털 시스템 2010년 1학기 교수: 송상훈 연구실: 율곡관 603-B
Computer System Architecture
7 조합논리회로 IT CookBook, 디지털 논리회로.
4 컴퓨터에서 활용되는 디지털 논리회로 IT CookBook, 컴퓨터 구조와 원리 2.0.
제 7 장 문장 구조화 제어문 지정문 조건문 반복문 GOTO 문 비결정적문.
순차로직 개요.
디지털 산술과 연산회로.
가산기 설계.
Ruby 프로그래밍 1 문자열 입출력 제어구조 looping 함수 정의
Multiplexer 설계.
VHDL의 기본 Lecture #5.
Verilog HDL 이론.
디지털 시스템 설계(3).
4장: 자료형과 수식.
VHDL Description D-latch C=1 일 때 Q 는 D의 입력 값 이 전달된다.
신호등 제어기 차량의 흐름에 따라 신호등의 신호를 제어하는 장치 신호등 제어기의 입출력 신호
공학실험.
Computer System Architecture
VHDL Package and Sub program
Chap. 18 라인 트레이서의 설계 라인 트레이서 바닥에 그려진 선을 따라가는 로봇을 의미 라인 트레이서 구성도
논리회로 설계 기초 (1) Lecture #1.
II. VHDL 설계부 4장. VHDL 개요 5장. VHDL 설계 구성 6장. VHDL 객체 및 타입 7장. VHDL 모델링
Chapter 9 – 부 프로그램 Outline 9.1 개요 9.2 매개변수 평가와 전달기법 9.3 형식 매개변수 명세
Ch2-2. VHDL Basic VHDL lexical element VHDL description
존슨카운터의 동작을 설명·설계할 수 있다 링카운터의 동작을 설명·설계할 수 있다
1장. 디지털 논리 회로 다루는 내용 논리 게이트 부울 대수 조합 논리회로 순차 논리회로.
Data type and Object 자료형 변환 함수들은 std_logic_arith 패키지에 정의되어 있음.
디지털 시스템 설계(2).
FSM 설계.
제 2 장 변수와 상수.
Flip-Flop 설계.
Section 02 덧셈 회로 BCD 덧셈 회로 BCD 코드에서 십진수 (16)BCD =
오브젝트 하드웨어 기술 언어 IT CookBook, VHDL을 이용한 디지털 회로 입문.
Programmable Logic Device
VHDL Mealy and Moore model
adopted from KNK C Programming : A Modern Approach
오브젝트 조합 회로 IT CookBook, VHDL을 이용한 디지털 회로 입문.
10. 소프트웨어 아키텍처 뷰 설계 명지대학교 융합소프트웨어학부 김정호 교수.
Introduction to Programming Language
VHDL 디지털시계 2.
프로그래밍언어론 2nd edition Tucker and Noonan
제 5장 변수, 바인딩, 식 및 제어문 5.1 변수 5.6 표현식 5.2 바인딩 5.7 조건문 5.3 선언 5.8 반복문
가산기 설계.
Chapter 4 변수 및 바인딩.
디 지 털 공 학 한국폴리텍V대학.
디지털 시계 설계 장성락 전영진 임종엽 전보현 이형준.
Signature, Strong Typing
Signature, Strong Typing
LCD.
Signature, Strong Typing
창 병 모 숙명여대 전산학과 자바 언어를 위한 CFA 창 병 모 숙명여대 전산학과
Introduction to Computer System 컴퓨터의 이해 3: 데이터 표현
VHDL 응용 Lecture #10.
Lecture 7 7-Segment LED controller using u-controller
Presentation transcript:

VHDL의 기본 Lecture #4

강의 내용 VHDL의 기본 VHDL 문장 VHDL 모델링 모바일컴퓨터특강

1. VHDL의 기본

VHDL의 기본 - 강의순서 VHDL Lexical Elements VHDL Design Description Object Data Type Attribute Operator Statements Concurrent vs. Sequential Statements 모바일컴퓨터특강

VHDL 어휘 요소 (1) 주석(comment) 식별어(Identifier) 연자부호(‘-’)를 연속적으로 2개(‘—’)로 시작하는 문장 예: entity AND_OR is -- Entity declaration port( A, B, C : in std_logic; Y : OUT std_logic); end AND_OR; 식별어(Identifier) 신호명, 변수명, 엔티티 이름 등과 같이 VHDL에서 식별 목적으로 사용하는 공백을 갖지 않는 문자열 대소문자 구분하지 않음 모바일컴퓨터특강

VHDL 어휘 요소 (2) 식별어(Identifier) (계속) 식별어 작성법 사용 예: 잘못 사용 예: 식별어는 영문자, 숫자 그리고 밑줄(‘_’)로 구성 식별어는 반드시 영문자로 시작해야 한다 식별어는 밑줄로 시작 또는 끝이 나면 안된다 식별어는 연속적으로 밑줄을 포함행서는 안된다 사용 예: Counter, next_value, s_1, s_2, generate_read_cycle 잘못 사용 예: last-value, _a0, a0_, clock__pulse, 4bit_counter 모바일컴퓨터특강

VHDL 어휘 요소 (3) 지정어(keyword) VHDL 구문을 위해 미리 지정된 문자열 대소문자 구분 없으며, 식별자로 사용할 수 없다 모바일컴퓨터특강

VHDL 어휘 요소 (4) 리터럴(Literal) 일련의 수치 값을 표현 정수 리터럴 / 실수 리터럴로 구분 정수 리터럴: 소수점이 없는 10진수, (예) 20, 0, 146 실수 리터럴: 소수점을 갖는 10진수, (예) 23.1, 0.0, 3.14 진수 표기가 가능 – 2진수, 8진수, 10진수 표기법 – 진수#수치데이터# 예 – 2진수 : 2#11011110# 8진수 : 8#0375# 16진수 : 16#FD# 밑줄(‘_’) 문자 사용 가능 긴 숫자 데이터를 읽기 쉽게 작성 예 – 123_456, 3.141_592_6, 2#1111_0101_1100_0000# 모바일컴퓨터특강

VHDL 어휘 요소 (5) 문자(Characters) 문자열(Strings) 비트 문자열(Bit Strings) 하나의 문자 데이터를 정의 단일 인용부호(single quotation) ‘ ‘ 를 사용 예 – ‘A’, ‘z’, ‘2’, ‘,’, ‘-’, ‘ ‘ etc. 문자열(Strings) 2개 이상의 문자들로 구성된 문자 배열 이중 인용부호(double quotation) “ “를 사용 예 – “A string”, “0001000”, etc. 비트 문자열(Bit Strings) 비트열을 2/8/16 진수 형태의 문자열로 표현 정의 형식 –”비트열”앞에 진수표시 문자(b/o/x)을 지정 예 – b”1111_0101_0000”, o”0375”, x”0d”, etc. 모바일컴퓨터특강

VHDL 어휘 요소 (6) 특수 기호(Special Symbols) 1개 또는 2개의 문자로 구성 예 - +, -, *, /, =, =>, <=, :=, etc. 모바일컴퓨터특강

VHDL Design Description VHDL design description은 설계하고자 하는 논리회로를 정의하는 entity와 architecture로 구성 Entity 하드웨어 외부입출력 인터페이스를 정의 하드웨어 블록의 이름과 입출력 PORT를 선언 Architecture 하드웨어의 내부를 표현 내부회로의 연결, 동작 또는 구조 등을 표현 모바일컴퓨터특강

Entity Declarations (1) 논리회로를 하나의 ‘Black Box’로 간주 Entity는 논리회로를 정의하는 이름과 외부와의 인터페이스 신호(I/O Signal)을 정의 BLACK_BOX rst d[7:0] clk q[7:0] co entity 논리회로이름 is port( rst : in std_logic; … co : out std_logic); end 논리회로이름; 모바일컴퓨터특강

Entity Declarations (2) 논리회로의 인터페이스 신호는 PORT 문장을 이용하여 정의 정의 형식 : 예 : port( rst : in std_logic; co : out std_logic ); PORT (signal_name : mode data_type); 모바일컴퓨터특강

Entity – Signal Mode The port mode describes the direction in which data travels with respect to the component in : data comes in this port and can only be read out : data travels out this port buffer : data may travel in either direction, but only one signal driver may be on at any one time inout : data may travel in either direction with any number of active drivers allowed ; requires a Bus Resolution Function 모바일컴퓨터특강

Entity – Signal Type 1 bit signal: bit, std_logic 2 bit 이상의 signal: bit_vector, std_logic_vector 2bit -- bit_vector(1 downto 0) std_logic_vector(1 downto 0) 4bit -- bit_vector(0 to 3) std_logic_vector(0 to 3) std_logic, std_logic_vector : IEEE 1164 Standard Signal Type으로 std_logic, std_logic_vector 이 사용될 때는 아래의 문장이 Entity문장 전에 미리 사용 되어야 함. Library ieee; Use ieee.std_logic_1164.all; 모바일컴퓨터특강

Entity 정의 예제 : ex_1 entity ex_1 is port ( A : in std_logic; B : inout std_logic; C : out std_logic; Y : buffer std_logic ); end ex_1; 모바일컴퓨터특강

Architecture Bodies (1) 논리회로의 동작, 내부회로의 연결 또는 내부 구조 등을 묘사 두 부분으로 구성 : 선언부 : 문장부에서 사용하는 신호, 변수, 상수 등을 정의하는 영역 type declarations, signal declarations, component declarations, subprogram declarations 병행문장부 : 논리회로의 내부 동작이나 구조를 묘사한 병행 문장을 포함하는 영역 concurrent signal assignment statements, process statements, component instantiation statements 모바일컴퓨터특강

Architecture Bodies (2) 기본 형식 : 병행문장부 begin과 end 사이에 서술된 문장들은 기본적으로 병행 수행 하드웨어 구현을 정의 동작적 표현(Behavioral Representation 자료흐름적 표현(Dataflow Representation) 구조적 표현(Structural Representation) 혼합적 표현(Mixed Representation) architecture 아키텍처_이름 of 엔티티_이름 is {선언부} begin {병행문} end 아키텍처_이름; 모바일컴퓨터특강

Entity / Architecture 구성 LIBRARY __library_name; USE __library_name.__package_name.ALL; ENTITY __entity_name IS PORT( __input_name, __input_name : IN STD_LOGIC; __input_vector_name : IN STD_LOGIC_VECTOR(__high DOWNTO __low); __bidir_name, __bidir_name : INOUT STD_LOGIC; __output_name, __output_name : OUT STD_LOGIC ); END __entity_name; ARCHITECTURE a OF __entity_name IS SIGNAL __signal_name : STD_LOGIC; BEGIN -- Process Statement -- Concurrent Procedure Call -- Concurrent Signal Assignment -- Conditional Signal Assignment -- Selected Signal Assignment -- Component Instantiation Statement -- Generate Statement END a; 모바일컴퓨터특강

Simple VHDL Code : AND Gate Library ieee; Use ieee.std_logic_1164.all; Entity and_2 is port( a, b : in std_logic; y : out std_logic ); end and_2; Architecture dataflow of and_2 is begin y <= a and b; end dataflow; Signal Type으로 std_logic이 사용될 때는 항상 사용. Entity 문장 : 입력 a,b, 출력 y를 나타냄 Architecture Body : 회로의 설명 모바일컴퓨터특강

객체(Object) VHDL에서 값을 가질 수 있는 객체는 3가지 종류 신호(Signals) 변수(Variables) 상수(Constants) The scope of an object is as follows : Objects declared in a package are available to all VHDL descriptions that use package Objects declared in an entity are available to all architecture associated with that entity Objects declared in an architecture are available to all statements in that architecture Objects declared in a process are available only within that process 모바일컴퓨터특강

객체(Object) - 신호 signal a, b, c : std_logic; VHDL 컴포넌트간의 연결에 사용되는 외적 변수 논리회로에서 구성 컴포넌트간을 연결하는 논리 신호(logic signal) 또는 선(wire)을 정의 All VHDL signal assignments require either delta cycle or user-specified delay before new value is assumed 신호는 일정 시간이 지난 시점에서 변한 값을 가진다 정의 형식 : 사용 예: signal a, b, c : std_logic; a <= ‘1’; b <= ‘0’; c <= a and b; SIGNAL signal_name : type_name [ :=value]; 신호 할당 연산자 : 오른쪽에 있는 값을 왼쪽의 시그널에 대입 모바일컴퓨터특강

객체(Object) – 신호 초기화 신호는 신호 선언 시에 초기화할 수 있다 신호의 초기화에서는 값을 바로 대입하므로 ‘<=‘ 연산자 대신에 ‘:=‘ 연산자를 사용한다 사용 예 : signal S : integer := 1; signal ONE_state : std_logic := ‘1’; signal Tmp : std_logic (3 downto 0) := “1010”; 모바일컴퓨터특강

객체(Object) – 신호 사용 예 Library ieee; Use ieee.std_logic_1164.all; Entity div_logic is port ( A, B, C : in std_logic; Y : out std_logic ); End div_logic; Architecture dataflow of div_logic is signal aorb : std_logic; signal ONE_state : std_logic := ‘1’; Begin aorb <= A or B; Y <= aorb and C and ONE_state; End dataflow; 모바일컴퓨터특강

객체(Object) - 변수 계산 결과를 임시로 저장하는 역할을 수행 프로세스문 또는 부프로그램 내에서만 유효한 내적 변수 Provide convenient mechanism for local storage 프로세스문 또는 부프로그램 내에서만 유효한 내적 변수 변수에 대한 할당연산은 즉시 실행되어 변수에 값이 바로 대입된다 정의 형식 : 사용 예 : variable a, b : std_logic; variable s : integer; a := ‘1’; b := ‘0’; s := 1; VARIABLE variable_name : type_name [ :=value]; 변수 할당 연산자 : 오른쪽에 있는 값을 왼쪽의 변수에 대입 모바일컴퓨터특강

객체(Object) – 변수 사용 예 모바일컴퓨터특강

객체(Object) - 상수 초기된 후에 값이 변하지 않는 데이터 객체 Allow for easy update and readability 정의 형식 : 사용 예 : constant bits3_0 : std_logic_vector(2 downto 0) := "000"; signal y : std_logic_vector(2 downto_0); y <= bits3_0; CONSTANT constant_name : type_name [ :=value]; 모바일컴퓨터특강

객체(Object) – 상수 사용 예 Even/Odd Bit Masking 모바일컴퓨터특강

자료형(Data Type) Scalar Types Composition Type 열거형(Enumeration Type) IEEE 1164 표준 자료형 부울형(Boolean Type) 정수형(Integer Type) 부동소수점형(Floating Type) Composition Type 배열형(Array Type) 레코드형(Record Type) 모바일컴퓨터특강

자료형 선언 (1) 자료형 선언 미리 정의된 자료형 이외의 자료형은 사용자가 별도로 선언하여 사용 자료형 선언 형식 : TYPE 자료형_이름 IS 자료형_명세; 사용 예 : TYPE Bit_4 IS (‘0’, ‘1’, ‘X’, ‘Z’); SIGNAL A : Bit_4; TYPE Digit IS INTERGER RANGE 0 TO 7; SIGNAL S : Digit; A <= ‘Z’; S <= 4; 열거형 자료형 선언 사용자 정의 자료형 선언 모바일컴퓨터특강

부자료형 선언 (2) 부자료형 선언 부자료형은 기본 자료형의 부분집합을 정의 부자료형 선언 형식 : SUBTYPE 부자료형_이름 IS 기본자료형_범위; 사용 예 : SUBTYPE BYTE IS STD_LOGIC_VECTOR(7 DOWNTO 0); SUBTYPE WORD IS STD_LOGIC_VECTOR(15 DOWNTO 0); TYPE ANY_NUMBER IS INTEGER RANGE 0 to 1023; SUBTYPE PART_NUMBER IS ANY_NUMBER RANGE 0 TO 15; 모바일컴퓨터특강

Data Type - Scalar Types(1) 열거형(Enumeration Type) 객체가 가질 수 있는 값을 열거하여 새로운 자료형을 정의 사용 예 : TYPE State_type IS (stateA, stateB, stateC); TYPE Bit_2 IS (‘0’, ‘1’); TYPE Bit_3 IS (‘0’, ‘1’, ‘Z’); TYPE Bit_4 IS (‘0’, ‘1’, ‘Z’, ‘X’); signal X : Bit_3; signal Y : State_type; X < = ‘Z’; Y <= stateC; 모바일컴퓨터특강

Data Type - Scalar Types(2) IEEE 1164 Standard Data Types IEEE Library의 std_logic_1164 패키지에서 선언 자료형 종류 : BIT / BIT_VECTOR STD_LOGIC / STD_LOGIC_VECTOR STD_ULOGIC SIGNED / UNSIGNED 논리 0 인 ‘0’과 논리 1 인 ‘1’의 값만 가지는 자료형 고임피던스(high impedance) 상태 등을 표현할 수 없어 현재는 거의 사용하지 않음 BIT_VECTOR – BIT의 배열형 VHDL 표준 IEEE 1076에 미리 정의되어 있음 모바일컴퓨터특강

Data Type - Scalar Types(3) STD_LOGIC / STD_LOGIC_VECTOR IEEE 1164 라이브러리에서 정의된 자료형으로 BIT 자료형 보다 융통성이 높은 자료형 정의된 값 : ‘0’ : Strong Logic 0 / ‘1’ : Strong Logic 1 ‘L’ : Weak Logic 0 / ‘H’ : Weak Logic 1 ‘Z’ : High Impedance ‘X’ : Strong Unknown / ‘W’ : Weak Unknown ‘U’ : Uninitialized / ‘-’ : Don’t Care STD_LOGIC_VECTOR – STD_LOGIC 자료형의 배열형 std_logic_vector(0 to 10) – 오름차순 배열형 정의 std_logic_vector(10 downto 0) – 내림차순 배열형 정의 모바일컴퓨터특강

Data Type - Scalar Types(4) STD_LOGIC / STD_LOGIC_VECTOR 사용 예: C(1)=‘0’, C(2)=‘1’, …,C(4)=‘1’ Byte(7)=‘1’, Byte(6)=‘0’, …,Byte(0)=‘0’ 모바일컴퓨터특강

Data Type - Scalar Types(5) STD_ULOGIC type std_ulogic is (‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-’); type std_logic is resolved std_ulogic; SIGNED / UNSIGNED SIGNED 자료형 : 부호있는 수 연산에 사용 UNSIGNED 자료형 : 부호없는 수 연산에 사용 사용 패키지 : ieee 라이브러리의 std_logic_arith 패키지 모바일컴퓨터특강

Data Type - Scalar Types(6) 부울형(Boolean Types) 참(TRUE)과 거짓(FALSE)의 논리값을 가지는 자료형 TRUE : 1, FALSE : 0 사용 예: TYPE BOOLEAN IS (false, true); signal flag : BOOLEAN; 정수형(Integer Type) 32 비트 크기의 정수를 표현 -231 ~ +(231-1) = -2147483648 ~ + 2147483947 음의 정수는 2의 보수로 표현 산술 연산자를 이용하여 산술 연산에 적용 모바일컴퓨터특강

Data Type - Scalar Types(7) 정수형(Integer Type) (계속) “RANGE~TO~” 지정어를 사용하여 작은 크기의 정수형을 정의 사용 예: variable COUNT : INTEGER RANGE 0 TO 19; signal S : INTEGER; -- 32-bit integer number signal X : INTEGER RANGE -128 TO 127; -- signed 8-bit number signal D : INTEGER RANGE 0 TO 15; -- 4-bit umber 부동소숫점형(Floating Type) Minimum range for any implementation as defined by standard : -1.0E38 to 1.0E38 모바일컴퓨터특강

Data Type-Composition Type (1) 배열형(Array Type) 순서화된 데이터들의 집합을 정의 배열 내의 모든 요소들은 같은 자료형을 가지며, 순서가 정해져 있다 제한적 배열 : 배열의 크기를 설정할 수 있는 배열 1차원 배열 TYPE Word IS array(15 downto 0) OF std_logic; TYPE Byte IS array(7 downto 0) OF std_logic; TYPE Mem IS array(1023 downto 0) OF std_logic; signal X : Byte 2 차원 배열 TYPE Mem IS array(0 to 1023) of std_logic_vector(15 downto 0); signal A : Mem; 모바일컴퓨터특강

Data Type-Composition Type (2) 배열형(Array Type) 무제한적 배열 : 배열의 크기를 지정하지 않은, 미리 정의되어 있는 배열 예 : TYPE BIT_VECTOR IS ARRAY(natural range <>) OF BIT; TYPE STD_LOGIC_VECTOR IS ARRAY(natural range <>) OF STD_LOGIC; 무제한적 배열에 대해 배열의 크기를 지정하기 위해서는 부자료형을 정의하여 사용 SUBTYPE low_part IS (BIT_VECTOR range 0 to 7); SUBTYPE high_part IS (BIT_VECTOR range 8 to 15); 모바일컴퓨터특강

Data Type Conversion 자료형 변환 신호들이 서로 다른 자료형을 갖는 경우에 신호들간의 데이터 할당 또는 연산을 허용되지 않는다 자료형이 혼용되었을 때에 자료형 변환 함수를 사용 CONV_INTEGER CONV_UNSIGNED CONV_SIGNED CONV_STD_LOGIC_VECTOR 자료형 변환 함수는 std_logic_arith 패키지에서 정의 사용 예: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; signal A, B : unsigned(7 downto 0); signal X, Y : integer; signal Z : std_logic_vector(7 downto 0); Y <= conv_integer(A + B); Z <= conv_std_logic_vector(X, 8); 모바일컴퓨터특강

속성(Attribute) (1) 속성은 신호에 대한 동작이나 상태를 표현하는 특성 속성 접근 형식 : 신호_이름’속성_이름 미리 정의된 속성(Predefined Attributes) low, high, left, right, pos, val, succ, pred ... X’EVENT -- TRUE when there is an event on signal X X’LAST_VALUE -- returns the previous value of signal X Y’HIGH -- returns the highest value in the range of Y X’STABLE(t) -- TRUE when no event has occurred on signal X in the past ‘t’ time 사용자 정의 속성(User-defined Attributes) 사용자가 필요에 따라 정의하여 사용하는 속성 모바일컴퓨터특강

속성(Attribute) (2) ‘event’ 속성 사용 예: 논리회로에서 가장 많이 사용하는 속성 클럭 신호의 에지 상태(rising edge/falling edge)에 따라 동작을 지정하는 경우에 사용 사용 예: 모바일컴퓨터특강

연산자(Operators) Defined precedence levels in decreasing order : Miscellaneous operators : **, abs, not Multiplication operators : *, /, mod, rem Sign operator : +,- Addition operators : sll, srl, sla, sra, rol, ror Relational operators : =, /=, <, <=, >, >= Logical operators : AND, OR, NAND, NOR, XOR, XNOR 연산자 우선순위 모바일컴퓨터특강

2. VHDL 문장

문장(Statements) (1) 병행 문장(Concurrent Statements) Signal Assignment, Simple Signal Assignment, Conditional Signal Assignment, Selected Process Statement 순차 문장(Sequential Statements) Wait Statement If Statement Case Statement For Loop Statement 모바일컴퓨터특강

문장(Statements) (2) 디지털 논리회로 내의 모든 요소들은 항상 병행적으로 동작하므로 병행문장을 사용하여 표현 일반 프로그램 언어와 같이 논리회로의 동작을 알고리즘 방식으로 정의하기 위해 순차문장을 사용 모바일컴퓨터특강

Concurrent Statements - Signal Assignment, Simple signal_name <= expression; (1) b에 변화가 생길 때마다 b의 값이 y에 출력됨 (2) Sensitivity List : b y <= b; y <= a or b; (1) a 나 b에 변화가 생길 때마다 a or b의 값이 y에 출력됨. (2) Sensitivity List : a,b 모바일컴퓨터특강

Concurrent Statements - Signal Assignment, Conditional signal <= expression1 WHEN boolean_expression1 ELSE expression2 WHEN boolean_expression2 ELSE expression3; (1) boolean_expression1= 참(True)이면 signal <= expression1이 실행되며, (2) boolean_expression2= 참(True) 이면 signal <= expression2이 실행되며, (3) 위의 2가지 조건이 모두 성립하지않으면 signal <= expression3이 실행된다. 모바일컴퓨터특강

Concurrent Statements - Signal Assignment, Selected WITH expression SELECT signal <= expression1 WHEN constant_value1, expression2 WHEN constant_value2, expression3 WHEN constant_value3; (1) expression = constant_value1 이면 signal <= expression1이 실행되며, (2) expresion1 = constant_value2 이면 signal <= expression2이 실행되며, (3) expresion1 = constant_value3 이면 signal <= expression3이 실행된다. 모바일컴퓨터특강

Concurrent Statements – Process Statement 복잡한 알고리즘의 구현 시 편리 Sensitivity List에 적혀있는 신호에 변화가 생길 때 begin과 end 내의 문장을 실행 Declaration syntax : [Label:] process [( Sensitivity List)] begin Sequential statements; end process [Label]; 모바일컴퓨터특강

Process Statement (1) A process is a VHDL construct used for grouping sequential statements Statements within a process are evaluated sequentially in terms of simulation Processes can be either active or inactive (awake or asleep) A Process typically has a SENSITIVITY LIST When a signal in the sensitivity list changes value, the process becomes active e.g., a process with a clock signal in its sensitivity list becomes active on changes of the clock signal 모바일컴퓨터특강

Process Statement (2) [label :] PROCESS (sensitivity list) BEGIN sequential statements END PROCESS [label]; All signal assignments occur at the END PROCESS statement in terms of simulation time The Process then becomes inactive 모바일컴퓨터특강

Process Statement (3) - An Example Example of sequential statements within a Process: mux: PROCESS (a, b, s) BEGIN IF s = '0' THEN x <= a; ELSE x <= b; END IF; END PROCESS mux; x(3 DOWNTO 0) s a(3 DOWNTO 0) b(3 DOWNTO 0) Note: logic within a process can be registered or combinatorial Note: the order of the signals in the sensitivity list is unimportant 모바일컴퓨터특강

The Process Sensitivity List A Process is invoked when one or more of the signals within the sensitivity list change, e.g., ARCHITECTURE archlist OF list IS BEGIN nand: PROCESS (a,b) c <= NOT (a AND b); END PROCESS nand; END archlist; Note: the process ‘nand’ is sensitive to signals ‘a’ and ‘b’ i.e., whenever signal ‘a’ or ‘b’ changes value, the statements inside of the process will be evaluated 모바일컴퓨터특강

Signal Assignment in Processes Consider a system which is to AND all the bits of a data bus: Input is a_bus Output is x ENTITY my_and IS PORT (a_bus: IN BIT_VECTOR(7 DOWNTO 0); x: BUFFER BIT); END my_and; 모바일컴퓨터특강

Signal Assignment in Processes - Incorrect Solution Solution using a process with sequential statements: ARCHITECTURE wont_work OF my_and IS BEGIN adder: PROCESS (a_bus) x <= ‘1’; FOR i IN a_bus'left downto 0 LOOP x <= a_bus(i) and x; END LOOP; END PROCESS adder; END wont_work; 모바일컴퓨터특강

Signal Assignment in Processes - Correct Solution Solution using a process with sequential statements and a concurrent signal assignment: ARCHITECTURE wont_work OF my_adder IS BEGIN adder: PROCESS (a_bus) VARIABLE b: BIT b := ‘1’; FOR i IN a_bus'left downto 0 LOOP b := a_bus(i) and b; END LOOP; x <= b; END PROCESS adder; END wont_work; 모바일컴퓨터특강

Sequential Statements – Wait Statement wait on signal [, signal] wait until boolean_expression wait for time_expression (1) 동작 - Suspends the sequential execution of a process or subprogram (2) 예 : (1) wait on a, b; (2) wait until ( x < 100 ); (3) wait for 10 ns; a,b에 변화가 생길 때까지 기다린다. X<100일 때까지 기다린다. 10ns동안 기다린다. 모바일컴퓨터특강

Sequential Statements – Wait on vs. explicit sensitivity list wait on statement process begin wait on a, b; y <= a and b; end process; Process 문을 사용하는 두 가지 방식 : 모두 가능함 explicit sensitivity list process (a, b) begin y <= a and b; end process; 모바일컴퓨터특강

Sequential Statements – IF Statement IF expression1 THEN statement1-1; statement1-2; ELSIF expression2 THEN statement2-1; statement2-2; ELSE statement3-1; statement3-2; END IF; 동작 방식 : (1) expression1 = 참(True)이면 statement1-1, state1-2가 실행, (2) expression2 = 참(True) 이면 statement2-1, state2-2가 실행, (3) 위의 2가지 조건 모두 성립하지않으면 statement3-1, state3-2가 실행 모바일컴퓨터특강

Sequential Statements – Case Statement CASE expression IS WHEN constant_value1 => statement1-1; statement1-2; WHEN constant_value2 => statement2-1; statement2-2; WHEN OTHERS => statement3-1; statement3-2; END CASE; 동작 방식 : (1) expression1 = constant_value1 이면 statement1-1, state1-2가 실행, (2) expression1 = constant_value1 이면 statement2-1, state2-2가 실행, (3) 위의 2가지 조건 모두 성립하지않으면 statement3-1, state3-2가 실행 모바일컴퓨터특강

Sequential Statements – For Statement (1) loop_label: FOR index_variable IN range LOOP statement1; statement2; END LOOP loop_label; 동작 방식 : (1) index_variable의 값이 변해가면서 statement1, statement2를 반복적으로 실행. (2) Range는 downto, to의 2가지 형태로 정의 가능 모바일컴퓨터특강

Sequential Statements – For Statement (2) loop_Start: FOR i IN 0 to 3 LOOP y(i) <= a(i) and b(i); END LOOP loop_Start; (a) y(0) <= a(0) and b(0); y(1) <= a(1) and b(1); y(2) <= a(2) and b(2); y(3) <= a(3) and b(3); (b) 모바일컴퓨터특강

3. VHDL 모델링

VHDL 모델링 방법 추상적 동작 표현(Behavioral Descriptions) 알고리즘방법으로 표현 데이터 흐름 표현(Dataflow Descriptions) 부울대수를 이용해서 표현 구조적 표현(Structural Descriptions) 단순한 선의 연결로 표현 혼합적 표현(Mixed Descriptions) 위의 3가지방법을 혼합 모바일컴퓨터특강

Behavioral Descriptions 동작적 표현 방식 논리회로의 동작에 대한 기능적 또는 알고리즘적 표현 논리회로에 대한 최상위 추상화 레벨 논리회로의 내부 구조에 대한 지식을 요구하지 않음 고급언어를 사용한 프로그램 작성방법과 유사 자료보관과 관리가 편리 process() 문을 주로 사용하여 표현 Process 문장 자체는 병행 문장  process 문장간에는 병행 수행 Process 문장 내에서는 순차 실행 모바일컴퓨터특강

Behavioral Description - Signal Assignment, Conditional 2 x 1 Multiplexer : library ieee; use ieee.std_logic_1164.all; entity mux21_when is port( a,b : in std_logic; s : in std_logic; y : out std_logic); end mux21_when; architecture a of mux21_when is begin y <= a when (s='0') else b; end a; 2x1 Mux a b s y 동작 명세: if s = 0 then y = a else y = b 마지막 조건은 else 로 처리해야 함 모바일컴퓨터특강

Behavioral Description - Signal Assignment, Conditional 모바일컴퓨터특강

Behavioral Description - Signal Assignment, Selected library ieee; use ieee.std_logic_1164.all; entity mux21_with is port( a, b: in std_logic; s : in std_logic; y : out std_logic); end mux21_with; architecture a of mux21_with is BEGIN WITH s SELECT y <= a WHEN ‘0’, b WHEN others; END a; 마지막 조건은 else 로 처리해야 함 모바일컴퓨터특강

Behavioral Description – Sequential Statement (IF) library ieee; use ieee.std_logic_1164.all; entity mux21_if_proc is port( a,b : in std_logic; s : in std_logic; y : out std_logic); end mux21_if_proc; architecture proc of mux21_if_proc is begin process(a,b,s) if( s='0') then y<=a; else y<=b; end if; end process; end proc; a, b,s 에 변화생길 때 실행 마지막 조건은 else로 처리해야 함. 모바일컴퓨터특강

Behavioral Description – Process Statement (case) library ieee; use ieee.std_logic_1164.all; entity mux21_case_proc is port( a,b : in std_logic; s : in std_logic; y : out std_logic); end mux21_case_proc; architecture proc of mux21_case_proc is begin process(a,b,s) case s is when '0' => y<= a; when others => y<= b; end case; end process; end proc; 마지막 조건은 others로 처리해야 함. 모바일컴퓨터특강

Behavioral Description – Signal vs. Variable library ieee; use ieee.std_logic_1164.all; entity andor_2 is port( a, b, c : in std_logic; y : out std_logic); end andor_2; architecture a of andor_2 is begin process(a,b,c) variablel t : std_logic; t :=a and b; y<=t or c; end process; end a; library ieee; use ieee.std_logic_1164.all; entity andor_2 is port( a, b, c : in std_logic; y : out std_logic); end andor_2; architecture a of andor_2 is signal t : std_logic; begin process(a,b,c,t) t<=a and b; y<=t or c; end process; end a; 선언되는 위치차이 Sensitivity List차이 2 1 1 Signal t는 Process문이 끝나는 순간에 일괄적으로 값이 할당. 2 3 Variable은 대입 즉시 값 할당. 모바일컴퓨터특강

Dataflow Descriptions 데이터 흐름 표현 입력과 출력과의 관계를 기술한 부울 대수식을 이용한 설계 방식 논로회로를 구성하는 구성 요소의 입출력 그리고 구성 요소간의 신호 흐름을 묘사하는 방식으로 논리회로를 설계 논리회로에 대한 중간 수준의 추상화 레벨 문장의 순서는 무관하다 병행처리문(Concurrent Statement)를 주로 사용 모바일컴퓨터특강

Dataflow Description - 2-입력 AND Gate Library ieee; Use ieee.std_logic_1164.all; Entity and_2 is port( a, b : in std_logic; y : out std_logic ); end and_2; Architecture dataflow of and_2 is begin y <= a and b; end dataflow; Dataflow방식은 부울대수를 그대로 표현 모바일컴퓨터특강

Dataflow Description - 2입력 OR Gate Library ieee; Use ieee.std_logic_1164.all; Entity or_2 is port( a, b : in std_logic; y : out std_logic ); end or_2; Architecture dataflow of or_2 is begin y <= a or b; end dataflow; 모바일컴퓨터특강

Dataflow Description - Andor_2 Circuit library ieee; use ieee.std_logic_1164.all; entity andor_2 is port( a, b, c : in std_logic; y : out std_logic); end andor_2; architecture a of andor_2 is signal t : std_logic; begin t<=a and b; y<=t or c; end a; 모바일컴퓨터특강

Dataflow Description – 4 bits OR gate Bus의사용 library ieee; use ieee.std_logic_1164.all; entity or_4bits is port( a, b : in std_logic_vector(3 downto 0); y : out std_logic_vector(3 downto 0) ); end or_4bits; architecture xxx of or_4bits is begin y <= a or b; end xxx; 모바일컴퓨터특강

Dataflow Description - Half Adder library ieee; Use ieee.std_logic_1164.all; Entity half_add is port( a,b : in std_logic; sum, c_out : out std_logic ); end half_add; Architecture dataflow of half_add is begin sum <= A xor B; c_out <= A and B; end dataflow; 문장의 순서는 무관 모바일컴퓨터특강

Dataflow Description - Full Adder library ieee; use ieee.std_logic_1164.all; entity fulladd is port( a, b, cin : in std_logic; s, cout : out std_logic); end fulladd; architecture a of fulladd is signal t1, t2, t3 : std_logic; begin t1 <= a xor b; t2 <= a and b; t3 <= t1 and cin; s <= t1 xor cin; cout <= t2 or t3; end a; t1 t2 t3 문장의 순서는 무관 모바일컴퓨터특강

Dataflow Description - Decoder3_8 library ieee; use ieee.std_logic_1164.all; entity decoder38_data is port( d2, d1, d0 : in std_logic; y0,y1,y2,y3,y4,y5,y6,y7 : out std_logic); end decoder38_data; architecture xxx of decoder38_data is signal nd2, nd1, nd0 : std_logic; Begin nd2 <= not d2; nd1 <= not d1; nd0 <= not d0; y0<= nd2 and nd1 and nd0; y1<= nd2 and nd1 and d0; y2<= nd2 and d1 and nd0; y3<= nd2 and d1 and d0; y4<= d2 and nd1 and nd0; y5<= d2 and nd1 and d0; y6<= d2 and d1 and nd0; y7<= d2 and d1 and d0; end xxx; 모바일컴퓨터특강

Structural Descriptions 구조적 표현 논리회로의 구성 요소 및 구성 요소간의 연결까지 표현 가장 하드웨어적 표현에 가까움 Graphic Editor를 이용한 고전적인 설계방식과 동일 Component( ) 문을 이용하여 구성 요소 종류를 선언 Component Instantiation을 통해 구성 요소 객체와 객체간을 연결 정의 port map( ) 문을 이용하여 핀들을 서로 연결. 위치결합(positional association) Port문 내의 Signal의 위치순서대로 나열 이름결합(named association) Port문 내의 Signal의 위치순서와는 상관없이 (port문 내의 형식이름=>실제 이름)의 방식으로 결합 모바일컴퓨터특강

Structural Description - Andor_2 library ieee; use ieee.std_logic_1164.all; entity andor_2 is port( a, b, c : in std_logic; y : out std_logic); end andor_2; architecture a of andor_2 is component and_2 port( a, b : in std_logic; y : out std_logic ); end component; component or_2 signal t : std_logic; begin U1 : and_2 port map ( a, b, t ); U2 : or_2 port map( a=> t, b=>c , y=>y); end a; and_2.vhd, or_2.vhd는 미리 작성된 상태임. And_2선언 Or_2선언 Component Instantiation 모바일컴퓨터특강

Structural Description - Andor_2 library ieee; use ieee.std_logic_1164.all; entity andor_2 is port( a, b, c : in std_logic; y : out std_logic); end andor_2; architecture a of andor_2 is component and_2 port( a, b : in std_logic; y : out std_logic ); end component; component or_2 signal t : std_logic; begin U1 : and_2 port map ( a, b, t ); U2 : or_2 port map( a=> t, b=>c , y=>y); end a; And_2 :위치결합방식 Or_2 : 이름결합방식 형식이름 모바일컴퓨터특강 실제이름

Structural description – 4 bits adder tcout1 library ieee; use ieee.std_logic_1164.all; entity add_4bits is port( a, b : in std_logic_vector(3 downto 0); cin : in std_logic; sum : out std_logic_vector(3 downto 0); cout : out std_logic ); end add_4bits; architecture a of add_4bits is component fulladd port( a, b, cin : in std_logic; s, cout : out std_logic); end component; signal tcout1, tcout2, tcout3 : std_logic; begin U1 : fulladd port map( a(0), b(0), cin, sum(0), tcout1); U2 : fulladd port map( a(1), b(1), tcout1, sum(1), tcout2); U3 : fulladd port map( a(2), b(2), tcout2, sum(2), tcout3); U4 : fulladd port map( a(3), b(3), tcout3, sum(3), cout); end a; tcout2 tcout3 Fulladd.vhd는 미리 작성된 상태임 모바일컴퓨터특강

Structural Description - Mux 8X1 Library ieee; Use ieee.std_logic_1164.all; entity mux8_1 is port( a, b, c, d, e, f, g, h : in std_logic; s2, s1, s0 : in std_logic; y : out std_logic); end mux8_1; architecture xxx of mux8_1 is component decoder3_8 port( a, b, c : in std_logic; d0,d1,d2,d3,d4,d5,d6,d7 : out std_logic); end component; signal t : std_logic_vector(7 downto 0); signal d0,d1,d2,d3,d4,d5,d6,d7 : std_logic; begin U1: decoder3_8 port map( s2,s1,s0,d0,d1,d2,d3,d4,d5,d6,d7); t(0) <= a and d0; t(1) <= b and d1; t(2) <= c and d2; t(3) <= d and d3; t(4) <= e and d4; t(5) <= f and d5; t(6) <= g and d6; t(7) <= h and d7; y <= t(0) or t(1) or t(2) or t(3) or t(4) or t(5) or t(6) or t(7); end xxx; t(0) t(1) t(2) t(3) t(4) t(5) t(6) t(7) Decoder3_8.vhd는 미리 작성된 상태임 Mixed Modelling : structure + dataflow 모바일컴퓨터특강

Structural Description – 4bits Mux 8X1 Library ieee; Use ieee.std_logic_1164.all; Entity mux81_4bits is port( a, b, c, d, e, f, g, h : in std_logic_vector(3 downto 0); s2, s1, s0 : in std_logic; y : out std_logic_vector(3 downto 0)); end mux81_4bits; Architecture a of mux81_4bits is component mux8_1 port( a, b, c, d, e, f, g, h : in std_logic; s2, s1, s0 : in std_logic; y : out std_logic); end component; begin U0: mux8_1 port map (a(0),b(0),c(0),d(0),e(0),f(0),g(0),h(0),s2,s1,s0,y(0)); U1: mux8_1 port map (a(1),b(1),c(1),d(1),e(1),f(1),g(1),h(1),s2,s1,s0,y(1)); U2: mux8_1 port map (a(2),b(2),c(2),d(2),e(2),f(2),g(2),h(2),s2,s1,s0,y(2)); U3: mux8_1 port map (a(3),b(3),c(3),d(3),e(3),f(3),g(3),h(3),s2,s1,s0,y(3)); end a; 모바일컴퓨터특강