[vhdl] for generate, vektoren zuweisen..

Gast #2172883
Lesenswert?
• ▲
▼
Guten Morgen an alle..


folgendes problem:

ich habe einen BCD Addierer, welcher 2 4 bit vektoren + carry addiert, 
und ein carry ausgibt.

dieser BCD Addierer soll nun benutzt werden, um einen N stellen BCD 
addierer zu realisieren.
der hat natürlich N*4 Bit eingänge, und soll intern als component den 
BCD Addierer verwenden, mittels einer for.. generate anweisung.

leider hab ich grad irgendwie schwierigkeiten mit der syntax, wie sage 
ich der for generate, das bei jedem i 4 bit des eingangsvektors an den 
eingang der komponente gelegt werden müssen?

dank im vorraus..
1
library ieee;
2
use ieee.std_logic_1164.all;
3

4
entity BCDAddRC is
5
generic (n: natural :=4);                --Wortbreite
6
      
7
   port (A, B  : in std_logic_vector (4*n-1 downto 0);  --n*4 Bit Eingangsvektoren fuer Summanden
8
      CIN  : in std_logic;                --1 Bit Eingang fuer Uebertrag
9
      S    : out std_logic_vector (4*n-1 downto 0);  --n*4 Bit Summe
10
      COUT  : out std_logic);                --1 Bit Ausgang fuer Uebertrag
11
end entity BCDAddRC;
12

13
architecture VERHALTEN of BCDAddRC is
14
  signal C : std_logic_vector (0 to n);    
15
  
16
  component BCDAdd is
17
    port (CA, CB  : in std_logic_vector (3 downto 0); --4 Bit Eingangsvektoren fuer Summanden
18
      CCIN  : in std_logic;                --1 Bit Eingang fuer Uebertrag
19
      CS    : out std_logic_vector (3 downto 0);  --4 Bit Summe
20
      CCOUT  : out std_logic);                --1 Bit Ausgang fuer Uebertrag
21
  end component BCDAdd;
22
  
23
begin
24
C(0) <= CIN;                          --Eingang des gesamtuebertrages
25
gen : for i in 0 to n-1 generate
26
  fm: BCDAdd port map ( A( i*4, i*4+1, i*4+2, i*4+3),
27
                 B( i*4, i*4+1, i*4+2, i*4+3),
28
                 C(i),
29
                 S(i*4, i*4+1, i*4+2, i*4+3),
30
                 C(i+1));
31
end generate gen;
32
COUT <= C(n);
33

34
end architecture VERHALTEN;
Moderator (Firma: Titel) Persönliche Seite #2173020
Lesenswert?
• ▲
▼
dunno.. schrieb:
> wie sage ich der for generate, das bei jedem i 4 bit des
> eingangsvektors an den eingang der komponente gelegt werden müssen?
Ausrechnen?
1
-- so vielleicht:
2
 fm: BCDAdd port map ( A(i*4+3 downto i*4),
3
                       B(i*4+3 downto i*4),
4
                       C(i),
5
                       S(i*4+3 downto i*4),
6
                       C(i+1));
7
 
8
-- oder so:
9
 fm: BCDAdd port map ( CA(3) => A(i*4+3),
10
                       CA(2) => A(i*4+2),
11
                       CA(1) => A(i*4+1),
12
                       CA(0) => A(i*4+0),
13
                       CB(3) => B(i*4+3),
14
                       CB(2) => B(i*4+2),
15
                       CB(1) => B(i*4+1),
16
                       CB(0) => B(i*4+0),
17
                       CCIN  => C(i),
18
                       CS(3) => S(i*4+3),
19
                       CS(2) => S(i*4+2),
20
                       CS(1) => S(i*4+1),
21
                       CS(0) => S(i*4+0),
22
                       CCOUT => C(i+1));
23

24
-- ich würde es mit expliziten Zuweisungen machen:
25
 fm: BCDAdd port map ( CA    => A(i*4+3 downto i*4),
26
                       CB    => B(i*4+3 downto i*4),
27
                       CCIN  => C(i),
28
                       CS    => S(i*4+3 downto i*4),
29
                       CCOUT => C(i+1));
Gast #2173206
Lesenswert?
• ▲
▼
Lothar Miller schrieb:
> -- ich würde es mit expliziten Zuweisungen machen:
>  fm: BCDAdd port map ( CA    => A(i*4+3 downto i*4),
>                        CB    => B(i*4+3 downto i*4),
>                        CCIN  => C(i),
>                        CS    => S(i*4+3 downto i*4),
>                        CCOUT => C(i+1));

Finde ich auch immer am schönsten, Zuweisung nach Position ist immer 
eine beliebte Fehlerquelle.

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