4.8 タイプ変換 AINT < = integer (AREAL) ; きます . ビット幅 ) 配列の場合も要素が変換可能であって , かっ要素の数が同しであれば変換することがで SUM < = unsigned(A) 十 unsigned(B); signal SUM : unsigned ( 7 downto O) ; signal A,B : std ー logic ー vector ( 7 downto 0 ) ; ピット・べクタは 2 進数のはか , 16 進数や 8 進数で表すことも可能です . また , ビット・ す . td ー logic ー vector ' ' への値の代入は 2 進数でしか表現できません . それに対して その他としては , "bit—vector" から "std—logic—vector" への変換がよく使用されま によく使用されます . "lnteger" と "std—logic—vector" の変換は , リスト 4.4 やリスト 4.9 のような場合 はタイプ変換関数が用意されています ( 表 4.3 ) . そのため , "std - logic ー 1164 ' , "std ー logic ー arith", "std ー logic ー unsigned"l こ も制限があり , 使用方法が限定されています . しかし , この文法では nteger ' と配列との変換が行えません . また配列同士の変換に く表 4.3 〉タイプ変換関数 関数名 std_ logic ー 1164 バッケー TO - stdIogicvector(A) To ー bitvector (A) TO ー stdlogic (A) To_bit(A) std CONV CONV std CONV logic - arith INTEGER(A) logic ー unsigned ノヾッケー INTEGER(A) std ー logic _vector(A, ン′ 機能 integer, unsdgned, signed から std_ logic_vector への変換 unsigned, signed から integer への変換 std ー logic _vector から integer への変換 bit _vector から std ー logic _vector へ変換 std_ logic _vector から bit _vector へ変換 bit から std_logic へ変換 std_ logic から bit へ変換
222 function " / = " (): UNSIGNED; R: SIGNED) retum Ä.EAN; function フゞ (L : SIGNED : R : UNSIGNED) retum m,EAN : function " / = " (): UNSIGNED; R: INTEGER) retum W)LEAN; 付録 C VHDL パッケージ・ファイル function ンゞ (): UNSIGNED; R : UNSIGNED) retum W)LEAN : function " / ゞ (): SIGNED; R : SIGNED) retum OLEAN : function SHR(ARG : SIGNED; OUNT : UNSIGNED) retum SIGNED; function SHR(ARG : UNSIGNED; COUNT: UNSIGNED) retum UNSIGNED; function SHL(ARG: SIGNED; COUNT: UNSIGNED) retum SIGNED; function SHL(ARG : UNSIGNED; OUNT: UNSIGNED) return UNSIGNED : = " (L : INTEGER; R : SIGNED) return : function ンゞ (): SIGNED : R : INTFGER) retum Ä,EAN : function ンゞ (): INTEGER : R : UNSIGNED) retum W)LEAN; function function ONV INTEGER(ARG : SIGNED) return INTEGER; function CONV INTEGER(ARG : UNSIGNED) retum INTEGER : function ONV INTEGER(ARG : INTEGER) retum INTEGER : function CONV UNSIGNED(ARG : STD 乢 : SIZE : INTEGER) return UNSIGNED : function CONV UNSIGNED(ARG : SIGNED; : INTEGER) return UNSIGNED : function ONV UNSIGNED(ARG : UNSIGNED : SIZE : INTEGER) retum UNSIGNED; function CONV UNSIGNED(ARG: INTEGER : S 】 : INTEGER) return UNSIGNED; function CONV INTEGER(ARG : STD ULTJIC) retum SMALL_INT : function CONV STD_IÆIC_VECTOR(ARG : UNSIGNED : SIZE : INTEGER) return STD_LTJIC OR : function CONV STD—INJIC VECTOR(ARG : INTEGER : SIZE: INTEGER) function CONV SIGNED(ARG : STD_UIÆIC : SIZE : INTEGER) return SIGNED : function SIGNED(ARG : SIGNED; SIZE: INTEGER) retum SIGNED : function CONV SIGNED(ARG : UNSIGNED : SIZE : INTEGER) return SIGNED; function CONV—SIGNED(ARG : INTEGER : SIZE: INTEGER) return SIGNED : return STD IMIC VECTOR : function ONV_STD_IÆIC_VECTOR(ARG : SIGNED : SIZE : INTEGER) return STD INJIC VECTOR :
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 :
227 " くゞ ( L : SIGNED; R: SIGNED) return TÆAN,• function " くゞ ( L : UNSIGNED; R: SIGNED) return m,EAN,• function " くゞ (L : SIGNED : R : UNSIGNED) retum OLEAN : function - くゞ (): UNSIGNED; R : INTEGER) retum m,EAN : function " くゞ (): INTEGER : R : UNSIGNED) retum m,EAN : function " くゞ (): SIGNED; R : INTEGER) retum T,EAN : function function function function function funct ion function function function function わ = " (L : UNSIGNED; R : INTEGER) return Ä,EAN : function " 〉ゞ (L : SIGNED; R : UNSIGNED) retum OLEAN : func t ion funct ion function " ゞ (): INTEGER : R : UNSIGNED) retum W)LEAN : function function function ゞ ( L : function わ " (L : SIGNED : R : UNSIGNED) return OLEAN : " 广 (): UNSIGNED; R: SIGNED) return OLEAN,• function " ゾ (L : UNSIGNED; R: UNSIGNED) retum Ä,EAN : INTEGER : R : SIGNED) retum Ä,EAN : function わ " (): SIGNED; R : SIGNED) return TÆAN : function わ " (L : UNSIGNED; R : INTEGER) retum W)LEAN : function " 广 (): INTEGER : R : SIGNED) return TJEAN : function " 广 (): SIGNED; R : INTEGER) return TÆAN : わゞ (): UNSIGNED; R: SIGNED) return T,EAN; ゞ (L : SIGNED; R : SIGNED) return : function わゞ (): UNSIGNED : R : UNSIGNED) retum : function " 〉ゞ (): SIGNED; R: INTEGER) return ÄÆAN; function = " (): INTEGER : R : UNSIGNED) return BWLEAN : ="(): UNSIGNED; R: INTEGER) return TÆAN,• = " (): SIGNED; R : UNSIGNED) return TÆAN : ="(): UNSIGNED; R: SIGNED) return ÄÆAN; = " (L : SIGNED : R : SIGNED) return BWLEAN : = " (L : UNSIGNED : R : UNSIGNED) return ÄÆAN : INTEGER : R : SIGNED) retum Ä,EAN : ゞ (): INTEGER : R : SIGNED) return ÄÆAN : ゞ (): SIGNED : R : INTEGER) retum Ä,EAN : INTEGER : R : UNSIGNED) return BmLEAN :
付録 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 :
幻 8 function " + "(): UNSIGNED : R : SIGNED) retum SIGNED : function "+"(): SIGNED; R: UNSIGNED) return SIGNED; library IEEE; STD ULTJIC, STD LTJIC, and STD ISIC_VECTOR. for SIGNED, UNSIGNED, SMALL INT, INTEGER, A set Of arithemtic, conversion, and functions PurII)se : Package name : STD LWJIC—ARITH ー and that any derivative work contains this copyright notice. ー provided that this copyright statement is not removed from the file ー This source file may be used and distributed without restriction ー Copyright (c) 1990 , 1991 , 1992 by Syn 叩 sys, lnc. A11 rights reserved. ・ std-logic-arith (Synopsys 社提供 ) 付録 C VHDL パッケージ・ファイル subtype SMALL—INT is INTEGER range 0 to 1 : type SIGNED is array (NATURAL range く〉 ) of STD IÆIC : type UNSIGNED is array (NATURAL range く〉 ) of STD LWJIC : std—logic arith is use IEEE. std_logic_1164. a11 : function "+"(): UNSIGNED; R : INTEGER) return UNSIGNED; function "+"(): UNSIGNED; R: UNSIGNED) return UNSIGNED; function "+"(): SIGNED; R: SIGNED) return SIGNED; function 第 L : SIGNED; R: STD_UIMC) retum SIGNED; function "+"(): STD_UJßlC; R: UNSIGNED) return UNSIGNED; function "+"(): UNSIGNED; R: STD_UIMC) retum UNSIGNED; function "+"(): INTEGER; R: SIGNED) retum SIGNED; function "+"(): SIGNED; R: INTEGER) return SIGNED; function " ド (): INTEGER : R : UNSIGNED) retum UNSIGNED;
4.5 パッケージとライプラリ 93 び出す必要はありません . ' STD " にはその他に ' TEXTIO ' と呼ばれるパッケージが含ま バッケージ宣言をしてから呼び れていますが , こちらを使用する際にはライプラリ宣言 , 出す必要があります . library STD; use STD. textio. a11; "TEXTIO" はテスト・パターンのインターフェースに使用されます ( 第 7 章参照 ) . "IEEE" には IEEE で承認された ' std ー logic ー 116 褜とよは・れるパッケージが含まれ ています . このパッケージは標準仕様ですが , 外付けの仕様なのでライプラリ宣言 , "std ー logic ー unsigned" ケージ宣言が必要になります . なお , "std ー logic ー arith", は , SYNOPSYS 社が提供しているパッケージです . これらは IEEE で承認されているも のではありませんが , EEE " ライプラリに格納されています . また , VHDL でゲート・レベルのシミュレーションを行うために , ASIC べンダが自社 のロジック・ゲートのライプラリを供給しています . この場合 , ASIC べンダのライプラ リが作成され , その中にロジック・ゲートーっーっに対応するエンティティが納められて います . く図 4.3 〉ラリプラリの種類 std ー 10g1C ー ungigned STD ライプラリ VH DL 標準ライプラリ textio I EEE ライプラー などのノヾッケージ・ファイ丿レ std ー 10g1C -- a で it れ std ー 10g10 ー 1164 WORK ライプラリ 現在実行中の作業 ディレクトリ AS ℃べンダの ライプラリ ロジック・ゲートのエンテ イティ , アーキテキチャ文 ア - キテクチャ文 ノヾツ・ケーーこ ) , 工 . ン・テ・イ・アイ , ユーザ定義のライプラリ STD, WORK 以外は 11b で a で y 文を記述することて呼び出し可能になる
3.1 同期式カウンタ コラム 4 ージを呼び出しています ( コラム 4 ). 算術演算子を使用しているため , ①のように "IEEE. std-logic-unsigned" のパッケ このはかに と記述します . end RTL; begin SI< =signed(A) 十 signed(B); "std_logic—arith" と "std—logic—unsigned" の両方を使用し , S2< =unsigned(A) 十 unsigned(B); SI_IN< =signed(A) 十 signed(B); SI< =CONV_STD_LOGIC_VECTOR(S1_IN,15); begin signal SI—IN : signed ( 15 downto O) ; architecture RTL Of F00 is S1,S2 : out std_logic—vector ( 15 downto O) ) ; port (A,B,C,D: in std—logic_vector ( 15 downto O) ; entity FOO is use IEEE. std_logic_unsigned. a11; use IEEE. std_logic_arith. a11; use 工 EEE. std - logic ー 1164. a11 ; library IEEE; 法もあります . 符号付き演算が必要になった場合のみ , データ・タイプ "signed" に変換する方 S2<=A 十 B; end RTL; ー unsigned の一寅算
5.3 可変長デコーダ / 工ンコーダ 5.3 可変長テコーダ / 工ンコーダ ・デコーダの記述 2.4 節で case 文 , if 文を使用したデコーダ / ェンコーダの記述例を紹介しました . 7 ノ 9 本節 では , ピット長可変デコーダ / ェンコーダをファンクション文を使用して記述します . リスト 5.3 の①がデコーダの記述です . 2.4 節の記述例は負論理で書かれており , デコ ード・ピットのみ℃ ' を出力していますが , この記述は正論理で , デコード・ビットのみ ' 1 ' を出力するようにしています . デコーダの出力は , 入力のピット長の 2 のべき乗が出力のビット長になります . ②で変 数町 MP " は入力信号 ' A ' の範囲をアトリヒ、ユート "A'length" によって宣言しています . ③ では②で宣言した " TMP " のすべてのピットに℃ ' を代入し , その後デコード値のビットの みを④で ' 1 ' に書き直して出力しています . ・エンコーダの記述 リスト 5.3 の⑤がプライオリティ・エンコーダの記述です . この記述はデコーダと同し く正論理で書かれています . 2.4 節ではプライオリティ・エンコーダを " if ー elsif " を使用し て記述していますが , こでは lsif ' ' を使用する代わりに for -100P 文を使用してピット 長可変に対応しています . VHDL では現在のところ 10g 関数はサポートされていません . そのため , デコーダで は出力ピット長を 2 のべき乗 ' * いで記述しましたが , 工ンコーダでは出力のビット長を パラメータ 'K' として入力しています . ⑥ではループ変数 'I' をタイプ変換関数℃ ONV UNSIGED" で "unsigned" に変換し , それからタイプ変換で "std_logic—vector" に変 換して出力しています . これはタイプ変換関数 "CONV-STD—LOGIC—VECTOR" で tt"std—logic—vector" が符号付きなのか , 符号無しなのかわからないためです . ⑥の return 文では , "A ( 工 ) = ' 1 " ならはこのファンクション文を終了し , 値を返すよう に記述しています . 入力信号 ' A ' のすべてのピットが℃ ' の場合は , この for-loop 文を最後 まで実行して⑦に移ります . ループ変数 'I' は for ー 10 叩文内部でしか使用できないので , ⑦では 'I' のかわりにアトリビュード A ' righ じによって A の一番右側のビット位置を取り 出しています . デコーダ / ェンコーダのように何度も繰り返し使用するような回路は , サププログラム でビット長可変にして定義しておくと便利です . しかし , サププログラム内部では , 信号
60 第 3 章カウンタの記述とシミュレーション 成されますが , カウンタのように ' 1 ' すっ加減算する場合は , ンタが生成されます . 算術演算とパッケージ インクリメンタやデクリメ "std—logic—vector" で算術演算をするためには , ノヾッケージ "std_logic_un signed" を呼び出す必要があります . "std—logic_unsigned" を呼んだ場合に は , "std—logic—vector" を "unsigned"( 符号ビット無し ) として算術演算をしま す . 符号ピット付きの演算をする場合には , ノヾッケージ "std_logic_signed" を 呼びます . library IEEE; use IEEE. std_logic_1164. a11; use IEEE. std_logic_signed. a11; "std—logic—unsigned" と "std—logic—signed" を同時に呼ぶことはできませ ん . したがって , 符号付きと符号無しの演算を同時に行うことはできません . 同 時に両方を使用する場合はパッケージ "std_logic_arith" を使用します . このパッケージを呼んだ場合 , 算術演算は "unsigned", "signed" と呼は・れ るデータ・タイプに変換して演算します . 変換にはデータ・タイプ変換 ( 4.8 節 ) を 使用して , library IEEE; use 工 EEE. std ー logic ー 1164. a11 ; use 工 EEE. std_logic_arith. a11; entity FOO is port(A,B,C,D: in std_logic_vector ( 15 downto O) ; S1,S2 : out std_logic_vector ( 15 downto O) ) ; architecture RTL of OO is