4 bit Addierer,synchron asynchron?

Gast #1933340
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
Gast #1933394
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.
Gast #1933426
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
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 ..
Moderator (Firma: Titel) Persönliche Seite #1933700
Lesenswert?
• ▲
▼
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
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 ..

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