II. VHDL 설계부 4 장. VHDL 개요 5 장. VHDL 설계구성 7 장. VHDL 모델링 8 장. VHDL 구문과예제 - 1 -
어휘요소 (Lexical Elements) 식별자, 리터럴, 예약어, 구분자로구분되어지며, 식별자와예약어의경우대소문자의구별이없다. 객체 (Objects) 류가있다. 데이터를저장하기위한기억장소를나타내며, 상수 / 변수 ( 파일 )/ 신호의종류가있다. 타입 (Type) 속성 (Attribute) 연산자 (Operator) 객체들의데이터유형을선언하여값의종류와특성을정의한다. 객체의추가정보및상태를표현한다. 정의된속성과사용자정의속성으로구분된다. 연산문에서사용되는연산기호로써, 피연산자를입력으로결과를출력하는함수의역할을수행한다. 서브프로그램 반복되는연산과정및수행절차를간소화하기위한표현방법으로써, 연산 (Subprogram) 계산과정은함수로나타내며수행절차과정은프로시쥬어로기술한다. - 2 -
어휘요소 (Lexical Elements) 어휘요소의종류 식별자 (Identifier), 리터럴 (Literal), 예약어 (Reserved Word), 구분자 (Delimiter) 대소문자에대한구별이없다. VHDL, Vhdl, vhdl : 모두동일한이름으로간주된다. VHDL 93 의경우 Extended_Identifier 는대소문자구별이가능하다. 주석 (comment) 는 Double Dash(--) 로표시되며, 한줄을주석화한다. 선언 / 문장단위는 Semicolon(;) 으로구분된다. 모든선언들은지역적 (Local) 유효영역 (Scope) 을갖는다. - 3 -
Identifier Extended Identifier Reserved Word Delimiter D_FF /VHDL/ ENTITY := U123 /vhdl/ OF <= pentium /Vhdl/ END ; Decimal Character Physical Based Literal Literal Literal Literal 123 A 2e-2 # 12.34_56 a Bit String Literal String Literal 30 ns 2#1011#E2 100 pf 16#EF.0A# B 1010_0101 X ABCDEF O 7654_3210 Warning!! - 4 -
객체 (Objects) 데이터를저장하기위한기억장소 객체의분류 상수 (Constant) 고정된데이터를기록하는객체로병행문 / 순차문에서사용가능하다. 변수 (Variable) 가변적인데이터를기록하는객체로순차문에서만사용가능하며, 여러프로세스에서공유할수없다. Shared Variable의경우여러프로세스에서공유할수있으나, 값의변화에대한처리방법은정하지않았다. 다수의프로세스에서순차적으로사용하도록설계해야한다. 파일 (File) 파일처리를위한변수객체이다. 신호 (Signal) 시간에따른데이터의변화를나타낼수있는객체로병행문 / 순차문에서사용가능하다. - 5 -
Object Constant Signal Variable File 데이터변경타이밍정보 X O O O X O X X 선언영역 Entity Architecture Package Package Body Block Process Subprogram Entity Architecture Package Block Process Subprogram Entity Architecture Package Package Body Block Process Subprogram - 6 -
객체 VHDL 표현 상수선언 (Constant Declaration) CONSTANT con : bit := 0 ; 초기값을설정해주어야한다. 초기값이없는상수선언은 deferred constant로구분된다. 패키지선언에서만가능하며, 초기값은패키지몸체에서정의한다. 변수선언 (Variable Declaration) VARIABLE var : bit ; VARIABLE temp, reg : integer := 100; SHARED VARIABLE stemp, sreg : integer := 100; 초기값이없는경우 default value로설정된다. Default Value 해당타입의최소값을나타낸다. (type_name LEFT) Shared Variable의선언형식은변수선언과동일하다. - 7 -
파일선언 (File Declaration) FILE input : text OPEN read_mode IS STD_INPUT ; READ_MODE/WRITE_MODE/APPEND_MODE 형식으로파일을처리한다. 신호선언 (Signal Declaration) SIGNAL sig : bit_vector(7 DOWNTO 0) := 00001111 ; 초기값이없는경우 default value 로설정된다. - 8 -
포트 (Port) 및신호 (Signal) 포트의특성 외부와의연결통로 / 핀의개념을갖는다. 신호객체로분류된다. 포트의방향성 (Mode) 입출력방향을정의한다. IN : 외부에서포트로입력된다. OUT : 포트에서외부로출력된다. INOUT : 외부에서포트로입출력된다. BUFFER : 포트에서외부로출력되며, 내부에서포트의값을참조할수있다. LINKAGE : VHDL 이외의설계데이터와연결할경우에사용된다. 입력모드 (IN) 출력모드 (OUT) 입출력모드 (INOUT) 버퍼모드 (BUFFER) - 9 -
포트및신호 신호구동메커니즘 구동기 (Driver) 시뮬레이션과정에서신호객체를모델링하기위하여도입된개념 구동기는지연되는시간동안신호의예상출력결과를유지하기위한객체이다. 구동기는신호의데이터를갱신하는프로세스마다독립적으로관리되며, 시뮬레이션관리자 (Kernel) 가개별적인구동기들을중재하여신호의데이터를변경한다. 각각의프로세스및신호에서발생되는출력예정파형 (Projected Output Waveform) 이다. 시뮬레이션에서의신호구동메커니즘 Processes 1 Di Drivers 1 Resolution Signal Event Processes function Signal 1 S t ƒ S E S t-1 N N M 스케쥴링 스케줄링 시뮬레이션수행사이클루틴 @@t t - 10 -
신호의종류 분해신호 (Resolved Signal) 여러개의입력신호들과연결되어있을때신호의값을결정할수있는다. 드라이버들에대한중재방법이정의된신호 기능을갖고있 감시대상신호 (Guarded d Signal) GUARD 조건을만족하는경우만감시대상신호의값을갱신할수있으며, 조건을만족하지못한경우에는신호의값을갱신할수없다. 연결이해제되었을경우에대한처리방법이정의된신호블록문에서만사용가능하다. - 11 -
포트및신호 분해신호의정의 분해기능은분해함수 (Resolution Function) 을이용하여정의한다. 신호선언문에분해기능을정의한다. 분해기능을타입에추가한종속타입으로써정의된다. 분해함수의형태 입력구동기들은 1 차원배열형이며출력은배열형의인자 (Element) 로정의 분해신호를위한지원타입은 STD_LOGIC/STD_LOGIC_VECTOR 가있다. 분해신호의모델 Driver A Resolved Signal Driver B Driver C Resolution Function - 12 -
분해신호의선언 FUNCTION resolved d( ( s : std_ulogic_vector t ) RETURN std_ulogic; -- resolution function 선언 SUBTYPE std_logic IS resolved std_ulogic; -- resolved type 선언 SIGNAL resol1 : resolved std_ulogic; -- resolution function을이용한 resolved signal 선언 SIGNAL resol2 : std_logic; -- resolved type을이용한 resolved signal 선언 - 13 -
포트및신호 감시대상신호의정의 신호선언문에 BUS 나 REGISTER 로신호종류를정의한다. 감시대상신호의분류 Register Register 종류신호의모든구동기리스트들이연결해제된경우에는분해함수 (Resolution Function) 가호출되지않는다. 모든연결이해제된경우에이전값을유지하는레지스터개념이다. Bus Bus 종류신호의모든구동기리스트들이연결해제된경우에는분해함수 (Resolution Function) 가호출되어결정한값을신호의값으로반영한다. 모든연결이해제된경우에상태를알수없는 3-state 버퍼의개념이다. Bus 의상태를알수없는 High Impedance 를방지하기위하여 Pull-up/Pull-down 개념을분해함수를통해서표현한다. GUARD resolution function D IE Q guarded signal GUARD guarded signal register REGISTER signal - 14 - BUS signal resolution function
감시대상신호의선언 Port : Bus 만사용할수있다. in1, in2 :INstd std_logic BUS := 0 ; Signal : Bus/Register 를사용할수있다. SIGNAL reg1, reg2 : std_logic BUS := 0 ; SIGNAL reg3, reg4 : std_logic REGISTER := 0 ; - 15 -
타입 (Types) 모든객체의데이터유형을엄격하게선언한다. 값의종류및특성 (eg. 범위, 색인범위, 종속관계 ) 등을정의한다. 타입의종류 basetype ( 기본타입 ) Type subtype ( 종속타입 ) Scalar Composite File Access Enumeration Physical Integer Universal_integer Real Universal_real Array Record Text Line VitalTimeArrayType Bit Boolean Severity_level Side std_logic VitalTransitionType iti T VitalTableSymbolType Time Positive Natural a String Bit_vector Std_ulogic_vector Std_logic_vector VitalDelayArrayType VitalPeriodDataType VitalPathType std_logic X01 X01Z UX01 UX01Z VitalDelayType Width VitalOutputMapType 유형분류내재된선언 Standard Pkg. 정의 Textio Pkg. 정의 Std_logic_1164 Pkg. 정의 Vital_Timing Pkg. 정의 - 16 -
타입의선언 사용가능한선언지역 구성선언 (Configuration Declaration) 을제외한모든선언영역 VHDL 표현정수형 TYPE integer IS RANGE -2147482648 TO 2147483647 ; 실수형 TYPE real IS RANGE -1.0E38 TO 1.0E38 ; 열거형 TYPE bit IS ( 0, 1 ); 물리형 TYPE resistance IS RANGE 1 TO 1E10 UNITS ohm; kohm = 1000 ohm; mohm = 1000 kohm; END UNITS; 레코드형 TYPE date IS RECORD hour : integer RANGE 0 TO 23; min : integer RANGE 0 TO 59; sec : integer RANGE 0 TO 59; END RECORD; 배열형 TYPE memory IS ARRAY (0 TO 255, 7 DOWNTO 0) OF bit; TYPE bit_vector IS ARRAY( natural RANGE <>) OF bit; 참조형 TYPE pointer IS ACCESS integer; 파일형 TYPE bit_file IS FILE OF bit; - 17 -
종속타입 (subtype) 의선언 이미선언된기본타입 (basetype) 을이용하여새로운타입을정의한다. 기본타입에대한분해함수 (resolution function) 기능을추가할수있다. 참조 (Access) 타입과파일 (File) 타입은제외 종속타입의구분 Unconstrained Subtype 기본타입의특성을그대로유지한다. Constrained Subtype 기본타입에대한제약정보를추가한다. 사용가능한선언지역 구성선언 (Configuration Declaration) 을제외한모든선언영역 VHDL 표현 SUBTYPE int IS integer ; -- unconstrained subtype SUBTYPE float IS real RANGE -1.0E10 TO 1.0E10 ; -- constrained range SUBTYPE std_logic IS resolved std_ulogic; -- resolved subtype SUBTYPE eight_bits_vector IS bit_vector(7 DOWNTO 0); -- constrained index-range - 18 -
타입의이용 이름표기법 단순이름 (simple name) 식별자를이용한객체지칭방법 VARIABLE simple : integer ; simple := 100 ; 선택이름 (selected name) 레코드의인자를나타내기위한객체지칭방법 VARIABLE selected : date ; selected.hour dh := 10 ; 색인이름 (indexed name) 배열의인자 (element) 를나타내기위한객체지칭방법 - 19 -
슬라이스이름 (slice name) 1 차원배열에서연속된인자들의열 (sequence) 을나타내기위한객체지칭방법 SIGNAL indexed, slice : bit_vector(7 DOWNTO 0 ); indexed(0) := 0 ; -- 색인이름 slice(3 DOWNTO 0) := 0001 ; -- 슬라이스이름 속성이름 (attribute name) 객체의속성을나타내기위한지칭방법 SIGNAL reg : std_logic ; SIGNAL target : boolean ; target <= reg EVENT ; - 20 -
특별한타입들 ( 합성대상설계에서는사용불가!!) 참조형 (Access) 소프트웨어개발언어의포인터와같은개념을표현한다. 동적메모리할당을위하여할당함수 new 를사용한다. 참조타입을선언하면할당된메모리를소멸하는 Deallocate 프로시저가자동적으로선언된다. 합성되지않는소프트웨어모델링방법이다. TYPE int IS ACCESS integer ; VARIABLE start : int := NEW integer (100); -- start : 100 VARIABLE finish : int = start; -- start : 100, finish : start s value = 100 Deallocate(start); -- start : null, finish : start s value = null - 21 -
파일형 (File) 외부환경과의입출력을위해서사용된다. 합성되지않는소프트웨어모델링방법이다. 파일타입을선언하면해당파일타입의 FILE_OPEN/FILE_CLOSE/READ/WRITE 프로시저와 ENDFILE 함수가자동선언된다. (LRM 정의 ) 합성되지않는소프트웨어모델링방법이다. 시뮬레이션입력데이터및출력결과저장등에이용된다. TYPE text IS FILE OF line ; FILE fptr : text OPEN read_mode IS stimulus.dat ; VARIABLE buffer : line; -- 파일의데이터를저장하기위한변수선언 Read(fptr, buffer); -- fptr 파일의데이터를읽어서 buffer 에저장함 - 22 -
특별한타입들 ( 합성대상설계에서는사용불가!!) 미정의형 (Incomplete Type) 이름만타입으로선언하며, 이에대한제약정보 ( 값의범위 / 색인범위등 ) 는나중에재선언하여사용한다. 일반적으로참조형과같이사용된다. TYPE cell ; -- incomplete type declaration TYPE link IS ACCESS cell; TYPE cell IS RECORD val : integer; suc : link; pre : link; END RECORD; -- full type declaration VARIABLE head : link := NEW cell (0, NULL, NULL); VARIABLE next_ node : link := head.suc; ; - 23 -
속성 (Attribute) 객체에대한추가정보및상태를표현한다. 속성의분류 정의된속성 (Pre-defined Attribute) 상수 / 변수 / 범위 / 함수 / 타입유형의정보를표현한다. 모든선언들은정의된속성을내부적으로소유하게된다. 사용자정의속성 (User-defined Attribute) 상수정보를갖는속성을정의할수있다. - 24 -
타입에대하여정의된속성 T BASE T 의 base-type 을나타낸다. T LEFT T 의왼쪽경계 (left bound) 를나타낸다. T RIGHT T 의오른쪽경계 (right bound) 를나타낸다. T HIGH T 의가장큰값즉위쪽경계 (high bound) 를나타낸다. T LOW T의가장작은값즉아래쪽경계 (low bound) 를나타낸다. T POS(X) T 에서 X 의위치를값으로나타낸다. T VAL(X) T 에서 X 로주어진위치에있는값을나타낸다. T SUCC(X) T에서 X보다하나큰위치에있는값을나타낸다. T PRED(X) T 에서 X 보다하나작은위치에있는값을나타낸다. T LEFTOF(X) T 에서 X 보다하나왼쪽에있는값을나타낸다. T RIGHTOF(X) T 에서 X보다하나오른쪽에있는값을나타낸다. 타입속성의예 TYPE nine IS ( 0, 1, X, Z, -, H, L, T, F ); SUBTYPE t IS nine; t BASE : nine 타입 t BASE LEFT : nine 타입의 0 리터럴 nine POS( X ) : integer 3 nine VAL(9) : nine 타입의 F 리터럴 - 25 -
속성 배열형객체에대하여정의된속성 다차원배열의경우합성이지원되지않는툴들이많다. 배열형의상수 / 신호 / 변수모두배열형에정의된속성을사용할수있다. 가변적인 Bit Size 인경우 LENGTH 속성을사용하면재설계의부담을덜수있다. A LEFT[(N)] A RIGHT[(N)] A HIGH[(N)] A LOW[(N)] A RANGE[(N)] A REVERSE_RANGE[(N)] A LENGTH[(N)] N은선택적이며없을경우 (default) 에는 1로간주이속성은 N번째색인의왼쪽배열경계를표현한다 N 은선택적이며없을경우 (default) 에는 1 로간주이속성은 N 번째색인의오른쪽배열경계를표현한다. N 은선택적이며없을경우 (default) 에는 1 로간주이속성은 N 번째색인의가장큰배열경계를표현한다. N은선택적이며없을경우 (default) 에는 1로간주이속성은 N 번째색인의가장작은배열경계를표현한다. N 은선택적이며없을경우 (default) 에는 1 로간주이속성은 N 번째색인의범위를표현한다. N 은선택적이며없을경우 (default) 에는 1 로간주이속성은 N번째색인범위의역을표현한다. N 은선택적이며없을경우 (default) 에는 1 로간주이속성은 N 번째색인에있는값의수를표현한다. - 26 - * [(N)] : (N) 은생략가능함
배열속성의예 VARIABLE reg : bit_vector(7 DOWNTO 0); sum LEFT(1) : 7 -- 1차원색인의 Left 경계값 sum RANGE : 7 DOWNTO 0 -- 1차원색인범위 sum REVERSE_RANGE : 0 TO 7 -- 1 차원색인범위의반전 sum LENGTH : 8 -- 1차원색인구간의길이 - 27 -
속성 신호에대하여정의된속성 DELAYED/STABLE/QUIET/TRANSACTION 속성은신호객체이다. 나머지신호속성은함수이다. S DELAYED[(T)] S STABLE[(T)] Time 타입을가지는 T 가없을경우에는 0ns 로간주 S 가시간 T 만큼지연된신호가되도록나타낸다 Time 타입을가지는 T 가없을경우에는 0ns 로간주 Event 가발생한후 T 시간동안 FALSE 가되고, 이후시간에는 TRUE 를표시. S QUIET[(T)] Time 타입을가지는 T 는경우에는 0ns 로간주 Active 가발생한후 T 시간동안 FALSE 가되고, 이후시간에는 TRUE 를표시. S TRANSACTION Bit 형으로서 Active 가일어날때마다결과가반전된다. S EVENT Event 가있으면 TRUE, 아니면 FALSE 를표시한다. S ACTIVE 현재의시뮬레이션사이클동안에갱신의유무를나타낸다. S LAST_ EVENT 마지막으로 Event가발생한이후경과한시간을나타낸다. S LAST_ACTIVE 마지막으로트랜잭션이일어난이후경과한시간을나타낸다 S LAST_VALUE S 의값이마지막으로변하기이전값을나타낸다. - 28 -
Active 새로운값으로갱신되는경우를의미한다. 값의변화가없어도해당된다. Event 새로운값으로갱신되어값의변화가발생된경우를의미한다. - 29 -
속성 신호에대하여정의된속성 신호속성의예 10, 30, 50 ns 에새로운값이신호 S 에입력된경우 Signal S S'EVENT S'STABLE S'ACTIVE s <= 0, 0 AFTER 10 ns, 1 AFTER 30 ns, 0 AFTER 50 ns ; S'DELAYED(5 ns) S'TRANSACTION S'QUIET(5 ns) S'LAST_VALUE 10 ns 30 ns 50 ns 70 ns S'LAST_EVENT S'LAST_ACTIVE 5 10 15 20 25 0 5 10 15 0 5 10 15 20 5 0 5 15 20 0 5 10 15 0 5 10 15 20-30 -
사용자정의속성 속성선언 (Attribute Declaration) 사용자가새로운속성을선언한다. 속성의객체특성은상수만가능하다. ATTRIBUTE instance : integer ; 속성명세 (Attribute Specification) 사용자가정의한속성을특정객체에게첨가한다. 속성을부여받을수있는객체들의종류 Entity / Architecture / Configuration / Package Procedure / Function / Type / Subtype Constant / Signal / Variable / Component Label / Literal / Units / File / Group ATTRIBUTE instance OF d_ff : ARCHITECTURE IS 255; d_ff instance -- integer 타입의 255 를의미한다. - 31 -
서브프로그램 (Subprogram) 절차함수 (Procedure) 순차적처리흐름을기술한다. IN 모드의파라메터는내부상수로간주한다. BUFFER/INOUT 모드의파라메터는내부변수로간주한다. 연산함수 (Function) 연산과정을기술한다. 모든파라메터가 IN 모드로동작한다. 출력값은 RETURN 문을통하여전달된다. - 32 -
서브프로그램선언및서브프로그램몸체선언 FUNCTION "NOT" ( l : std_ulogic ) RETURN ux01; -- 입력은 std_ulogic, 출력은 ux01 타입을갖는함수 PROCEDURE proc (l : IN std_uligic ; r : OUT std_ulogic); -- 서브프로그램선언 FUNCTION "NOT" ( l : std_ulogic ) RETURN ux01 IS BEGIN RETURN (not _ table(l ( )) ; -- 함수에는 Return 문이있어야한다. END "NOT"; PROCEDURE proc (l : IN std_uligic ; r : OUT std_ulogic ) IS BEGIN r := l ; END proc; -- 서브프로그램몸체선언 - 33 -
서브프로그램 서브프로그램의호출 서브프로그램을사용하는경우정의된객체, 입출력종류및타입종류에일치해야한다. (signature 정보 ) 서브프로그램의경우는다중정의가가능하다. 동일한이름을갖으면서서로다른타입의파라메터를사용하는서브프로그램 들이선언될수있다. 서브프로그램의다중정의 (Overloading) 동일한이름의두서브프로그램을선언할수있다. 다중정의된서브프로그램은서로다른 signature 정보를가져야한다. 동일한 signature 정보를갖는경우는중복오류에해당된다. 타입이기본타입과종속타입관계이면동일한타입으로간주된다. 연산자 (Operator) 의경우도다중정의가가능하다. Signature 정보 파라메터의갯수및위치, 이름 파라메터의타입 함수의경우는결과타입 - 34 -
다중정의의예 FUNCTION "NOT" ( l : std_ulogic ) RETURN std_ulogic ; -- 1 FUNCTION "NOT" ( l : bit ) RETURN bit ; -- 2 PROCEDURE proc (l : IN std_ulogic ; r : OUT std_ulogic ) ; -- 3 PROCEDURE proc (l : IN bit ; r : OUT bit ) ; -- 4 VARIABLE a, b, c : std_ulogic; b := NOT a; proc(b, c); -- 1 연산자호출 -- 3 프로시저호출 - 35 -
연산자 (Operator) 기본연산자종류 구분 종류 우선순위 논리연산자 and, or, nand, nor, xor 6 관계연산자 =, /=, <, <=, >, >= 5 가감산연산자 +, -, & 4 부호 +, - 3 승제산연산자 *, /, mod, rem 2 기타연산자 **, abs, not 1 추가 VHDL 연산자 (VHDL 93) 논리연산자 xnor 연산자가추가되었다. Shift 연산자우선순위는논리연산자보다는높고관계연산자보다는낮다. SLL SRL SLA SRA ROL ROR --Shift Left Logical --Shift Right Logical --Shift Left Arithmetic --Shift Right Arithmetic --Rotate Left Logical --Rotate Right Logical - 36 -
연산자의특성 우결합법칙 같은순위를가진연산자들인경우왼쪽에서오른쪽의순으로수행된다. z := a + b + c ; -- (1) a+b (2) (1) 의결과 + c 우선순위를바꾸고자하는경우괄호를사용된다. z := a + (b + c) ; -- (1) b + c (2) a + (1) 의결과 - 37 -
연산자 연산자의특성 +, - 는가감산연산자와부호로사용된다. z := (-a) - b ; -- (1) -a : 부호 (2) - b : 가감산연산자 NOT 은논리연산자이지만우선순위가다른연산자보다높다. z := a XOR NOT b ; -- (1) not b (2) a xor (1) 의결과 논리연산자의경우두피연산자의타입이같아야하며, 연속적인사용에제한이있으므로괄호를사용해야한다. z := a AND b AND c ; -- illegal z := ( a AND b ) AND c ; -- legal - 38 -
AND, OR, NAND, NOR 는 Short Circuit 연산을수행한다. z := a AND b; -- a 가 0 0 인경우 b 값에상관없이결과는 0 0 이다. -- 이와같이왼쪽에서오른쪽순으로처리가진행됨에따라서 -- 왼쪽피연산자만으로결과가결정되는연산을 Short Circuit -- 연산이라한다. b='1' AND XOR XOR a='0' a='0' z='0' a='0' a='0' a='0' z='1' Short Circuit 연산 일반연산 연산자의다중정의에따라서피연산자의타입에의한다른연산함수의호출이발생할수있다. 입력 b가 X 일경우결과가다르다. - 39 -
분해함수 (Resolution Function) 분해함수의특징 다수의입력신호에대한결과값을결정하기위하여정의한다. 입력은 1 차원무제한배열형만가능하다. 출력은배열형요소 (Element) 의타입으로부터결정된다. 시뮬레이션주기 (Cycle) 에서내부적으로해당신호가활성 (Active) 되면자동으로호출되어신호의값을갱신과정에사용된다. - 40 -
분해함수의예 FUNCTION wired_or (inputs : bit_vector ) RETURN bit IS CONSTANT floatvalue : bit = 0 ; 0; BEGIN IF inputs LENGTH = 0 THEN -- THIS IS A BUS WHOSE ALL DRIVERS ARE OFF RETURN floatvalue ; ELSE FOR i IN inputs RANGE LOOP IF inputs(i) = 1 THEN END IF; END wired_or ; END IF; END LOOP; RETURN 0 ; RETURN 1 ; 1; 입력이존재하지않을경우는 floatvalue 를출력한다. 다수입력의경우는입력값중에서하나만이라도 1 이면 1 을출력한다. 모든입력이 0 인경우는 0 을출력한다. - 41 -
분해함수의예 SIGNAL line: wired_or bit; BEGIN P1: PROCESS BEGIN line <= 1 ; 1; END PROCESS; P2: PROCESS BEGIN line <= 0 ; END PROCESS; END Example ; - 42 -
단축이름달기 (Alias Declaration: VHDL 93) 객체단축이름 VARIABLE data : bit_vector( ( 0TO 31); ALIAS mantissa : bit_vector(23 DOWNTO 0) IS data( 8 TO 31); mantissa := 000011110000111100001111 ; -- data(8 TO 31) := 111100001111000011110000 ( 동일표현 ) 비객체단축이름 ALIAS std_bit IS std.standard.bit ; VARIABLE reg : std_bit := 1 ; -- VARIABLE reg : bit := 1 ( 동일표현 ) - 43 -
그룹 (Group : VHDL 93) 특성한객체들의집합을간편하게기술하기위해서이용한다. 그룹예제선언 (Group Template Declaration) 그룹을형성할수있는객체들의종류 Entity /Architecture /Configuration i /Package /Procedure /Function / Type / Subtype / Constant / Signal / Variable / Component Label / Literal / Units / File / Group GROUP pin2pin IS (SIGNAL, SIGNAL) ; 그룹선언 (Group Declaration) GROUP c2q : pin2pin (clk, dout ) ; - 44 -
선언영역 (Declarative Region) 선언영역의종류 설계단위 (Design Unit) 블록문 / 프로세스문 / 생성문 컴포넌트선언 / 레코드타입선언 선언영역및가시성 서브프로그램선언및서브프로그램몸체 반복제어문 선언영역의의미 타입및객체, 속성등의선언이가능하다. 선언된내용에대한유효범위를형성하게된다. 선언영역은하위선언영역을내포할수있다. - 45 -
선언영역및가시성 Declarative Region Entity Package Configuration Architecture body Package body Block Statement Process Statement Component Declaration Generate Statement Use use entity/configuration block configuration Subprogram Declaration Subprogram Body hierarchical Region Loop Statement Record Type Declaration - 46 -
선언영역 선언영역의확장 Default 확장 선언영역및가시성 상위선언영역에내포된하위선언영역은유효범위를상위선언영역까지확장한다. 현재선언영역을내포한모든상위선언영역은선언영역으로확장된다. USE 문에의한확장 USE 문을사용한패키지확장 USE 문사용가능지역상위선언지역이이용한패키지는자동으로하위지역으로도확장된다. 패키지선언 / 엔티티선언 / 구성선언 / 패키지몸체 / 아키텍쳐몸체 / 블록문 / 프로세스문. - 47 -
Binding 문에의한확장 선언영역및가시성 USE ENTITY/CONFIGURATION문일사용한확장해당하위설계단위인엔티티 ( 아키텍쳐 ) 및구성선언의 Port와 Generic을 이용할수있다. 블록구성문 / 컴포넌트구성문을이용한확장구성선언의경우블록구성문 / 컴포넌트구성문을이용하여하위설계단위의 아키텍쳐몸체 / 블록문 / 생성문들이용할수있다. Nested 된확장 동일한구조의선언영역이내재적으로선언된경우 Nested될수있는선언영역블록문 / 생성문 / 반복문 / 서브프로그램 - 48 -
가시성 (Visibility) 가시성의의미 선언영역및가시성 선언내용이참조가능한유효범위안에위치하고있음을의미한다. 동형이의어 (Homograph) 계층적선언영역의경우내 / 외부선언영역에서동일한이름의선언이 가능하다. 내부선언영역의선언은직접참조가능하며, 외부선언은 hidden되어진다. hidden된선언을참조하려는경우는선택적이름을통해서해결한다. - 49 -
선언영역및가시성 -- full adder : behavioral description LIBRARY ieee; USE ieee.std_logic_1164.all; Visible by selection 선언지역의유효범위 ENTITY f_addr_beh IS PORT( in1, in2, carry_in : IN std_logic ; carry_out, sum_out : OUT std_logic); END f_addr_beh; 선언지역 ARCHITECTURE f_addr_beh_a OF f_addr_beh IS BEGIN p: PROCESS( in1, in2, carry_in ) VARIABLE data_in : std_logic_vector( 2 DOWNTO 0); VARIABLE cnt : integer; directly visible BEGIN ( 프로세스변수 ) cnt := 0; data_in := in1 & in2 & carry_in ; FOR cnt N 0 TO 2 LOOP IF data_in(cnt) = '1' THEN p.cnt := p.cnt + 1; END IF; END LOOP; CASE cnt IS WHEN 0 => carry_out <= '0'; sum_out <= '0'; WHEN 1 => carry_out <= '0'; sum_out <= '1'; WHEN 2 => carry_out <= '1'; sum_out <= '0'; WHEN OTHERS => carry_out <= '1'; sum_out <= '1'; END CASE; END PROCESS; END f_addr_beh_a ; homograph 발생 directly visible ( 반복문변수 ) visible by selection ( 프로세스변수 ) homograph 소멸 directly visible ( 프로세스변수 ) 선언지역선언지역선언지역 - 50 -