www.mikrocontroller.net

Forum: FPGA, VHDL & Co. 4 bit Addierer,synchron asynchron?


Autor: Julia (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich habe verständnis fragen zum Programmieren eines VHDL code (Addierer) 
auf ein FPGA (CycloneII).

ich habe folgenden 4 bit Addierer programmiert :


entity adder is
  port(
      a : in signed(3 downto 0);
      b : in signed(3 downto 0);
      sum  : out signed(4 downto 0)
    );
end adder;

architecture addierer of adder is

signal temp : signed(4 downto 0);

begin

temp <= (resize(a,5) + resize(b,5));
sum <= temp;

end addierer;

soweit ist gut.

Jetzt stellen sich folgende Aufgaben :

mit einem CLK sollen ein Synchron und Asynchron Addierern gebaut werden. 
Ich habe verständliche Probleme und zwar :

- ein Clock wird benötigt. Warum? der Addierer kriegt zwei 4bit Werte 
von außen. wozu der Takt?
-wo liegt der Unterschied zwischen synchron und asynchron Addierer.

- wie kann ich mein Addierer Synchron programmieren?


Vielen Dank im Voraus.

Julia

Autor: GALlier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für einen synchronen Addierer brauchst du natürlich erstmal noch nen 
Input Pin namens clk.

Dann fügst du in die architecture nen process ein, in die 
sensitivitylist kommt clk.
Am Anfang vom process machst du ein if(rising_edge(clk)).

so addiert der Adder nur bei steigender Taktflanke.

Autor: Dietrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verschiedene Varianten für deine Kollegen, JuliO ;-)
entity adder is
  port(
      clk : in  std_logic;
      a : in signed(3 downto 0);
      b : in signed(3 downto 0);
      sum  : out signed(4 downto 0)
    );
end adder;

architecture addierer of adder is

signal temp : signed(4 downto 0);

begin

temp <= (resize(a,5) + resize(b,5)) when rising_edge(clk);
sum <= temp;

end addierer;


entity adder is
  port(
      clk : in  std_logic;
      a : in signed(3 downto 0);
      b : in signed(3 downto 0);
      sum  : out signed(4 downto 0)
    );
end adder;

architecture addierer of adder is

signal temp : signed(4 downto 0);

begin

temp <= (resize(a,5) + resize(b,5));
sum <= temp when rising_edge(clk);


end addierer;


entity adder is
  port(
      clk : in  std_logic;
      a : in signed(3 downto 0);
      b : in signed(3 downto 0);
      sum  : out signed(4 downto 0)
    );
end adder;

architecture addierer of adder is

signal temp : signed(4 downto 0);

begin

sum <= temp;

process(clk)
begin
   if rising_edge(clk) then
       temp <= (resize(a,5) + resize(b,5));
   end if;
end process;

end addierer;

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
entity adder is
  port(
      clk : in  std_ulogic;
      a   : in  signed(3 downto 0);
      b   : in  signed(3 downto 0);
      sum : out signed(4 downto 0)
    );
end adder;

architecture addierer of adder is

begin

  process
  begin
    wait until rising_edge(clk);
    sum <= ( resize( a, 5) + resize( b, 5));
  end process;

end addierer;

Autor: Oliver Wachter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ihr macht hier dem Herrn "Julia" die Hausaufgaben. Tzzz

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier meine Variante, ganz ohne Prozess... ;-)
entity adder is
  port(
      clk : in  std_ulogic;
      a   : in  signed(3 downto 0);
      b   : in  signed(3 downto 0);
      sum : out signed(4 downto 0)
    );
end adder;

architecture addierer of adder is
begin

  sum <= (resize(a,5) + resize(b,5)) when rising_edge(clk);

end addierer;

Oliver Wachter schrieb:
> Ihr macht hier dem Herrn "Julia" die Hausaufgaben.
Das ist doch sein oder ihr Problem...
Spätestens in der Prüfung muß er/sie es selber können.

Autor: Julia (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke sehr für die Hilfe und schnelle Antworten.
Wie sieht dann ein Code für Asynchron Addierer.

Nun, was ist aber der Unterschied zwischen asynchron und synchron 
Addierer? Asynchron wird der Carrierer etwa von einem Volladdierer zum 
anderen weitergeleitet.? ist so richtig? es geht eigentlich mehr um 
Verstehen.


Danke euch nochmal ..

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Julia schrieb:
> Wie sieht dann ein Code für Asynchron Addierer.
So:
entity adder is
  port(
 ---     clk : in  std_ulogic;
      a   : in  signed(3 downto 0);
      b   : in  signed(3 downto 0);
      sum : out signed(4 downto 0)
    );
end adder;

architecture addierer of adder is
begin

  sum <= (resize(a,5) + resize(b,5)); --- when rising_edge(clk);

end addierer;

> Nun, was ist aber der Unterschied zwischen asynchron und synchron
> Addierer?
Der Takt.

> Asynchron wird der Carrierer etwa von einem Volladdierer zum
> anderen weitergeleitet.?
Das Carry ergibt sich automatisch und hat mit synchron/asynchron nichts 
zu tun...

Autor: Julia (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Julia schrieb:
> Danke sehr für die Hilfe und schnelle Antworten.
> Wie sieht dann ein Code für Asynchron Addierer.
>
> Nun, was ist aber der Unterschied zwischen asynchron und synchron
> Addierer? Asynchron wird der Carry etwa von einem Volladdierer zum
> anderen weitergeleitet.? ist so richtig? es geht eigentlich mehr um
> Verstehen.
>
>
> Danke euch nochmal ..

Autor: Julia (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke schön an Euch... ich habe es verstanden..

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.