VHDL デザインの大部分は、クロック ロジックを使用しています。 、同期ロジックとも呼ばれます またはシーケンシャル ロジック .クロックされたプロセスは、他の入力信号が変化したときではなく、マスター クロック信号によってのみトリガーされます。 クロック ロジックの基本的なビルディング ブロックは、フリップフロップと呼ばれるコンポーネントです。 .これにはさまざまなバリエーションがあり、このチュートリアルでは、ネガティブ リセットを備えたポジティブ エッジ トリガー フリップフロップに焦点を当てます。 フリップフロップはサンプルアンドホールド回路です。つまり、クロック信号の立ち上が
基本的な VHDL チュートリアル シリーズのチュートリアル 12 ~ 17 を完了した後、この VHDL クイズで進捗状況をテストしてください! 署名された型について正しいステートメントはどれですか? できるunsigned 型よりも高い値を表す 左端のビットは 1 で、値は負でなければなりません オーバーフローは実行時エラー 正しい!違う! - この並行プロセスに相当するものはどれですか? 正しい!違う! - このコードを実行した後の Output の値は? 0000 0001 UUUU
以前のチュートリアルでは、wait for を使用しました シミュレーションで時間を遅らせるステートメント。しかし、生産モジュールはどうですか? wait for ステートメントはそのために使用できません。回路内の電子に特定の時間一時停止するように指示することはできないため、これはシミュレーションでのみ機能します。では、設計モジュールで時間を追跡するにはどうすればよいでしょうか? 答えは単純にクロック サイクルをカウントすることです。すべてのデジタル設計は、既知の固定周波数で発振するクロック信号にアクセスできます。したがって、クロック周波数が 100 MHz であることがわかっている場合、1
プロシージャは、コードの繰り返しを避けるのに役立つ VHDL のサブプログラムの一種です。場合によっては、設計全体のいくつかの場所で同じ操作を実行する必要が生じることがあります。モジュールの作成はマイナーな操作にはやり過ぎかもしれませんが、多くの場合、手順が必要です。 プロシージャは、任意の宣言領域内で宣言できます。プロシージャのスコープは、宣言されている場所、アーキテクチャ、パッケージ、またはプロセスに限定されます。プロシージャを呼び出すたびに、プロシージャのコードが呼び出された場所に挿入されたように動作します。 プロシージャは関数のように値を返しませんが、out を宣言することで値を返
有限状態マシン (FSM) は、出力が入力の現在の状態だけでなく、過去の入力値と出力値にも依存するメカニズムです。 VHDL である種の時間依存アルゴリズムを作成する必要がある場合、または FPGA にコンピューター プログラムを実装する際の問題に直面した場合、通常は FSM を使用して解決できます。 VHDL のステート マシンは、ステート信号の値によって出力が制御されるクロック プロセスです。状態信号は、前の反復で何が起こったかの内部メモリとして機能します。 このブログ投稿は、基本的な VHDL チュートリアル シリーズの一部です。 この交差点の信号機の状態を考えてみましょう:
関数は、頻繁に使用されるアルゴリズムを実装するために使用できる VHDL のサブプログラムです。関数は 0 個以上の入力値を取り、常に値を返します。戻り値に加えて、プロシージャと関数を区別するのは、Wait ステートメントを含めることができないことです。これは、関数が消費するシミュレーション時間が常にゼロであることを意味します。 他のプログラミング言語の関数やメソッドに精通している場合、VHDL 関数は簡単に理解できるはずです。 VHDL では、戻り値を省略したり void を返したりすることはできません。関数は常に何かを返す必要があり、戻り値を何かに割り当てる必要があります。 このブログ
不純な関数は、そのスコープ内の任意のシグナルを読み書きできます。また、パラメーター リストにないシグナルも読み書きできます。関数には副作用があると言います . 副作用とは、関数が同じパラメーターで呼び出されるたびに同じ値を返すことが保証されていないことを意味します。関数がパラメーター リストにないシグナルを読み取ることができる場合、戻り値はこれらのシャドウ パラメーターにも依存する可能性があります。また、関数は戻り値から割り当てられていない外部シグナルを変更している可能性があります。 このブログ投稿は、基本的な VHDL チュートリアル シリーズの一部です。 通常の純粋な関数を宣言でき
プロシージャから外部信号を駆動することができます。シグナルがプロシージャのスコープ内にある限り、パラメーター リストに記載されていなくても、読み取りまたは書き込みのためにアクセスできます。 アーキテクチャの宣言領域で宣言されたプロシージャは、外部信号を駆動できません。これは、コンパイル時にスコープにシグナルがないためです。一方、プロセス内で宣言されたプロシージャは、プロセスが認識できるすべてのシグナルにアクセスできます。 このブログ投稿は、基本的な VHDL チュートリアル シリーズの一部です。 このような手順は、同じ操作が複数回発生するプロセスでアルゴリズムを整理するために使用できま
基本的な VHDL チュートリアル シリーズのパート 4 を完了したら、この VHDL クイズで進捗状況をテストしてください! VHDL でリアルタイムを測定するにはどうすればよいですか? を使用して「1 ns 待つ」ステートメント カウントによるクロック周期 悪用する伝搬遅延 正しい!違う! - プロシージャに Wait ステートメントを含めることはできません 手順パラメーター常に入力です 使用時プロシージャでは、return キーワードは値なしである必要があります 正しい!違う! - この火器管制システムの根本的な欠陥を説明しているのはどれで
連結リストは動的データ構造です。リンクされたリストは、要素の総数が事前にわからない場合に使用できます。含まれるアイテムの数に応じて、メモリ内で拡大および縮小します。 リンク リストは、オブジェクト指向プログラミング言語のクラスを使用して実装するのが最も便利です。 VHDL には、実装の複雑さをユーザーから抽象化するために使用できるオブジェクト指向の機能がいくつかあります。 この記事では、VHDL でリンク リストを実装するために、アクセス タイプ、レコード、および保護されたタイプを使用します。すべてのリンク リスト コードを記述する新しい VHDL パッケージを作成します。 パッケージ
セルフチェック テストベンチは、オペレータが出力を手動で検査することに依存せずに、被試験デバイス (DUT) の正確性を検証する VHDL プログラムです。セルフチェック テストベンチは完全に単独で実行され、最後に「OK」または「失敗」メッセージを出力します。 すべての VHDL モジュールには、関連付けられたセルフチェック テストベンチが必要です。すべてのモジュールが意図した動作をしていることをいつでも確認できることが重要です。たとえば、DUT、サブモジュール、またはインターフェイス モジュールに変更を加える場合です。壊れる可能性があることは誰もが知っています。これらの問題を検出するための
対話型テストベンチは、テストベンチの実行中にオペレータが被試験デバイス (DUT) への入力を提供するシミュレータ セットアップです。ほとんどの場合、これはシミュレータ コンソールにコマンドを入力して DUT に刺激を与えることを意味します。 常にセルフチェック テストベンチを作成する必要がありますが、対話型テストベンチは優れた補足になります。セルフチェック テストベンチのコードを変更するよりも、インタラクティブなテストベンチを使用してアドホック テストを実行する方が簡単です。 多くの場合、テストベンチで試してみたい問題がラボで見つかります。インタラクティブなテストベンチを使用すると、観察
循環バッファーは、シーケンシャル プログラミング言語でキューを作成するための一般的な構造ですが、ハードウェアに実装することもできます。この記事では、ブロック RAM に FIFO を実装するために、VHDL でリング バッファーを作成します。 FIFO を実装する際には、多くの設計上の決定を行う必要があります。どのようなインターフェースが必要ですか?リソースによって制限されていますか?オーバーリードとオーバーライトに対する回復力が必要ですか?遅延は許容範囲ですか?これらは、FIFO の作成を依頼されたときに頭に浮かんだ質問の一部です。 無料の FIFO インプリメンテーションがオンラインで
制約付きランダム検証は、テスト対象デバイス (DUT) の疑似ランダム トランザクションの生成に依存するテストベンチ戦略です。目標は、DUT とのランダムな相互作用を通じて、多数の定義済みイベントの機能範囲に到達することです。 Open Source VHDL Verification Methodology (OSVVM) は、制約付きランダム テストベンチを作成するための便利なパッケージを多数含む無料の VHDL ライブラリです。この記事で使用する RandomPkg と CoveragePck に特に関心があります。このライブラリの機能の詳細については、OSVVM GitHub ページ
過去 6 か月間取り組んできた VHDL と FPGA のコースが完成し始めたことを発表できることを嬉しく思います。このコースは現在ベータ版で、今年の秋に初めて開始する予定です。 FPGA コースの対象者は? FPGA コースは、他のプログラミング言語の知識はあるが、VHDL と FPGA は初めての開発者を対象としています。このコースでは、初級または中級レベルから、高度な VHDL コーディング構造を理解して使用できるようになります。 このコースは、FPGA 開発を任されたプロのソフトウェア エンジニアに最適です。ハードウェア設計に興味があり、FPGA 開発への転職を考えている学生やフリ
AXI モジュールにインターフェイスするためのロジックを初めて作成しなければならなかったとき、AXI インターフェイスの特殊性に少し悩まされました。通常のビジー/有効、フル/有効、またはエンプティ/有効の制御信号の代わりに、AXI インターフェイスは「ready」と「valid」という名前の 2 つの制御信号を使用します。私の欲求不満はすぐに畏敬の念に変わりました. AXI インターフェイスには、追加の制御信号を使用しないビルトイン フロー制御があります。ルールは簡単に理解できますが、FPGA に AXI インターフェイスを実装する際に考慮しなければならない落とし穴がいくつかあります。この記
ブロック RAM に初期値を設定する便利な方法は、ASCII ファイルから 2 進数または 16 進数のリテラルを読み取ることです。これは、VHDL で ROM (読み取り専用メモリ) を作成する良い方法でもあります。結局のところ、FPGA では RAM と ROM は同じものであり、ROM は読み取り専用の RAM です。 この記事全体の例では、次の定数と RAM タイプが VHDL ファイルの宣言領域の先頭で宣言されていることを前提としています。 constant ram_depth : natural := 256;constant ram_width : natural := 32;
ファイルから信号値を読み取ることは、デバイス オン テスト (DUT) の刺激を生成する別の方法です。テストベンチのシーケンスとタイミングは、VHDL テストベンチによって 1 行ずつ読み込まれるスティミュラス ファイルにハードコードされています。これにより、テスト オブジェクトに供給したい波形のパターンを簡単に変更できます。 場合によっては、DUT に実行させたい非常に特殊なテスト パターンまたは一連のイベントがある場合があります。これを実現するには、ASCII ファイルで、各信号が持つべき信号値と、信号が変化する相対的なシミュレーション時間を指定します。このような戦略における VHDL
画像ファイルをビットマップ形式に変換すると、VHDL を使用して画像を読み取る最も簡単な方法になります。 BMP ラスター グラフィック イメージ ファイル形式のサポートは、Microsoft Windows オペレーティング システムに組み込まれています。これにより、BMP は VHDL テストベンチで使用する写真を保存するのに適した画像形式になります。 この記事では、BMP などのバイナリ イメージ ファイルを読み取り、そのデータをシミュレーターの動的メモリに格納する方法を学習します。画像をグレースケールに変換するための画像処理モジュールの例を使用します。これが被試験デバイス (DUT)
このビデオは、FPGA とプログラマブル ロジック テクノロジに関する紹介プレゼンテーションです。この 45 分間の講演は、2019 年 11 月 19 日にタイのバンコクで開催された 7 Peaks Software 主催のイベントで行いました。 プレゼンテーションのハイライトは次のとおりです。 05:07 FPGA を使用しているのは誰? 09:06 FPGA とは? 12:13 静的 RAM を使用して論理ゲートをエミュレートする方法 17:47 一般的な FPGA プリミティブ 19:51 最も安価で最も高価な FPGA 20:53 FPGA のフロアプラン 24:30 VHDL
VHDL