2010-12-01 10 views
8

Ich versuche, einen Mikrocontroller auf einem FPGA zu implementieren, und ich muss ihm ein ROM für sein Programm geben. Wenn ich $ readmemb benutze, wird das korrekt zu einem ROM synthetisiert? Wenn nicht, was ist der übliche Weg, dies zu tun?

Antwort

15

Ich würde Georges Antwort ändern, um zu sagen, dass es auf dem Synthese-Tool abhängt, ob $readmemb synthetisierbar ist oder nicht.

von Altera Recommended HDL Coding Styles Handbuch enthält beispielsweise 10 bis 31 (Seite 10-38), die ein ROM von $readmemb (reproduziert unten) abgeleitet zeigt:

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 

Ähnlich Xilinx XST User Guide lautet:

Die $readmemb und $readmemh System Aufgaben können verwendet werden, um Block Speicher zu initialisieren. Weitere Informationen:

Initialisierung RAM aus einer externen Datei Coding Beispiele

Verwenden $readmemb für binäre und $readmemh für hexadezimale Darstellung . Um den möglichen Unterschied zwischen XST und Simulator Verhalten zu vermeiden, empfiehlt Xilinx®, dass Sie Index-Parameter in diesen System Aufgaben verwenden. Siehe die folgende Codierung Beispiel.

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

+1

mrkj Antwort ist viel besser als meine. Ich habe es entfernt. – George