4 bit Addierer,synchron asynchron?

Gast #1933340
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
Gast #1933394
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.
Gast #1933426
Verschiedene Varianten für deine Kollegen, JuliO ;-)
1
entity adder is
2
  port(
3
      clk : in  std_logic;
4
      a : in signed(3 downto 0);
5
      b : in signed(3 downto 0);
6
      sum  : out signed(4 downto 0)
7
    );
8
end adder;
9

10
architecture addierer of adder is
11

12
signal temp : signed(4 downto 0);
13

14
begin
15

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

19
end addierer;


1
entity adder is
2
  port(
3
      clk : in  std_logic;
4
      a : in signed(3 downto 0);
5
      b : in signed(3 downto 0);
6
      sum  : out signed(4 downto 0)
7
    );
8
end adder;
9

10
architecture addierer of adder is
11

12
signal temp : signed(4 downto 0);
13

14
begin
15

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

19

20
end addierer;


1
entity adder is
2
  port(
3
      clk : in  std_logic;
4
      a : in signed(3 downto 0);
5
      b : in signed(3 downto 0);
6
      sum  : out signed(4 downto 0)
7
    );
8
end adder;
9

10
architecture addierer of adder is
11

12
signal temp : signed(4 downto 0);
13

14
begin
15

16
sum <= temp;
17

18
process(clk)
19
begin
20
   if rising_edge(clk) then
21
       temp <= (resize(a,5) + resize(b,5));
22
   end if;
23
end process;
24

25
end addierer;
Gast #1933463
1
entity adder is
2
  port(
3
      clk : in  std_ulogic;
4
      a   : in  signed(3 downto 0);
5
      b   : in  signed(3 downto 0);
6
      sum : out signed(4 downto 0)
7
    );
8
end adder;
9

10
architecture addierer of adder is
11

12
begin
13

14
  process
15
  begin
16
    wait until rising_edge(clk);
17
    sum <= ( resize( a, 5) + resize( b, 5));
18
  end process;
19

20
end addierer;
Moderator (Firma: Titel) Persönliche Seite #1933663
Hier meine Variante, ganz ohne Prozess... ;-)
1
entity adder is
2
  port(
3
      clk : in  std_ulogic;
4
      a   : in  signed(3 downto 0);
5
      b   : in  signed(3 downto 0);
6
      sum : out signed(4 downto 0)
7
    );
8
end adder;
9

10
architecture addierer of adder is
11
begin
12

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

15
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.
Gast #1933692
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 ..
Moderator (Firma: Titel) Persönliche Seite #1933700
Julia schrieb:
> Wie sieht dann ein Code für Asynchron Addierer.
So:
1
entity adder is
2
  port(
3
 ---     clk : in  std_ulogic;
4
      a   : in  signed(3 downto 0);
5
      b   : in  signed(3 downto 0);
6
      sum : out signed(4 downto 0)
7
    );
8
end adder;
9

10
architecture addierer of adder is
11
begin
12

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

15
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...
Gast #1933730
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 ..

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.