8

FPGA にマイクロコントローラーを実装しようとしていますが、そのプログラム用に ROM を提供する必要があります。$readmemb を使用すると、ROM に正しく合成されますか? そうでない場合、これを行う標準的な方法は何ですか?

4

1 に答える 1

18

合成可能かどうかは合成ツールに依存します$readmemb

アルテラの推奨 HDL コーディング スタイルガイドには、例 10-31 (ページ 10-38) が含まれてい$readmembます。

module dual_port_rom (
   input [(addr_width-1):0] addr_a, addr_b,
   input clk, 
   output reg [(data_width-1):0] q_a, q_b
);
   parameter data_width = 8;
   parameter addr_width = 8;
   reg [data_width-1:0] rom[2**addr_width-1:0];
   initial // Read the memory contents in the file
           // dual_port_rom_init.txt. 
   begin
      $readmemb("dual_port_rom_init.txt", rom);
   end
   always @ (posedge clk)
   begin
      q_a <= rom[addr_a];
      q_b <= rom[addr_b];
   end
endmodule

同様に、ザイリンクスのXST ユーザー ガイドには、次のように記載されています。

およびシステム タスクを使用して$readmemb$readmemhブロック メモリを初期化できます。詳細については、次を参照してください。

外部ファイルからの RAM の初期化のコーディング例

$readmemb2 進数および16 進数表現に使用し$readmemhます。XST とシミュレータの動作の違いを避けるため、ザイリンクスではこれらのシステム タスクでインデックス パラメーターを使用することをお勧めします。次のコーディング例を参照してください。

$readmemb("rams_20c.data",ram, 0, 7);

于 2010-12-22T17:05:06.493 に答える