Es gibt einen Begriff in der HDL-Simulation/-Verifizierung, der als "Backdoor-Speicherzugriff" bezeichnet wird.
Ich habe das schon oft gehört, bin mir aber nicht sicher, wie das umgesetzt wird.
Außerdem gibt es einige Referenzen für dieses Konzept.
Diese Frage brauchte wirklich etwas mehr Kontext als nur "Wie funktioniert der Backdoor-Speicherzugriff?". Ein Link zu einem 198-seitigen Dokument, das wir lesen können, um zu erraten, was Sie fragen, ist nicht wirklich förderlich, um gute Antworten zu erhalten.
Selbst ein grundlegender Kontext wie "im Kontext der HDL-Simulation", der anscheinend das ist, was Sie fragen, würde helfen.
Davon abgesehen: Wenn Sie ein System simulieren (möglicherweise eine CPU testen, die Sie auf einem FPGA implementiert haben), müssen Sie die CPU mit dem externen Speicher in Ihrer Testbench verbinden. Das Speichermodell kann wie folgt aussehen:
entity SRAM is
port (
Address : in unsigned(15 downto 0);
Data : inout std_logic_vector(15 downto 0);
Wr_n : in std_logic;
OE_n : in std_logic;
CS_n : in std_logic
);
end SRAM;
und Sie könnten dieses Speichermodell selbst schreiben oder es von einem Anbieter herunterladen.
Nun wird das Laden eines großen Programms über diese Ports viel (vergeudete) Simulationszeit in Anspruch nehmen. Dasselbe gilt für das Speichern der Programmausgabe zur späteren Analyse.
Nichts hindert Sie jedoch daran, dem Speichermodell weitere Verbindungen hinzuzufügen, die vollständig von den tatsächlichen Pins auf dem physischen Speicher getrennt sind und direkt mit Ihrer Testbench verbunden sind.
Beispielsweise könnten Sie eine Backdoor-Schnittstelle hinzufügen, die aus den Ports besteht
Filename : in String;
Load : in std_logic;
Save : in std_logic;
und geeignetes Verhalten (Lesen einer Binärdatei) in der SRAM-Architektur. Dann können Sie in der Testbench (vorausgesetzt, dass Progmem_Filename mit dem richtigen Filename-Port verbunden ist) schreiben
Progmem_Filename <= "selftest.elf";
Load <= '1';
wait for 1 ns;
Load <= '0';
und Ihr Programmspeicher ist geladen und betriebsbereit.
pjc50
Wouter van Ooijen
Federico Russo
e19293001
Jippie
Kaz