組み込み機器・ハードウェアの設計開発から装置製作まで社内一貫対応!

組み込み機器・ハードウェア設計製作.com
組み込み機器・ハードウェア設計製作.com

produced by株式会社アイディアイ

設計のポイント

verilog記述のポイント:$readmemhによるメモリ・ROMの初期化

設計内容分類FPGA
解決できる課題CPU負荷低減

実現したい仕様・課題

ルックアップテーブル、フィルタ係数、フォントデータ、テストパターンなど、まとまった初期データを持つメモリをコード中にひとつずつ代入で書くと、データ量が増えるほど記述が膨大になり、データ更新のたびにHDLソースの修正が必要になります。データ本体をコードから分離して管理したいというのが課題です。

設計のポイント

メモリ配列の初期データは、$readmemh(16進)/$readmemb(2進)でテキストファイルから読み込む方式にします。initialブロック内で $readmemh(“init.hex”, mem); と記述すれば、1行1ワードのテキストファイルの内容が配列へロードされます。FPGA向けの合成ツールはこの記述を解釈し、ブロックRAM/ROMの初期値として回路に反映するため、シミュレーションと実機で同じデータファイルを共有できます。この方式の利点は、データとロジックの分離です。係数やテーブルの更新はデータファイルの差し替えだけで済み、HDLソースは変更不要になります。データファイルはスクリプト(Python等)で生成する運用にすれば、設計パラメータからの再生成も自動化できます。書き込みポートを持たない読み出し専用の配列として記述すればROMとして、書き込みポート付きならば初期値付きRAMとして実装されます。注意点として、ファイルパスはツールの実行ディレクトリ基準で解決されるため、プロジェクト構成に応じた相対パスの管理が必要です。また、ASICでは初期値付きRAMが使えないのが通例のため、移植の可能性がある設計では初期化手段(リセット後のロードシーケンス等)を別途検討します。データ量が少ない場合のcase文ROM(アドレスをcaseで引く記述)との使い分けは、「数十エントリ程度まではcase文でも可、それ以上はファイル初期化」が目安です。

【コード例】
reg [7:0] rom [0:255];
initial $readmemh(“table.hex”, rom); // 1行1ワードの16進ファイル

reg [7:0] q;
always @(posedge clk) q <= rom[addr]; // 同期読み出しでROM推論

// table.hex の例
// 00
// 3F
// 7A …

verilog記述のポイント:$readmemhによるメモリ・ROMの初期化 | 組み込み機器・ハードウェア設計製作.com

補足情報

当事例のような、FPGA設計に関するポイントをまとめた冊子の無料DLが可能です。
是非以下よりご確認ください。

FPGA設計のポイント

>>ダウンロードはこちら!

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

組み込み機器・ハードウェア 設計製作.comを運営する株式会社アイディアイは、組み込み機器・ハードウェアの設計開発代行サービスを提供しています。
試験装置や制御機器、組み込みボードなど、設計・開発委託先をお探しの皆様、お気軽に当社に御相談ください。

技術資料のダウンロードはこちらから 技術資料ダウンロ―ド メールフォームでのお問い合わせはこちらから ご相談お問合せ