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
libraryieee;
2
useieee.std_logic_1164.all;
3
4
entityBCDAddRCis
5
generic(n:natural:=4);--Wortbreite
6
7
port(A,B:instd_logic_vector(4*n-1downto0);--n*4 Bit Eingangsvektoren fuer Summanden
8
CIN:instd_logic;--1 Bit Eingang fuer Uebertrag
9
S:outstd_logic_vector(4*n-1downto0);--n*4 Bit Summe
10
COUT:outstd_logic);--1 Bit Ausgang fuer Uebertrag
11
endentityBCDAddRC;
12
13
architectureVERHALTENofBCDAddRCis
14
signalC:std_logic_vector(0ton);
15
16
componentBCDAddis
17
port(CA,CB:instd_logic_vector(3downto0);--4 Bit Eingangsvektoren fuer Summanden
18
CCIN:instd_logic;--1 Bit Eingang fuer Uebertrag
19
CS:outstd_logic_vector(3downto0);--4 Bit Summe
20
CCOUT:outstd_logic);--1 Bit Ausgang fuer Uebertrag
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:BCDAddportmap(A(i*4+3downtoi*4),
3
B(i*4+3downtoi*4),
4
C(i),
5
S(i*4+3downtoi*4),
6
C(i+1));
7
8
-- oder so:
9
fm:BCDAddportmap(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:
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.