ステップバイステップガイド:初めてのFPGA LED点滅設計 パート1:VHDLまたはVerilogでの設計 このチュートリアルでは、ユーザー定義の周波数でLEDを駆動するVHDLおよびVerilogコードの作り方を学びます。ワークフローに合った言語を選んでください。 HDLを書く際は、設計が意図通りに振る舞うか検証する必要があります。間違いは避けられないため、シミュレーションは不可欠です。本チュートリアルは以下の2つの重要なフェーズで構成されます: HDL設計 HDLシミュレーション シミュレーションを省くと、実機デバッグで多大なコストがかかります。シミュレーションを必須のチェックポイ
7セグメントディスプレイの仕組み Digilent製Pmod SSD:Seven-segment Displayに2桁の数字を表示するVHDLモジュールを紹介します。このデュアル7セグメントディスプレイはPmodインターフェース対応で、はんだ付け不要で使用可能。多くのFPGA開発ボードに標準搭載のPmodコネクタに直接挿せます。動作確認にはLattice iCEstick(低コストFPGAボード、Pmodコネクタ搭載)を使用。iCEstickの並列Pmodコネクタをディスプレイ期待の直列プラグに変換する2×6ピン→デュアル6ピンPmodスプリッタケーブルと、USB Type-A延長ケーブル(i
継続的インテグレーション/デリバリーをFPGA開発に適用 継続的インテグレーション(CI)と継続的デリバリー(CD)は、コード変更からデプロイまでのサイクルタイムを短縮するアジャイルソフトウェア開発手法です。自動化によってコード変更を検証し、リリースファイルをビルドすることで、チームはより生産的かつ効率的になれます。ソフトウェア企業は長年継続的開発を実践してきましたが、同じ手法をFPGAプロジェクトにも適用できます。このチュートリアルでは、Jenkins、Xilinx Vivado、Git/GitHub SCM(ソースコード管理)システムを用いて、仮想プライベートサーバ(VPS)上に自動化サー
シミュレーション波形でVHDL変数を確認する方法 Modelsimにはシミュレーション中にVHDL変数を表示する機能がありますが、それが容易ではありません。ModelsimのObjectsウィンドウには変数が一切表示されません。 Modelsim Objectsウィンドウ - 変数なし 変数を有効にするには、まずプロセスを表示させる必要があります。これは、変数を確認したい設計を右クリックし、「Show」→「Processes」にチェックを入れることで行います。 設計内のプロセスを表示する方法 これを行うと、設計の下にプロセス名が表示されるようになります(プロセスにラベルを付けるのが良い理由の一
チュートリアル - 初心者向けModelsimシミュレーション活用法 ModelsimはMentor Graphicsが開発した、VHDLおよびVerilog設計のシミュレーション用プログラムです。ビジネスと教育の両現場で最も広く使用されているシミュレーションツールです。このチュートリアルでは、まずシミュレーションの重要性を説明し、その後、Modelsim Student Editionを個人利用目的で無料入手する方法を紹介します。 シミュレーションはFPGAおよびASIC設計において極めて重要なステップです。設計者は自分の設計を刺激(スタミュレート)し、記述したコードがその刺激にどう反応する
チュートリアル - VHDL入門 VHDLは実に冗長な頭字語です。VHSIC Hardware Description Languageの略で、頭字語の中に頭字語が含まれています。VHSICはVery High Speed Integrated Circuitを意味します。したがって、VHDLを完全に展開するとVery High Speed Integrated Circuit Hardware Description Languageとなります。なんとも長ったらしい名称です。VHDLは、教育機関とビジネスの両方でFPGAとASICの設計に用いられる2大言語の一つです。FPGAやASICに馴染
VHDL(VHSIC Hardware Description Language)は、デジタル集積回路のモデリング、設計、検証に使用される特殊なコンピュータ言語です。JavaやC++のような汎用プログラミング言語とは異なり、VHDLはソフトウェアアプリケーションの構築を目的としていません。代わりに、電子ハードウェアの構造と振る舞いを記述します。 VHDLはイベント駆動型で並列実行をサポートするため、プロセッサやその他のデジタルロジック内部で同時に発生する操作を捉えるのに最適です。そのため、VHDLはCPU、FPGA、ASICになるロジックを指定するために使用できます。 Basic VHDL
VHDLとFPGA設計はコストがかかりがちですが、学生は最先端ツールを無料で利用できます。以下は、業界標準のVHDLシミュレータと軽量フリーエディタという、最も信頼される2つのツールをインストールし、すぐにコーディングとテストを始めるためのステップバイステップガイドです。 1. VHDLシミュレータを選ぶ Siemens EDAのModelSim(旧Mentor Graphics)は、VHDLシミュレーションの業界ベンチマークです。初めてのプロフェッショナルな役割の準備であれ、概念実証であれ、ModelSim(または姉妹製品のQuestaSim)は、実務で期待される幅広い機能と互換性を提供し
新しい言語を学ぶとき、「Hello World!」と表示するのは定番の動作確認です。このメッセージが正しく出力されれば、環境が正しくセットアップされており、言語の核心的な構文を垣間見ることができます。 VHDLはハードウェア記述言語であり、従来のソフトウェア言語ではないため、テキスト表示がどう可能なのか疑問に思うかもしれません。コツは、VHDLコードがシミュレータ内で実行され、デジタル回路をエミュレートし、診断メッセージを画面に出力できる点にあります。このチュートリアルはFPGAやASICハードウェアではなく、言語そのものに焦点を当てています。 本記事は「Basic VHDL Tutori
前回のチュートリアルでは、VHDLプロセスをプログラムスレッドに例え、wait; 文でプロセスを無期限に休止させる方法を学びました。では、プロセスを特定の期間だけ一時停止したい場合はどうすればよいでしょうか? wait; を完全に削除するとコンパイルエラーになります。なぜなら、すべてのVHDLプロセスは無限ループであり、少なくとも1つの wait 文を含まなければならないからです。ループは begin と end process; の間で継続的に実行されます。 本記事は「Basic VHDL Tutorials」シリーズの一部です。 wait; が永遠に停止するのに対し、wait for
前回のチュートリアルでは、wait for 文によるタイミング遅延とプロセスループを扱いました。今度は、コードを一度実行してから特定の条件が満たされるまでブロックを繰り返す、VHDLの核心的な構造である loop 文に焦点を当てます。 プロセスは無限に実行できますが、多くの場合、優雅に抜け出せる制御されたループが必要です。VHDLの loop 文はその最もシンプルな形であり、exit が遭遇するまで終了しません。 シンプルなループの構文 loop -- 文 end loop; 各 exit は、それが存在する最も内側のループを即座に抜け出し、あらゆるループタイプで使用できます。 演
前回のチュートリアルでは、loop 文で無限ループを作り、exit で抜ける方法を学びました。では、ループを特定の回数だけ回したい場合はどうすればよいでしょうか?Forループ が最もシンプルな解決策です。 Forループは、整数や列挙値の固定範囲を反復します。現在の反復値は、暗黙的に宣言される定数としてループ内で自動的に利用できます。 本記事は「Basic VHDL Tutorials」シリーズの一部です。 構文 for <constant> in <range> loop -- ループ本体 end loop; <constant> はループカウン
前回の for ループの探求に続き、今回は while ループに焦点を当てます。これは、事前に決まった範囲ではなく、動的な条件に基づいて反復を制御できる強力な構造です。 while ループは、指定された条件が true である限り、その本体を繰り返し実行します。これにより、反復回数が実行時のデータや複雑なロジックに依存するシナリオに最適です。 本記事は「Basic VHDL Tutorials」シリーズの一部です。 構文 while <condition> loop -- ループ本体 end loop; <condition> はブール値に評価される必要があ
VHDL基礎力を試す:インタラクティブクイズ Part 1 Basic VHDL Tutorialシリーズの第1章を完了おめでとうございます!このクイズで知識を確認しましょう。各問題は重要概念の定着と、VHDLエキスパートへの進捗を測るために設計されています。 1. このプロセスの何が間違っているか? Wait文が含まれていない process is の後にセミコロンが欠けている プロセスに入力がない - 続行 >> 2. i の値が何回表示されるか? 無限回 0回 1回 - 続行 >> 3. このプロセスは Haha! を何回
前回のチュートリアルでは、プロセス内で変数を宣言する方法を学びました。変数はローカルなアルゴリズム処理に適していますが、そのプロセスの外からは見えません。設計の他の部分と値を共有する必要があるときは 信号(signal) を使います。 信号はアーキテクチャの宣言領域、すなわち architecture <architecture_name> of <entity_name> is と begin キーワードの間で宣言します。 本記事は「Basic VHDL Tutorials」シリーズの一部です。 信号宣言の構文:signal <name> : <
前回のチュートリアルでは、VHDLにおける信号と変数の違いを学び、信号はプロセスを超えてスコープを持つのに対し、変数は単一プロセス内に限定されることを確認しました。次の疑問は、複数のプロセスを信号でどう連携させるかです。 おなじみの wait;(無限待機)と wait for(時間指定待機)に加え、VHDLにはイベント駆動の同期に使える2つの強力な文があります:Wait On と Wait Until。これらは wait for と組み合わせて、より洗練された制御フローを作れます。 Wait On wait on 文は、リストアップされた信号のいずれかが値を変えるまでプロセスを休止させます
前回のチュートリアルでは、wait until 文と条件式を組み合わせて、2つのカウンタ信号が一致したときだけプロセスを起動する方法を学びました。では、入力値に応じて異なるアクションを取らせたい場合はどうすればよいでしょうか? If-Then-Elsif-Else 構文を使えば、ロジックを分岐させられます。変数の値や式の評価結果に応じて、プログラムは異なるパスをたどります。 本記事は「Basic VHDL Tutorials」シリーズの一部です。 基本構文 if <condition> then elsif <condition> then else end if
感度リストとは 実用レベルのVHDLでは、プロセスは通常 wait 文ではなく 感度リスト(sensitivity list) によって駆動されます。感度リストは、プロセスを再開(ウェイクアップ)させるべきすべての信号を列挙します。 シミュレーションと合成の違い wait on や wait until はシミュレーションでは便利ですが、合成可能なRTLではほとんど使用されません。合成ツールは wait 文を無視することが多く、予期しないハードウェアが生成される原因になります。一方、感度リストは組み合わせ回路またはクロック同期ブロックに直接マッピングされるため、合成ツールが確実に実装できま
VHDLにおいて、std_logic型は物理ワイヤ上の単一ビットを表現する基盤です。以前のチュートリアルで使用したプレーンなinteger型とは異なり、std_logicは現実のデジタル信号振る舞いをより正確にモデル化する豊富な値セットを提供します。 デジタルピンは通常ロジックハイ(1)またはロジックロー(0)を持ちますが、物理信号はハイインピーダンス、弱、未定義状態も取り得ます。std_logic型はこれらすべての可能性を網羅し、VHDL設計で最も頻繁に使用される型です。 この記事はBasic VHDL Tutorialsシリーズの一部です。 std_logicシグナルが取り得る全値のリスト
std_logic_vector型は、VHDLで信号バスを定義する標準的な方法です。std_logicが単一ワイヤの状態をモデル化するのに対し、std_logic_vectorはそれをワイヤの配列に拡張し、マルチビットバスの表現を可能にします。 単一ビットのstd_logicとは異なり、std_logic_vectorは複合型であり、std_logic要素のインデックス付きコレクションです。任意のビット数を保持でき、マルチビットデータをやり取りするコンポーネント接続に最適です。 このブログ記事はBasic VHDL Tutorialsシリーズの一部です。 std_logic_vectorシグナ
VHDL