2010-12-01 15 views
8

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

答えて

15

$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 User Guide状態:

アルテラRecommended HDL Coding Stylesガイドは、例えば10-31 $readmemb(以下に再現)から推測ROMを示し(ページ10-38)を含みます

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

進 表現のためのバイナリ と$readmemhため コーディング例

外部ファイルから使用$readmembをRAMを初期化します。 XSTとシミュレータ の動作が異なる可能性を避けるため、 これらのシステムのインデックスパラメータを使用することをお勧めします。 次のコーディング の例を参照してください。

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

+1

mrkjの答えは私よりもはるかに優れています。私はそれを削除しました。 – George

関連する問題