Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Praktika návrhu číslicových obvodů Dr.-Ing. Martin Novotný Katedra číslicového návrhu Fakulta informačních technologií ČVUT v Praze Miloš Bečvář, Martin Daněk, Jan Schmidt, Martin Novotný, 2006-2011 1
Podmnožiny jazyka VHDL Zaměříme se na RTL VHDL (červená a zelená oblast) Syntetizovatelný RTL popis VHDL RTL standard podporovaný špičkovými syntézními nástroji (Leonardo, Synopsys, Synplify) Úplný jazyk VHDL použitelný pro simulaci (testbench) podporovaný simulátory (ModelSim) Syntetizovatelný RTL popis Podmnožina RTL VHDL podporovaná levnými syntézními nástroji (Xilinx XST) 2
Popis automatu 3
Konečný automat (FSM) vstup pouze pro Mealy FSM přechodová funkce registr stavu příští stav stav výstupní funkce výstup clk reset 4
Popis FSM ve VHDL Jazyk VHDL nezná pojem automatu. Existuje mnoho způsobů jak popsat FSM ve VHDL. Liší se v tom, jak je reprezentován vnitřní stav, kolik procesů je použito, jestli jsou použity signály nebo proměnné pro uchování vnitřního stavu, atd. Některé syntézní nástroje jsou schopny provádět optimalizace FSM, ale musí automat nejprve rozpoznat. Je proto vhodné použít takový popis, který to usnadní. 5
Metoda se 3 procesy vstup přechodová funkce registr stavu příští stav stav výstupní funkce výstup clk reset Proces 1 (kombinační): přechodová funkce. vstupy: stav a vstup FSM. výstup: příští stav Proces 2 (sekvenční): registr stavu vstupy: příští stav výstup: (aktuální) stav Proces 3 (kombinační): výstupní funkce. vstupy: stav (a případně vstup FSM) výstup: výstup FSM 6
FSM - příklad RnW= 0 Write oe<= 0 ; we<= 1 ; start= 0 start= 1 Addr oe<= 0 ; we<= 0 ; start= 1 Init oe<= 0 ; we<= 0 ; RnW= 1 Read oe<= 1 ; we<= 0 ; Finish oe<= 0 ; we<= 0 ; start= 0 7
Implementace FSM RnW start tranp next_state clkp current_state outp oe we clk reset 8
Definice typu pro vnitřní stav Pro signály obsahující následující a aktuální vnitřní stav FSM je vhodné použít výčtový typ. Zvýší se tím přehlednost popisu FSM. Konkrétní zakódování FSM se určí až v době překladu. Nelze však předepsat chování mimo vyjmenované stavy. type T_STATE is (INIT, ADDR, READ, WRITE, FINISH); signal CURRENT_STATE, NEXT_STATE : T_STATE; definice a použití typu 9
FSM proces 1 TRANP: process (CURRENT_STATE, START, RnW) begin case CURRENT_STATE is when INIT => if START= 1 then NEXT_STATE<=aDDR; else NEXT_STATE<=INIT; end if; when ADDR => if RnW= 0 then NEXT_STATE<=WRITE; else NEXT_STATE<=READ; end if; when READ WRITE => NEXT_STATE<=FINISH; when FINISH => if START= 0 then NEXT_STATE<=INIT; else NEXT_STATE<=FINISH; end if; end case; end process TRANP; CASE IF THEN ELSE 10
FSM proces 2 CLKP: process (CLK) begin if CLK= 1 and CLK EVENT then if RESET= 1 then CURRENT_STATE <= INIT; else CURRENT_STATE <= NEXT_STATE; end if end if; end process CLKP; 11
FSM proces 3 OUTP: process (CURRENT_STATE) begin case CURRENT_STATE is when INIT ADDR FINISH => OE<= 0 ; WE<= 0 ; when READ => OE<= 1 ; WE<= 0 ; when WRITE => OE<= 0 ; WE<= 1 ; end case; end process OUTP; 12