240 likes | 388 Views
Digitaalskeemide projekteerimine ja test VHDL ja digitaalskeemide modelleerimine. Peeter Ellervee www.ttu.ee/users/lrv lrv@cc.ttu.ee. Soovunelm. VHDL-st skeemini. Tegelikkus. VHDL-st skeemini. Ideest mudelini modelleeritav spetsifikatsioon käitumuslik VHDL. Mudelist struktuurini
E N D
Digitaalskeemide projekteerimine ja testVHDL ja digitaalskeemide modelleerimine Peeter Ellerveewww.ttu.ee/users/lrv lrv@cc.ttu.ee VHDL ja digitaalskeemide modelleerimine
Soovunelm VHDL-st skeemini Tegelikkus VHDL ja digitaalskeemide modelleerimine
VHDL-st skeemini • Ideest mudelini • modelleeritav spetsifikatsioon • käitumuslik VHDL • Mudelist struktuurini • struktuur register-siirete tasemel • sünteesitav VHDL • Struktuurist skeemini (Jüri Põldre) • loogikaelemendid + ühendused • sünteesi juhtimine • Iteratsioonid! VHDL ja digitaalskeemide modelleerimine
ModelSim • Käivita programm • Siirdu töökataloogi • File -> Change Directory … -> C:\seminar • Loo VHDLi tööteek (kui pole veel tehtud) • File -> New Library … -> new & work • Kompileeri failid • Compile -> Compile … • võimalus redigeerida VHDL ja digitaalskeemide modelleerimine
ModelSim • Lae disain • Simulate -> Simulate … • sisene teeki work • vali konfiguratsioon (C) või olem (E) • Aktiveeri signaalide jälgimine • View -> Signals & Add -> Wave -> ... • Simuleeri • Simulate -> Run VHDL ja digitaalskeemide modelleerimine
Ülesanne • Valgusfoori kontroller sidestreet_light highway_car highway_light sidestreet_car VHDL ja digitaalskeemide modelleerimine
Valgusfoori kontroller • Kiirtee ja kõrvaltee • auto sensorid -- highway_car & sidestreet_car • valusfoorid -- highway_light & sidestreet_light • Tulede kombinatsioonid & lülitumiste järjekorrad kiirtee kõrvaltee kestus 1 roheline punane piiramata 2 vilkuv roheline punane 3 sek. 3 kollane kollane 2 sek. 4 punane roheline maksimaalselt 10 sek. 5 punane vilkuv roheline 3 sek. 6 kollane kollane 2 sek. • Ooteajad: • autole kõrvalteel - mitte üle 30 sekundi, kui kiirteel on autosid • roheline kõrvalteele - 10 sekundit (pluss 3” vilkuvat rohelist) VHDL ja digitaalskeemide modelleerimine
Ideest mudelini • Modelleeritav spetsifikatsioon • käitumuslik VHDL • Liidese ja andmetüüpide deklareerimine • abstraktsed andmetüübid • Käitumusliku spetsifikatsiooni loomine • kontrollvoog & kompleksed ajakontrolli käsud • Testkeskkonna loomine, simuleerimine • lihtne testimine -- kiire, kuid ebapiisav... • põhjalik testimine -- keerukas ja aeglane... VHDL ja digitaalskeemide modelleerimine
Ideest mudelini • Andmetüübid (pkg-enum.vhd) package TLC_data_types is -- Sensors type Sensor is (NoCar, Car); -- Lights type Light is (Red, Yellow, Green, GreenBlink); end TLC_data_types; • Olem (tlc-entity.vhd) use work.TLC_data_types.all; entity TLC is port ( highway_car : in Sensor; sidestreet_car : in Sensor; highway_light : out Light := Red; sidestreet_light : out Light := Red ); end TLC; VHDL ja digitaalskeemide modelleerimine
Ideest mudelini • Kontrollvoog & ajakontrolli käsud -- ... -- Waiting for no more than 25 seconds ... if highway_car = Car then wait until highway_car = NoCar for 25 sec; end if; -- ... • proovi… (või vt. tlc-bhv.vhd) • Testimine • kiire -- vali olem ja forsseeri signaalid • [signals] sidestreet_car -> Edit -> Force… • raske kontrollida kriitilisi olukordi VHDL ja digitaalskeemide modelleerimine
Ideest mudelini • Testimine • põhjalikum -- testkeskkond fikseeritud autode saabumisjadaga (vt. tlc-qtst.vhd) • universaalne -- testkeskkond muudetava autode liikumisjadaga (vt. tlc-tst.vhd) • Failid • pkg-enum.vhd (1) -- pakett “TLC_data_types” • cfg-[q]bhv.vhd (5) -- konfiguratsioon • tlc-[q]tst.vhd (4) -- testkeskkond • tlc-entity.vhd (2) -- olem “TLC” • tlc-bhv.vhd (3) -- arhitektuur “BEHAVIOR” VHDL ja digitaalskeemide modelleerimine
Mudelist struktuurini • Struktuur register-siirete tasemel • sünteesitav VHDL • (1) Riistvaralised andmetüübid • loendusandmetüübid -> bititüübid • (2) Käitumise täpsustamine #1 • vilkuv roheline • (3) Käitumise täpsustamine #2 • taimer (2 sec) ja loogika vilgutamiseks • ajakontrollikäsud -> sünk.käasud+taimer • (4) Sünteesitav VHDL (& struktuur) VHDL ja digitaalskeemide modelleerimine
Riistvaralised andmetüübid • Andmetüübid (pkg-enum.vhd) package TLC_data_types is -- Sensors subtype Sensor is bit; constant NoCar : Sensor := '0'; constant Car : Sensor := '1'; -- Lights -- "red" - bit 0, i.e., the uppermost light -- "yellow" - bit 1, i.e., the middle light -- "green" - bit 2, i.e., the lowermost light subtype Light is BIT_VECTOR (0 to 2); constant Red : Light := "100"; constant Yellow : Light := "010"; constant Green : Light := "001"; constant GreenBlink : Light := "000"; end TLC_data_types; VHDL ja digitaalskeemide modelleerimine
Riistvaralised andmetüübid • Testimine identne esialgsega • Failid • pkg-bitv.vhd (1) -- pakett “TLC_data_types” • cfg-[q]bhv.vhd (5) -- konfiguratsioonid • tlc-[q]tst.vhd (4) -- testkeskkonnad • tlc-entity.vhd (2) -- olem “TLC” • tlc-bhv.vhd (3) -- arhitektuur “BEHAVIOR” • Kõik uuesti kompileerida! VHDL ja digitaalskeemide modelleerimine
Käitumise täpsustamine #1 • Rohelise tule vilkumine täpsustatud highway_light<=GreenBlink; wait for 3 sec; • on asendatud tsükliga for i in 1 to 6 loop highway_light <= GreenBlink; wait for 0.25 sec; highway_light <= Green; wait for 0.25 sec; end loop; • Uued failid • cfg-bhv2.vhd -- konfiguratsioon (pikk test) • tlc-bhv2.vhd -- arhitektuur “bhv_refined” VHDL ja digitaalskeemide modelleerimine
Käitumise täpsustamine #2 • Esmane tükeldamine neljaks alamosaks: • (1) Taimeri taktsignaal sagedusega 2 Hz (määratud rohelise tule vilkumissagedusega), kasutatav ka süsteemse taktina • (2) ja (3) Sama-aegne protseduur vilkuvat roheliset tekitava kombinatoorse loogika jaoks • (4) Kontrollvoog, kuhu on sisse toodud taktsignaal (timer) ja ajakontrolli käsud on asendatud sünkroniseerimiskäskude ja loenduri kombinatsiooniga • Protseduur “WaitFor” asendamaks “wait for …” käske VHDL ja digitaalskeemide modelleerimine
Käitumise täpsustamine #2 • Teisendusi -- Waiting for no more than 25 seconds ... if highway_car = Car then wait until highway_car = NoCar for 25 sec; end if; • on asendatud -- Waiting for no more than 25 seconds ... if highway_car = Car then for counter in 0 to 49 loop -- 25 seconds exit when highway_car = NoCar; wait on timer until timer='1'; end loop; end if; VHDL ja digitaalskeemide modelleerimine
Käitumise täpsustamine #2 • Uued failid • cfg-bhv-rtl.vhd -- konfiguratsioon (pikk test) • tlc-bhv-rtl.vhd -- arhitektuur “bhv_rtl” • Simuleerimine on oluliselt aeglasem • Aeg vaja paikka panna -- run 400 sec • Kontrollvoole vastav protsess on põhimõtteliselt sünteesitav kõrgtasemesünteesi vahendite poolt • Vajalikud võivad olla konkreetse sünteesivahendi iseärasustest tingitud muudatused VHDL ja digitaalskeemide modelleerimine
Sünteesitav VHDL • Registersiirete tasemele vastav kirjeldus • Sünteesitav enamike sünteesivahendite poolt (võib vajada pisitäpsustusi) • nt. teisendus “integer range 0 to 63” ->“unsigned(5 downto 0)” (IEEE 1164) • Struktuur • esialgse tükeldamise täpsustus • Täiendavad signaalid (nt. reset) • Kontrollvoog on asendatud automaadi ja loenduriga VHDL ja digitaalskeemide modelleerimine
Sünteesitav VHDL • Komponendid • (1) Arhitektuur “RTL”, mis seob komponendid (fail “tlc-rtl.vhd”). Sünteesitav (RTL mõistes). • (2) Taktgeneraator (olem “clock(bhv)” failis “tlc-rtl.vhd”). Genereerib taimeri 2 Hz signaali, süsteemse taktsignaali (100 Hz) ja algnullimis-signaali. • (3) Vilkuvat rohelist tekitav kombinatoorne loogika (olem “BlinkLights(bhv)” failis “tlc-rtl-blnk.vhd”). Sünteesitav. • (4) Kontroller automaadi ja loendurina (olem “Controller(RTL)” failis “tlc-rtl-ctrl.vhd”). Sünteesitav. VHDL ja digitaalskeemide modelleerimine
state highway_light_sgn sidestreet_light_sgn highway_light_new sidestreet_light_new next_state BlinkLights highway Clock Controller BlinkLights sidestreet highway_car sidestreet_car reset cnt reg f-n TLC highway_light sidestreet_light timer reset_counter counter_out clk Controller(RTL) Sünteesitav VHDL VHDL ja digitaalskeemide modelleerimine
Sünteesitav VHDL • VHDL konstruktsioone • automaadi olek -- FSM state type state_type is (highway_green, highway_wait_25sec, highway_wait_25sec_loop, ... sidestreet_yellow, sidestreet_yellow_loop); signal state, next_state: state_type; • abisignaalid • register->komb.loogika: “highway_light_sgn” • komb.loogika-> register: “highway_light_new” • taimeri väärtus & nullimine VHDL ja digitaalskeemide modelleerimine
Sünteesitav VHDL • VHDL konstruktsioone next_state <= state; -- ... case state is -- ... -- Waiting for no more than 25 seconds ... when highway_wait_25sec => if highway_car=NoCar then next_state <= highway_blink; end if; reset_counter <= '1'; next_state <= highway_wait_25sec_loop; when highway_wait_25sec_loop => if highway_car=NoCar or counter_out >= 50 then next_state <= highway_blink; end if; -- ... VHDL ja digitaalskeemide modelleerimine
Sünteesitav VHDL • Uued failid • cfg-[q]rtl.vhd -- konfiguratsioonid • tlc-rtl.vhd -- arhitektuur “RTL” • tlc-rtl-blnk.vhd -- vilkuv roheline [BinkLights(bhv)] • tlc-bhv-rtl.vhd -- kontroller+taimer [Controller(RTL)] • Simuleerimine on väga aeglane • Aeg vaja paikka panna • run 50 sec [konfiguratsioon “tlc-qrtl”] • run 400 sec [konfiguratsioon “tlc-rtl”] • Lõplik kontroll lõuna ajal... VHDL ja digitaalskeemide modelleerimine