6.2 ステート・マシンノ 43 この状態遷移図を図 6.8 に示します . 状態 ' INIT ' は初期状態で命令コードを受け付け る状態にあります . もし , 入力が乗算 ' MUL ' , 16 ピット加算 " DAD ' 以外である場合には , 演算が 1 クロックで済んでしまうので , 状態は N 工 T " から移動しません . 乗算 "MUL" が 入力された場合には ' ADC ' に移動し , 加算を 1 回実行した後 , 右シフト演算 ' SRF ' に移 動します . この動作を 8 ビット分繰り返して COUNT = 7 の状態になったとき , N 工 T ' 状態に戻 ります . 16 ピット加算の場合には加算を 2 回実行します . ' DA びが入力された場合 , MUL" の時と同しく " ADC " に移り , 今度はすぐに ' 工 N 工に戻ります . 各状態での出力 信号には , "INST—OUT" と "DONE" があります . "INSTOUT" は ALU に渡す命令で , く図 6.8 〉 ALU ( ミーリ型ステート・マシン ) の状態遷移図 INST IN=others DONE<='I' INST OUT く = INST -IN INIT COUNT = 7 DONE < = ' 1 ' INST -OUT く = ADC INST ー IN =MUL, DAD DONE<='O' INST - OUT く = ADD COUNT/ = 7 DONE<='O' INSTOUT<=ADC INST -IN = MUL DONE<='O' INST -OUT <=SRF INST IN =DAD DONE<='I' INST OUT < = ADC ADC SRF く表 6.1> ALU ( ミーリ型ステート・マシン ) の状態遷移表 出力 次状態 INST OUT ADD ADC INST Ⅲ SRF SRF ADC ADC ADC ADC 爪灯 入力 現状態 (INST_IN) MUL,DAD INT others MUL DAD COUNT/=7 COUNT=7 DONE 0 1 0 1 人 0 、 1 ADC SRF
VHDL による回路設計 第 6 章 ノ 46 process(CLK) beg in if(CLK' event and CLK=' 1 ' ) then if(CLRRENT_STATE=lNlT) then COINT ← 0 , elsif(ClRREMT_STATE=,W then COINT ← C 侊十 1 ; end i f ; end i f ; end process ; end EQLY ; くリスト 6.3 > ALU ( ミーリ型ステート・マシン ) の記述 ( つづき ) ④ "MUL" 演算用カウンタの記述 く図 6.9 > ALU ( ムーア型ステート・マシン ) の状態遷移図 INST-IN= others INST ー IN =DAD INIT 0 , ADD DAD 0 , ADC INST-IN=MUL FRF 1 , ADC COUNT=6 ADC 0 , SRF COUNT/ = 6 SRF 0 , ADC
748 第 6 章 VHDL による回路設計 状態の数が増えてしまいます . 入力信号の状態を直接出力に結びつけれないためクロッ ク・サイクルが余分にかかってしまうこともあります . しかし , 逆にムーア型のステート・マシンは入力信号の影響を後段に伝えないという利 点もあります . ーリ型では , 図 6.10 のシミュレーション波形の①のように , 入力信号 NST ーエ N " が "INST_O UT" 出力に反映されるまでの時間 , 別の命令を出力することになってしまい ます . このように別の命令を出力してしまうと , 後段の回路に悪い影響を与えてしまいま す . しかし , ムーア型では図 6.1 1 の①のように別の命令を出力してしまうようなことはあ りません . また , ムーア型のステート・マシンはミーリ型にくらべて一つの状態での条件 式が少なくなります . そのため , 回路自体の動作スピードは速くなります . このような特徴を総合するとミーリ型は自由度が高いステート・マシン , ムーア型は自 由度は低いけれども安定性の高いステート・マシンであると言うことができます . ュレーション波形 く図 6.10 〉 ALU ( ミーリ型ステート・マシン ) のシミ /TEST_MUWCLK 0 /TEST_MULJRESET E T_MUL'UI/CURRENT_STATE ADC SRF SRF SRF SRF SRF SRF ÆEST_MUL'INST_IN ADD 0A0 SRF SRF SRF SRF SRF SUB ADO /TEST_MUL-nNST_OUT A00 A00 ADC A00 SRF MUL ÆEST M リし OONE /TEST M リ凵リ I/COUNT 0 5 4 3 2 0 0 ① "INST-IN" が遅れて入力され たことによりハザードが発生 ン波形 く図 6.1 1 > ALU ( ムーア型ステート ・マシン ) のシミ ュレ - ーショ 0 0 /TEST_MOORE/CLK /TEST_MOORE/RESET SRF FRF 県 0A0 SRF SRF SRF RENI/CURRENT STATE INIT 0A0 SRF SRF ADC /TEST MOOR 日 ST ー ADO 0A0 ADC SRF A00 ,'TEST_MOORE/INST_OUT ADD ADC ADD SRF SRF ADC SRF ADC SRF SRF SRF ÆEST_MOORE/DONE /TEST_MOORE/UI/COUNT M リし 0 7 5 4 2 0 3 0
ノ 45 ーート 6.2 ステ ・ - ~ シン くリスト 6.3 〉 ALU ( ミーリ型ステート・マシン ) の記述 library IEEE; use IEEE. std 」 og ic_1164. a Ⅱ ; use ORK. UPAC. a Ⅱ ; ent i ty MULSTATE i s port ( CLK, RESET : in std 」 ogic, INST Ⅲ i n ー TR 刊 ON , ST ー 0 町 : out INSTRICTI ON , : out std 」 ogic); end MWSTATE ; arch i tecture MEALY Of MIJLSTATE is type STATE is ( Ⅲ灯 , A[E , SRF ) ; s i gnal CIRRENT_STATE, NEXT_STATE : STATE ; signal COUNT : intege 「「 ange 0 to K-I ; beg i n process(CLK, RESET) beg i n i f(RESET=' 1 ' ) then CURRENT_STATE ←Ⅲ灯 : els if(CLK' event and CLK=' 1 ' ) then CURRENT_STATE く = NEXT_STATE ; end i f ; end process ; process(CURRENT STÅTE,I T 」 N, COUNT) beg i n case CIRRENT STATE i s when Ⅲ灯ニ > if(lNST 」 N=MUL 0 「 INST 」 N=DAD )then ← ' 0 ' ; ー T ー 0 町← ADD; NEXT STATE ← ; e ー se く = ' 1 ' ; ー T ー 0 町← INST 」 N, NEXT STATE くニ end i f ; = > if(lNST 」 N = MUL) then when ← ' 0 ' ; ー T ー 0 町← SRF, NEXT STATE ← SRF ; e ー se ' 1 ' ー T ー 0 町← くニ NEXT STATE ←Ⅲ灯 ; end i f , when SRF ニ〉 if(COUNT = 7 ) then ← ' 1 ' ー T ー 0 町← Am NEXT_STATE ←Ⅲ灯 ; e ー se ← ' 0 ' , INST 0 町← NEXT_STATE ← end i f , ータ・タイプの宣言 - ーー -- ーーーーーー・ 1 ステート・マシンのテ ( 2 ) フリップフロップ生成の記述 "NEXT-STATE" を "CURRENT_STATE" に代入 ③ "NEXT-STATE" "INST-OUT" 出力 , " DONE " 出力の記述 ( 組み合わせロジックを生成 ) end case ; end process ;
770 第 4 章データ・タイプとパッケージ signal ALU ー CODE : INSTRUCT 工 ON; signal R ー BANK : BANK : = ("OOOOOOOO","OOOOOOOO",O,ADD) ; ADDBUSI < = R BANK. ADDRI; R BANK.INST く = ALU CODE; レーションに利用されています . います . そのため , ロジック回路生成のためというよりも , システム・レベルでのシミュ 場合に便利です . レコード・タイプは , ロジック回路を生成させるとき , 分けられてしま レコードは , SCSI などのバスを表現する場合や , 通信のプロトコルを表現するような
6.2 ステート・マシン 7 イ もっと複雑なステート・マシンを記述する必要がありますが , こでは動作を説明するた めに単純化していると考えてください . 複雑なステート・マシンでは , その状態遷移の考 え方で回路の性能が大幅に変わってきます . 設計者はステート・マシンを自由に構成する ことができる反面 , そのできは・えが間われてしまいます . 最近では , この状態遷移図を図面入力し , その図面から直接 VHDL 記述を出力するツ ールも販売されています . 複雑なステート・マシンを設計するには , このようなツールを 利用すると便利です . ・ムーア型ステート・マシン ーリ型ステート・マシンは一つの状態に対し , 入力信号の条件で出力信号をいくつで も記述できます . それに対してムーア型ステート・マシンは , ーっの状態に対して一つの 出力しか持ちません . 図 6.9 および表 6.2 は , 図 6.8 のミーリ型ステート・マシンをム ーア型ステート・マシンに書き直したものです . こでは話を簡単にするため , 乗算 "MUL" と 16 ビット演算 " DAD ' ' のみを考えます . ムーア型の状態遷移図では , 出力をその状態の中に記述します . ーリ型では "MUL" が入力されたときも ' DAD " が入力されたときも同し状態 " ADC ' に進みました . しかし , ムーア型では次の状態での ' ' D 〇 NE 出力と NST ー OUT " 出力の値が異なるため , それぞ れ別の状態 " ADC ' , DAD " に進みます . "MUL" の演算も COUNT = 7 のときの "SRF" で "DONE" が異なる値を出力するため , 別の状態 " SRF " , " FRF " に進みます . このため , ーリ型で三つだった状態の数が , ムーア型では五つに増えています . この ように , 同し機能をステート・マシンで実現させる場合 , ムーア型はミ リ型にくらべて く表 6.2 〉 ALU ( ムーア型ステート・マシン ) の状態遷移表 現状態 次状態 入力 出力 (INST_IN) DONE INST_OUT MUL ADC ADD DAD DAD others 爪灯 COUNT/=6 SRF COUNT=6 FRF 爪灯 ADC 爪灯 0 ADC SRF 0 DAD SRF FRF ADC ADC ADC 1 よ 0 1 よ
ノ 50 第 6 章 VHDL による回路設計 くリスト 6.4 > ALU ( ムーア型ステート・マシン ) の記述 ( 合成された回路 ) NEXT_STATE ←Ⅲ灯 ; when FRF = > ー T ー 0 町← AW ← ' 1 ' NEXT STATE ← ; when SRF = 〉 INST 0 町← AW ← ' 0 ' , end i f ; NEXT STATE ← SRF ; e ー se NEXT STATE ← FRF ; end process ; end case ; end process ; end i f ; end i f ; COUMT ← CO 第十 1 ; els i f(CURRENT then COUNT ← 0 ; i f(CURRENT_STATE= Ⅲ灯 ) then i f(CLK' event and CLK=' 1 ' ) then process(CLK) begin end hORE ,
4.10 プ限定式はデータ・タイプ名に ' を付加します . A < =std - logic ー vector' に 01101010 つ ; case std3bit' (A & B & C ) is Subtype std3bit is std ー logic ー vector(O tO 2 ) レコード・タイプ 709 when "OOO ” when ” 001 ” " 01111111 " ” 10111111 ” タイプ限定式はタイプ変換と文法が似ているので注意して下さい . 410 レコード・タイプ 配列は一つの要素が複数個集まったものであるのに対し , 素が異なる名前をもって集まったものです . type データ・タイプ名 is record 要素名 : データ・タイプ名 ; 要素名 : データ・タイプ名 ; : integer; RO ADDRI : std ー logic ADDRO : std ー logic type BANK is record end record ; レコード・タイプは複数の要 レコード・タイプのデータ・タイプから要素を取り出す場合には , '. ' を使用します . vector ( 7 downto O) ; vector ( 7 downto O) ; INST : INSTRUCTION; end record; signal ADDBUS1,ADDBUS2 : std signal RESULT : integer; logic vector ( 51 downto O ) ;
3.4 シミュレーションの記述 くリスト 3.6 > イネープル付き 12 進力ウンタのシミュレーション記述 library IEEE; use IEEE. std 」 ogic 」 164. a Ⅱ ; fo 「 CLK_CYCLE/3 , fo 「 CLK_CYCLE*IO ; fo 「 CLK CYCLE*3; パ ( CLK,ÆSET,EN : in std. 」 t COLNT4EN archi tecture S 1 Of TEST CO.NT4EN is end TEST COlNT4EN ; ent i ty TEST CuT4EN i s use IEEE. std 」 ogic_unsigned all ; ①最上位なのてポートの記述はない ② "COUNT4EN" の 袵・ wt std 」 ogic_vector(3 面 to の コンポーネント文 end calponent ; constant CLK CYQE : Time ド 20. ns ; signal CLK,INIT_RESET, EN : std. 」 ogic, ③ "constant" は定数宣言 20ns を設定 signal CO.NT : std. 」 ogic_vector(3 面 t0 の ; beg i n : C01.NT4EN port map ( CLK: 〉 CLK, 託 T : 月Ⅲ T ー能 T , <—・ -- ④ " COUNT4E N " の EN=>EN, C Ⅷ = 〉 CO ー ) : ⑤プロセス文クロック入力の記述 インスタンス呼び出し ほ託 T く = ・ 0 ' ; EN ← Ⅲほ能 T ← fo 「 CLK CYCLE , Ⅲほ能 T ← ' 0 ' , end SIMI ; end process ; process begin CLK ← wa i t fo 「 CLK CYCLE/2; CLK ← ' 0 ' wai t fo 「 CLK CYCLE/2; end process ; wa i t ; EN ← wa i t EN ← wa i t wa i t process beg i n ⑥ " INIT ー RESET" " 刊 N " 入力の記述 コンフィグレーション名 conf igrat ion CFG TEST Of TEST COlNT4EN is fo 「引 MI ーーーーーー⑨アーキテクチャ名 end for , end CFG_TEST ; ⑧コンフィグレー う / ョン : 立
6.2 ステート・マシンノ 49 リ型の記述 リスト 6.4 がムーア型の VHDL 記述です . ムーア型の VHDL 記述はミ とほとんど変わりません . 各状態での if 文が少なくなり , 出力信号が if 文を使用してい ないだけの違いになります . くリスト 6.4 〉 ALU ( ムーア型ステート・マシン ) の記述 library IEEE; use IEEE. std 」 ogic ー 1164. all ; use WORK. IPAC. a Ⅱ ; ent i ty USTATE is port ( CLK, RESET : in std, 」 ogic; ー NST Ⅲ i n ー TRI-C 刊 ON : ー T ー 0 町 : out ー TRIE 刊 ON , : out std 」 ogic); end MULSTATE , arch i tecture of USTATE is type STATE is ( Ⅲ灯 , DAD , A[.m SRF, FRF ) : s i gnal CURREMT STATE, NEXT_STATE : STATE ; s ignal COUMT . integer range 0 to K-I ; beg in process(CLK, RESET) beg i n if(RESET=' 1 ' ) then CURRENT_STATE ←Ⅲ灯 ; elsif(CLK' event and CLK=' 1 ' ) then CIRRENT_STATE く = NEXT_STATE ; end i f ; end process ; process(C し RRENT_STATE,I T 」 N, COIJNT) beg i n case CIJRRENT STATE i s when 灯 = 月 TO 町く = ADD; く = ' 0 ' , i f(lNST 」 N=U)then eIsif(lNST 」 N=DAD )then NEXT_STATE ← DAD : e ー se NEXT_STATE ←灯 ; end i f , when DÅD = 〉ー T ー 0 町く = く = ' 1 ' when = 〉ー T ー 0 町く = SRF, く = ' 0 ' i f ( C 側ニ 6 ) then ①ムーア型のデータ・タイプ ( ミーリ型よりもニっ多い ) 宣 ②フリップフロップ生成の記述 ーリ型と全く同し ③ "NEXT-STATE" "INST-OUT" 出力 , "DONE" 出力の記述