www.mikrocontroller.net

Forum: FPGA, VHDL & Co. ich weiss nicht was ich genau machen soll


Autor: pedro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In diesem Praktikum wird das Zählsignal VOA zunächst im Verhältnis 4:1 
geteilt, damit Sie die Zähl-impulse bei der Inbetriebnahme Ihrer 
Gesamtschaltung einfacher beobachten können. Die Schal-tung des 4:1 
Teilers wird von uns vorgegeben. Die aus VOA mit Hilfe des 4:1 Teilers 
erzeugten Zähl-impulse fQ sollen mit einem zyklischen 8-Bit-Zähler 
gezählt werden. Der Zähler soll abhängig von der Drehrichtung des Bandes 
aufwärts oder abwärts zählen und jederzeit auf den Initialwert (0000 
0000)2 zurücksetzbar sein.

Entwickeln Sie den Zähler in VHDL. Nutzen Sie dazu die im Anhang 
angegebene Schnittstelle zaehler8Bit. Weisen Sie mit einer funktionalen 
Simulation nach, dass Ihr Zähler zyklisch arbeitet und insbesondere beim 
Aufwärtszählen (up=1) nacheinander die Zählerstände 255, 0, 1 und beim 
Abwärtszählen (up=0) nacheinander 0, 255, 254,… durchläuft.

bitte helfen Sie mir !

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soll jetzt jemand diese Aufgabe für Dich lösen und die Lösung hier 
reinstellen oder hast Du eine konkrete Frage, was Du nicht verstanden 
hast ?

Autor: pedro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ist was ich bis jetzt gemacht habe, aber ich debke mal das ist 
falsch!
ich hätte gern die richtige lösung



library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

entity zaehler8Bit is
  port(
    Reset: in std_logic;        -- reset
    clk: in std_logic;          -- the count signal
    up: in std_logic;           -- direction (up=1/dn=0)
    zaehlwert: out std_logic_vector(7 downto 0) -- the counter
  );
end zaehler8Bit;

architecture a of zaehler8Bit is

signal zaehler : unsigned(7 downto 0);

begin
   process (Clk,Reset,up)
   begin
      if (Reset = '1') then
     counter <= (others => '0');
      elsif (rising_edge(Clock)) then
            if (Enable = '1') then
               zaehler <= counter + 1;
            end if;

      end if;

      Cnt <= std_logic_vector(counter);

   end process;

end zaehler8Bit_arch;


danke

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ich hätte gern die richtige lösung

wer hätte die nicht gern?

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein Mathelehrer sagte immer "Nur selber denken macht geistig fett."

Recht hat er.

MFG
Falk

P.S. Du bist auf dem richtigen Weg.

Autor: pedro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das problemm ich hab nicht mehr viel zeit zu denken , das muss ich 
schnell wie möglich abgeben

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tja, beim nächstem Mal eher anfangen. Der Schmerz muss jetzt sein, das 
ist (hoffentlich) der Lerneffekt.

MfG
Falk

Autor: pedro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke euch für ihren ganz besondere hilfe !!!
ihr seit die besten " papler "

das ist es falls jemand es braucht

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

entity zaehler8bit is
port(
     up: in std_logic;
     clk: in std_logic;
     reset: in std_logic;
     Q: out std_logic_vector(7 downto 0));
end zaehler8bit;
  architecture zaehler of zaehler8bit is
begin
process(clk)
variable cnt: integer range 0 to 255;
begin
if (reset = '1') then
     cnt:=0;
