Forum: FPGA, VHDL & Co. ModelSim Problem 'X' anstatt '1' in std_logic_vector signal


von Christian G (Gast)


Angehängte Dateien:

Lesenswert?

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?

von daniel__m (Gast)


Lesenswert?

hi,

"multiple drivers": instruction wird aus einem prozess und bei einer 
Instanziierung beschrieben.

Entferne den Reset (oder verschiebe ihn ins Registerfile)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Christian G (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.