VHDLには組み込みの疑似乱数生成器が含まれており、[0, 1]区間の浮動小数点値を生成します。これらの値をスケーリングおよびオフセットすることで、実数、整数、std_logic_vector、時間など、テストベンチに適した任意の型の乱数データを作成できます。以下のガイドでは、IEEE MATH_REALパッケージのuniform手順を使用してこれらの生成器を構築する方法と、より高い柔軟性のためにOSVVM Randomパッケージを活用する方法を示します。 以下の例の基礎となるuniform手順は、IEEE MATH_REALパッケージで定義されています: procedure UNIFOR
パルス幅変調(PWM)は、デジタルFPGAピンを強力なアナログ・コントローラに変えます。高速で電源をオン/オフ切り替えることで、真のアナログ電圧を生成せずに、負荷が必要とする正確な平均電流を供給します。 典型的なPWM用途には、スピーカー用音声出力、LED調光、サーボ・モーター、PCファン、ポンプ、電気自動車用ブラシレスDCモーターなどの誘導モーターのトルク制御があります。 関連記事: FPGAピンからのPWMを使ったRCサーボ・コントローラ PWMの仕組み 電源を高周波で100%と0%の間で切り替えると、負荷が見る時間平均電流は、電源がオンである時間の割合に比例します。以下の図がこの原
ここ数年で購入した多くのガジェットが、LED点滅から「LED呼吸」に移行していることに気づきました。ほとんどの電子機器にはステータスLEDがあり、その振る舞いでデバイス内部の状態がわかります。 私の電動歯ブラシは充電が必要になるとLEDを点滅させ、携帯電話は様々な理由でLEDを使って注意を促します。しかし、昔のようにLEDが単純に点滅することはありません。連続的に強度が変化するアナログ的なパルス効果です。 以下のGIFアニメーションは、私のLogitechマウスがバッテリー充電中であることを示すためにこの効果を使用している様子です。光強度パターンが人間の呼吸サイクルと速度・加速度の面で似て
VHDLテストベンチが意図した実行の末尾に達したとき、シミュレーターをクリーンに停止し、可能であれば呼び出しスクリプトに制御を返したいはずです。この記事では、主要なVHDLシミュレーターでシミュレーションを停止する最も一般的で信頼性の高い手法を、ModelSim、Vivado、Tclスクリプトのコード例とともに紹介します。 1. finishプロシージャの使用(VHDL-2008) std.envパッケージのfinishルーチンは、エラーなく完了したテストベンチを終了させる最も直接的な方法です。テストベンチのみをVHDL-2008でコンパイルすればよく、RTLは従来の標準のままでも構いません
ほとんどのVHDLシミュレーターは、Tool Command Language(Tcl)を主要なスクリプト・インターフェースとして公開しています。シミュレーター・コンソールでコマンドを入力するとき、あなたはTclを使用しており、VHDL設計を駆動・監視するスクリプトを書くこともできます。 この記事では、シンプルなコード・ロック・モジュールの振る舞いを、VHDLではなくTclを使って検証する自己チェック型テストベンチの構築手順を説明します。その結果、VHDLを再コンパイルせずに実行、変更、再利用可能な明確で保守しやすいテスト・ハーネスが得られます。 関連記事: Tclを学ぶ必要がある理由
ラジコン(RC)サーボは、ホビー用航空機、車、ボートの心臓部です。リモート無線コマンドを精密な角度位置に変換します。RCシステムは数十年前から存在するため、業界標準インターフェースは純粋なデジタル・プロトコルではなくパルス幅変調(PWM)です。FPGAが提供する決定論的なタイミングを使えば、高精度PWMの実装は簡単です。この記事では、シミュレーション・テストベンチとLattice iCEstick FPGAボードでの実機実装を含む、汎用VHDLサーボ・コントローラを解説します。 RCサーボ用PWM制御の仕組み PWMの基礎は別途説明されていますが、RCサーボには少し異なるアプローチが必要です
VHDLのgenerate文を使用すると、設計者はコード・ブロックを複数のインスタンスに自動的に複製でき、それぞれが異なる信号に接続されます。これは、プロセスやインスタンスを連鎖させて作成できるコンパイル時のforループと考えると分かりやすく、定型コードを大幅に削減し、保守性を向上させます。 従来のループがプロセスやサブプログラム内に限定されるのに対し、generateはアーキテクチャ領域に直接記述されます。ジェネリックと組み合わせると、高度に設定可能で再利用可能なVHDLコンポーネントを作る強力なメカニズムになります。 ジェネレート文の構文 [label :] for <const
VHDLにおけるテキスト文字列は、一般的に固定長の文字配列に限定されます。これはハードウェアを記述する言語として当然のことで、可変長文字列には動的メモリが必要になるためです。 文字列の配列を定義するには、格納したい最大文字列数分の領域をコンパイル時に確保する必要があります。さらに悪いことに、文字列の最大長を決めて、すべての要素をその文字数にパディングしなければなりません。以下のコードは、そのような構造の使用例です。 type arr_type is array (0 to 3) of string(1 to 10); signal arr : arr_type; begin arr(0)
このチュートリアルでは、Xilinx Vivadoの統合ロジック・アナライザ(ILA)とバーチャル入出力(VIO)コアを使用して、VHDL設計をオンチップでデバッグおよび監視する方法を説明します。この記事を読み終える頃には、外部機器を使わずにプローブの挿入、トリガーの設定、正確な信号動作の取得ができるようになります。 概要 この記事ではVivadoのスクリーンショットを参照しています。各画像をクリックすると拡大表示されます。 サイドバーまたはモバイル用のポップアップナビゲーションを使用して、目的のセクションに素早くアクセスできます。 ILAとVIO ILA IPを使用すると、内部FPGA信
安全クリティカルなFPGAアプリケーション向けVHDL設計において、単にテストベンチを書くだけでは不十分です。エンジニアは、隠れた副作用のない、仕様通りの正確な振る舞いをモジュールがすることを証明する必要があります。形式的検証がその数学的保証を提供します。 形式的検証は、要件と実装のギャップを、すべての可能な入力シーケンスが設計のプロパティを満たすことを証明することで埋めます。医療機器、航空電子システム、DO-254認証が必要なあらゆる分野での認証に不可欠です。 このゲスト投稿では、経験豊富な形式的検証実践者であるMichael Finn Jørgensen氏が、実践的な洞察と実用的なヒントを
VUnitは、Pythonテストスイートランナーと専用VHDLライブラリを組み合わせた主要なオープンソースVHDL検証フレームワークです。これらが連携してテストベンチのコンパイル、実行、結果レポートを自動化し、エンジニアがテスト駆動開発サイクルを実践できるようにします。 このチュートリアルでは、VHDLwhizの作者Ahmadmunthar Zaklouta氏が、インストールと設定からテストベンチ作成、テストケース記述、ModelSimでの実行まで、VUnitワークフロー全体を解説します。すぐに実行可能なサンプルプロジェクトもダウンロード可能です。 概要 サイドバーまたはモバイルナビゲーション
VHDLシミュレーションでQuartus IPコアをVUnit検証フレームワークを通じて実行したいと思ったことはありませんか? FPGAエンジニアのKonstantinos Paraskevopoulos氏がまさにそれを考えていましたが、適切なチュートリアルが見つかりませんでした。幸い、彼は自身の才能で解決方法を見つけ、VHDLwhizを通じてこのゲスト記事として共有してくれました。 Konstantinos氏に語っていただきましょう! VUnitでシステムをシミュレートする際、Quartus IPカタログから事前定義されたIPを設計に組み込みたいケースはよくあります。このチュートリアルでは、
VHDLにおいて、変数はC言語の変数と同様に振る舞います:代入後即座に値が利用可能になり、次の代入まで変わりません。これにより、プロセス内での一時格納や手続き的計算に最適です。 VHDL変数使用の主要ルール 変数は宣言されたプロセス内に限定される。 各プロセスは独自の変数セットを持ち、プロセス間で共有できない。 processキーワードとbeginキーワードの間で宣言する。 代入には:=演算子を使用。 一度代入されると、変数は即座に新しい値を保持し、同じプロセス内の後続文で利用可能。 最後のポイント—即時代入—がしばしば混乱の元です。以下は、変数を使って2つの信号を連結し、case文を駆動
デジタル設計者はFPGAやASIC内部で精密な算術演算に依存します。核心概念はVHDLにおけるsigned(符号付き)とunsigned(無符号)データ型の区別です。 両型はIEEEライブラリのnumeric_stdパッケージで定義されます。多くの設計者がまだstd_logic_arithを使っていますが、このパッケージはIEEE標準ではなく、本番設計での使用は推奨されません。 VHDLでは、signed信号は2の補数として解釈され、正負両方の値を表せます。unsigned信号は非負値のみ表現します。内部的には、FPGAは宣言した型に関わらず、すべてのビットベクトルに2の補数を使用します。
VHDLにおいてレコードは、C言語の構造体のように設計を効率化する強力な機能です。関連する信号を単一の型にグループ化することで、コード重複を大幅に削減し、可読性を高め、複数エンティティ間のポート マップをシンプルにできます。 レコードは、オフチップ メモリやFIFOへの接続など、大規模で繰り返し現れるインターフェースで真価を発揮します。同じ制御/データ信号セットが何度も現れる場合、専用パッケージで一度レコードを定義し、どこでも再利用すれば、エンティティ インターフェースが整理され、将来の変更も容易になります。 以下の例では、専用パッケージ(example_record_pkg.vhd)で2つの
VHDLプロシージャとは? プロシージャはVHDLのサブプログラム ファミリに属します。再利用可能なロジックをカプセル化し、コード重複を減らし、保守性を向上させます。一度定義すれば、複数のプロセスやアーキテクチャから呼び出せ、一貫した振る舞いを保証します。 例:std_logic_vectorのインクリメント 以下の例は、8ビットのstd_logic_vectorを受け取り、1を加算して結果を返すプロシージャを示します。また、テストベンチでのタイミング制御を説明するため、1nsのwaitを含めています。 library ieee; use ieee.std_logic_1164.all; us
Numeric_StdとStd_Logic_Arithパッケージの両方を使用 以下に最も頻繁に使用されるVHDL型変換をまとめました。記事は2部構成:前半はモダンなnumeric_stdパッケージを用いた変換、後半はレガシーなstd_logic_arithパッケージを用いた同等の変換を示します。多くの設計者がまだstd_logic_arithを使用していますが、業界のベスト プラクティスは明確さと移植性の観点からnumeric_stdを推奨します。 多くの例でVHDL属性lengthを使用しており、ベクトル幅の変更にコードが自動適応するため、再利用可能で保守しやすい設計の鍵となります。 Nu
はじめに VHDLまたはVerilogを使って、FPGA上でシンプルなLED点滅器を作る実践ガイドへようこそ。この例は、コンカレント プロセス、周波数合成、マルチプレクサ ロジックなど、25MHzクロックで駆動されるFPGAの核心概念を示します。 プロジェクト概要 4つの選択可能な点滅周波数を生成:100Hz、50Hz、10Hz、1Hz 各周波数で50%デューティ サイクルを維持 LED_ENスイッチがアサートされているときのみLEDを有効化 2つの独立したスイッチで希望の周波数を選択 ハードウェア展開前にシミュレーション必須、早期にエラーを検出 周波数選択真理値表 EnableSwit
VHDL ProcessブロックとVerilog Alwaysブロックの活用 VHDLのProcessブロックとVerilogのAlwaysブロックは、ハードウェア振る舞いを記述する核心的構成要素です。これらは2種類のロジックをモデル化するために使われます: 組み合わせロジック – 出力が現在の入力のみに依存 順序ロジック – 出力が現在の入力と過去の状態に依存、通常クロック駆動 多くの教科書はシンプルな組み合わせ例を示しますが、実設計ではレジスタ、ステート マシン、パイプライン ステージを実装するため、ほぼ専ら順序ブロックに依存します。 Dフリップフロップが重要な理由 すべての順序回路の
VHDL(Very High Speed Integrated Circuit Hardware Description Language)は、FPGAやASICの設計に使われる2大ハードウェア記述言語の一つです。ソフトウェア言語と比べて冗長に見えるかもしれませんが、その構文は正確で、デジタル ロジックを非常に高い抽象度で記述するために設計されています。 VHDLコードに入る前に、その使用される文脈を理解しておくと役立ちます。FPGA(Field-Programmable Gate Array)とASIC(Application-Specific Integrated Circuit)は、家電
VHDL