elsif(clk'event and clk = '1') then
  if up='0' then
   cnt := cnt-1;
   else cnt:= cnt+1;
   end if;
end if;
 Q<= conv_std_logic_vector(cnt,8);
end process;
end zaehler;

Autor: kopfschüttel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und war das jetzt so schwer? Ein Forum ist dazu da um sich Ratschläge 
und Tipps zu holen und nicht um ganze Aufgaben gelöst zu bekommen.

Da muss ich Falk rechtgeben einfach eher anfangen und nicht "beleidigt" 
sein wenn keiner die Aufgabe für DICH löst.

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der richtige Weg wäre gewesen, die Aufgabe mit eigenen Worten 
beschreiben (woher wissen wir z.B., wie VOA verwndet wird?), deinen 
Lösungsversuch posten, beschreiben, worin das Problem besteht 
(Compilerproblem, Ergebnis entspricht nicht der Erwartung), und wo du 
den Fehler vermutest.

Autor: high_speed (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Damit pedro  noch was sinnvolles lernt.

Der VHDL-Code vom 05.12.2006 um 12:08 hat einige Fehler.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

entity zaehler8bit is
port(
     up    : in std_logic;
     clk   : in std_logic;
     reset : in std_logic;
     Q     : out std_logic_vector(7 downto 0)
   );
end zaehler8bit;

-- Bei Signalbezeichner würde ich den 
-- ersten Buchstaben groß schreiben, zum 
-- Unterscheiden Schlüsselwörter klein.
-- Achte auch auf die Formatierung, bringt
-- Vorteile beim Lesen

architecture zaehler of zaehler8bit is
begin

   process(clk)
      variable cnt: integer range 0 to 255;
      -- Variablen sollte man vermeiden, 
      -- wenn es geht. Typ siehe unten.
   begin
      if (reset = '1') then
         cnt:=0;
      elsif(clk'event and clk = '1') then
         if up='0' then
            cnt := cnt-1;
         else 
            cnt:= cnt+1;
         end if;
      end if;
      Q<= conv_std_logic_vector(cnt,8);
   end process;

end zaehler;

Der Datentype integer stellt eine 32-Bit-Zahl dar. Für Synthetisierte
Logik sollte er aber nicht verwendet werden, je nach Synthese-Tool kann
er unterschiedlich implementiert werden. Für den angegebenen 
Wertebereich
würde ein 8-Bit-Vektor reichen.
Bei der Simulation kam es beim Überlauf zum Fehler:

# ** Fatal: (vsim-3421) Value 256 for cnt is out of range 0 to 255.
#    Time: 5100 ns  Iteration: 1  Process: /test_zaehler/test/line__16 
File: C:/-???-/zaehler8bit.vhd
# Fatal error at C:/-???-/zaehler8bit.vhd line 25
#

Besser du benutzt ein Signal vom Type std_logic_vector(7 downto 0),
da ist sichergestellt, das es sich in jedem Fall um einen 8-Bit-Vektor
handelt. Ein weiterer Vorteil ist, dass die Simulation sich auch gleich
verhält wie die Logik.
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;

entity Zaehler8bit is
port(
     Up      : in std_logic;
     CLK     : in std_logic;
     Reset   : in std_logic;
     Counter : out std_logic_vector(7 downto 0));
end Zaehler8bit;


architecture Zaehler of Zaehler8bit is
   signal Counter_int : std_logic_vector(7 downto 0)
begin

   process(CLK)
   begin

      if Reset = '1' then
         Counter_int <= (others => '0');
      elsif CLK'event and CLK = '1' then
         if Up='0' then
            Counter_int <= Counter_int - 1;
         else
            Counter_int <= Counter_int + 1;
         end if;
      end if;

   end process;

   Counter <= Counter_int;

end Zaehler;

MfG
Holger

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@high_speed

"Der Datentype integer stellt eine 32-Bit-Zahl dar. Für Synthetisierte
Logik sollte er aber nicht verwendet werden,..."

Falsch, ich verwende integer immer für synthetisierte Logik (was nicht
zwangsläufig nach sich zieht, dass man es so machen muss ;-))

Ich kann nur den guten Rat geben: verwendet immer den Typ, der am besten 
zu der beschriebenen Funktion passt!
Und bei einem Zähler ist das nun mal integer. Als Kind lernt man doch 
nicht das Zählen mit Flip-Flops oder Standard-Logic-Vectoren, sondern 
eben 1,2,3...!
Und genau so hätte ich es auch implementiert.

Moderne Synthese-Tools können das! Die Zeit des Vorkauens ist vorbei.
Vielleicht sollte man mal einen Contest für lesbaren VHDL-Code 
ausschreiben, damit die Leute von der Bit-Fummelei wegkommen.

Den Simulator bekommt man ganz leicht in den Griff:

cnt := (cnt-1) mod 256; -- damit sieht man gleich den Zählumfang

Und was soll dieses ewige clk'EVENT und clk='1'???

Arbeitet ernsthaft noch jemand mit VHDL-87-Only Compilern?
Das sieht aus wie ein Code, den irgendein dummes Tools, nennen wir
es mal GigaWizardSuperPluginManager oder so produziert.

if rising_edge(clk) heißt die lesbare Version!

Die Lesbarkeit wird bei so kurzem Code weiter erhöht, wenn nach dem
'end' die Labels nicht ständig wiederholt werden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.