Hardware Reference
In-Depth Information
5.4.5 Konstanten- und Datentypdefinitionen
Mit der Befehlssatzdefinition und der Präzisierung der Pipeline-Abläufe ist
der informale Teil des Prozessorentwurfs abgeschlossen und es folgt die schritt-
weise Entwicklung der VHDL-Beschreibung. Diese beginnt damit, alle bereits
getroffenen Festlegungen in einem Package in Form von Konstanten- und Da-
tentypdefinitionen zusammenzufassen.
Im vergangenen Abschnitt wurden folgende Grundparameter für den Pro-
zessor festgelegt:
constant
cInstAdrBreite:natural:=
8
;
-- Befehlsadressbreite
constant
cInstrBreite :natural:=
12
;
-- Befehlswortbreite
constant
cRegAdrBreite :natural:=
3
;
-- Registeradressbreite
constant
cOpcodeBreite :natural:=
4
;
-- Operationscodebreite
constant
cDatenBreite :natural:=
8
;
-- Datenwortbreite
Die Datentypen für die Register und Bitvektorkonstanten seien Untertypen
von std_logic_vector mit der entsprechenden Bitanzahl:
subtype
tInstrAdr
is
std_logic_vector(cInstAdrBreite-
1
downto
0
);
subtype
tInstr
is
std_logic_vector(cInstrBreite -
1
downto
0
);
subtype
tRegAdr
is
std_logic_vector(cRegAdrBreite -
1
downto
0
);
subtype
tOpcode
is
std_logic_vector(cOpcodeBreite -
1
downto
0
);
subtype
tDaten
is
std_logic_vector(cDatenBreite -
1
downto
0
);
Für die Blockspeicher sind zwei Datentypen festzulegen, zum einen ein Feld-
typ für Befehle als Elemente zur Modellierung des Befehlsspeichers und zum
anderen ein Feldtyp mit Daten als Elemente zur Modellierung des Register-
satzes, des Datenspeichers und des Konstantenspeichers:
type
tInstrMem
is array
(natural
range
<>)
of
tInstr;
type
tDatMem
is array
(natural
range
<>)
of
tDaten;
Die Indexbereiche für die Befehlsbestandteile in dem in Abb. 5.24 definierten
Befehlssatz lassen sich in VHDL in Typdefinitionen codieren:
type
tInstrRA
is range
(
2
downto
0
)
of
std_logic;
type
tInstrRB
is range
(
5
downto
3
)
of
std_logic;
type
tInstrRY
is range
(
2
downto
0
)
of
std_logic;
type
tInstrOp
is range
(
9
downto
6
)
of
std_logic;
type
tInstrC8
is range
(
10
downto
3
)
of
std_logic;
type
tInstrC2
is range
(
7
downto
6
)
of
std_logic;
type
tInstrBed
is range
(
5
downto
3
)
of
std_logic;
11109876543210
1
01
0 1
c8
ra
opc ra
rb
rb
ra
ra
ra
ra
ra
0
0
c2
c2
c2
rb
0
0
0
0
0
0
0
0
1
1
rb
01
0
0
0
0
11
rb
bed
1
0
Die Konstanten zur Befehlsunterscheidung sollen gleichermaßen den Wert und
den Indexbereich beschreiben: