私の現在の iCE40 FPGA プロジェクトには、8 個の 2Kx2 ブロック RAM から構成される 4Kx8 RAM に接続された 8 ビット (ソフト IP) マイクロプロセッサが含まれています。FPGA の再コンパイルや再ルーティングを必要とせずに、新しいプログラム (8 ビット マイクロ用) を 4kx8 RAM にロードできると便利です。提案されたフローでは、a) FPGA ネットリストを解析して、8 つの 2Kx2 ブロック RAM (4Kx8 RAM を構成する) がどのように配置され、名前が付けられているかを把握する必要があります。b) 新しいプログラム (8 ビットマイクロ用) を含む Intel hex ファイルを 8 つのセクションに分割します。c) ビットストリーム内の 8 つのブロック RAM データ セクションをそれぞれ検索し、各セクションの現在のコンテンツを新しいプログラム コンテンツに置き換えます。icestorm または yosys プロジェクトの誰でも、この提案されたフローが可能かどうか (または解決策が既に存在するかどうか) コメントしてください。
1 に答える
編集:これを行うためのツールがIceStormに追加されました:icebram
使用例:
合成用のランダム hex ファイルを生成します。幅 8 ビット x 深さ 512 ワードのメモリがあるとします。
icebram -g 8 512 > datafile_syn.hex
合成 (Yosys) と配置配線 (arachne-pnr) を実行します。
$readmemh("datafile_syn.hex", memory);
Verilog コードで使用してメモリを初期化します。生成された IceStorm .asc ファイルのメモリ コンテンツを置き換えます。
icebram datafile_syn.hex datafile.hex < synout.asc > final.asc
を使用して、最終的な IceStorm .asc ファイルをバイナリ ビットストリームにパックし
icepack
ます。
新しいdatafile.hex
.
理論的にはもちろん可能ですが、まだ実装されていません。次の変更が必要になります。
1) Yosys のmemory_bram
パスは、元のデザインのメモリが個々の SB_RAM40_4K セルにどのように分割されているかという情報を、できればセルの属性に格納することによって、何らかの方法で格納する必要があります。
2) Arachne-pnr はすでにプレースリストを作成できます。これを拡張して、1) の属性からの情報と関連する配置情報を含むファイルも書き込む必要があります。
3) この情報を使用して IceStorm .asc ファイルのメモリ コンテンツにパッチを適用するツールを作成する必要があります。
私は 1) を行うことができますが、他の誰かが 2) と 3) を行うといいでしょう。