SFL例題/第6回
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[SFL例題]]
*マルチプレクサの設計 [#n8b6c971]
3入力1出力のマルチプレクサを設計する。
----
#contents
**ダウンロード [#d7d36cb2]
&ref(sample06.tar.gz);
**覚えること [#sdb4d039]
-条件によって違う動作をさせる方法
-定数の表記法
***any の使用方法 [#c28be75b]
この例ではマルチプレクサは、選択信号 mux_sel によって、出力する値を変更している。~
このとき、mux_sel の持つ値によって、動作を変化させるという回路の構造は any 構文を使用して実現することが出来る。~
any {
mux_sel == 0b00 : out = ina;
mux_sel == 0b01 : out = inb;
mux_sel == 0b10 : out = inc;
else : out = 0b0000;
}
このような書き方だと、any 構文の中で : の左辺の式を満たすとき、右辺の式を実行するという機能を持つ。~
もしも、全ての条件に当てはまらないときは、else に書かれた式を実行する。~
~
このとき注意してほしいのは、左辺の式を満たす全ての条件に対する動作を行うということである。~
つまり、any 構文の中のどれか一つが実行されるのではなく、複数が実行されるということもあり得る。~
~
ただし、else だけは他に合う条件がないときだけに実行されるので、例外と言える。
***定数の表記法 [#j7180c28]
マルチプレクサの記述において、条件の判別において、定数を使用している。例えば、~
0b00, 0b01, 0b10
といった表記の部分が当てはまる。~
~
SFLでは2進、8進、16進の定数を扱うことが出来る。その書き方と対応は以下の表を参考にしてほしい。
~
|元の数字|>|>|SFLの表記(4ビット)|
|10進|2進|8進|16進|
|0|0b0000|0o00|0x0|
|1|0b0001|0o01|0x1|
|2|0b0010|0o02|0x2|
|3|0b0011|0o03|0x3|
|4|0b0100|0o04|0x4|
|5|0b0101|0o05|0x5|
|6|0b0100|0o06|0x6|
|7|0b0111|0o07|0x7|
|8|0b1000|0o10|0x8|
|9|0b1001|0o11|0x9|
|10|0b1010|0o12|0xa|
|11|0b1011|0o13|0xb|
|12|0b1100|0o14|0xc|
|13|0b1101|0o15|0xd|
|14|0b1110|0o16|0xe|
|15|0b1111|0o17|0xf|
**例題 [#defbe0cd]
4ビットの3入力1出力のマルチプレクサを設計する。選択信号を mux_sel として、以下のような対応になるとする。
***対応表 [#z42add8b]
|mux_sel の値|出力|
|00|ina|
|01|inb|
|10|inc|
|else|0000|
**サンプルソース [#ea6a3f37]
3入力マルチプレクサは以下のように記述できます。
module mux {
instrin do;
input ina<4>;
input inb<4>;
input inc<4>;
input mux_sel<2>; /* 出力の選択信号 */
output out<4>;
instruct do par {
/* 条件によって動作を変化させるブロック */
any {
mux_sel == 0b00 : out = ina;
mux_sel == 0b01 : out = inb;
mux_sel == 0b10 : out = inc;
else : out = 0b0000; /* 上記の条件に当てはまらないとき */
}
}
}
**シミュレーション [#k637d2df]
+[[ダウンロード>#d7d36cb2]]にあるsample06.tar.gzをダウンロードする。
--解凍方法は
% tar zxvf sample06.tar.gz
+sample06ディレクトリに移って、以下のファイルがあることを確認し、
--Makefile
--mux.sfl
--mux.sim
% make sim
+結果は以下のようになる。
ina:0001 inb:0010 inc:0100 mux_sel:00 out:0001
ina:0001 inb:0010 inc:0100 mux_sel:01 out:0010
ina:0001 inb:0010 inc:0100 mux_sel:10 out:0100
ina:0001 inb:0010 inc:0100 mux_sel:11 out:0000
終了行:
[[SFL例題]]
*マルチプレクサの設計 [#n8b6c971]
3入力1出力のマルチプレクサを設計する。
----
#contents
**ダウンロード [#d7d36cb2]
&ref(sample06.tar.gz);
**覚えること [#sdb4d039]
-条件によって違う動作をさせる方法
-定数の表記法
***any の使用方法 [#c28be75b]
この例ではマルチプレクサは、選択信号 mux_sel によって、出力する値を変更している。~
このとき、mux_sel の持つ値によって、動作を変化させるという回路の構造は any 構文を使用して実現することが出来る。~
any {
mux_sel == 0b00 : out = ina;
mux_sel == 0b01 : out = inb;
mux_sel == 0b10 : out = inc;
else : out = 0b0000;
}
このような書き方だと、any 構文の中で : の左辺の式を満たすとき、右辺の式を実行するという機能を持つ。~
もしも、全ての条件に当てはまらないときは、else に書かれた式を実行する。~
~
このとき注意してほしいのは、左辺の式を満たす全ての条件に対する動作を行うということである。~
つまり、any 構文の中のどれか一つが実行されるのではなく、複数が実行されるということもあり得る。~
~
ただし、else だけは他に合う条件がないときだけに実行されるので、例外と言える。
***定数の表記法 [#j7180c28]
マルチプレクサの記述において、条件の判別において、定数を使用している。例えば、~
0b00, 0b01, 0b10
といった表記の部分が当てはまる。~
~
SFLでは2進、8進、16進の定数を扱うことが出来る。その書き方と対応は以下の表を参考にしてほしい。
~
|元の数字|>|>|SFLの表記(4ビット)|
|10進|2進|8進|16進|
|0|0b0000|0o00|0x0|
|1|0b0001|0o01|0x1|
|2|0b0010|0o02|0x2|
|3|0b0011|0o03|0x3|
|4|0b0100|0o04|0x4|
|5|0b0101|0o05|0x5|
|6|0b0100|0o06|0x6|
|7|0b0111|0o07|0x7|
|8|0b1000|0o10|0x8|
|9|0b1001|0o11|0x9|
|10|0b1010|0o12|0xa|
|11|0b1011|0o13|0xb|
|12|0b1100|0o14|0xc|
|13|0b1101|0o15|0xd|
|14|0b1110|0o16|0xe|
|15|0b1111|0o17|0xf|
**例題 [#defbe0cd]
4ビットの3入力1出力のマルチプレクサを設計する。選択信号を mux_sel として、以下のような対応になるとする。
***対応表 [#z42add8b]
|mux_sel の値|出力|
|00|ina|
|01|inb|
|10|inc|
|else|0000|
**サンプルソース [#ea6a3f37]
3入力マルチプレクサは以下のように記述できます。
module mux {
instrin do;
input ina<4>;
input inb<4>;
input inc<4>;
input mux_sel<2>; /* 出力の選択信号 */
output out<4>;
instruct do par {
/* 条件によって動作を変化させるブロック */
any {
mux_sel == 0b00 : out = ina;
mux_sel == 0b01 : out = inb;
mux_sel == 0b10 : out = inc;
else : out = 0b0000; /* 上記の条件に当てはまらないとき */
}
}
}
**シミュレーション [#k637d2df]
+[[ダウンロード>#d7d36cb2]]にあるsample06.tar.gzをダウンロードする。
--解凍方法は
% tar zxvf sample06.tar.gz
+sample06ディレクトリに移って、以下のファイルがあることを確認し、
--Makefile
--mux.sfl
--mux.sim
% make sim
+結果は以下のようになる。
ina:0001 inb:0010 inc:0100 mux_sel:00 out:0001
ina:0001 inb:0010 inc:0100 mux_sel:01 out:0010
ina:0001 inb:0010 inc:0100 mux_sel:10 out:0100
ina:0001 inb:0010 inc:0100 mux_sel:11 out:0000
ページ名: