zähler rückwärts und vorwärts

Gast #905998
Lesenswert?

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;
Gast #906039
Lesenswert?

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;
Gast #906097
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren