SFL例題/第3回
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[SFL例題]]
*ハーフアダーの設計その1 [#r4df2563]
ハーフアダーを設計する
----
#contents
**ダウンロード [#feb33043]
&ref(sample03.tar.gz);
**覚えること [#y46aa26e]
-処理内容が2つ以上あるときの処理実現方法
***par の使用方法 [#w888f4a7]
この例ではハーフアダーは2つの出力(sout, cout)を持っている。~
それぞれの出力の値を決定するには、2つの出力に対して、それぞれ論理式を書かなくてはならない。~
このとき、2つの処理は同時に行われることに注意する。~
~
このように、2つの処理を同時に行いたいときには par という構文を使用する。~
また、回路が2つ以上の処理を行うときは、par 構文を使用しなければならない。~
通常のプログラム言語ではこのような概念はないが、回路設計においては並列に動作するということを十分に考えて設計する必要がある。~
~
例えば、outaにaとbの論理積を、outbにaとbの論理和を出力するときは、~
par {
outa = a & b;
outb = a | b;
}
のような記述になる。
**例題 [#cac9edcb]
以下の真理値表を満たすような回路(ハーフアダー)を設計する。
***真理値表 [#c8996596]
|ina|inb|sout|cout|
|0|0|0|0|
|0|1|1|0|
|1|0|1|0|
|1|1|0|1|
***論理ゲートを用いた設計例 [#dc402b9a]
CENTER:&ref(half_adder.jpg);
**サンプルソース [#z0c00e59]
ハーフアダーは以下のように記述できる。
module half_adder {
input ina;
input inb;
output sout;
output cout;
/* 2つ以上の処理があるときは par を使用しなければならない。 */
par {
sout = ina @ inb; /* ina と inb の排他的論理和(XOR) */
cout = ina & inb;
}
}
**シミュレーション [#o2cf7631]
+[[ダウロード>#feb33043]]にあるsample03.tar.gzをダウンロードする。
--解凍方法は
% tar zxvf sample03.tar.gz
+sample03ディレクトリに移って、以下のファイルがあることを確認し、
--Makefile
--half_adder.sfl
--half_adder.sim
% make sim
+結果は以下のようになる。
ina:0 inb:0 sout:0 cout:0
ina:0 inb:1 sout:1 cout:0
ina:1 inb:0 sout:1 cout:0
ina:1 inb:1 sout:0 cout:1
終了行:
[[SFL例題]]
*ハーフアダーの設計その1 [#r4df2563]
ハーフアダーを設計する
----
#contents
**ダウンロード [#feb33043]
&ref(sample03.tar.gz);
**覚えること [#y46aa26e]
-処理内容が2つ以上あるときの処理実現方法
***par の使用方法 [#w888f4a7]
この例ではハーフアダーは2つの出力(sout, cout)を持っている。~
それぞれの出力の値を決定するには、2つの出力に対して、それぞれ論理式を書かなくてはならない。~
このとき、2つの処理は同時に行われることに注意する。~
~
このように、2つの処理を同時に行いたいときには par という構文を使用する。~
また、回路が2つ以上の処理を行うときは、par 構文を使用しなければならない。~
通常のプログラム言語ではこのような概念はないが、回路設計においては並列に動作するということを十分に考えて設計する必要がある。~
~
例えば、outaにaとbの論理積を、outbにaとbの論理和を出力するときは、~
par {
outa = a & b;
outb = a | b;
}
のような記述になる。
**例題 [#cac9edcb]
以下の真理値表を満たすような回路(ハーフアダー)を設計する。
***真理値表 [#c8996596]
|ina|inb|sout|cout|
|0|0|0|0|
|0|1|1|0|
|1|0|1|0|
|1|1|0|1|
***論理ゲートを用いた設計例 [#dc402b9a]
CENTER:&ref(half_adder.jpg);
**サンプルソース [#z0c00e59]
ハーフアダーは以下のように記述できる。
module half_adder {
input ina;
input inb;
output sout;
output cout;
/* 2つ以上の処理があるときは par を使用しなければならない。 */
par {
sout = ina @ inb; /* ina と inb の排他的論理和(XOR) */
cout = ina & inb;
}
}
**シミュレーション [#o2cf7631]
+[[ダウロード>#feb33043]]にあるsample03.tar.gzをダウンロードする。
--解凍方法は
% tar zxvf sample03.tar.gz
+sample03ディレクトリに移って、以下のファイルがあることを確認し、
--Makefile
--half_adder.sfl
--half_adder.sim
% make sim
+結果は以下のようになる。
ina:0 inb:0 sout:0 cout:0
ina:0 inb:1 sout:1 cout:0
ina:1 inb:0 sout:1 cout:0
ina:1 inb:1 sout:0 cout:1
ページ名: