Hallo, ich bin da auf ein Problem mit dem ModelSim Simulator gestoßen und zwar sieht er in einem Signal (std_logic_vector) anstelle von den '1'sen immer ein 'X'. Das hat zur Folge das in dem Prozess der mit diesem Signal arbeitet ein case nicht mehr funktioniert da er da anstelle von z.B. "00010000" ein "000X0000" sieht. Ich habe meine Dateien mal angehängt, es geht um das Signal "instruction" in "gcpu_soc.vhd". Das ROM aus dem die Daten kommen wird mit dem Inhalt von "ROM.BIT" (evtl. in der Version noch "ROM.HEX") initialisiert. Das Funktioniert auch in der Simulation, ich sehe das im ROM die std_logic_vector richtig sind '1'sen und '0'en aber "instruction" bekommt nur 'X'e und '0'en. Woran könnte das wohl liegen?
hi, "multiple drivers": instruction wird aus einem prozess und bei einer Instanziierung beschrieben. Entferne den Reset (oder verschiebe ihn ins Registerfile)
1 | rom_inst : rom port map( |
2 | clk => clk100, |
3 | addr => pc, |
4 | data => instruction --- hier wird auf instruction geschrieben |
5 | );
|
6 | |
7 | process
|
8 | begin
|
9 | wait until rising_edge(clk100); |
10 | if (reset = '1') then |
11 | pc <= (others => '0'); |
12 | instruction <= (others => '0'); --- und hier auch --> Kollision |
13 | else
|
14 | ...
|
BTW: Das hier geht kürzer:
1 | if (to_integer(unsigned(pc)) < 1) then |
2 | pc <= std_logic_vector(to_unsigned(to_integer(unsigned(pc)) + 1, 11)); |
Denn auch mit unsigned Vektoren kann man rechnen. Und man kann sie mit positiven integer Zahlen vergleichen:
1 | if (unsigned(pc) < 1) then |
2 | pc <= std_logic_vector(unsigned(pc)+1); |
Siehe dazu die Operatoren in der numeric_std: https://www.csee.umbc.edu/portal/help/VHDL/packages/numeric_std.vhd Und in logischer Konsequenz könnte man den pc gleich als unsigned Vektor definieren...
:
Bearbeitet durch Moderator
Vielen Dank daniel__m und Lothar Miller! Ich übe halt noch und das mit dem mehrfachem Zugriff auf instruction ist mir hier leider durchgegangen :( Vielen Dank auch für den Tipp mit den unsigned Vektoren, hast völlig recht, warum nicht gleich nutzen anstatt der rum-caste / konvertiererei!!!
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.