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
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. Integer-Eingangsports in Verilog Simillar zu VHDL?
- 2. Ausgabe von "for" ist unbekannt in Verilog
- 3. BCD Adder in Verilog
- 4. Exponentieller Zerfall in Verilog
- 5. Aufgabe in Verilog
- 6. Xst: 3002 in Verilog
- 7. Array Ausgang in Verilog
- 8. Speichercodefehler in Verilog
- 9. Verilog-Taktgeneratorfehler?
- 10. Was ist der Unterschied zwischen Verilog! und ~?
- 11. Lernressourcen Verilog
- 12. Verilog Datentypen
- 13. Verilog Fragen
- 14. Gibt es eine System-Verilog-Task, die die Länge einer Reg/Logik zurückgibt?
- 15. Ein Modul in Verilog einschließen
- 16. Ändern des Parameterwerts in Verilog
- 17. Wofür steht "net" in Verilog?
- 18. urandom_range(), urandom(), random() in Verilog
- 19. Wie Fixpunkt Wert in Verilog?
- 20. Ist es möglich, Eingangsport als Array in Verilog zu nehmen?
- 21. Was ist der Fehler in meinem Verilog-Code?
- 22. Was ist >>> Symbol in Verilog?
- 23. VERILOG Problem mit Struktur
- 24. Verilog: Der Speicherblock Instanziierung
- 25. $ size, $ bits, verilog
- 26. Verilog-Array-Belegungen
- 27. Verilog Array Zuordnung
- 28. Shifting 2D-Array Verilog
- 29. Ändern Verilog-Modus Einrückung
- 30. RISCV VERILOG HDL-Code
mrkj Antwort ist viel besser als meine. Ich habe es entfernt. – George