【新人ブログ ミンガラバー】VHDL初級編 part.2 ~組み込み回路~
ミンガラバー(Mingalaba)!
皆さんこんにちは!シーです。
前回に引き続き、VHDLの基本を説明します!(前回の新人ブログはこちらから)
今回は「組み込み回路」です。早速、始めましょう!
このブログは「FPGA設計ブログ一覧」の
1. コーディング・IP設定・プリミティブ設定 のひとつです。
目次
前回のブログの課題解答
図1は前回のブログの課題解答です。皆様は正解できましたでしょうか?
図 1‐前回の課題解答
わからなかった方は、是非前回のブログを確認してみてください。
Architecture 宣言部分
前回は、Library宣言部分とEntity宣言部分を学びました。
ここまでは、回路の外側の箱を用意するイメージとなりますが、今回学習するArchitecture宣言部分で、回路の中身を作ることになります。
Architecture宣言部分は、
主に
①Component宣言部分
②Signal宣言部分
③回路記述部
から成り立ちます。
今回は、②③を学びます。
※①Component宣言部分については、次回以降でご紹介します。
図 2- Architecture宣言部分
図 3- Architecture 文法
Signal 宣言部分
図 4-Signal宣言部分
Signal 宣言
図 5-Signal文法
図 6-Signal宣言例
※内部ノード信号がレジスタ信号のどちらかになるかはSignal宣言の段階では決まらない。
回路記述部での使い方で決める。
回路記述部
信号代入文①
■ 文法
図 7-信号代入文法
信号接続は、両辺のビット幅を揃えます。
例1:b <= a;
※両辺のビットの幅が揃っている場合、ビット幅を省略できます。
例2:d(3 downto 1) <= c(8 downto 6);
結果は、代入した「101」+元々残った1ビット目のデータ「1」、
「d = 1011」です。
信号代入文②
・信号や演算式を代入する場合
例1:dout <= din + 1; (+‘1’/-‘1’の場合のみ、‘’は省略可。)
例2:C <= not (A and B);
・固定値を直接代入する場合
-1bit値はシングル・クォーテーション
例3:rst <= ‘1’;
-バス値はダブル・クォーテーション
例4:din_F <= “000”;
例5:data__in <= “00000000”;
Process文
図 8-process文
Process文の書式
■ 文法
図 9-process文法
センシティビティ・リスト
図 10-センシティビティ・リスト
process(------)begin
(------)の部分にセンシティビティ・リストを入力します。
上の例の場合は、「c」は、「a」と「b」に対して変わりますので、「a」と「b」はセンシティビティ・リストに入力します。
組み合わせ回路
VHDL設計での演算子の種類
1. 論理演算子(and、or、nand、nor、not、xor)
例:Q <= not A
2.算術演算子(+、-、*、/)
例:Q <= A+B;
3.関係演算子(=、/=、<、<=、>、>=)
文法:
例:q <= ‘1’ when (a=b) else ‘0’;
4.連接演算子(ビットの結合、&)
複数の信号を結合し、新しい信号を作成
例:D (2 downto 0) <= E & F & G;
複雑な組み合わせ回路
演算子、if文、case文を使用して記述
- If文
> 最初の案件が処理された後、次の案件が実行されます。(プライオリティあり)
- Case文
> 値の順番に関係なく全て並列に処理がされます。(プライオリティなし)
> 全てのケースを記述しないと文法エラー
> Others は残り全ての場合という意味(othersに“XXX”と記述し、冗長回路を省略)
If文
図 12-if文法
Case文
図 13-case文法
Case 文の記述例
図 14-case文の記述例
組み合わせ回路記述例(1)
エンコーダ(符号器)
情報を特定のルールで符号化する回路です
例:数字→Seven Segmentに表示
(0~9)の数字を表示するためには、Seven Segmentにどこのsegment はonにしてどこにoffにするかを指定する必要があります。
なので、エンコードするのは 表示したい信号(0~9)からそれによってSeven segmentにon/off する信号(例:0000001, 1001111, ..)にすることです。
図 15-Seven Segmentエンコーダ表例
エンコーダ記述例
図 16-エンコーダ記述表
組み合わせ回路記述例(2)
デコーダ(復号器)
• 特定のルールのもとに符号化された情報を元に戻す回路です。
図 17‐Seven Segmentデコーダ表例
デコーダ記述例
図 18-デコーダ記述例
組み合わせ回路記述例(3)
セレクタ(マルチプレクサ)
‐複数の入力信号のうち1つを選択して出力します。
図 19-セレクタ
セレクタ(マルチプレクサ)記述例
図 20-セレクタ記述例
演習(2):組み合わせ回路演習
今回の演習になります。
これまでの説明を元に是非チャレンジしてみてください。
case文を用いて、以下のデコーダを記述してください。
図 21-組み合わせ回路演習
Vivado® Design Suite の作業手順
作業手順は以下の通りです。
手順1:新規プロジェクトの作成- Vivado® Design Suiteの起動
- 前回の新規プロジェクト作成手順と同じように新規ファイルを作成します。
- 2-1. 新規プロジェクト名 : LAB2
- 2-2. 保存先フォルダ:C:/Home/VHDL(自分で適当にしても構いません)
- 2-3. 新規ファイル名:decode とします。
手順2:作成した decode.vhdファイルが開きます。
※緑色のコードは記述しなくても良いです。
図 22-組み合わせ回路演習1/2
図 23-組み合わせ回路演習2/2
Appendix:VHDL文法チェック
ソースコードに文法エラーがあると、該当箇所がハイライト表示になることや、赤い波線がかかることがあります。カーソルを合わせると、メッセージがポップアップされます。
テキストエディタの表示で判断できるエラーは、わかる範囲で、Vivado® Design Suiteで文法チェック前に修正しておくと効率的です。
図 24-ファイルの編集画面
手順1:
RTLのElaborateを実施します。Open Elaborated Designをクリックします。
確認ダイアログが表示された場合は、OKをクリックします。文法エラーがある場合、エラーメッセージダイアログが表示されます。OKをクリックします。
図 25-Elaborateの実行
手順2:
エラーがあった場合、GUI下部のMessageウインドウに、ファイル名、行数と共に、エラーメッセージが表示されるので、ソースコードを修正します。
図 26-Messageウインドウのエラー表示
手順3:
ソースコードの修正後、ファイル保存します。
ファイルを保存する際、メニューバー : File – Save File Asを選択するか、
又は、 “保存”ボタン をクリックしてください。
図 27-Messageウインドウのエラー表示
手順4:デザインのリロード
ファイルを保存すると、デザインをReloadするか否か、問うメッセージが表示されるので、Reloadをクリックします。エラーが表示されたら、ソースコードを修正し、保存します。
図 28-Elaborate DesignのReloadメッセージ
手順5:文法チェックOK
最後的に以下のように赤いエラーが表示されなくなれば、文法チェックOKとなります。
図 29-Message ウインドウの表示
作業を振り返って
今回の演習を通じて、組み合わせ回路を作成するときに使えるif文とcase文、それぞれの違いが理解できたかと思います。
また、Vivado® Design Suiteを使用した文法のチェック方法も理解できたかと思います。
筆者個人の感想として気を付けなければならない点は、レジスタ設計です。なぜなら、ループ作成時には直接記述ができず、別の信号をカウンターとして作成してから、そのカウンターに対してループを作成する必要があるからです。
次回の演習(3)は「順序回路」です。
最後までお付き合いいただきありがとうございました!
次回もご覧ください。
このブログは「FPGA設計ブログ一覧」の
1. コーディング・IP設定・プリミティブ設定 のひとつです。
これからもTECHブログを通じて、皆様の設計にお役立てできればと思います。 VHDLの使い方、設計に関する問い合わせなどありましたら、ご連絡ください。