CPLDの設計するための開発言語( HDL:Hardware Description Language )にはいくつかの種類があります。
ABEL-HDL、VerilogHDL、VHDLなどが代表的なものです。WebPACKのソフトウェアではこれらの言語のいずれでも使用できます。 私は記述が比較的容易であり、現在の主流であるVHDLを使うことにしました。 VHDLのフルスペルは"Very high speed integrated circuit Hardware Description Language"です。 ここに紹介する言語仕様はVHDLのほんの一部です。 詳しく知りたい方は専門書を見て下さい。 私は以下の本を参考にしました。 「VHDLによるハードウェア設計入門」 CQ出版 長谷川裕恭 著 ISBN4-7898-3287-2 A5判 236頁 定価2,345円(税込) 価格は2000年6月時点のものです。 以下にVHDLの基本構文を説明します。 実際にはもっと複雑で、奥が深いものです。ここで紹介する内容はほんの一部です。 記載している内容はXilinx Project Navigatorでの記述方法も含まれています。他のツールでは違う記述のものもあるかもしれません。 VHDLの基本構文
エンティティーでは設計する回路ブロックの入力条件(ポート宣言)とかビット長などのパラメータ(ジェネリック宣言)を定義します。 アーキテクチャーでは設計する回路ブロックの中身を記述します。
青い文字の部分はVHDLで規定されている書式の文字を示しています。 大文字、小文字の区別はありません。
コメントは1行のみに有効で、次の行もコメントにするためには先頭に(--)を付ける必要があります。 Xilinx Project Navigatorでは日本語は使えません。
ライブラリ文( library )
この宣言ではIEEEで規定されている標準ロジックの宣言の読み込みを指定します。 いろいろな宣言がありますが、以下の2行を宣言すれば大部分はOKのようです。
上記はIEEEのSTD_LOGIC_1164で規定されている定義を全て読み込むということになります。 Xilinx Project Navigator を使用している場合には新規にソースファイルを作成した時点でこれらの宣言文が既に書かれています。複雑な回路を設計する場合にはもっと多くの宣言をする必要があります。 処理の中で算術演算を使う場合にはSTD_LOGIC_UNSIGNEDを指定する必要があります。 use ieee.std_logic_unsigned.all; エンティティー文( entity )
Entityの終了にはendを書きます。endの後のentity名は省略できます。 ここではポート宣言と属性宣言のみを説明します。 ポート宣言 ( port )
構文
例1
attribute LOC of object_list : object_type is "function_block_name"; attribute KEEP of object_list : object_type is "TRUE"; attribute DONT_OPTIMIZE of object_list : object_type is "TRUE"; attribute FAST | SLOW of object_list : object_type is "TRUE"; attribute BUFG of object_list : object_type is "CLK" | "OE" | "SR"; attribute INIT of object_list : object_type is "S" | "R"; attribute PWR_MODE of object_list : object_type is "LOW" | "STD"; attribute REG of object_list : object_type is "CE" | "TFF"; attribute TNM of object_list : object_type is "string";
ピン配置指定の属性宣言例を以下に示します。 ポート名称( object )は事前にポート宣言で指定されている必要があります。 例 A、B、Yポートをそれぞれ1、2、3番ピンにアサインした例
フィッティング結果のピン配置
アーキテクチャー文( architecture )
非常に多くの規定があり、ここではとても全ては書けません。基本的な部分のみを記載します。 構文
:スペース endの後のアーキテクチャー名は省略することができます。 宣言文 宣言文にはsignal宣言、component宣言などが書かれます。以下にsignal宣言のみ紹介します。
signal宣言は内部で使用する信号を定義します。 例
処理文 処理文では以下のような処理文を書くことができます。
プロセス文の構文
以下ではプロセス文で使用する if 文および case 文について説明します。 IF 文
3 to 8 Demultiplexer ( 74138 相当 )
上記の記述は3ビットのバイナリ入力を8つの出力に展開するデコーダ回路です。74138というデコーダICと同じ機能です。
これを作るだけなら74138を使用した方が経済的です。練習のために作ってみました。 以下にこの記述でのいくつかのポイントを説明します。
|