Im Anhang ein "einfaches" Modell eines Speichers inklusive Testbench. Es wurde eine Komponente RAM und eine Komponente CAM definiert. RAM ist ein Dualport-RAM. CAM erweitert RAM und soll zusätzlich das Suchen eines Speicherinhaltes ermöglichen. Die Testbench soll nacheinander Daten in den Speicher schreiben, diesen lesen und anschliessend einen Inhalt suchen. Hierzu wurde ein Prozess control zur Steuerung und separate Prozesse für das Schreiben, Lesen und Suchen definiert. Die einzelnen Prozesse werden vom Control-Prozess durch das Setzen eines Start-Signals gestartet. Die einzelnen Prozesse wechseln daraufhin vom Wartezustand(Idle) in den Initialisierungszustand. Das Problem zeigt sich bei der Anweisung "data_in_cam <= "0011";" im Prozess lookup_at_cam : process (clock_cam). Wird diese Anweisung ausgeklammert ist ein Schreiben und Lesen möglich, andernfalls nicht (Simulation mit ISE Simulator unter ISE Webapck 10.1). Dies obwohl der Prozess erst nach dem Schreiben und Lesen ausgeführt werden soll. Wo ist der "Denk"-Fehler ? Danke
Du hast 2 Prozesse, die das selbe Signal treiben ! Signale sind keine Variablen, die einen neuen Wert erhalten zum Zeitpunkt wenn ein Prozess sie überschriebt, sondern funktionieren wie eine Art Bus, Stichwort "resolved signals". Entweder Du schreibst deine Testbench um, sodass nur ein Prozess data_in_cam treibt, oder der 2. Prozess setzt data_in_cam auf alles 'Z' (hochohmig, gilt für signale vom Typ std_logic)
Solche Testbenches gehören zu der Sorte Schmier und Fink! Da kann man alles machen, muss aber immer mitdenken und auch dokumentieren, was passiert. Das taugt nicht für Teamarbeit. Ich rate immer zu expliciten Testbenches, die auch synthesefähig gemacht werden können. Diese zwingen zu strukturiertem Entwickeln der Systeme.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.