SFL演習問題/第4回
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[SFL演習問題]]
*カウンタの設計 [#d0c8b70f]
クロックに同期して10を数えるカウンタを設計する。
----
#contents
**ダウンロード [#z0356ba1]
&ref(ex04.tar.gz);
**目的 [#ka3aa32a]
-レジスタを使う回路を設計する。
**仕様 [#g6257f62]
-4ビットの入力の信号に対して1を加算して4ビットを出力するインクリメンタを使用する。
--加算する値は常に1なのでハーフアダーを用いた設計を利用する。
-ファイル名はinc4.sflとする。
declare hadder {
/* 内容を記述 */
}
module inc4 {
input din<4>;
output dout<4>;
instrin do;
/* 以下に内容を記述 */
}
module hadder {
/* 内容を記述 */
}
-4ビットインクリメンタを用いてカウンタを設計する。
--clear信号がアサートされたときにカウンタの値を0に戻す。
--カウンタの値が一周したときup信号を1にアサートする。
--clear信号とdo信号が同時にアサートされているときはclear信号を優先させる。
-ファイル名はcnt10.sflとする。
%d COUNT_MAX 0b1001 /* 10進数表現で9 */
declare inc4 {
/* 内容を記述 */
}
module cnt10 {
output out<4>;
instrin clear;
instrin do;
instrout up;
/* 以下に内容を記述 */
}
***設計例(インクリメンタ) [#le0f5bc4]
Full Adder の入力Bは0になっているので、Half Adderのみの構成で作ることが可能。
CENTER:&ref(Incrementer.gif);
**手順 [#s45c8649]
+ハーフアダーを設計する。
+4ビットのインクメンタを設計する。
+インクリメンタを用いてカウンタを設計する。9までカウントしたら次は0に戻し、一周したことを表すup信号をアサートさせる。
**シミュレーション [#h06cd310]
-seconds用シミュレーションスクリプト(cnt10.sim)
--このスクリプトは上記の仕様を満たすモジュール用に作成されてます。
-Makefileとinc4.sflとcnt10.sflとcnt10.simを同じディレクトリに置いたことを確認し、そのディレクトリで
% make sim
-回路が正しければ以下のような出力を得ます。
time:1 out:0 up:
time:2 out:0 up:
time:3 out:0 up:
time:4 out:0 up:
time:5 out:0 up:
time:6 out:0 up:
time:7 out:0 up:
time:8 out:0 up:
time:9 out:0 up:
time:10 out:0 up:
time:11 out:1 up:
time:12 out:2 up:
time:13 out:3 up:
time:14 out:4 up:
time:15 out:5 up:
time:16 out:6 up:
time:17 out:7 up:
time:18 out:8 up:
time:19 out:9 up:1
time:20 out:0 up:
-inc4.sfl単体のseconds用シミュレーションスクリプト(inc4.sim)
--このスクリプトは上記の仕様を満たすモジュール用に作成されてます。
-Makefileとinc4.sflとinc4.simを同じディレクトリに置いたことを確認し、そのディレクトリで
% make incsim
-回路が正しければ以下のような出力を得ます。
din:0011 dout:0100
din:0000 dout:0001
din:1111 dout:0000
din:0101 dout:0110
din:1100 dout:1101
**設計例 [#t4c18159]
&ref(ex04_answer.tar.gz);
終了行:
[[SFL演習問題]]
*カウンタの設計 [#d0c8b70f]
クロックに同期して10を数えるカウンタを設計する。
----
#contents
**ダウンロード [#z0356ba1]
&ref(ex04.tar.gz);
**目的 [#ka3aa32a]
-レジスタを使う回路を設計する。
**仕様 [#g6257f62]
-4ビットの入力の信号に対して1を加算して4ビットを出力するインクリメンタを使用する。
--加算する値は常に1なのでハーフアダーを用いた設計を利用する。
-ファイル名はinc4.sflとする。
declare hadder {
/* 内容を記述 */
}
module inc4 {
input din<4>;
output dout<4>;
instrin do;
/* 以下に内容を記述 */
}
module hadder {
/* 内容を記述 */
}
-4ビットインクリメンタを用いてカウンタを設計する。
--clear信号がアサートされたときにカウンタの値を0に戻す。
--カウンタの値が一周したときup信号を1にアサートする。
--clear信号とdo信号が同時にアサートされているときはclear信号を優先させる。
-ファイル名はcnt10.sflとする。
%d COUNT_MAX 0b1001 /* 10進数表現で9 */
declare inc4 {
/* 内容を記述 */
}
module cnt10 {
output out<4>;
instrin clear;
instrin do;
instrout up;
/* 以下に内容を記述 */
}
***設計例(インクリメンタ) [#le0f5bc4]
Full Adder の入力Bは0になっているので、Half Adderのみの構成で作ることが可能。
CENTER:&ref(Incrementer.gif);
**手順 [#s45c8649]
+ハーフアダーを設計する。
+4ビットのインクメンタを設計する。
+インクリメンタを用いてカウンタを設計する。9までカウントしたら次は0に戻し、一周したことを表すup信号をアサートさせる。
**シミュレーション [#h06cd310]
-seconds用シミュレーションスクリプト(cnt10.sim)
--このスクリプトは上記の仕様を満たすモジュール用に作成されてます。
-Makefileとinc4.sflとcnt10.sflとcnt10.simを同じディレクトリに置いたことを確認し、そのディレクトリで
% make sim
-回路が正しければ以下のような出力を得ます。
time:1 out:0 up:
time:2 out:0 up:
time:3 out:0 up:
time:4 out:0 up:
time:5 out:0 up:
time:6 out:0 up:
time:7 out:0 up:
time:8 out:0 up:
time:9 out:0 up:
time:10 out:0 up:
time:11 out:1 up:
time:12 out:2 up:
time:13 out:3 up:
time:14 out:4 up:
time:15 out:5 up:
time:16 out:6 up:
time:17 out:7 up:
time:18 out:8 up:
time:19 out:9 up:1
time:20 out:0 up:
-inc4.sfl単体のseconds用シミュレーションスクリプト(inc4.sim)
--このスクリプトは上記の仕様を満たすモジュール用に作成されてます。
-Makefileとinc4.sflとinc4.simを同じディレクトリに置いたことを確認し、そのディレクトリで
% make incsim
-回路が正しければ以下のような出力を得ます。
din:0011 dout:0100
din:0000 dout:0001
din:1111 dout:0000
din:0101 dout:0110
din:1100 dout:1101
**設計例 [#t4c18159]
&ref(ex04_answer.tar.gz);
ページ名: