function function function function function function func t ion function func t i on func t i on function function function function function function function function function function 幻 9 function " +"(): STD_ULWJIC; R: SIGNED) retum SIGNED; function "+"(): UNSIGNED; R: INTEGER) retum STD_I.mlC VECTOR; function " +"(): SIGNED; R: UNSIGNED) retum STD 」 . mIC YECTOR; function " ド (): UNSIGNED; R: SIGNED) retum STD_LmIC VECTOR,• function " (): SIGNED; R: SIGNED) return STD_IÆIC VECTOR; function 第 " (): UNSIGNED : R : UNSIGNED) retum STD 」 NJIC VECTOR : ー " (): STD_ULWJIC; R: SIGNED) return SIGNED; ー " (): SIGNED; R: STD_ULWJIC) return SIGNED; -"(): STD_ULWJIC; R: UNSIGNED) retum UNSIGNED; ー " (): UNSIGNED; R: STD_UISIC) retum UNSIGNED; INTEGER : R : SIGNED) return SIGNED : ー " (): SIGNED; R: INTEGER) return SIGNED; -"(): INTEGER; R: UNSIGNED) return UNSIGNED; ー " (L : UNSIGNED : R : INTEGER) return UNSIGNED : -"(): SIGNED; R: UNSIGNED) return SIGNED; -"(): UNSIGNED; R: SIGNED) return SIGNED; -"(): SIGNED; R: SIGNED) return SIGNED; -"(): UNSIGNED; R: UNSIGNED) return UNSIGNED; function "+"(): STD 乢 : R: SIGNED) retum STD_IMC VECTOR; function "+"(): SIGNED; R: STD_UIßlC) retum STD_LTJIC—VECTOR; " ド (): STD ULTJIC,• R: UNSIGNED) return STD_IÆIC_VECTOR,• function L : UNSIGNED; R: STD_UIÆIC) retum STD_LmIC—YECTOR; function "+"(): INTEGER; R: SIGNED) retum STD_L()C VECTOR; " ド (): SIGNED; R: INTEGER) retum STD_IÆIC VECTOR; function " ド (): INTFÆR; R: UNSIGNED) return STD 」 mlC OR : ー " (): UNSIGNED; R: UNSIGNED) return STD LTJIC VECTOR,• ー " (): SIGNED,• R: SIGNED) return STD_LTJIC VECPOR; ー " (): UNSIGNED; R: SIGNED) return STD_IÆIC VECTOR; -"(): SIGNED; R: UNSIGNED) return STD_LWJIC_VECPOR; ー " (L : UNSIGNED; R : INTEGER) return STD_I.m に VECTOR : INTEGER : R : UNSIGNED) return STD_Im IC_VECTOR :
224 function "<"(): STD IMC YECTOR; R: STD IÆIC YECTOR) retum m,EÅN; "<"(): STD. 」 mIC VECTOR; R: INTEGER) retum by the L 催 . This package ⅵ 11 "overload" those 付録 C VHDL パッケージ・ファイル use IEEE. std_logic_arith. a11 : use IEEE. std 」 ogic 」 164. a11 : library IEEE; definitions mage STD LTJIC UNSIGNED is function "+"(): STD 」 . mIC_YECTOR; R: STD 」 NJIC_VECTOR) retum STD_ImlC VECT function 第 L : STD LCJIC VECTOR : R : INTFÆR) retum STD 」 MC_VECTOR : " ド (): STD-IÆIC VECTOR) retum STD—LmIC_YECTOR ・ function "-"(): STD 」加1C: R: STD 」 m,IC_VECTOR) retum STD 」 MC_VECTOR ・ -"(): STD 」 MC_VECTOR; R: STD 」 mIC) retum STD 」 mIC_VECTOR; -"(): INTEGER; R: STD 」 VECTOR) retum STD_IÆIC_VECTOR; -"(): STD 」 mIC VECTOR; R: INTEGER) return STD 」 IGIC VECI'OR,• -"(): STD_LmIC YECTOR,• R: STD_LmIC_VECTOR) retum STD_IÆIC_VECT function "+"(): STD 」窺に: R: STD_LmIC VECTOR) retum STD 」 .8】C Ⅶ 80R : function "+"(): STD_IÆIC_YECTOR; R: STD L(MC) retum STDÄIC_VECTOR,• "+"(): INTEGER,• R: STD 」 . mlC YECTOR) retum STD 」 mIC_VECTOR; function function function function function function function function "*"(): STD VECTOR; R: STD 」 mIC_YECTOR) return STD—L.mlC—VECT
付録 C VHDL パッケージ・ファイル function ”び (): INTEGER : R : UNSIGNED) return m,EAN,• function " * " (): UNSIGNED; R: SIGNED) retum SIGNED; function " (): SIGNED; R : UNSIGNED) return SIGNED : 220 -"(): SIGNED) retum SIGNED; "+"(): SIGNED) retum SIGNED; function " 十 " (): UNSIGNED) return UNSIGNED : -"(): STD UL(MC,• R: SIGNED) retum STD_L(GIC VECTOR; -"(): SIGNED; R: STD_ULWJIC) return STD_IMIC VECTOR; -"(): STD_UIÆIC; R: UNSIGNED) retum STD_INJIC VECTOR; -"(): UNSIGNED; R: STD_UINJIC) return STD 」 . (RJIC VECTOR; -"(): INTEGER; R: SIGNED) return STD_IMC_VECTOR,• -"(): SIGNED; R: INTEGER) return STD_IMC VECTOR; function function function function function funct ion function function function function function function function function -"(): SIGNED) retum STD_IMC_VECTOR; function "+"(): SIGNED) retum STD_IMC_YECTOR; function 第 " (): UNSIGNED) retum STD_IMC_VECTOR : function "ABS" (L : SIGNED) return SIGNED; function L : SIGNED) retum STD L()C 80R : "<"(): UNSIGNED; R: SIGNED) return Ä,EÅN; " く "(): UNSIGNED; R: UNSIGNED) return "*"(): UNSIGNED; R: SIGNED) return STD IÆIC VECTOR; function "*"(): SIGNED; R: UNSIGNED) retum STD IMC VECTOR; function "*"(): SIGNED; R: SIGNED) retum STD_IÆIC_YECTOR; "*"(): UNSIGNED; R : UNSIGNED) retum STD 」 . mlC_VECTOR; function " * " (): UNSIGNED; R : UNSIGNED) retum UNSIGNED; function " び (): SIGNED; R : SIGNED) retum OLEAN : function " * " (): SIGNED; R: SIGNED) retum SIGNED; function "<"(): UNSIGNED; R : INTEGER) return T,EAN : function "<"(L : SIGNED; R: UNSIGNED) retum Ä,EAN,• function ゞ (L : UNSIGNED; R : UNSIGNED) retum OLEAN; ”び ( L : SIGNED; R: INTEGER) retum OLEAN,• function " (): INTEGER : R : SIGNED) return T,EAN :
2 ノノ X01 IS std—logic—vector IS RETURN (cvt_to_x01(s) ) : ALIAS bv : BIT_VEff0R ( 1 TO b'LENGTH ) IS b; FUNCTION To ー X01 ( b : BIT_YECTOR ) RETURN END; BEGIN FUNCTION To ー X01 ( s : std_ulogic ) RETURN END : RETURN resul t : END l-mp ・ result(i) ・ = cvt_to_x01 (sv(i)) : i IN result' RANGE l_mp BEGIN VARIABLE result : std_logic_vector ( 1 TO b' LENGTH ) : CASE bv(i) IS FOR i IN result' RANGE l.mp BEGIN N ' 0 ' 背 N ' 1 ' END CASE : END LWP : RETURN resu 1 t : END : = 〉 result(i) = 〉 result(i) ・ FUNCTION To ー X01 ( b : BIT_YECTOR ) RETURN std_ulogic_vector CASE bv(i) IS NR i IN result' RANGE LWP VARIABLE result : std_ulogic_vector ( 1 TO b' LENGTH ) : ALIAS bv : BIT_VECTOR ( 1 TO b'LENGTH ) b; BEG Ⅲ
5.2 ファンクション文ノ 7 ア でリスト 5.2 の "PEAK" に代入されます . ファンクション文によって返される値は , 信 号 "signal"t; も変数 "variable" にも代入することが可能です . ③のデータ・タイプの指定では入力パラメータと異なり , 範囲を指定することができま せん . 範囲はリスト 5.2 で代入される信号 , 変数の範囲が適用されます . くリスト 5.3 > 可変長デコーダ / ェンコーダの記述 library IEEE; use IEEE. std 」 ogic ー 1164. all ; use IEEE. std 」 ogic_arith. all ; use IEEE. std 」 ic_uns igned. a Ⅱ ; package CODEPAC i s funct ion DECODER ( A: in std 」 og ic_vector ) return std_logic_vector; function PEEODER ( A: in std 」 ogic—vector; K: integer ) return std_logic_vecto 「 , end CODEPAC ; package b0dy CODEPAC i s funct ion DECODER ( A: in std 」 og ic—vector ) return std 」 ogic—vector variable : std 」 ogic—vector(2**(A'length)-l 面柵 t0 の ; variable A 」 . integer; ② ' A ' の範囲を表すアトリビュート beg i n ③ "TMP " のすべてのビットに ' 0 ' を代入 A 」ド CO 」 E R ( A ) ; ( A 」町 ) ④デコード・ビット ("A-INT") にのみ ' 1 ' を代入 return end DECODER ; function PEEODER ( A: in std 」 ogic—vecto 「 : K: integer ) return std_logic_vector is ・一一一一⑤プライオリティ・エン variable std 」 ogic_vector(K-1 面物 ntO の : コーダの記述 variable A 」 integer; ' K' は出力ビット長 beg i n fo 「一 in A' range loop i f ()( l) = ' 1 ' ) then std 」 ogic—vector(COW D ( l, K)); return end i f ; end ー 「 etu 「 n std 」 ogic_vector(COW INIQED()' right, K)); end R ; end CØEPAC ; ニ - 一口 ー -- ー -- ーー⑥入力ビットの中に ' 1 ' があれは出力 7 'A' の一番右側を表す アトリビュート
5.2 ファンクション文〃 3 ( 5 downto 0 ) が指定されていません . 範囲が指定されていない場合 , この入力パラメー タには呼ぶ側の範囲がコピーされます . リスト 5.2 は , リスト 5.1 のファンクション "max" を使用してピーク・デテクタを記述 した例です . 入力信号 " SE に ' 1 ' が入力されると回路は初期化され , その後クロック信 号 "CL K" の立ち上がりエッジごとにデータを取り込み , それまでで一番大きい値を出力 します . リスト 5.2 の③では "std_logic_vector(5 downto O)" の "DATA","PEAK" が , ファ ンクション ' ma の入力 ' A ' , ' B ' にコピーされているので ' 5 downto O " の範囲が指定される くリスト 5.1 〉 MAX 関数の記述 ( ファンクション文の記述例 ) library IEEE; use IEEE. std 」 ic 」 164. all : ②バッケージ・ボディ文 package BPAC i s function max(A:std. 」 ogic— B:std 」 ogic_ ) return std end BPAC ; package b0dY BPAC i s バッケージ文に宣言文のみ記述 vector ファンクション名 logic_vector; va 「 iable tnv : std 」 ogic—vector()' range); funct icn max( A:std_log ic_vecto 「 ; ・一 -- -- -- -- -- -- -- -- - ③入力バラメータ・リスト ` 、一・一 -- - ー③返却データ・タイプ ) return std_logic—vecto 「 iS B:std 」 ogic_vector beg i n i f(A>B) then e ー se end i f , return t 叩 . end ; end BPAC ; ④ ' A ' の範囲 ( " 5 downto 0 " ) を表す ⑤返却値
273 mR i result' RANGE LWP result(i) ・ = cvt_to_x01z (sv(i)); END LWP : RETURN result : END : FUNCTION To_XOIZ ( s : std_ulogic ) RETURN X()IZ BEGIN RETURN (cvt_to_x01z(s)) : END; FUNCTION To_XOIZ ( b : BIT VECTOR ) R std_logic_vector ALIAS bv : BIT VECTOR ( 1 TO b'LENGTH ) IS b; VARIABLE result : std_logic_vector ( 1 b' LENGTH ) : END : RETURN result : ニ > result(i) ・ ニ > result(i) ・ END IMP,• END CASE : 背 N ' 1 ' 背 N ' 0 ' CASE bv(i) mR i IN result' RANGE IH)P BEGIN V I result : std_ulogic_vector ( 1 b' LENGTH ) : ALIAS bv : BIT VECTOR ( 1 b'LENGTH ) IS b; FUNCTION To_XOIZ ( b : BIT_YECTOR ) RETURN std_ulogic_vector IS つ result(i) ・ CASE bv(i) IS 順 i Ⅲ result' RANGE l.mp BEGIN
幻 0 VHDL パッケージ・ファイル END : 付録 C FUNCTION To StdULogicVector ( s : std_logic_vector ) RETURN std_ulogic_vecto Y I result : std_ulogic_vector ( 1 TO s' LENGTH ) : ALIAS sv : std—ulogic—vector ( 1 s' LERGTH ) IS s; FUNCTION To ー X01 ( s : std_ulogic_vector ) RETURN std_ulogic_vector IS RETURN result : END LO,• result(i) ・ = cvt_to X01 (sv(i)) : i Ⅲ result' R LWP BEGIN V I result : std_logic_vector ( 1 TO s' LENGTH ) : ALIAS sv : std_logic_vector ( 1 s ' ) IS s; FUNCTION To ー X01 ( s : std_logic_vector ) RETURN std_logic_vector ー to ー X01 ー strength and type convertors END; RETURN resu 1 t : END l.mp,• result(i) ・ニ sv(i); mR i IN result' RANGE IMP BEGIN VARIABLE result : std_ulogic_vector ( s' LENGTH-I 0 ) : ALIAS sv : std_logic_vector ( s' LENGTH-I mWNT0 0 ) s; r IS
225 function " く " (L : INTEGER : R : STD 」 . mIC YECTOR) retum m,EAN; function " く = " (): STD_LWJIC_VECTOR; R: STD_INJIC_VECTOR) return W)LEAN; " ← " (): STD_INJIC_VECTOR; R: INTEGER) retum function " く = " (L : INTEGER : R : STD_L(YJIC_VECTOR) return OLEAN : function function function function " / ゞ (L: function " 〉 = " (L: function INTEGER : R : STD_LWJIC_VECTOR) return OLEAN : function " / = " (): STD_LWJIC VECTOR; R: INTEGER) retum TÆAN,• function "/="(): STD_ISIC_VECTOR; R: STD_INJIC_VFMOR) retum ="(): INTEGER; R: STD_INJIC VECTOR) return Ä,EAN; = " (): STD_LWJIC VECTOR : R : INTEGER) return TÆAN : ="(): STD_LWJIC_VECTOR; R: STD LTJIC_VECTOR) return I NTEGER : R : STD_ISIC_VECTOR) retum Ä,EAN : function " > = " (): STD LWJIC VECTOR; R: INTEGER) return BWLEAN,• function " 〉 = " (): STD_LWJIC VECTOR; R: STD_ISIC_VECTOR) return BWLEAN; function わ " (L : INTEGER : R : STD_I,m IC_VECTOR) return BmLEAN : function " 广 (L : STD_LWJIC—VECTOR : R : INTEGER) return : function " 广 (): STD_L(YJIC—VECTOR; R: STD_ISIC VECTOR) return BWLEAN; 80R : Ⅷ OR : function SHR(ARG:STD_LTJIC_VECTOR;OUNT: STD INJIC_VECTOR) return STD LTJIC— function SHL(ARG:STD_INJIC VECTOROUNT: STD INJIC VECTOR) return STD—L(YJIC function CONV_INTEGER(ARG : STD LTJIC VECTOR) return INTEGER : end STD INJIC UNSIGNED; IC VECTOR; function ONV_STD_LmIC VECTOR(ARG : INTEGER : SIZE : INTEGER) retum STD 」 ー remve this since it is already in std_logic_arith
( a ) グレイ→バイナリ ackage my—pac i s se IEEE. std 」 og ic_unsigned. all ; se IEEE. std 」 ogic 」 164. all ; lib 「 ary IEEE; 5.5 く図 5.1 〉バイナリ・コードとグレイ・コードの相互変換 B(3) B(3) B ( 2 ) B(2) B(I) くリスト 5.6 > グレイ・コードのインクリメンタの記述 G (O) G(I) G ( 2 ) G ( 3 ) グレイ・コード・カウンタの記述 G(3) G(2) G(I) ノ 25 B(I) B (O) B ( 0 ) G ( 0 ) ( b ) バイナリ→グレイ function A Ⅵ ( CIN : in std, 」 ogic—vecto 「 ) return std 」 ogic—vector; end my—pac ; package bOdy my—pac i s ①グレイ・コード・インクリメンタの ファンクション文 function A Ⅵ ( CIN : in std 」 ogic—vector) return std, 」 ogic—vector is variable BINARY : std 」 ogic—vecto 「 (CIN' range); variable . std 」 ogic—vector(ClN' range); beg i n fo 「一 in CIN' range ー if(l = ClN'left) then C D ; 引 NARY( D BIURY(I) ド引 RY ( 田 ) xo 「 CIN(I); e ー se e ー se BINARY( 既 if(l = ClN'left) then fo 「一 in CIN' 「 ange ー BINARY ド BINARY 十 1 : end ー end i f ; end my—pac : end , 「 eturn end ー , end i f , ØUT(I) ド BINARY(I + 1) xo 「田 RY ( 以 ③インクリメント ② fo 「 - loop 文てグレイ・コードから バイナリ・コードへ変換 ④ fo 「ヨ 00P 文てバイナリ・コードから グレイ・コードへ変換