過去6ヶ月間開発してきたVHDLとFPGAのコースが完成に近づいています。現在はベータ版で、今秋に正式リリース予定です。 対象読者 このプログラムは、他のプログラミング言語を知っているがVHDLとFPGAは初めてという開発者向けに設計されています。初心者から中級者レベルを、高度なVHDL構造の習得まで導きます。 FPGA開発を任されたプロフェッショナル・ソフトウェア・エンジニア、ハードウェア設計を探求する学生やフリーランサー、FPGAエンジニアへのキャリア・シフトを検討している方に最適です。 基本的なプログラミング・スキルがあれば、私たちのハンズオン・アプローチから恩恵を受けられます。F
モジュール設計中にAXIインターフェースに初めて遭遇したとき、その合理化されたフロー制御アプローチに驚きました。従来のプロトコルがbusy/valid、full/valid、empty/validペアに依存するのとは異なり、AXIはreadyとvalidの2信号のみを使用します。始まりはフラストレーションでしたが、すぐに魅力に変わりました。 AXIはフロー制御をハンドシェイクに直接埋め込み、追加のステータス線を不要にします。基本ルールはシンプルですが、プロトコルをFPGAハードウェアにマッピングする際は細心の注意が必要です。このチュートリアルでは、ブロックRAM上で動作するAXI FIFOの
ブロックRAMを事前定義値で埋める最も効率的な方法は、ASCIIファイルからバイナリまたは16進リテラルを読み取ることです。この技術はROMの作成にも役立ちます。FPGAのROMは単に読み取り専用のRAMだからです。 以下の例では、次の定数とRAM型がVHDLファイルの宣言領域で宣言されていると仮定します: constant ram_depth : natural := 256; constant ram_width : natural := 32; type ram_type is array (0 to ram_depth - 1) of std_logic_vector(ram_wi
外部ファイルから刺激データを読み取ることは、VHDLでテスト対象デバイス(DUT)を制御する強力な方法です。信号値とシミュレーション時間のシーケンスをプレーン・テキスト・ファイルにスクリプト化することで、設計者はテストベンチ・ロジックを変更せずにテスト・パターンを迅速に切り替えられます。VHDLファイル・アクセスに関するシリーズの第2弾となるこの記事では、TEXTIOライブラリを使用して刺激ファイルを読み取り、その値を4入力マルチプレクサーに適用する方法を実演します。 テスト・ケースの概要 DUTは、8ビット・データ・ワードを持つ標準的な非同期4入力マルチプレクサーです。テストベンチは出力検
VHDLテストベンチで画像をインポートする最も簡単な方法は、BMPラスター・グラフィックス形式を使用することです。BMPファイルはWindowsでネイティブにサポートされ、圧縮なしで生のピクセル・データを公開するため、シミュレーションに最適です。 この記事では、バイナリBMPファイルを読み取り、ピクセル・データを動的メモリに格納し、VHDLのDUTに供給し、処理済み画像を新しいBMPファイルに書き戻す方法を説明します。例のDUTはグレースケール変換を実行しますが、この技術はあらゆるピクセル単位処理モジュールに適用可能です。 TEXTIOシリーズの一部: TEXTIOを使用してファイルから
この動画は、FPGAとプログラマブル・ロジック技術に関する入門プレゼンテーションです。2019年11月19日、タイ・バンコクで7 Peaks Software主催のイベントで行った45分の講演です。 プレゼンテーションのハイライト: 05:07 – FPGAを使用しているのは誰か? 09:06 – FPGAとは何か? 12:13 – スタティックRAMによる論理ゲートのエミュレーション 17:47 – 一般的なFPGAプリミティブ 19:51 – 最も安いFPGAと最も高いFPGA 20:53 – FPGAのフロアプラン 24:30 – VHDL 28:05 – 合成と配置配線 30:50
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