Hallo ich habe das programm geschrieben nun leider der Prof hat verlangt dass ich es nicht mit Buffer schreiben sondern mit OUT. habe ja versucht aber leider ging nicht ( immer fehler ) kann mir jemand helfen bitte und es korregieren. danke !!!! library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity Counter is generic( N: natural := 4); port( CLK, RESET, UND : in std_logic; Q : buffer integer range 0 to 2**N-1); end Counter; architecture Behaviour of Counter is begin process(CLK, RESET) begin if RESET = '1' then -- Asynchron Q <= 0; -- Loeschen elsif CLK='1' and CLK'event then -- Synchron zaehlen if UND = '1' then Q <= (Q+1) mod 2**N; -- Aufwaerts else Q <= (Q-1) mod 2**N; -- Abwerts end if; end if; end process; end Behaviour;
Internes Signal zum Zählen innerhalb des Prozesses verwenden und auuserhalb dem Ausgangsport zuweisen. [vhdl] library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity Counter is generic( N: natural := 4); port( CLK, RESET, UND : in std_logic; Q : buffer integer range 0 to 2**N-1); end Counter; architecture Behaviour of Counter is -- internes signal signal s_q : integer range 0 to 2**N-1; begin process(CLK, RESET) begin if RESET = '1' then -- Asynchron s_q <= 0; -- Loeschen elsif rising_edge(CLK) then -- Synchron zaehlen if UND = '1' then s_q <= (s_q+1) mod 2**N; -- Aufwaerts else s_q <= (s_q-1) mod 2**N; -- Abwerts end if; end if; end process; -- ausgang Q <= s_q; end Behaviour;
danke für dein antwort Soll ich also auch Buffer mit Out ändern ????? weil du hast es in deine korretur nicht geändert danke nochmal
Sollte man generell Buffer vermeiden und mit Hilfs- bzw. Zwischensignalen arbeiten oder eher nicht ? Vor- und Nachteile beider Ansätze ?
ja genau . buffer total vermeiden und OUt benutzen wegen die verzögerung in der Simulation so habe ich verstanden von der Prof. ich bin nur ein anfänger in Vhdl danke
Buffer sollte man nicht für die Synthese verwenden. Ports mit Buffer in der Richtungsangabe werden nicht von allen Synthesewerkzeugen unterstützt. Und für Simulationszwecke auch nur wenn man genau weiß was man tut. Auf den ersten Blick, scheint sich ein Buffer wie ein inout zu verhalten. Doch liefert ein Buffer nur den Wert des mit ihm assoziierten Treibers und nicht den Wert der wirklich an dem angeschlossenen Signal außerhalb des Moduls anliegt. Wenn z.B. das Modul eine '1' treibt und außerhalb ein anderes Modul eine '0' ist das Signal undefiniert. Doch die Abfrage des Buffers wird die '1' seines Treibers liefern.
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.