VHDL의 기본 Lecture #5.

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 언어의 소개.
Design of Digital Clock (디지털 시계의 설계)
Computer System Architecture
제 7 장 문장 구조화 제어문 지정문 조건문 반복문 GOTO 문 비결정적문.
순차로직 개요.
디지털 산술과 연산회로.
가산기 설계.
제 6 장 데이터 타입 6.1 데이터 타입 및 타입 정보 6.2 타입의 용도 6.3 타입 구성자 6.4 사례 연구
Ruby 프로그래밍 1 문자열 입출력 제어구조 looping 함수 정의
Multiplexer 설계.
Verilog HDL 이론.
디지털 시스템 설계(3).
4장: 자료형과 수식.
VHDL Description D-latch C=1 일 때 Q 는 D의 입력 값 이 전달된다.
신호등 제어기 차량의 흐름에 따라 신호등의 신호를 제어하는 장치 신호등 제어기의 입출력 신호
프로그래밍언어론 2nd edition Tucker and Noonan
Chapter 6 – 변수, 바인딩, 식 및 제어문 Outline 6.1 변수 6.2 바인딩 6.3 선언 6.4 배정문
VHDL Package and Sub program
Chap. 18 라인 트레이서의 설계 라인 트레이서 바닥에 그려진 선을 따라가는 로봇을 의미 라인 트레이서 구성도
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
존슨카운터의 동작을 설명·설계할 수 있다 링카운터의 동작을 설명·설계할 수 있다
VHDL의 기본 Lecture #4.
Data type and Object 자료형 변환 함수들은 std_logic_arith 패키지에 정의되어 있음.
디지털 시스템 설계(2).
Chapter 2. Finite Automata Exercises
FSM 설계.
제 2 장 변수와 상수.
Flip-Flop 설계.
Section 02 덧셈 회로 BCD 덧셈 회로 BCD 코드에서 십진수 (16)BCD =
오브젝트 하드웨어 기술 언어 IT CookBook, VHDL을 이용한 디지털 회로 입문.
Programmable Logic Device
4주차: Data Types and Functions
VHDL Mealy and Moore model
adopted from KNK C Programming : A Modern Approach
Chapter 2 Lexical Elements, Operators, and the C System
오브젝트 조합 회로 IT CookBook, VHDL을 이용한 디지털 회로 입문.
adopted from KNK C Programming : A Modern Approach
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 창 병 모 숙명여대 전산학과
이산수학(Discrete Mathematics)
이번 시간에는... 지난 시간까지 2회차에 걸쳐 WML의 택스트 포맷, 이미지 처리, 페이지 이동, 태스크 수행과 이벤트 처리 및 WML 사용자 Input 처리 태그 등, WML 개발에 대해서 알아보았습니다. 이번 시간에는 2회차에 걸쳐, WML 스크립트 개발에 대해서.
Introduction to Computer System 컴퓨터의 이해 3: 데이터 표현
VHDL 응용 Lecture #10.
Lecture 7 7-Segment LED controller using u-controller
Presentation transcript:

VHDL의 기본 Lecture #5

1. VHDL의 기본

VHDL의 기본 - 강의순서 VHDL Lexical Elements VHDL Design Description Object Data Type Attribute Operator Statements Concurrent vs. Sequential Statements VHDL의 기본

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의 기본

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

VHDL 어휘 요소 (3) 지정어(keyword) VHDL 구문을 위해 미리 지정된 문자열 대소문자 구분 없으며, 식별자로 사용할 수 없다 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의 기본

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의 기본

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

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

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 논리회로이름; VHDL의 기본

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

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 VHDL의 기본

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; VHDL의 기본

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; VHDL의 기본

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

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

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; VHDL의 기본

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 : 회로의 설명 VHDL의 기본

객체(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 VHDL의 기본

객체(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]; 신호 할당 연산자 : 오른쪽에 있는 값을 왼쪽의 시그널에 대입 VHDL의 기본

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

객체(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; VHDL의 기본

객체(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]; 변수 할당 연산자 : 오른쪽에 있는 값을 왼쪽의 변수에 대입 VHDL의 기본

객체(Object) – 변수 사용 예 VHDL의 기본

객체(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]; VHDL의 기본

객체(Object) – 상수 사용 예 Even/Odd Bit Masking VHDL의 기본

자료형(Data Type) Scalar Types Composition Type 열거형(Enumeration Type) IEEE 1164 표준 자료형 부울형(Boolean Type) 정수형(Integer Type) 부동소수점형(Floating Type) Composition Type 배열형(Array Type) 레코드형(Record Type) VHDL의 기본

자료형 선언 (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; 열거형 자료형 선언 사용자 정의 자료형 선언 VHDL의 기본

부자료형 선언 (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; VHDL의 기본

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; VHDL의 기본

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에 미리 정의되어 있음 VHDL의 기본

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) – 내림차순 배열형 정의 VHDL의 기본

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’ VHDL의 기본

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 패키지 VHDL의 기본

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의 보수로 표현 산술 연산자를 이용하여 산술 연산에 적용 VHDL의 기본

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 VHDL의 기본

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; VHDL의 기본

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); VHDL의 기본

Data Type Conversion 자료형 변환 신호들이 서로 다른 자료형을 갖는 경우에 신호들간의 데이터 할당 또는 연산을 허용되지 않는다 자료형이 혼용되었을 때에 자료형 변환 함수를 사용 CONV_INTEGER CONV_UNSIGNED CONV_SIGNED CON_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 <= std_std_logic_vector(X, 8); VHDL의 기본

속성(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) 사용자가 필요에 따라 정의하여 사용하는 속성 VHDL의 기본

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

연산자(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 VHDL의 기본

2. 문장(Statements)

문장(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 VHDL의 기본

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

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 VHDL의 기본

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이 실행된다. VHDL의 기본

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이 실행된다. VHDL의 기본

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

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동안 기다린다. VHDL의 기본

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; VHDL의 기본

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가 실행 VHDL의 기본

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가 실행 VHDL의 기본

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가지 형태로 정의 가능 VHDL의 기본

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) VHDL의 기본