VHDL-Forum - Anfänger

Code-Parser (Tabelle -> FSM)

Code-Parser (Tabelle -> FSM)

Hallo zusammen,
ich arbeite zur Zeit an einem Projekt für die Uni. Darin geht es darum einen Mikroprozessor-Kern zu schreiben. Dazu gibt es ein Rechenwerk und zwei verschiedene Steuerwerke - eines als State-Machine (FSM) und eines ist mikroprogrammierbar realisiert. Am Ende sollen diese beiden Lösungen dann verglichen werden.

Meine Aufgabe war zunächst die FSM-Beschreibung des Steuerwerks.

Als ich angefangen habe mir Gedanken über den Aufbau der FSM zu machen kam meinem Prof eine neue Idee: Ich soll eine Prozedur schreiben, die aus der nachfolgend dargestellten Tabelle automatisch die FSM erzeugt.

Auszug aus der Tabelle:
______________________________
TYPE TWord IS RECORD
adr: TAdr; -- Folgeadresse: 9 Bitstellen
sel1: std_logic; -- Multiplexer1: 1 Bitstelle, 0 from uIR, 1 from IR
sel2: std_logic; -- Multiplexer2: 1 Bitstelle
cntrl: TCntrl; -- Steuervektor: 36-11=25 Bitstellen
END RECORD;

TYPE TRam IS ARRAY (natural RANGE ) OF TWord;

CONSTANT mem: TRam(0 TO SIZE-1) := (
-- Reset-Sequenz:
-- 1. PC := 0x07FE, SP := 0x3F, CCR := "00000"
16#000# => ( 16#001#, '0', '0', (wen_uCR=>'0', wen_AC=>'0', wen_IX=>'0', sel_data=>"00000", adr_mode=>IMM_MODE, fnt_PC=>PC_RST, fnt_SP=>SP_RST, ENA=>'0', ENB=>'0', WEA=>'0', wen_CF=>'1', wen_NZ=>'1', wen_HF=>'1', wen_IF=>'1', hlt=>'0') ),
-- 2. MR := M[PC], PC := PC + 1 /* low address byte */
16#001# => ( 16#002#, '0', '0', (wen_uCR=>'0', wen_AC=>'0', wen_IX=>'0', sel_data=>"00000", adr_mode=>IMM_MODE, fnt_PC=>PC_INC, fnt_SP=>SP_NCG, ENA=>'1', ENB=>'0', WEA=>'0', wen_CF=>'0', wen_NZ=>'0', wen_HF=>'0', wen_IF=>'0', hlt=>'0') ),
-- 2. AR := M[PC] /* high address byte */
16#002# => ( 16#003#, '0', '0', (wen_uCR=>'0', wen_AC=>'0', wen_IX=>'0', sel_data=>"00000", adr_mode=>IMM_MODE, fnt_PC=>PC_NCG, fnt_SP=>SP_NCG, ENA=>'0', ENB=>'1', WEA=>'0', wen_CF=>'0', wen_NZ=>'0', wen_HF=>'0', wen_IF=>'0', hlt=>'0') ),
-- 3. PC := MR & AR
16#003# => ( 16#004#, '0', '0', (wen_uCR=>'0', wen_AC=>'0', wen_IX=>'0', sel_data=>"00000", adr_mode=>EXT_MODE, fnt_PC=>PC_ULD, fnt_SP=>SP_NCG, ENA=>'0', ENB=>'0', WEA=>'0', wen_CF=>'0', wen_NZ=>'0', wen_HF=>'0', wen_IF=>'0', hlt=>'0') ),
______________________________


Die Zustände der FSM wären ja einfach die Zahlen (16#000#). In C wüsste ich auch sofort wie ich das machen soll (einlesen, parsen, ...), in VHDL aber weniger. Mit den Befehlen READ und WRITE habe ich mich bereits grundlegend vertraut gemacht.

Aber:
Wie lese ich den Code aus der selben Datei ein?
und
Wie soll ich darüber parsen? (Also die einzelnen Nutzdaten aus den Zeilen extrahieren)

Danke im voraus