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


von Julia (Gast)


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

von GALlier (Gast)


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.

von Dietrich (Gast)


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;

von Duke Scarring (Gast)


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;

von Oliver Wachter (Gast)


Lesenswert?

Ihr macht hier dem Herrn "Julia" die Hausaufgaben. Tzzz

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

von Julia (Gast)


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 ..

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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...

von Julia (Gast)


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 ..

von Julia (Gast)


Lesenswert?

Danke schön an Euch... ich habe es verstanden..

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.