Forum: FPGA, VHDL & Co. zähler rückwärts und vorwärts


von Gast (Gast)


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;

von TM (Gast)


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;

von Gast (Gast)


Lesenswert?

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

von Hans-Werner (Gast)


Lesenswert?

Sollte man generell Buffer vermeiden und mit Hilfs- bzw. 
Zwischensignalen arbeiten oder eher nicht ? Vor- und Nachteile beider 
Ansätze ?

von Gast (Gast)


Lesenswert?

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

von Mathi (Gast)


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.

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.