計算機工学論A P46~P49 クロック、リセット、クロック・イネーブルのセット 状態の出力値の指定 ステート・トランジョンの指定 ステート・マシンのビットと値の割り当て 05801623 照井 義隆 クロック、リセット、クロック・イネーブルのセット クロック、リセット、クロック・イネーブル信号 ロジック・セクションでブール制御式によって指定 ステートマシンの状態レジスタの フリップフロップを制御 状態の出力値指定 出力値:If文やCase文を使って出力値を決定 Simple1.tdfでは出力q ステートマシンssの状態:s0のときq=GND; :s1のときq=VCC; なお、出力値は真理値表で定義することも出来る ステート・トランジョンの指定 ステート・マシン・トランジョン ステート・マシンが新しい状態にトランジョン(遷移) するための条件を決定 ステート・マシン・トランジョンを指定するには・・・ 単一動作の範囲で状態を条件付で割り当てなくてならない このためCase文や真理値表文を推奨 Simple1.tdfでは各状態からのトランジョンは Case文のWHEN節で定義 Simple1.tdf SUBDESIGN simple CASE ss IS ( clk reset d ena q WHEN s0 => :INPUT; q = GND; :INPUT; :INPUT; %入、出力の宣言% IF d THEN :INPUT; ss = s1; :OUTPUT; END IF; ) VARIABLE %ステート・マシン宣言% WHEN s1 => q = VCC; ss: MACHINE WITH STATES (s0, s1); BEGIN ss.clk = clk; ss.reset = reset; IF !d THEN %クロック、リセット、クロック・ イネーブルのセット% ss = s0; END IF; ss.ena = ena; END CASE; END; %ステート・マシンの 状態s0,s1の遷移% Simple1.tdfのシュミレーション結果 ステート・マシンのビットと値の割り当て 状態ビット:ステート・マシン値の1ビットを保持するため に、ステート・マシンで使われたフリップフロッ プの出力 多くの場合、必要なリソースを最小限に抑えるために、状態ビットと 値の割り当てはMAX+PLUSⅡのコンパイラに任せたほうが良い 明示的な状態ビットを指定したい時 割り振りはステート・マシン宣言で記述可 stepper.tdf:ステッッピング・モーターの コントローラーを示している SUBDESIGN stepper TABLE ( ss, ccw, cw => ss; clk, reset :INPUT; %入、出力の宣言% ccw, cw :INPUT; s0, 1, x => s3; phase[3..0] :OUTPUT; s0, x, 1 => s1; %ステート・マシンの状態 ) s1, 1, x => s0; の遷移の指定% %ステート・マシン宣言% s1, x, 1 => s2; VARIABLE ss: MACHINE OF BITS (phase[3..0]) s2, 1, x => s1; WITH STATES ( s2, x, 1 => s3; s0 = B"0001", s3, 1, x => s2; s1 = B"0010", s3, x, 1 => s0; ccw=x,cw=1 s2 = B"0100", END TABLE; s3 = B"1000"); END; S0= BEGIN B”0001” ss.clk = clk; S3= ss.reset = reset; S1= B”1000” ステート・マシンの状態s0,s1,s2,s3の遷移 ccw=1,cw=x S2= B”0100” B”0010” stepper.tdfのシュミレーション結果
© Copyright 2024 ExpyDoc