VHDL-Forum

 
Sie sind nicht eingeloggt.
LoginLogin Kostenlos anmeldenKostenlos anmelden
BeiträgeBeiträge MembersMitglieder SucheSuche HilfeHilfe
VotesUmfragen FilesDateien CalendarKalender BookmarksBookmarks
Code-Parser (Tabelle -> FSM)

Anfang   zurück   weiter   Ende
Autor Beitrag
Steve D.
Gast
New PostErstellt: 14.11.10, 23:57  Betreff:  Code-Parser (Tabelle -> FSM)  drucken  weiterempfehlen Antwort mit Zitat  

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
nach oben
Sortierung ndern:  
Anfang   zurück   weiter   Ende
Seite 1 von 1
Gehe zu:   
Search

powered by carookee.com - eigenes profi-forum kostenlos

Design © trevorj