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:
 
Search WWH ::




Custom Search