Frage

Ich versuche a zu testen VHDL Komponente, aber ich kann diesen einen Port -Port nicht bekommen, um mir Verhalten zu geben. Ich habe versucht, den Port von '1' bis '-' auf alles zu setzen, aber er kommt immer noch als "u" in Simulation. Irgendwelche im Vorstellungsgespräch, was könnte falsch sein?

War es hilfreich?

Lösung

Für Inout -Port (zum Beispiel im RAM):

....
port(
    data    :inout std_logic_vector (DATA_WIDTH-1 downto 0);
....
-- Memory Write Block
-- Write Operation : When we = 1, cs = 1
  MEM_WRITE: process (address, cs, we, data, address_1, cs_1, we_1, data_1) begin
    if (cs = '1' and we = '1') then
       mem(conv_integer(address)) <= data;
    end if;
  end process;

 -- Tri-State Buffer control
  data <= data_out when (cs = '1' and oe = '1' and we = '0') else (others=>'Z');

 -- Memory Read Block
  MEM_READ: process (address, cs, we, oe, mem) begin
    if (cs = '1' and we = '0' and oe = '1') then
      data_out <= mem(conv_integer(address));
    else
      data_out <= (others=>'0');
    end if;
  end process;

Sie weisen Daten zu, die gelesen und schreiben, um mit einer Bedingung zu gelesen. Wenn Daten gelesen werden, wird sie von einem anderen Modul angetrieben. Wenn es schreibt, wird es von intern angetrieben.

  • Wenn beispielsweise die Daten von einem anderen Modul (wie im Signal) angetrieben werden, werden beispielsweise zwischen allen 'Z' und einem Vektor "0101010" aufgelöst. Die Daten werden als "0101010" angetrieben.
  • Im anderen Fall: Das andere Modul muss Daten nach allen "Z" treiben, und dann kann das interne Signal seinen Wert auf Daten einsetzen.

Andere Tipps

Sie benötigen einen expliziten Fahrer zu 'Z'.

Ich habe versucht, den Port von '1' bis '-' auf alles zu setzen, aber er kommt immer noch als "u" in Simulation.

Abgesehen von der guten Antwort auf die Zuweisung/Lesen von In -Out -Ports könnte der obige zitierte Text mit dem Port zugewiesen werden, der an zwei getrennten Stellen zugewiesen wird, sodass er als "u" gelöst wird.

Bei Verwendung eines In -Out -Ports wurde ich von einem Synthese -Tool gebissen, das eine OBUF anstelle eines IOBUF instanziiert, wenn die VHDL -Aussagen anscheinend zu kompliziert waren, als dass die Synthese auf das IOBUF schließt. Das Folgende ist ein vereinfachtes Beispiel (Angenommen, alle Signale sind std_logic) der Situation, in der ich gebissen wurde:

data_a <= '1' when assert_a = '1' else '0';
data_b <= 'Z' when float_b = '1' else '0';  
data_inout <= data_a when choose_a = '1' else data_b;

In meinem Fehlerfall generierte Synthese eine OBUF für Data_inout. Ich hätte erwartet, dass ein IOBUF den Fall von wählens_a = '0' und float_b = '1' verwaltet, da das Data_inout 'Z' hätte 'Z' zuweisen sollen, aber das habe ich nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top