計算機工学論A

計算機工学論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のシュミレーション結果