SFL例題/第7回
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[SFL例題]]
*プライオリティエンコーダの設計 [#x5d1e972]
3入力1出力のプライオリティエンコーダを設計する。
----
#contents
**ダウンロード [#w3c33f42]
&ref(sample07.tar.gz);
**覚えること [#o3ae8601]
-優先度付きの条件によって違う動作をさせる方法
***alt の使用方法 [#i4e4942f]
プライオリティエンコーダは、入力信号 in1, in2, in3 によって、出力する値を変更している。~
それぞれの信号名に付いている番号の値をoutに出力させるのだが、同時に複数の信号が1になっているとき、~
in1の優先度が最も高く、in3の優先度が最も低いこととする。~
~
このように優先度を付けるような条件別の動作をさせる回路は alt 構文を使用して実現することが出来る。~
alt {
in1 : out = 0x1;
in2 : out = 0x2;
in3 : out = 0x3;
else : out = 0x0;
}
このような書き方では、alt 構文の中で : の左辺の式を満たす条件の中で一番上に書かれているものが~
優先的に実行されるような回路機能を与えることが出来る。~
~
よって alt 構文を使用すると、必ず1つだけの動作が行われる。~
~
もしも、全ての条件に当てはまらないときは、any 構文と同様に else に書かれた式を実行する。
**例題 [#w877ba7f]
3入力1出力のプライオリティエンコーダを設計する。in1が最も優先度が高く、in3が最も優先度が低い。~
それぞれの信号に対する出力の対応は以下の真理値表を参考。
***真理値表 [#o99ae2ac]
|in1|in2|in3|out|
|1|*|*|0x1|
|0|1|*|0x2|
|0|0|1|0x3|
|0|0|0|0x0|
**サンプルソース [#s8e9bafe]
プライオリティエンコーダは以下のように記述できます。
module p_enc {
instrin do;
input in1;
input in2;
input in3;
output out<4>;
instruct do par {
/* 優先度付き条件別動作ブロック */
alt {
in1 : out = 0x1;
in2 : out = 0x2;
in3 : out = 0x3;
else : out = 0x0; /* 上記の条件に当てはまらないとき */
}
}
}
**シミュレーション [#b46dcbb6]
+[[ダウンロード>#w3c33f42]]にあるsample07.tar.gzをダウンロードする。
--解凍方法は
% tar zxvf sample07.tar.gz
+sample07ディレクトリに移って、以下のファイルがあることを確認し、
--Makefile
--p_enc.sfl
--p_enc.sim
% make sim
+結果は以下のようになる。
in1:1 in2:1 in3:1 out:0001
in1:0 in2:1 in3:1 out:0010
in1:0 in2:0 in3:1 out:0011
in1:1 in2:0 in3:1 out:0001
in1:0 in2:0 in3:0 out:0000
終了行:
[[SFL例題]]
*プライオリティエンコーダの設計 [#x5d1e972]
3入力1出力のプライオリティエンコーダを設計する。
----
#contents
**ダウンロード [#w3c33f42]
&ref(sample07.tar.gz);
**覚えること [#o3ae8601]
-優先度付きの条件によって違う動作をさせる方法
***alt の使用方法 [#i4e4942f]
プライオリティエンコーダは、入力信号 in1, in2, in3 によって、出力する値を変更している。~
それぞれの信号名に付いている番号の値をoutに出力させるのだが、同時に複数の信号が1になっているとき、~
in1の優先度が最も高く、in3の優先度が最も低いこととする。~
~
このように優先度を付けるような条件別の動作をさせる回路は alt 構文を使用して実現することが出来る。~
alt {
in1 : out = 0x1;
in2 : out = 0x2;
in3 : out = 0x3;
else : out = 0x0;
}
このような書き方では、alt 構文の中で : の左辺の式を満たす条件の中で一番上に書かれているものが~
優先的に実行されるような回路機能を与えることが出来る。~
~
よって alt 構文を使用すると、必ず1つだけの動作が行われる。~
~
もしも、全ての条件に当てはまらないときは、any 構文と同様に else に書かれた式を実行する。
**例題 [#w877ba7f]
3入力1出力のプライオリティエンコーダを設計する。in1が最も優先度が高く、in3が最も優先度が低い。~
それぞれの信号に対する出力の対応は以下の真理値表を参考。
***真理値表 [#o99ae2ac]
|in1|in2|in3|out|
|1|*|*|0x1|
|0|1|*|0x2|
|0|0|1|0x3|
|0|0|0|0x0|
**サンプルソース [#s8e9bafe]
プライオリティエンコーダは以下のように記述できます。
module p_enc {
instrin do;
input in1;
input in2;
input in3;
output out<4>;
instruct do par {
/* 優先度付き条件別動作ブロック */
alt {
in1 : out = 0x1;
in2 : out = 0x2;
in3 : out = 0x3;
else : out = 0x0; /* 上記の条件に当てはまらないとき */
}
}
}
**シミュレーション [#b46dcbb6]
+[[ダウンロード>#w3c33f42]]にあるsample07.tar.gzをダウンロードする。
--解凍方法は
% tar zxvf sample07.tar.gz
+sample07ディレクトリに移って、以下のファイルがあることを確認し、
--Makefile
--p_enc.sfl
--p_enc.sim
% make sim
+結果は以下のようになる。
in1:1 in2:1 in3:1 out:0001
in1:0 in2:1 in3:1 out:0010
in1:0 in2:0 in3:1 out:0011
in1:1 in2:0 in3:1 out:0001
in1:0 in2:0 in3:0 out:0000
ページ名: