Hat die altera ROM Megafunktion eine Startverzögerung?

Ich versuche, eine sehr einfache Einzelzyklus-CPU in VHDL zu erstellen. Mein Maschinencode ist in einem ROM gespeichert, das vom Altera MegaWizard erstellt wurde. Das erste Wort, das in diesem ROM gespeichert wird, ist 0x1111. Nachdem ich eine Testbench für die CPU geschrieben hatte, stellte ich fest, dass beim Lesen aus diesem ROM eine anfängliche Verzögerung von 1 Zyklus auftritt. Ist das normal und gibt es eine Möglichkeit, dies zu beheben? Würde diese Verzögerung in meiner CPU überhaupt eine Rolle spielen?

Antworten (1)

Je nachdem, wie Sie die MegaWizard-Einstellungen konfiguriert haben, wird dies erwartet. Wenn das ROM in einem Block-RAM enthalten ist, gibt es immer eine Leselatenz von mindestens 1 Zyklus. Grundsätzlich bestätigen Sie die Adresse bei t=0, dann wird beim nächsten Taktzyklus ( t=1) die Adresse in die Adressregister im BRAM geladen. Die Daten erscheinen dann am Datenausgang des Speichers bereit zum Eintakten bei t=2.

Wenn Sie ein MLAB verwenden, können die Adresseingänge so angegeben werden, dass sie nicht registriert werden, was bedeutet, dass die Daten zum Eintakten bereit sind t=1– dies kann jedoch den FMAX des Systems verringern – da Sie den Taktzyklus des Pipelining entfernt haben.


Die Latenz kann ein Problem sein oder auch nicht, je nachdem, wie Sie Ihre CPU entwerfen. Da es sich um eine feste Latenz handelt - es wird immer 1 Zyklus sein - können Sie dies in Ihrem CPU-Design berücksichtigen, indem Sie dem Befehl und dem Datenabruf Pipelining hinzufügen - z. B. den nächsten Befehl abrufen, während der aktuelle verarbeitet wird.

Ich mache eine Single-Cycle-CPU, also kein Pipelining. Im MegaWizard kann ich das MLAB nicht auswählen, nur M9K ist verfügbar und der Rest ist ausgegraut.
@gilianzz aufgrund der Größe des Speichers wahrscheinlich nicht verfügbar - MLABs sind sehr klein. Es gibt eine andere Option, die darin besteht, den Speicher mit der doppelten Frequenz der CPU laufen zu lassen - eine Taktfreigabe in der CPU zu haben, was bedeutet, dass sie während des Zyklus, in dem die Adressregister geladen werden, nicht getaktet wird.