SFL例題/第9回
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[SFL例題]]
*stageを使った回路の設計 [#r4beac11]
SFL固有の構文であるstageを使った回路の設計をする。~
~
この例題では、自動的に値をインクリメントする回路を設計する。~
start信号が1クロックだけアサートされるので、それを受け取り、自動的に処理を続けなければいけない。
----
#contents
**ダウンロード [#b46d4cf1]
&ref(sample09.tar.gz);
**覚えること [#be3934e3]
-stageの定義
-generateの使い方
***stageの定義 [#j103c0f9]
SFL固有の構文として、stageという機能がある。~
パイプライン処理などを分かりやすく記述するための構文である。~
~
定義するためには、まずステージの名前と、起動時の引数を宣言する必要がある。~
この例題では、
stage_name main { task do(); }
のようになっているが、このステージの処理は引数を必要としないので、括弧内は空白である。~
引数を用いたステージの定義はパイプライン処理の例題で説明する予定である。~
~
stageの内部を定義するためには、stage構文で処理の記述を囲めば良い。例題では、
stage main {
par {
counter.do();
}
}
のようになっている。
***generateの使い方 [#o7ec525b]
stageを用いて定義した機能に動作を遷移させるためには、generateを使用する。~
この例題では、start信号がアサートされたときに動作を開始させるので、
instruct start generate main.do();
のような記述になる。~
~
これにより、mainステージが起動し、定義された処理が毎クロック行われる。
**サンプルソース [#y796e418]
/* register で使うインクリメンタの宣言 */
declare inc8 {
input in<8>;
output out<8>;
instrin do;
instr_arg do(in);
}
/* auto_inc で使うレジスタを用いたカウンタの宣言 */
declare register {
output out<8>;
instrin do;
}
/* 自動的にインクリメントする回路 */
module auto_inc {
/* スタート用制御信号 */
instrin start;
output out<8>;
/* インクリメンタ用のサブモジュール */
register counter;
/* ステージの名前と起動時の引数定義 */
stage_name main { task do(); }
par {
out = counter.out;
}
/* startがアサートされたとき、mainステージを生成する */
instruct start generate main.do();
/* mainステージの定義 */
stage main {
par {
counter.do();
}
}
}
/* レジスタを用いた回路の例で作成したカウンタ */
module register {
output out<8>;
instrin do;
/* 初期値が 0 のレジスタ */
reg_wr count<8>;
/* サブモジュール */
inc8 inc;
par {
out = count;
}
instruct do par {
/* レジスタへの入力は := を使用する */
count := inc.do(count).out;
}
}
/* PARTHENON のサンプルを使ってインクリメンタを作成 */
circuit inc8 {
input in<8>;
output out<8>;
instrin do;
instruct do out = in + 0x01;
}
**シミュレーション [#g3989f9e]
+[[ダウンロード>#b46d4cf1]]にあるsample09.tar.gzをダウンロードする。
--解凍方法は
% tar zxvf sample09.tar.gz
+sample09ディレクトリに移って、以下のファイルがあることを確認し、
--Makefile
--auto_inc.sfl
--auto_inc.sim
% make sim
+結果は以下のようになる。
time:1 out:0
time:2 out:1
time:3 out:2
time:4 out:3
time:5 out:4
(中略)
time:97 out:96
time:98 out:97
time:99 out:98
time:100 out:99
time:101 out:100
終了行:
[[SFL例題]]
*stageを使った回路の設計 [#r4beac11]
SFL固有の構文であるstageを使った回路の設計をする。~
~
この例題では、自動的に値をインクリメントする回路を設計する。~
start信号が1クロックだけアサートされるので、それを受け取り、自動的に処理を続けなければいけない。
----
#contents
**ダウンロード [#b46d4cf1]
&ref(sample09.tar.gz);
**覚えること [#be3934e3]
-stageの定義
-generateの使い方
***stageの定義 [#j103c0f9]
SFL固有の構文として、stageという機能がある。~
パイプライン処理などを分かりやすく記述するための構文である。~
~
定義するためには、まずステージの名前と、起動時の引数を宣言する必要がある。~
この例題では、
stage_name main { task do(); }
のようになっているが、このステージの処理は引数を必要としないので、括弧内は空白である。~
引数を用いたステージの定義はパイプライン処理の例題で説明する予定である。~
~
stageの内部を定義するためには、stage構文で処理の記述を囲めば良い。例題では、
stage main {
par {
counter.do();
}
}
のようになっている。
***generateの使い方 [#o7ec525b]
stageを用いて定義した機能に動作を遷移させるためには、generateを使用する。~
この例題では、start信号がアサートされたときに動作を開始させるので、
instruct start generate main.do();
のような記述になる。~
~
これにより、mainステージが起動し、定義された処理が毎クロック行われる。
**サンプルソース [#y796e418]
/* register で使うインクリメンタの宣言 */
declare inc8 {
input in<8>;
output out<8>;
instrin do;
instr_arg do(in);
}
/* auto_inc で使うレジスタを用いたカウンタの宣言 */
declare register {
output out<8>;
instrin do;
}
/* 自動的にインクリメントする回路 */
module auto_inc {
/* スタート用制御信号 */
instrin start;
output out<8>;
/* インクリメンタ用のサブモジュール */
register counter;
/* ステージの名前と起動時の引数定義 */
stage_name main { task do(); }
par {
out = counter.out;
}
/* startがアサートされたとき、mainステージを生成する */
instruct start generate main.do();
/* mainステージの定義 */
stage main {
par {
counter.do();
}
}
}
/* レジスタを用いた回路の例で作成したカウンタ */
module register {
output out<8>;
instrin do;
/* 初期値が 0 のレジスタ */
reg_wr count<8>;
/* サブモジュール */
inc8 inc;
par {
out = count;
}
instruct do par {
/* レジスタへの入力は := を使用する */
count := inc.do(count).out;
}
}
/* PARTHENON のサンプルを使ってインクリメンタを作成 */
circuit inc8 {
input in<8>;
output out<8>;
instrin do;
instruct do out = in + 0x01;
}
**シミュレーション [#g3989f9e]
+[[ダウンロード>#b46d4cf1]]にあるsample09.tar.gzをダウンロードする。
--解凍方法は
% tar zxvf sample09.tar.gz
+sample09ディレクトリに移って、以下のファイルがあることを確認し、
--Makefile
--auto_inc.sfl
--auto_inc.sim
% make sim
+結果は以下のようになる。
time:1 out:0
time:2 out:1
time:3 out:2
time:4 out:3
time:5 out:4
(中略)
time:97 out:96
time:98 out:97
time:99 out:98
time:100 out:99
time:101 out:100
ページ名: