SFL例題/第2回
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[SFL例題]]
*ビットを並びかえる回路の設計 [#f5137e35]
入力信号の上位ビットと下位ビット反転させた信号を出力させるような回路を設計する。
----
#contents
**ダウンロード [#oa9d83b6]
&ref(sample02.tar.gz);
**覚えること [#fd5a6727]
-ビット幅のある信号の宣言と、並びかえる方法
***ビット幅のある信号の宣言 [#o39433ab]
[[XORの設計>SFL例題/第1回]]で触れた通り、ビット幅のある信号線を宣言するときは
input in<4>;
のように<>でビット幅を指定する。
***ビット幅のある信号の操作 [#meb2138e]
上記のような信号線を宣言したとき、任意のビットを扱いたいときは、以下のように表記する。
in<3>, in<2>, in<1>, in<0>
このとき、4ビットのinに対して、1010という信号を入力しているとき、
|in<3>|1|
|in<2>|0|
|in<1>|1|
|in<0>|0|
という対応になる。また、
in<3:1>, in<1:0>
といった任意の幅のビットを扱うことも可能である。この例だと以下のような値になる。
|in<3:1>|101|
|in<1:0>|10|
***ビットの結合 [#ffafb650]
この例題では、ビットを並びかえるという作業を行っている。~
上記の例で信号の中の任意のビットを扱う方法を示したが、それを出力する際に、
out<3> = in<0>;
out<2> = in<1>;
といった表記が出来ないことに注意してほしい。~
~
左辺のビット幅に対して、右辺のビット幅が等しくなるように式を書く必要がある。~
ここではビットの結合するために||という演算子がSFLでは用意されている。記述例は以下の通り。
out = (in<0> || in<1> || in<2> || in<3>);
**例題 [#u5a063f9]
入力した4ビットの信号を上位ビットと下位ビットを逆順に並びかえて出力させる回路を設計する。
***真理値表 [#pb8b58ab]
|in|out|
|0000|0000|
|0001|1000|
|0010|0100|
|>| (中略) |
|1101|1011|
|1110|0111|
|1111|1111|
**サンプルソース [#i735efc1]
ビットを並び替える回路は以下のように記述できる。
module bit {
input in<4>;
output out<4>;
out = (in<0> || in<1> || in<2> || in<3>);
}
**シミュレーション [#ucea36d7]
+[[ダウンロード>#oa9d83b6]]にあるsample02.tar.gzをダウンロードする。
--解凍方法は
% tar zxvf sample02.tar.gz
+sample02ディレクトリに移って、以下のファイルがあることを確認し、
--Makefile
--bit.sfl
--bit.sim
% make sim
+結果は以下のようになる。
in:1001 out:1001
in:1110 out:0111
in:0101 out:1010
終了行:
[[SFL例題]]
*ビットを並びかえる回路の設計 [#f5137e35]
入力信号の上位ビットと下位ビット反転させた信号を出力させるような回路を設計する。
----
#contents
**ダウンロード [#oa9d83b6]
&ref(sample02.tar.gz);
**覚えること [#fd5a6727]
-ビット幅のある信号の宣言と、並びかえる方法
***ビット幅のある信号の宣言 [#o39433ab]
[[XORの設計>SFL例題/第1回]]で触れた通り、ビット幅のある信号線を宣言するときは
input in<4>;
のように<>でビット幅を指定する。
***ビット幅のある信号の操作 [#meb2138e]
上記のような信号線を宣言したとき、任意のビットを扱いたいときは、以下のように表記する。
in<3>, in<2>, in<1>, in<0>
このとき、4ビットのinに対して、1010という信号を入力しているとき、
|in<3>|1|
|in<2>|0|
|in<1>|1|
|in<0>|0|
という対応になる。また、
in<3:1>, in<1:0>
といった任意の幅のビットを扱うことも可能である。この例だと以下のような値になる。
|in<3:1>|101|
|in<1:0>|10|
***ビットの結合 [#ffafb650]
この例題では、ビットを並びかえるという作業を行っている。~
上記の例で信号の中の任意のビットを扱う方法を示したが、それを出力する際に、
out<3> = in<0>;
out<2> = in<1>;
といった表記が出来ないことに注意してほしい。~
~
左辺のビット幅に対して、右辺のビット幅が等しくなるように式を書く必要がある。~
ここではビットの結合するために||という演算子がSFLでは用意されている。記述例は以下の通り。
out = (in<0> || in<1> || in<2> || in<3>);
**例題 [#u5a063f9]
入力した4ビットの信号を上位ビットと下位ビットを逆順に並びかえて出力させる回路を設計する。
***真理値表 [#pb8b58ab]
|in|out|
|0000|0000|
|0001|1000|
|0010|0100|
|>| (中略) |
|1101|1011|
|1110|0111|
|1111|1111|
**サンプルソース [#i735efc1]
ビットを並び替える回路は以下のように記述できる。
module bit {
input in<4>;
output out<4>;
out = (in<0> || in<1> || in<2> || in<3>);
}
**シミュレーション [#ucea36d7]
+[[ダウンロード>#oa9d83b6]]にあるsample02.tar.gzをダウンロードする。
--解凍方法は
% tar zxvf sample02.tar.gz
+sample02ディレクトリに移って、以下のファイルがあることを確認し、
--Makefile
--bit.sfl
--bit.sim
% make sim
+結果は以下のようになる。
in:1001 out:1001
in:1110 out:0111
in:0101 out:1010
ページ名: