目次
前
次
VHDLデコーダ記述作成(AWK)
VHDLを利用して、CPLD/FPGA内部にデジタル回路の
中で、デコーダを記述します。
デコーダは、M入力N出力の単純なテーブル変換
を扱う回路なので、エディタでVHDLコードを入力
するのは、非効率です。スクリプト利用で、作業
時間を短くすべきでしょう。
例で利用したのは、74シリーズの139で
次の真理値表を実現する回路。
(左が入力、右が出力)
これをAWKでVHDLコードに変換します。
テキストファイルに、必要なデータを
書き込んでおきます。
- 000 1110 iCNT
- 001 1101 iCNT
- 010 1011 iCNT
- 011 0011 iCNT
フィールドの並べ替えと文字列を付加する
ように、スクリプトを作成します。
BEGIN {
printf("iDEC <= ");
}
{
printf("\"%s\" when ( %s = \"%s\" ) else \n",$2,$3,$1);
}
END {
printf("(others => '1');\n");
}
I/Oリダイレクトでテキストファイルに
入れておきます。
テキストファイルが出来てしまえば、エディタで
見やすいように清書や信号名の付替えをします。
iDEC <= "1110" when ( iCNT = "000" ) else
"1101" when ( iCNT = "001" ) else
"1011" when ( iCNT = "010" ) else
"0111" when ( iCNT = "011" ) else
"1111" ;
他に使った実例を、ひとつ紹介します。
東西と南北に配置された、信号機の動作を
エミュレートするため、ステートマシンの
出力で、点灯ランプを変える場合の対応は
次のようになります。
0000 001001 iDin
0001 001001 iDin
0011 100001 iDin
0111 010001 iDin
1111 001001 iDin
1110 001100 iDin
1100 001010 iDin
1000 001001 iDin
これでデコード出力を扱うと、以下となります。
I/Oリダイレクトでテキストファイルに格納し
エディタで少し修正しておきます。
iDEC <= "001001" when ( iDin = "0000" ) else
"001001" when ( iDin = "0001" ) else
"100001" when ( iDin = "0011" ) else
"010001" when ( iDin = "0111" ) else
"001001" when ( iDin = "1111" ) else
"001100" when ( iDin = "1110" ) else
"001010" when ( iDin = "1100" ) else
"001001" when ( iDin = "1000" ) else
"001001" ;
スクリプトを一度定義しておけば、入力情報を
変えて、いろいろな場面に対応できます。
Copy and Pasteによる変更よりも、時間が短く
すむので、設計に集中できます。
目次
前
次