Vous êtes sur la page 1sur 251

rta:

FODOR ATTILA VRSHZI ZSOLT

BEGYAZOTT RENDSZEREK S PROGRAMOZHAT LOGIKAI ESZKZK


Egyetemi tananyag

2011

COPYRIGHT: 20112016, Fodor Attila, Dr. Vrshzi Zsolt, Pannon Egyetem Mszaki Informatikai Kar Villamosmrnki s Informcis Rendszerek Tanszk LEKTORLTA: Dr. Keresztes Pter, Szchenyi Istvn Egyetem Mszaki Tudomnyi Kar Automatizlsi Tanszk Creative Commons NonCommercial-NoDerivs 3.0 (CC BY-NC-ND 3.0) A szerz nevnek feltntetse mellett nem kereskedelmi cllal szabadon msolhat, terjeszthet, megjelentethet s eladhat, de nem mdosthat. TMOGATS: Kszlt a TMOP-4.1.2-08/1/A-2009-0008 szm, Tananyagfejleszts mrnk informatikus, programtervez informatikus s gazdasginformatikus kpzsekhez cm projekt keretben.

ISBN 978-963-279-500-3 KSZLT: a Typotex Kiad gondozsban FELELS VEZET: Votisky Zsuzsa AZ ELEKTRONIKUS KIADST ELKSZTETTE: Juhsz Lehel KULCSSZAVAK: begyazott rendszerek, CAN, FPGA, MicroBlaze, MODBUS, RTOS, VHDL. SSZEFOGLALS: Napjainkban a legtbb elektronikus eszkz kisebb nll mkdsre is alkalmas rszegysgbl ll, amelyek egy begyazott rendszert alkothatnak. Az els fejezet rviden sszefoglalja a begyazott rendszerek alapelveit, a msodik az FPGA (Field Programmable Gate Arrays) eszkzkkel s azok fejleszti krnyezetvel foglalkozik, amelyet a begyazott rendszerekben lehet hasznlni. Az FPGA-k a felhasznl ltal tbbszr tetszlegesen konfigurlhat kapuramkrk klnbz feladatok megvalstsnak igen szles spektrumt biztostjk: az algoritmusok vgrehajtsnak gyorstst szolgl tudomnyos szmtsoknl, a jelfeldolgozsban, a kpfeldolgozsban, a titkosts vagy az autipari alkalmazsok stb. terletn. A hagyomnyos ASIC VLSI technolgival szembeni nagy elnyk a relatv olcssg, a gyors prototpusfejlesztsi lehetsg, s nagyfok konfigurlhatsg. A jegyzetben a legnagyobb FPGA gyrt, a Xilinx chipek ltalnos felptst, funkciit, egy a Xilinx Spartan-3E sorozat FPGA-ra pl Digilent Nexys-2-es fejleszt krtyt, integrlt tervez-szoftver tmogatottsgt s programozsi lehetsgeit ismertetjk. Clul tztk ki, hogy a VHDL sszes nyelvi konstrukcijnak ttekintse helyett mindvgig az FPGA-s krnyezetekben alkalmazhat s szintetizlhat tervek lersra fkuszlunk, amely egyben szimullhat RTL szint VHDL megadst is jelenti. Nem a VHDL nyelvi szintaxisnak mlyrehat ismertetst kvetjk, hanem mindig egy konkrt gyakorlati pldn keresztl mutatjuk be a VHDL nyelvi elemkszletnek a szintzis szempontjbl legfontosabb rszeit.

Tartalomjegyzk
Rvidtsek ................................................................................................................................ 6 Felhasznlt FPGA eszkzk s fejleszt krnyezetek ........................................................... 9 Bevezets ................................................................................................................................. 10 1. Begyazott rendszerek ....................................................................................................... 11 1.1. Begyazott rendszerek defincija, kvetelmnyek, tipikus alkalmazsok .................................................................................................. 11 1.2. Idkezels s adattovbbts problmi ..................................................................... 14 1.2.1. Sorrendezsi s megegyezsi problmk ....................................................... 14 1.2.2. Lehetetlensgi ttel ........................................................................................ 14 1.2.3. Biznci tbornokok problmja (Byzantine generals problem) .................... 14 1.2.4. A Biznci-problma ....................................................................................... 15 1.2.5. temezs........................................................................................................ 16 1.2.6. Klasszikus temezsi algoritmusok ............................................................... 19 1.2.7. Task-ok kztti kommunikci ..................................................................... 21 1.2.8. Rendszerhvsok (kommunikci a kernellel)............................................... 24 1.3. Vals idej rendszerek, temezs, idztsek ............................................................ 25 1.4. Biztonsgkritikus rendszerek...................................................................................... 27 1.5. Kommunikcis protokollok ...................................................................................... 29 1.5.1. I2C busz .......................................................................................................... 29 1.5.2. SPI busz ......................................................................................................... 33 1.5.3. SPI s I2C sszehasonltsa ........................................................................... 35 1.5.4. Aszinkron soros kommunikci .................................................................... 35 1.5.5. RS 232 ........................................................................................................... 36 1.5.8. MODBUS protokoll....................................................................................... 39 1.5.9. PROFIBUS .................................................................................................... 41 1.5.10. CAN busz..................................................................................................... 43 1.5.11. CANopen ..................................................................................................... 52 1.5.12. LIN ............................................................................................................... 53
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

TARTALOMJEGYZK

1.5.13. FlexRay protokoll ........................................................................................ 55 1.5.14. MOST .......................................................................................................... 59 1.6. Monitorozs, diagnosztika, validci, mrs ............................................................. 59 1.7. Irodalomjegyzk az 1. fejezethez ............................................................................... 61 2. Programozhat logikai kapuramkrk, FPGA-k felptse, fejlesztkrnyezetek bemutatsa ................................................... 63 2.1. Bevezets, programozhat kapuramkrk, FPGA-k felptse, fejlesztkrnyezetek bemutatsa ............................................... 63 2.1.1. Xilinx FPGA-k ltalnos felptse ............................................................... 63 2.1.2. Digilent Inc. Nexys-2 fejlesztkrtya ............................................................ 66 2.1.3. Modellezs: tartomnyok s absztrakcis szintek ......................................... 68 2.1.4. Magas-szint hardver ler nyelvek............................................................... 70 2.1.5. Tervezs folyamata (Xilinx design flow) ...................................................... 70 2.2. Bevezets a VHDL nyelv hasznlatba. Nyelvi tpusok, kifejezsek, opertorok ..................................................................... 73 2.2.1 VHDL kialakulsnak rvid httere ............................................................... 73 2.2.2. VHDL alapvet nyelvi konstrukcik ............................................................. 74 2.2.3. Tpus deklarcik........................................................................................... 81 2.2.4. Szabvnyos logikai adat tpusok s opertorok, knyvtri csomagok ...................................................................................... 85 2.2.5. Szabvnyos IEEE std_logic_1164 csomag s opertorai .............................. 86 2.2.6. Szabvnyos IEEE numeric_standard csomag s opertorai .......................... 89 2.2.7. Nem szabvnyos IEEE knyvtri csomagok ................................................. 92 2.2.8. Konstansok, vltozk, jelek, s generic hasznlata ....................................... 92 2.2.9. Generl struktrk Generate utasts ........................................................ 98 2.3. VHDL konkurens s szekvencilis hozzrendelsi utastsok ................................ 99 2.3.1. Egyidej (konkurens) hozzrendelsi utastsok ........................................... 99 2.3.2. Szekvencilis hozzrendelsi utastsok...................................................... 108 2.4.Xilinx ISE krnyezet s az ISim szimultor hasznlata ............................................ 125 2.4.1. Xilinx fejleszt krnyezet, mint hasznlt keretrendszer rvid bemutatsa.......................................................................................... 125 2.4.2. Feladat megvalstsa Xilinx ISE segtsgvel ........................................... 127 2.4.3. Strukturlis modell szerinti ramkr felptse pldnyostssal ................ 128 2.4.4. Tervek tesztelshez tesztpad (test-bench) sszelltsa ............................. 131 2.4.5. Viselkedsi RTL szimulci Xilinx ISim segtsgvel ............................... 135 2.4.6. Knyszerfelttelek megadsa, szintzis s implementci:......................... 137 Tovbbi gyakorl feladatok ................................................................................... 141 2.5. Strukturlis s viselkedsi ramkri modellek megvalstsa ................................. 144 2.5.1. Strukturlis ramkri modellek ................................................................... 144 2.5.2. Viselkedsi ramkri modellek ................................................................... 152 2.6. Szekvencilis hlzatok............................................................................................ 158 Rvid ttekints ..................................................................................................... 158 Szekvencilis hlzatok felptse ........................................................................ 159 D-trolk s regiszterek ......................................................................................... 160
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

TARTALOMJEGYZK

Regiszterek ............................................................................................................ 165 Tovbbi feladatok .................................................................................................. 170 Regiszter tmbk ................................................................................................... 170 FSM: Vges llapot Automata modellek............................................................ 172 2.7. Tovbbi pldaprogramok VHDL-ben ...................................................................... 180 2.8. Komplex rendszerek tervezse VHDL segtsgvel ................................................ 203 2.8.1. Esettanulmny: VGA vezrl megvalstsa .............................................. 203 2.9. Begyazott rendszer sszelltsa Xilinx EDK hasznlatval .................................. 223 2.9.1. MicroBlaze begyazott szoft-processzor mag .......................................... 223 2.9.2 MicroBlaze maghoz kapcsold buszrendszerek ......................................... 225 2.9.3. Begyazott alaprendszer sszelltsa Xilinx XPS-ben............................... 226 Hardver implementlsa s generlsa .................................................................. 245 Alkalmazi szoftver implementlsa s fordtsa ................................................. 246 2.10. Begyazott tesztalkalmazs (TestMemory) letltse s tesztelse az FPGA krtyn ................................................................... 248 Irodalomjegyzk a 2. fejezethez ...................................................................................... 250

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

Rvidtsek
ABS ABEL ACK API ASIC ASIL BRAM CAL CAN CBSE CLB CMOS CPLD CRC DCM DSP EBD ECU EDA EDIF ESP FCFS FMEA FPGA Anti-lock Braking System Blokkolsgtl fkrendszer Advanced Boolean Expression Language Acknowledge Nyugtzs Application Program Interface Application Specific Integrated Circuit Alkalmazs specifikus IC v. Berendezs orientlt ramkrk Automotive Safety Integrity Level Integrlt Autipari Biztonsgi Szint Blokk RAM Dediklt, vletlen hozzfrs memriatmb CAN Application Layer CAN Alkalmazsi Rteg Controller Area Network Component-Based Software Engineering Komponens Alap Szoftverfejleszts Configurable Logic Block Konfigurlhat Logikai Blokk Complementer MOS Complex Programmable Logic Device Komplex, programozhat logikai eszkzk Ciklikus Redundancia Check Digital Clock Manager Digitlis rajel menedzser (ramkr) Digital Signal Processor Digitlis jelfeldolgoz processzor Electronic Brakeforce Distribution Elektronikus Fker Szablyoz Rendszer Electronic Control Unit Elektronikus Vezrl Egysg Electronic Design Automation Elektronikai tervezs-automatizls Electronic Digital Interchange Format Elektronikai tervek kzs digitlis formtuma Electronic Stability Program Elektronikus Menetstazbiliztor First Come First Served Failuremode and Effect Analysis Field Programmable Gate Arrays Felhasznl ltal programozhat kapu-ramkrk
Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

RVIDTSEK

FSM GPIO HDL HIL IEEE IP ISO JTAG LIN LRC LUT LVDS MAC MBD MDD MFQ MISO MISRA MOSI MSB MULT NACK OOP OSI PA PDA POF PROFIBUS PROFIBUSDP PROFIBUSFMS PROFIBUSPA RAM RR RS-232 RS-422 RS-485

Finite State Machine Vges llapot automata General Purpose IO ltalnos cl I/O Hardware Description Language Hardver Ler Nyelv Hardware-in the- Loop Institute of Electrical and Electronics Engineers Villamosmrnkk s elektrotechnikusok nemzetkzi szervezete Intellectual Property Szellemi termk International Standardisation Organisation Nemzetkzi Szabvnygyi Hivatal Joint Test Advisory Group Local Interconnect Network Longitudinal Redundancy Check Longitudinlis Redundancia Ellenrzs Look-Up Table Keressi tbla/Logikai fggvnygenertor FPGA-n Low Voltage Differential Signals Kis-feszltsg differencilis jelek Multiply And Accumulate Szorzat-sszeg kpz ramkri elem Model-Based Development Model Alap Fejleszts Model-Driven Development Model Vezrelt Fejleszts Multilevel Feedback Queues Master In Slave Out Motor Industry Software Reliability Association Master Out Slave In Most Significant Bit Legnagyobb Helyirtk Bit Multiplier Dediklt szorz Negative Acknowledge Negatv Nyugta Object Oriented Programming Objektum Orientlt Programozs Open Systems Interconnection Parking Assistant Parkols Knnyt Rendszer Personal Digital Assistant Plastic Optical Fiber Optikai Kbel Process Field Bus Process Field Bus Decentralized Peripherals Process Field Bus Fieldbus Message Specification Process Field Bus Decentralized Peripherals Random Access Memory Round-Robin Revised Standard 232 Revised Standard 422 Revised Standard 485

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

RVIDTSEK

RTC RTL RTOS RTU SCI SDS SIL SJF SMQ SOC SOPC SPI SRTF TCB TSP USART UCF VHDL XST

Real Time Clock Vals Idej ra Register Transfer Language/Level Regiszter tviteli szint Real-Time Operating System Vals Idej Operrcis Rendszer Remote Terminal Unit Serial Communication Interface Soros Kommunikcis Interfsz Smart Distributed System Softver In the Loop Shortest Job First Static Multilevel Queue System On-a Chip Egychipes rendszer System On-a Programmable Chip Egychipes programozhat rendszer Serial Peripherial Interface Soros perifria interfsz Shortest Remaining Time First Task Controll Block Taszk Vezrl Blokk Trailer Stability Program Utnfut Menetstabiliztor Program Universal Synchronous / Asynchronous Receiver Transmitter Univerzlis szinkron / aszinkron ad-vev User Constraints File Felhasznl ltal megadott felttelek (knyszerek) VHSIC (Very High Speed Integrated Circuit) HDL Nagyon-nagy sebessg Integrlt ramkrk Hardver Ler nyelven tmogatott tervezse Xilinx Synthesis Tool Xilinx Szintzis Eszkz

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

Felhasznlt FPGA eszkzk s fejleszt krnyezetek


Demonstrcis s oktatsi clokbl a jegyzetben konzisztens mdon a Xilinx ISE ingyenesen elrhet WebPack fejleszt krnyezetnek [WEBPACK] aktulis vltozatt (12.2) s a beptett ISim integrlt HDL szimultort, illetve az Xilinx EDK begyazott fejleszt rendszert hasznljuk a Digilent Inc. Nexys-2 FPGA-s fejleszt krtyjn, amely egy Xilinx Spartan-3E FPGA-t tartalmaz. Ugyan a pldk specifikusan ezen az FPGA-s krtyn lettek bemutatva s tesztelve, termszetesen ms Xilinx FPGA-kkal, vagy ms gyrtk (pl. Altera, Actel, Quicklogic stb.) FPGA-ival s azok fejleszt krnyezeteivel is hasznlhatak, bizonyos fok mdostsok utn. A pldkon keresztl az FPGA-k, mint jrakonfigurlhat szmtsi eszkzk alkalmazsnak szles spektrumt mutatjuk be rviden, bevezet jelleggel egyszer kapu-szint VHDL viselkedsi s strukturlis lersoktl, fontosabb VHDL nyelvi szerkezetekrl a Xilinx MicroBlaze 32-bites begyazott szoft-processzorn t, egszen az I/O perifrikig bezrlag (pl. VGA), amelyek mindegyike a mai FPGA-alap begyazott rendszerek egy-egy fontosabb komponenst kpezheti. Veszprm, 2011. mrcius 31.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

Bevezets
Napjainkban a legtbb elektronikus eszkz az kisebb nll mkdsre is alkalmas rszegysgbl ll, amelyek valjban egy begyazott rendszert alkotnak. A begyazott rendszerek ismerete nlklzhetetlen egy mai mrnk szmra. A jegyzet ehhez igyekszik segtsget nyjtani. A jegyzet kt fejezetre oszthat, az els fejezet rviden sszefoglalja a begyazott rendszerek alapelveit, a msodik fejezet pedig az FPGA eszkzkkel s azok fejleszti krnyezetvel foglalkozik. Napjainkban az FPGA-knak (Field Programmable Gate Arrays) a felhasznl ltal tbbszr tetszlegesen konfigurlhat, jrakonfigurlhat kapuramkrk, mint nagyteljestmny szmtsi eszkzk a klnbz feladatok megvalstsnak igen szles spektrumt biztostjk, akr az algoritmusok vgrehajtsnak gyorstst szolgl tudomnyos szmtsoknl, a jelfeldolgozsban, a kpfeldolgozsban, a titkosts vagy, akr az autipari alkalmazsok stb. terletn, fknt ott, ahol a feladatok prhuzamos vgrehajtsra van lehetsg. A hagyomnyos ASIC VLSI technolgival szembeni elnyk a relatv olcssg, a gyors prototpus-fejlesztsi lehetsg, s nagyfok konfigurlhatsg. Ebben a jegyzetben a legnagyobb FPGA gyrt, azaz a Xilinx chipek ltalnos felptst, funkciit, illetve egy kivlasztott Xilinx Spartan-3E sorozat FPGA-ra pl Digilent Nexys-2-es fejleszt krtyt, integrlt tervez-szoftver tmogatottsgt, s programozsi lehetsgeit ismertetjk. Napjainkban a legtbb ltez knyv s jegyzet a HDL nyelvek pontos szintaktikai elemkszletnek bemutatsra s szimullhat, de nem mindig szintetizlhat kdok megadsra trekszik. Jelen jegyzet ksztse sorn clul tztk ki, hogy a VHDL sszes nyelvi konstrukcijnak ttekintse helyett mindvgig az FPGA-s krnyezetekben alkalmazhat s szintetizlhat tervek lersra fkuszlunk, amely egyben szimullhat RTL szint VHDL megadst is jelenti. Tovbb sosem a VHDL nyelvi szintaxisnak mlyrehat ismertetst kvetjk, hanem mindig egy konkrt gyakorlati pldn keresztl mutatjuk be a VHDL nyelvi elemkszletnek a szintzis szempontjbl legfontosabb rszeit. A jegyzet mind mrnk-informatikusok, mind villamos-mrnkk szmra korszer, konkrt, gyakorlati ismereteket tartalmaz programozhat logikai eszkzkn megvalsthat begyazott, fleg mikroprocesszoros rendszerek tervezshez s fejlesztshez.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

1. fejezet Begyazott rendszerek


A mindennapi letben szinte folyamatosan begyazott rendszereket hasznlunk anlkl, hogy azok felptsvel mkdsvel tisztba lennnk. Amikor belnk egy autba termszetesnek vesszk annak klnbz minket segt funkciit (ABS, ESP, EBD, PA, TSP stb.). Amikor az autban megnyomjuk a gzpedlt termszetesnek vesszk azt, hogy az aut gyorsulni fog, ha megnyomjuk a fkpedlt, akkor pedig azt vrjuk, hogy az aut lassuljon. A modern autk esetben egy-egy ilyen egyszer mvelet kzben is tbb tzezer sornyi program fut le. A modern autk mkds kzben 5-15 milliszekundumonknt futtatnak le egy-egy vezrlsi ciklust, ami meghatrozza a gpjrm pontos menetdinamikai tulajdonsgait (sebessg, megcsszs, aut sodrodsa, becslt tapads stb.). A klnbz rendszerek bonyolultsgba csak akkor gondolunk bele, amikor egy-egy ilyen begyazott rendszer rszegysge meghibsodik s a hiba pontos okt meg kell tallni. Ez a fejezet az ilyen begyazott s biztonsgkritikus rendszek felptst, tervezsi s tesztelsi mdjait prblja rvid tmr formban bemutatni a rendelkzsre ll hely szkssge miatt. Mivel a szemlygpjrmvek fejldse szinte sszekapcsoldik a begyazott rendszerek fejldsvel ezrt a jegyzet els fejezete a legtbb pldt az autipar terletrl merti.

1.1. Begyazott rendszerek defincija, kvetelmnyek, tipikus alkalmazsok


A begyazott rendszer a (szmtgpes) hardver- s szoftverelemeknek kombincija, amely kifejezetten egy adott funkcit, feladatot kpes elltni. A begyazott rendszerek tartalmaznak olyan szmtgpes eszkzket, amelyek alkalmazs-orientlt clberendezsekkel vagy komplex alkalmazi rendszerekkel szervesen egybeplve azok autonm mkdst kpesek biztostani, vagy segteni. Az ipari gpek, gpkocsik, gygyszati eszkzk, fnykpezgpek, hztartsi eszkzk, replgpek, automatk s jtkok (csakgy, mint a ltvnyosabb mobiltelefonok s PDA-k) kz tartoznak szmtalan lehetsges host-ok a begyazott rendszerek szmra. A programozhat begyazott rendszerek, valamilyen programozsi interface-el vannak elltva, de a begyazott rendszerek programozsa specilis szoftverfejlesztsi stratgikat s technikkat ignyel.
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

12

1. BEGYAZOTT RENDSZEREK

Egyes opercis rendszereket s a nyelvi platformokat kimondottan a begyazott rendszerek piacra fejlesztettk ki, mint pldul a Windows XP Embedded s az EmbeddedJava. Sok vgfelhasznli termk jellemzje, hogy nagyon olcs mikroprocesszort tartalmaz s korltozott trolsi lehetsggel rendelkezik, ezeknl az eszkzknl ltalban az egyetlen alkalmazs az opercis rendszer rszt kpezi. Az elre elksztett program ezeknl az eszkzknl betltdik a RAM-ba (Random Access Memory), mint a programok a szemlyi szmtgpeken. Az iparban elfordul begyazott rendszereknek folyamatosan kapcsolatban kell lenni a krnyezetkkel, a mrseket klnbz fizikai/kmiai/biolgiai elven mkd szenzorokok s rzkelkn keresztl tudjk a berendezsek megvalstani. Ha ezek a rendszerek a monitorozson kvl mg valamilyen szablyozsi/vezrlsi funkcit is elltnak, akkor a technolgiai folyamatba be is kell avatkozniuk. Manapsg, szinte brmilyen tevkenysget vgezve a mindennapi letben, valsznleg hasznlunk olyan termket vagy szolgltatst, aminek az irnyad magatartsa szmtgpalap rendszer, ms nven begyazott rendszer. Ez a fejlds rinti az autipart is. A tbb begyazott elektronikus vezrl biztostja a mai jrmvekben az olyan jrm centrikus funkcit, mint pldul a motorvezrls, fkrsegt, blokkolsgtl stb, valamint az olyan utas kzpont rendszerek, mint a szrakoztats, ls/tkr ellenrzs s llts stb. A jegyzet igyekszik azt bemutatni, hogy ez a fejlds elkerlhetetlen volt, s igyekszik vzolni a fejlds f vonalait. Elszr az llami szablyozs, mint pldul a kipufoggz kros anyag sszettelnek a szablyozsa vagy a ktelez aktv biztonsgi berendezsek (pl. lgzskok), amelyek megszabjk a begyaz rendszer sszetett vezrlsi szablyait, trvnyeit. Msodik lpsknt a felhasznlk ignyeltek knyelmesebb, knnyebben s biztonsgosabban vezethet autt, tovbb az autgyrtk egy j innovatv termket akartak ltrehozni, amely sokkal jobban eladhat a gpjrmvezetk szmra. A vezetk ignyei s az autgyrtk ignyei is nvelik a gpjrm mszaki tartalmt s ezltal a fejlesztsi kltsgeket is nveltk. gy tnik, a mai elrehaladott szoftver-technolgia j kompromisszumot kpes teremteni az eszkzk s a termk fejlesztsi kltsgei kztt, gy kpes megknnyteni az j szolgltatsok bevezetst az autban. Ahhoz, hogy meghatrozzuk az alkalmazott begyazott elektronikus rendszerek kvetelmnyeit, osztlyozni kell a rendszer funkcionlis terleteit. A technolgiai megoldsok, a hardver-sszetevk, valamint a szoftverfejleszts megoldsai s kltsgei a kvetelmnyeket is befolysoljk. A gazdasgi megfontolsok s megszortsok is megvltoztatjk a rendszer kvetelmnyeit, az ilyen jelleg befolysols ltalban a kvetelmnyek enyhtse irnyba hat. A fejlesztsi kltsgek cskkentst a rgi project-ek rszegysgeinek jrafelhasznlsval lehet elrni. Ezrt a nagy gyrtk igyekeznek a fejlesztseiket a leginkbb hardver / szoftver fggetlen mdon elkszteni, gy hatkony kzs fejlesztseket lehet ltrehozni a begyazott elektronikus architektrk valamint a hardver s szoftver egysgek jrafelhasznlsval. A szoftverfejleszts terletn az objektum orientlt programozs (Object Oriented Programming OOP) nyjt nagy segtsget. Az autipar terletn jelen pillanatban, a CAN kommunikci tlslyban van az ECU-k (Electronic Control Unit) sszekapcsolsban, de

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

1.1. BEGYZOTT RENDSZEREK DEFINCIJA

13

mr msfle megoldsok is felmerltek (pldul a FlexRay1) az ECU-k sszekapcsolsra s integrlsra ms mechatronikai rendszerrel. Az autba beptett szoftverek nvekv sszetettsge jl mutatja a megfelelen irnytott fejlesztsi folyamatot. Autonm s automatikus kzti jrmvek ltrehozshoz elengedhetetlen a kommunikci autk s a krnyezetk kztt. Az integrlt kzlekedsi megoldsok lesznek a f kulcsszavai a jv jrminek fejlesztse kzben. Ezek a trendek kpesek a motorizlt forgalmat megfigyelni s kpesek clzottan beavatkozni a forgalomba gy cskkentve a zsfoltsgot, a krnyezetszennyezst, valamint biztonsgosabb kpes tenni a kzlekedst. (Gondoljunk pldul a Google azon megoldsra, hogy a GPS-es Android-os opercis rendszerrel rendelkez telefonok kommuniklnak a Google szervereivel s folyamatosan kldik a pozcijukat, amely segtsgvel meg lehet mondani, hogy melyik ton milyen sebessggel mozognak a jrmvek. Ezzel a megoldssal el lehet kerlni azokat az utakat, amelyeken torlds van.) Ebben az esetben a jrm fejlesztst mr nem lehet kln-kln fejlesztsi projectknt kezelni, hanem egy bonyolult rendszer rsznek kell tekinteni. Az ISO 26262 szabvny foglalkozik kzti forgalom szervezsvel s irnytsval, a szabvny szilrd, strukturlt tervezsi mdszereket ajnl az alkalmazknak. A nemzetkzi kezdemnyezseknek ksznheten j koncepcik alakultak ki autipari rendszertervezk krben: a modell-alap fejleszts (Model-Based Development MBD), a modell-irnytott fejleszts (Model-Driven Development MDD) s a komponens alap szoftverfejleszts (Component-Based Software Engineering CBSE). A begyazott rendszerek tervezsi fzisban kell a rendszertervezknek kidolgozniuk a rendszer pontos specifikcijt, termszetesen a megrendel bevonsval. Ekkor kell lefektetni a pontos kvetelmnyeket rendszer mkdsrl. Termszetesen az nem megengedhet, hogy a rendszer csak egy bizonyos kvnalmat teljestsen s ms kvetelmnyeket pedig ne tartson be, pldul a teljes rendszer szmra fontos biztonsgi elrsok megszegse nem lehet elfogadhat. Ha a fontosabb kvnalmakat figyelembe vesszk, akkor kett f kvetelmny lehet a begyazott rendszerknl: Id: Egy bekvetkez esemny lereaglst a rendszer egy meghatrozott idn bell kezdje el Biztonsg: A rendszer feladata egy olyan rendszer vezrlse, amely hibs mkds esetn egezsgkrosods vagy komoly anyagi kr kvetkezne be. E filozfia mentn tudjuk definilni a begyazott rendszerek kett f alcsoportjt: Vals idej rendszer, melynl az idkvetelmnyek betartsa a legfontosabb szempont. A vals idej rendszerekkel rszletesebben foglalkozik a jegyzet 1.3. fejezete. Biztonsgkritikus rendszer, melynl a biztonsgi funkcik sokkal fontosabbak, mint az idkvetelmnyek betartsa. A biztonsgkritikus rendszerekkel rszletesebben foglalkozik a jegyzet 1.4. fejezete.

Jelenleg mr a szriban gyrtott autkban is alkalmazzk, pldul BMW X5. Biztonsgkritikus funkcik mkdshez nem szksges a FlaxRay mkdse. www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

14

1. BEGYAZOTT RENDSZEREK

A valsgban nem lehet ilyen knnyedn a rendszereket csoportostani, mert lehetnek olyan vals idej rendszerek is, melyek rendelkeznek a biztonsgkritikus rendszerek bizonyos tulajdonsgaival. A szabvnyok s a trvnyek szablyozzk azt, hogy milyen alkalmazsoknl kell ktelezen biztonsgkritikus rendszert alkalmazni.

1.2. Idkezels s adattovbbts problmi


Az idkezels rendkvl fontos a vals idej rendszerek esetben, mivel egy-egy bekvetkez esemnyt egy meghatrozott idn bell el kell kezdeni az esemny feldolgozst. A kvetelmnyek szigorsga alapjn kt fle vals idej rendszert klnbztethetnk meg: a Hard real-time s a Soft real-time rendszert. A Hard real-time rendszerek esetben szigor kvetelmnyek vannak elrva, s a kritikus folyamatok meghatrozott idn bell feldolgozsra kerlnek. Soft real-time rendszer esetben a kvetelmnyek kevsb szigorak s a kritikus folyamatokat a rendszer mindssze nagyobb prioritssal dolgozza fel.

1.2.1. Sorrendezsi s megegyezsi problmk


Egy esemny a rendszerllapot detektlhat, pillanatszer vltozsa. Elfordulhat, hogy ha kt csompont egymst kvet e1 s e2 esemnyrl tjkoztatst ad kt msik csompontnak, akkor az zenetek megrkezsi sorrendje el fog trni az esemnyek idbeni sorrendjtl. Q csompont a korbban bekvetkezett esemnyrl ksbb szerez tudomst. Ezen relativisztikus hats kikszblse miatt fontos a csompontok kzti megegyezs.

1.2.2. Lehetetlensgi ttel


Ha A csompont zenetet kld B-nek, az zenet megrkezik, de B nem lehet biztos benne, hogy A tud az zenet sikeres megrkezsrl, ezrt kld egy nyugtz zenetet. Ezt A megkapja, de sem lehet benne biztos, hogy B tud az zenet sikeres megrkezsrl. Lehetetlensgi ttel: Vges meghibsods csatornrl nem lehet hibtlan kommunikcit felttelezni.

1.2.3. Biznci tbornokok problmja (Byzantine generals problem)


Bizonyos biztonsgkritikus rendszereknl tbb rzkelt, vezrlt esetleg tbb szmtgpet hasznlnak ugyanannak a jelnek, folyamatnak a megmrsre, vezrlsre feldolgozsra. Erre azrt van szksg, hogy valamely rszegysg meghibsodsa esetn is mkdkpes maradjon a rendszer (redundancia). A problma az az, hogy mi a teend akkor, ha egy rendszernl egy rzkel teljesen ms rtket mr, mint a tbbi rzkel. A problma szemlltetsre ltezik egy rvid tanmese, amely a kvetkez kppen hangzik: ngy szomszdos hegyen sorban tborozik 1000, 2000, 3000 s 4000 katona, mg kztk a vlgyben tborozik 5000 ellensges katona. Az adatok alapjn ltszik, hogy a hegyiek csak sszefogssal gyzhetik le a vlgybelieket. A hegylakk szeretnk szvetsgben megtmadni a vlgybelieket, de nem mindegyikk mond igazat, mert azt hazudja, hogy tbb katonja van a tnylegesnl. Jelen esetben teht az adat rvnyessgvel van a baj, nem a kommunikcival.
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

1.2. IDKEZELS S ADATTOVBBTS PROBLMI

15

Mindegyik csompont (vezr) elkldi a tbbieknek, hogy mennyi katonja van, felttelezzk, hogy a 3-as hazudik, minden zenetben mst mond, jelljk ezeket x, y, z-vel. Az egyes csompontok a kvetkez zeneteket kaptk: 1. (1, 2, x, 4), 2. (1, 2, y, 4), 3. (1, 2, 3, 4), 4. (1, 2, z, 4) Ezutn elkldik egymsnak a kapott zeneteket, 3-as ismt mindenkinek mst hazudik: 1. a kvetkez zeneteket kapja: (1, 2, y, 4), (a, b, c, d), (1, 2, z, 4) 2. a kvetkez zeneteket kapja: (1, 2, x, 4), (e, f, g, h), (1, 2, z, 4) 4. a kvetkez zeneteket kapja: (1, 2, x, 4), (1, 2, y, 4), (i, j, k, l) gy mr kiszrhet, hogy 1000 + 2000 + 4000 = 7000 katona biztosan van, teht megkezdhetik a tmadst. A helyes dnts meghozatalhoz m megbzhatatlan egysg esetn 3m+1 itercira van szksg. Ezt a szably a redundns rendszerek esetben is hasznlhat.

1.2.4. A Biznci-problma
A biztonsgos zenetklds s kommunikci alapvet kvetelmnye, hogy a kld meggyzdjn arrl, hogy az elkldtt zenetet a vev fl megkapta, vagyis mindkt fl biztos legyen abban, hogy egy adott mvelet vgrehajtdott. Itt a veszlyt az jelenti, ha manipulci vagy hibs tvitel eredmnyeknt az egyik fl gy gondolja, hogy a mvelet sikeresen vgbement. A problma az, hogy hogyan tud a mvelet sikerrl meggyzdni a kld fl. Ltszlagos egyszersge ellenre ezt a kvetelmnyt nehz biztostani. A nyugtzott zenetklds problmjt a szakirodalomban a Biznci-problmaknt szoktak emlteni. A trtnelmi plda alapjn kt szvetsges hadsereg kt szemkzti domb tetejn foglal llst, az ellensg pedig a vlgyben helyezkedik el. Az ellensg ltszm flnyben van, gy mindkt dombon lv hadsereggel kpes lenne elbnni kln-kln, viszont ha a szvetsges hadseregek egyszerre tudnnak tmadni a vlgyben llomsoz ellensges hadsereget, akkor gyzelmet tudnak aratni felette. A kt szvetsges hadvezr csak futrok segtsvel az ellensges vonalakon keresztl tud kommuniklni egymssal. A futrokat azonban elfoghatja az ellensg, gy nem biztos, hogy az zenet megrkezik. A krds az, hogy: megoldhat-e valamilyen kommunikcis mdszerrel az, hogy a kt hadvezr meg tud e egyezni a tmads idpontjban. Indirekt bizonytssal s teljes indukcival egyszeren belthat, hogy ilyen megolds nem ltezik. Ttelezzk fel, hogy vges n lpsben (n futr kldse utn) meg tudnak egyezni a hadvezrek. Ekkor viszont az n-ik lpsben kldtt futr elfogsnak esetn arra a kvetkeztetsre kellene jutnunk, hogy mr az (n-1)-ik lpsben is tudniuk kellett volna a hadvezreknek a tmads idpontjban. Vges lpsben ellentmondsra jutunk, ha az (n-1)-ik lpsre ugyanezt a gondolatmenetet alkalmazzuk, ez azt jelenti, hogy az els futr kldsekor tudni kellett volna a tmads idpontjt. A kiindulsi helyzet viszont az volt, hogy nem tudjk a hadvezrek a tmads idpontjt. A trtnelmi plda alapjn lthatjuk, hogy a legrosszabb esetet felttelez zenetveszts esetn nem ltezik olyan biztonsgos nyugtzott zenet klds, amely sorn mindkt fl meggyzdhet arrl, hogy egy egyeztets sikeres volt. Ha valamilyen termszetes, nem rosszindulat zenetvesztst tteleznk fel (pldul az tviteli csatornn lv zaj miatt), akkor az zenet tovbbtsnak sikeressgt valamekkora valsznsggel jellemezhetjk.
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

16

1. BEGYAZOTT RENDSZEREK

Abban az esetben ha egy zenetklds biztonsgos nyugtzst valamilyen valsznsggel meg tudjuk oldani, akkor az gyakorlatban biztonsgosan megoldhat problma. Ha rosszindulat, intelligens tmadst feltteleznk, akkor a tmad az zenet egyeztets mdszert is ismeri. Ebben az esetben a Biznci problmnl ltott bizonyts alapjn egy tmad brmely kifinomult protokoll esetn elnyelhet bizonyos zeneteket. gy valamelyik felet ktsgek kztt tudja tartani. Ebben az esetben nem ltezik elmleti s nem ltezik gyakorlati megolds sem. Ez a problma csak mindkett fl ltal hitelestett harmadik fl bevonsval oldhat csak meg.

1.2.5. temezs
A feladatok kzl a vals idej opercis rendszerek szmra kritikus az temezs s az erforrsokkal val gazdlkods megvalstsa. Mivel minden rendszer, valamilyen perifria segtsgvel kommunikl a krnyezetvel, ezrt fontos e perifrik vals idej rendszer kvetelmnyeinek megfelel mdon trtn kezelse. Az temezs s az erforrsokkal val gazdlkods azrt kiemelt fontossg, mert egy-egy esemny kezelsekor a vlaszid betartshoz az esemnyt lekezel utasts sorozatot vgre kell hajtani. Az utastssorozat lefutsa erforrsokat ignyel, melyeket az opercis rendszernek biztostani kell, ez gy valsthat meg a leggyorsabban, ha az opercis rendszer folyamatosan rendelkezik szabad erforrsokkal, melyeket oda tud adni az idkritikus folyamatoknak. A CPU temezsnek klnbz szintjeit tudjuk megklnbztetni: Hossztv (long term) temezs vagy munka temezs Kzptv (medium term) temezs Rvidtv (short term) temezs Nem minden ltalnos cl opercis rendszerben van mindegyik temezs megvalstva. A hossz tv temezs feladata, hogy a httrtron vrakoz, mg el nem kezdett munkk kzl meghatrozza, hogy melyek kezdjenek futni, a munka befejezdsekor ki kell vlasztania egy j elindtand munkt. A hossztv temezst vgz algoritmusnak ezrt ritkn kell futnia. A kzptv temezs az idszakos terhelsingadozsokat hvatott megszntetni, hogy a nagyobb terhelsek esetben ne legyenek idtllpsek. A kzptv temez algoritmus ezt gy oldja meg, hogy bizonyos (nem idkritikus) folyamatokat felfggeszt illetve jraaktivl a rendszer terhelsnek a fggvnyben. Folyamat felfggesztse esetn a folyamat a httrtron troldik, az opercis rendszer elveszi a folyamattl az erforrsokat, melyeket csak a folyamat jraaktivlsakor ad vissza a felfggesztet folyamatnak. Rvidtv temezs feladata, hogy kivlassza, hogy melyik futsra ksz folyamat kapja meg a CPU-t. A rvidtv temezst vgz algoritmus gyakran fut le, ezrt gyorsan kell lefutnia. Mivel gyakran lefut az algoritmus, ezrt az opercis rendszer mindig a memriban tartja az temez kdjt. Az opercis rendszerek magja tartalmazza az temezt. Az ltalnos cl s a vals idej opercis rendszerek a CPU temezsben klnbznek leginkbb egymstl. Ennek az oka az, hogy a vals idej opercis rendszereknek az esemnyeket meghatrozott idn bell le kell reaglnia, egy ltalnos cl opercis rendszer esetben nincsenek ilyen jelleg kvetelmnyek.
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

1.2. IDKEZELS S ADATTOVBBTS PROBLMI

17

A CPU temezssel kapcsolatban a kvetkez fogalmakat rtelmezhetjk: CPU lket (CPU burst): A folyamatnak csak CPU s az operatv tr kell Perifria lket (I/O burst): Perifris tvitelt hajt vgre a folyamat, nincsen szksg CPU-ra temezs sorn a folyamatokkal a kvetkez esemny kvetkezhet be: A fut folyamat vrakozni knyszerl (Pldul: I/O-ra, erforrsra). A fut folyamat befejezdik. A fut folyamat lemond a CPU-rl. A fut folyamattl az epercis rendszer elveszi a CPU-t. A folyamat aktivldik, futsra kssz vlik. Az temezssel s a programokkal kapcsolatban a kvetkez alapfogalmakat rtelmezhetjk: Task: nll rszfeladat. Job: A task-ok kisebb, rendszeresen vgzett feladatai. Process: A legkisebb futtathat programegysg, egy nll temezsi entits, amelyet az opercis rendszer nll programknt kezel. Van sajt (vdett) memria terlete, mely ms folyamatok szmra elrhetetlen. A task-okat folyamatokkal implementlhatjuk. Thread: Sajt memriaterlet nlkli temezsi entits, az azonos szlfolyamathoz tartoz szlak azonos memriaterleten dolgoznak. Kernel: Az opercis rendszer alapvet eleme, amely a task-ok kezelst, temezst s a task-ok kzti kommunikcit biztostja. A kernel kdja hardware fgg (device driver) s hardware fggetlen rtegekbl pl fel. A hardware fgg rteg j proceszszorra s eszkzkre trtn adaptlst az opercis rendszer tportolsnak nevezzk. A Task-ok llapota a futs kzben a kvetkez llapotokat veheti fel: Dormant: Passzv llapot, amely jelentheti az inicializls eltti vagy felfggesztett llapotot. Ready: A futsra ksz llapotot jelli. Fontos a task prioritsi szintje s az is, hogy az ppen aktulisan fut task milyen prioritsi szinttel rendelkezik, ezek alapjn dnti el az temez, hogy elindtja e a taskot. Running: A task ppen fut. Delayed: Ez az llapot akkor lp fel, mikor a task valamilyen idintervallumig vrakozni knyszerl. (Rendszerint szinkron idzt szolgltats hvsa utn kvetkezik be.) Waiting: A task egy meghatrozott esemnyre vrakozik. (Ez rendszerint valamilyen I/O mvelet szokott lenni.) Interrupted: A task-ot megszaktottk, vagy a megszakts kezel rutin ppen megszaktja a folyamatot.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

18

1. BEGYAZOTT RENDSZEREK

1.1. bra: A Task llapotok vltozsai A task-ok llapott s tulajdonsgait a Task Vezrl Blokk (Task Controll Block TCB) rja le, amely a memriban lv adatszerkezet, fontosabb tagjai a kvetkezk: Task ID: Egy egsz szm, amely a task-ot azonostja. Context: Program Counter, a regiszterek s flag-ek elmentett rtkei. (A task futsnak helyrelltshoz szksgesek ezek az informcik.) Top of Stack: Egy mutat, amely megadja a task-hoz tartoz verem tetejt Status: Egy egsz szm, amely utal a task aktulis sttuszra. Priority: A priorits aktulis rtke, amely a futs kzben megvltoztathat. I/O Information: Milyen perifrikat s I/O-kat foglalt le s hasznl a task. A nem hasznlt perifrikat minden esetben fel kell szabadtani. A temezsi algoritmusoknak kt f tpusa van, ezek a kooperatv (nem preemptv) s a preemptv algoritmusok. Elszr a kooperatv multitask-ot valstottk meg nagy gpes krnyezetben. A mkdsi elve s alaptlete a kooperatv algoritmusoknak az, hogy egy adott program vagy folyamat lemond a processzorrl, ha mr befejezte a futst vagy valamilyen I/O mveletre vr. Ez az algoritmus addig mkdik jl s hatkonyan, amg a szoftverek megfelelen mkdnek (nem kerlnek vgtelen ciklusba) s lemondanak a CPU-rl. Ha viszont valamelyik a program/folyamat nem mond le a CPU-rl vagy kifagy (s ez miatt nem mond le a CPU-rl), akkor az egsz rendszer stabilitst kpes lecskkenteni vagy akr kpes az egsz rendszert kifagyasztani. A kooperatv algoritmus ezrt soha nem fordul el vals idej opercis rendszerek esetben. A preemptv algoritmusok esetben az opercis rendszer rszt kpez temez algoritmus vezrli a programok/folyamatok futst. A preemptv multitask esetn az opercis rendszer elveheti a folyamatoktl a futs jogt s tadhatja ms folyamatoknak. A vals idej opercis rendszerek temezi minden esetben preemptv algoritmusok, gy brmely program
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

1.2. IDKEZELS S ADATTOVBBTS PROBLMI

19

vagy folyamat lellsa nem befolysolja szmotteven a rendszer stabilitst. Az temez algoritmusok opercis rendszerek rendeltetse alapjn ms rendszerjellemzkre vannak optimalizlva. Az temezsi algoritmusok teljestmnyt a kvetkez szempontok alapjn tudjuk osztlyozni: CPU kihasznltsg (CPU utilization): Azt mondja meg, hogy a CPU az idejnek hny szzalkt hasznlja a folyamatok utastsainak vgrehajtsra. CPU res jrsa (Idle): A CPU idejnek hny szzalkban nem hajt vgre folyamatot. (Ilyenkor indthatak hossz tv (long term) temezsben szerepl folyamatok.) tbocst kpessg (Throughput): Az opercis rendszer idegysgenknt hny folyamatot futtat le. Krlfordulsi id (Turnaround time): A rendszerbe helyezstl szmtva mennyi id alatt fejezdik be egy process Vrakozsi id (Waiting time): Egy munka (vagy folyamat) mennyi idt tlt vrakozssal Vlaszid (Response time): Idosztsos (interaktv) rendszereknl fontos, azt mondja meg, hogy a kezeli parancs/beavatkozs utn a rendszer els vlaszig eltelt id. Az temezsi algoritmusokkal szembeni kvetelmnyeket klnbzkppen tudjuk csoportostani. Rendszerenknt vltozhat az, hogy a megvalstskor melyik kvetelmnyt vlasztjk fontosnak s melyiket kevsb. Az algoritmusokkal szemben tmasztott fontosabb kvetelmnyek a kvetkezk: Optimlis: Legyen optimlis a rendszer viselkedse, azaz valamilyen elre meghatrozott szempontok figyelembe vtelvel mkdjn a rendszer. Igazsgos: Ne rszestse elnybe azonos paramterekkel rendelkez process-ek kzl semelyiket sem. Prioritsok kezelse: Legyen kpes az algoritmus arra, hogy process-eket folyamatokat a prioritsuk alapjn egymstl megklnbztessen Ne heztesse ki a folyamatokat: Minden process kapjon valamennyi processzor idt, ezltal biztostva azt, hogy folyamatos legyen a futs Viselkedse legyen megjsolhat: Minden esetben legyen a rendszer viselkedse elre kiszmthat, hogy a mrnkk elre modellezni tudjk, hogy a rendszer hogyan fog viselkedni. Minimlis rendszeradminisztrcis id Graceful degradation: Ez a rendszer tlterhelse esetn fontos szempont, mert a rendszer viselkeds szempontjbl az a fontos, hogy fokozatosan romoljon le a rendszer teljestmnye. A vals idej opercis rendszerek esetben kritikus milyen cskkens engedhet meg, mert a rendszernek tartani kell a vals idej rendszer specifikcijban meghatrozott idket.

1.2.6. Klasszikus temezsi algoritmusok


Az temezsi algoritmusokat csoportosthatjuk felptsk s mkdsk alapjn. A klnbz opercis rendszerek hasznlhatsgt nagyban befolysolja az temez algoritmus mkdse. A jegyzet ezeket az algoritmusokat nem trgyalja rszletesen a rendelkezsre ll hely
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

20

1. BEGYAZOTT RENDSZEREK

szkssge miatt. A klasszikus temezsi algoritmusok kzl a jegyzet a kvetkezket trgyalja: Egyszer algoritmusok o Legrgebben vrakoz (First Come First Served, FCFS): o Krforg (Round-Robin, RR) Prioritsos algoritmusok o Statikus priorits o Legrvidebb (lket)idej (Shortest Job First, SJF) o Legrvidebb htralv idej (Shortest Remaining Time First, SRTF) o Legjobb vlaszarny Tbbszint algoritmusok o Statikus tbbszint sorok (Static Multilevel Queue, SMQ) o Visszacsatolt tbbszint sorok (Multilevel Feedback Queues, MFQ) Tbbprocesszoros temezs Legrgebben vrakoz (First Come First Served FCFS): Az j folyamatok a vrakozsi sor vgre kerlnek, mindig a sor elejn ll folyamat kezd futni. A process-ek nem szakthatak meg (Nem preemtv az temez, gy vals idej rendszerhez nem hasznlhat.) Az algoritmus elnye az, hogy egyszeren megvalsthat. Az algoritmus htrnya az, hogy egy hossz ideig fut process feltartja az egsz rendszert (Konvojhats) Krforg (Round-Robin RR): Az idosztsos opercis rendszerek algoritmusainak alapja. Csak idszeleteket kapnak a process-ek (time slice), amelyek utn az temez tadja a vezrlst egy msik process-nek, gy az algoritmus preemtv mdon zemel. Abban az esetben, ha a CPU lket kisebb, mint az idszelet, akkor a process lefut s tadja a vezrlst egy msik process-nek. Abban az esetben, ha a CPU lket nagyobb, mint az idszelet, akkor az idszelet utn felfggesztsre kerl a process s az temez tadja a vezrlst egy msik process-nek. Prioritsos temez algoritmusoknl a folyamatokhoz az temez hozzrendel egy priorits rtket s a legnagyobb priorits folyamat lesz a kvetkez futtatand. Ezeknl az algoritmusoknl megklnbztethetnk statikus s dinamikus prioritsos algoritmusokat. A statikus prioritsos algoritmusoknl a folyamatok kiheztetse lphet fel, ezrt a folyamatokat regteni (aging) kell. Legrvidebb (lket)idej (Shortest Job First SJF) algoritmus a dinamikus prioritsos algoritmusok kz tartozik. Az algoritmus a vrakoz folyamatok kzl a legrvidebb lketidejt indtja el. Legrvidebb htralv idej (Shortest Remaining Time First SRTF) algoritmus szintn dinamikus prioritsos algoritmus. Ha egy j folyamat rkezik, akkor az temez megvizsglja a process-ek htralv lketidejt s a legrvidebb htralv idej process-t indtja el. A legjobb vlaszarny algoritmus is dinamikus prioritsos algoritmus. Ez az SJF algoritmus egy vltozata, a vrakoz folyamatok kzl nem a vrakozsi id alapjn vlaszt, hanem egy specilis algoritmus segtsgvel. A tbbszint algoritmusok esetben a process-ek tbb sorban vrakoznak (pldul: rendszer, megjelents, batch folyamatok stb.). Minden sorhoz prioritst rendel az temez algoritmus. A sorokon bell klnbz kivlasztsi algoritmusok is hasznlhatak. A tbbszint
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

1.2. IDKEZELS S ADATTOVBBTS PROBLMI

21

algoritmusoknak kett f tpusa van: statikus tbbszint sorok (process nem kerlhet t msik sorba) s a visszacsatolt tbbszint sorok (process tkerlhet msik sorba). A hatkony tbbprocesszoros temezs a mai processzorok esetben elengedhetetlen, mivel a jelenleg piacon kaphat szmtgpek mr tbb maggal rendelkeznek st, mg a begyazott alkalmazsokhoz fejlesztett szmtgpek is. A tbbprocesszoros temezst tbb CPU-val rendelkez rendszerekben vagy tbb magos/szlas CPU-k esetben lehet hasznlni. Az temezsi algoritmusokat kett csoportra bonthatjuk: heterogn s homogn rendszerek. Heterogn rendszer esetben egy folyamat csak 1 CPU-n futhat. Homogn rendszer esetben az indul folyamat a rendszer kzs sorba kerl. Homogn temezs esetben beszlhetnk aszimmetrikus s szimmetrikus rendszerrl. Aszimmetrikus rendszer esetn egy kzs (meghatrozott CPU-n fut) temez van, mg szimmetrikus rendszer esetben minden CPU-nak sajt temezje van.

1.2.7. Task-ok kztti kommunikci


Mivel a rendszer mkdse kzben a task-ok egymssal prhuzamosan futnak ezrt gondoskodni kell arrl, hogy egyazon I/O-t, perifrit vagy memria terletet kt vagy tbb task ne hasznljon egyszerre, mert abbl hibs rendszermkds alakulna ki. A taszkok kztti kommunikcira a kvetkez mdszerek llnak rendelkezsre a programozk szmra: Szemafor (semaphore), mely 1 bit informci tadsra alkalmas. Esemnyek (event flags), melyek tbb bit informci kicserlsre is alkalmasak. Postalda (mailbox), amely komplexebb struktra tadsra szolgl. Sor (queue), amely tbb mailbox tmbben tartalom tadsra szolgl. Cs (pipe), amely direkt kommunikcit tesz lehetv kt taszk kztt. A szemafor az egy absztrakt adattpus, amelyet leginkbb kzs erforrsokhoz val hozzfrs kontrolllsra (klcsns kizrs) hasznlnak. Alkalmas ezen kvl mg esemny bekvetkeztnek jelzse, kt task tevkenysgnek sszehangolsra s kett vagy tbb task szinkronizlsra is. Szemafor tpusai a kvetkezk lehetnek: Binris szemafor (binary semaphore), amely egyszer igaz-hamis jelzsre szolgl. Csak egyetlen erforrs vezrlsre hasznlhat. Szmll szemafor (counting semaphore): A szemaforhoz egy szmot rendelnk, mkds kzben a szemafor wait() mvelete blokkol, ha a szmll 0 rkre vltozik. Ellenkez esetben eggyel cskkenti a szmll rtkt. A szemafor signal() mvelete eggyel nveli a szmllt. Erforrs szemafor (resource semaphore): Csak az a taszk engedhet el, amelyik lefoglalta az adott perifrit. Kzs erforrs vdelmre j, de taszkok kztti szinkronizcira nem alkalmas. Mutex: Egy binris szemafor, mely kibvtett tulajdonsgokkal rendelkezik. A kvetkez plda egy szl ltrehozst, elindtst, lelltst mutatja, a kommunikci kzben mutex-et hasznl fel a program a vltoz elrshez.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

22

1. BEGYAZOTT RENDSZEREK

// A szlat tartalmaz fggvny forrskdja UINT ThreadProcProximity (LPVOID pParam) { CClass &MainClass = *((CClass *)pParam) ; while (1) { ::WaitForSingleObject (MainClass.m_ProxMutex, INFINITE) ; if (MainClass.m_TerminateThread) return (TRUE) ; Card = MainClass.LoadActCard(i); //.. if (MainClass.m_TerminateThread) return (TRUE) ; ::ReleaseMutex (MainClass.m_ProxMutex) ; Sleep(SLEEP); } return (TRUE); } //Az adatokat tartalamz osztly class CClass { HANDLE m_ProxMutex; BOOL m_TerminateThread; BOOL m_RunThread; int StopThread(); int StartThread(); CClass(); DWORD WaitMutex(void) {return ::WaitForSingleObject (m_ProxMutex, INFINITE);} DWORD ReleaseMutex(void) {return ::ReleaseMutex (m_ProxMutex);} // ... };

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

1.2. IDKEZELS S ADATTOVBBTS PROBLMI

23

//Az osztly konstruktora CClass::CClass(const char ReaderNum) { m_RunThread = false; m_TerminateThread = false; // ... m_ProxMutex = ::CreateMutex (NULL, FALSE, NULL) ; // ... } // A szl elindtst vgz fggvny int CClass::StartThread() { if (!m_RunThread) { ::WaitForSingleObject (m_ProxMutex, INFINITE) ; m_TerminateThread = false ; PurgeComm(m_hCom, PURGE_TXCLEAR); PurgeComm(m_hCom, PURGE_RXCLEAR); AfxBeginThread (ThreadProcProximity, this) ; m_RunThread=true; ::ReleaseMutex (m_ProxMutex) ; } return 0; } // A szl lelltst vgz fggvny int CClass::StopThread() { try { ::WaitForSingleObject (m_ProxMutex, INFINITE) ; m_TerminateThread=true; m_RunThread=false; ::ReleaseMutex (m_ProxMutex) ; return 0; } catch (CException* e) {
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

24

1. BEGYAZOTT RENDSZEREK

e->Delete(); return 1; } } Az event flag-ek egy-egy esemny bekvetkezsekor llnak 1-es llapotba, egy task vrhat tbb esemnyre is. Az esemnyek kztt klnbz logikai kapcsolat llhat fenn, pldul: AND, OR stb. A pipe a task-ok kztti kommunikci megvalstsra hasznlhat, egy task tbb pipeon is kommuniklhat egy idben. Az albbi plda pipe-ok ltrehozst mutatja. // pipe ltrehozsa a gyerek process szmra OUT if ( ! CreatePipe(&g_hChildStd_OUT_Rd, &g_hChildStd_OUT_Wr, &saAttr, 0) ) ErrorExit(TEXT("StdoutRd CreatePipe")); // Ler ellenrzse if ( ! SetHandleInformation(g_hChildStd_OUT_Rd, HANDLE_FLAG_INHERIT, 0) ) ErrorExit(TEXT("Stdout SetHandleInformation")); // pipe ltrehozsa a gyerek process szmra IN if (! CreatePipe(&g_hChildStd_IN_Rd, &g_hChildStd_IN_Wr, &saAttr, 0)) ErrorExit(TEXT("Stdin CreatePipe")); // Ler ellenrzse if ( ! SetHandleInformation(g_hChildStd_IN_Wr, HANDLE_FLAG_INHERIT, 0) ) ErrorExit(TEXT("Stdin SetHandleInformation")); // Gyerek process elindtsa CreateChildProcess();

1.2.8. Rendszerhvsok (kommunikci a kernellel)


Egy komlex rendszer mkdse sorn a projectspecifikus feladatokat mindig a felhasznl programok hajtjk vgre, melyeknek folyamatosan kommuniklniuk kell a klnbz erforwww.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

1.3. VALS IDEJ RENDSZEREK, TEMEZS, IDZTSEK

25

rsokkal. A modern opercis rendszerek esetben nem megengedhet az, hogy egy-egy program sajt maga kezelje az erforrsokat. Az erforrsok kezelse mindig az opercis rendszer feladata, a programok az opercis rendszer specilis funkciinak a meghvsval kpesek csak a rendszereszkzkkel kommuniklni. Nem megengedhet az opercis rendszer megkerlse. Ahhoz, hogy a processzor az opercis rendszer magjban lv kdrszletet hajtson vgre, a kvetkez esemny valamelyiknek kell bekvetkeznie: rendszerhvs, temez-idzt mkdse, megszakts vgrehajtsa. Rendszerhvsokat (API) az albbi esemnyek vlthatnak ki: task kontextusnak mentse, kernelmdba val tkapcsols, felhasznli hvs vgrehajtsa vagy visszatrs trtnik (user md s kontextus visszallts). A rendszerhvsok lehetnek szinkron s aszinkron hvsok. Szinkron hvs esetn a hv task blokkolt (delayed) llapotba kerl, amg a kernel el nem vgzi a hvott feladatot. Aszinkron hvs esetn a hv task folytatja a munkjt s a munka vgeztvel fut le a rendszerhvs. Megszaktsoknak kt f csoportja van: az temez (timer) megszakts s a kls megszakts. A timer megszakts ltalban hardveres megoldson alapszik, a megszakts hatsra a kvetkez esemnyek kvetkeznek be: idzt esemnyek feldolgozsa, a jelenleg fut task idszmlljnak a mdostsa s a kszenlti lista (Ready List) aktualizlsa. A kls megszaktsok vagy kls esemny hatsra kvetkeznek be vagy valamely folyamat generlja ket szoftveres ton. A kls megszaktsok kiszolglsa lehet azonnali s lehet temezett is, attl fggen, hogy mi generlta a megaszaktst. A kls megszaktsok ki-be kapcsolhatak (maszkolhatak).

1.3. Vals idej rendszerek, temezs, idztsek


A vals idej rendszerek trgyalsnl fontos definilni azt, hogy egy rendszert mikor nevezhetjk vals idej rendszernek. Egy rendszer akkor vals idej, ha a rendszer interaktivitsa elg egy bizonyos feladat azonnali elvgzshez. Ebbl a defincibl mr sejthet a valsidej rendszerek f kvetelmnye, viszont rtelmeznnk kellene azt, hogy mit rtnk azonnali elvgzsen, ezt minden esetben meghatrozott formban rgzteni kell. Egy rendszer vals idej, ha egy vals idsklhoz kttt id(ztsi)-kvetelmnyeket tmasztunk. Egy vals idej rendszer szmra elrhat a reaglsi id, idztett esemnyek egymsutnja. A kvetelmnyek szigorsga alapjn kett fle vals idej rendszer rhat el: a Hard real-time s a Soft real-time rendszer. A Hard real-time rendszerek esetben szigor kvetelmnyek vannak elrva, s a kritikus folyamatok meghatrozott idn bell feldolgozsra kerlnek. Soft real-time rendszer esetben a kvetelmnyek kevsb szigorak s a kritikus folyamatokat a rendszer mindssze nagyobb prioritssal dolgozza fel. A vals idej rendszereknl fontos rtelmeznnk a kvetkez idztsekkel kapcsolatos defincikat: Vlaszid: Egy esemny ltal kivltott idzt (trigger) impulzus s az esemnyt lekezel program indulsa kztt eltelt id.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

26

1. BEGYAZOTT RENDSZEREK

Id kvetelmnyek: tlagos vlaszidre vonatkoz korltozst s minden egyes vlaszidre vonatkoz elrst is elrhat Hatrid teljestett: Ha egy esemnyt a megadott vlaszidkn bell elkezdte a rendszer feldolgozni. (A kezds idpontja nem determinisztikus.) Hibs rendszerviselkeds: Ha a vlaszidk az elrt idhatron kvl vannak. Ha ssze szeretnnk hasonltani a Hard real-time s a Soft real-time rendszerek idkezelsi filizfiit, akkor azt tapasztaljuk, hogy a Soft real-time rendszerek az idtllpseket sokkal dinamikusabban kezelik. A Soft real-time rendszerek esetben elre meghatrozott mrtkben s gyakorisggal el lehet trni a hatridktl, gy hogy az nem jelent hibs rendszerviselkedst. A Hard real-time rendszerek esetben viszont a hatridk megsrtse semmilyen esetben sem engedlyezett. A vals idej rendszerekkel szemben tmasztott kvetelmnyeket kielgt opercis rendszereket real-time opercis rendszernek (RTOS 2) hvjuk. Ilyen vals idej opercis rendszerek pldul a: QNX RTLinux RTAI VxWorks OSE Windows CE/eXP Egyes rendszerekhez lteznek realtime modulok, amelyek kpesek beplni a gpen fut (opercis) rendszerbe, aminek a segtsgvel a szmtgp kpes vals idej rendszerknt zemelni. Ilyen modulok pldul a NI LabVIEW Real-Time Modul s a Windows Real-Time Modul(ok) stb. Ha ltalnossgban megnzzk az opercis rendszerek f feladatait, akkor azok kzl ki tudjuk vlasztani azokat a feladatokat, amelyek fontosak egy vals idej opercis rendszer szmra. Egy ltalnos cl opercis rendszer f feladatai a kvetkezk: File kezels Trgazdlkods Felhasznli fellet Perifrik kezels temezs Hlzatkezels Erforrsokkal val gazdlkods Programok s llomnyok vdelme

RealTime Operating System Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

1.4. BIZTONSGKRITIKUS RENDSZEREK

27

1.4. Biztonsgkritikus rendszerek


Biztonsg kritikus felhasznlsnak, rendszernek klnbz alkalmazsi terleteik lehetnek, pldul a nukleris ermvek, vast, autipari alkalmazsok vagy a lgi kzlekeds. A felhasznlsi terlettl fggen szigor rendeletek szablyozzk a biztonsgi kvetelmnyeket. Ezrt a megbzhatsgi s biztonsgi jellemzk fontos krdst jelentenek a biztonsgi tanstsi folyamat kzben. Ez mg hangslyosabb vlt s elsdleges fontossg az autipari s a gazdasgi gazatokban, mivel egyre nvekv szmban vannak szmtgpes alap rendszerek. Ezek kritikus biztonsgi funkcikat valstanak meg, mint a kormnyzs s a fkezs. Ezrt tbb ajnls s tanulmnyok alapjn kidolgoztak tbb tanstsi szabvnyt: ARP 4754, RTCA/DO-178B (melyet a replstechnika terletn hasznlnak) vagy az EN50128 (amely a vasti gazatban alkalmazott). Ezek a szabvnyok szigor irnymutatsokat adnak a biztonsgi szempontbl kritikus begyazott rendszerekrl. Mindazonltal, ezek a szabvnyok alig ltethetek t a jrmvek szoftver alap rendszerei szmra. A problma a rendszer sztbontsval (partcionlsval) oldhat meg, amely sorn a szoftvert sztbontjuk kritikus s nem kritikus rendszerre, a kritikus rszeket a megvalsts sorn gy kell megvalstani tbb pldnyban, hogy azok eltr szoftver komponenseket hasznljanak, gy megoldhat a rendszerben az aktv redundancia. Ezt hasonlan meg tudjuk oldani a hardver tervezse sorn is, hogy ha valamilyen rszegysge az ramkrnek meghibsodik, akkor mg bizonyos vezrlsi funkcik elrhetek lesznek, gy a rendszer cskkentett funkcionalitssal mg mkdkpes marad. (Ha funkcicskkens lp fel valamilyen szoftver vagy hardver egysg meghibsodsa esetben, akkor azokat az eszkz specifikcijban megfelelen dokumentlni kell. Bizonyos biztonsgkritikus rendszerek esetben meghibsods esetn nem megengedett a rendszer funkcionalitsainak a cskkense, ezeknl a rendszereknl egymstl mkdsi elvben is klnbz megoldst kell keresni s implementlni.) Az autipari szektorban a Motor Industry Software Reliability Association (MISRA), amely megba foglalja az autipari beszlltk s gyrtk jelentsebb szereplit, s kidolgozta az IEC 61508-at, amely az autipari biztonsgkritikus fedlzeti szoftverfejlesztst szablyozza, a szabvny az elektronikus s a programozhat elektronikus ramkrket tartalmaz egysgekre vonatkozik. A szabvny feladata az, hogy tmogatsra a tanstsi eljrst az autiparban, s azt a gyrtk szmra mg egyszerbb tegye. Jelenleg is fejlesztik azt az IEC szabvnyt, ami a kzeljvben fog megjelenni, amely arra szolgl, hogy az autipari ignyeket a lehet legjobban kielgtse. Az ISO nemzetkzi szabvny (ISOWD 26262) tervezete jelenleg fejleszts alatt ll az EU-ban, az Egyeslt llamokban, s Japnban. A szabvny kvetkez lpse abbl ll majd, hogy az ISO Association tagjai a felhasznls sorn keletkez tapasztalatait felhasznlva pontostjk majd a szabvny klnbz pontjait. Az ISOWD 26262 szabvnyt alkalmaznak a mkdsi biztonsg terletn, amelynek clja, hogy minimlisra cskkentsk az esetlegesen hibs rendszer veszlyt. Az ISO tervezete a funkcionlis biztonsgot szavatolja a felhasznlk szmra: A jrm hibs mkds eredmnyeknt nem kerlhet olyan elre nem lthat vgllapotba, melynek az eredmnye s viselkedse sszeren elre nem lthat
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

28

1. BEGYAZOTT RENDSZEREK

rendellenes hasznlatot okozna. Ez a meghatrozs a termk s a rendszer teljes letciklusra vonatkozik! A biztonsgi ellenrzs hatkonysga nagyban fgg a rendszer kialaktsnak a kezdeti fzistl (klnsen a veszlyelemzstl s a kockzatrtkelstl). Az ellemzst s ellenrzst el kell vgezni a fejleszts sorn (funkcionlis, biztonsgi kvetelmnyek, hardver s szoftver, valamint rendszer evolci), a mkds kzbeni szolgltatsok s a megsemmists (jrafelhasznls) kzben is. Minden fzisban vizsglni kell, hogy a biztonsgi rtkelsek s veszlyessgi elemzsek helytllak. Miutn a rendszerfunkcikat egy olyan biztonsgi folyamat hatrozza meg, amely egy elre elksztett listt tartalmaz klnbz vezetsi helyzetekrl s a hozzjuk tartoz zemzavarokrl. A lista egyrtelmen meghatrozza azt, hogy a jrmnek hogyan kell viselkednie bizonyos helyzetekben s bizonyos meghibsodsok esetben. A listt gy kell elkszteni, hogy a viselkeds megjsolhat legyen azokban az esetekben is ha valamilyen vezrlsi funkci vgrehajtsa kzben egy vagy tbb rszegysge meghibsodik a rendszernek. A listt gy kell elkszteni, hogy ne legyen olyan llapot/meghibsods/bemeneti jel kombinci, amelyet a vgrehajtsi lista ne rna le megfelelen. A listt mindig gy kell elkszteni, hogy minden egyes kzlekedsi helyzetben fent lehessen tartani a jrm biztonsgos s jsolhat viselkedsi mdjt. Minden ilyen helyzetet az esemnyek fggvnyben kell kirtkelni, a kr (egszsggyi s gazdasgi) slyossga, ezt jelenleg egy emberi szemly (a vezet) kpes leginkbb eldnteni s rtkelni, ezrt az elektronikus rendszerek szmra a legfontosabb dolog a jrmviselkeds ellenrizhetsgnek s irnythatsgnak fenntartsa. Ezek alapjn a rendszereket jellemzi egy gynevezett Autipari Biztonsgi Integrits Szint (Automotive Safety Integrity Level ASIL). Ha megnzzk az IEC61508-as szabvnyt minden alkalmazott SIL (Softver In the Loop) tesztnek kt biztonsgi rsze van: a funkcionlis kvetelmnyek tesztelse, azaz a biztonsgi integrits attribtumok figyelse mikzben az ECU-ra (Electronic Control Unit) nem adnak hibs jeleket (a hiba esemnyek bekvetkezsnek egy bizonyos kszbrtk alatt kell lennie (pldul: kisebb, mint 10-8)), az implementci sorn ha egy rendszer megvalst egy funkcit, akkor meg kell gyzdni arrl, hogy a rendszer tbbi tagja biztostja-e az sszes szksges informcit a funkci vgrehajtshoz. A vezrlsi funkcik mellett ellenrzsi tevkenysgek is implementlva vannak a biztonsgkritikus rendszerekben, pldul a hibamd s hats elemzs (Failuremode and Effect Analysis FMEA), vagy a hiba fa vagy esemny fa elemzs stb. Ezeket a technikkat hasznljk a rendszerek validcija s verifikcija kzben is. Szmos technikt lehet mg a fejlesztsbe s tesztelsbe beilleszteni, amelyek a fejlesztsi folyamat szakaszaitl fggenek s fel lehet hasznlni a hasznlt modell ellenrzsre, a teljestmny rtkelsre, temezs s idzts elemzsre, hardver-in-the-loop (HIL), model-in-theloop (MIL) s system-in-the-loop tesztek alkalmazshoz stb.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

1.5. KOMMUNIKCIS PROTOKOLLOK

29

1.5. Kommunikcis protokollok


A fejezet feladata a begyazott rendszerekhez hasznlhat kommunikcis protokollok s kommunikcis mdok rvid ttekintse. Sajnos a rendelkezsre ll hely szkssge miatt a protokollok nem teljes rszletessggel szerepelnek a jegyzetben. A fejezet leginkbb azokra a protokollokra fkuszl, melyek FPGA-s, mikrokontorolleres krnyezetben szerepelnek. A bemutats sorn elszr az olvas azokat a protokollokat ismerheti meg, amelyek kis tvolsgokra (IC-k kztt) hasznlhatak, a fejezet vgn pedig a nagyobb tvolsgokra hasznlhat kommunikcis mdokat. (A szmtgphlzatokhoz hasznlt protokollok bemutatsa nem szerepel a jegyzetben.) A kommunikcis protokollokat klnbz szempontok alapjn csoportosthatjuk: hasznlhat maximlis tvolsg, gyorsasg, hibatrs, tviteli kzeg stb. A protokollok fontosabb tulajdonsgai alapjn tudjuk kivlasztani, hogy egy adott feladathoz melyik protokollt lehet hasznlni, hogy az informcitvitel zavartalan legyen.

1.5.1. I2C busz


A Philips fejlesztette ki egyszer ktirny, ktvezetkes buszrendszert hatkony IC-k kztti vezrlsre azrt, hogy mind a rendszertervezk, mint a kszlkgyrtk kihasznlhassk a busz alkalmazsban rejl elnyket, valamint maximalizlhassk a hardver hatkonysgt. A buszt Inter IC-nek, vagy csak rviden IC- busznak nevezik. Napjainkban mr nem csak a Philips gyrtmny IC-k hasznljk az IC- buszt. Minden IC-busszal kompatibilis eszkz tartalmaz egy on-chip interfszt, ami az IC buszon lehetv teszi a tbbi eszkzzel a kommunikcit. Ez a tervezsi koncepci szmos illesztsi problmt old meg digitlis vezrls ramkrk tervezsekor, ezzel megknnytve a tervezk munkjt. Az IC- busz legfontosabb jellemzi kz tartozik, hogy csak kt buszvezetk szksges a mkdshez: egy soros adatvonal (SDA) s egy soros rajel (SCL). Minden buszhoz csatlakoztatott eszkz programbl cmezhet egy egyedi cmmel, melynek egy rsze a gyrt ltal megadott, a msik rszt pedig ramkri huzalozssal lehet belltani. Az SDA s az SCL vezetk egy felhz ellenllson keresztl a pozitv tpfeszltsgre van ktve. Ha a busz szabad, mindkt vezetk magas logikai szint. A kommunikcit soros, 8 bit-es, ktirny adatforgalom jellemzi, melynek sebessge norml zemmdban 100 Kbit/s, gyors zemmdban pedig 400 Kbit/s. A chipben beptett zavarszrt tallunk, mely az adatvonalon lv zavarokat szri ki, megrizve ezzel az adatintegrtst. A buszra csatlakoztathat integrlt ramkrk szmt csak a busz kapacitsa korltozza, ami maximum 400pF lehet. IC buszos csatlakozs lehetsget nyjt egy olyan prototpus kifejlesztsre, ahol a mdosts s a tovbbfejleszts megvalsthat az IC-k egyszer rktsvel, vagy levtelvel. Nagy elny az IC buszos eszkzk hasznlatnl, hogy nem kell megtervezni a busz interfszt, mert a chip mr tartalmazza azt, ezltal a tervezsi id is cskken. Jval egyszerbb a hibakeress s a hibadiagnzis, a problmk azonnal felderthetek a buszon lv forgalom monitorozsval, amelyhez sajnos specilis eszkz szksges. Ugyanazok az IC tpusok, sok
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

30

1. BEGYAZOTT RENDSZEREK

eltr alkalmazsban hasznlhatak. A tervezsi id is lervidl, mert a tervezk hamar rutint szereznek a gyakran hasznlt funkcionlis blokkok IC- busszal kompatibilis IC-knt val alkalmazsa miatt. Egy begyazott rendszer egy vezrlje ltalban legalbb egy mikrokontrollerbl s tovbbi perifriaeszkzkbl ll, mint pldul memrik, I/O bvtsek, kijelz stb. Egy fejlett rendszer megvalstshoz, soros buszstruktra alkalmazsa ajnlott. Annak ellenre, hogy a soros buszok nem rendelkeznek olyan tviteli sebessggel, mint a prhuzamos buszok, de kevesebb vezetket s IC lbat ignyelnek, gy hatkonyabb az alkalmazsa. Ahhoz, hogy az eszkzk kommuniklni tudjanak egy soros buszon, rendelkeznik kell a protokoll adatkldsi formtumnak az implementcijval, amely megakadlyozza az adatvesztst. Az implementci sorn figyelembe kell venni a kvetkezket: A gyors eszkzknek tudniuk kell kommuniklni a lass eszkzkkel. A rendszer nem fgghet a csatlakoztatott eszkzktl, msklnben a vltoztatsok s javtsok nem lehetsgesek. Egy elre definilt eljrsnak kell lennie arra, hogy melyik eszkz s mikor vezrli a buszt. Ha klnbz eszkzk klnbz sebessggel kapcsoldnak a buszra, akkor azonosnak kell lennie a busz rajel forrsnak. Ezeket a kritriumokat mind magba foglalja az IC- busz specifikcija. Az I2C busz hardveresen nem ignyel sok alkatrszt. Minden eszkz egy egyedi cmmel rendelkezik s mkdhet akr kld, akr fogadknt is az eszkz funkcitl fggen. Pldul egy kijelz meghajt IC csak fogad, mg egy memria IC tudja az adatokat fogadni s kldeni is. Amikor az eszkzk adattvitelt valstanak meg, tekinthetjk ket master-nek s slavenek. A master az az eszkz, amely megkezdi az adattvitelt a buszon s generlja az rajeleket az tvitel lebonyoltshoz. Az ezalatt megcmzett eszkzket slave-nek nevezzk. Az I2C buszon egyszerre tbb mikrokontroller is lehet, amelyek mindegyike kpes lehet vezrelni a buszt. Ilyenkor elfordulhat az is, hogy egyszerre tbb master prblja meg kezdemnyezni az tvitelt, ennek az elkerlsre talltk ki az arbitrcis eljrrst, amely az I2C interfszek buszon trtn S kapcsolsval valsul meg. Ha tbb master prbl informcit kldeni a buszon, akkor az els olyan master elveszti az arbitrcit, amelyik logikai magas (1-es) rtket akar kldeni, mikzben a tbbi logikai alacsony (0-s) rtket. Az arbitrci ideje alatt az rajel a masterek rajeleinek a szinkronizlt kombincija, amely az SCL vezetken ltrejtt huzalozott S kapcsolat segtsgvel valsul meg. Az IC buszon az rajel generlsa mindig a masterek feladata. A huzalozott S fggvny megvalsthoz az eszkzk buszra csatlakoz kimeneti fokozatainak nyitott drain-nel vagy nyitott kollektorral kell rendelkeznie. Egy bit tvitele a kvetkez mdon trtnik. Kiindulskor magas feszltsg szinten lv SDA adatvonalra kerl az tviteli rtk, a logikai alacsony vagy magas rtknek megfelel 0 V vagy 5 V-os feszltsg. Az SCL vonal magas szintje alatt rvnyes az adat, vagyis a vev csak ekkor olvashatja, az adat csak az SCL vonal alacsony szintje alatt vltozhat, ilyenkor a vev nem olvashat a buszrl.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

1.5. KOMMUNIKCIS PROTOKOLLOK

31

1.2. bra: Egy bit tvitele, START s STOP felttel a buszon START jel akkor kldhet a buszon, ha a busz inaktv, azaz az SDA s az SCL vezetk is magas szint. A busz aktv lesz a START bit kldse utn (SCL magas llapotban az SDA vonalon egy magas llapotbl alacsony llapotba trtn tmenet van (SCL=1, SDA=1-bl 0 rtkre vlt). A STOP bit kldse a kvetkez mdon trtnik: az SCL magas llapotban az SDA vonalon egy alacsonybl magasba val tmenet van (SCL=1, SDA = 0-bl 1 rtkre vlt). A START s STOP biteket csak a mester eszkz hozhatja ltre. A busz csak a START s STOP bitek kldse kztt aktv, a STOP jel utn jbl szabadd vlik a busz s inaktv llapotba kerl. A busz adattvitel byte szervezs. Az tvitt byte-ok szma tetszleges lehet. Az adnak visszaigazolst kell kapnia arrl, hogy a vev sikeresen fogadta az elkldtt adatot. A slave egysg minden sikeresen fogadott byte vtele utn egy alacsony szint nyugtz (ACK, Acknowledge) bitet kld. Az rajelet ebben az esetben is a master egysg generlja, ilyenkor a master az SDA vonalat nagy impedancisra lltja, hogy olvasni tudja a slave nyugtzst. A nyugtzskor a slave egysg lehzza az SDA vonalat. Az tvitel mindig a legmagasabb helyrtk (MSB, Most Significant Bit) bittel kezddik.

1.3. bra: Egy byte tvitele az I2C buszon


Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

32

1. BEGYAZOTT RENDSZEREK

Az adatbiteket a master, az ACK bitet a slave egysg kldi. Ha a slave nem kpes egy byte-ot fogadni, akkor az ACK bit kldse elmarad, s az SCL vonalat alacsony szinten tartja s egy vrakoz llapotba kerl a busz. Az adatvonalon az informciramls kzben a master s a slave egysg is adknt viselkedik, az rajelet viszont minden esetben a master egysg generlja. (Ha az informciramls irnya olyan, hogy a slave-tl krdezi le a master az adatokat, akkor a slave kldi az adatokat a master egysg pedig nyugtzza a vtelt. Az rajelet ebben az esetben is a master egysg generlja.) Kt esetben fordul csak el az adattvitel sorn, hogy nem szksges nyugtzs: A mester a vev egysg, ekkor az adnak valahogy jelezni kell a byte sorozat vgt, ezt gy teszi meg, hogy a kldnek nem kld nyugtzst (ACK). Az ACK jelhez kapcsold rajelet termszetesen a master generlja, de az SDA vonalat nem hzza le alacsony szintre. Ezt hvjuk negatv nyugtzsnak (NACK). A slave akkor nem kld nyugtz (ACK) jelet, ha nem kpes jabb adat byte-ok fogadsra.

Adatforgalom a buszon az eszkzk kztt


Az IC buszon lv minden eszkznek sajt cme van, gy egyrtelmen beazonosthatv vlik minden egysg. A cm hossza 7 bit, amellyel maximum 128 eszkz cmezhet. Az adattvitelt a master kezdemnyezi azzal, hogy a buszon elkld egy START bitet, ez utn elkldi a buszra a slave egysg cmt, amelyikkel kommuniklni szeretne. Ha a slave felismeri az (egy byte hosszsgban elkldtt) sajt cmt, akkor azt egy ACK jellel nyugtzza, ezutn kpes a slave adatot kldeni vagy fogadni. A nyolcadik, a legkisebb bit (LSB, Low Significant Bit) hatrozza meg a szolgval trtn adatcsere irnyt. Az alacsony logikai szint az rst jelenti (W), ilyenkor a master kldi az adatokat. A magas lokai szint az olvasst (R) jelenti. A buszra kapcsolt eszkzk cmei kt csoportba sorolhatk: programozhat cmmel rendelkez eszkzk, amelyek ltalban a mikrokontrollerek a fix cmmel rendelkez perifria ramkrk cmei Az eszkzk cme kt rszbl llhat: tpus cmbl 3, amit a gyrtk rendelnek az eszkzkhz egy hardver cmbl, amely az eszkz cmz lbainak alacsony s magas szintre ktsvel llthat.

1.4. bra: Adatok kldse az I2C buszon

A tpus cm az azonos (tpus) tokokra jellemz cm s mindig megegyezik. Ezzel a cmmel jelentkezik be

a slave eszkz ill. ezzel a cmmel szltja meg a master eszkz a Slave -et adatcsere eltt. www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

1.5. KOMMUNIKCIS PROTOKOLLOK

33

Az bra bal oldaln lthat az S betvel jellt START bit, amelyet a megfelel hosszsg sznet utn cm mez kvet, melyen jl lthat a fix s a konfigurlhat rsz, majd az elkldtt byte a kommunikci irnyt jelz bittel vgzdik. Ezt kveti a nyugtzs (ACK), majd a kett adatbyte kvetkezik. A komminikci a P betvel jellt STOP bittel vgzdik.

1.5.2. SPI busz


Az SPI (Serial Peripherial Interface = Soros Perifria Illeszt) kommunikcis eljrst a Motorola ltal fejlesztette ki, az SPI busz egy nagysebessg master-slave alapokon nyugv szinkron adattviteli rendszer. Alkalmazsa lehetv teszi egy processzor vagy mikrokontroller s tbb kiegszt ramkr, vagy ms kontroller vagy CPU egysgek sszekapcsolst. Az rajel jellemzi, gymint polarits (CPOL), fzis (CPHA) szoftveresen llthatak. A kiegszt ramkrk slave jellegt a szabvny rgzti. Egy adattviteli ciklus nyolc rajel alatt megy vgbe, amely sorn a master kld egy adat sorozatot a megcmzett slave eszkznek s az viszont. Ezt a ktirny adattvitelt egyetlen rajel vezetk szinkronizlja. A busz tlagos sebessge 2 MHz-re is nvelhet, azonban lteznek olyan eszkzk is, amelyeknl a 4-5 MHz is elrhet. A szabvny a busz kialaktshoz ngy vezetket r el: adatvonal bemenetet (MOSI, Master Out Slave In), kimenet (MISO, Master In Slave out), rajel (SCK, Serial Clock), slave egysg kivlasztst lehetv tev (CS, Chip Select). Az SPI kommunikci sorn a master lltja el a szinkron rajelet s a chip select-tel kivlasztja azt az eszkzt, amellyel kommuniklni szeretne. Ezt kveten kezddik meg az adattvitel, amely trtnhet az rajel felfut s lefut lre is, amelyet az eszkz dnt el, mert a mikrovezrlk tlnyom tbbsge mindkt zemmdot tmogatja. Az SPI alkalmazsnak legfbb elnye az I2C buszos kommunikcival szemben a gyorsasg s egyszerbb szoftveres kezels. Htrnyaknt szerepel viszont, hogy a kommunikcihoz 4 darab adatvonal szksges s a minden egysg szmra be kell hzalozni egy chip select vezetket is.

1.5. bra: SPI busz lehetsges vezrlsi lehetsgei, fzis s polarits alapjn
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

34

1. BEGYAZOTT RENDSZEREK

1.SCK 2.SCK 3.SCK 4.SCK

CPOL 0 0 1 1

CPHA 0 1 0 1

Az brn lthat, hogy az rajel 1. s 2. llapotban alacsony, a 3. s 4. pedig magas alapllapot. Az adatokat az 1. s 4. esetben az adatot felfut l hatsra rtelmezzk, mg a 2. s 3. esetben lefut l bekvetkezse esetn olvassuk ki. A master eszkzk tbbsge mindegyik zemmdot tmogatja, amg a legtbb slave eszkz csak egyik mdban kpes kommuniklni.

1.6. bra: Olvass az SPI buszrl (IC regiszternek olvassa) Az brn lthat, hogy a master a kommunikcit a chip select alacsony szintre hzsval kezdi. Az elkldtt els byte tartalmazza azt, hogy milyen utastst szeretnnk vgrehajtani az IC-vel, ezt kveten kell megadni az IC regiszternek a cmt. Ezek utn az rajel lptetsvel bitenknt kiolvashat a krt informci. (Termszetesen tbb adatbyte is kiolvashat.)

1.7. bra: rs az SPI buszra (IC regiszternek belltsa) Az brn egy IC regiszternek az rsa lthat, a chip select alacsony szintre hzsa utn kell belltani az utasts kdjt, majd el kell kldeni a cmet tartalmaz byte-ot, ezek utn kell kldeni az adatbyte-okat.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

1.5. KOMMUNIKCIS PROTOKOLLOK

35

1.5.3. SPI s I2C sszehasonltsa


Az SPI s az I2C adattviteli eljrs hasznlata megfelel olyan alkalmazsoknl, ahol a perifrik elrse idben egyms utn trtnik (pldul: memrik, perifrik stb.). Azonban az SPI busz alkalmazsa praktikusabb az gynevezett adatfolyam jelleg kommunikcit ignyl folyamatoknl (pldul: processzorok egymssal val kommunikcija, mintavtelezs stb.). Az elrhet sebessg szempontjbl az SPI tovbbi elnyeknt emlthetjk a nagysgrenddel nagyobb, nhny MHz-es mkdsi sebessget, mg az I2C esetben ez csak KHz-es tartomnyba esik. Az SPI busz valdi elnyt a full duplex kommunikci jelenti, amely sorn egyidejleg kldhetnk s fogadhatunk adatokat, az I2C busz flduplex megoldsval szemben. Az I2C elnye a kezelend slave eszkzk szmban rejlik, amely maximum 128 egysget jelent. Az SPI busz tbb slave-vel trtn hasznlata tbb kiegszt hardvert s sszetettebb programkdot ignyel. Az SPI busz esetben minden esetben el kell huzalozni a chip select lbakat is. Az SPI legnagyobb htrnya az, hogy nem rendelkezik semmilyen nyugtz mechanizmussal, vagyis a master eszkz semmilyen jelzst nem kap arrl, hogy az adattvitel sikeres volt vagy a slave eszkz egyltaln ltezik. Erre a legjobb megolds az, hogy az IC belltott regisztert kiolvassuk az rs utn, gy le tudjuk ellenrizni az rsi kommunikcis ciklust. A pont-pont jelleg kapcsolatok esetn sokkal kezelhetbb s hatkonyabb az SPI busz alkalmazsa.

1.5.4. Aszinkron soros kommunikci


Nagyobb tvolsgokra trtn adattovbbts esetn fontos szempont a kbelezs kialaktsa. Kicsi mrettartomnyban IC-k kztt ez nem jelent klnsebb problmt, de nagyobb buszhosszsg esetben mr nem mindegy, hogy hny rrel rendelkez kbelt kell alkalmazni. Az eddig vizsglt szinkron kommunikcis mdoknl szksg volt egy rajelet tovbbt vezetkre, aminek a segtsgvel az adattvitelnl a kommunikci szinkronizlhat volt. Az aszinkron kommunikci tlete az, hogy ez a szinkronizl vezetk milyen mdon sprolhat meg. Az tvitel sorn az ad brmely idpillanatban kezdemnyezheti az adattvitelt. Ennek azonban az a felttele, hogy egy azonos, sebessggel kell az adnak s a vevnek is mkdnie, ha ez nem teljesl, akkor az tvitt adatok rtelmezhetetlenek, a sebessget szabvny rgzti. A kommunikci menett a kvetkez bra szemllteti. Az brn ltszik, hogy a kommunikci a START bittel kezddik, amely egy magas alacsony llapot tmenet, ezt a 8 adat bit s a parits bit (pros vagy pratlan szmra egszti ki az adatknt elfordul egyesek szmt) kvet, majd vgl a STOP bit zrja a kommunikcit. Az idzt a baud rate-nek a frekvencijval, azonban egy fl rajel ciklussal eltolva mintavtelezi a biteket, biztostva az egyrtelm mintavtelezst. A STOP bitet minimum hrom rajel sznetnek kell kvetnie, mieltt a kvetkez adat elkldhet.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

36

1. BEGYAZOTT RENDSZEREK

1.8. bra: Aszinkron soros kommunikcis protokoll elvi felptse

1.5.5. RS 232
Az RS-232 (Revised Standard 232) aszinkron soros kommunikcis szabvnyt az Electronic Industries Association (EIA) fejlesztette ki. Az RS-232 kialakts napjainkban is gyakran alkalmazott szabvnyostott adattviteli eljrs, amelyet lehet 9 illetve 25 plus csatlakozval hasznlni. A szabvny megalkotsa sorn figyelembe vettk azt, hogy az interfsz brmely vezetkeinek sszektse sorn az eszkzben kr ne keletkezzen. Az RS-232 rendszer ktirny, full duplex kommunikcis csatorna, ahol a jel egy a logikai villamos GND szinthez kpest ltrejv feszltsgknt jelenik meg. Inaktv llapotban a jel a GND szinthez kpest mrve negatv, mg aktv llapotban a jelszint pozitv.

1.9. bra: Az bet tvitele (ASCII kdja = 10000101B) A binris adatjelet +3V s +15V feszltsg tartomnyban definilt logikai alacsony (SPACE), s a -15V s -3V tartomnyban rtelmezett logikai magas (MARK) szint valstja meg. A kimeneti jelszint +15V s -15V kztt vltakozik, ahol a +3V s a -3V kztti tartomny a tiltott sv, amelynek szksgessge a zajelnyelsben nyilvnul meg. Az tvitt bitek idtartama nem lehet tetszleges, rtkt a szabvny szablyozza, amelynek rtke a bitid
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

1.5. KOMMUNIKCIS PROTOKOLLOK

37

szabvnysorbl vlaszthat az alkalmazs ignyeinek megfelelen. Az egy bit tvitelhez szksges idtartam reciproka az gynevezett baud rate, melynek tipikus rtkei: 1200, 2400, 4800, 9600 bit/sec). Az RS-232 kialakts az aszimmetrikus volta miatt rendkvl nagy rzkenysggel br a kls elektromos zavarokra, amely cskkenthet a kbel rnykolsval, illetve kikszblhet a jelek szimmetrikus RS-422 vagy RS-485 rendszerre alaktsval. A jelek tvitelhez alacsony kapacits kbel szksges, mivel a szabvny szerint (EIA/RS-232) egy r maximlis kapacitsa 2500 pF lehet. Megfelel kapacits kbel (tlagos kbelek kapacitsa 100 pF/m, a jobb minsgek, pedig 40-50 pF/m) esetn a szabvny ltal elrhet maximlis tvolsg 15 m lehet. A kbel minsgn kvl msik, a rendszer kapacitst szmotteven befolysol tnyez a tlfeszltsg-levezet vddidk kapacitsa, melyek kapacitsa 500-1000 pF is lehet egyenknt, amely jelentsen cskkenti a hasznlhat kbel hosszsgt. A 2500 pF maximlis kbelkapacitst mg tovbb cskkenti a vev 20 pF rtk bemeneti kapacitsa.

1.5.6. RS-422
Az RS-422 egy szimmetrikus pont-pont kztti adattvitelre kialaktott rendszer, melyet az RS-232 rendszernl nagyobb tvolsgok thidalsra s nagyobb adatsebessg elrsre terveztek. Az ilyen rendszernek megfelel ramkrk kt, egymssal nem azonos fld potencil vezetkkel rendelkeznek. Az RS-422 adattvitel segtsgvel hlzatok is ltrehozhatak maximlisan 10 eszkz rszre gy, hogy 1 ad s 10 vev csatlakozik a buszhoz. A szabvnyban kizrlag jelkarakterisztikk vannak definilva, a csatlakoz tpusok s bektsi mdok nincsenek meghatrozva. A szabvny 1200 m-ben hatrozza meg az adattviteli tvolsg maximumt, amely 115 KBaud sebessg esetn relisan mindssze 1000 m krli, amennyiben meghajtknt egy szemlyi szmtgp kommunikcis port-jt alkalmazzuk.

1.10. bra: Az RS-422 kommunikcira hasznlhat meghajt (MAX489) ramkr bektse 2 eszkz esetn a buszt lezr ellenllsokkal

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

38

1. BEGYAZOTT RENDSZEREK

Az RS-422 ad minden kimenetn megjelen jelszint 7V nagysg feszltsg. A jelszint 200 mV-ra cskkenst a vev mg rvnyes jelknt fogadja. Az tvitt jel kt llapota a kvetkez mdon valsul meg. Ha a meghajt A kivezetse negatv a B-hez kpest a vonal logikai magas szintre (MARK), ellenkez esetben, vagyis ha a meghajt A kivezetse pozitv a B-hez kpest, akkor a vonal logikai alacsony (SPACE) szintre kerl. Az RS-422 rendszernl a meghajt mindig engedlyezett llapotban van. Az RS-422 rendszer kialaktshoz sodrott rpr vezetk hasznlata szksges, amely az llhullm mentes jeltvitelt biztostja. A vezetk vgt egy adott rtk ellenllssal kell lezrni. A rendszerben csak egy meghajt van a hlzaton, ezrt a lezr ellenllst az utols vevhz lehet legkzelebbi helyre kell elhelyezni a kbelen.

1.11 bra: Az RS-422 kommunikcira hasznlhat meghajt (MAX489) ramkr bektse 2 eszkz esetn mindkett vonalon full-duplex kommunikcival, a buszt lezr ellenllsokkal

1.5.7. RS 485
A szabvny nem klnbzik nagymrtkben az elbbiekben ismertetett RS 422-tl. A szabvny nem tartalmaz egyrtelm utastsokat a csatlakoz felleteket s a bektst illeten, azonban szigor elrsokat kzl a jelek karakterisztikjval kapcsolatosan. Ez a fajta kommunikci is master-slave alap. A szabvny sorn sodrott rpron keresztl, s szimmetrikusan trtnik az adattvitel. A szmunkra fontos informcit a vezetkek kztti potencilklnbsg eljele szolgltatja. A vonalpron megengedett egynl tbb ad s vev csatlakoztatsa is. Kialakthat fl-duplex (half-duplex) s tejesen-duplex (full-duplex) sszekttets, az elbbihez kt az utbbihoz ngy vezetk alkalmazsa szksges. A buszra csatlakoztatott eszkzk maximlis szma 32 lehet, ha ezt meghalad szmt kvnunk a buszhoz rendelni, akkor a vonalerstk alkalmazsa elkerlhetetlen. A szabvnyt ipari krnyezetben alkalmazzk s a maximlisan thidalhat tvolsg 1200m, jelerstsek alkalmazsa nlkl.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

1.5. KOMMUNIKCIS PROTOKOLLOK

39

1.12 bra: Az RS-485-s kommunikcira hasznlhat meghajt (MAX481) ramkr bektse 4 eszkz esetn a buszt lezr ellenllsokkal A kommunikci az gynevezett multi-drop elven mkdik, amelyet gy alaktanak ki, hogy a master adat kimenete csatlakozik az sszes slave eszkz adat bemenetre, azonban a slave adat kimenetek villamosan kzstve kapcsoldnak a master adatbemenetre. Ebben a tulajdonsgban tr el az elbb ismertetett RS 422 s RS 232 szabvnyoktl, amelyek pontpont sszekttetseket hivatottak szolglni. A szabvny lehetsget nyjt busz rendszer kialaktsra, mivel azonban egyidejleg csak egy master adhat jelet, meg kell oldani a vezrl jel tadst.

Alkalmazhat kbelek
A gyakorlatban a fent emltett soros kommunikcis hlzatok kialaktshoz csavart rpr szksges, amely lehet rnykolt (STP) s rnykolatlan (UTP). A vezetkek csavarst az egymsra gyakorolt hatsukbl kialakul interferencia elkerlse indokolja. Az alkalmazott vezetkek ltalnossgban 4 egymstl eltr csavarszm rprt tartalmaznak, amely az rprok egymsra hatst akadlyozza meg. A csavarsok szma azonban befolysolja a sebessget is, amely a nagyobb szm esetn nagyobb rtk. A kbelek ra a mterenknti csavarsok nvekedsvel arnyosan n. A kbelek hrom legfontosabb jellemzje a vezetktmr, a kapacits s a hullmimpedancia, amely lehet 100 illetve 120 Ohm.

1.5.8. MODBUS protokoll


A Modicon cg ltal kifejlesztett nylt forrskd protokoll, amely ipari felhasznlsra kszlt. Egy master/slave tpus adattvitel, amely elre definilt kdokbl pl fel. A felhasznlk kt zemmd kzl vlaszthatnak, az egyik az ASCII, a msik pedig az RTU, tovbb brmely llapot esetn a Baud-rate s a parits tpusa llthat. Ezeknek a belltsoknak, a hlzatot hasznl minden eszkz esetben meg kell egyeznie. Az ASCII mdot vlasztva, a nyolcbites adatot kett ASCII kdnak megfelel karakterknt tovbbt a protokoll. Ennek a mdnak a legnagyobb elnye, hogy kt karakter kztt akr egy msodperc nagysg sznetek is megjelenhetnek az adattvitel sorn anlkl, hogy zavart okoznnak. Formtuma a kvetkez:
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

40

1. BEGYAZOTT RENDSZEREK

Kd: Egy byte felptse: Hibaellenrz:

hexadecimlis (ASCII karakterek 0-9,A-F) 1 start bit, 7 adat bit (LSB elszr), 1 parits bit, 1 stop bit ha alkalmazunk paritst s 2 bit ha nem Longitudinlis Redundancia Check (LRC)

Az albbi brn lthat a kldend zenet keretrendszere. Az zenetek mindig a kettspont (:=3A hex) karakterrel kezddnek s a kocsi vissza-soremels (CRLF=0D s 0A hex) karakterrel vgzdnek. START 1 karakter : CM 2 karakter UTASTS 2 karakter ADAT n karakter LRC 2 karakter STOP 2 karakter CRLF

A msik emltett zemmd az RTU (Remote Terminal Unit), amely sorn az adatok kett darab ngybites hexadecimlis karakterknt kerlnek tovbbtsra. Elnye a msik zemmddal szemben abban rejlik, hogy ugyanazon Baud-rate mellett tbblet adattvitel jelentkezik a nagyobb adatsrsg kvetkeztben. Kd: 8 bit binris, hexadecimlis 0-9, A-F Egy byte felptse: 1 start bit, 8 adat bit (LSB elszr), 1 parits bit, 1 stop bit ha alkalmazunk paritst s 2 bit ha nem Hibaellenrz: Ciklikus Redundancia Check (CRC) Az RTU zemben az zenetek 3,5 karakter idnyi sznettel kezddnek s vgzdnek, amelyet a Baud rate-nek megfelel nhny karakteridvel knnyedn megvalsthatunk (T1T4). Fontos tudni azonban, hogy az egsz adattvitel folyamatosan kell, hogy trtnjen, mert ha egy 1,5 karakteridnl hosszabb megszakts van a jelsorozatban akkor a fogad eszkz azt felttelezi, hogy a kvetkez fogadott byte egy j zenet cm mezjvel egyezik meg Hasonlkppen, ha egy j zenet 3,5 karakter idnl elbb kezddik az eszkz azt felttelezi, hogy az elz zenet folytatsa. Az albbi tblzatban lthatjuk az RTU zenet felptst. START T1-T2-T3-T4 CM 8 bit UTASTS 8 bit ADAT nx8 bit CRC 16 bit STOP T1-T2-T3-T4

LRC ellenrz sszeg


Az ASCII mdban kerl alkalmazsra. Ellltsa gy trtnik, hogy a kettspont : start s CLRF stop karakter kivtelvel az tvitt 8 bites bjtokbl kpzett kettes komplemens rtkek sszegzdnek.

CRC ellenrz sszeg


Az RTU mdban tovbbtott jelsorozatok ellenrz sszege ez a bjt. A kpzse sorn az zenet egszt megvizsglja, s a parits bit meglte irrelevns az ellenrzs szempontjbl. A CRC kd egy 2 bjtos, 16 bit nagysg binris sszeg. Az rtkt mindig a kld eszkz kpezi, amelyet a fogad eszkz a vtel sorn szmol, majd sszehasonlt a kapott sszeggel. Ha a kt binris szm eltr, akkor hibazenet keletkezik. Kpzse sorn a CRC regiszter
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

1.5. KOMMUNIKCIS PROTOKOLLOK

41

minden bitje elszr logikai 1-es llapotba kerl. Majd ehhez kapcsoldnak az egymst soron kvet 8 bites adatok, a start, stop s paritst nem belertve. A bjtot EX-OR fggvnykapcsolatba hozza a regiszter aktulis tartalmval, majd az eredmnyt az LSB, legkisebb helyirtk bit irnyba eltolja s az MSB, legnagyobb helyirtk bit helyre pedig 0 logikai rtket r. Ezutn megvizsglja az LSB rtkt, ha 1-es, akkor EX-OR kapcsolatba hozza egy elre definilt rtkkel, ha pedig 0 volt, akkor semmilyen mveletet nem hajt vgre az sszegen. Ez a folyamat addig zajlik, amg 8 lptets nem trtnt. Ezutn a kvetkez 8 bit kerl EX-OR kapcsolatba a regiszter aktulis tartalmval, s ismtldik meg nyolc, az elbb emltett lptets erejig. A mveletsorozat vgn keletkez rtk, a CRC hibajavt sszeg. Ez az egyik lehetsges megolds. Ltezik egy gynevezett CRC kdtbls megolds is, amely nyilvnvalan gyorsabb mkds, azonban lnyegesen nagyobb memria terletet szksgel a mkdshez.

1.5.9. PROFIBUS
A Process Field Bus szavak sszevonsbl alkottk meg a A PROFIBUS mozaikszt. A szabvnyt 1989-ben fejlesztette ki a nmet kormny msik 15 cg s kutatintzet segtsgvel s a PROFIBUS International felgyeli, frissti a szabvnyt. A trsasg egy nmetorszgi szkhely (Karlsruhe) non-profit szervezet, mely az eurpai ipari automatizls piac nagy rszt uralja. A cl egy olyan buszrendszer megalkotsa volt, amely szles krben alkalmazhat a gyrtsban s folyamatirnytsban hasznlt intelligens terepi eszkzk sszekapcsolsra. A PROFIBUS univerzlis nemzetkzi szabvnyokon alapszik s kzelt az OSI modell ISO 7498-as nemzetkzi szabvnyhoz. Ebben a modellben minden rtegnek (sszesen 7) pontosan meghatrozott funkcija van. Az els rteg, mely a fizikai rteget (Physical Layer) jelenti, meghatrozza az tvitel fizikai karakterisztikjt. Fizikai rtegnek a PROFIBUS megalkoti a mr meglv szabvnyok kzl vlasztottk ki az RS-485-t. A msodik rteg az adatkapcsolati rteg (Data Link Layer), mely a buszelrsi protokollt definilja. A PROFIBUS csak az els s msodik rteget hasznlja a 7 rteg OSI modellbl.

A fizikai rteg a PROFIBUS szabvnyban


A fizikai rteg maga a kzvett kzeg, ami sszekapcsolja az egy hlzatban szerepl eszkzket. Ide rtjk a teljes kbelhosszt, a kialaktott topolgit, az interfszt, a csatlakoztatott llomsok szmt, az tviteli sebessget, amely 9,6 s 1500 kbaud kztt vltozhat. Fizikai rtegknt az RS-485-t alkalmazzk a PROFIBUS-nl.

Kbelek
Az RS-485-s szabvnynak megfelelen a fizikai rteg egy lineris busz, amely mindkt vgn ellenllssal lezrt csavart rpr vezetk, maximlis hossza 1200 m lehet, a csatlakoztatott llomsok szma pedig 32. Lehetsg van kiterjedtebb topolgia (hosszabb kbel, csillag struktra) kialaktsra s tbb lloms csatlakoztatsra, amennyiben Repeater llomsokat helyeznk el a hlzatba. Az RS-485-s szabvnynak megfelelen a PROFIBUS-DP

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

42

1. BEGYAZOTT RENDSZEREK

aszinkron, half-duplex adattvitelt hasznl s az adatokat NRZ kdols, 11 bites karakterek formjban tovbbtja. A szabvny A s B jelzs jelvezetkeket definil, ahol A az RxD/TxD-N jelnek, a B pedig az RxD/TxD-P jelnek felel meg. Logikai 1 forgalmazsa esetn teht az A vezetken alacsony szintnek, mg a B vezetken magas szintnek megfelel feszltsg jelenik meg.

Csatlakozk
Az eszkzk egy 9 plus D-Sub csatlakozn keresztl csatlakoztathatak, melynek hvely vltozata az lloms eszkzn, mg a dug tpus a kbelvgen tallhat. A szabvny fmhzas csatlakozk hasznlatt javasolja a zavarvdelem s tartssg rdekben. A csatlakoz lbainak elnevezse az albbi tblzatban lthat. Lb 1 2 3 4 5 6 7 8 9 Megnevezs SHIELD M24V RxD/TxD-P CNTR-P DGND VP P24V RxD/TxD-N CNTR-N Jelents rnykols -24V-os feszltsg Adat pozitv Control-P Digitlis GND Pozitv feszltsg +24V kimen feszltsg Adat negatv Control-N

A PROFIBUS szabvny albbi hrom verzija ltezik: PROFIBUS-FMS (Fieldbus Message Specification): mely a kommunikciban hasznlatos kliens-szerver modellre pl, automatizlsi eszkzkre tltetve. PROFIBUS-PA (Process Automation): terepi eszkzk s adllomsok sszekapcsolst teszi lehetv egy folyamatirnyt eszkzzel. Tmogatja a biztonsgos adattvitelt s megengedi az energiatvitelt a kommunikcis vezetken. A paramterek s funkcionlis blokkok definilsa a folyamatirnyts minden terletre kiterjed. PROFIBUS-DP (Decentralized Peripherals): nagy sebessg be- s kimenetek vezrlsre hasznljk, a szenzorok s beavatkoz szervek irnyt beredezshez val kapcsolshoz.

A PROFIBUS-DP eszkztpusokat hrom osztlyba lehet sorolni a hlzatban betlttt szerepk szerint: Class 1 DP Master: Egy class 1 tpus master eszkz ltalban egy kzponti programozhat irnytegysg (PLC) vagy egy szmtgpen fut specilis szoftver. Ez vgzi a hlzati cmek kiosztst a buszon s az adatcsert meghatrozott periodusid szerint a hozz csatlakoztatott eszkzkkel. Meghatrozza a baud rate-et (melyet az eszkzk automatikusan felismernek), a token zenetek cserjt vezrli a Master eszk-

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

1.5. KOMMUNIKCIS PROTOKOLLOK

43

zk kztt. A Slave-ekkel aktvan kommunikl, mg egy Class 2 Master-rel csak paszszvan (krs alapjn). Van sajt lerfjlja, mely pontosan lerja mkdst. Class 2 DP Master: Ez a tpus egy konfigurcis eszkz, mely lehet egy laptop vagy konzolgp. F feladata a Class 1 DP Master konfigurlsa, de felgyeleti, s diagnosztikai feladatokat is ellt. Aktvan kpes kommuniklni Class 1 Master tpus eszkzkkel s a hozzjuk kapcsolt Slave-ekkel. DP Slave: Egy Slave eszkz passzv llomsknt van jelen a buszon, amely azt jelenti, hogy csak vlaszolni tud a Master krsekre, valamint megerst zenetet kldeni. Minden ilyen eszkz egy Class 1 DP Master-hez tartozik (amennyiben kapott hlzati cmet), amelynek rsi joga is van hozz. Minden neki kldtt krsre vlaszol, kivve a broadcast s multicast tpusakra. A Slave-nek is van ler fjlja, mely tartalmazza paramtereit s funkciit.

1.5.10. CAN busz


A CAN hasznlatakor az llomsok (vezrlk, rzkelk s beavatkozk) egy buszrendszeren keresztl vannak sszektve, melyeken az informci tovbbtsa soros szervezs. A busz egy szimmetrikus vagy aszimmetrikus kt vezetk, amely lehet rnykolt vagy rnykolatlan is. A fizikai tvitel elektromos paramtereit szintn a CAN szabvny specifiklja. A mai korszer jrmvek tbbsge nagyszm elektronikus vezrl rendszert tartalmaz. A jrmiparban az elektronikus vezrlk szmnak nvekedse egyrszt a felhasznl biztonsgi s knyelmi ignyeinek, msrszt a krnyezetvdelmi megfontolsoknak (krosanyag kibocsts s zemanyag fogyaszts cskkentse) ksznhet. Ilyen vezrleszkzk lehetnek pldul a motorban, a sebessgvltban, a kormnynl, valamint a blokkolsgtl (Antilock Braking System ABS) s menet-stabiliztor (Electronic Stability Program ESP) rendszerben. A knyelmet szolgl eszkzknl pedig pldul a klmnl, s az audiorendszernl. Ezen rendszerek funkciinak bonyolultsga elkerlhetetlenn teszi a rendszerek elemei kztti adatcsert. A hagyomnyos rendszerekben az adatcsere dediklt adatvonalakon keresztl trtnik, de ezt a vezrlsi funkcik bonyolultabb vlsval egyre nehezebb s drgbb megvalstani. A bonyolult vezrlrendszerekben az sszekttetsek szma tovbb mr nem volt nvelhet. Egyre tbb olyan rendszert is kifejlesztettek a gpjrmvek szmra, amelyek tbb vezrleszkz egyttmkdst ignyeltk. (Motor vezrlse, menetstabiliztor, automata sebessgvlt, mszerfal-gombok.) Szksgess vlt a hagyomnyos pont-pont sszektsnek lecserlse, amit gy oldottak meg, hogy a rendszer elemeit egy soros buszrendszerre ktttk r. Az addig hasznlt soros buszrendszereknek viszont tl kicsi volt az tviteli sebessgk, vagy a kommunikcis hibkat nem kezeltk megfelelen. Mivel az autipar szmra nem volt megfelel buszrendszer, ezrt fejlesztette ki a Bosch a Controller Area Network-t. A CAN protokoll, amely az ISO OSI (Open Systems Interconnection) modell fizikai s adatkapcsolati rtegnek felel meg s kielgti a jrmipari alkalmazsok valsidej ignyeit is. Az egyszer konfigurlhatsg, olcs implementlhatsg, nagy sebessg s a kzponti hibaellenrzs a CAN elnys tulajdonsga, amely a CAN gyors elterjedst eredmnyezte.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

44

1. BEGYAZOTT RENDSZEREK

A CAN rendszerek jrmvekben val hasznlatnak elsdleges clja az volt, hogy az vezrl egysgek kzponti vezrl hasznlata nlkl is tudjanak kommuniklni.

A CAN busz trtnete


1990-ben a CAN specifikci megalkotja, a Bosch GmbH., a CAN specifikcijt nemzetkzi szabvnyostsra nyjtotta be, majd ez utn 1992-ben megalakult a CAN in Automation (CiA) fggetlen nemzetkzi felhasznli s gyrti csoport, a klnbz megoldsok egysgestshez, valamint a CAN tovbbi technikai fejldsnek elsegtshez. A CiA leszktette az ISO OSI modell szerinti fizikai rteg specifikcijt vezetk, csatlakoz s transceiver ajnlsra. Ksbb a CiA kidolgozta a CAL-t (CAN Application Layer), amely az ISO OSI modellhez kpest a CAN-bl addig hinyz alkalmazsi rteget kpes ptolni. Ksbb olyan tovbbi CAN alkalmazsi rtegek definilsval foglalkoztak, mint pldul a SDS (Smart Distributed System). 1993-ban a Nemzetkzi Szabvnygyi Hivatal (International Standardisation Organisation ISO) kiadta az ISO 11898-as CAN szabvnyt, amely a protokoll standard formtum (11 bites azonostj) zenetein tl a fizikai rteget is definilta, a maximlis 1 Mbit/s-os tviteli sebessgig. Az egy rendszerben elkldhet zenetek nvekedsvel szksgess vlt a kiterjesztett formtum (29 bites azonostj) zenetek specifiklsa, amelyet az ISO 11898 kiegsztseknt jegyzett be a Nemzetkzi Szabvnygyi Hivatal 1995-ben. A CAN 2.0-s specifikci az albbi fejezetekbl s fggelkbl ll: CAN 2.0 A fejezet (Part A): Standard formtum zeneteket (CAN Specification 1.2 alapjn) CAN 2.0 B fejezet (Part B): Standard s a kiterjesztett formtum zenetek CAN 2.0 Fggelk: tmutatst ad arra, hogyan kell megvalstani a CAN protokollt a szabvnynak megfelelen A CAN specifikcikat ler szabvnyok a kvetkezk: ISO 11898-1: a CAN adatkapcsolati rtegt rja le, ISO 11898-2: a CAN nagysebessg fizikai rteget definilja, ISO 11898-3: a CAN alacsony sebessg, hibatr fizikai rtegt rgzti. A CAN busz alacsony kltsggel implementlhat, a CAN vezrlk ma mr a kzepes tuds mikrokontrollerekbe is bele vannak integrlva, a halzat kialaktshoz hasznlhat sodort rpr vezetk kis kltsggel beszerezhet. Szinte az sszes mikrokontroller gyrt eszkzvlasztkban megtallhatk a CAN kommunikcit tmogat chipek, amely a CAN vezrlk rnak a cskkenst eredmnyezte. A CAN alacsony kiptsi kltsge nagyban hozzjrult a CAN busz gyors elterjedshez az autiparban s egyb terleteken is. A korszer szemlygpkocsikba s teherautkba egyre nagyobb mennyisg elektronikt ptenek be, s az eszkzk szma s bonyolultsga folyamatosan nvekszik. Mr kaphatk olyan gpjrmvek, melyekben a kormnykerk tttele a sebessg fggvnyben vltozik, vagy amelyben a kzifk elektronikusan mkdik. Mr a kzpkategris a szriaautkban is megjelent olyan parkolssegt rendszer, melynek segtsgvel az aut sajt maga be tud parkolni egy adott parkolhelyre. A mai gpjrmvekben szinte az sszes elektronikus eszkz a CAN buszra van ktve. (jabb gpjrmvek esetben CAN buszra es FlexRay-re.) A kzepes-nagyobb
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

1.5. KOMMUNIKCIS PROTOKOLLOK

45

funkcionaltssal rendelkez auttpusok esetn a CAN busz terheltsge akkora, hogy a folyamatos informciramlshoz 2-3 CAN halzat szksges. Ilyenek pldul azok a gpjrmvek, amelyek ESP-vel (elektronikus menetstabiliztorral) vannak felszerelve. A modern gpjrmveknl a busz(ok) sebessge ltalban 1 Mbps. Azok az eszkzk, amelyek kevesebb s a rendszer mkdse szempontjbl nem annyira fontos adatokat kldenek, ritkbban kldik el az adatokat (pldul: klma, rdi), azok az eszkzk, amelyek fontos funkcionalitst ltnak el srbben kldik (pldul: motor, vlt, ABS vagy ESP vezrl, gyorsulsmr szenzorok, stb.). Mivel a menetstabiliztor vagy a kiprgsgtl vezrl bemenetre vannak a kerkszenzorok csatlakoztatva, gy a vezrl kpes megllaptani a kerekek sebessgt. Ezekbl az adatokbl tudja kiszmolni, hogy az aut valamelyik kereke megcsszott vagy ppen kiprg. Ha megcsszik, akkor szelep(ek) segtsgvel a megfelel kerken cskkenti a fkkr olajnyomst, ha pedig kiprg a kerk, akkor a differencilm s a motor szleli a vezrl ltal kldtt adatokbl, hogy szksges valamilyen beavatkozst vgezni. Az ipari terepibusz rendszerek s a jrmvek buszrendszereinek az sszehasonltsa sok hasonlsgot mutat. Fontos kvetelmny az alacsony kltsg, az elektromgneses zajjal terhelt krnyezetben val mkds, a valsidej mkds s az egyszer hasznlat. Jl hasznlhat a gpekben vagy gyrakban az "intelligens" I/O eszkzk s az rzkelk/beavatkozk hlzatba kapcsolsra. Napjainkban az sszes nagy PLC gyrt knlatbl kivlaszthatak olyan tpusok, amelyek a CAN buszra csatlakoztathatk. Az adattvitel megbzhatsgn tl a csompontokra es alacsony kltsg is jelents rv a CAN hasznlata mellett. A begyazott rendszerekbe kerl j eszkzk kifejlesztse s javtsa egyarnt bonyolult feladat, mivel a berendezsek egymssal logikai kapcsolatban vannak, s felhasznljk egyms adatait. Ahhoz, hogy egy j termket ki lehessen fejleszteni, egy olyan tesztrendszert szksges kipteni, amely kpes arra, hogy a kifejlesztend termk szmra a bemeneti adatokat biztostsa, s kpes az rkez adatok feldolgozsra s ellenrzsre. Mivel a CAN buszra csatlakoz egysgek az adataikat CAN buszon fogadjk s kldik, ezrt a hatkony fejlesztmunkhoz szksges(ek) olyan eszkz(k), amellyel a busz forgalmt monitorozni lehet.

A CAN ltalnos jellemzi


A CAN protokoll egy multi-master protokoll, amelyben a csompontok (node) zenetek (message frame) segtsgvel kommuniklnak egymssal. Mindegyik adat tovabbtst vgz zenetkeretnek tartalmaznia kell az zenet azonostjt (message identifier) s adatklds esetben az adatmezt (data field). Minden CAN node egyenrang, nincsen kivlasztott busz-vezrl (bus master). Minden node kpes az zeneteit nllan tovbbtani az adatbuszon (data bus). Egy node lellsa esetn sem vlik mkdskptelenn a CAN busszal ptett begyazott rendszer, de a rendszer funkcionaltsa cskkenhet. Az zenetek azonostsa egyedi azonost (identifier) alapjn trtnik, ez alapjn lehet az zeneteket priorts alapjn csoportostani. Az zenetazonost hatrozza meg teht az adott zenet prioritst, valamint kzvetlenl szerepet jtszik a buszrt val versengs eldntsben is. A fontosabb informcit hordoz zeneteknek nagyobb a priortsa.
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

46

1. BEGYAZOTT RENDSZEREK

A buszon tovbbtott zeneteket mindig minden csompont megkapja (broadcast), s ellenrzi. A csompontok CAN vezrli az zenetek azonostja alapjn dntik el, hogy az zenetet eltroljk-e a vezrl pufferbe (message filtering). A filter konfigurlsa mindig a begyazott rendszer mikrokontrollernek/CPU-jnak a feladata, a filter mkds kzben brmikor megvltoztathat. A CAN busz prioritsos CSMA/CD+CR (Carrier Sense, Multiple Access/Collision Detection + Collision Resolution Vivjel rzkelses tbbszrs hozzfrs tkzsrzkelssel) mdiaelrsi technikt hasznlja. Az adatot kldeni kvn csompontok vrnak a busz felszabadulsig, majd a zenet kezdete bit (start bit) tvitelvel megkezdik az adatkldst. A start bit szinkronizlja az sszes csomopontot. Az zenet-azonost tovbbtsa a start bit kldse utn kezddik meg. Tbb node buszrt val versengsekor ebben a szakaszban trtnik az tkzs feloldsa, bitszint arbitrcival. Ez a technika a nem-destruktv arbitrcis mechanizmus (non-destructive arbitration), mivel a magasabb priorits zenet nem srl, gy mindig a legmagasabb priorits zenet lesz tovbbtva a buszon ksleltets nlkl. A rendszertervezk s zemeltetk szmra fontos, hogy tudjk azt, hogy az adott node mg csatlakozik a buszhoz, azrt az zenetek globlis nyugtz mezvel rendelkeznek, amely jelzi a kld node-nak, hogy legalbb egy node hibtlanul vette az zenet. Minden node nyugtz jellel vlaszol, ha nem szlelt semilyen hibt. Minden egyes elkldtt zenetre garantlja a szabvny, hogy azt minden node elfogadja vagy elutastja (konzisztens adattvitel). Ha brmely vev hibt szlel a vtel sorn, akkor egy hibajelz zenettel (error frame) azonnal megszaktja az tvitelt. A bitszint dominns vagy recesszv lehet, a bitfolyam kdolsa a Non-Return-to-Zero (NRZ) elv szerint valstja meg a CAN. A node-ok szinkronizlshoz a bitbeszrs mdszert is alkalmazza a CAN. t egymst kvet azonos rtk bit utn egy ellenttes bitet illeszt be a kld node a frame-ek kldse sorn, ezltal a kld node beszrt egy le- vagy felfut lt a bitid szinkronizlshoz. A CAN vezrlk sokfle hiba detektlsra kpesek: vezetk szakads, lezr ellenllsok hibja, testzrlat, egyb zrlatok. A szabvny nem definilja, hogy mi a teend a fenti hibk esetn. A kommunikci adott esemny bekvetkezsnek (j informci generldott egy csompontban) hatsra is el kezddhet. Az j informcival rendelkez csompont maga kezdi meg az tvitelt. gy jelents kommunikcis idt takart meg azokhoz a rendszerekhez kpest, amelyekben a csompontok minden ciklusban adott idszelettel rendelkeznek, amelyben az j informcijukat elkldhetik. Ugyanis abban az esetben, ha nincs j informcija egy csompontnak, akkor ez az idszelet krba vsz, mg esetlegesen egy msik, j informcival rendelkez eszkznek vrnia kell, amg sorra kerl. Ha sok node van a rendszerben s azok sokfle informcival rendelkeznek, akkor a bus esemnyvezrelt kezelse nem hatkony, mert esetlegesen 1 bit j informci elkldshez egy teljes zenetet kell elkldeni, amely legalbb 55 bit tovbbtsnak az idejt veszi ignybe a standard CAN zenet alkalmazsa esetben. Sok csompontot tartalmaz idkritikus vals idej rendszerek esetben csak a ciklikus informcicsere alkalmazsa elfogadhat megolds, ekkor egy bels idzt (timer) segtsgvel idztik a CAN zenetek kldst, gy detektlhat az is, ha egy node meghibsodik s mr nem kpes kommuniklni.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

1.5. KOMMUNIKCIS PROTOKOLLOK

47

Az esemnyvezrelt kommunikcit kiegsztve a CAN lehetsget biztost adatkr zenet" kldsre. Ezek segtsgvel egy node lekrdezheti a szmra fontos informcikat egy msik csomponttl. Az adatkr zenet, s az arra adott vlasz is kln zenetet alkot. sszetettebb rendszerek esetben ltalban a node-ok llapotnak (aktv/inaktv) lekrdezsre hasznljk. Ciklikus komminikci esetben az adatkr zenetet nem hasznljk. A szabvny klnbz mdszereket biztost a CAN busz meghajtsra, amelyek a kvetkezk: Differencilis md hasznlata esetben kett jelvezetk s egy fldvezetk (illetve referencia vezetk) szksges. A logikai bitszintet a kt vezetken lv jelek klnbsgbl hatrozza meg. Elektromos zavarok ellen vdett. Kiegyenslyozatlan md hasznlata esetn egy fld- s egy jelvezetk. Nagyon rzkeny a zajokra, csak ersen kltsgrzkeny alkalmazsokban alkalmazzk alacsony sebessgen, vagy a mr emltett vezetkhibk ideiglenes thidalsra.

1.13. bra: CAN-es csompontok hardvernek elvi felptse A CAN busz rendszere rugalmasan alakthat, mert a node-okat dinamikusan rkapcsolhatjuk, illetve levlaszthatjuk a buszrl anlkl, hogy a tbbi node kommunikcijt ez befolysoln. Az sszetett nagy bonyilultsg rendszerek tervezsben nagy szabadsgi fokot nyjtanak a kvetkez tulajdonsgok: A node-ok szma szabvnyos buszmeghajtk alkalmazsa esetn egy rendszeren bell 32 lehet, specilis (nagyobb ram) buszmeghajtk esetn akr 64-128 darab node-ra is bvthet. zenetek szma a rendszerben standard zenetformtum esetn 2048 (211), kiterjesztett zenetformtum esetn pedig 536 870 912 (229) lehet. Az elkldtt adatmennyisg zenetenknt 0 s 8 byte kztt vltozhat, amely megfelel megktsekkel elegend a jrmvekben valamint begyazott illetve automatizlt gyrt rendszerekben trtn alkalmazsokhoz, s garantlja a lehet legrvidebb buszelrsi idt a nagy priorits zenetek szmra. A maximlis zenethossz a beszrt bitekkel egytt standard zenetformtum esetn 130 bit, kiterjesztett zenetformtum esetn pedig 154 bit lehet. 1Mbit/s-os buszsebessg mellett 130 s s 154 s a maximlis adatkldsi id. Vltoz busz hosszsg.
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

48

1. BEGYAZOTT RENDSZEREK

Mivel a CAN ramhrkot hasznl, ezrt elektromgneses interferencikra alacsony az rzkenysge. A CAN szabvny garantlja, hogy a kld node ltal elkldtt adatok megegyeznek a fogad node-ok ltal fogadott adatokkal. A hibadetektl mechanizmust figyelembe vve 90% feletti buszterhels esetben statisztikailag 1000 v alatt egy olyan hiba fordulhat el, amelyet a rendszer nem detektl.

1.14. bra: CAN busz felptse s lezrsa standard md esetn Az busz felptst mutat brn jl ltszanak az ellenllsok, amelyek villamosan sszektik a CAN High (CANH) s CAN Low (CANL) vezetket. Az ellenllsok a segtsgvel alakul ki az ramhurok.

1.15. bra: CAN busz felptse s lezrsa split md esetn A CAN Split (osztott) mdon trtn lezrsa sokkal zavarvdettebb kommunikcit eredmnyez, elektromgneses zaj ltal szennyezet krnyezetben a Split lezrs alkalmazsa ajnlott. A CAN busz a kvetkez hibadetektl s hibakezel mechanizmusokkal rendelkezik: 15 bites, 6-os Hamming-tvolsg CRC-vel (Cyclic Redundancy Check), amely 5 hibs bit felismerst teszi lehetv a hibs zenetet a kld node automatikus jrakldi az ismtld hiba esetn a node lekapcsolsa a buszrl Az adattviteli sebessg a CAN busz hossztl fggen 5 kbit/s s 1 Mbit/s kztt vltozhat. Az elmletileg elrhet legnagyobb buszsebessg 1 Mbit/s, amely maximum 25 m hossz busszal garantl a rendszertervezk szmra a szabvny. Ha ennl hosszabb busz alkalmazsa szksges, akkor cskkenteni kell a bitsebessget. 400 mteres buszhossz esetn a bitsebessg 100 Kbit/s-re cskken, 1000m hossz busz alkalmazsa esetn pedig csak 50 kbps bitsebessg implementlhat, 1 km-nl hosszabb busz alakalmazsa esetn jelismtl(ke)t kell alkalmazni.
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

1.5. KOMMUNIKCIS PROTOKOLLOK

49

1.16. bra: Standard adat frame felptse

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

50

1. BEGYAZOTT RENDSZEREK

1.17. bra: Extended adat frame felptse


www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

1.5. KOMMUNIKCIS PROTOKOLLOK

51

A frame-ek kldse lthat a kvetkez brn. A mrsek LeCroy waveRunner 6050A Oscilloscope tpus eszkzzel kszltek. A frame-eket generl PIC mikrokontrolleres program 20 ms-onknt kldi a frame-eket a CAN buszra. A frame adatai a kvetkezk voltak: Azonost: 0x5A0 A frame adatbyte-jainak hossza: 8 byte Adatbyt-ok: 0,1,2,3,4,5,6 s 7

1.18. bra: Standard adat frame (LeCroy-os mrs) A kvetkez brn az SPI buszos adatforgalom lthat, amely feltlti a CAN vezrl IC kimeneti buffer-t a megfelel tartalommal (a 8 elkldtt adatbyte jl lthat az brn, a byteok rtkei: 1, 2, 3, 4, 5, 6, 7, 8):

1.19. bra: Az SPI buszon elkldtt adatbyte-ok figyelhetek meg a logikai jelanaliztor program ablakban, mikzben belltja a Microchip MCP2515 IC regisztereit
sszefoglalva a CAN protokoll legfontosabb tulajdonsgai a kvetkezk:

Nem-destruktv arbitrci Multimaster zenetkzpont


www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

52

1. BEGYAZOTT RENDSZEREK

Broadcast Adatkrs Esemnyvezrelt Kltsghatkony Gyors 1000Kbit/-os maximlis sebessg (40m-es buszhossznl) Flexibilis Robusztus Nyugtzs Hiba detektls Konzisztens zenettvitel Bitkdols Bit szinkronizci Nagy eszkzvlasztk

1.5.11. CANopen A CANopen ltalnos jellemzse


A CAN szabvny specifikcija az ISO OSI modell szerint a fizikai szintet s az adat bitek fizikai tovbbtst s azok keretezst definilja. Sok esetben az alkalmazsok ksztsekor a fejlesztsi munkt megknnyten, ha lenne egy magasabb szint szolgltatsokat nyjt szabvnyostott rteg. A CiA a CAN alkalmazsi rteget (CAL) definilta, ez a rteg tulajdonkppen a kommunikcit vgrehajt rendszer s az alkalmazs kztti interfsz.
CAN Alkalmazsi Rteg - CAL

brzolsi rteg Egyttmkdsi rteg Szlltsi rteg Hlzati rteg

CAN adatkapcsolati rteg CAN fizikai rteg

1.20. bra: Kibvtett CAN modell


www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

Nincsen implementlva

1.5. KOMMUNIKCIS PROTOKOLLOK

53

Sok j szolgltatst nyjt a CAN alkalmazsi rtege (CAN Application Layer CAL), sajt zenetobjektumokat s zenetformtumokat definil, melyek segtsgvel megadhatak az eszkzk nyjtotta funkcik elrsi mdjai. Az zenetekbe kerl adatokra j adattpusokat s jfajta kdolst definil. A rendszertervezk munkjt a master-slave kommunikcit tmogat eszkzk is tmogatjk, a legfontosabb ilyen eszkz a hlzatirnyt rendszer (Network Management NMT), rtegirnyt rendszer (Layer Management LMT) s a dinamikus azonost kiosztst vgz (Distributor DBT). Az ISO OSI modell szerint a CAL-lal kibvtett CAN modell mr tartalmazza az ISO OSI modell legfels szintjt, de a modell kzbls rtegei gy is hinyoznak. A megbzhat mkdshez a hinyz rtegek implementlsa nem felttlenl szksges. Az gy ltrejtt CAN alkalmazsi rteg egy jl hasznlhat kiindulsi pontot nyjt a fejlesztsekhez. Sok j ltalnosan felhasznlhat szolgltatst definil, de a szolgltatsok felhasznlsi mdjt a rendszertervezre bzza. A CAN alkalmazsi rteg lnyegben ugyanazt a problmakrt hozta ltre, mint ami a CAL kifejlesztst okozta. A CAL-lal kibvtett rendszer mg mindig tlsgosan ltalnos maradt, s mg mindig nem volt elgg knnyedn hasznlhat. A CANopen specifikic az eszkzk informciinak a rendszert hatrozza meg az elrs s az adattrols szempontjbl. Objektumokat, knyvtrakat s alknyvtrakat definil, amiket azok azonost szmval rhetnk el. A szabvny hrom f kommunikcis objektumtpust hatroz meg: Adminisztratv zenetek, pldul a hlzat kezelst segt zenetek (NMT). Szerviz adat objektumok (SDO Service Data Objects), melyeknek feladata az adatok rsa s olvassa. Process adat objektumok (PDO Process Data Objects), amelyek real-time adadtok cserjre szolgl. Az zeneteket framekbe kell foglalni, amelynek egy rszt a CAN vezrl s driverei oldjk meg, a felhasznlnak csak a CANopen ltal elvrt protokollris adatokat kell feltlteni a megfelel tartalommal. Minden zenet egy azonostval kezddik, melynek a neve: COBID (Communication Object ID Kommunikcis Objektum Azonost) kezddik. A COB-ID kt f rszbl ll s egy 1 bit hosszsg mezbl: 4 bit a kvnt funkci kdja (NMT, PDO, SDO rs/olvass, stb), 7 bit a node sorszma 1 bit-es RTF (Remote Frame) mez

1.5.12. LIN
A Local Interconnect Network (LIN) sokkal tbb, mint "egy protokoll". A LIN alkalmazsa egy egyszer tervezsi mdszertant hatroz meg, mivel a LIN definil egy tools-interface-t s egy jel alap API-t (Application Program Interface-t). A LIN egy nylt kommunikcis szabvny, amely lehetv teszi olcs multiplex rendszerek gyors s kltsghatkony megvalstst. A LIN tmogatja begyazott rendszerek modell-alap tervezst s validlst. A LIN protokoll alkalmazsa esetn a fejleszts elejn a fejlesztk a project-specifikus fejlesztsi
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

54

1. BEGYAZOTT RENDSZEREK

folyamatokra sszpontosthatnak, gy gyorsabb s kltsghatkonyabb a fejleszts, mint a hagyomnyos fejlesztsi mdszerek alkalmazsa esetben. A LIN szabvny nemcsak a busz-protokoll meghatrozsa, de kiterjeszti annak hatlyt az eszkz-interface, jrakonfigurlsi mechanizmusok, s a diagnosztikai szolgltatsok segtsgvel. Ezltal egy holisztikus kommunikcis megoldst nyjt az ipari, az autipari, s a fogyaszti alkalmazsok hatkony alkalmazsban, gy a rendszermrnkk szmra egy idelis megolds a LIN vlasztsa. A rendelkezsre ll dediklt eszkzk automatizljk a tervezsi s rendszerintegrcis folyamatok kulcsfontossg tnyezit, amelyek ltal a LIN sikeres protokoll vlt. A LIN konzorciumot 1998 vgn t autgyrt: az Audi, a BMW, a Daimler Chrysler, a Volvo s a Volkswagen, az autipari beszlltk kzl a Volcano Communications Technology s a flvezetgyrt Motorola hozta ltre. A munkacsoport sszpontostott arra, hogy a LIN specifikcija nylt szabvnya olcs megoldst nyjtson a jrmveknl, ahol a svszlessg s sokoldalsg miatt a drgbban kipthet CAN busz nem szksges. A LIN szabvny tartalmazza az tviteli protokoll specifikcit, az tviteli kzeget, az interface-t a fejlesztsi eszkzkhz, valamint a kapcsoldsi pontok szoftveres programozsi lehetsgeit. A LIN tmogatja a sklzhat architektra kialaktst s a hardveres s szoftveres tjrhatsgot a hlzati csompontok szemszgbl. A LIN kialaktsakor fontos szempont volt a kiszmthat elektromgneses kompatibilts (Electromagnetic Compatibility EMC). A LIN kiegszti a jelenlegi, autiparban hasznlt multiplex hlzatok tulajdonsgait. Ez az a tnyez, amely lehetv teszi az autiparban eddig hasznlt hierarchikus jrmhlzatok mellett a LIN alkalmazst, amellyel tovbbi minsgi javts s kltsgek cskkense rhet el a jrmveknl. Ezltal cskkenthet az egyre sszetettebb elosztott s begyazott rendszerek fejlesztsi s karbantartsi kltsge is. A LIN busz legfontosabb tulajdonsgai: Egy mester egysg van a buszon Tbb slave egysg lehet a buszon Olcs univerzlis aszinkron ad vev (UART Universal Asynchronous Receiver Transmitter) vagy soros kommunikcis interfsz (SCI Serial Communication Interface) nszinkronizls a slave csompontokba ptett kvarc vagy kermia rezontor nlkl Determinisztikus jeltviteli szervezet, a jel terjedsi ideje elre kiszmthat Jelzsek alap API (Application Program Interface) A LIN hlzat egy mester s egy vagy tbb slave csompontbl ll. Az tvitelhez hasznlt mdihoz val hozzfrst a master egysg szablyozza, gy nem szksges arbitrci (arbitration) s tkzs detektls (collision management). Legrosszabb esetben is garantlt az adatok tvitele, csak ksleltetett jeltvitel kvetkezik be. A mai LIN 2.1 szabvny egy kiforrott specifikci, amely tbb rgebbi LIN vltozatot foglal magban (LIN 1.2 , LIN 1.3, s LIN 2.0). A LIN 2.0 egy jelents technolgiai lps volt azltal, hogy j slave szolgltatsokat vezetett be, mint pldul a konfigurcis slave

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

1.5. KOMMUNIKCIS PROTOKOLLOK

55

csompontokat. A LIN 2.1 szabvnyt a LIN 2.0 hasznlata sorn szerzett tapasztalatok alapjn alaktottk ki a jelents autipari felhasznlk bevonsval. A LIN 2.1-es szabvny a LIN 2.0-ban bevezetett diagnosztikai funkcik bvtsvel vlt teljess, amelyek a konfigurcis folyamatot teszik mg hatkonyabb. A mai LIN-es csompontok a LIN 1.2, LIN 1.3, s LIN 2.0 s a LIN 2.1-es szabvnyon alapulnak, amely azt eredmnyezi, hogy a csompontok lefel kompatibilisek egymssal.

1.5.13. FlexRay protokoll


A klasszikus kommunikcis szabvnyok esetben rendkvl kttt a hardver kialaktsa, a FlexRay esetben nincsenek ilyen jelleg ktttsgek. Sok klnbz mdja van, hogy kialaktsunk egy FlexRay cluster 4-t. Lehet egy vagy kt csatorns busz, csillag elrendezs vagy akr ezek mindegyikt tartalmaz hibrid rendszer. A FlexRay protokollt mr vek ta alkalmazzk az autiparban a magasabb rkategris gpjrmvekben, pldul BMW X5. A FlexRay-t is tartalmaz autkben megtallhat a CAN is. A FlexRay-t leginkbb a vezrlk kztti multimdis informcicserre alkalmazzk, mert az CAN-nel rendkvl krlmnyesen lenne csak megvalsthat a 8 byte-ban korltozott elkldhet adat mret miatt.

Pont-Pont kztti kapcsolat


Ha kt node csatlakozik a rendszernkhz, akkor pont-pont kzti sszekttetst kell alkalmazni, a kt node kzti maximlis tvolsg 24 m lehet.

1.21. bra: Pont-Pont kzti kapcsolat

Passzv busz topolgia


A csillag s aktv elemektl mentes struktrkat hvjuk passzv busznak (Passive Bus). Legalbb ngy node-ra van szksg ehhez a topolgihoz, s a csatlakozk szmnak minimum kettnek kell lennie. Kt tetszleges node kztti maximlis tvolsg 24 m lehet.

1.22. bra: Passzv busz


4

Node-okbl ll bus s/vagy csillag topolgij sszetett kommunikcis rendszer. www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

56

1. BEGYAZOTT RENDSZEREK

Passzv csillag topolgia


A passzv busz (Passive Star) egy specilis esete. Minden node egy csatlakozsi ponthoz kapcsoldik. A hlzathoz legalbb hrom node-nak kell csatlakoznia ennl a kialaktsnl s maximum 22 node-ot tartalmazhat a passzv csillag. Kt tetszleges node kztti maximlis tvolsg 24 m lehet.

1.23. bra: Passzv csillag

Aktv csillag topolgia


Az aktv csillag (Active Star) pont-pont kztti kapcsolatot hasznl a node-ok s az aktv csillag kztt. A csillaghoz kapcsold gak minimlis szma kett, s egy g maximlis hossza maximum 24 m lehet. Az aktv csillag feladata, hogy a hozz csatlakoz node informcijt a tbbi gra tovbbtsa. A csillag minden ghoz tartozik egy kld s egy fogad ramkr, gy az gak egymstl elektronikusan fggetlenek. Ha az aktv csillagnak csak kt ga van, akkor azt degenerlt csillagnak vagy hub-nak hvunk, s a teljes busz hossz megnvelsre hasznlhatjuk. Azrt is rdemes hasznlni, mert nveli a hiba behatrolhatsgt kt passzv busz kztt.

1.24. bra: Aktv csillag

1.25. bra: Hub felptse


www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

1.5. KOMMUNIKCIS PROTOKOLLOK

57

Kaszkd aktv csillag


Kt aktv csillagot kaszkd csillagnak neveznk, ha pont-pont alap kapcsolatban vannak egymssal. Ezt a kapcsolatot kiterjeszthetjk passzv csillagg/bussz, hogy a ksbbiekben elrhetv vljon node-ok, vagy jabb aktv csillagok fogadsra. Az elkldtt adatfolyam maximum kt aktv csillagot rinthet mg clba r. Ha a csillag nem formlja t a fogadott aszimmetrikus adatfolyamot, az cskkentheti a rendszer robusztussgt.

1.26. bra: Kaszkd aktv csillag

Hibrid topolgik
A FlexRay rendszer lehetsget biztost az eddig bemutatott topolgik egyttes alkalmazsra, ami ltal tgabb hatrokat nyit az egyes topolgikhoz kpest. Sokfle hlzat alakthat ki ezzel a mdszerrel, megktst egyedl az eddigi topolgia tpusokra vonatkoz korltoz felttelek adnak.

1.27. bra: Hibrid topolgia


Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

58

1. BEGYAZOTT RENDSZEREK

Ktcsatorns topolgik
A FlexRay kommunikcis modul megadja a lehetsget, hogy akr kt csatornt is kiszolgljunk. Ezzel megnvelhetjk a svszlessget, vagy javthatjuk a rendszer hibatr kpessgt.

1.28. bra: Ktcsatorns busz topolgia A ktcsatorns rendszerben, ahol az egyik csatornt A-val msikat B-vel jelljk a node-ok csatlakozhatnak vagy csak az A vagy csak a B csatornhoz, de akr mind a ketthz is. Amennyiben csatlakozik az egyik csatornra, akkor az ott lv brmelyik nodedal tud kommuniklni.

1.29. bra: Ktcsatorns aktv csillag topolgia A ktcsatorns rendszerek minden ms tulajdonsga megegyezik a fenti egycsatorns esetekkel a topolgia, s korltoz felttelek tekintetben is. Ha szksg van arra, hogy egyszerre tbb cluster-hez is csatlakozzon egy eszkz, akkor azt csak klnbz kommunikcis vezrlkn keresztl teheti meg. Nem megengedett egy vezrlnek, hogy csatlakozzon egy cluster-hez az A s egy msik cluster-hez a B csatornn.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

1.5. KOMMUNIKCIS PROTOKOLLOK

59

1.30. bra: Ktcsatorns aktv kaszkd csillag topolgia

1.5.14. MOST
A MOST egy multimdis hlzat fejleszts eredmnye, amelyet az 1998-ban ltrehozott MOST Cooperation hozott ltre. A konzorcium a fontosabb autgyrtkbl s alkatrszbeszlltkbl ll. A MOST pont-pont kztti audi s vide adattvitelt biztost klnbz adattviteli sebessggel. A MOST gy kpes tmogatni klnbz a vgfelhasznli alkalmazsokat, mint pldul rdik, globlis helymeghatroz rendszer (GPS), navigci, vide kijelzk, s a szrakoztat rendszerek. MOST fizikai rtegknt egy manyag optikai szlat (Plastic Optical Fiber POF) hasznlnak, amely jobban ellenll a klnbz elektromgneses zavaroknak s nagyobb tviteli sebessgre kpes, mint a klasszikus rzkbel. A jelenleg a nagyobb autgyrtk kzl a BMW s a Daimler-Chrysler alkalmaz MOST hlzatokat az audi s vide jelek tovbbtsra. gy oldjk meg pldul a fels kategris BMW-kben a hts kamera kpnek a mszerfalon elhelyezked kijelzre val juttatst. Az autba ptett begyazott vezrl pedig a kijelzett kpre berajzolja, hogy a tolats kzbeni kormny pozcival milyen ven haladna az aut s jelzi a vezet szmra ha balesetet okozna. Az automatikus parkolsi funkci megvalstshoz is ltalban a MOST hlzaton kldtt informcikat hasznljk az autgyrtk. Jelenleg MOST mr a harmadik verzijt ksztik, amely alkalmas lesz a csatornn szabvnyos ethernet-es frame-eket is kldeni.

1.6. Monitorozs, diagnosztika, validci, mrs


A begyazott rendszerek adatainak a monitorozsa, mrse s tesztelse sokkal bonyolultabb s sszetettebb folyamat, mint egy-egy kln ll eszkz. Ha egy eszkz vagy rszegysg
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

60

1. BEGYAZOTT RENDSZEREK

fejlesztsi folyamatt nzzk, akkor a beagyazott rendszerek fejlesztse megoldhatatlan az eszkz monitorozsa s diagnosztikja nlkl. Az adatmonitorozsnak klnbz szintjeit/mdjait klnbztethetjk meg. Az adatok monitorozsn rthetjk azt is, hogy a rendszernk a krnyezetbl fogadja a klnbz informcikat s azok alapjn a specifikcinak megfelel vezrlsi feladatokat vgzi el. Mivel a begyazott rendszerek szoftverei a legtbb esetben begyazott szoftverek, ezrt fontos a szoftverek megfelel tesztelse is. A szoftverkomponensek a mkdshez szksges berkez informcikat eltroljk a memriba, melyet valamilyen formban tesztelni kell. A krds, ami felmerlhet az a kvetkez: J informcit lett eltrolva? J helyre lett eltrolva? Ezekre a krdsekre a tesztelssel lehet vlaszt tallni. A nagyobb rendszerek esetben a monitorozs s a diagnosztika nyjthat ehhez segtsget. Monitorozson ebben az esetben az eszkz (ECU) bels adatainak a kiolvasst rtjk. A legtbb processzor lehetsget ad a fejlesztknek arra, hogy debug zemmdban a kiolvassk a kontroller memrijt s regisztereit, gy megllapthat az, hogy a berkezett adatok a meghatrozott memriaterletre (vltozba) kerltek e. Ezzel a mdszerrel mkds kzben kiolvashatk a vltozk rtkei is, gy knyelmesebb s hatkonyabb teszik a hibakeresst. A htrnya ennek a mdszernek az, hogy specilis hardvert ignyel. Nagyobb funkcionalitssal rendelkez ECU-k esetn specilis diagnosztikai fellet ll a fejlesztk s felhasznlk rendelkezsre. ltalban a gyrtk a vgfelhasznlknak csak specilisan korltozott felletet biztostanak, s nem engednek meg olyan hozzfrst a vgfelhasznlknak, mint amilyen a fejlesztknek van. A sorozatban gyrtott intelligens termkek esetben a gyrtsor vgn az eszkzk a beptett diagnosztikai funkcik felhasznlsval kpesek lehetnek akr sajt magukat letesztelni s specilis krlmnyek kztt kalibrlni is. Ezzel a gyrtsor vgn kiszrhetek bizonyos hibk s ezzel a mdszerrel mg a gyrtskor vgrehajtott feladatokat is le lehet egyszersteni. A gyrtskor felhasznlt diagnosztika specifikcijt a gyrtk ltalban nem szoktk kiadni, mert azzal akr az elektronikus egysg akr tnkre is tehet. Napjainkban egyik gyrt sem engedheti meg magnak, hogy hibs termket ksztsen, mert annak komoly anyagi kvetkezmnyei lehetnek a gyrt szmra. Ilyen tekintetben az autiparban a legszigorbbak az elrsok. Az autgyrtk szinte a 0.0%-os selejtarnyt vrjk el beszlltiktl. Ez csak megfelel tesztekkel rhet el. A kifejlesztett szoftverek s hardver prototpusok esetben ez ilyen formban mrt arny nem rtelmezhet. Az ilyen hardver- s szoftvereszkzk esetben az eszkz viselkedst a specifikciban szerepl elvrt viselkedssel kell sszevetni. Ez az sszehasonlts nem egyszer feladat, ha az eszkzmkdsnek a lersa tbb ezer oldal. Az autiparban jelenleg hasznlt irnyelv alapjn minden funkcit s viselkedst le kell tesztelni s ezeken a teszteken meg kell felelnie az eszkznek. Mivel a tesztek elvgzse egyre nagyobb emberi s eszkz erforrst vett ignybe s bizonyos teszteket nem lehet vals ipari krlmnyek kztt elvgezni, ezrt szksges volt j technikkat kitallni a begyazott rendszerek tesztelsre. Erre szolglnak a Software- in theloop (SIL) s a Hardware-in the- Loop (HIL) technikk, amelyekkel a tesztels kltsgeit lehetett cskkenteni. A Software- in the- loop (SIL) technikval az elksztett szoftvert illesztjk be egy specilis szoftverkrnyezetbe, amely megfelelen szimullja a kdrszlet szmra a bemeneteket. A Hardware-in the- Loop (HIL) technikval a szria (hardvertl esetleg miniwww.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

1.6. MONITOROZS, DIAGNOSZTIKA, VALIDCI, MRS

61

mlisan klnbz) hardverre tltjk bele a kifejlesztett programot s egy specilisan kialaktott tesztgp segtsgvel szimulljuk a hardver szmra a megfelel bemeneteket. A kezdetekben nem volt visszacsatols a tesztelend eszkz szmra, ezeket a teszteket open-loop teszteknek szoktk hvni. Ksbb a tesztgpekre elksztettk a klnbz rendszerek matematikai modelljeit, gy mr megfelelen vissza lehetett csatolni a beavatkozs eredmnyt, ezek mr closed-loop tesztek voltak. A jelenleg iparban hasznlt teszteket a kvetkezkppen tudjuk csoportostani: Mechanikai tesztek: Az eszkz mechanikai ignybevtelt (gyorsuls, tsek, rezgs)) hatsait vizsgl tesztek. Klnbz hmrskletvltozsok hatsai zem kzben (maximlis / minimlis zemi hmrsklet s hsokk teszt). Elektronikus tesztek: Az eszkz villamos tulajdonsgait (tlfeszltsg, alacsony feszltsg, tranziens jelensgek, fldzrlat hatsai a bemeneteke s kimeneteken) vizsgl tesztek. Kommunikcis tesztek: A klnbz specilis kommunikcis helyzetek tesztelse (rkez informcik megfelel eltrolsa, kimeneti informcik megfelel elkldse, kommunikcis gyorsasgi / ismtlsi / timeout tesztek, zrlatok s szakadsok tesztelse.) Diagnosztikai tesztek: Feladata a felhasznlk zemeltetst elsegt diagnosztikai fellet tesztelse. Ide sorolhatak a bels diagnosztikai tesztek s a hibk esetn bekvetkez hibaeltrolsok tesztelse is. (Mivel ezek valamilyen kommunikcis platformon mkdnek, ezrt akr oda is sorolhat.) Funkcionlis tesztek: Feladatuk, hogy megvizsgljk azt, hogy bizonyos helyzetekben a specifikcinak megfelel feladatot vgzi e a vezrl. (Pldul egy gpjrm esetben mikor kell ABS / ESP algoritmust futtatni, vagy mikortl lesz egy ABS beavatkozssal indul megcsszs olyan mrtk, amelynl mr az ESP funkcionalits szksges.) Biztonsgi tesztek: Valamilyen hibaesemny esetben a rendszer a specifikciban meghatrozott mdon val mkdst vizsglja. Vals ipari krlmnyek kztt lefolytatott tesztek.

1.7. Irodalomjegyzk az 1. fejezethez


Nicolas Navet, Francoise Simonot-Lion: Automotive Embedded Systems Handbook, CRC Press, 2009, ISBN: 978-0-8493-8026-6 Richard Zurawski: Networked Embedded Systems, CRC Press, 2009, ISBN: 978-1-43980761-3 Microsoft Corporation MSDN Library, http://msdn.microsoft.com ROBERT BOSCH GmbH (1991). CAN Specification 2.0. Robert Bosch GmbH, Stuttgart ETSCHBERGER, K. (2001). Controller Area Network. IXXAT Press, Weingarten

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

62

1. BEGYAZOTT RENDSZEREK

Ferencz Balzs, Gerencsr Zoltn: jrakonfigurlhat szoftver kifejlesztse CAN alap kommunikcis hlzatok adatforgalmnak monitorozsra s analzisre, Veszprmi Egyetem, 2005 FARSI, M. and BARBOSA, M. (2000). CANopen Implementation: applications to industrial networks. Research Studies Press Ltd., Baldock ISO-WD 11898-1 (1999). Road vehicles Controller area network (CAN) Part 1: Data link layer and physical signalling. ISO-WD 11898-2 (1999). Road vehicles Controller area network (CAN) Part 2: High speed medium access unit ISO-WD 11898-3 (1999). Road vehicles Controller area network (CAN) Part 3: Low speed medium access unit Maxim: MAX481/MAX483/MAX485/MAX487MAX491/MAX1487 Specification,
http://www.maxim-ic.com

Microchip: MCP2515 Specification, Microchip Technology Incorporated,


http://www.microchip.com

Modicon: Modicon Modbus Protocol Reference Guide, MODICON Inc. (1996)

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2. fejezet Programozhat logikai kapuramkrk, FPGA-k felptse, fejlesztkrnyezetek bemutatsa

2.1. Bevezets, programozhat kapuramkrk, FPGA-k felptse, fejlesztkrnyezetek bemutatsa


Ebben a fejezetben a programozhat logikai ramkrket vizsgljuk meg, illetve a ma oly szleskren alkalmazott Xilinx FPGA ramkrk ltalnos felptst, klnbz fejleszt krnyezeteit ismerhetjk meg rviden. Ebben az oktatsi segdletben egy konkrt FPGA-s hardveren (Digilent Nexys-2) s egy gyrt specifikus integrlt fejlesztkrnyezetben (Xilinx ISE/WebPack) trtnik a feladatok tervezse s a megvalstsa VHDL ler nyelv fbb nyelvi konstrukciinak elsajttsa segtsgvel. Termszetesen ms gyrtk (pl. Altera, Actel, Lattice stb.), akr eltr felpts FPGA fejleszt platformjait is vlaszthattuk volna. Az ismertetend hagyomnyos VHDL ler nyelveken kvl az utbbi vtizedben mr magas szint C-szintaxist hasznl nyelvek, illetve szimblum szint modulokbl felpl integrlt fejleszt krnyezetek is megjelentek, melyek f elnye a gyors prototpusfejleszts mellett, a rugalmassg s a tervek tltethetsgnek lehetsge.

2.1.1. Xilinx FPGA-k ltalnos felptse


Egy ltalnos Xilinx FPGA [XILINX] architektra (amely elnevezst felhasznl ltal tetszlegesen programozhatnak, vagy jrakonfigurlhat szmtsi eszkzknt is definilhatjuk) egy olyan programozhat logikai eszkz, amely logikai cellk, makr cellk, illetve programozhat kapcsolk s sszekttetsek regulris 2D-os tmbjbl pl fel. Az FPGA-k esetn az in-field kifejezs utal arra is, hogy helyben, azaz a felhasznl ltal tbbszr programozhat eszkzkrl van sz, szemben a gyrilag elre programozott, de a felhasznl ltal nem mdosthat ramkrkkel. Egy logikai cella egyszer logikai fggvnyek megvalstsra hasznlhat, a makr cella specilis n. dediklt pt elemeket is tartalmazhat, mg a programozhat kapcsolk biztostjk a kapcsolatot a logikai cellk s makr cellk kztt az sszekttetseken keresztl.
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

64

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

A Xilinx gyrt ltal kibocstott FPGA-k kztt kt klnbz kategrit lehet elklnteni egymstl: az egyik a Virtex architektra, amely a nagymret, nagy-teljestmny, de egyben drga FPGA csaldot jelent, mg a msik a Spartan architektra egy kltsg-hatkonyabb, kisebb teljestmny megoldst biztost programozhat logikai hlzatok kialaktshoz. Mindkt csaldon bell tovbbi alkategrikat lehet megklnbztetni: Xilinx Virtex Virtex-6 sorozatok, illetve Spartan-3 Spartan-6 sorozatok [XILINX], amelyek logikai cellk, s makr cellk kialaktsban s srsgben trnek el leginkbb egymstl. Mivel a kisebb, Spartan FPGA sorozat jobban igazodik az oktatsi cl felhasznlshoz (emellett termszetesen ipari s tudomnyos clokra is alkalmazhatak), ezrt erre a sorozatra fkuszlunk a tovbbiakban. Ezekrl, s ms FPGA tpusokrl rszletesen a gyrt hivatalos oldaln tallhat adatlapokon olvashatunk [XILINX_DEVICES]. A Xilinx Spartan-3 FPGA koncepcionlis felptst s fontosabb pt elemeit az albbi 2.1. bra szemllteti [SPARTAN3]:

2.1. bra: Xilinx FPGA ltalnos felptse: jobb oldalon a chip egy ramkri rszletnek felnagytott blokkszint bels felptse lthat a fontosabb pt elemekkel [SPARTAN3] A Xilinx Spartan-3 FPGA fontosabb pt elemei a kvetkezk: Logikai cellk: CLB (Configurable Logic Block): Konfigurlhat Logikai Blokkok, amelyekben tbbbemenet (4-bemenet) LUT-ok segtsgvel realizlhatk a logikai fggvnyek, s ezek kimeneteit szksg esetn egy-egy D flip-flopban trolhatjuk el. A CLB-k tovbb multiplexereket s sszekttetseket, valamint dediklt logikai kapukat is tartalmaznak. A CLB-ken bell n. slice-okat, szeleteket klntenek el: egyet a logikai (SLICEL), egyet pedig az elosztott memria erforrsok lefoglalshoz (SLICEM).
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.1. BEVEZETS, PROGRAMOZHAT KAPURAMKRK,

65

A slice-okat szoks az Xilinx FPGA-kon belli logikai elemek mrszmaknt is tekinteni. A SLICEM-en bell egy n-bemenet LUT egy 2^n 1-bites memrinak is tekinthet, amelyek sszekapcsolsbl egy nagyobb mret elosztott memrit ki lehet alaktani, de a LUT konfigurlhat akr egy 16-bites shift-regiszterknt is. Makr cellk: IOB: I/O Blokkok, amelyek a bels programozhat logika s a klvilg kztt teremtenek kapcsolatot. Mai FPGA-k mr tbbmint 30 klnbz I/O szabvnyt tmogatnak. DCM/PLL: Digitlis rajel kezel ramkr, amely kpes a kls rajelbl tetszleges fzis s frekvencij bels rajelek ellltsra (alapfrekvencia szorzsa / osztsa segtsgvel), vagy (DCI) digitlisan vezrelhet impedancia illesztsre stb. PI: Programozhat sszekttets hlzat (vagy kapcsol mtrix hlzat), amely a felsorolt ptelemek kztt a teremt kapcsolatot. A programozhat sszekttetsek belltsa, programozsa sorn az SRAM-cells megvalstst alkalmazzk, amelyet bekapcsols utn inicializlni kell (de termszetesen ms programozsi mdok is ltezhetnek). A fenti ltalnos erforrsokon tl az FPGA-kon a tovbbi begyazott makr cellkat, vagy ms nven dediklt blokkokat, n. primitveket is tallhatunk. Ezek a Blokk-RAM, a MULT, illetve a begyazott hard-processzor magok lehetnek. BRAM (Blokk-SelectRAM) szinkron SRAM tpus memrik, melyek nagy mennyisg (~100Kbyte akr ~10Mbyte) adat/program kd trolst teszik lehetv FPGA tpustl fggen. Egy-, vagy dupla-portos memriaknt is lehet ket definilni, azaz akr rni, s olvasni is lehet egyszerre a klnbz IO adat portjaikon keresztl, a megfelel engedlyez jelek kiadsval. A kapacitsuk egyenknt 18Kbit (jellse BRAM18k), azaz kb. 2 Kbyte (a parits bitek hasznlata nlkl). MULT1818 (vagy DSP48 Blokkok nagyobb FPGA-kon, pl Spartan-3A, Virtex-4-5-6): begyazott szorz blokkokat jelentenek, amelyek segtsgvel egyszerbb szorzsi mveletet, vagy a DSP blokk esetn akr bonyolultabb DSP MAC (szorzs-akkumulls), aritmetikai (kivons) s logikai mveleteket is vgrehajthatunk 2komplemens szmokon nagy sebessggel szintn az FPGA tpustl s kiptettsgtl fggen. Hard-processzor mag: bizonyos Xilinx FPGA csaldok (fknt a nagyobb mret, de egyben drgbb tpusok) a hagyomnyos begyazhat soft-processzor magok (mint pl. PicoBlaze, MicroBlaze) mellett, rendelkezhetnek fixen begyazott hardprocesszor mag(ok)kal (pl. IBM PowerPC) is, amelyek igen nagy sebessg (~ tbb 100 MHz), komplex vezrlsi funkcikat biztostanak a klnbz FPGA-n belli begyazott rendszerek tervezse esetn. Ezek a magok elklnlten helyezkednek el a felsorolt ltalnos logikai, s dediklt erforrsok mellett, gy nem foglaljk azokat, szemben a soft-processzor magokkal. Megjegyeznnk, hogy ms gyrtk (pl. Altera, Actel, stb.) FPGA-s eszkzei hasonl funkcionalits pt elemeket tartalmaznak, ltalban ms nven, s kismrtkben eltr bels struktrval. Az FPGA-s rendszerek a nagyfok flexibilitsukkal, nagy szmtsi teljestmnykkel, s gyors prototpus-fejlesztsi ezltal olcs kihozatali kltsgkkel igen j alternatvt teremtenek a vals-idej begyazott rendszerek tervezshez s megvalstshoz. Ezt jl tkrzi
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

66

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

az ltalnos cl mikroprocesszorok s az FPGA technolgik fejldsi teme kztti hasonlsg, mely utbbi is a fokozatos mretcskkenst (scaling-down hats) kvetve fejldik [DISSZ], [MOORE]. Emiatt a Moore trvny rtelmben nemcsak a hagyomnyos mikroprocesszorok, hanem az FPGA-kra is igaz az llts: 1-1,5 vente az egysgnyi szilcium felletre es tranzisztorszm (programozhat logikai eszkzk esetn az ekvivalens logikai kapuszm) megduplzdik. ppen ez mutatkozik meg az FPGA-k ms pt elemeinek, pl. a dediklt bels memrik s a szorzk szmnak nvekedsben. A mai modern, nagyteljestmny FPGA-kon (pl. Virtex-6) akr 2000 szorz ramkr, 2-4 hard-processzor mag, illetve kzel, akr 40 Mbyte bels BRAM memria is helyet foglal. Ezekrl, s ms Xilinx FPGA tpusokrl rszletesen a gyrt hivatalos oldaln tallhat adatlapokon olvashatunk [XILINX_DEVICES].

2.1.2. Digilent Inc. Nexys-2 fejlesztkrtya


A jegyzetben a feladatok megoldsa sorn egy olcs, kisebb teljestmny, de a jelen fejlesztsi, oktatsi cloknak tkletesen megfelel Spartan-3E FPGA-t tartalmaz [SPARTAN3], 500K, illetve 1200K erforrssal is kaphat Digilent Nexys-2 [NEXYS2] fejleszt krtyt hasznlunk. (Itt a K jells mindig az ekvivalens logikai kapuk szmt jelenti 1000-es nagysgrendben). A tokozson lv szabvnyos jells szerint az XC3S500E megnevezs egy Xilinx Spartan-3E tpus s 500.000 ekvivalens logikai kapuszmmal rendelkez FPGA-t jelent. Mivel kb. 1-2 nagysgrenddel kevesebb dediklt BRAM18k memrit (20-28 db), illetve MULT1818 szorz (20-28 db) erforrst tartalmaz, mint a mai nagyteljestmny FPGA sorozatok (pl. Virtex-5, Virtex-6, Spartan-6, [XILINX_DEVICES]), ezrt ez egyben a kisebb sorozatok lehetsges alkalmazsi terleteit is meghatrozza. Szintetizlhat VHDL lersok hardveres verifiklsnak bemutatsra, valamint az egyszerbb felpts begyazott rendszerek implementlshoz viszont ppen ez lehet a megfelel vlaszts. A Spartan-3E-s FPGA-rl tovbbi rszletes informcikat a Spartan-3E FPGA Family: Data Sheet adatlapon lehet olvasni [SPARTAN3]. A Nexys-2 fejleszt krtyn tallhat Spartan-3E FPGA 500K/1200K a kvetkez 2.1. tblzat szerinti logikai illetve dediklt erforrsokat tartalmazza: 2.1. tblzat: A Digilent Nexys-2 fejleszt krtykon lv FPGA-s eszkzk rendelkezsre ll erforrsainak szma
Elosztott RAM (bit) 74496 138752 DCM (db) 8 8 Tokozs IOB FG-320 FG-320

CLB FPGA tpus XC3S500E XC3S1200 E teljes (db) 1164 2168

Sliceok (db) 4656 8672

4-LUT / FF (db) 9312 17344

BRA M 18k (db) 20 28

MULT 18x18 (db) 20 28

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.1. BEVEZETS, PROGRAMOZHAT KAPURAMKRK,

67

Az albbi 2.2. bra a Digilent Nexys-2-es fejlesztkrtya felptst szemllteti:

2.2. bra: Digilent Nexys-2 fejleszt krtya fotja [DIGILENT] A Nexys-2 krtya rendelkezik 16 MByte mret kls Micron P-SDRAM tpus memrival is, illetve egy szintn 16 MByte mret Intel Flash RAM memrival, amelyekben nagyobb mennyisg adatot is el lehet trolni, mikzben pl. az FPGA-n az adatok feldolgozsa megtrtnne. A Nexys-2 krtya szmos kls perifria illesztst is lehetv teszi: pl. RS232, PS2 (bill. / egr), VGA kimenet, HighSpeed USB 2.0, ahogyan az 2.3. brn is lthat:

2.3. bra: Nexys-2 fejlesztkrtya felptse s kls perifrii [DIGILENT]

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

68

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Az USB kapcsolatot egy Cypress USB-s mikrovezrl biztostja (high-speed mdban). A krtya nemcsak USB-n, hanem a szabvnyos JTAG portokon keresztl is programozhat, illetve a Flash-EEPROM-ban trolt informcival is inicializlhat (amely szabadon konfigurlhat). Ebben az esetben a begetett tartalommal konfigurlva mr nem szksges a PCvel sszekapcsolni, ezrt a Nexys-2 FPGAs ktya akr egy nll mkdsre kpes (n. stand-alone) rendszerknt is hasznlhat. Az elbb emltett perifrikon kvl szabadon programozhat kapcsolk (8), nyomgombok (8), LED-ek (8), s 7-szegmenses kijelzk (4) kaptak helyet, pl. a mkds kzbeni jelek, esetleges hibk jelzsre, kls beavatkozsra. Az eszkz ra 100 $ 150 $ kztt mozog, az FPGA tpustl fggen [DIGILENT]. A krtyhoz a PMOD csatlakozk (bvthet perifria modulok) segtsgvel tovbbi szmos varilhat analg/digitlis/kevert jel perifria illeszthet, amelynek rszletes listja a hivatkozson keresztl megtekinthet [PMOD]. ruk 10 50$ nagysgrend kztt mozog. Amennyiben a krtyt vide jelek feldolgozsra is fel kvnjuk felhasznlni, akkor illeszthet egy kls vide dekdert tartalmaz bvt krtya: V-DEC1 [VDEC], amely a tbb szabvnyos Composite, S-Video, Component Video bemenetek, illetve a PAL/NTSC/ SECAM jelek kezelst is tmogatja. A kisebb krtykon, gy a Nexys2-esen sem kell aktv hts hasznlat kzben. Ezen bvtmnyek nagyban megnvelik a Nexys-2 fejlesztkrtya alkalmazsi terleteit: jelfeldolgozs, kpfeldolgozs, autipari alkalmazsok stb.

2.1.3. Modellezs: tartomnyok s absztrakcis szintek


Egy adott rendszer tervezse sorn, klnbz tervezsi szempontok szerint dolgozhatunk, azaz a rendszer modellezst klnfle tartomnyokon s azokon bell eltr absztrakcis szinteken vgezhetjk. Az ismert Gajski s Kuhn [GAJSKI] fle Y-diagram szerinti felrsban (lsd 2.4. bra) hrom lehetses tartomnyt klnbztethetnk meg: funkcionlis, strukturlis s geometriai tartomnyokat. (Ahogy a ksbbiekben emltsre kerl a VHDL lersok sorn, ltalnosan a viselkedsi s a strukturlis tartomny szerinti tervezst alkalmazzk.) A funkcionlis tartomnyban a rendszer viselkedsnek lerst adjuk meg, de nem foglalkozunk annak rszleteivel, ahogyan a funkcit megvalstottuk. A funkcionlis tartomny a legabsztraktabb megkzeltst jelenti, mivel a teljes rendszer viselkedse megadhat az algoritmikus szinten. A kvetkez szint a regiszter-tviteli szint (Register-Transfer) vagyis a regiszter-memria-processzor elemek kztti transzformcik megadsa. Az adatot egy regiszter, vagy egy memria adott celljnak rtke, mg a transzformcikat az aritmetikai s logikai opertorok jellemezhetik. Az adat s vezrlsi informci ramlsa definilhat akr a regiszter transzfer szint nyelvi lersokkal (RT Language) is, vagy hatkonyan szemlltethetk grafikus mdon az adat-, s vezrlsi- folyam grfok segtsgvel (DFG, CFG). A harmadik szint a hagyomnyos logikai szint, ahol egy-egy funkci megadhat a Boolealgebrai kifejezsek, igazsgtblzatok segtsgvel. Vgl az utols szinten az ramkr mkdst definil differencil-egyenleteket kell definilni, amely a hlzat feszltsgben, s ramban trtn vltozsokat hivatott lerni.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.1. BEVEZETS, PROGRAMOZHAT KAPURAMKRK,

69

Strukturlis Processzor-Memria Regiszter-Transzfer Kapu Tranzisztor Poligonok Geometria / virtulis rcs Szabvnyos cellk Floor Plan (teljes layout terv) Geometriai

Funkcionlis

Algoritmus
Regiszter-Transzfer Nyelv (RTL)

Boole algebrai egyenletek Differencil egyenletek

2.4. bra: A modellezs tartomnyai s absztrakcis szintjei (Y diagram) A strukturlis tartomnyban viszont pontosan a rendszer bels elemeinek felptst s azok kztt lv sszekttetseket vizsgljuk. A strukturlis tartomny legfels szintjn kell a f komponenseket s sszekttetseit definilni, amelyet processzor-memria kapcsolatnak (processor-memory switch) is hvnak. A msodik szint itt is a regiszter-tviteli szint, amely egyrszt az adattbl (data path), msrszt vezrlsi szakaszokbl (control path, sequence), szekvencikbl ll. A harmadik szint a logikai szint, amelyben a rendszer struktrja az alapkapuk s sszekttetseik segtsgvel pthet fel. A negyedik, legalacsonyabb szinten a tranzisztorok, mint az ramkri rajzolatok (layout) elemi egysgeit kell tekinteni. Vgl a geometriai tartomny azt mutatja, ahogyan a rendszert elhelyezzk, lekpezzk a rendelkezsre ll fizikai erforrsok felhasznlsval (fellet). Ebben a tartomnyban a legfels hierarchia szinten, a szilcium felleten elhelyezett vagy n. kitertett VLSI ramkrt kell tekinteni (floor-plan): FPGA esetn teht magukat a logikai cellkat s makrcellkat, valamint a kzttk lv sszekttetseket. A kvetkez szintet a szabvnyos alapcellk (Standard Cell) knyvtrai kpezhetik, amelyeket, mint technolgiai adatbzist hasznlhatunk fel a regiszterek, memrik, vagy akr aritmetikai-logikai egysgek megvalstshoz. A harmadik szinten az egyedi tervezs integrlt ramkrk (ASIC) geometrija egy virtulis rcson adhat meg. Vgl az utols, legalacsonyabb szinten a poligonokat kell megrajzolni, amelyek csoportjai az ramkr egyes maszk-rtegeinek feleltethetk meg. Manapsg a szmtgppel segtett elektronikus tervezi eszkzk segtsgvel egy-egy tartomnyon bell nem kell minden szintet kln-kln pontosan definilni, elegend a tervezst a legfelsbb absztrakcis szinteken elvgezni, amelybl az alacsonyabb szintek automatikusan generldnak (EDA).

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

70

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

2.1.4. Magas-szint hardver ler nyelvek


Napjainkban (2011) az FPGA-s eszkzkn trtn fejlesztsre mr tbbfle lehetsges alternatva is rendelkezsre ll: Hagyomnyos/tradicionlis magas-szint hardver ler HDL nyelvek (pl. VHDL [VHDL87], Verilog [VERILOG] stb), vagy ezek kiterjesztsvel megadott verifikcis nyelvek (pl. SystemVerilog), Algoritmikus nyelvek vagy n. CFPGA szintzist tmogat programnyelvek: ANSI-C szintaktikt kvet klnbz magas-szint nyelvek (pl. Agility Handel-C [HANDELC], ImpulseC [IMPULSEC], Mentor Graphics Catapult-C [CATAPULTC], System-C [SYSTEMC] stb.), illetve Modell alap integrlt fejleszt rendszerek fejlett GUI tmogatssal (pl. The MathWorks MatLab [MATLAB], National Instruments LabVIEW [LABVIEW]). Ezek a f tervezsi mdszerek azonban a legtbbszr nem teljesen klnlnek, vagy klnthetk el egymstl. A magas szint C-alap, illetve modell ler nyelvek integrlt fejleszt rendszerei (IDE) ltalban a hagyomnyos VHDL/Verilog generlsnak fzisig, vagy a szabvnyos EDIF (Electronic Design Interchange Format) netlista generlsig biztostjk, s egyben gyorsthatjk fel az algoritmus fejleszts-tervezs menett. Ettl a lpstl kezdve viszont a kivlasztott FPGA gyrt ltal tmogatott szintzis eszkzkkel (EDA) folytatdik az FPGA-n lv blokkok (primitvek) automatizlt lekpezse, elhelyezse majd sszektse (megjegyeznnk, hogy mindez manulis lpsekben is trtnhet). Ezeket hvjk egyttesen MAP PLACE ROUTE fzisoknak, amelyek az ramkr komplexitsnak fggvnyben hosszabb-rvidebb id alatt generljk a kimenetet, lsd kvetkez alfejezetet. A kimenet vgl egy generlt bit-folyam lesz (pl. Xilinx .bit, vagy Altera .sof konfigurcis fjl), amelyet a Nexys-2 fejleszt krtyra szabvnyos USB, vagy JTAG USB programoz kbelek segtsgvel tlthetnk le.

2.1.5. Tervezs folyamata (Xilinx design flow)


Az FPGA alap rendszertervezs folyamatt a Xilinx ISE fejleszt krnyezetben trtn egymst kvet lpseken keresztl demonstrljuk. A fejleszts egyszerstett folyamatt a kvetkez 2.5. bra szemllteti:

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.1. BEVEZETS, PROGRAMOZHAT KAPURAMKRK,

71

Knyszerfelttelek (constraints) .ucf

RTL forrsok (design entry): - HDL lers (.vhd) - kapcsolsi rajz (.sch) - llapot diagram

Tesztpad (testbench)

Szintzis (Synthesis)

RTL szimulci

.ngc / .edf

Implementci Fordts (Translate) Lekpezs (Map) Fizikai elhelyezs s sszekts (Place & Route) .ncd Funkcionlis szimulci (functional simulation)

pcf

Konfigurcis bitfjl generlsa (bitstream generation)

Statikus idztsi analzis (Static Timing analyzis)

Idztsi szimulci (timing simulation)

.bit

FPGA
FPGA

2.5. bra: FPGA-alap rendszertervezs folyamata Xilinx ISE rendszerben A 2.5. bra bal oldali ga az egymst kvet f tervezsi lpseket szemllteti, amely sorn a cl a terv folyamatos tkletestse, illetve az FPGA konfigurci ellltsa. Konzisztens mdon ehhez egy jobboldali prhuzamos ellenrz g (validci) is kapcsoldik, minden szinten egy-egy szimulcis lpst feleltethetnk meg a tervezsi folyamat egy-egy szintjvel. Lthat mdon a fejlesztsi folyamat egy magas absztrakcis szint RTL HDL lersbl indulhat ki, amely egszen az alacsony eszkz-, vagy cella-szint konfigurci generlsig tart. Itt kell azonban megemlteni, hogy a tervezs kezdetn nem csak a hagyomnyos HDL ler nyelveket, hanem kapcsolsi rajzokat (sma pl Xilinx Schematic Editor [XILINX_SCHEMATIC]), illetve a sorrendi hlzatok mkdst ler llapot diagramokat is megadhatunk (pl. Xilinx StateCAD [XILINX_STATE_CAD]), amelyekbl azutn HDL lers generlhat. Ezek bemutatsa tlmutat a jelenlegi jegyzet tmakrn, de tovbbi informcik

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

72

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

tallhatak a megadott irodalmi hivatkozsokon. Vgezetl az elkszlt konfigurcis fjlt (.bit) letlthetjk az FPGA-ra. A tervezs fontosabb lpsei a kvetkezk: 1.) Modulris, vagy komponens alap rendszertervezs Lentrl-felfel (bottom-up), vagy fentrl-lefel (top-down) irny tervezsi metodika alkalmazsa HDL lersok, kapcsolsi rajzok, vagy llapot diagramok megadsa a tervezs kezdeti fzisban (=design entry), illetve felhasznli-tervezsi megktsek, knyszerfelttelek (user constraints ucf) rgztse (lsd ksbb a szintzis s implementci sorn). 2.) Ezzel prhuzamosan a tervezs egyes szintjein, illetve a legfelsbb hierarchia szinten HDL tesztkrnyezet, n. tesztgy, vagy tesztpad (=testbench) sszelltsa RTL / viselkedsi szimulci tesztvektorok, mint gerjesztsek megadsval, amely mg PC-n trtnik, 3.) Szintzis s implementci: Szintzis: logikai szintzis sorn a HDL lers ltalnos kapu-szint komponensekk transzformldik (pl. logikai kapuk, FFs) Implementci 3 f lpsbl ll: TRANSLATE (Compiler) MAP (Fit) PAR (Placer & Router / Assembler) lpseinek sorozata. Ezeket s a zrjelben megadott kifejezseket nemcsak a Xilinx fejlesztsi folyamatban, hanem ms FPGA gyrt integrlt fejleszt krnyezeteiben is kzel hasonl mdon nevezik. Ha az implementci brmely adott lpsben hiba trtnt, akkor az implementci tovbbi lpsei mr vgre sem hajtdnak. Az adott lpsben meglv hibt elszr ki kell javtani ezt az Xilinx ISE zenet ablakban megjelentett informcik alapjn lthatjuk s csak utna tudjuk a tovbbi implementcis lpseket vgrehajtani. Implementci lpsei a kvetkezk: TRANSLATE: tbb, esetleg eltr hardver ler nyelven megrt tervezi file szszerendelse (merge) egyetlen netlist-fjlba (EDIF). A netlista fjl tartalmazza a komponensek, s sszekttetseik szabvnyos szveges lerst. MAP: az elkszlt logikai tervnek egy adott technolgia szerinti lekpezse (technology mapping), amelyet az elz, TRANSLATE lpsben generlt EDIF netlistbl kapunk: a kapukbl pl. CLB-ket kpez le PAR: vgleges fizikai ramkri tervet hoz ltre a perifria knyszerfeltteleitl fggen (.pcf peripheral constraint file). Ebben a fzisban az elz lekpezs (MAP) sorn kapott komponenseket az FPGA-n rendelkezsre ll s azonosthat fizikai cellkon helyezi el (pl. XnYm). Az elhelyezett fizikai komponenseket vgl a routing eljrs klnbz optimalizlsi szintek s algoritmusok szerint huzalozza ssze, az egyes tervezsi megktseket, knyszerfeltteleket is figyelembe vve (.pcf). A PAR fzis befejezsvel egy .ncd fjl keletkezik.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.1. BEVEZETS, PROGRAMOZHAT KAPURAMKRK,

73

Statikus idztsi analzis (STA): idztsi paramterek (timing parameters) meghatrozsa (maximlis rajel frekvencia, kapuk megszlalsi idejnek, vagy vezetkek jelterjedsi ksleltetsek hatsnak vizsglata stb.) 4.) Bit-folyam (bit-stream), mint konfigurcis fjl generlsa (.bit) s letltse FPGA-ra (CLB-k, programozhat sszekttetsek belltsa, konfigurlsa minden egyes inicializcis fzis sorn szksges, ksznheten annak, hogy a Xilinx FPGA-kat alapveten az SRAM alap technolgia jellemzi). A fenti 2.5. brn szaggatott vonallal jellt rszeket, gymint a funkcionlis szimulcit, csak az FPGA szintzis utn lehet vgrehajtani, mg az idztsi szimulcit az implementcis lpsek vgn lehet elindtani. A funkcionlis szimulci magnak a szintzis eljrsnak a helyessgt ellenrzi (.ncd, vagy .edf alapjn), mg az idztsi szimulci sorn a vgleges fizikai netlista (.ncd) s a konkrt idztsi paramterek vizsglata trtnik. A kztes lersok komplexitstl fggen ezekben a prhuzamos gakban lv szimulcis tesztek jelents idt vehetnek ignybe.

2.2. Bevezets a VHDL nyelv hasznlatba. Nyelvi tpusok, kifejezsek, opertorok


A fejezetben a VHDL, mint magas-szint hardver ler nyelv kialakulsnak httert, elmleti alapjait ismertetjk rviden. Bemutatsra kerlnek a VHDL nyelv alap tpusai, kifejezsei, opertorai, nhny szemlltet pldval altmasztva.

2.2.1 VHDL kialakulsnak rvid httere


A VHDL betsz a VHSIC HDL (Very High Speed Integrated Circuits Hardware Description Language) rvidtsbl szrmazik, melynek jelentse: Nagyon-nagy sebessg Integrlt ramkrk Hardver Ler Nyelve. A VHDL nyelvet eredetileg az amerikai Vdelmi Minisztrium krsre kezdtk el kifejleszteni (DARPA program keretben), azzal a feltett szndkkal, hogy az ASIC ramkrk viselkedst dokumentlhassk. A VHDL szintaxisa az ADA programnyelven alapul [ADA]: ersen tpusos, jl strukturlt, objektumorientlt magas-szint programnyelv. Akkoriban (1980-as vek) ez mg egy nagy, komplex kziknyvet jelentett, amely tele volt implementci-specifikus rszletekkel. Tovbbi elrelps volt, hogy ezeket a dokumentcikat (terv lersokat) a logikai szimultorok ksbb be tudtk olvasni, valamint elkszltek az els logikai szintzis eszkzk, amelyek a kimenetkn digitlis ramkrk fizikai megvalstsait definiltk. A VHDL nyelvvel szemben felmerlt fontosabb elvrsok a kvetkezk voltak: specifikcis nyelv (terv), kpes legyen ramkri struktrt lerni (milyen elemekbl pl fel), kpes legyen ramkri viselkedst (behaviour) lerni (mit kell csinlnia), funkcionlis tulajdonsgok megadsa (hogyan lehet interfszt kszteni hozz), szimullhatsg (viselkeds),
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

74

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

szintetizlhatsg (lekpezni programozhat logikai eszkzkre), fizikai tulajdonsgok (milyen sebessggel mkdhet). A VHDL kezdeti verzija IEEE 1076-1987 szabvnyknt vlt ismertt [VHDL87], amely napjainkig szmos mdostson, bvtsen ment keresztl: 1993, 2000, 2002, s a legjabb a 1076-2008-as verzik jelentek meg. A korai IEEE 1076-1987 vltozat az adattpusok kezelsnek szles spektrumt biztostotta: numerikus (egsz, vals), logikai (bit, boolean), karakteres s fizikai mennyisgek (pl. id, hosszsg), valamint az ezekbl kpzett tmbk (pl. bit_vector, string) definilst is tmogatta. Problma a tbbrtk logikai kifejezsek definilsval volt, amelyet az IEEE 1164 szabvnyban orvosoltak: 9-rtk logikai kifejezsek (jel erssg: pl. weak, strong, unknown stb.), illetve j skalr (std_ulogic) s vektor (std_ulogic_vector) tpusok lettek bevezetve. A VHDL jelenleg egyike a legfontosabb szabvnyos magas-szint hardver ler nyelveknek az EDA (szmtgppel segtett elektronikai tervezs) terletn. Ezt annak ksznhet, hogy a nyelv alaplersa teljesen eszkz (primitv) fggetlen maradt, ezrt a megfelel szintziseszkzk szles sklja kszlhetett el hozz. Mivel legltalnosabban az IEEE 10761993-as szabvny hasznlata terjedt el, amelyet a mai szintzis eszkzk legtbbje tmogat, ezrt a jegyzetben is ennek a VHDL-93 szabvnynak [VHDL93] a hasznlatt, szintzis szempontjbl fontos nyelvi konstrukciit mutatjuk be a pldkon keresztl. A VHDL-t, mintegy tervezend j irnyvonalknt, nemcsak hardver ler nyelvknt, hanem hardver-verifikcis nyelvknt is be kvnjk vezetni a kzeljvben, hasonlan a mr ltez SystemVerilog nyelvhez. Az utbbi vekben megjelent a VHDL-AMS (Analog-Mixed Signal) szabvny is, amely digitlis mellett mr az analg, illetve kevert-jel ramkri tervezst is tmogatja. A VHDL kd teljessgnek s nagyfok rugalmassgnak kvetkeztben ugyanaz a feladat tbbfle nyelvi konstrukcival s kdolsi stlussal is lerhat. A jegyzetben vzolt pldaprogramok is kivtel nlkl ilyenek: egy lehetsges megvalstst mutatjk a problmnak. Mindemellett a HDL lersok kezdeti motivcijnak ksznheten a digitlis rendszertervek megalkotsakor s vizsglatakor a viselkedsi szimulci megadsra trekszenek, amely egyrszt szksgtelenl komplex lehet, msrszt az FPGA szintzis szempontjbl rengeteg felesleges nyelvi konstrukcit is tartalmazhat. Ezt a szemlletmdot kveti a legtbb angol, illetve magyar nyelven megjelent szakknyv s jegyzet is [ASHENDEN], [BME], [KERESZTES], azonban a viselkedsi szimulcival ellenrztt ramkri tervek, korntsem biztos, hogy kzvetlen mdon egy FPGA ramkrre szintetizlhat HDL lersok szerint kszltek, illetve hogy a tnyleges fizikai erforrsokon implementlhatk. Az elemi ptkvekbl, sablonokbl (template) trtn ptkezs egy j kdolsi gyakorlat lehet, ha szintetizlhat lerst, vgs soron fizikai FPGA magvalstst kvnunk adni. Jelen jegyzetben ezt a mdszertant fogjuk kvetni, azaz a nyelvi konstrukcik gyjtemnybl a legfontosabb szintetizlhat kszletet vizsgljuk, ms nemzetkzi szakirodalmak megkzeltshez hasonlan [CHU], [HASKELL].

2.2.2. VHDL alapvet nyelvi konstrukcik


A VHDL kd nyelvi konstrukciit a kvetkez szemlletes pldn keresztl mutatjuk be.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.2. BEVEZETS A VHDL NYELV HASZNLATBA. NYELVI TPUSOK,

75

Feladat 1/a.
Tekintsk a kvetkez 1-bites egyenlsg sszehasonlt (kompartor) ramkrt: kt bemenete A, s B, valamint egy kimenett jelljk EQ. Az ramkr mkdst ler igazsgtbla a 2.2. tblzatban adott: kt bemen fggetlen vltoz esetn ad logikai 1 rtket a kimeneten. A feladat sorn kvetkez alapkapukat hasznlhatjuk: NOT, AND, OR. A kimeneti fggvny Boole-algebrai alakja a kvetkez (2.1):

EQ = A B + A B = A B = A B

(2.1)

2.2. tblzat: 1-bites szmok egyenlsgt sszehasonlt ramkr (EQ) igazsgtblja


bemenetek A 0 0 1 1 B 0 1 0 1 kimenet EQ 1 0 0 1

Az ramkr kapu-szint megvalstsnak egy lehetsges VHDL lersa a kvetkez:


-- Feladat 01 /a 1bites egyenlsg sszehasonlt ramkr library ieee; use ieee.std_logic_1164.all;

entity egyenloseg_1_bit is port( A, B: in std_logic; EQ: out std_logic ); end egyenloseg_1_bit;

architecture kapu_szintu of egyenloseg_1_bit is

begin -- Boole kifejezs -- de megadhatjuk xnor ekvivalencia opertorknt is EQ <= (A and B) or (not A and not B);

end kapu_szintu;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

76

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Forrskd megadsnak konvencii


A VHDL nyelv a kis s nagybets kifejezsek kztt nem tesz klnbsget (nem casesensitive). A forrskd szabadon formzhat, a sorok elejn a behzsoknl tabullst vagy res karaktereket hasznlva, de a tervez mrnkknek, ha csapatban dolgoznak, mindenkppen rdemes rgzteni, hogy milyen elre meghatrozott konvenci szerint kvnnak dolgozni. (Megjegyeznm, hogy ezekre a formzsokra ma mr automatikus ellenrz rendszerek, n. EDA linting szoftver eszkzk is lteznek, fejleszt ltal definilhat szablyokkal).

Azonostk
Az azonostknak, mint az egyes objektumok (pldul az A, B, EQ stb.) neveiben az angol abc betit, szmjegyeiket s az _ (alhzst) is megadhatjuk. Azonban itt nhny fontos kittel, hogy: az azonost csak betvel kezddhet (szmmal s alhzssal nem) utna viszont brmi llhat, de tbb alhzs nem llhat egyms utn s az azonost sem lehet vgn: pl kapu_szintu megengedett, viszont a fentiek rtelmben a 0A, _A, A__, vagy A0_ azonostk hasznlata nem engedlyezett. (Megjegyeznm, hogy a fenti pldban ugyan nagy bets azonostkat definiltunk a hagyomnyos Boole algebrai azonossgok felrst kvetve, azonban a ksbbiek sorn a legtbb esetben a konstans, illetve generic rtkeknek, adunk meg ltalban csupa nagybets azonostkat).

Foglalt szavak
Hasonlan ms program nyelvekhez, a VHDL nyelvben is vannak olyan foglalt szavak, vagy kulcsszavas kifejezsek, amelyeket egy objektum azonostjnak nem adhatunk meg, mivel azt a VHDL nyelvi krnyezet egy foglalt utastsnak rtelmezi. A forrskd szerkeszt a foglalt szavakat vastagtott betvel jelenti meg. Ilyenek lehetnek a kvetkezk: 2.3. tblzat: Foglalt szavak a VHDL nyelvben abs configuration impure null rem type access constant in of report unaffected after disconnect inertial on return units alias downto inout open rol until all else is or ror use and elsif label others select variable architecture end library out severity wait array entity linkage package signal when assert exit literal port shared while attribute file loop postponed sla with begin for map procedure sll xnor block function mod process sra xor body generate nand pure srl buffer generic new range subtype bus group next record then case guarded nor register to component if not reject transport
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.2. BEVEZETS A VHDL NYELV HASZNLATBA. NYELVI TPUSOK,

77

Megjegyzsek
A VHDL nyelvben a kommenteket ketts gondolatjelek utn tehetjk. Csak egy-soros komment engedlyezett. Ha tbb sorba szeretnnk megjegyzseket tenni, akkor minden sor elejn jellni kell.
-- Feladat 1.1

vagy
-- ez egy megjegyzs -- itt folytatdik a megjegyzs

Szmok, szvegelemek
VHDL nyelven is lehetsg van a szmok, vagy szvegelemek (literal-ok) megadsra, klnbz szmrendszert hasznlva. A decimlis, vals szmokat a klnbz alapszmokkal definilt szmrendszerekkel, illetve csoportostkkal (pl. ezres csoportost, vagy binris szmoknl 4-es bitminta csoportost) is megadhatjuk a kvetkez mdon:
--decimlis szmok 23, 0, 146, 46E5

-- vals szmok 23.1, 0.0, 3.14159

-- vals szmok Exponenssel es Mantisszval (decimlis rtkben) jellve 46.E5, 1.0E+12, 34.0e-08

--Szmrendszerek, ahol n#x#

jelenti n a szmrendszer alapjt,

--alapszmt, x pedig az rtkt 2#111111011#, 16#FD#, 16#0fd#, 8#0375# 2#0.1000#, 8#0.4#, 12#0.6# --rtkek --egszek -- = dec (0.5) lebegpontos

123_456, 3.141_592_6, 2#1111_1100# --Szmrendszerek, ahol n#xy# alapjt,

-- csoportostok _ hasznlatval

jelenti az xy szm n-es szmrendszer beli

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

78

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Karakterek, karakter-fzrek s bit-fzrek


A VHDL karaktereit, karakter-fzreit (string), illetve bitfzreit (bit-string) ms nyelvekhez hasonlan a kvetkez mdon definilhatjuk:
-- Karakterek A, z, ,, 1, 0, _ karakter kdok

-- karakter-fzrek "A sztring" "" -ez az (empty) res string

-- Bitfzrek B"0110001", b"0110_0111" binris szm, illetve ekvivalens formja --hasznlhat csoportost _ karakterrel kombinlva is O"372", o"00" oktlis szm, X"FA", x"0d" --hexadecimlis,

D"23", d"1000_0003" --decimlis

Objektumok
Egy VHDL modellben a nvvel azonostott, s tpussal megadott objektumokat kvetkez 4 osztlyba lehet sorolni: o Konstansok (constants), o Jelek (signals), o Vltozk (variables), o Fjlok (file). Jelen jegyzetben az els kett objektum tpussal foglalkozunk rszletesen a szimullhat, de egyben szintetizlhat VHDL kdok megvalsthatsgt figyelembe vve. A konstansok rtkads utn mr nem kaphatnak j rtket. A jelek s a vltozk kztti legfontosabb klnbsg az, hogy a jeleket hasznljuk klnbz entitsok, komponensek sszekapcsolsra, s gy rtkket csak valamely esemny hatsra vltoztatjk meg, mg a vltozknak j rtk brmikor, a kezdeti rtkads utn is megadhat. Msik fontos klnbsg, hogy mg a konstans, s bels jelek bevezetst az architektra lers deklarcis rszben lehet/kell megadni, addig a vltozkat csak az arhitektra trzsn bell, pl. process()-ben lehet definilni (lsd ksbb).

Tervezi knyvtrak s csomagok


A Feladat-1.a els kt sorban lv utastsok:
library ieee; use ieee.std_logic_1164.all;

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.2. BEVEZETS A VHDL NYELV HASZNLATBA. NYELVI TPUSOK,

79

megadsval biztosthuk egyrszt, hogy a szabvnyos IEEE tervezi knyvtr (IEEE 1076 VHDL [IEEE]), msrszt az IEEE knyvtrbl meghvja a szabvnyos, elre definilt std_logic_1164 es csomagok (package) betltdjenek a tervbe [IEEE1164]. Mind a csomagban, mind pedig a csomagokat tartalmaz knyvtrakban a forrskdhoz tovbbi elre definilt, vagy akr ltalunk egyedi mdon definit adattpusok, opertorok s fggvnyek tallhatak, amelyek a fejleszts sorn a use kulcssz segtsgvel tlthetk be, termszetesen az adott tervezi knyvtr megadsval.

Entits deklarcik
A magas szint hardver ler nyelveken definilt digitlis ramkrket hierarchikusan egymsra pl modulok, komponensek alkotjk. Ezeket a modulokat, mint elemi egysgeket a VHDL-ben entitsoknak nevezzk. Minden entits rendelkezhet egy vagy tbb I/O porttal, amelyek az entits s a klvilg kztt teremtenek kapcsolatot (gy ms hierarchia szinteken definilt entitsok is sszekapcsolhatak segtsgkkel). Egy entits lehet a digitlis tervezs legmagasabb hierarchia szinten definilt n. top-level modulja is, de lehet akr egy olyan komponens is, amely rsze egy msik modulnak. A korbbi 1.a plda egyenloseg_1_bit nev entitsnak deklarcija a kvetkez:
entity egyenloseg_1_bit is port( A, B: in std_logic; EQ: out std_logic ); end egyenloseg_1_bit;

ahol A, s B in md, azaz bementeknt, mg az EQ out md, azaz kimenetknt van deklarlva a portlistban. A pldban mindegyik jel std_logic tpus (ieee.std_logic_1164 hasznlata). A fenti pldban ugyan nem szerepel, de ktirny inout tpus jelek is megadhatk az entitsok I/O port listjban.

Architektra deklarcik
Az architektra trzse a fenti pldban a kvetkez szerint kdrszlet szerint alakult:
architecture kapu_szintu of egyenloseg_1_bit is -- deklarcis rsz: ide kerlhetnek pl. signal, const ---kifejezsek deklarcii Begin --itt kezddik az architektra trzse -- Boole kifejezs -- de megadhatjuk xnor ekvivalencia opertorknt is EQ <= (A and B) or (not A and not B); end kapu_szintu;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

80

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

A fenti architektra lersban az ramkr pontos kapu-szint strukturlis felptse van definilva (amely lehetne mg viselkedsi is). Az architektra trzsnek neve kapu_szintu amely az egyenloseg_1_bit entits architektrlis lerst tartalmazza. A VHDL megengedi tbb architektra trzs hasznlatt is egyetlen entitshoz kapcsoldan, amelynek pontos azonostst az architektra egyedi neve biztostja. Ez a ksbbiekben lesz fontos, amikor az alacsonyabb szinten definilt pl. 1-bites sszehasonlt ramkrt az akr eggyel magasabb hierarchia szinten lv, pldul n-bites sszehasonlt ramkr felptsekor kvnjuk felhasznlni. Ezt a folyamatot nevezzk pldnyostsnak. Az architektra trzsnek deklarcis (bejelentsi) rsze konstansok (const), illetve bels jelek (signal) deklarcijt vlaszthat mdon tartalmazhatja (a fenti esetben nem deklarltunk ilyeneket). Az architektra trzs utastsait a begin s end kulcsszk kztti rszeken kell megadni, amelyeken bell minden utastst egyidej, prhuzamos vagy ms nven konkurens vgrehajtsnak tekintnk. Egy hagyomnyos pl. ANSI-C nyelvtl eltren, teht azok az utastsok, amelyek egy architektra trzsben definiltak, azok tnylegesen egyidben, prhuzamosan hajtdnak vgre (kivtelt kpeznek ez all az architektra trzsn bell egy folyamatban, vagy process()-ben vgrehajtand szekvencilis utastsok). Ez egyben azt is jelenti, hogy az architektra trzsben definilt, de brmilyen sorrendben felrt utastsok s hozzrendelsek tnylegesen egyidben fognak vgrehajtdni. A hozzrendels a fenti egyenletben az EQ rtkhez rendeli a korbbi 2.2.-es igazsgtblzatban definilt (1-bites egyenlsg sszehasonlt) ramkr bemeneteit, egyszer and, or, not opertorok felhasznlsval. Azaz, ha a hozzrendels jobb oldaln lv A s B bemeneti vltozk megvltoztatjk rtkeiket valamely esemny hatsra, akkor a megfelel utasts (EQ) fog aktivldni, s az utasts jobb oldaln ll kifejezs kirtkeldik. Vgl a jobb oldali kifejezs j rtkt felveszi a baloldalon ll EQ kifejezs, de csak bizonyos vges propaglsi (jelterjedsi) id mlva.

Feladat 1/b
Mdostsuk gy az eredeti (Feladat 1/a. szerinti) 1-bites egyenlsg sszehasonlt ramkrnk entitst, gy hogy a hozz tartoz kt klnbz (kapu_szintu, s kapu_xnor) architektra lersai a kvetkez szerint legyenek adottak:
architecture kapu_szintu of egyenloseg_1_bit is -- architektra #1 begin -- Boole kifejezs -- de megadhatjuk xnor ekvivalencia opertorknt is EQ <= (A and B) or (not A and not B);

end kapu_szintu;

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.2. BEVEZETS A VHDL NYELV HASZNLATBA. NYELVI TPUSOK,

81

architecture kapu_xnor of egyenloseg_1_bit is -- architektra #2 begin -- Boole kifejezs -- de megadhatjuk xnor ekvivalencia opertorknt is EQ <= A xnor B;

end kapu_xnor;

Teht a fenti kd szerint egsztsk ki a korbbi Feladat 1/a szerinti VHDL lersunk architektra rszt (a file neve a rgi maradjon: egyenloseg_1_bit.vhd)

2.2.3. Tpus deklarcik


Amennyiben a VHDL nyelvben az objektumokhoz j tpusokat akarunk bevezetni a type azonostt kell hasznlni a kvetkez szerint:
Tipus_deklaracio <= type azonosito is tipus_definicio ;

Skalr tpus deklarcik


Fontos megjegyezni, hogy amennyiben kt azonos tpus definicis rsszel rendelkez tpust hozunk ltre, akkor azok kzvetlenl nem rendelhetek egymshoz, pldul:
type alma is range 0 to 100; type korte is range 0 to 100;

--rvnytelen hozzrendels! alma := korte;

Egsz (Integer) tpus deklarcik


Az egsz tpus esetn az brzolhat rtkek szmnak tartomnya: 2,147,483,647 -tl +2,147,483,647 ig terjed, amely VHDL esetn kibvthet. Integer/egsz tpus definicijt a kvetkezkppen lehet megadni:
integer_tipus_definicio <= range kifejezes ( to | downto ) kifejezes

ahol a tartomny (range) nveked, ha to kulcsszval adjuk meg, illetve cskken downto kulcssz hasznlata esetn. A kvetkez plda az egsz tpusok, a ksbbi konstansok, illetve vltozk kzs hasznlatt mutatjk:

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

82

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

constant BITEK_SZAMA : integer := 32; type bit_index is range 0 to BITEK_SZAMA - 1;

type day_of_month is range 0 to 31; type year is range 2100 downto 0; variable today : day_of_month := 4; variable start_year : year := 2010;

Lebeg-pontos (floating-point) tpus deklarcik


A VHDL lebegpontos tpusa az IEEE-754 szabvnyt kveti: eljel, exponens, s mantissza rszeket definilva, egyszeres 32-bites, illetve dupla pontossg 64-bites brzolst hasznlva.
type bemeneti_ertekhatar is range -10.0 to +10.0; type valoszinuseg is range 0.0 to 1.0; variable p_50 : valoszinuseg := 0.5;

A real tpus is egy elredefinilt 64-bites lebegpontos rtk, amelytl azonban eltr lebegpontos tpusokat is definilhatunk a hasznlat sorn.

Fizkiai tpus deklarcik


A fizikai tpus deklarcik segtsgvel fizikai mennyisgek, mint pldul hosszsg, tmeg, id, ram stb. mennyisgek adhatak meg. Mivel a legtbb feladatban egyedi ksleltetses mdszert hasznlunk, ezrt az idbeli (time) fizikai tpus deklarcit mutatjuk be a kvetkez pldn keresztl:
type ido is range -implementci fgg units fs; --elsdleges m.egysg ps = 1000 fs; ns = 1000 ps; us = 1000 ns; ms = 1000 us; sec = 1000 ms; min = 60 sec; hr = 60 min; end units;

-- a kesobbiekben, peldaul egy process deklarcis rszben valtozokent is -- hivatkozhatunk a fizikai ido mennyisegre variable periodus : ido; www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.2. BEVEZETS A VHDL NYELV HASZNLATBA. NYELVI TPUSOK,

83

A unit kulcssz utn kzvetlenl elhelyezked [fs] mennyisget elsdleges mrtkegysgnek nevezzk, amely egyben a legkisebb mrtkegysget is jelenti az tvltshoz.

Felsorolt (enumerated) tpusok


A felsorolt, vagy enumerlt tpust ms programnyelvekhez hasonl mdon, a VHDL nyelv magas absztrakcis szintjn alkalmazva akkor lehet nagyon hasznos, ha az egyes objektumok neveinek rtkeket akarunk megfeleltetni (mintegy egyszer kdols), anlkl, hogy azokat az rtkeket direkt mdon hozzrendeltk volna a felsorolt tpus elemeihez. A kvetkez az lalnos defincis rszt adja meg felsorolt tpus esetn
enumeralt_tipus_definicio <= ( ( azonosito | karakter_elem ) { , } )

Ha az ALU funkcionalitst kvnjuk felsorolt tpusknt megadni, akkor a kvetkezt lehet akr lerni:
type alu_funkcio is (tilt, atereszt, osszead, kivon, szoroz, oszt); variable alu_op : alu_function := atereszt;

A fenti kdrszlet szerint a tilt = 0, atereszt = 1, osszead = 2, kivon = 3, . . . oszt = 5 rtken kerl definilsra, anlkl hogy direkt mdon megadtuk volna. A felsorolt tpusoknak msik fontos alkalmazsi terlete lehet pldul az FSM, vges llapot automata modellek, vagy a szekvencilis hlzatok Mealy, Moore alapmodelljeinek llapot kdolsa (lsd ksbbi fejezetek).
type FSM_state is (start, state_1, state_2, finish); variable allapot : FSM_state := start;

Egy elredefinilt felsorolt tpus a severity_level (megszortsi szint), amelyet a szimulci sorn klnbz visszajelzsekre, figyelmeztetsekre, hibkra stb. lehet hasznlni.
type severity_level is (note, warning, error, failure);

Altpusok (subtype)
Az altpusok deklarcija sorn egy bvebb alap tpus (base type) teljes rtktartomnynak bizonyos leszktst (szkebb tartomnyt) defininlhatjuk, mint pldul:
subtype char is integer range -128 to 127; subtype word is integer range 31 downto 0; --a kvetkezk VHDL elre definilt altpusai subtype natural is integer range 0 to highest_integer; subtype positive is integer range 1 to highest_integer;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

84

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Attribtumok
Az elre definilt attribtumok csoportjaival a sklr tpus/altpus tulajdonsgait (sajtossgait) krdezhetjk le, amelyet a tpusnv utn tett jellel adhatunk meg. A kvetkez kdrszlet ezekre mutat nhny pldt a korbban trgyalt fizikai tpus deklarcit is felhasznlva:
type ellenallas is range 0 to 1E9 units ohm; kohm = 1000 ohm; Mohm = 1000 kohm; end units ellenallas;

type ell_leszukites is range 21 downto 11; -- els (legbaloldalibb) eleme az ellenallas

ellenallas'left = 0 ohm

-- neven definialt fizikai tpusnak ellenallas'right = 1E9 ohm -- utols (legjobboldalibb) eleme ellenallas'low = 0 ohm ellenallas'high = 1E9 ohm -- legkisebb rtke -- legnagyobb rtke -- rtke igaz, hogyha az ellenallas

ellenallas'ascending = true

-- tartomnya (range) nvekv, egybknt hamis ellenallas'image(2 kohm) = "2000 ohm" -- ellenallas rtke bitfzrben -- ("string") kifejezve ellenallas'value("5 Mohm") = 5_000_000 ohm -- megfelel fizikai mennyisg, rtk ell_leszukites'left = 21 --legnagyobb!) ell_leszukites'right = 11 --legkisebb!) ell_leszukites'low = 11 ell_leszukites'high = 21 ell_leszukites'ascending = false --!!range nem nveked, hanem cskken, -- ezrt hamis ell_leszukites'image(14) = "14" -- rtk -> string ell_leszukites'value("20") = 20 -- strin -> rtk -- legjobboldalibb rtk (itt most a -- legbaloldalibb rtk (itt most a -- ellenallas "stringjnek"

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.2. BEVEZETS A VHDL NYELV HASZNLATBA. NYELVI TPUSOK,

85

A kvetkez plda a felsorolt tpus attribtumaira mutat nhny pldt:


type logikai_szint is (ismeretlen, alacsony, magas);

logikai_szint'left = ismeretlen logikai_szint'right = magas logikai_szint'low = ismeretlen logikai_szint'high = magas logikai_szint'ascending = true logikai_szint'image(ismeretlen) = " ismeretlen " logikai_szint'value("alacsony") = alacsony

2.2.4. Szabvnyos logikai adat tpusok s opertorok, knyvtri csomagok


A VHDL egy ersen tpusos nyelv, amely a hagyomnyos magas-szint algoritmus nyelveknl, mint pl ANSI-C is ktttebb. Ez a tulajdonsg azt jelenti egyben, hogy egy objektum tpuskonverzi nlkl csak akkor rendelhet egy msik objektumhoz, ha azok adattpusai, gy rtk-kszlete teljesen megegyezik. Habr a VHDL nyelv igen gazdag az elre definilt adat tpusokban, azonban jelen jegyzetben a teljessg ignye nlkl a teljes kszlet csak egy kisebb rszhalmazt, legfkppen az IEEE std_logic tpust hasznljuk (VHDL93 szabvnybl), amely alkalmas szintetizlhat (s egyben szimullhat) lersok ksztsre. Bit tpus: a hagyomnyos TTL logikai szintek, 0, illetve 1 rtket veheti fel Std_logic tpus: ez a tpus az std_logic_1164 csomagban van definilva, s 9 lehetsges rtket vehet fel. o A hrom szintetizlhat alaprtk: 0 logikai alacsony, 1 logikai magas (ezek a norml TTL szintek, mint bit tpusnl), mg Z nagy-impedancis llapot (tri-state), mellett: o tovbbi 6 rtk alkalmazhat. Ezekbl kett az U inicializlatlan (uninitialized), ill. X ismeretlen (unknown) amelyekkel szimulci sorn tallkozhatunk, pldul amikor a fix logikai szinteket definil jeleket (0 1) direkt mdon sszektnk. o A maradk ngy lehetsges rtk a: (dontt care, kzmbs), H (Weak 1), L (Weak 0), W (Weak unknown) a rezolcis fggvnyek segtsgvel alkalmazhatak, n feloldhatak. Az els hrom alaprtk kivtelvel (0,1,Z), hasznlatukra a jegyzet sorn nem trnk ki rszletesen. Az irodalomjegyzkben szerepl lersokban [VHDL87], [VHDL93], [ASHENDEN], [KERESZTES] ezekrl bvebben s rszletesen olvashatunk.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

86

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Std_logic_vector tpus: ez a tpus az std_logic tpusbl definilt tmb, amelynek a bitszlessge vltoztathat, attl a feladattl fggen. Pldul egy 8-bit szlessg buszvonal esetn, a hagyomnyos little-endian formtumot kvetve (azaz MSB:LSB bit sorrendben) egy a_little_endian_byte nev, bemeneti irny jelet a kvetkez mdon deklarlhatunk (cskken sorrendet, azaz downto kifejezst hasznlva):

a_little_endian_byte : in std_logic_vector (7 downto 0);

Ugyanezt a jelet a hagyomnyostl eltr, big-endian formtumban (LSB:MSB) a kvetkez mdon vezethetnnk be (nvekv sorrendet, azaz to kifejezst hasznlva):
a_big_endian_byte : in std_logic_vector (0 to 7);

Termszetesen, a hagyomnyos magas-szint programnyelvekhez hasonl mdon hivatkozhatunk a vektortmb egy szeletre (slice), vagy akr a vektortmb egyetlen elemre, a kvetkezkppen:
a_little_endian_byte(5 downto 3); a_little_endian_byte(6);

Logikai opertorok: a hagyomnyos logikai opertorok (and, or, not, xor, xnor, s nand) a std_logic, illetve az std_logic_vector adattpusokon vannak rtelmezve. A bit-szint logikai mveleteket viszont a std_logic_vector adat tpuson bell rtelmezzk. A logikai opertorok elsbbsgi, vagy kirtkelsi sorrendje (precedencija) a kvetkez: o not : negls (Inverter) o and : logikai S o or : logikai VAGY o nand : neglt logikai S (NEM-S) o nor : neglt logikai VAGY (NEM-VAGY) o xor : kizr VAGY (Antivalencia) o xnor : neglt kizr VAGY (Ekvivalencia) Termszetesen tzrjelezssel a logikai opertorok kirtkelsnek sorrendje itt is megvltoztathat, pl:
(A and B) or (not A and not B);

2.2.5. Szabvnyos IEEE std_logic_1164 csomag s opertorai


Mind a logikai opertorok, mind a relcis opertorok, s nhny aritmetikai opertor is a Xilinx XST eszkznek segtsgvel automatikusan szintetizlhatk a HDL lersokban trtn felhasznlsuk sorn. Most ezeknek az opertoroknak megfelel VHDL konstrukcikat vizsgljuk meg. Az IEEE std_logic_1164 csomag ltal tmogatott opertorok s
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.2. BEVEZETS A VHDL NYELV HASZNLATBA. NYELVI TPUSOK,

87

a rendelkezsre ll adattpusaik sszefoglal gyjtemnye lthat az 2.4. tblzaton (VHDL93 szabvny szerint): 2.4. tblzat: az IEEE std_logic_1164 csomag VHDL opertorai s adattpusai
VHDL opertor a ** b a+b a-b a*b a/b a&b a=b a /= b a<b a <= b a>b a >= b not a a and b a or b a nand b a nor b a xor b a xnor b abs mod rem sll srl sla sra rol ror operandus VHDL adat tpusa eredmny VHDL adat tpusa

jelents hatvnyozs sszeads kivons szorzs oszts konkatenci (sszefzs) egyenl nem egyenl kisebb, mint kisebb egyenl, mint nagyobb, mint nagyobb egyenl, mint negls S VAGY NEM-S NEM-VAGY Kizr VAGY, Antivalencia Ekvivalencia abszoltrtk maradkos oszts (modulo) maradk (remainder) balra lptets (logikai) jobbra lptets (logikai) balra lptets (arit) jobbra lptets (arit) forgats (rotate) balra forgats (rotate) jobbra

interger (egsz)

integer (egsz)

1D tmb, illetve tmbelemek tetszleges 1D tmb boolean

skalr, 1D tmb

boolean

boolean, std_logic, std_logic_vector

boolean, std_logic, std_logic_vector

integer, fizikai

integer fizikai

1D tmb, illetve tmbelemek

1D tmb, illetve tmbelemek

A VHDL szabvny szerint definilt fenti relcis opertorok az operandusokat sszehasonltjk s az eredmnyk boolean (igaz, hamis) tpus lesz. Az integer s natural beptett VHDL adattpusokon rtelmezett aritmetikai opertorok eredmnye integer lesz. Amennyiben az adott fejlesztsi feladatban tetszlegesen konfigurlhat mdon szeretnnk megadni az adatok bitszlessgt, formtumt (eljeles 2s komplemens signed, vagy eljel nlkli
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

88

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

unsigned tpusokkal), akkor a IEEE_std_logic_1164 csomag helyett ltalban az IEEE numeric_std csomag a hasznlatos. Az integer s natural adattpusokat ltalban az sszetett elemi tpusok, a tmb hatrok megadsnl, illetve konstans rtkek definilsnl is alkalmazzuk.

sszefzs (concatenation)
Az sszefzs & opertora alkalmas arra, hogy egy 1D tmb elemeibl, vagy 1D rsztmbkbl nagyobb tmbket hozzunk ltre. A kvetkez pldk nhny lehetsget mutatnak be:
library ieee; use ieee.std_logic_1164.all;

signal a_in_1bit : std_logic; signal a_in_4bit : std_logic_vector(3 downto 0); signal b_in_8bit, c_in_8bit, d_in_8bit : std_logic_vector (7 downto 0); --kt nibble (4-bites adat) sszefzse b_in_8bit <= a_in_4bit & a_in_4bit; --2 fels MSB bit 0-al trtn kitltse, padding, majd sszefzse c_in_8bit <= "00" & a_in_1bit & a_in_1bit & a_in_4bit; -- kt 8 bites adattpus als 4 LSB bitjnek sszefzse d_in_8bit <= b_in_8bit(3 downto 0) & c_in_8bit(3 downto 0);

Lptet (shift), forgat (rotate) opertorok


A lptets (shift), illetve forgats (rotate) logikai s aritmetikai opertorai alkalmasak arra, hogy egy 1D tmb elemeit, rszeit tetszleges mdon vltoztassuk meg adott irny s hoszszsg lptetssel, illetve forgatssal. A kvetkez plda nhny lehetsget mutat be hasznlatukra. Tekintsk az IEEE numeric_std csomagot, s adattpusokat:
library ieee; use ieee.numeric_std.all; -- signal a_in_8bit : unsigned(7 downto 0);

-- a_in_8bit forgatsa az als 3 bitjvel jobbra a_in_8bit ror 3;

-- a_in_8bit logikai lptetse 2-pozcival balra a_in_8bit sll 2;

-- a_in_8bit aritmetikai lptetse 1-pozcival jobbra a_in_8bit sra 1;

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.2. BEVEZETS A VHDL NYELV HASZNLATBA. NYELVI TPUSOK,

89

Ugyanezek az opertorok az IEEE szabvny szerinti std_logic_1164 knyvtri csomagon rtelmezett std_logic_vector tpusok segtsgvel is megadhatak:
library ieee; use ieee.std_logic_1164.all; -- signal a_in_8bit : std_logic_vector(7 downto 0); signal rotate_right,shift_left_logic,shift_right_arith std_logic_vector(7 downto 0); :

-- a_in_8bit forgatsa az als 3 bitjvel jobbra rotate_right <= a_in_8bit(2 downto 0) & a_in_8bit(7 downto 3); --ror -- a_in_8bit logikai lptetse 2-bittel balra, gy hogy kzben az als 2 -- LSB bitpozciba 0-kat lptetnk be shift_left_logic <= a_in_8bit(7 downto 2) & "00"; --sll

-- a_in_8bit aritmetikai lptetse 1-pozcival jobbra, gy hogy kzben -- a fels bitpozciba az a_in_8bit tpus MSB bitjt lptetjk be shift_right_arith <= a_in_8bit(7) & a (7 downto 1) ; --sra

2.2.6. Szabvnyos IEEE numeric_standard csomag s opertorai


Ez a ksbb megjelent IEEE numeric_standard csomag a korbban trgyalt okokbl a std_logic tpusnak a kiterjesztst jelentette: j adattpusok (pl. signed, unsigned) bevezetsvel, s az opertorok felldefinilsa (overloading) segtsgvel. Tulajdonkppen a signed, s unsigned adattpusok az std_logic tpus elemek tmbjeknt hatrozhatk meg (binris reprezentci). Ez van rviden sszefoglalva az 2.5. tblzatban (VHDL-93 szabvny szerint): 2.5. tblzat: az IEEE numeric_std csomag szintetizlhat VHDL opertorai s adattpusai
VHDL opertor a+b a-b a*b a=b a /= b a<b a <= b a>b a >= b operandus VHDL adattpusa unsigned, natural signed, integer eredmny VHDL adattpusa unsigned, signed

jelents sszeads kivons szorzs egyenl nem egyenl kisebb, mint kisebb egyenl, mint nagyobb, mint nagyobb egyenl, mint

unsigned, natural signed, integer

unsigned, signed

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

90

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

A forrskdba az IEEE csomagok hasznlathoz a kvetkez sorokat kell beilleszteni:


library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all;

A fenti aritmetikai mveletek kzl a szorzs a legsszetettebb mvelet, amelynek szintzise ersen fgg a kivlasztott szintzis szoftvertl (pl. XST), illetve az eszkz-specifikus FPGA technolgitl. Pldul a Xilinx Spartan-3E sorozat eljeles, 18x18-bites szorz blokkokat tartalmaz, mg ms eszkzknl (pl. Virtex-5, -6 sorozat) nagyobb, 25x18-bites szorzsszead makrocellk is helyet kaptak. Mint lthat, az ieee.numeric_std tpusban sincs az oszts / mvelete definilva: ehhez a mveleti osztlyhoz egy Xilinx CoreGenerator nev program segtsgvel generlhatunk VHDL lerst, amelyhez a fordt a logikai cellk mellett, makr cellkat is lefoglal, amelynek azonban gy nagy lesz az erforrs szksglete. Ha a feladatban lehetsges, ppen ezrt a 2-hatvnyval val oszts (egyben szorzs) esetn rdemes a lptet (shift) opertorokkal helyettesteni az osztst (szorzst).

Explicit tpus konverzi


Mivel a VHDL ersen tpusos nyelv, ezrt a konverzis fggvnyek segtsgvel a fenti IEEE std_logic_1164, illetve IEEE numeric_std adat tpusokon explicit tpus konverzit (type casting) lehet vgrehajtani azrt, hogy a tpusokat egyeztessk egy kifejezsben, vagy hozzrendelsben. 2.6. tblzat: Konverzi std_logic_1164 illetve numeric_std csomagokban lv adattpusok kztt
konverzis VHDL fggvny (type cast) std_logic_vector(x) unsigned(x) signed(x) to_ingeger(x) to_unsigned(x,size) to_signed(x, size)

VHDL adattpus (x) unsigned, signed signed, std_logic_vector unsigned, std_logic_vector unsigned, signed natural integer

Eredmny VHDL adattpusa std_logic_vector unsigned signed integer unsigned signed

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.2. BEVEZETS A VHDL NYELV HASZNLATBA. NYELVI TPUSOK,

91

A kvetkez nhny plda a fenti adattpusokon trtn konverzik hasznlatt, tipikus hibkat, illetve azok kikszblst szemlltetik, megfelel szabvnyos csomagok hasznlatval:
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; signal sx1, sx2, sx3, sx4, sx5, sx6: std_logic_vector(3 downto 0); -- sx, mint signed std_logic_vector tpus signal ux1, ux2, ux3, ux4, ux5, ux6: unsigned(3 downto 0); -- ux, mint unsigned numeric tpus

-- -- vizsglat #1 ux1 <= sx1; ux2 <= 5; sx2 <= ux3; sx3 <= 5; -- hibs tpusegyeztets! -- hibs tpusegyeztets! -- hibs tpusegyeztets! -- hibs tpusegyeztets!

-- a fentiek javtsa explicit korrekci megadsval uxl <= unsigned(sx1); --ok, tpusmdosts -- ok, konverzis fgv. hasznlata -- ok, tpusmdosts

ux2 <= to_unsigned( 5 , 4 ); sx2 <= std_logic_vector(ux3);

sx3 <= std_logic_vector(to_unsigned( 5 , 4 ) ) ; -- ok, tpusmdost --s konverzis fggvny egymsba gyazsa s kombinlt hasznlata

--vizsglat #2 -- kvetkez hozzrendelsek helyesek, a numeric_std csomagra ux4 <= ux2 + ux1; --ok, mindkt operandus s eredmny is unsigned ux5 <= ux2 + 1; --ok , ux2 operandus unsigned, illetve 1 natural

--vizsglat #3 sx5 <= sx2 + sxl; --hiba! + opertor nem definilt az std_logic_vector -- adattpusra sx6 <= sx2 + 1; --hiba! + opertora definilatlan az

--std_logic_vector adattpusra

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

92

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

-- a fentiek javtsa explicit korrekci megadsval -- kt lpsben adottak: - elszr konverzis fggvny hasznlata numeric_std csomagra az sszeads elvgzshez -- msodszor a std_logic_vector tpuskonverzi hasznlata visszaalaktshoz, s a hozzrendels bal oldalval trtn megfeleltetshez sx5 <= std_logic_vector(unsigned(sx2) + unsigned(sx1)); sx6 <= std_logic_vector(unsigned(sx2) + 1) ; -- ok -- ok

Megjegyzs: A fenti pldk csupn nhny tipikus problmra s megoldsukra vilgtanak r, termszetesen ezeknl sokkal bvebb lersi mdra is lehetsg van a VHDL nyelvben. A tpusokrl, tpuskonverzikrl tovbbi rszleteket a megfelel irodalmi hivatkozsokon keresztl tallhatunk [VHDL87], [VHDL93], [ASHENDEN].

2.2.7. Nem szabvnyos IEEE knyvtri csomagok


Az utbbi vtizedben szmos, nem-IEEE szabvny szerinti kiegszts, knyvtri csomag is napvilgot ltott, amelyekre mr hivatkozni lehet a VHDL lersokban. Ilyenek pldul az std_logic_arith, std_logic_unsigned, illetve std_logic_signed csomagok. Ez utbbi kett az IEEE std_logic kibvtst jelentik, amelyek segtsgvel az std_logic_vector adattpusokon az aritmetikai opertorok vgrehajtsa is engedlyezett, s nem szksges explicit tpuskonverzi sem. Azonban ezek hasznlata nem javasolt, mivel nem a szabvnyos IEEE csomagok rszt kpezik, gy jelen jegyzetben sem hasznljuk fel ket, csupn emltst tesznk rluk. Tovbbi rszleteket az irodalmi hivatkozsokban olvashatunk [VHDL93], [ASHENDEN].

2.2.8. Konstansok, vltozk, jelek, s generic hasznlata Konstansok


A VHDL kd sok helyen tartalmazhat konstans kifejezseket s akr tmb hatrolkat. Egy j tervezsi koncepci lehet hasonlan ms programnyelvekhez ha a sokszor hasznlt konstans kifejezseket szimbolikus nvvel definiljuk, s ott adunk hozz rtket is. A definilt konstansok az elfeldolgozs sorn rtkeldnek ki s helyettestdnek, ezltal nem ignyelnek fizikai erforrsokat. A konstansok deklarcijt az entitshoz tartoz architektra lers deklarcis rszben kell megadni, mg az els hasznlat eltt, amelynek szintaxisa a kvetkez:
constant konstans_neve : adattpus : = kezdrtk;

Pldaknt a kvetkez konstans deklarcik adottak, amelyeket tmbk hatrainak, vagy logikai vektor kifejezsek bitszlessgnek megadskor lehet felhasznlni:
constant ADAT_BIT: integer : = 8; www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.2. BEVEZETS A VHDL NYELV HASZNLATBA. NYELVI TPUSOK,

93

constant ADAT_TARTOMANY: integer : = 2** ADAT_BIT - 1;

-- mg nhny plda a hasznlatukra: egesz, vals s fizikai tpus -- deklarcikra constant byteok_szama : integer := 4; constant bitek_szama : integer := 8* number_of_bytes; constant e : real := 2.718281828; constant jelterjedesi_kesleltetes : time := 3 ns; constant size_limit, count_limit : integer := 255;

Feladat 2/a konstansok hasznlata


Definiljunk konstansokat egy 4-bites sszead (neve osszeado_4_bit) ramkrben a bitszlessg megadshoz, amelyben a numberic_std csomagot hasznlja az + opertorhoz. A bemeneti operandusok (a_in, b_in) legyenek 4-bit szszlessg std_logic_vector tpusak, a kimeneti eredmny legyen 4-bit szlessg std_logic_vector tpus, s az tvitel (c_out carry out) 1-bites std_logic tpus. Mivel az + sszeads opertora a numeric_std csomagon rtelmezett unsigned adattpusra rvnyes, ezrt a bels jelek, s a kls portok jelei kztt explicit tpus konverzi is szksges. Az ADAT_BIT nev szimbolikus konstans szolgl arra, hogy az architektra bels jeleit 4+1-bites szszlessgen definiljuk (eljel kiterjeszts vgett a +1 bit). Egy fontos szably, hogy kt pl. N-bites szm sszege helyesen egy N+1 bites eredmnyknt trolhat csak el.
-- 4-bites sszead library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; -- + opertorhoz

entity osszeado_4_bit is port( a_in, b_in: in std_logic_vector(3 downto 0); c_out: out std_logic; sum_out: out std_logic_vector(3 downto 0) ); end osszeado_4_bit;

architecture behav of osszeado_4_bit is constant ADAT_BIT: integer := 4; --bels jelek signal a_sig, b_sig, sum_sig: unsigned(ADAT_BIT downto 0); begin Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu --4-bites konstans kifejezs

94

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK a_sig <= unsigned('0' & a_in); b_sig <= unsigned('0' & b_in); sum_sig <= a_sig + b_sig; --osszeadas unsigned jeleken -- eredmeny visszalakitasa (ADAT_BIT) szlessgre sum_out <= std_logic_vector(sum_sig(ADAT_BIT-1 downto 0)); --eredmeny MSB bitje lesz a generalt carry out, atvitel c_out <= sum_sig(ADAT_BIT); --kiterjesztes elojel nelkul

end behav;

Vltozk (variables)
A VHDL kd sok helyen tartalmazhat vltoz (variable) objektumokat, amelyeket els hasznlatuk eltt mindenkppen deklarlni kell. A vltoz azonban a kezdeti rtkads utn (szemben a jellel) brmikor megvltoztathatja rtkt. A vltozkat folyamatban vagy alprogramban adatok ideiglenes trolsra hasznljk A vltozk deklarcijt az entitshoz tartoz architektra lers szekvencilis folyamatnak (process) deklarcis rszben (esetleg a nem trgyalt eljrsban procedure) lehet megadni, amelynek szintaxisa a kvetkez:
variable valtozo_neve : adattpus : = kezdrtk;

Ha a vltoznak kezdeti rtket adunk, azonnal kirtkeldik. Ha kezdeti rtket nem adunk meg, akkor a vltoz az adott tpus legkisebb rtke lesz (nvekv sorrendbe rendezett tartomnyban), illetve legnagyobb eleme lesz (cskken sorrend tartomnyban). Pldaknt a kvetkez nhny vltoz deklarcik adottak:
variable index : natural := 0; variable osszeg, atlag : real := 0.0; variable start, befejezes : time := 0 ns;

Vltozk esetn is hasonlan a konstans kifejezsekhez, s a generichez az rtkads opertora :=. A vltozk a folyamat egy llapott reprezentljk. Kvetkez kdrszlet a vltozk hasznlatra mutat be egy rvid pldt:
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all;

entity valtozo is end entity valtozo;

architecture behav of valtozo is constant incr : integers := 1;

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.2. BEVEZETS A VHDL NYELV HASZNLATBA. NYELVI TPUSOK,

95

begin process is -- ide kerlhetnek a loklis vltoz deklarcik variable sum : integer := 0; begin sum := sum + incr; end process; end architecture behav;

Jelek (signals):
A jelek mkdsnek megrtshez a kvetkez fontos alapfogalmakat kell tisztzni: esemny, meghajt illetve lebonyolts, vagy tranzakci. Amikor egy jel rtke megvltozik, akkor egy n. esemny (event) trtnik a jelen. Amikor egy rtknek egy jelhez egy bizonyos ksleltetssel (pl. after klauzula) val hozzrendelse idztsre kerlt, azt a jel meghajtjn (driver) elkezddtt lebonyoltsnak (transaction) nevezik. Az is lebonyolts, amely nem vltoztatja meg a jel rtkt, ezrt nem okoz esemnyt a jelen. j lebonyolts nem kezddik el a jelen, amg az elz nem fejezdtt be. Az informci tads szempontjbl a legfbb eltrs a jelek s a vltozk kztt, hogy a vltozk nem vihetnek t informcit azon VHDL blokkon kvlre, amelyen bell deklarcijuk trtnt. ppen ezrt jelen jegyzetben kerljk a vltozk, s a megosztott vltozk hasznlatt. Ezekrl rszletesen ms knyvekben, segdletekben [ASHENDEN], [KERESZTES] lehet olvasni. A jeleket az entitshoz tartoz architektra lersok deklarcis rszn kell bevezetni, ezltal a jelek nemcsak az egyidej hozzrendelsekben, hanem a sorrendi hozzrendelsekben (process-en bell) is hasznlhatak. Msik fontos tulajdonsg, hogy a jel nem azonnal rtkeldik ki, hanem csak bizonyos (delta) ksleltetssel ksbb vehet fel j rtket, mg a vltoz azonnal megkapja az rtkt (st mint lttuk rtket is trol egyben). Jelek esetn a hozzrendelst a <= szimblummal adhatjuk meg, a jel nem trol rtket, csak ksleltet(het)i azt. A jel s a vltoz feldolgozsban tovbbi klnbsg, hogy a szekvencilis vgrehajts VHDL kdrszeken a feldolgozs sorrl-sorra halad, ezrt nevezik sorrendi VHDL-nek, mg az egyidej/konkurens VHDL kdrszeken a sorokat csak akkor dolgozzk fel, ha egy esemny megjelent a jelek rzkenysgi listjn. A jelekhez j rtket egyedi ksleletetses mdon is adhatunk (pl. after kulcsszval):
signal y : std_logic := 0; . . . -- egyedi ksleltets nlkl y <= not a; . . . -- egyedi ksleltetssel y <= not a after 5 ns;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

96

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Ebben a VHDL lersban az y a hozzrendels vgrehajtstl szmtott 5 ns mlva veszi fel j rtkt (not a), az after klauzula hasznlatval. A ksleltets egyrszt tekinthet szintzis jelleggel a vges jelterjedsi id rtkeknt, azaz amikor a kimenet a bemenet vltozsnak hatsra 5 ns ksleltetssel veszi fel j rtkt. Msrszt vizsglhatjuk szimulcis rtelemben is, amikor a PC-n fut szimultor bels, ciklus-pontos rjhoz kpest felvett idztst adjuk meg. A jelek s vltozk sszehasonltsrl a ksbbi 2.3.2. alfejezetben mg rszletesen olvashatunk, a folyamatok (process-ek) vgrehajtsa sorn.

Generikusok
Az elz Feladat 2/a akkor lenne tetszlegesen konfigurlhat, amennyiben az entitsok portlistjban lv bitszlessgeket is konstansknt lehetne definilni. Erre az ltalnostsra a VHDL-ben a generikusok, azaz generic kulcssz alkalmazsval van lehetsg, amely egyrszt entitsok portlistjban szerepl port-oknak, msrszt az architektra lersokban pldnyostand komponenseknek is adhat t rtket. A generikusokat az entits deklarcis rszn lehet mdostani, vagy akr egy kls llomnyban (pl. egy felhasznl ltal ksztett egyedi csomagban) lehet megadni, amelyet meghvunk az adott entitsban. Ezltal sokkal jobban modularizlhat, sklzhat VHDL lersokat kaphatunk. Fontos megjegyezni azonban, hogy a generic j rtket az architektra lers trzsn bell mr nem kaphat. A generic deklarcija a kvetkez:
entity entitas_nev is generic ( generic_nev : adat_tipus : = alap_ertek(ek); generic_nev : adat_tipus : = alap_ertek(ek); . . . generic_nev : adat_tipus : = alap_ertek(ek) ) port ( port_nev : mod adat_tipus; . . . ); end entitas_nev;

Feladat 2/b Generikusok hasznlata


Az elz Feladat 2/a (ADAT_BIT = 4-bites sszead ramkr) mdostsa a generic kulcssz hasznlatval a kvetkez (a generic-el kibvtett forrs neve legyen osszeado_4_bit_gen):
-- 4-bites sszead generic-el library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; -- + opertorhoz

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.2. BEVEZETS A VHDL NYELV HASZNLATBA. NYELVI TPUSOK,

97

entity osszeado_4_bit_gen is generic (ADAT_BIT : integer := 4); port( a_in, b_in: in std_logic_vector(ADAT_BIT-1 downto 0); c_out: out std_logic; sum_out: out std_logic_vector(ADAT_BIT-1 downto 0) ); end osszeado_4_bit_gen; -- generic megadsa 4 adat-bitre

architecture behav of osszeado_4_bit_gen is --bels jelek signal a_sig, b_sig, sum_sig: unsigned(ADAT_BIT downto 0); begin a_sig <= unsigned('0' & a_in); b_sig <= unsigned('0' & b_in); sum_sig <= a_sig + b_sig; --osszeadas unsigned jeleken -- eredmeny visszalakitasa (ADAT_BIT) szlessgre sum_out <= std_logic_vector(sum_sig(ADAT_BIT-1 downto 0)); --eredmeny MSB bitje lesz a generalt carry out, atvitel c_out <= sum_sig(ADAT_BIT); end behav; --kiterjesztes elojel nelkul

Ha a fenti pldban szerepl ADAT_BIT szlessg sszeadt eggyel magasabb hierarchia szinten lv entitsban komponensknt kvnjuk pldnyostani, akkor a kvnt generic rtket (itt bitszlessget) a pldnyostsnl meg kell adnunk. Ha a pldnyostsnl nem adunk meg, vagy elfelejtnk megadni generic rtket, akkor a bitszlessghez azt a kezd rtket rendeli a fordt, amely az alacsonyabb hierarchia szinten lv entitsban lett deklarlva. A kvetkez kdrszlet a korbbi osszeado_4_bit_gen sszead ramkr nhny klnbz tetszlegesen definilt bitszlessg szerinti pldnyostst szemllteti (ahol ADAT_BIT=8-, 16-, valamint 4-bites alaprtket belltva):
library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; . . . --bemeneti jelek signal a_4, b_4, osszeg_4: unsigned(3 downto 0); signal a_8, b_8, osszeg_8: unsigned(7 downto 0); signal a_16, b_16, osszeg_l6: unsigned(l5 downto 0); signal carry_4, carry_8, carry_16: std_logic; Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

98

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

-- osszeado peldanyostasa 8-bitesknt osszeado_8: work.osszeado_4_bit_gen(behav) generic map (ADAT_BIT => 8) port map(a_in=>a_8, b_in=>b_8, c_out=>carray_8, sum_out=>osszeg_8)) ;

-- osszeado peldanyostasa 16-bitesknt osszeado_16: work.osszeado_4_bit_gen(behav) generic map (ADAT_BIT => 16) port map(a_in=>a_l6, b_in=>b_16, c_out=>carry_16 , sum_out=>osszeg_l6)) ;

-- osszeado peldanyostasa alaprtken, 4-bitesknt osszeado_4: work.osszeado_4_bit_gen(behav) -- itt nem adjuk meg a generic map-el a bitszelesseget!! -> alapertek port map(a_in=>a_4, b=>b_in_4, c_out=>carry_4, sum_out=>osszeg_4))
;

A fenti esetekben a pldnyosts sorn a generic map kulcsszt kell hasznlnunk, ha a genericnek egy j, tetszleges kezdrtket kvnunk megadni.

2.2.9. Generl struktrk Generate utasts


A generate egy olyan specilis iteratv utasts, amely a digitlis ramkrk egyes alrendszereiben lv komponensek szabvnyos, iteratv sszelltst biztostja. A generate utasts egy konkurrens utastsokat konkurrens blokk szervez for ciklusnak felel meg. Tipikus hasznlatuk pldul a memrik, regiszterek tmbjeinek felptsben van, mivel sok, de hasonl elembl ll, nagy-mret regulris tmbt kell megadni. A generate utastsnak tbb lehetges vltozata van: For generate: ismtld komponens generls, If generate : feltteles komponens generls, Case generate: feltteles komponenes generls. A generl struktrkrl rszletesen a [KERESZTES], [ASHENDEN] referencikban olvashatunk.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.3. VHDL KONKURENS S SZEKVENCILIS HOZZRENDELSI UTASTSOK

99

2.3. VHDL konkurens s szekvencilis hozzrendelsi utastsok


Ebben a fejezetben a VHDL nyelvben hasznlatos legfontosabb kifejezsek, nyelvi konstrukcik, szekvencilis illetve konkurens (egyidej) utastsok, valamint vezrlstad szerkezetek kerlnek ismertetsre. Minden esetben egy-egy pldn keresztl szemlltetjk az utastsok hasznlatt.

2.3.1. Egyidej (konkurens) hozzrendelsi utastsok


ppen ebben, a konkurens, azaz tnylegesen prhuzamostott utasts vgrehajtsban rejlik az jrakonfigurlhat FPGA ramkrk s a HDL nyelvek nagy elnye. Szemben a hagyomnyos nyelvi lersokkal, amelyek a sorrendi, azaz egyms utni lpsek sorozatban hajtjk vgre az utastsokat (pl. ha egy egymagos szmtgp architektrn egy-szl programfuttatst tekintnk), addig az FPGA-kon tnylegesen egyidejleg, azaz nagyfok prhuzamostssal, s utasts feldolgozssal trtnhet a mveletek vgrehajtsa. Mindezt radsul rajelciklus pontossggal kvethetjk nyomon szimulci sorn. Ez az n. masszvan prhuzamostott feldolgozs, amely az FPGA-k architekturlis felptsnek ksznhet: itt gondoljunk arra, hogy nagyszm programozhat logikai, s dediklt makrocells erforrsok regulris 2D-tmbjeibl plnek fel. Az egyidej, konkurens utastsoknak a VHDL szintzis szempontjbl vizsglva tbb lehetsges tpusa van: Tnylegesen egyidej hozzrendelsi utasts (felttel s kivlaszts nlkli) Egyidej feltteles hozzrendels (when-else szerkezet) Egyidej kivlaszt hozzrendels (with-select szerkezet)

Egyidej jelhozzrendels
Ha nem adunk meg feltteleket s kivlaszt jeleket, akkor alapveten egy entits architektrlis rszben lv hozzrendel (<= ) utastsokat konkurens, azaz tnylegesen egyidej jel hozzrendelsi utastsoknak nevezzk: a hozzrendels jobb oldaln lv kifejezs rtkt a bal oldalon ll objektum (pl. signal) fogja felvenni. A konkurens jelhozzrendelsi utastsokat az architektra BeginEnd kztti rszn, de a szekvencilis utasts blokkokon (pl. process() lsd ksbb) kvli hatkrn kell deklarlni. A jelhozzrendelsi utastsokra lthatunk egy rvid pldt:
library IEEE; use IEEE.std_logic_1164.all

entity pelda is --portlista ... end pelda;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

100

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

architecture behav of pelda is signal nibble : std_logic_vector(0 to 3); signal concatenation : std_logic_vector (7 downto 0); signal switch_sig : std_logic; signal sw : std_logic_vector(7 downto 0); signal low_sig : std_logic;

begin --ezek az egyidej jelhozzrendelsi utastsok tnylegesen egyidben, -- prhuzamosan hajtdnak vgre. nibble <= "1000";

concatenation <= '1' & sw(1) & sw(0) & "10101"; switch_sig low_sig -- . . . end behav; <= <= '0'; sw(7);

Ha ugyanazon jelhez tbbszrs, egyidej hozzrendelsi utastssal adunk rtket, akkor mindenegyes konkurens utasts kirtkeldik, s mint prhuzamos gak a kimeneti jelhez egyszerre fognak kapcsoldni (tie). Azonban a kimeneti rtkek ily mdon trtn huzalozott sszektse a legtbb technolgiai lers szerint nem megengedett mvelet, illetve explicit mdon kell kezelni (a kimeneti jelnek tbb forrsa, n. drivere lehet), klnben a szintzis sorn hibt kapunk. Ilyen esetekben alkalmazhatk az n. rezolcis, felold fggvnyek, amelyekrl rszletesen a [BME], [KERESZTES], [ASHENDEN] referencikban olvashatunk. A konkurens utastsoknak tovbbi kt f csoportjt klnbztetjk meg: feltteles-, illetve kivlasztson alapul jelhozzrendelsi utastsokat. A mkdsket tekintve a hagyomnyos szekvencilis if-else s case szerkezetekhez hasonltanak, azzal a lnyeges eltrssel, hogy ezek a konkurens utastsok (vgrehajtsi gakat) a szintzis sorn a programozhat sszekttets hlzat (routing network) segtsgvel prhuzamostva kpezdnek le az FPGA ramkrre.

Egyidej feltteles jelhozzrendels (when-else)


A feltteles jelhozzrendels (when-else szerkezet) egyszerstett VHDL szintaxisa a kvetkez:
jel_neve <= ertekado_kifejezes_1 when boolean_kifejezes_1 else ertekado_kifejezes_2 when boolean_kifejezes_2 else . . . ertekado_kifejezes_n;

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.3. VHDL KONKURENS S SZEKVENCILIS HOZZRENDELSI UTASTSOK

101

Minden egyes when-else feltteles gban szerepl boolean kifejezs egymst kveten rtkeldik ki (tekinthetnnk prioritsos megvalstsnak is), mindaddig, amg valamelyik felttel igazz nem vlik. Ezekbl a when-else szerkezetekbl felpl jelhozzrendelseket (<= ) akr egyidejleg el tudjuk vgezni. Nzznk erre egy konkrt pldt is. A kvetkez egyidej feltteles jelhozzrendels egy tbbszint, tvonalvlaszt (logikai) hlzatot fog szintetizlni, amelynek elvi megvalstsa a 2.6. brn lthat:
rout <= a + b + c when m = n else a b c + 1; when m > n else

Az tvonalvlasztst 2-1 Multiplexerek sorozata vgzi, amelynek mkdst a kvetkez mdon lehet definilni: a multiplexerek lehetsges 2^n bemenete kzl az n darab kivlaszt (selector) jel segtsgvel adjuk meg, hogy pontosan melyik bemenetet kssk (route) ssze a kimenettel. Az egyidej feltteles hozzrendels elvi kapcsolsi rajza pedig a 2.6. brn adott. Ha a kirtkels sorrendjben az els boolean kifejezs (m=n) rtke igaz, akkor az eredmnyknt a+b+c kerl a kimenetre, ha nem, akkor a kvetkezt rtkeljk ki, azaz a-b kerlhet a kimenetre. Ha az m > n (s korbban az m = n) rtke is hamis, akkor az utols g, c+1 kerl az rout kimenetre.
rtkad kifejezsek a b c

+ +
Mux2-1

0
Mux2-1

0 1

+1

Mux hlzat

m n

>

=
Boole kifejezsek

2.6. bra: Az egyidej feltteles hozzrendelsi utastsnak megfelel elvi ramkri modell
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

102

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Megjegyzs: mivel a Boole kifejezsek s rtkad utastsok konkurens mdon rtkeldnek ki, ahogy a kivlasztshoz hasznlt Boole kifejezsek szmt nveljk, gy nvekszik a multiplexer-szintek szma is. gy egy komplexebb when-else szerkezetbl hosszabb multiplexer lnc szintetizldik, amely viszont megnvelheti a teljes ramkr jelterjedsi idszksglett.

Feladat 1
Nzznk egy konkrt pldt when-else egyidej hozzrendelsi utastsra. Tervezznk egy prioritsos kdol (priority encoder) ramkrt, amelynek a 4-bites bemenete az ignyeket, krseket definil bitmintzatot adja meg, legyen a neve req(3:0). A legnagyobb prioritssal az MSB bit, azaz a req(3) br. A prioritsos kdol pcode_out(2:0) kimenete pedig egy olyan binris kd, amely mindig a berkezett krsek kzl a legnagyobb priorits krsnek felel meg. Az ramkri entits neve legyen priencoder_4_conc, mg a hozz tartoz architektra neve legyen Behavioral (azaz viselkedsi, hiszen az ramkrnek a viselkedst a VHDL lersban egyidej feltteles utastssal adjuk meg). Ennek a prioritsos kdolnak a mkdse adott a kvetkez igazsgtblzattal:
prioritsos bemenetek req(3) 1 0 0 0 0 req(2) 1 0 0 0 req(1) 1 0 0 req(0) 1 0 kdolt kimenet pcode_out(2:0) 100 011 010 001 000

A fenti igazsgtblnak megfelel 4-bemenet prioritsos kdol ramkr VHDL lersa a kvetkez:
-- Feladat. prioritsos kdol ramkr when-else egyidej -- feltteles hozzrendelssel library IEEE; use IEEE.STD_LOGIC_1164.ALL;

entity priencoder_4_conc is Port ( req : in STD_LOGIC_VECTOR (3 downto 0); STD_LOGIC_VECTOR (2 downto 0));

pcode_out : out

end priencoder_4_conc;

architecture Behavioral of priencoder_4_conc is

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.3. VHDL KONKURENS S SZEKVENCILIS HOZZRENDELSI UTASTSOK

103

begin pcode_out <= "100" when (req(3)='1') else

"011" when "010" when "001" when "000"; end Behavioral;

(req(2)='1') else (req(1)='1') else (req(0)='1') else

A fenti kdban elszr az req(3) bemeneten keresztl rkezett krst vizsgljuk meg, amely ha 1-es volt a pcode_out(2:0) = "100" -ra lltdik be. Egybknt pedig, mindig az egyre alacsonyabb priorits ignyeket vizsgljuk sorban egyms utn (req(2), req(1), vgl req(0)).

Feladat 2
A kvetkez plda egy n2^n binris dekdol ramkr egyidej feltteles utastsokkal trtn viselkedsi lerst adja meg VHDL-ben. Tekintsnk egy 24-es dekder ramkrt, amely en_in magas-aktv engedlyez bemenettel is rendelkezik, illetve n. one-hot, azaz 1-es sly binris dekdolst hasznl: a decode_out kimeneten mindig az adott 2^n bitpozciban 1-es lltdik be a bemeneti kombincinak megfelelen. A 24-es binris dekdol ramkr (neve legyen decoder_2_4_conc) mkdst ler igazsgtblzat a kvetkez:
dekdolt kimenet a_in(0) 0 1 0 1 decode_out(3:0) 0000 0001 0010 0100 1000

bemenetek en_in 0 1 1 1 1 a_in(1) 0 0 1 1

Az igazsgtblzat szerint a 24-es dekdol ramkrnek kvetkez viselkedsi lers adhat meg, amelyben az egyidej feltteles hozzrendel utasts(oka)t hasznlunk:
-- Feladat. 2->4 dekdol ramkr when-else egyidej -- feltteles hozzrendelssel library IEEE; use IEEE.STD_LOGIC_1164.ALL;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

104 entity decoder_2_4_conc is port(

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

a_in: in std_logic_vector(1 downto 0); en_in: in std_logic; decode_out: out std_logic_vector(3 downto 0) ); end decoder_2_4_conc; architecture behav of decoder_2_4_conc is begin --one-hot, 1-es binris sly dekdolt kimenetek decode_out <= "0000" when (en_in='0') else "0001" when (a_in="00") else "0010" when (a_in="01") else "0100" when (a_in="10") else "1000"; end behav; -- egybknt ha a_in="11"

A fenti VHDL kdban elszr azt teszteljk, hogy en_in engedlyez jel rtke 0-e. Ha a felttel hamis (azaz en_in = 1), akkor soron kvetkez when-else feltteles utasts gak hajtdnak vgre ellltva a megfelel one-hot dekdolt kimeneti rtket.

Egyidej kivlaszts alap jelhozzrendels (with select)


A msik fontos konkurens jel hozzrendelsi mdszert kivlaszt hozzrendelsi utastsnak vagy with-select szerkezetnek is nevezzk, melynek szintaxisa a kvetkez:
with kifejezes select jel_neve <= kifejezes_erteke_1 when valasztas_1, kifejezes_erteke_2 when valasztas_2, kifejezes_erteke_3 when valasztas_3 | valasztas_4, . . . kifejezes_erteke_n when others;

A fenti with-select szerkezettel a kifejezes jel rtktl fggen rendelnk hozz a jel_neve kifejezshez valamilyen rtket. A valasztas_i jel a kifejezes jel egy valdi rtknek, vagy a valdi rtkek egy halmaznak kell llnia: tbb lehetsget is felsorolhatunk | opertorral elvlasztva. Az others foglalt szt a with-select utastsok vgn akkor hasznlhatjuk, amikor minden ms lehetsget, amit nem soroltunk fel, adjuk meg. Fontos megjegyzsek: a with-select konkurens kivlaszt jelhozzrendels esetn a valasztas_i lehetsgeknek egymsra nzve egyrszt: klcsnsen kizrlagosnak kell lennik (mutual exclusive, = mutex tulajdonsg), azaz egyazon vlasztsi lehetsg sem szerepelhet egyszerre tbb klnbz sorban
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.3. VHDL KONKURENS S SZEKVENCILIS HOZZRENDELSI UTASTSOK

105

msrszt minden lehetsges valasztas_i lehetsget fel kell sorolni (all inclusive tulajdonsg), nem maradhat ki lehetsg, mert akkor azokat le kell fedni (others). Vizsgljuk meg az elz, egyidej feltteles hozzrendelsnl bemutatott pldt, de most az egyidej kivlaszt hozzrendelsi utastsra, kisebb mdostssal (a+b+c kivlasztst tekintve):
signal szelektor : std_logic_vector(1 downto 0); with szelektor select rout <= a - b c + 1 when "00",

when "10", when others;

a + b + c

sszevetve a korbbi ramkrrel az els szint multiplexer 1-es llapotnl kaptunk a b kimenetet, amelyet a msodik szint multiplexer 0-s llapotn keresztl a rout kimenetre tovbbtottunk (azaz szelektor 10). Hasonl mdon az c+1 bemenetet ellltva, az els szinten lv multiplexer 1-es llapotn, mg a msodik szint multiplexer 0-s llapotn keresztl jut az rout kimenetre. Vgl az a+b+c ellltott bemeneti kifejezsnl azt others kulcsszt hasznljuk minden ms eset n. lefedsre. Ennek az egyidej kivlaszt jelhozzrendelsnek az ramkri modellje a kvetkez 2.7. brn lthat.
rtkad kifejezsek a

+
b c

Mux hlzat 00

Mux4-1

01 10 11

+1

szelektor

2.7. bra: Egyidej kivlaszt jel hozzrendelsi utastsnak megfelel elvi ramkri modell

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

106

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Feladat 3
Tekintsk az egyidej feltteles hozzrendelsnl korbban megismert 4-bites prioritsos kdol ramkrt (Feladat 1). Ennek az ramkrnek, most az egyidej kivlaszt jelhozzrendel utastsokbl felptett VHDL viselkedsi lerst adjuk meg. Az entits neve legyen:
priencoder_4_with. -- Feladat 3. prioritsos kdol ramkr with-select egyidej -- kivlaszt hozzrendelssel library IEEE; use IEEE.STD_LOGIC_1164.ALL;

entity priencoder_4_with is Port ( req : in STD_LOGIC_VECTOR (3 downto 0); STD_LOGIC_VECTOR (2 downto 0));

pcode_out : out

end priencoder_4_with;

architecture behav of priencoder_4_with is begin with req select --sszes lehetsges kivlasztsi esetet meg kell adni pcode_out <= "100" when "1000"|"1001"|"1010"|"1011"| "1100"|"1101"|"1110"|"1111", "011" when "0100"|"0101"|"0110"|"0111", "010" when "0010"|"0011", "001" when "0001", "000" when others; end behav; -- req="0000" egybknt

A fenti kd a lehetsges kivlasztsi esetekhez tartoz sszes kombincit megadja a req(3:0) jelet illeten. A | szimblum szolgl arra, hogy az tbb lehetsges kombincit egyetlen esethez tudjuk rendelni, tovbb az others kulcsszval minden ms esetet le tudunk fedni.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.3. VHDL KONKURENS S SZEKVENCILIS HOZZRENDELSI UTASTSOK

107

Feladat 4
Hasonl mdon, tekintsk az egyidej feltteles hozzrendelsnl korbban megismert 24es binris dekdol ramkrt (lsd Feladat 2). Ennek az ramkrnek, most az egyidej kivlaszt jelhozzrendel utastsokbl felptett viselkedsi lerst adjuk meg VHDL nyelven. Az entits neve legyen: decoder_2_4_with.
-- Feladat 4. 2->4 dekdol ramkr with-select egyidej -- kivlaszt hozzrendelssel library IEEE; use IEEE.STD_LOGIC_1164.ALL;

entity decoder_2_4_with is port( a_in: in std_logic_vector(1 downto 0); en_in: in std_logic; decode_out: out std_logic_vector(3 downto 0) ); end decoder_2_4_with;

architecture behav of decoder_2_4_with is signal sel: std_logic_vector(2 downto 0); begin sel <= en_in & a_in; with s select decode_out <= "0000" when "000"|"001"|"010"|"011", "0001" when "100", "0010" when "101", "0100" when "110", "1000" when others; -- sel="111" egyebkent

end behav; A fenti VHDL kdban az en_in s a_in(1:0) jeleket egy 3-bites sel(2:0) nven definilt jell fzzk ssze, ppen azrt, hogy a korbbi igazsgtblzatnak megfelel kivlaszt jelhozzrendelseket is meg tudjuk adni. A fenti kd a lehetsges kivlasztsi esetekhez tartoz sszes kombincit megadja a sel jelet illeten. A | szimblum szolgl arra, hogy tbb lehetsges kombincit egyetlen esethez tudjuk rendelni, tovbb az others kulcsszval minden ms esetet le tudunk fedni. Tovbbi feladatok: az elz VHDL nyelven lert Feladatokhoz 1.)4.) hozzon ltre egy-egy tesztpadot. gyazza be a tesztpadba a megfelel pldnyostott entitsokat, majd adjon rjuk gerjesztst, s vizsglja a kimenetek vltozsait a Xilinx ISim szimultor segtsgvel. A szimulcival kapcsolatban bvebb lerst a ksbbi 2.4. fejezetben tallhat.
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

108

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

2.3.2. Szekvencilis hozzrendelsi utastsok


A VHDL a hagyomnyos programozsi, modellezsi szemlletmdot kvetve tmogatja a szekvencilis utasts vgrehajtst is, amely, amelyet ms magas-szint nyelvek hasznlatakor mr megszokhattunk. A VHDL nyelvben tbb lehetsges szekvencilis nyelvi konstrukci is biztostott, amelyek kzl a legfontosabb szintetizlhat utastsok a kvetkezk: Process() folyamat, amelyben szerepl utastsok bizonyos jelek vltozsra aktivizldnak (rzkenysgi lista). o If else utasts, elgazs, vagy branch (process-en bell adaht csak meg). o Case utasts (process-en bell hvhat adhat csak meg). A kvetkez szekvencilis vgrehajts VHDL nyelvi konstrukcik a process() folyamaton bell hasznlhatak, jelen jegyzetben rszletes bemutatsukra nem trnk ki. Loop: iteratv, ciklikus vgrehajtst tmogat nyelvi konstrukci o For-loop: hagyomnyos for ciklus o While-loop: hagyomnyos ell-tesztel while ciklus o Loop: tesztels nlkli ciklusvgrehajts Next / Exit: a ciklusokbl (loop) val kilps feltteleit adjk meg Wait / Assert: vrakoztat utastsok, illetve bizonyos feltteltl fgg belltsok (assertion) Null: segtsgvel explicit mdon jelezhet, hogy nem szksges utastst vgrehajtani pl. egy elgazs gban, vagy egy ciklusban

Folyamat (process)
Folyamat szintaxisa A folyamat mkdse eltr az egyidej, konkurens utasts vgrehajtstl. A folyamat hasznlatnak, VHDL lersba gyazsnak clja, hogy kompatibilis utastsokat biztostson egy hagyomnyos szekvencilis vgrehajtshoz [ASHENDEN], [KERESZTES]. A folyamat egy olyan kd-sorozatnak tekinthet, amely mindig vgrehajtsra kerl, ha az rzkenysgi listjt szerepl jelek valamelyikn vltozs ll be. Az rzkenysgi lista (sensitivity list) azoknak a jeleknek a gyjtemnye, amelyekre egy folyamat rzkeny: pldul kombincis logikai hlzatok esetn a bemeneteket, mg sorrendi hlzatok esetn megvalstand modelltl fggen ltalban a bemeneteket, s a visszacsatolt llapotokat is meg kell adni. Az rzkenygi listban szerepl jeleket zrjelben, vesszvel elvlasztva kell felsorolni. A process() beginend kztti rszn, azaz a folyamat trzsben a szekvencilis utastsokat adhatjuk meg. A [ ] zrjelben megadott rszek opcionlisak, azaz nem szksges megadni ket, viszont a folyamat neve egyedi kell, hogy legyen, amely gy segthet a szintzis sorn felmerl esetleges hibk egyrtelm azonostsban. A szekvencilis_utasts_i egy <= jellel kifejezett rtkad utastst jelent. A process egyszerstett szintaxisa a kvetkez:

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.3. VHDL KONKURENS S SZEKVENCILIS HOZZRENDELSI UTASTSOK

109

[process_neve] : process(erzekenysegi_lista) [is] begin szekvencilis_utasts_1; szekvencilis_utasts_2; . . . szekvencilis_utasts_n; end process;

Folyamat szemantikja A folyamatok nmagukban teht sorrendi, de egymshoz kpest kvlrl nzve egyidej programrszek. Ha tbb folyamat van egy VHDL entits architektrlis rszn, akkor azok tnylegesen egyidejleg fognak vgrehajtdni. Ha pldul az egyidej/konkurens hozzrendelsi utastsok kztt soros/szekvencilis vgrehajts blokkokat is szeretnnk definilni, akkor a process()-t, mint soros VHDL nyelvi konstrukcit kell hasznlnunk. Egy folyamat akkor aktivizldik, ha az n. rzkenysgi listjn szerepl jelek valamelyikn rtkvltozs jelenik meg. Fontos azonban tudni, hogy egy folyamat mkdse brmikor felfggeszthet (wait utastsokkal), akr valamilyen felttel bekvetkezsig, vagy akr vgtelen hossz ideig. Ugyanakkor egy folyamat nem hvhat meg ktszer, mint pl. egy fggvny (function), vagy alprogram (procedure). Minden folyamat a VHDL szimulci elejtl indul s vgig l, de legfeljebb csak a vgrehajtsa fggeszthet fel bizonyos idre, azaz nem szntethet meg. A process() kizrlagosan vagy vrakozsi/ttlen (waiting/passive), vagy vgrehajtsi/aktv (executing/active) llapotban lehet. Br a szintaxisa nagyon hasonlt a norml konkurens rtkad utastshoz, azonban ha egy process()-en bell definilt ugyanazon jelhez tbbszrs szekvencilis hozzrendelsi utastst adunk meg, akkor mindig az utols rtkad utastsnak lesz csak hatsa:
Signal a, b, c_int, q : std_logic; A1 : process(a ,b) begin c_int <= a and b; --1 c_int <= a or b; q <= not c_int; end process; --2 --3

amely egyenrtk a kvetkez szekvencilis hozzrendelssel (a, b, c_int inputok es q output itt signal-kent vannak definilva, mg a c nincs a folyamat rzkenysgi listjban sem megadva):
Signal a, b, c_int, q : std_logic; A2: process(a ,b) begin c_int <= a or b; --1 q <= not c_int; end process; Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu --2

110

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

A signal-knt definilt bels jel (c_int) esetn a q<=not _c_int jelhozzrendels vgrehajtsakor az c_int mg a rgi rtkt tartja. Ezrt fel kell venni t a folyamat rzkenysgi listjba, gy egy delta ksleltets utn a process() jra tevkenny vlik. A folyamat egy olyan kd sorozat, amely mindig vgrehajtsra kerl, ha az rzkenysgi listjt szerepl jelek valamelyikn vltozs jelentkezik. A pldbl is lthat a vltoz hasznlatnak elnye, hiszen a jel esetben figyelni kell a delta ksleltetsre s a folyamatnak ktszer kell lefutnia. Teht helyesen a kvetkez lenne a sorrendi VHDL kdrszlet:
Signal a, b, c_int, q : std_logic; A2: process(a ,b, c_int) begin c_int <= a or b; --1 q <= not c_int; end process; --2 --c_int hozzaadva!

Megjegyzsek
1.) A VHDL szabvny megengedi azt is, hogy az rzkenysgi listbl mellzzk a jelek felsorolst. Viszont, ha egy jel kimarad egy szintetizland VHDL tervben az rzkenysgi listbl, amelynek vizsglatra a folyamat blokkjban szksg lehet, akkor a VHDL szimulci s a szintetizlt hardver akr eltren is viselkedhet. 2.) A bels jel hasznlata rejtett hibhoz vezethet a szintzisben (pl. Xilinx XST eszkzt hasznlva), mivel a folyamat rzkenysgi listjt figyelmen kvl hagyhatja sok szintzis eszkz. Ezt kikszblend a ksbbi fejezetekben a regisztereknl ismertetett mdon lehet a jeleket trolsra hasznlni (jel aktulis, illetve kvetkez llapotai kztti hozzrendelsek megadsval).

Jelek s vltozk szemantikai sszehasonltsa folyamatok hasznlatval (diszkrt esemnyek idbeli modellje)
A VHDL idztsi modellje azon alapul, hogy a modellezett rendszer a bemeneteire adott gerjesztsekre (stimulus) meghatrozott mdon vlaszol, majd a gerjeszts tovbbi vltozsaira vrakozik (wait). A szimulci sorn az egyes esemnyek idpontjai mindig szimulcis idben mrtek, azaz fggetlenek a fizikai idtl. A szimultor diszkrt idegysgekben lpkedve dolgozza fel a szimulcis idpontokra temezett esemnyeket, amelyeket egyrszt a gerjesztsek, msrszt a modellezett rendszernek a gerjesztsekre adott vlasza hatroz meg. Esemny alatt egy jel rtknek megvltozst rtjk. Egy adott szimulcis idpontban az esemnyek feldolgozsa egy vagy tbb n. szimulcis ciklusban trtnik. A szimulcis ciklusnak kt teme van. Az 1. temben a jeleknek az rtke vltozik meg, amelyek vltozsa az adott szimulcis idpontra van elrva. A 2. temben lefutnak azok a folyamatok, amelyeket az 1. temben megvltozott jelek tesznek tevkenny. A folyamatok jabb jelek rtkvltozsait rhatjk el, gy elfordulhat, hogy az adott szimulcis idpontban tovbbi szimulcis ciklusokat is vgre kell hajtani. Egy szimulcis
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.3. VHDL KONKURENS S SZEKVENCILIS HOZZRENDELSI UTASTSOK

111

idpontban tbb szimulcis ciklus egyms utni vgrehajtsakor gondoskodni kell arrl, hogy a ciklusok ne zrus id alatt fussanak le, mert klnben a jelvltozsok kztt nem biztosthat az ok-okozati viszony (kauzalits). Ezrt minden szimulcis ciklushoz egy elmleti delta ksleltetst rendel a VHDL szimultor, ami a szimulcis idt nem befolysolja. Egy adott szimulcis idpontban a szimulcis ciklusok mindaddig fognak ismtldni, amg a folyamatokon vgig nem gyrzik a kezdeti jelvltozsok hatsa. Ha az adott szimulcis idpontra mr nincs tbb jelvltozs elrva, akkor a szimultor a kvetkez szimulcis idpontra temezett esemnyeket kezdi el feldolgozni. A folyamatok hasznlatban a jelek s vltozk kztti legfontosabb klnbsgeket szemllteti a kvetkez VHDL kdrszlet a folyamat hasznlatra:
-- process jelekkel: s1 s s2 -- deklarci signal s1, s2 : integer := 0; . . . Proc_sig: process begin wait for 10 ns; s1<=s1+1; s2<=s1+2; end process; --- process vltozkkal: v1 s v2 vltozk proc_variable: process --deklarci variable v1, v2: integer := 0; begin wait for 10 ns; v1:=v1+1; v2:=v1+2; end process;

Az albbi 2.7. tblzat a fenti VHDL kdnak megfelel viselkedst mutatja be a jeleknek, illetve vltozknak. Az egyes oszlopokban az aktulis szimulcis idt, az s1, s2 szignlokat, valamint v1, v2 nven definilt vltozk kirtkelsnek eredmnyt lthatjuk. A kt fggetlen process egymssal prhuzamosan, konkurens mdon fut le. Megfigyelhet, hogy a szimulcis id 10 ns elteltvel, a wait for 10 ns utastsnak megfelelen a vltozk rgtn felveszik az j rtkket sorban egyms utn, mg ez az rtkvltozs a jelek esetn mindig csak egy n. szimulcis delta idksleltetssel ksbb kvetkezik be:

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

112

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

2.7. tblzat: a folyamaton belli jelek (s1, s2) s vltozk (v1, v2) sszehasonltsa az rtkadsok idztse szempontjbl
Szimulcis id 0 ns 10 ns 10 ns+delta 20 ns 20 ns+delta

s1 0 0 1 1 2

s2 0 0 1 1 2

v1 0 1 1 2 2

v2 0 2 2 3 3

A delta idt a VHDL-ben a sorrendi esemnyek sorba lltsra hasznljuk. A kt sorrendi esemny kztti idt delta ksleltetsnek nevezik. Egy delta idnek nincs valsidbeli egyenrtke, hanem mikzben telik (vgrehajts trtnik/aktv folyamat), a szimulcis id nem halad.

If-else utasts
Az If-else egy hagyomnyos szekvencilis feltteles utasts, amelynek egyszerstett szintaxisa a kvetkez:
if boolean_kifejezes_1 then szekvencialis_utasts(ok); elsif boolean_kifejezes_2 then szekvencialis_utasts(ok); elsif boolean_kifejezes_3 then szekvencialis_utasts(ok); . . . else szekvencialis_utasts(ok); end if;

A boolean kifejezsek egyms utn, szekvencilisan rtkeldnek ki mindaddig, amg egy feltteles gban lv kifejezs igaz nem lesz, vagy az else gat el nem rjk. Korbbi when-else egyidej hozzrendelsi pldnknl maradva, amelyet gy rtunk fel, hogy:
rout <= a + b + c when m = n else a b c + 1; when m > n else

ezt a hagyomnyos if-else szekvencilis hozzrendelsi utastsokkal a kvetkez mdon lehet megadni:

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.3. VHDL KONKURENS S SZEKVENCILIS HOZZRENDELSI UTASTSOK

113

process (a, b, c, m, n) begin if m = n then

-- bemeneti jelekre rzkeny folyamat

rout <= a + b + c after 2 ns; elsif m > 0 then rout <= a - b after 10 ns; else rout <= c + 1 after 5 ns; end if ; end;

--egyedi ksleltets

Megjegyzs: Az elz kdrszlet az egyidej feltteles jelhozzrendelshez hasonl multiplexer hlzatot fog kialaktani a szintzis sorn. A jelek hozzrendelseihez egyedi ksleltetseket adtunk meg, after (clause) kulcssz hasznlata utn megadott fizikai-idbeli tpus konkrt megadsval.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

114

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Feladat 5
Tekintsk az egyidej feltteles hozzrendelsnl korbban megismert 4-bites prioritsos kdol ramkrt (Feladat 1), de most ennek az ramkrnek, az if-else szerkezettel kifejezett szekvencilis jelhozzrendel utastsokbl ll VHDL lerst adjuk meg. Az entits neve legyen: priencoder_4_if. Mint ismeretes az if-else szerkezetet a VHDL lers folyamatnak beginend kztti trzsbe kell begyazni.
-- Feladat 5. prioritsos kdol ramkr if-else szekvencilis -- hozzrendelssel megadva library IEEE; use IEEE.STD_LOGIC_1164.ALL;

entity priencoder_4_if is Port ( req : in STD_LOGIC_VECTOR (3 downto 0); STD_LOGIC_VECTOR (2 downto 0));

pcode_out : out end priencoder_4_if;

architecture behav of priencoder_4_if is begin if_process: process(req) -- bemeneti req jelre rzkeny folyamat begin if (req(4)='1') then pcode_out <= "100"; elsif (req(3)='1') then pcode_out <= "011"; elsif (req(2)='1') then pcode_out <= "010"; elsif (req(1)='1') then pcode_out <= "001"; else pcode_out <= "000"; end if; end process; end behav;

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.3. VHDL KONKURENS S SZEKVENCILIS HOZZRENDELSI UTASTSOK

115

Feladat 6
Hasonl mdon, tekintsk az egyidej feltteles hozzrendelsnl korbban megismert 24 binris dekdol ramkrt (Feladat 2). Ennek az ramkrnek, most az szekvencilis if-else feltteles hozzrendel utastsokbl felptett viselkedsi lerst adjuk meg VHDL nyelven. Az entits neve legyen: decoder_2_4_if.
-- Feladat 6. 2->4 dekdol ramkr if-else feltteles szekvencilis -- hozzrendelssel megadva library IEEE; use IEEE.STD_LOGIC_1164.ALL;

entity decoder_2_4_if is port( a_in: in std_logic_vector(1 downto 0); en_in: in std_logic; decode_out: out std_logic_vector(3 downto 0) ); end decoder_2_4_if;

architecture behav of decoder_2_4_if is begin process(en_in, a_in) -- bemeneti en_in, a_in jelekre rzkeny folyamat begin if (en_in='0') then decode_out <= "0000"; elsif (a_in ="00") then decode_out <= "0001"; elsif (a_in ="01") then decode_out <= "0010"; elsif (a_in ="10") then decode_out <= "0100"; else -- a_in ="11"

decode_out <= "1000"; end if; end process; end behav;

Tovbbi feladatok: a VHDL nyelven lert Feladat 5.)-6.) okhoz hozzon ltre egy-egy tesztpadot. gyazza be a tesztpadba a megfelel pldnyostott entitsokat, majd adjon rjuk
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

116

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

gerjesztst, s vizsglja a kimenetek vltozsait a Xilinx ISim szimultor segtsgvel. A szimulcival kapcsolatban bvebb lerst a kvetkez 2.4. fejezetben tallhat.

Vrakoztat (wait) utastsok


A specilis szekvencilis vrakoztat utastsoknak a kvetkez ngy lehetsges formja van: Wait: utastssorozat vgrehajtsa lell, vgtelen ideig vrakozunk (pl szimulcis process vgn hasznljuk). Wait on [szenzitv_lista]: jel vltozsra vrakozunk. Wait for [id_kifejezs]: meghatrozott idtartamig vrakozunk. Wait until [felttel]: addg vrakozunk, amg a felttelben lv kifejezs rtke igaz nem lesz. A kvetkez nhny szemlltet plda a wait utasts lehetsges megadsi mdjainak hasznlatt szemllteti:
wait; --ha nem hasznlunk az utasts utn semmifle opcionlis kifejezst, -- akkor azt jelzi, hogy vgtelen ideig vrakoztatunk

signal clk: std_logic; . . . wait until (clk); --addig vrakozunk amg a clk rtke 1 nem lesz

constant T : time : = 20 ns; . . . wait for T/2; -- T/2 peridus ideig vrakozunk

signal a, b : std_logic; . . . wait on a,b; -- a s b rtknek vltozsra vrakozunk (pl. process()szenzitv lista -- helyettestse

rdemes megjegyezni, hogy a szenzitv listt megadhatjuk egy folyamat deklarcis rszben a process() kulcssz utni zrjeles rszen, ami teljesen ekvivalens azzal, mintha a folyamat trzsben az utols utasts egy wait on utasts lenne:

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.3. VHDL KONKURENS S SZEKVENCILIS HOZZRENDELSI UTASTSOK

117

process (reset, clock) is variable state:Boolean:= false; begin if reset = 1 then

process variable false; begin if reset = 1 then state:Boolean:=

state := false; elsif clock = '1' then

state := false; elsif clock = '1' then

state := not state; end if; after 10 ns;

state := not state; end if; after 10 ns;

s <= state

s <= state

wait on reset, clock; end end process; process;

Nem kvnt memria hatsnak kikszblse


A process() alkalmazsa esetn bizonyos rejtett hiba addhat a nem megfelel rzkenysgi lista belltsbl, azaz n. nem kvnt memria (unintended memory) jhet ltre akr egy kombincis logikai hlzatban is. Ez nem a VHDL nyelv, hanem sokkal inkbb a tervezs sorn hasznlt szintzis eszkz (esetnkben Xilinx XST) mkdsbl addik. A VHDL szabvny szerint egy jel-vezetk (signal) mindaddig megtartja korbbi rtkt, ameddig nem rendelnk hozz egy j rtket, pldul process()-ben lv if-else szekvencilis utasts segtsgvel. A Xilinx szintzis folyamat sorn gy egy bels llapot alakulhat ki (zrt visszacsatol hurokban), amely nem kvnt memria elemet hoz ltre (hasonlan egy direkt mdon definilt trolhoz, pl: D-flipflop-hoz, vagy latches). Azrt, hogy ezt kikszbljk, a process()-en belli helytelen jelhozzrendelsekbl add nem kvnt memria elem szintzisnl az I.) vagy II.) mdszert kell kvetni. Az I.) mdszer esetn a kvetkez szksges feltteleket kell biztostani: a.) Szenzitv listba minden szksges jelet soroljunk fel, b.) Egy if-else szerkezetnek mindig adjuk meg az else gt is, c.) A process()-en belli minden if-else gban, s mindenegyes jelhez rendeljnk hozz j rtket. Amennyiben a hrom a.)-c.) szksges felttelek egyszerre teljeslnek, gy egyben az elgsges felttel is teljesl, ezltal elkerhetk a nem szndkosan tervezett trolelemek XST szintzisnek problmi, akr kombincis hlzatok VHDL lersa esetn is.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

118

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

A kvetkez kdrszlet egy hibs megadsra mutat pldt:


process (a_in) - hiba: szenzitv listbl hinyz b_in jel megadsa begin if ( a_in > b_in ) then nagyobb_mint <= 1; - hiba az egyenlo-hez nincs ebben az gban hozzrendelve --j rtk elsif ( a_in = b_in ) then egyenlo <= 1; -- hiba az nagyobb_mint-hez nincs ebben az --gban hozzrendelve j rtk --hiba, az else g is hinyzik end if ; end process;

Br a fenti szintaxis helyes (a VHDL nyelvi szintaxis ellenrzsnek is megfelel), azonban megsrti a korbban felsorolt hrom szksges felttelt (I.): mivel pl. a nagyobb_mint megrzi korbbi rtkt, amikor a > b kifejezs hamis, s ezltal a VHDL nyelv egy szintvezrelt regiszter (latch) trolt fog szintetizlni (=infer). A fenti VHDL forrskd helyes megadsi mdja a hrom szablyt a.) c.) is figyelembe vve a kvetkez lenne:
process (a_in,b_in) begin if ( a > b ) then nagyobb_mint <= 1; egyenlo <= 0; elsif ( a = b ) then nagyobb_mint <= 0; egyenlo <= 1; else nagyobb_mint <= 0; egyenlo <= 0; end if ; end process;

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.3. VHDL KONKURENS S SZEKVENCILIS HOZZRENDELSI UTASTSOK

119

II.) mdszer szerint a fenti lerssal ekvivalens mdon lehet a kvetkez kdrszlet is, amelyben a jelek alaprtelmezett (default) rtkeit a process()-en bell, de az if-else gakon kvl definiljuk, megelzve a nem kvnt memria elem kialakulst szintzis sorn.
process (a_in,b_in) begin --alaprtelmezett (default) rtkek nagyobb_mint <= 0; egyenlo <= 0;

if ( a > b ) then nagyobb_mint <= 1; elsif ( a = b ) then egyenlo <= 1; end if ; end process;

A fenti kdrszlet azrt is lehet helyes, mivel kezdetben a kt jelnek 0 kezdrtk van definilva, amelyeknl ksbb a soros vgrehajts esetn elfordulhat, hogy nem rendelnnk hozzjuk j rtket (I. mdszerben az else gat elgti ki), illetve az rtkadshoz kpest az egyes if-else gakban szerepl jelek fellrdhatnak j rtkekkel.

Case utasts
Az Case (eset) szintn hagyomnyos szekvencilis feltteles utasts, amelynek egyszerstett szintaxisa a kvetkez:
case kifejezes is when valasztas_1 => szekvencialis_utasitasok; when valasztas_2 => szekvencialis_utasitasok; ... when others => szekvencialis_utasitasok; end case;

A Case utastsban a kifejezes hasznalhat arra, hogy a megfelel szekvencilis utastsok gt hajtsuk vgre, a valasztas_i rtktl fggen. A valasztas_i lehetsgek egymsra nzve klcsnsen kizrtak, azaz csak egyszer sorolhatak fel, msrszt pedig az sszes lehetsges hasznlni kvnt esetet fel kell sorolni. Az others kulcsszval az sszes nem hasznlt eset lefedhet.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

120

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Korbbi with-select egyidej kivlaszt hozzrendelsi pldnknl maradva, amelyet gy adtunk meg:
with szelektor select rout <= a - b c + 1 when "00",

when "10", when others;

a + b + c

amelyet a mostani hagyomnyos case szekvencilis hozzrendelsi utastst alkalmazva a kvetkez mdon rhatunk fel:
process (szelektor, a, b, c) begin case szelektor is when "00" => rout <= c + 1; when "10" => rout <= a - b; when others => rout <= a + b + c; end case ; end; -- bemeneti jelekre rzkeny folyamat

Megjegyzs: A fenti kdrszlet az egyidej kivlaszt jelhozzrendelshez hasonl multiplexer hlzatot fog kialaktani a szintzis sorn.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.3. VHDL KONKURENS S SZEKVENCILIS HOZZRENDELSI UTASTSOK

121

Feladat 7
Tekintsk az egyidej feltteles hozzrendelsnl korbban megismert 4-bites prioritsos kdol ramkrt (Feladat 1), azonban most ennek az ramkrnek, az case szerkezettel kifejezett szekvencilis jelhozzrendel utastsokbl ll VHDL lerst adjuk meg. Az entits neve legyen: priencoder_4_case. Mint ismeretes az case szerkezetet a VHDL lers folyamatnak beginend kztti trzsbe lehet begyazni.
-- Feladat 7. prioritsos kdol ramkr case szekvencilis -- hozzrendelssel megadva library IEEE; use IEEE.STD_LOGIC_1164.ALL;

entity priencoder_4_case is port ( req : in STD_LOGIC_VECTOR (3 downto 0); STD_LOGIC_VECTOR (2 downto 0));

pcode_out : out

end priencoder_4_case;

architecture behav of priencoder_4_case is begin case_process: process(req) -- bemeneti req jelre rzkeny folyamat begin case req is when "1000"|"1001"|"1010"|"1011"| "1100"|"1101"|"1110"|"1111" => pcode_out <= "100"; when "0100"|"0101"|"0110"|"0111" => pcode_out <= "011"; when "0010"|"0011" => pcode_out <= "010"; when "0001" => pcode_out <= "001"; when others => pcode_out <= "000"; end case; end process; end behav;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

122

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Feladat 8
Hasonl mdon, tekintsk az egyidej feltteles hozzrendelsnl korbban megismert 24 binris dekdol ramkrt (Feladat 2). Ennek az ramkrnek, most az szekvencilis case feltteles hozzrendel utastsokbl sszelltott viselkedsi lerst adjuk meg VHDL nyelven. Az entits neve legyen: decoder_2_4_case.
-- Feladat 8. 2->4 dekdol ramkr case feltteles szekvencilis -- hozzrendelssel megadva library IEEE; use IEEE.STD_LOGIC_1164.ALL;

entity decoder_2_4_case is port( a_in: in std_logic_vector(1 downto 0); en_in: in std_logic; decode_out: out std_logic_vector(3 downto 0) ); end decoder_2_4_case;

architecture behav of decoder_2_4_case is begin sel <= en_in & a_in; process(sel) begin case sel is when "000"|"001"|"010"|"011" => decode_out <= "0001"; when "100" => decode_out <= "0001"; when "101" => decode_out <= "0010"; when "110" => decode_out <= "0100"; when others => decode_out <= "1000"; end case; end process; end behav;

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.3. VHDL KONKURENS S SZEKVENCILIS HOZZRENDELSI UTASTSOK

123

Feladat 9
Vizsgljuk meg a szekvencilis s az egyidej hozzrendelsi utastsok kztti kapcsolatot egy maximum-kivlasztsi pldn keresztl, ahol az a_in, b_in s c_in bemeneteket rendezzk s a legnagyobbat maximum nven a kimenetekre helyezzk. Relcis opertorokat (>) hasznlva egyidej hozzrendels sorn a kvetkez lehetsges VHDL kdrszletet adhatjuk meg:
maximum <= a_in when ((a_in > b_in) and (a_in > c_in)) else

c_in when (a_in > b_in) else b_in when (b_in > c_in) else c_in;

A fenti kd nem tartalmaz egymsba gyazott VHDL nyelvi konstrukcikat, s kevsb jl rja le a kivlasztst. Ugyanezt a maximum-kivlasztst, amennyiben fel kvnjuk rni a megismert szekvencilis if-else szerkezettel (egy folyamaton bell) akkor a kvetkez szemlletesebb, de hosszabb lerst kapjuk:
If_process: process (a_in , b_in, c_in) begin if a_in > b_in then if a_in > c_in then

maximum <= a_in; else maximum <= c_in; end if; else if b_in > c_in then maximum <= b_in; else maximum <= c_in; end if; end if; end;

Tovbbi gyakorl feladatok


1.) A VHDL nyelven lert fenti 8.)-9.) Feladatokhoz hozzon ltre egy-egy tesztpadot. gyazza be a tesztpadba a megfelel pldnyostott entitsokat, majd adjon rjuk gerjesztst, s vizsglja a kimenetek vltozsait a Xilinx ISim szimultor segtsgvel. A szimulcival kapcsolatban bvebb lerst a 2.4. fejezetben tallhat. 2.) A 2.4. fejezetben ismertetett 112.) tervezsi lpseket felhasznlva s a korbbi Feladat-1 pldt tgondolva tervezzen meg VHDL nyelven olyan ramkr(ke)t, amely
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

124

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

az 4-bites egyenlsg sszehasonltsn kvl az egyenltlensgeket (A kisebb, mint B; illetve A nagyobb, mint B) is kpes jelezni. A 3-kimenet logikai hlzat (comparator_4_bit.vhd) tervezse sorn hasznlja fel az egyenlsg, egyenltlensgek relcis opertorait, s mkdst definilja a kvetkez esetekre: egyidej hozzrendel utastsok (when-else, with-select), illetve szekvencilis hozzrendel utastsok (if-else, case). a.) Tervezzen egy tesztpadot, comparator_4_bit_tb.vhd nven. Szimullja le a viselkedst a Xilinx ISim segtsgvel. b.) Az FPGA-s eszkzn az elkszlt terv verifikcijhoz hasznljon programozhat kapcsolkat, ahol sw(3:0)=a_in(3:0), illetve sw(7:4)=b_in(3:0), mg a kimeneti jelek vizsglathoz a LED-eket, Led(2:0) = (gt_out:lt_out:eq_out) a hrom klnbz sszehasonlts eredmnyhez rendelve. c.) Szintetizlja, implementlja, majd pedig generlja le a konfigurcis bitfjl, vgl pedig programozza fel a kivlasztott FPGA-ra. A letltshez hasznlja a Digilent Adept Suite nev programjt. Ellenrizze a szintetizlt terv helyes mkdst a krtyn.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.4. XILINKX ISE KRNYEZET S AZ ISIM SZIMULTOR HASZNLATA

125

2.4.Xilinx ISE krnyezet s az ISim szimultor hasznlata


A fejezetben a Xilinx ISE WebPack 12.2 Project Navigator (tovbbiakban ISE) [XILINX] integrlt fejleszt krnyezet bemutatst s hasznlatt egy pldn keresztl szemlltetjk. Tekintsk a korbbi 4-bites sszehasonlt ramkr felptst (Feladat 1, 2.2. fejezet), amelynek VHDL forrskdjait az ISE krnyezetben fejlesztjk, szintetizljuk s implementljuk egy kivlasztott Xilinx Spartan-3E FPGA ramkrre, majd pedig itt generljuk a futtatat trgykd konfigurcis bitfjlt is. A tervezs sorn a Xilinx ISim beptett integrlt szimultort hasznljuk az elkszlt, s lefordtott VHDL forrsaink mkdsnek iddiagramokon keresztli vizsglatra. Megjegyeznnk, hogy alternatv szimultorknt hasznlhatnnk a szintn ingyenesen elrhet ModelSim PE Student Edition vltozatot is, amely mgtbb lehetsget s belltst biztost a szimulcis vizsglatok sorn. [MODELSIM]. (Korbban ezt Xilinx ModelSim Starter XE-III nven adtk ki.)

2.4.1. Xilinx fejleszt krnyezet, mint hasznlt keretrendszer rvid bemutatsa


A Xilinx ISE Project Navigator egy olyan integrlt fejleszt krnyezet, amely egy keretrendszerknt integrlja a fejleszts egyes fzisait segt programrszeket (parancsokat), vagy bels ISE modulokat (amelyek Tools menbl rhetek el, vagy a fels ikonsoron keresztl). Ezek a Xilinx modulok a kvetkezk: CoreGenerator Xilinx IP magok paramterezse s generlsa a terveinkhez. Xilinx logikai cellkat, makrcellkat (primitveket) is hasznl, amelyek FPGA csald specifikusak is lehetnek. PlanAhead Tervezs menedzselse, I/O portok egyttes kezelse egytt (alapvet verzi-kvetsi s modulris tervezsi funkcikkal). Shematic Editor Kapcsolsi-rajz szerkeszt. Timing Analyzer Idztsi analiztor modul. XPower Analyzer Teljestmny analiztor modul. Constraint Editor Knyszerfelttelek megadsra szolgl modul (grafikus nzetet biztost a lbak bektsre, amely ersen FPGA specifikus). FPGA Editor FPGA fizikai szint logikai s makr cellinak esetleges elhelyezsre s sszektsre. Impact Bitfolyam letlt (programoz) modul, stb. (Jelen jegyzetben nem ezt fogjuk hasznlni, mivel specilis JTAG-USB programoz kell hozz. Helyette a Digilent Adept Suite programjt hasznljuk a bitfjlok letltsre roll-on USB kbelen kereszl! [DIGILENT]). Az ISE keretrendszerhez, tovbbi kls (kln megvsrolhat, s telepthet) modulknt a kvetkez programrszek kapcsoldhatnak, amelyet a fejlesztsek sorn hasznlhatunk:

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

126

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

XPS Xilinx Platform Studio: Integrlt keretrendszer begyazott rendszerek fejlesztsre, amely intgrlja a kvetkez HW-SW modulris fejleszt krnyezeteket (br ezeket a legjabb verzikban kln-kln is lehet telepteni s hasznlni). o EDK (Embedded Development Kit) Begyazott (hardver) rendszerfejleszt krnyezet [XILINX_EDK] o SDK (Software Development Kit) Begyazott (szoftver) alkalmazs fejleszt krnyezet, amely Eclipse alap ChipScope Logikai analiztor, az FPGA mkdse kzbeni bels jelek vizsglatra (debug funkcik) System Generator for DSP: MatLab Simulink programba pl Xilinx DSP feldolgozst tmogat eszkzk gyjtemnye (specilis jelfeldolgoz, s video feldolgoz blokkokkal kiegsztve) A Xilinx ISE krnyezetben tallhat mind a bels, mind pedig a kls modulok ltalban fejlett GUI tmogatssal rendelkeznek, amelyek sok esetben lpsrl-lpsre haladva, mintegy varzsl-szeren segtik, gyorstjk a tervezs menett. A GUI alap tervezs mellett, termszetesen s ltalban a professzionlisabb, gyorsabb alkalmazst ez jelenti parancssoros mdon (scriptek segtsgvel) is fejleszthetnk. Az Xilinx ISE (12.2) elindtsa utn a kvetkez fablak jelenik meg (2.8. bra):
Terv forrsainak hierarchikus ablaka Folyamat ablak (tervezs lpsei) Munkaterlet (forrskd szerk.) Transzkript (zenet) ablak

2.8. bra: Xilinx ISE Project Navigtor fontosabb ablakai


www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.4. XILINKX ISE KRNYEZET S AZ ISIM SZIMULTOR HASZNLATA

127

Forrs ablak (Source window): hierarchikusan jelenti meg a projektben ltrehozott, vagy hozzadott forrsfjlokat Folyamat ablak (Process window): az aktulisan kivlasztott forrs fjl(ok) tervezsi lpseit, fordts folyamatait jelenti meg zenet ablak (Transcript window): a fordtsi lpsek zeneteit, sttuszt, figyelmeztetseit s hibit jelenti meg (kivve a fordtsi riportokat) Munkaterlet (Workplace): egyszerre tbb forrs fjl (akr keverten HDL, sma, vagy llapot diagram) is meg lehet nyitva, amelyeket aktulisan szerkesztnk. A fordtsi lpsek vgn a klnbz sszefoglal riportok is ebben jelennek meg .html formban.

2.4.2. Feladat megvalstsa Xilinx ISE segtsgvel


Fontos megjegyzsek, amiket a tervezs sorn mindenkppen rdemes figyelembe venni: Figyeljnk arra, hogy az elrsi t NE tartalmazzon kezetet s white-space karaktereket! A projekt neve, s a VHDL forrs neve NE kezddjn szmmal, br ugyan a nvben llhat szm az elstl klnbz pozciban. Lehetsg szerint a projekt neve s a forrs(ok) neve legyen eltr, valamint nvnek NE vlasszunk foglalt VHDL azonostt az esetleges ksbbi hibazenetekben szerepl knnyebb azonosts vgett. Az entitsok neveit tekintve a knnyebb rtelmezhetsg s kvethetsg vgett rdemes lehet konvencikat fellltani s kvetni: jegyzetnkben ezrt a _top jelenti a legfelsbb hierarchia szinten definilt entitst, mg a _tb vgzds a test-bench rvidtst.

Projekt ltrehozsa, HDL lersok megadsa (rszletes):


1. Hozzunk ltre egy j projektet a Xilinx ISE Project Navigtorban (File New Project, vagy az ikonsoron New Project ikon). Vlasszuk ki s adjuk meg a projekt knyvtr helyt s nevt (gyelve arra, hogy szmmal nem kezddhet): <meghajt>:\fpga\, illetve neve feladat_01 (lsd korbbi plda). Top-level source type, azaz a legfelsbb szint architektra forrsnak tpusa legyen HDL, mivel kezdetben a hagyomnyos VHDL ler nyelvet kvnjuk hasznlni a tervezs legfelsbb szintjn (design entry). Itt lehet akr blokkdiagram szint (schematic), generlt EDIF (szabvnyos elektronikai tervezsi formtum) szint, vagy a mr korbbi kztes Xilinx fordtsi lpsknt kapott NGC/NGO szint terveket is belltani. 2. Kvetkez Set Device Properties ablakban a legrdl listkbl vlasszuk ki a kategrit, FPGA csaldot, eszkz tpust, tokozst s sebessgi fokt: rendre All, Spartan3E, XCS1200E, FG320, s -4. Ezek az alkalmazott FPGA-s eszkz tpusnak pontos paramtereit definiljk, a Digilent Nexys-2 krtya adatlapjban (Reference Manual [NEXYS2]) pontosan meg vannak adva, illetve a legtbb paramter az FPGA-s chip tokozsn is leolvashat.
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

128

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

3. A szintzis eszkz legyen az alaprtelmezett XST Xilinx Synthesis Tool, a szimultor a Xilinx ISim, preferlt nyelv a VHDL, mg a szabvny a VHDL-93 a nyelvi konstrukcik tmogatshoz. 4. Tervsszest ablakban (Design Summary) az 1-2 lpsben belltott paramterek kerlnek listzsra, utlagos ellenrzsknt. Befejezs. 5. Project New Source, vagy baloldali eszkztron New Source ikon segtsgvel adjunk hozz a projekthez egy j VHDL modult egyenloseg_1_bit (vhd) nven. A Define Modul ablakban a portlistt hagyjuk resen, mivel ezeket a forrskdban kvnjuk megadni. Ezutn a forrskd szerkeszt ablakba a korbbi plda forrskdjt (Feladat_1/b, amely az entitshoz rendelt kt klnbz architektra lerst is tartalmazta) rjuk be, vagy msoljuk be. Termszetesen itt a tervhez mr meglv HDL fjl(ok) forrskdjai , illetve msolataik is hozzadhatk kls fjl(ok)bl. Jelen esetben a top-level (ksbbiekben tbbszr hasznljuk ezt a kifejezst is), azaz a legfelsbb hierarchia szinten lv modul az egyenloseg_1_bit.vhd lesz. 6. A VHDL forrs szerkesztse utn, a forrsok ablakban az egyenloseg_1_bit.vhd -t kijellve a Check Syntax segtsgvel lehet a nyelvi szintaxis ellenrzst elvgezni (ezt a ksbbiekben ms szerkesztett, vagy hozzadott forrsra is rdemes elvgezni). Amennyiben a Check Syntax opci rejtett, a folyamat ablakban, [+] XST Synthesize mellett kattintva megjelenthet a tnyleges hierarchia. A szintaxis ellenrzs sorn a transcript ablak fogja az ellenrzs eredmnyt mutatni (riportolni az esetleges hibkat, s figyelmeztetseket stb.). Hiba esetn azonnal lell a futtats, mg figyelmeztets esetn tovbblphetnk a fordts kvetkez lpsre. Mindaddig, amg hiba van valahol a forrsllomnyban, el kell vgezni a korrekcit, majd pedig jbl a Szintaxis ellenrzst (a warning megengedhet, feltve, hogy a ksbbi fordtsi lps sorn nem pont az okozza a hibt). Ha a szintaxis ellenrzs sorn minden rendben volt egy jelenik meg. a. Prbakppen lltsunk be egy direkt hibt a forrsllomnyban: a begin s end kztti rszen az EQ kifejezst rjuk t A-ra. Ekkor ugyan a nyelvi szintaxis helyes lenne, azonban szintetizls sorn mgis hibt kapunk, mivel az A bemeneti irnyultsg (md) objektumhoz rendeltk a jobboldali logikai kifejezst, holott a hozzrendels bal oldaln csak OUT irnyultsg objektum llhatna, teht a portok irnyultsga ellenttes (Hiba: Object A of mode IN can not be updated). A ksbbi 7.) pontban ismertetend tesztpad ltrehozshoz majd pedig tesztelshez elsknt a kvetkez 2.4.3., illetve 2.4.4. pontokban lert lpseket kell elvgezni.

2.4.3. Strukturlis modell szerinti ramkr felptse pldnyostssal


A mai digitlis rendszereket legtbbszr kisebb alrendszerekbl, logikai rszhlzatokbl kell sszelltani, amely lehetv teszi, hogy a komplex rendszereket egyszerbb egyedi-, vagy elre-defnilt komponensekbl, modulokbl ptsk fel (modulris tervezs bottom-up metdika szerint). A VHDL nyelv a strukturlis lersok megadst a komponensek beillesztsvel, n. pldnyostsval biztostja.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.4. XILINKX ISE KRNYEZET S AZ ISIM SZIMULTOR HASZNLATA

129

Feladat 1:
Tekintsk a korbbi pldnkat (2.2.2. fejezet, Feladat 1/a. 1/b. alapjn) melyben 1-bites egyenlsg kompartor ramkrt terveztnk. Ezeknek, mint alacsonyabb hierarchia szinten lv komponensnek a felhasznlsval ptsnk fel egy 4-bites egyenlsg sszehasonlt ramkrt. A 4-bites egyenlsg kompartor felptse a 2.9. brn lthat:
a_in(0) A b_in(0) B a_in(1) A b_in(1) B a_in(2) A b_in(2) B a_in(3) A b_in(3) B egyenloseg_1_bit (kapu_xnor) EQ eq3 egyenloseg_bit3 egyenloseg_1_bit EQ (kapu_xnor) eq2 egyenloseg_bit2 eq_out egyenloseg_1_bitEQ (kapu_szintu) eq1 egyenloseg_bit1 egyenloseg_1_bit EQ (kapu_szintu) eq0 egyenloseg_bit0

2.9. bra: A 4-bites egyenlsg kompartor (egyenloseg_4bit_top) blokkszint felptse A fenti 2.9. brnak megfelelen legyen egyenloseg_4_bit_top a neve legmagasabb szint entitsnak (top-level), amelyben ngyszer van pldnyostva az egyenlsg_1_bit entits, valamint definilva vannak a kzttk hzd bels sszekttetsek is.
-- Feladat 02 entity egyenloseg_4_bit_top is port( a_in, b_in: in std_logic_vector(3 downto 0); eq_out: out std_logic ); end egyenloseg_4_bit_top; architecture arch of egyenloseg_4_bit_top is -- komponens deklarcik VHDL 93 szabvnyban nem szksgesek, -- de rdemes megadni ket a VHDL-87-el val kompatibilits miatt

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

130 component kapu_szintu port( A, B: in std_logic; EQ: out std_logic ); end component; component kapu_xnor port( A, B: in std_logic; EQ: out std_logic ); end component; -- bels jel deklarcik

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

-- bitenkenti egyenloseg vizsgalatok kimenetei signal eq0, eq1, eq2, eq3 : std_logic; begin -- pldnyostsok architektra #1-4 egyenloseg_bit0: entity work.egyenloseg_1_bit(kapu_szintu) port map(A=>a_in(0), B=>b_in(0), EQ=>eq0); egyenloseg_bit1: entity work.egyenloseg_1_bit(kapu_szintu) port map(A=>a_in(1), B=>b_in(1), EQ=>eq1); egyenloseg_bit2: entity work.egyenloseg_1_bit(kapu_xnor) port map(A=>a_in(2), B=>b_in(2), EQ=>eq2); egyenloseg_bit3: entity work.egyenloseg_1_bit(kapu_xnor) port map(A=>a_in(3), B=>b_in(3), EQ=>eq3); --pldnyostott entitsok egyedi kimeneteinek S kapcsolata: eredmeny eq_out <= eq0 and eq1 and eq2 and eq3; end arch;

A pldnyostsnak kt lpse van: els lps a komponens specifikci, azaz hogy milyen entitst, milyen architektra lerssal s milyen (munka work) knyvtrbl szeretnnk pldnyostani. A munkaknyvtrban a lefordtott entitsok s a hozzjuk tartoz architektrk vannak eltrolva. A msodik a lps a port hozzrendels (port map), amely az aktulis, azaz a top entitsban lv portokhoz hozzrendeli a formlis jeleket, azaz a pldnyostott komponensek (entitsok) jeleit. A fenti plda sorn a pldnyostsnl a szabvnyos VHDL93 formtumot hasznltuk [VHDL93]. A pldnkban (Feladat 1.) az egyenloseg_bit0, illetve egyenloseg_bit1 nven definilt pldnyokhoz az egyenloseg_1_bit nev entits kapu_szintu architektra lersa, mg az egyenloseg_bit2, s az egyenloseg_bit3 entitsokhoz a kapu_xnor architektrk lettek hozzrendelve. Az entits pldnyok neveinek egyedieknek
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.4. XILINKX ISE KRNYEZET S AZ ISIM SZIMULTOR HASZNLATA

131

kell lennik. A mostani pldnl a work a munka knyvtr nevre utal, ha msknt nem lltottuk be ez az alaprtelmezett (amely a projektnk alatt tallhat). A munka knyvtr neve s elrhetsge termszetesen a knyvtr alap tervezsnek ksznheten vltozhat: konkrt entits s architektra munkaknyvtrnak nevre s elrsi tjra . al elvlasztva hivatkozhatunk. A zrjelben megadott architektra nv (kapu_szintu, ill. kapu_xnor) opcionlis: ha nem adjuk meg akkor az utoljra lefordtott architektra kerl pldnyostsra. A fenti plda egyben azt is szemllteti, hogy a blokk diagram (schematic) s a VHDL szint nyelvi lersok kztt szoros kapcsolat van. A mai integrlt fejleszt krnyezetek (mint pl. Xilinx ISE, Altera Quartus stb.) minden esetben tartalmaznak kapcsolsi-rajz szerkeszt programrszt is (schematic editor [XILINK_SCHEMATIC]), amelyben grafikus felleten keresztl lehet sszelltani a terveket. Ezekbl a kapcsolsi rajzokbl ezutn HDL struktrkat, lersokat lehet generltatni, s integrlni, pldnyostani, majd pedig szintetizlni az ramkrket a kivlasztott FPGA-ra.

2.4.4. Tervek tesztelshez tesztpad (test-bench) sszelltsa


Manapsg sok nagynev gyrt knl szimultor programokat az elektronikus tervek automatizlt ellenrzsnek biztostshoz, de szmos ingyenes szoftver is elrhet ezen az alkalmazsi terleten. A jegyzet ksztse sorn a Xilinx beptett ISim szimultort hasznljuk, amely az ISE teleptsvel vlik elrhetv. Esetnkben inkbb a gyors kezelhetsgen, s egyszersgen, mintsem a professzionlis felhasznlson s teljeskr paramterezhetsgen volt a hangsly. Az utbbiakra szmos szimultor programot tallhatunk: az egyik legnagyobb nv a Mentor Graphics ModelSim szimultora, amelyet professzionlis ipari krnyezetekben hasznlnak (ennek ltezik tbbfle ingyenes oktati-tanuli vltozata is rgebbi ISE verzikhoz ModelSim XE-III Starter nven [XILINX], amely a Xilinx ISE 12.3-as vltozatig egyttmkdve regisztrci utn ingyenesen licenszelhet. Az j ModelSim Student PE vltozat mr a ModelSim oldalrl rhet csak el [MODELSIM]).
egyenloseg_4_bit_top_tb (tesztpad) a_in(3 : 0) Tesztvektorok (stimulus) b_in(3 : 0) a_in(3 : 0) egyenloseg_4_bit_top eq_out (arch) b_in(3 : 0) Monitor (jelalak)

eq_out

2.10. bra: a 4-bites egyenlsg sszehasonlt ramkr testpadjnak felptse: stimulus, legfelsbb szint terv s a jelalak monitoroz sszekapcsolsa A HDL lersokbl sszelltott tervek megfelel mkdst akr a tervezs minden egyes hierarchia szintjn szksges ellenrizni, s szimullni. Vizsglatok kimutattk, hogy a legtbb tervezsi feladatban komplexitstl fggen nem az egyes entitsok HDL lersa (20-30%), hanem sokkal inkbb azok megfelel tesztelse, egy j tesztpad/tesztgy sszelltsa (~70-80%) jelenti a legnehezebb s egyben legidignyesebb feladatot, amely a kvnt
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

132

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

kimenet szempontjbl egytaln nem tekinthet kzmbsnek. A mdszer sorn a vizsgland entitst, vagy a top-modul szintjig pldnyostott entitsok csoportjt egy n. tesztgyba (testbench) helyezzk el, amelyhez tesztvektorokat, mint gerjesztseket (stimulus) adhatunk, hogy szimulljuk a mkdst. A szimulci sorn a kimeneti jeleket monitorozzuk, amelyben grafikusan (ltalban hullmforma alapjn) vagy akr szvegesen (lista) brzolva vizsglhatjuk meg az entitsok viselkedst az egyes jeleik vltozst, illetve belltst az esetleges hibk feldertse vgett. A korbbi pldnknl 4-bites egyenlsg kompartor maradva mutatjuk be egy tesztpad sszelltst, s mkdst, valamint a Xilinx ISim szimultor program hasznlatnak bevezetst. A 2.10. bra szerinti tesztpad (test-bench) VHDL lersa a kvetkez kdrszlet szerint adott:
-- Feladat 02 - testbench library ieee; use ieee.std_logic_1164.all; entity egyenloseg_4_bit_top_tb is end egyenloseg_4_bit_top_tb;

architecture tb_arch of egyenloseg_4_bit_top_tb is signal test_in0, test_in1: std_logic_vector(3 downto 0); signal test_out: std_logic; begin -- a top-level entits pldnyostsa uut nven uut: entity work.egyenloseg_4_bit_top(arch) port map(a_in=>test_in0, b_in=>test_in1, eq_out =>test_out); -- testvektorok generlsa -- Stimulus process stim_proc : process begin -- test vektor 1 test_in0 <= "0000"; test_in1 <= "0000"; wait for 100 ns; -- test vektor 2 test_in0 <= "0000"; test_in1 <= "0001"; wait for 100 ns; -- test vector 3 test_in0 <= "0000"; test_in1 <= "0010"; www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.4. XILINKX ISE KRNYEZET S AZ ISIM SZIMULTOR HASZNLATA

133

wait for 100 ns; -- test vector 4 test_in0 <= "0000"; test_in1 <= "0011"; wait for 100 ns; -- -- test vector 254 test_in0 <= "1100"; test_in1 <= "1111"; wait for 100 ns; -- test vector 255 test_in0 <= "1110"; test_in1 <= "1111"; wait for 100 ns; -- test vector 256 test_in0 <= "1111"; test_in1 <= "1111"; wait for 100 ns;

-- tesztvektor generls vge

assert false report "Szimulacio befejezodott" severity failure;

end process; end tb_arch;

A fenti VHDL kdban a legfelsbb hierarchia szinten lv 4-bites sszehasonlt ramkr van pldnyostva uut (unit under test) nven. A lers tartalmaz egy process()-t, vagy ms nven folyamatot is, amelyben szerepl utastsok a hagyomnyos magas-szint nyelvekhez hasonlan egyms utn, azaz szekvencilisan hajtdnak vgre (lsd ksbbi fejezet). Minden tesztesethez egyedi tesztvektorokat kell definilni, amelyekhez egy-egy 100 ns-os szimulcis ksleltets tartozik (wait for 100 ns hozzrendels). Ez az utasts azt adja meg, hogy az eltte lv hozzrendelsek szerint mennyi ideig kell a tesztvektorok aktulis rtkit tartani, miutn j rtket kaphatnak. Megjegyzs: Ha a fenti HDL lersban a 4-bites egyenlsg sszehasonlt ramkr helyes mkdsnek vizsglathoz az ssze lehetsges tesztvektor varicit meg kvnjuk adni, akkor a lehetsges 256 tesztesetet fel kellene sorolni, amely nagyban megnveli a tesztpad
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

134

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

forrskdjnak mrett, kezelhetsgt s rtelmezst. A ksbbiek sorn az ilyen tesztesetekre egy jobb megoldst biztost, ha n-bites szmllkat (counter) hasznlunk a tesztvektorok generlshoz (pl. 1 db 4-bites felfel szmllt test_in0-ra, illetve 1 db 4-bites lefel szmllt test_in1-re), azrt, hogy az sszes lehetsges tesztvektort ellltsuk.

Az ISE implementcis s modellez feladat tovbbi lpsei (folytats)


7. Ezutn az 5. lpshez hasonl mdon szerkesszk meg, vagy adjunk hozz a projekthez egy j VHDL forrst (egyenloseg_4_bit_top lerst) amit a 2.4.2.-ben ismertettnk (a 2.10. brn lthat). Ebben az esetben az ISE forrs ablaka a kvetkez hierarchia szinteket fogja brzolni:

gy. az egyenloseg_4_bit_top.vhd kerlt a legmagasabb hierarchiaszintre (top modul ), amelyben az egyenloseg_1_bit.vhd van pldnyostva kt architektra lerssal: kapu_szintu, illetve kapu_xnor. Ezutn ismteljk meg a 6. lpsben ismertetett szintaxis ellenrzst a top modulra.

Tesztpad (test-bench) ltrehozsa:


8. A kvetkez lpsben hozzuk ltre a tesztpadot (test bench), amelynek HDL lerst a 2.5.4. sorn ismertettk. Project New Source, vagy baloldali eszkztron New Source ikon segtsgvel adjunk hozz a projekthez egy j VHDL Test-Bench-et, melynek neve legyen: egyenloseg_4_bit_top_tb. A kvetkez ablak rkrdez arra, hogy melyik entitshoz kvnjuk rendelni a tesztpadot: itt vlasszuk ki a legfelsbb hierarchia szinten lv egyenloseg_4_bit_top entitst, hiszen ennek a tesztjt szeretnnk elvgezni. Majd a megjelen tervsszest ablakon nyomjunk Finish gombot. Ekkor az Xilinx ISE a top-entits alapjn legenerl egy tesztpad-ot, amelyben a kvetkez VHDL kdrszletnek megfelelen:
-- No clocks detected in port list. Replace <clock> below with -- appropriate port name constant <clock>_period : time := 10 ns; . . .

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.4. XILINKX ISE KRNYEZET S AZ ISIM SZIMULTOR HASZNLATA

135

-- Clock process definitions <clock>_process :process begin <clock> <= '0'; wait for <clock>_period/2; <clock> <= '1'; wait for <clock>_period/2; end process; . . . wait for <clock>_period*10;

9. Mivel rajel peridust, mint egy fizikai tpussal deklarlt mennyisget egyelre nem kvnunk hasznlni, s a tesztpad generlsakor az ISE a top-entitsban sem tallt rajelet, ezrt ezeket a <clock>_period tartalmaz sorokat nyugodtan kommentezzk ki, pontosabban a generlt tesztpad forrskdjt cserljk ki a Feladat 1 (2.4.3. fejezet) szerint megadott HDL lerssal (egyenloseg_4_bit_top_tb). Ezutn mentsk el a tesztpad llomnyt (File Save) s ellenrizzk a nyelvi szintaxist (Process ablak [+] Synthesize XST Check Synthax)

2.4.5. Viselkedsi RTL szimulci Xilinx ISim segtsgvel


10. a.) Vizsgljuk meg a 4-bites egyenlsg sszehasonlt ramkr mkdst a Xilinx ISE integrlt szimultornak segtsgvel (ehhez termszetesen hasznlhattuk volna akr a professzionlis Mentor ModelSim [MODELSIM] szimultor XE-III verzij ingyenes vltozatt is, valamint ms kls gyrtk ingyenes, vagy fizets termkeit). A VHDL entitsok RTL szint szimulcijnak vgrehajtshoz vlasszuk ki a Design ablak View nzetben az Implementation (terv megvalsts) helyett most a Simulation (szimulcit) opcit. Ekkor a megjelen ISim ikon szimbolizlja az ISE beptett, integrlt ISim szimultornak kivlasztst. A tesztelni kvnt entits legyen: egyenloseg_4_bit_top):

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

136

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

b.) Ezutn a szimultorhoz kapcsold Process ablakban vlasszuk ki az ISim szimultort. Ha szksges, a Behavioral Check Syntax-menponttal indtsuk el a tesztgy forrskdjnak nyelvi ellenrzst is. A Simulate Behavioral Model indtja el vgl az ISim szimultort.

c.) A Xilinx ISim elindtsa utn a hullmforma jelalakokat brzol grafikus ablak fogad bennnket (test_in0, illetve test_in1 4-4 bites tesztvektorok, troljk az sszehasonlt ramkr 4-bites operandusainak tesztrtk-kombinciit, mg a test_out a kimenet):

2.11. bra: Xilinx ISim szimultor hasznlata az elkszlt VHDL tesztpad lersnak viselkedsi RTL szimulcijra (bekeretezve az azonos logikai bemenetekre adott vlaszok) Szimulci kirtkelse: ahogy elvrtuk, ha a 4-bites test_in0 rtke, binris bitmintzata teljesen azonos a test_in1 bitmintzatval, akkor a test_out kimeneten egy 1-es jelenik meg (pirossal bekeretezve), jelezve a kt bitminta azonossgt. Minden ms esetben a test_out kimenetre 0-t kell, hogy kapjunk. Tovbb lthat, hogy a 4-bites bemeneti (a_in, b_in) mintk jelvltsai 100 ns-os idegysgenknt trtnnek, ahogyan ez a tesztpad VHDL lersban adott volt. A Xilinx ISim szimultor hasznlatnak rszletes lersa tlmutat jelen jegyzet ismertetsn, hasznlata a [ISIM] referenciban adott. Azonban megjegyeznnk, hogy minden tervezsi feladat sorn nagyon fontos lps a HDL lersok viselkedsi szimulcija, teht mieltt a kivlasztott FPGA-s eszkzre a konfigurcis fjl ellltjuk, s letltennk, mindenkppen meg kell bizonyosodnunk az ramkri terv helyes mkdsrl.
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.4. XILINKX ISE KRNYEZET S AZ ISIM SZIMULTOR HASZNLATA

137

2.4.6. Knyszerfelttelek megadsa, szintzis s implementci:


11. Amennyiben a 4-bites egyenlsg sszehasonlt ramkrt FPGA-ra szeretnnk szintetizlni, s mr a 10. lpsben ismertetett helyes mkdsrl megbizonyosodtunk, kvetkezhet a letlthet konfigurcis file (bitstream) generlsa. Ezt a lpst kvetkez 3 fzisban lehet elvgezni: Tervezi knyszerfelttelek megadsa (user constraints), Szintzis (synthesis), Implementci (implementation). a.) A tervezi knyszerfelttelek rgztik azokat a megktseket az ramkrk szintzishez s implementlshoz, amelyekkel egyrszt specilis jelekhez (pl. rajelhez), illetve a be-, s kimeneti jelekhez (pl. adat-, cm-, vezrlsi informci) konkrt fizikai lbakat rendelhetnk. Ilyenek lehetnek rajelek esetn, pldul a peridusid, vagy kitltsi tnyez, illetve az ltalnos ki-, bemeneti jelek esetn olyan fizikai paramterek, mint pldul I/O lb lokalizci, I/O szabvny, meghajt kpessg, maximlis jelvltozsi sebessg (slew rate), vagy akr a le-, illetve felhz ellenllsok belltsai. A lb-hozzrendelseket s elnevezseket mindig a legfelsbb hierarchiaszinten lv (jelen pldnl maradva egyenloseg_4_bit_top) entits I/O port listjban szerepl lbakhoz s elnevezseikhez kell rgzteni, klnben az implementcis sorn hibazenetet kapunk s lell a fordts. Az is ltalnosan elmondhat, hogy az FPGA-s fejleszt krtykon megtallhat perifrik IO jelei fizikailag is mindig a kivlasztott FPGA eszkz lbaihoz csatlakoznak, teht ezek paramtereinek belltsnl mindig nagyon krltekinten kell eljrni. Szerencss esetben ez igaz a legtbb mai FPGA-s fejlesztkrtyk gyrtira a lbak hozzrendelsei, paramterei rendelkezsre llnak egy letlthet tervezi fjl, n. user constraint llomnyban sszegyjtve. Ez Xilinx FPGA esetn .ucf fjlkiterjesztssel adott. A jegyzetnkben szerepl Digilent Nexys-2 krtyhoz is letlthet a gyrt ltal sszelltott knyszerfeltteleket tartalmaz .ucf fjl (Nexys2_1200General.ucf nven) [NEXYS2]. Itt jegyeznnk meg, hogyha tervezsi, vagy oktatsi clokbl a kisebb Spartan3E-500K (XC3S500E) FPGA-t tartalmaz Nexys-2 krtyt vlasztjuk, akkor annak az I/O hozzrendelsei s belltsai szintn megtallhatak a gyrt ltal kiadott Nexys2_1200General.ucf fjlban (nhny LED lbkiosztsa kerlt fizikailag ms helyre az FPGA-n). Konkrtan, a lb hozzrendelsek kztti egyetlen klnbsg a led<7:4> esetn van. Knyszerfelttelek megadsa a kvetkez lpsekbl ll: o Mivel a gyri .ucf fjlban megadott Led<0> kvnjuk felhasznlni az eq_out kimeneti jel bektsre: ha 1 vilgt a legjobboldalibb LED(0), ha 0, nem vilgt. Ezrt az eredeti .ucf fjlban nevezzk t a Led<0>-t a legfelsbb hierarchia szinten lv entits I/O port listjban szerepl nvre, azat eq_out-ra. o ii.) Mivel a hardveres tesztels sorn tetszleges mdon kvnjuk vltoztatni a bemeneti rtkeket, ezrt a krtyn lv programozhat kapcsolkat (switch) hasznljuk fel a bemeneti bitmintk megadsra. Ezrt az als 4 kapcsolhoz rendeljk az a_in(3)a_in(0) bemeneteket az sw(3)sw(0) helyett, mg a fels 4 kapcsolhoz a b_in(3)b_in(0) bemeneteket, az sw(7)sw(4) helyett.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

138

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

o iii.) Teht a fent ismertetett mdon a gyri Nexys2_1200General.ucf-ben megadott lb hozzrendelseket a kvetkez knyszerfelttelek szerint kell megvltoztatni:
# ucf (user constraint) fjl megjegyzse NET "eq_out" LOC = "J14"; # Bank = 1, Pin name = IO_L14N_1/A3/RHCLK7, Type = RHCLK/DUAL, Sch name = JD10/LD0

NET "a_in<0>" LOC = "G18"; # Bank = 1, Pin name = IP, Type = INPUT, Sch name = SW0 NET "a_in<1>" LOC = "H18"; # Bank = 1, Pin name = IP/VREF_1, Type = VREF, Sch name = SW1 NET "a_in<2>" LOC = "K18"; # Bank = 1, Pin name = IP, Type = INPUT, Sch name = SW2 NET "a_in<3>" LOC = "K17"; # Bank = 1, Pin name = IP, Type = INPUT, Sch name = SW3 NET "b_in<0>" LOC = "L14"; # Bank = 1, Pin name = IP, Type = INPUT, Sch name = SW4 NET "b_in<1>" LOC = "L13"; # Bank = 1, Pin name = IP, Type = INPUT, Sch name = SW5 NET "b_in<2>" LOC = "N17"; # Bank = 1, Pin name = IP, Type = INPUT, Sch name = SW6 NET "b_in<3>" LOC = "R17"; # Bank = 1, Pin name = IP, Type = INPUT, Sch name = SW7

Ha az eredeti Nexys2_1200General.ucf fjlt mdostjuk a fenti tartalommal, akkor elegend az ISE projekthez hozzadni (Project Add Source, vagy Add Source ikon az eszkzsoron). Alternatv megoldsknt Project New Source, vagy baloldali eszkztron New Source ikon segtsgvel is hozzadhatunk a projekthez egy j forrst, amelyben a tervezi knyszerfeltteleket (Implementation Constraints File) rgztjk: adjuk meg fjlnvnek az egyenloseg_4_bit_top.ucf . Majd az gy ltrejtt llomnyba msoljuk be a fenti lb hozzrendelseket. (Megjegyeznnk, hogy a knyszerfeltteleket tartalmaz .ucf fjlt nem csak szveges szerkesztben, hanem a Xilinx ISE grafikus Floorpan I/O Editor-ban is mdostani lehet.) Tovbbi megjegyzs: Lehetsg van arra is, hogy a Nexys2_1200General.ucf fjlban minden IO lbhoz tartoz hozzrendelst meghagyjunk (kikommentezni #, s kitrlni sem szksges). Ha az ppen aktulisan hasznlt lbak nevt megvltoztatjuk, de a tbbi nem hasznlt lbhozzrendelst meghagyjuk az .ucf fjlban, amelyhez a top-entits szintjn nem adtunk meg IO portot, akkor az ISE a fordts sorn hibazenetet ad, s nem lp tovbb az implementls lpseire. Ezt a hibt gy lehet kikszblni, hogy a Process ablakban [jobb gomb] Implement Design Properties... s az Allow Unmatched LOC Constraints tulajdonsgot ki kell piplni. Ekkor nem szmt, hogy van-e olyan IO hozzrendels, amely a top-modul szintjn nincsen deklarlva, a fordtsi lpseket az ISE akkor is vgrehajtja.
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.4. XILINKX ISE KRNYEZET S AZ ISIM SZIMULTOR HASZNLATA

139

b.) Logikai szintzis sorn a VHDL entitsokbl s architektra lersokbl kialaktott ramkr logikai kapu szint (pl. LUT, FFs, stb.) megvalstsa trtnik tbb lpsben: HDL fordts terv hierarchikus analzise HDL analzis s szintzis. A Process ablakban XST = Xilinx Szintzis Eszkz segtsgvel indthatjuk el az FPGA-ra trtn szintetizls folyamatt. c.) Implementci sorn az elz lpsben szintetizlt HDL lersokbl egymst kvet lpsek sorozatval fizikai lekpezst, elhelyezst, majd pedig sszekttetst valstunk meg a kivlasztott FPGA eszkzn (esetnkben Spartan-3E-500K / 1200K) rendelkezsre ll fizikai erforrsokon. Implementcis tervezsi lpsek indtshoz a Process ablakban Implement design opcira kell dupln kattintani. Ennek pontos lpseit, TRANSLATE MAP PLACE&ROUTE fzisokat mr a korbbi 2.1.5. fejezetben trgyaltuk. A tervezs egyes fzisairl egy-egy sszefoglal tblzat (Design Summary) jelenik meg a kvetkez 2.12. bra szerint:

2.12. bra: A fordtsi lpsek vgn megjelen sszest tblzat A fenti sszefoglal tblzatban a legfontosabb paramterek a kivlasztott FPGA eszkz erforrsainak kihasznltsgt (utilization), illetve a fizikai sszekttetsek (routing results) s az idztsi ksleltetseket (Setup/ Hold time rtkek: lehetleg 0 legyen) sszegzik. Ahogyan azt a jelenlegi pldnk HDL forrskdjban is megadtuk egy 4-bites a_in, 4-bites b_in bemenet, valamint egyetlen eq_out kimenet lett definilva, azaz sszesen 9 db (4+4+1) fizikailag bekttt (bounded) I/O blokk sszestst vrtuk, s egyben kaptuk meg. Ezek a rendelkezsre ll Spartan3E-500 FPGA 250 I/O blokkjainak egy kis rszt, mindszsze 3%-t teszik ki. d.) Utols lpsknt lltsuk el a konfigurcis bitfjlt a Process ablak Generate programming file opcijval. De eltte mg az egyenloseg_4_bit_top top-level entitst kivlasztva [jobb gomb] Generate Programming File Design properties tulajdonsgai kztt, a Startup Options kategria mellett a Startup Clock rajelet lltsuk t JTAG clockra (az alaprtk CCLK volt). Ez azrt nagyon fontos bellts, mivel a JTAG rajel fogja specifiklni azt a jelet, amely segtsgvel a konfigurcis folyamat vgn a kezdeti szekvencia informcikat (startup-sequence) betltjk (Boundary Scan JTAG). Ellenkez esetben
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

140

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

a generls vgeztvel figyelmeztet zenetet kapnnk a konfigurci sorn. (Itt jegyeznnk meg, hogy a legtbb kapcsolt az ISE parancs soros zemmdjban is bellthatjuk a switch name alapjn, pl: -g StartUpClk.)

Az gy kapott generlt bitfjl (egyenloseg_4_bit_top.bit) lesz a kivlasztott FPGA eszkzre letlthet formtum konfigurcis llomny. A generlt bitfjl neve mindig a legfelsbb hierarchia szinten lv entits nevvel fog megegyezni. 12. A kvetkez lpsben a tesztelshez az FPGA-ra az ellltott bit-szint konfigurcis llomnyt le kell tlteni. Ehhez a Digilent-es termkekhez biztostott Digilent Adept Suite nev programot (s nem az ISE keretrendszer Xilinx Impact programjt!) hasznljuk. Az Adept Suite egy olyan alkalmazs, amely az FPGA-kon kvl, a konfigurcis bitfjlok letltst (.bit, .mcs) tmogatja CPLD, PROM / Flash tpus eszkzkre, vagy akr adatok tvitelt a szabvnyos USB porton keresztl, illetve specilis cl regiszterek rst s olvasst. (Megjegyennk, hogy a Adept SDK segtsgvel a PC oldali alkalmazs fejlesztsre is lehetsg nylik). a.) Adept indtsa: Programok Digilent Adept Suite. b.) Csatlakoztassuk a Digilent Nexys-2 krtyt az USB-s roll-on szalagkbelen keresztl a PC-n lv egyik USB 2.0 foglalatba. Els hasznlatkor a Digilent-es krtya USB meghajt programjnak a teleptst meg kell vrni. Ekkor a kvetkez 2.13. bra szerint egy Onboard USB Nexys2-1200, vagy Nexys2-500 azonost felirat kell, hogy megjelenjen az Adept Suite alkalmazs ablakban (pirossal jellve). Msrszt, ha felismerte a krtyt az Initialize Chain-re kattintva lehet az FPGA, illetve a PROM eszkzket felismertetni. Teht nemcsak az FPGA-t, hanem a Nexys2 krtyn lv PROM memrit is lehet konfigurlni. c.) Az FPGA-s eszkz mellett a Browse gombra kattintva kell kivlasztani a generlt bitfjlt (.bit), amelyet a tervezs 1.) lpsben ltrehozott projekt knyvtrban <drive>\feladat_01\ alatt kell keresni, egyenloseg_4_bit_top.bit nven. d.) Vgezetl a Program gombra kattintva megtrtnik a generlt bitfjl programozsa az FPGA-s eszkzre (ezt jelzi a Nexys2-es krtyn a narancssrga Done LED felvillansa). Ezzel a tervezsi feladatot befejeztk.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.4. XILINKX ISE KRNYEZET S AZ ISIM SZIMULTOR HASZNLATA

141

2.13. bra: Digilent Adept Suite letlt program grafikus ablaka Megjegyzs: az FPGA-s krtyn lv perifrikat az els hasznlat eltt mindenkppen rdemes letesztelni. Erre is lehetsget ad a Digilent Adept Suite program, amelynek Test flre kattintva a kvetkez perifria teszteket tudjuk elvgezni: RAM Flash Kapcsolk Nyomgombok LED-ek A tesztprogram egy Xilinx EDK-ban elksztett konfigurcis bitfjlt is letlt, amely PWM mkdtetssel teszteli a 7-szegmenses kijelzket, s a VGA kimenetet is. A tovbbiakban a jegyzetben ismertetsre kerl FPGA alap tervezsi feladatok megvalstsnl is ezeket az 112.) rszletezett lpseket clszer kvetni. Az ISE hasznlatnak tovbbi htterrl egyrszt az ISE Quick Start Tutorialban (ISE Help men), msrszt az ISE In-Depth Tutorial-ban lehet olvasni.

Tovbbi gyakorl feladatok


1.) A fejezetben ismertetett 112.) lpseket felhasznlva tervezzen VHDL nyelven egy olyan tbbkapus logikai hlzatot (multi_gates.vhd nven), amelyben AND, OR, NAND, NOR, XOR, XNOR kapuk vannak felhasznlva. A hlzatnak legyen kt bemenete, a_in, illetve

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

142

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

b_in s annyi kimenete (6) ahny logikai or_out, nand_out, nor_out, xor_out,

kaput integrltunk: ezek nevei rendre and_out, illetve xnor_out legyenek. a.) Tervezzen egy tesztpadot az elz VHDL lershoz, multi_gates_tb.vhd nven. Szimullja le a viselkedst a Xilinx ISim segtsgvel. b.) Az FPGA-s eszkzn az elkszlt terv verifikcijhoz hasznljon programozhat kapcsolkat, ahol sw(0)=a_in, illetve sw(1)=b_in, mg a kimeneti jelek vizsglathoz a LED-eket (Led(5:0)) a hat klnbz kapu kimeneteihez rendelve. c.) Szintetizlja, implementlja, majd pedig generlja le a konfigurcis bitfjl, vgl pedig tltse le a kivlasztott FPGA-ra. A letltshez hasznlja a Digilent Adept Suite nev programjt. Ellenrizze a terv helyes mkdst a krtyn.

2.) A fejezetben ismertetett 112.) lpseket felhasznlva s a korbbi Feladat-1 pldnkat kiegsztve tervezzen meg VHDL nyelven egy olyan ramkrt, amely az 4-bites egyenlsg sszehasonltsn kvl az egyenltlensgeket (A kisebb, mint B; illetve A nagyobb, mint B) is kpes jelezni. A 3-kimenet logikai hlzat (comparator_4_bit.vhd) tervezse sorn tisztn logikai kapukat hasznljon: AND, OR, NAND, NOR, XOR, XNOR (ne hasznlja az egyenlsg, egyenltlensgek relcis opertorait). A hlzatnak legyen kt 4-bites bemenete, a_in(3:0), illetve b_in(3:0) s 3-kimenete, amelyek nevei rendre eq_out, gt_out, lt_out legyenek (gt=greater than: nagyobb, mint, lt=less than: kisebb, mint). a.) Tervezzen egy tesztpadot az elz VHDL lershoz, comparator_4_bit_tb.vhd nven. Szimullja le a viselkedst a Xilinx ISim segtsgvel. b.) Az FPGA-s eszkzn az elkszlt terv verifikcijhoz hasznljon programozhat kapcsolkat, ahol sw(3:0)=a_in(3:0), illetve sw(7:4)=b_in(3:0), mg a kimeneti jelek vizsglathoz a LED-eket, Led(2:0) = (gt_out/lt_out/eq_out) a hrom klnbz sszehasonlts eredmnyhez rendelve. c.) Szintetizlja, implementlja, majd pedig generlja le a konfigurcis bitfjl, vgl pedig programozza fel a kivlasztott FPGA-ra. A letltshez hasznlja a Digilent Adept Suite nev programjt. Ellenrizze a terv helyes mkdst a krtyn. 3.) A fejezetben ismertetett 112.) lpseket felhasznlva s tervezzen meg VHDL nyelven egy 3-8-as dekder ramkrt, amely engedlyez bemenettel is rendelkezik. A 8-kimenet, one-hot kdolst hasznl logikai dekdol ramkr (decoder_3_8_kapu.vhd) tervezse sorn tisztn logikai kapukat hasznljon: AND, OR. A hlzatnak legyen egy 3-bites bemenete, a_in(2:0), s 8-kimenete decode_out(7:0) nven. Az ramkr tervezshez nyjt segtsget a 2.8. tblzat:

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.4. XILINKX ISE KRNYEZET S AZ ISIM SZIMULTOR HASZNLATA

143

2.8. tblzat: 3-8 dekder ramkr, engedlyez bemenettel


dekdolt kimenet a_in(0) 0 1 0 1 0 1 0 1 decode_out(7:0) 0000 0000 0000 0001 0000 0010 0000 0100 0000 1000 0001 0000 0010 0000 0100 0000 1000 0000

bemenetek en_in 0 1 1 1 1 1 1 1 1 a_in(2) 0 0 0 0 1 1 1 1 a_in(1) 0 0 1 1 0 0 1 1

a.) Tervezzen egy tesztpadot az elz VHDL lershoz, decoder_3_8_kapu_tb.vhd nven. Szimullja le a viselkedst a Xilinx ISim segtsgvel. b.) Az FPGA-s eszkzn az elkszlt terv verifikcijhoz hasznljon programozhat kapcsolkat, ahol sw(2:0)=a_in(2:0), illetve sw(3) = en_in, mg a kimeneti dekdolt jelek vizsglathoz a LED-eket, Led(7:0) = decode_out(7:0) rendeljen. c.) Szintetizlja, implementlja, majd pedig generlja le a konfigurcis bitfjl, vgl pedig programozza fel vele a kivlasztott FPGA-t. A letltshez hasznlja a Digilent Adept Suite nev programjt. Ellenrizze a terv helyes mkdst a krtyn.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

144

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

2.5. Strukturlis s viselkedsi ramkri modellek megvalstsa


Ebben a fejezetben a korbban ismertetett szekvencilis s egyidej hozzrendelsi utastsokat hasznljuk fel ahhoz, hogy az ramkrk VHDL lersait implementljuk kt lehetsges mdon: viselkedsk, illetve strutrlis lersuk megadsval. Viselkedsi modell esetn nem a bels felptsket, hanem sokkal inkbb a sorrendi mkdsket, funkcijukat kvnjuk definilni. Mg a msik, strukturlis esetben a viselkeds helyett a bels felptskre, azok sszekttetseire vagyunk kivncsiak. Egy harmadik modellezsi szempont lehetne az idztsi modell, amely fknt azon alapul, hogy a modellezett ramkri rendszer a bemeneteire adott gerjesztsekre milyen mdon reagl, illetve a gerjesztsek tovbbi vltozsaira hogyan mkdik. Ez utbbi szemlletmdot a szimulcis krnyezet sszelltsa sorn mr megismerhettk (2.4.4.2.4.5. fejezetek). Jelen fejezet-rszben a szekvencilis s egyidej hozzrendelsek alapjait vizsglunk meg nhny szemlltet pldn keresztl. A VHDL ler nyelvre jellemz az a kpessg, hogy tmogatja egy digitlis rendszer tisztn viselkedsi, tisztn struktrlis modellezst, valamint ezek kombincijt is. Teht knnyen megvalsthat olyan komplex ramkri rendszer, amelyet strukturlis lerssal kisebbekre bonthatunk (top-down stlus), de amelyeket bell, az alacsonyabb szinteken mr viselkedsi lerssal modelleznk.

2.5.1. Strukturlis ramkri modellek


A strukturlis modellek esetn a blokkok teljes bels felptst hierarchikus szinteken keresztl adjuk meg. A tervezsi metodika trtnhet a hagyomnyos bottom-up vagy top-down stlus szerint. A modell s hierarchikus alrendszerei kztti kapcsolatot a viselkedsi modellhez hasonlan itt is specilis irnytott vltozk, az n. portok teremtik meg (in- bejv, out kimen, inout ktirny adatramls).

Feladat 1: 4-bites regiszter strukturlis ramkri modellje, szimulcival


Tervezznk meg egy elemi D- trolkbl (FlipFlop) felptett 4-bites prhuzamos betlts, s prhuzamos kiolvass regisztert strukturlis modellt alkalmazva, s bottom-up tervezsi metodikt hasznlva (2.14. bra). A bemeneteket jelljk d(i)-vel, a kimeneteket q(i)-vel). Az rajel engedlyez logika egy S kapu, amely az en engedlyez jel hatsra juttatja az n. kapuzott rajelet clk az egyes elemi D-trolk rajel bemeneteire. A top modul neve legyen reg_4bit_top.vhd. Hasznljunk szekvencilis hozzrendel utastsokat. A fenti bra szerinti 4-bites regiszter sszelltshoz, elszr a legalacsonyabb hierarchia szinten meg kell tervezni az rajel logikt, illetve az elemi 1-bites D-trolkat, amelyeket azutn a kvetkez egyel magasabb hierarchia szinten pldnyostani fogunk. Az egy bites elemi trol neve legyen d_ff, az architektra lers neve pedig legyen struct. Ennek VHDL kdja lthat a kvetkez pldn:

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.5. STRUKTURLIS S VISELKEDSI RAMKRI MODELLEK MEGVALSTSA

145

(struct)

reg_4bit_top d_latch
(struct)

d(0)

d clk
(struct)

q(0)

d_latch d(1)

d clk
(struct)

q(1)

d_latch d(2)

d clk
(struct)

q(2)

d_latch d(3)

d clk
Clock_logic
(struct)

q(3)

en clk

a b

y
int_clk

2.14. bra: 4-bites prhuzamos betlts s kiolvass regiszter strukturlis modellje

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

146 -- D trol library IEEE; use IEEE.std_logic_1164.all;

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

entity d_ff is port ( d, clk : in std_logic; q : out std_logic ); end d_ff;

architecture struct of d_ff is begin ff_inst : process (clk, d) is begin if clkevent and clk = '1' then q <= d after 2 ns; end if; --egyedi ksleltets modellezse: aktulis idponthoz --kpest 2ns mlva fogja felvenni a d rtkt a q

end process ff_inst; end architecture struct;

A fenti kdrszletben a process trzsnek a vgre betehetjk a kvetkez sort is:


wait on clk, d;

s helyettestjk, hogy a clk, s d bemeneti jeleket a process rzkenysgi listjba nem kzvetlenl tesszk.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.5. STRUKTURLIS S VISELKEDSI RAMKRI MODELLEK MEGVALSTSA

147

Az rajel engedlyez logika VHDL forrskdja a kvetkez:


-- D flipflop library IEEE; use IEEE.std_logic_1164.all;

entity clock_logic is port ( a, b : in std_logic; y : out std_logic ); end clock_logic;

architecture struct of clock_logic is begin clock_logic_inst: process (a, b) is begin y <= a and b after 5 ns; --egyedi ksleltets modellezse: aktulis -- idponthoz kpest 5 ns mlva fogja felvenni a d rtkt a q end process clock_logic_inst; end architecture struct;

A kvetkez, eggyel magasabb hierarchia szinten lv reg_4bit_top entitsban a fenti 2.14. brnak megfelelen kell pldnyostani az egyes entitsokat (4x d_ff , 1x clock_logic).
-- rejel logika library IEEE; use IEEE.std_logic_1164.all;

entity reg_4bit_top is port ( d : in std_logic_vector(3 downto 0); q : out std_logic_vector(3 downto 0); clk : in en : in end reg_4bit_top; std_logic; std_logic );

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

148

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

architecture struct of reg_4bit_top is signal int_clk : std_logic; begin --port map VHDL 93 szabvny szerint, nem kell component bit0 : entity work.d_ff(struct) port map (d(0), int_clk, q(0)); bit1 : entity work.d_ff(struct) port map (d(1), int_clk, q(1)); bit2 : entity work.d_ff(struct) port map (d(2), int_clk, q(2)); bit3 : entity work.d_ff(struct) port map (d(3), int_clk, q(3)); gate : entity work. clock_logic (struct) port map (en, clk, int_clk); end architecture struct; --bels n. kapuzott ra jel!

A kvetkez lpsben ehhez a magas szint entitshoz (reg_4bit_top) ksztsnk tesztpad-ot, s gyazzuk be, amelynek a neve legyen reg4_test_bench . Az testbench-nek a VHDL forrst a kvetkezkppen adjuk meg.
-- tesztgy 4-bites regiszterhez library IEEE; use IEEE.std_logic_1164.all;

entity reg4_test_bench is end entity reg4_test_bench;

architecture test of reg4_test_bench is -- komponens deklarcik a tesztelshez COMPONENT reg_4bit_top PORT( d : IN q : OUT clk : IN en : IN ); END COMPONENT; --bels jelek bemenetekhez signal d : std_logic_vector(3 downto 0) := (others => '0'); signal clk : std_logic := '0'; std_logic_vector(3 downto 0); std_logic_vector(3 downto 0); std_logic; std_logic

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.5. STRUKTURLIS S VISELKEDSI RAMKRI MODELLEK MEGVALSTSA

149

signal en : std_logic := '0'; --bels jelek kimenetekhez signal q : std_logic_vector(3 downto 0); --bels rajel, szimulcihoz constant clk_period : time := 20 ns; -- 50MHz rajel szimultorhoz, -- time: fizikai tpus deklarcival megadott mennyisg

begin -- Unit Under Test: a tesztelni kvnt top-level entits pldnyostsa, -- amit eltte a komponens deklarcis rszen megadtunk uut: reg_4bit_top PORT MAP ( d => d, q => q, clk => clk, en => en );

-- Clock process defincik clk_process :process begin clk <= '0'; wait for clk_period/2; clk <= '1'; wait for clk_period/2; end process;

-- gerjesztsek defincii stimulus_proc : process begin

-- kezdetben n. reset llapot 100ns-ig, jelenleg nem adtunk meg reset -- jelet wait for 100 ns;

d <= "1111"; en <= '0'; wait for 25 ns;

en <= '1'; Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

150 wait for clk_period*2;

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

d <= "0011"; wait for clk_period*2;

d <= "1100"; wait for clk_period*2;

en <= '0'; wait for clk_period*2;

d <= "1001"; wait for clk_period*2; -- . . . tovbbi esetek wait; end process stimulus_proc; end architecture test;

A megfelelen pldnyostott s a tesztpadba begyazott entitsokra gerjesztst kell adni, hogy meg tudjuk vizsglni a kimenetek q(3:0) vltozsait. Termszetesen a fenti kdban a std_logic_vector(3 downto 0) adattpust is deklarltuk gy, hogy a gerjeszts sorn elszr 1111, majd pedig engedlyezve 0011, 1100 s vgl 1001 bitmintzatokat rendeltnk. A szimulciban megjelenik a gerjeszt folyamat mellett egy msik, rajel generl process() is, amely a periddus id felig 0-t, majd a msik felben 1-et szolgltatva vltakozik. Ez a processz szksges az clk rajel szimulcijhoz, hisszen ehhez rendeltk a VHDL lersban a d_ff trolst, felfut lre vezrelve. A clk rajel impulzusidejnek belltshoz a konstans fizikai (time) tpus deklarcit hasznlunk, amelynek peridus ideje 20 ns. A VHDL lersszimulcihoz a Xilinx ISim szimultor hasznlhat, mellyel kapcsolatban bvebb lerst a 2.4. fejezetben tallhatunk. A szimulci sorn a kvetkez hullmforma alakot kapjuk (2.15. bra):

2.15. bra: reg_4bit_top szimulcija sorn kapott hullmforma Szimulcis eredmny rszletes vizsglata: lthat, hogy a 0000 bitmintzat hiba adott a szimulci 0 ns-os idejtl kezdve, mivel nem rkezik engedlyez jel (en = 1), ezrt az
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.5. STRUKTURLIS S VISELKEDSI RAMKRI MODELLEK MEGVALSTSA

151

rajelet sem kapuzza be az egyes D-trolk bemeneteire a 4-bites regiszterben. Az 1111 bitmintzat 100 ns nl rkezik, de az engedlyez mg mindig inaktv marad (en = 0). Az engedlyez jel 125 ns-nl vlt 1-be, azaz a kvetkez felfut rajel hatsra (clkevent and clk = 1) a bemeneten d(3:0) lv 1111 bitmintzat a 4-bites regiszterbe kerl, s 125+7 ns mlva jelenik meg a trl q(3:0) kimenetein (ezt jelzi a kt srga n. marker kztti idklnbsg). A 7ns-os idksleltets a pldnyostott d_ff -ek belltott 2 ns-os ksleltetsbl, illetve az rajel logika (and) 5 ns-os ksleltetsnek sszegbl addik. Ezutn a kvetkez rvnyes 0011 bitmintzat 150 ns idben rkezik, amely 150+7 ns mlva jelenik meg a q kimeneteken. A tesztels sorn gerjesztsknt belltott utols 1001 bitmintzat az inaktv engedlyez jel (en = 0) miatt mr nem kerl a 4-bites regiszterbe.

Feladat 2. 2-1 multiplexer strukturlis modell szerinti egyidej rtkadssal felptve


Tervezznk meg egy 2-1 MUX ramkrt, amely egyidej (konkurens) hozzrendelsi utastsokat s strukturlis ramkri VHDL lerst hasznl. A 2-1 multiplexer ramkr strukturlis felptse a kvetkez 2.16. brn lthat. Az ramkr bemeneteit jellje a_in, b_in; kivlaszt jelt s_in;illetve kimenett y_out. A legfelsbb szint entits neve legyen
mux2_1_top.
Mux2_1_top (struct) i0 o not_s_in b_in i0 s_in i1 eq1 o b_out i1 a_out i0 o i1 y_out

a_in

2.16. bra: 2-1 Multiplexer ramkr strukturlis modellje Az ramkr strukturlis lersnak VHDL forrsa a kvetkez:
-- 2-to-1 MUX kapu szint strukturlis lersa library IEEE; use IEEE.std_logic_1164.all; entity mux2_1_top is port( a_in : in STD_LOGIC; b_in : in STD_LOGIC; s_in : in STD_LOGIC; y_out : out STD_LOGIC ); end mux2_1_top;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

152

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

architecture struct of mux2_1_top is --bels jelek deklarcija signal a_out : STD_LOGIC; signal b_out : STD_LOGIC; signal not_s_in : STD_LOGIC; begin --konkurrens rtkadsok logikai opertorok felhasznlsval a_out <= not_s_in and a_in; b_out <= s_in and b_in; not_s_in <= not(s_in); y_out <= b_out or a_out; end struct;

Gyakorlati feladat: tovbb feladatknt rdemes ehhez a feladathoz is egy tesztpadot ltrehozni, amelybe a legfelsbb szint entitst be kell gyazni. A gerjesztsekre adott vlaszokat vizsglja meg az ISim szimulcis program segtsgvel, mellyel kapcsolatban bvebb lerst a 2.4. fejezetben tallhat. Tovbbi feladatknt rjon a modellhez egy tesztpad-ot, s vizsglja meg a mkdst ISim szimultor segtsgvel.

2.5.2. Viselkedsi ramkri modellek


A viselkedsi modellek esetn nem a blokkok teljes bels felptsre, sokkal inkbb azok funkcijt, mkdst kvnjuk megadni. A tervezs itt is trtnhet hierarchikusan, azaz szintenknt csakgy, mint a strukturlis eseteben. A viselkedsi modell egy rendszer vagy rszrendszer funkcionlis lerst tartalmazza. A viselkedsi modell legfbb alkotelemei a folyamatok (process-ek), amelyek kztt az adattvitelt specilis jelek (signal-ok) kzvettik.

Feladat 3: 2-1 multiplexer szekvencilis if-else szerkezettel


Tekintsk a kvetkez igazsgtblzatot, amely egy 2-1 multiplexer mkdst definilja (mux2_1_top). 2.9. tblzat: 2-1 multiplexer mkdst ler igazsgtbla
multiplexlt kimenet b_in 0 1 y_out a_in b_in

bemenetek s_in 0 1 a_in 1 0

Ahogy ltjuk, a kivlaszt s_in jel rtktl fggen: o ha s_in = 0, akkor az a_in bemenetet vlasztja ki, s teszi y_out kimenetre, mg o ha s_in = 1, akkor pedig a b_in bemenet rtke kerl az y_out kimenetre.
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.5. STRUKTURLIS S VISELKEDSI RAMKRI MODELLEK MEGVALSTSA

153

Ennek az igazsgtblzatnak megfelel a viselkedsi modellt a kvetkez VHDL kdrszlet tartalmazza, amelyben if-else szekvencilis szerkezetet hasznlunk:
-- 2-to-1 MUX viselkedsi lersa szekvencilis if-else szerkezettel

library IEEE; use IEEE.std_logic_1164.all; entity mux2_1_top is port( a_in : in STD_LOGIC; b_in : in STD_LOGIC; s_in : in STD_LOGIC; y_out : out STD_LOGIC ); end mux2_1_top;

architecture behav of mux2_1_top is begin if_process : process (s_in, a_in, b_in) is begin if s_in = 0 then y_out <= a_in; else y_out <= b_in; -- sel /= 0 end if; end process; end behav; -- sel = 0

Tovbbi feladatknt rjon a modellhez egy tesztpad-ot, s vizsglja meg a mkdst ISim szimultor segtsgvel.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

154

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Feladat 4: 2-1 multiplexer szekvencilis if-else szerkezettel, generic hasznlatval


Tervezznk a korbbi ismeretek alapjn egy olyan 2-1 multiplexer ramkrt, amelynek bemenetei (a_in, s b_in), illetve kimenete (y_out) N=4 bitesek. Ehhez hasznljunk generic tpust. A 2.9. igazsgtblzatnak megfelel a viselkedsi modellt a kvetkez VHDL kdrszlet tartalmazza, amelyben if-else szekvencilis szerkezetet hasznlunk:
-- 2-to-1 MUX viselkedsi lersa szekvencilis if-else + generic --szerkezettel

library IEEE; use IEEE.std_logic_1164.all;

entity mux2_1_top is generic(N:integer := 4); port( a_in : in STD_LOGIC_VECTOR (N-1 downto 0); b_in : in STD_LOGIC_VECTOR (N-1 downto 0); s_in : in STD_LOGIC; y_out : out STD_LOGIC_VECTOR (N-1 downto 0) ); end mux2_1_top;

architecture behav of mux2_1_top is begin if_process : process (s_in, a_in, b_in) is begin if s_in = 0 then y_out <= a_in; else y_out <= b_in; -- sel /= 0 end if; end process; end behav; -- sel = 0

Tovbbi feladatknt rjon a modellhez egy tesztpad-ot, s vizsglja meg a mkdst ISim szimultor segtsgvel!

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.5. STRUKTURLIS S VISELKEDSI RAMKRI MODELLEK MEGVALSTSA

155

Feladat 5: 4-1 multiplexer szekvencilis if-else szerkezettel


Tervezznk egy 4-1 multiplexer ramkrt, amely viselkedsi VHDL lerssal adott, s szekvencilis if-else utastsokat hasznl (mux4_1_if). A bementeket jelljk d_in0,,d_in3-al, amelyek std_logic tpusak legyenek. A kimenetet jelljk y_out-al, amely szintn std_logic tpus, a kivlaszt jelet pedig nevezzk el sel_in(1:0)- al, amely std_logic_vector tpus legyen. Ekkor a kvetkez viselkedsi lerst adhajtuk meg:
-- 4-to-1 MUX viselkedsi lersa szekvencilis if-else szerkezettel

library ieee; use ieee.std_logic_1164.all;

entity mux4_1_if is port ( sel_in : in std_logic_vector(1 downto 0); d_in0, d_in1, d_in2, d_in3 : in std_logic; y_out : out std_logic ); end entity mux4_1_if;

architecture behaviour of mux4_1_if is begin mux_select : process (sel_in, d_in0, d_in1, d_in2, d_in3) is begin if sel_in = 00 then y_out <= d_in0; elsif sel_in = 01 then y_out <= d_in1; elsif sel_in = 10 then y_out <= d_in2; else y_out <= d_in3; end if; end process mux_select; end architecture behaviour;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

156

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Feladat 6: 4-1 multiplexer szekvencilis case-when szerkezettel


Tervezznk egy 4-1 multiplexer ramkrt, amely viselkedsi VHDL lerssal adott, s szekvencilis case-when utastsokat hasznl (mux4_1_case). A bementeket jelljk d_in0,,d_in3-al, amelyek std_logic tpusak legyenek. A kimenetet jelljk y_out -al, amely szintn std_logic tpus, a kivlaszt jelet pedig nevezzk el sel_in(1:0)-al, amely std_logic_vector tpus legyen. Ekkor a kvetkez viselkedsi lerst adhajtuk meg:
-- 4-to-1 MUX viselkedsi lersa szekvencilis case-when szerkezettel

library ieee; use ieee.std_logic_1164.all;

entity mux4_1_case is port ( sel_in : in std_logic_vector(1 downto 0); d_in0, d_in1, d_in2, d_in3: in std_logic; y_out : out std_logic ); end entity mux4_1_case;

architecture behav of mux4_1_case is begin

case_select : process (sel_in, d_in0, d_in1, d_in2, d_in3) is begin case sel_in is when 00 => y_out <= d_in0; when 01 => y_out <= d_in1; when 10 => y_out <= d_in2; when others => y_out <= d_in3; end case; end process case_select; end architecture behav;

Tovbbi feladatknt rjon a modellhez egy tesztpad-ot, s vizsglja meg a mkdst ISim szimultor segtsgvel!

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.5. STRUKTURLIS S VISELKEDSI RAMKRI MODELLEK MEGVALSTSA

157

Feladat 7: 4-1 multiplexer egyidej when-else szerkezettel


Tervezznk egy 4-1 multiplexer ramkrt, amely viselkedsi VHDL lerssal adott, s jelen esetben konkurens, egyidej when-else hozzrendel utastsokat hasznljunk (mux4_1_when). A bementeket a korbbi pldkhoz hasonlan jelljk d_in0,,d_in3-al, amelyek std_logic tpusak legyenek. A kimenetet jelljk y_out-al, amely szintn std_logic tpus, a kivlaszt jelet pedig nevezzk el sel_in(1:0)- al, amely std_logic_vector tpus legyen. Ekkor a kvetkez viselkedsi lerst adhajtuk meg:
-- 4-to-1 MUX viselkedsi lersa egyidej when-else szerkezettel library ieee; use ieee.std_logic_1164.all;

entity mux4_1_when is port ( sel_in : in std_logic_vector(1 downto 0); d_in0, d_in1, d_in2, d_in3: in std_logic; y_out : out std_logic ); end entity mux4_1_when;

architecture behav of mux4_1_when is begin -- konkurens rtkadsok y_out <= d_in0 when sel_in = 00 else

d_in1 when sel_in = 01 else d_in2 when sel_in = 10 else d_in3 when sel_in = 11 else X; end behav; --egybknt unknown

Tovbbi feladatknt rjon a modellhez egy tesztpad-ot, s vizsglja meg a mkdst ISim szimultor segtsgvel!

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

158

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

2.6. Szekvencilis hlzatok


Rvid ttekints
A kombincis logikai hlzatok s a szekvencilis (sorrendi) hlzatok kztt a legfontosabb klnbsg, hogy mg egy hagyomnyos kombincis hlzatnl a mindenkori bemenetek kombincija (matematikailag inkbb varicija) hatrozza meg a kimeneteket, addig a szekvencilis hlzatoknl a mindenkori bemeneti kombincik, valamint a szekunder (msodlagos) llapotkombincik egyttesen hatrozzk meg az j kimeneti rtkeket. ltalnossgban azt mondhatjuk, hogy a szekvencilis hlzatok olyan kombincis logikai hlzatok, amelyek rendelkeznek egy bels visszacsatolssal, illetve a visszacsatol gban llapot trolssal. Az llapotok szekvencija ugyanazon bemeneti kombincik mellett is kpes mindig j kimeneti rtket, illetve kvetkez llapot rtket generlni, amelybl a visszacsatolt aktulis llapotok meghatrozhatak. A kombincis hlzatok, illetve szekvencilis hlzatok blokkdiagram szint felptse a kvetkez 2.17. brn adott:
X1 X2 X3 Z1 Z2 Z3

X1 X2 X3

Z1 Z2 Z3

Kombincis Logikai Hlzat


Xn Y(k) Y(k+1) Zm

Kombincis Logikai Hlzat


Xn Zm

llapot regiszter

2.17. bra: kombincis logikai hlzatok s szekvencilis hlzatok sszehasonltsa Mindkt esetben X jelli a bemenetek, Z a kimenetek, mg a sorrendi hlzat esetn Y(k+1) a kvetkez llapotot, Y(k) a visszacsatolt aktulis llapotot jelli. A llapotok kvetkez rtknek (next-state) meghatrozstl fggen a szekvencilis hlzatok kztt a kvetkez fbb csoportokat lehet kpezni: Regulris szekvencilis ramkrk: az llapot vltozsok (tmenetek) szablyos kombincis mintt kvetnek, mint pl. a szmll vagy lptet regiszter nyomon kvethet llapot vltozsai. A kvetkez llapot logika huzalozott kombincis hlzatbl pl fel. FSM: Vges llapot autmata (Finite State Machine). Az llapot tmenetek nem egy szablyos, ismtld mintt kvetnek, hanem n. vletlen logika (random-logic) elvn valsulnak meg. Az ilyen autmata modellek mkdse a vezrls folyam grfok (CFG) segtsgvel szemlletes mdon brzolhatak (vezrlsi t).
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.6. SZEKVENCILIS HLZATOK

159

FSMD: Vges llapot autmata modellek + adatttal (Finite State Machine with Data Path): ez az ramkr ltalnosan egy szabvnyos szekvencilis hlzat, illetve egy FSM modell sszekapcsolsbl ll. Kln adat-, s vezrlsi ttal rendelkezik (azaz mkdse DFG adatfolyam, illetve CFG vezrlsi folyam grfokkal felrva szimbolikus mdon is szemlltethet). Az llapotregiszterek tbbfle sorrendi hlzat visszacsatol gban lv alap ptelemknt hasznlhatak. A legtbb elemi trol esetn kln kell vlasztani a szinkron (kzs rajellel vezrelt), illetve aszinkron (temezett aszinkron) mkdst. A szinkron (esetenknt aszinkron) mkds trol elemek kztt tipikusan az S-R, J-K, T, D, illetve D-G tpus trolkat szoks megemlteni. Ezek kzl is, az egyik legfontosabb alappt elem a D-trol, amely a sorrendi hlzatok visszacsatol gaiban a legtbb alkalmazsoi plda esetn megtallhat. D-trol esetn de ltalnossgban igaz a tbbi trol esetre is hogy a definci szerint, s egyben mkdsbeli mdjuk szerint, a kvetkez lnyeges megklnbztetseket kell tennnk: Latch vagy retesz: szintvezrelt esetben (logikai 1 v. 0 szintre vezrelt aszinkron mkds trol elem), Flip-flop: lvezrelt esetben (az rajel felfut, vagy lefut lre vezrelt trol elem). Az ramkri szintzis szempontjbl fontos itt emlkeznnk arra is, hogy az Xilinx FPGA eszkzk konfigurlhat logikai blokkjain (CLB) bell kpzett szeleketben (slice) a LUT mellett pontosan D-trolkat tallhatunk, amelyek akr szintvezrelt, akr lvezrelt ramkri elemknt is tetszlegesen konfigurlhat (alkalmazstl fggen).

Szekvencilis hlzatok felptse


A kvetkez 2.18. brn egy hagyomnyos szekvencilis (sorrendi) hlzat felptse lthat.

kls bemeneti kombincik Xn

kimenetek Kvetkez llapot Aktulis llapot Kimeneti


(Dekdol)

Zm

logika

Kombincis Logikai Hlzat


(kvetkez llapotot elllt)

Y(k+1)

llapot regiszter

Y(k) visszacsatols

2.18. bra: Sorrendi hlzat blokkdiagramja A sorrendi hlzatok legfbb ptelemei: Kombincis logikai hlzat: hvjk mg kvetkez llpot-logiknak, mivel a soron kvetkez Y(k+1) ellltsrt felel, amelyet azutn eltrolunk

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

160

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

llapot trol / regiszter: ez ltalban egy szinkron mkds trol elem (legegyszerbb esetben a visszacsatol gban elhelyezett D-FF, vagy azokbl felptett regiszter), amely egyrszt az aktulis llapoto(ka)t trolja, msrszt visszacsatolja az Kombincis logikai hlzat bemenetre (Y(k) visszahatsa a bemenetre) Kimeneti, vagy dekdol logika: olyan logikai ptelem (lt. dekdol ramkr) amely a kimeneti jeleket (pl. akr vezrl jeleket) generlhat Tovbbi fontos paramterek egy szinkron szekvencilis hlzatban a kvetkezek lehetnek: T(setup): az llapotregiszter elemi trlinak az rajel aktv le eltti idztsi intervalluma T(hold): az llapotregiszter elemi trlinak az rajel aktv le utni idztsi intervalluma T(cq): (clock to q) az az idksleltets, amg az rajel hatsra az elemi trolk d bemenetn lv adat a q kimenetre jut (n. megszlalsi id). De lehetne akr modellezni a vezetkek jelterjedsi idejt is (T(propagation)), valamint T(comb): Kombincis logikai hlzat megszlalsi ideje, mialatt a bemeneti Xn kombincik a logikai hlzat egy-, vagy tbb- kimenetre (F) nem jutnak. Ezekbl az rtkekbl egy szinkron sorrendi hlzat maximlis mkdsi frekvencijt lehet meghatrozni, elzetes becslssel. Termszetesen a vgs terv implementlsa sorn a szintetizl programfejleszt krnyezet (XST) pontosan megadja a routols fzisa utn kapott idztsi ksleltetseket. Ezek pontos rszleteire jelen jegyzetben nem trnk ki [XILINX]. Ekkor a maximlis frekvencia meghatrozsa a kvetkez (2.2) kplet szerint adhat meg: 1 1 . (2.2) f max = = T T (cq ) + T (comb) + T ( setup )

D-trolk s regiszterek
Az ismertetett szekvencilis hlzatok, vagy akr ksbbi a Mealy, illetve Moore FSM automata modellek visszacsatol gaiban ltalnosan a legegyszerbb elemi trolt, a D-trolt hasznljk ahhoz, hogy bellk az llapotok bitszlessghez igaztott mret llapotregisztert tervezzenek. Azonban a VHDL nyelvet jonnan megismerk szmra a legnagyobb problmt a trol elemek, illetve bellk felpl komponensek lersa jelenti anlkl, hogy bizonyos esetekben, pldul a kombincis hlzatok esetn az n. nemkvnt memria hatst, mint rejtett hibt kikszbljk (lsd 2.3.2. fejezet). Ezeknek a trolknak, illetve a bellk felptett regisztereknek a VHDL nyelvi lersait adjuk meg a kvetkez rszekben: A szinkron, rajellel vezrelt esetben ezt a D-trolt nevezzk flip-flop-nak, amelynek mkdtetse trtnhet felfut (rising edge), vagy lefut lre (falling edge) vezrelve. A felfut lre vezrelt D-FF legtipikusabb mkdsi mdjait definil igazsgtblzatok, a hozzjuk kapcsold VHDL lersok a kvetkezk: egyszer lvezrelt D-trol, reset s engedlyez jel nlkl lvezrelt D-trol aszinkron reset jellel lvezrelt D-trol aszinkron reset, s engedlyez jellel. Most ezek felptst, mkdst s lersait nzzk meg rszletesen.
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.6. SZEKVENCILIS HLZATOK

161

a.) Feladat: lvezrelt D-trol aszinkron reset s engedlyez jel nljl


Ez a hagymnyos D-FF elemi trol elem, engedlyez s reset bemenetek nlkl. A clk felfut lnek hatsra trolja el a d-bemenetrl kapott rtket, amelyet egy clk rajelciklussal ksbb a q kimenetre tesz (vltozatlan rtkkel). 2.10. tblzat: lvezrelt D-trol (reset s engedlyez jelek nlkl)
d q
clk 0 1 q q q d

clk

Az aszinkron reset s engedlyez jel nlkli D-trol lehetsges VHDL lersa a kvetkez:
-- lvezrelt D-trol aszinkron reset s engedlyez jel nljl library ieee; use ieee.std_logic_1164.all; entity d_flipflop is port( clk: in std_logic; d: in std_logic; q: out std_logic ); end d_flipflop; architecture behav of d_ flipflop is begin process(clk) begin if (clk'event and clk='1') then q <= d; end if; end process; end behav;

Megjegyeznnk, hogy a fenti kdban a kvetkez sor helyett


if (clk'event and clk='1') then

rhattuk volna a kvetkezt is:


if rising_edge(clk) then

mivel a VHDL IEEE1164 szabvnyos csomagja tartalmazza az utastst. Hasonl mdon, ha lefut lre vezrelt D-trolt adunk meg, akkor pedig:
if (clk'event and clk='0') then

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

162

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

helyett
if falling_edge(clk) then

utastst adhatjuk meg. Mindekett foglalt sz a VHDL-ben.

b.) Feladat: lvezrelt D-trol aszinkron reset jellel, de engedlyez jel nljl
Ez a trol egy specilis, kibvtett mkds D-FF, s aszinkron reset bemenettel rendelkezik, de engedlyez bemenet nlkl. Ha a reset brmikor aktv magas (reset = 1), akkor a trol inicializlt q = 0 llapotba kerl. A reset jel aszinkron viselkeds, mivel fggetlen a clk bemenettl. Ha nincs reset (reset = 0), akkor pedig az a.) pontban elbb emltett hagyomnyos D-FF mkdst kapjuk. 2.11. tblzat: lvezrelt D-trol, magas aktv aszinkron reset jellel (de engedlyez nlkl)
d q
reset 1 clk 0 1 q 0 q q d

clk reset

0 0 0

Az aszinkron resettel rendelkez, de engedlyez jel nlkli D-trol VHDL lersa a kvetkez:

--aszinkron resettel rendelkez, de engedlyez jel nlkli D-trol library ieee; use ieee.std_logic_1164.all;

entity d_flipflop_reset is port( clk, reset: in std_logic; d: in std_logic; q: out std_logic ); end d_flipflop_reset;

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.6. SZEKVENCILIS HLZATOK architecture behav of d_flipflop_reset is begin process(clk,reset) begin if (reset='1') then q <='0'; elsif (clk'event and clk='1') then q <= d; end if; end process; end behav;

163

c.) Feladat: lvezrelt D-trol aszinkron reset s szinkron engedlyez jellel


Szintn specilis, kibvtett mkds D-FF, amely mind aszinkron reset, mind pedig szinkron engedlyez bemenettel is rendelkezik. Ha a reset brmikor aktv magas (reset = 1), akkor a trol inicializlt q = 0 llapotba kerl. Aszinkron viselkeds a reset jel, mivel fggetlen a clk bemenettl. Ha nincs reset llapotban (reset = 0), s engedlyezve van (en = 1), valamint felfut rajelet kap (), akkor trolja el a d-bemenetrl rkez rtket (q=d). Minden ms esetben a korbbi llapot rtket (q) rzi meg. 2.12. tblzat: lvezrelt D-trol, magas aktv aszinkron reset s szinkron engedlyez jellel
reset clk 0 1 en 0 1 q 0 q q q d

d en clk reset

1 0 0 0 0

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

164

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Az aszinkron resettel s szinkron md engedlyez jellel is rendelkez D-trol VHDL lersa pedig a kvetkez:
-- lvezrelt D-trol, magas aktv aszinkron reset s szinkron engedlyez --jellel library ieee; use ieee.std_logic_1164.all;

entity d_flipflop_en is port( clk, reset: in std_logic; en: in std_logic; d: in std_logic; q: out std_logic ); end d_flipflop_en; architecture behav of d_flipflop_en is begin -- clk s reset jeltl is egyttesen fgg szenzitv lista process(clk, reset) begin if (reset='1') then q <='0'; elsif (clk'event and clk='1') then if (en='1') then q <= d; end if; end if; end process; end behav;

Mivel az elz ramkr szinkron md engedlyez jelet is tartalmaz, ezrt helyettesthet, illetve felpthet lenne egy elemi D-trol, illetve egy egyszer kvetkez llapot logikt megvalst kombincis hlzat segtsgvel. Ez a kombinlt modul radsul egyidej hozzrendelssel van megadva a kvetkez VHDL lersban:
-- lvezrelt D-trol, magas aktv aszinkron reset s szinkron engedlyez --jellel konkurens mdon

library ieee; use ieee.std_logic_1164.all;

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.6. SZEKVENCILIS HLZATOK

165

entity d_flipflop_en2 is port( clk, reset: in std_logic; en: in std_logic; d: in std_logic; q: out std_logic ); end d_flipflop_en2;

architecture behav of d_flipflop_en2 is signal r_reg, r_next: std_logic; begin -- D FF process(clk,reset) begin if (reset='1') then r_reg <='0'; elsif (clk'event and clk='1') then r_reg <= r_next; end if; end process; -- egyidej hozzrendelsek -- next-state logika r_next <= d when en ='1' else r_reg; -- kimeneti logika q <= r_reg; end behav;

Regiszterek
Amennyiben a fenti D-FF-ok valamelyiktbl n-darabot egyms mell helyeznk, egy n-bites regisztert, illetve n-bites lptet (shift) regiszter kapunk fggen attl, hogy prhuzamos vagy soros mdszerrel kapcsoljuk ket ssze. Ha azt ttelezzk fel, hogy a korbban ismertetett Mealy, illetve Moore modellek n-bites visszacsatolt llapottal rendelkeznek, akkor pldul egy n-bites prhuzamos n. llapot regiszter kpes csak eltrolni a bemenetre visszacsatoland n darab Y(k) aktulis llapot rtkeket.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

166

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Feldadat 1: Hagyomnyos N-bites prhuzamos betlts, s kiolvass regiszter


Az N-bites regiszter egyes elemi D-troli teht ugyanazt a clk rajelet, illetve reset jelet kell, hogy megkapjk a mkdshez. A regiszter bitszlessgt definiljuk egy WIDTH nev integer tpus generic kifejezssel, amelynek rtke legyen 4.
-- Hagyomnyos N-bites prhuzamos betlts, s kiolvass regiszter library ieee; use ieee.std_logic_1164.all; entity reg_reset is generic(WIDTH: integer := 4); port( clk, reset: in std_logic; d: in std_logic_vector(WIDTH-1 downto 0); q: out std_logic_vector(WIDTH-1 downto 0) ); end reg_reset;

architecture behav of reg_reset is begin process(clk,reset) begin if (reset='1') then q <=(others=>'0'); elsif (clk'event and clk='1') then q <= d; end if; end process; end behav;

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.6. SZEKVENCILIS HLZATOK

167

Megjegyzs: Ha a fenti VHDL kdot leszintetiljuk a Xilinx XST segtsvvel (Design Synthesize XST), akkor a generls kzben az zenet ablakban a kvetkez sorokat ltjuk:
Found 4-bit register for signal <q>. Summary: inferred . . . ========================================================================= Macro Statistics # Registers 4-bit register : 1 : 1 4 D-type flip-flop(s)

========================================================================= Macro Statistics # Registers Flip-Flops : 4 : 4

Azaz a szintzis riport is a D-trolkbl felptett 4-bites regiszter generlst bizonytja.

Feladat 2: Hagyomnyos N-bites lptet (shift) regiszter, soros betltssel s kiolvasssal


A hagyomnyos lptet regiszter, az egyik legegyszerbb soros betlts s kiolvass regiszter, amelynl nem kontrolllhat kivlrl a mkds, csupn 1-bitpozcival kpes balra, vagy jobbra lptetni a tartalmt. Az N-bites lptet regiszter, amely 1-bitpozcinyival jobbra lpteti ciklusonknt a tartalmt VHDL lersa a kvetkez. Ebben az esetben is hasznljuk a mr ismert generic-et, a bitszlessg megadshoz (N := 4):
-- Hagyomnyos N-bites lptet (shift) regiszter library ieee; use ieee.std_logic_1164.all;

entity shift_regN is generic(N: integer := 4); port( clk, reset: in std_logic; s_in: in std_logic; s_out: out std_logic ); end shift_regN;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

168

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

architecture behav of shift_regN is signal r_reg: std_logic_vector(N-1 downto 0); signal r_next: std_logic_vector(N-1 downto 0); begin -- szinkron regiszter, aszinkron reset-el, engedlyez nlkl process(clk,reset) begin if (reset='1') then r_reg <= (others=>'0'); elsif (clk'event and clk='1') then r_reg <= r_next; end if; end process; --konkurrens hozzrendelse az 1-bit belptetshez, s kimenet --elvtelhez -- next-state logika (1 bitpozcival jobbra lptets) r_next <= s_in & r_reg(N-1 downto 1); -- kimenet s_out <= r_reg(0); end behav;

Lthat a fenti pldnl, hogy a konkurens r_next hozzrendelsben az r_reg legals bitjt elhagyjuk, mg a legfels bitjhez hozzfzzk jobbrl az 1-bites s_in rtkt. Ezltal a jobbra lptets 1-bitpozcival megvalsul. Hasonl mdon, ha 1-bitpozcinyival akarunk balra lptetni, akkor a kvetkez mdostst kell megtenni a fenti kdban:
-- next-state logika (1 bitpozcival balra lptets) r_next <= r_reg(N-2 downto 0) & s_in;

Fontos megjegyezni, hogy szintzis szempontjbl a shift regiszter a Xilinx FPGA-k CLB blokkjaiban lv 4-bemenet LUT tblzatban realizldik. Egyetlen 4-bemenet LUT felhasznlsval maximlisan 16x1 bites shift regiszter implementlhat.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.6. SZEKVENCILIS HLZATOK

169

Feladat 3: Univerzlis N-bites lptet (Barrel-shift) regiszter, prhuzamos/soros betltssel s kiolvasssal


Az univerzlis vagy n. Barrel-shift regiszter a hagyomnyos lptet regisztertl annyiban tr el, hogy kivlrl is kontrolllhat a mkdse (ctrl jel megadsval), s lptethet a tartalom 1-bitpozcinyival balra, jobbra, vagy akr meg is tarthatjuk az llapott. Az univerzlis lptet regiszter akr prhuzamos-soros, akr soros-prhuzamos betltssel-kiolvasssal is rendelkezhet. A Barrel-shift kifejezst ltalban arra szoks hasznlni, amikor nemcsak 1bittel balra, illetve jobbra tudunk lptetni, hanem tetszleges M bittel, ahol ltalban N>M. A ctrl egy ktbites std_logic_vector tpus vezrljel, amellyel szablyozhat az entits portlistjn keresztl a bels mkds:
-- univerzlis N_bites shift regiszter library ieee; use ieee.std_logic_1164.all;

entity univ_shift_reg is generic(N: integer := 4); port( clk, reset: in std_logic; ctrl: in std_logic_vector(1 downto 0); -- szablyozza a lptetst d: in std_logic_vector(N-1 downto 0); q: out std_logic_vector(N-1 downto 0) ); end univ_shift_reg; architecture behav of univ_shift_reg is signal r_reg: std_logic_vector(N-1 downto 0); signal r_next: std_logic_vector(N-1 downto 0); begin -- szinkron regiszter, aszinkron reset-el, engedlyez nlkl process(clk,reset) begin if (reset='1') then r_reg <= (others=>'0'); elsif rising_edge(clk) then r_reg <= r_next; end if; end process;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

170

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK --konkurrens with-select hozzrendelse az kontrolllhat lptetshez, -- next-state logika with ctrl select r_next <= r_reg r_reg(N-2 downto 0) & d(0) d -- kimenet q <= r_reg; when "00", --helyben marad when "01", --shift balra 1-bittel; when others; -- prhuzamos betlts

d(N-1) & r_reg(N-1 downto 1) when "10", --shift jobbra 1-bittel;

end behav;

Szintzis sorn lthat hogy a kvetkez llapot logika (r_next) egy 4-1 mux-ot hasznl a megfelel bemenetek kivlasztshoz. Tovbbi feladatknt tervezzen a fenti plda alapjn egy N-bites Barrel Shift regiszter, amelyben M pozcit lehet lptetni, attl fggen hogy a kapcsolkon keresztl milyen irnyt (jobbra, balra, helyben marad, vagy ppen prhuzamosan betlt) engedlyeznk. Szimullja le a viselkedst ISim szimultor segtsgvel.

Tovbbi feladatok
1.) Az elz pldk mindegyikhez Hagyomnyos N-bites prhuzamos betlts, s kiolvass regiszter Hagyomnyos N-bites lptet (shift) regiszter, soros betltssel s kiolvasssal Univerzlis N-bites lptet (Barrel-shift) regiszter, prhuzamos/soros betltssel s kiolvasssal Modulo-m N-bites binris szmll tervezzen kln-kln tesztpadot, s szimullja le a viselkedsket a Xilinx ISim szimultor segtsgvel! 2.) Szintn az elz pldk mindegyikt szintetizlja le, majd fizikailag implementlja FPGA ramkrre. Generljon letlthet bitfjlokat, s ellenrizze mkdsket az eszkzn. Segtsg: a knyszerfelttelek (.ucf) megadshoz hasznlja a Digilent gyrt ltal adott .ucf llomnyt a benne lv paramterekkel. Ezt felhasznlva szerkesszen az egyes lbakhoz knyszerfeltteleket. Hasznlja a nyom gombokat, kaplcsolkat (pl. a szmll szinkron trlshez, illetve a lptets irnyhoz, adatok prhuzamos betltshez stb.)

Regiszter tmbk
A regiszter tmbk (register file, register bank) olyan sszetett trol elemek, amelyek elemi n-bit szlessg regiszterek lineris tmbjbl (gyjtemnybl) llnak. Definijunk egy olyan regiszter tmbt, amelynek egy bemeneti adat portja, egy kimeneti adat portja, valamint a szokvnyos mdon egyetlen rsi cme, s egy olvassi cme van, ezeket jelljk rendre: w_data, r_data, w_addr, s r_addr jelekkel. Legyen WIDTH generic az egyes regiszterek
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.6. SZEKVENCILIS HLZATOK

171

bitszlessge, mg ADDR generic pedig a regisztertmb cmvonalnak szlessge. Ezltal sszesen 2^ADDRWIDTH bit kapacits regiszter bankot tudunk elrni. Az egyes regiszterek hasznljanak aszinkron reset, illetve szinkron engedlyez jeleket. A regiszter bank felptshez elszr egy WIDTH bitszlessg std_logic_vector-okbl ll s 2^ADDR nagysg tmbtpust definiljunk, reg_file_type nven. Majd ezt a sajt 2D-tmbtpust hasznljuk fel egy array_reg nev tmb, mint bels jel deklarcijhoz, amely a regiszterbe trtn bershoz, illetve kiolvasshoz szksges. A regiszter tmb lerst szolgl lehetsges VHDL lers a kvetkez:
-- regiszter tmb

library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all;

entity reg_file is generic( WIDTH: integer:=8; ADDR : integer:=2 ); port( clk, reset: in std_logic; wr_en: in std_logic; w_addr, r_addr: in std_logic_vector (ADDR-1 downto 0); w_data: in std_logic_vector (WIDTH-1 downto 0); r_data: out std_logic_vector (WIDTH-1 downto 0) ); end reg_file; --bitek szma az egyes regiszterekben --cm bitek szma

architecture behav of reg_file is type reg_file_type is array (2**ADDR-1 downto 0) of std_logic_vector(WIDTH-1 downto 0); signal array_reg: reg_file_type; begin process(clk,reset) begin if (reset='1') then array_reg <= (others=>(others=>'0')); elsif (clk'event and clk='1') then if wr_en='1' then

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

172 -- RSI port

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

array_reg(to_integer(unsigned(w_addr))) <= w_data; end if; end if; end process; -- OLVASSI port r_data <= array_reg(to_integer(unsigned(r_addr))); end behav;

Megjegyeznnk, mivel a 2D-tmb indexelse integer tpust felttelez, ezrt a cmek (w_addr, r_addr) explicit tpus konverzijra van szksg kt lpsben: elszr eljel nlkliv, majd pedig integerr konvertljuk a cmeket a tmb hozzrendelshez.

FSM: Vges llapot Automata modellek Szekvencilis hlzatok klasszikus Mealy, Moore modelljei
Az FSM kifejezs (Finite State Machine) vges llapot automata modellt jelent, amelynek kt fontos reprezentnsa a Mealy, illetve Moore modellek, amelyeket a szinkron sorrendi hlzatok tervezse sorn elszeretettel alkalmaznak.
X1 X2 X3 Z1 Z2 Z3

Kombincis Logikai Hlzat


Xn Y(k) Y(k+1)

Kimeneti Dekdol logika

Zm

llapot regiszter

a.) Mealy modell


X1 X2 X3 Z1 Z2 Z3

Xn

Kombincis Logikai Hlzat

Y(k+1)

llapot regiszter

Kimeneti Dekdol logika

Y(k)

Zm

b.) Moore modell 2.19. bra: Szinkron szekvencilis hlzatok Mealy s Moore fle alap modelljei
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.6. SZEKVENCILIS HLZATOK

173

A kvetkez sszehasonltsban a szekvencilis hlzatok ezen klasszikus alapmodelljeit ismerhetjk meg rviden. A kt automata modell kztti lnyeges klnbsg a kimenetek (Z) ellltsban van. Mg Mealy esetben a kimenetek kzvetlenl fggenek az aktulis bemeneti kombincik, illetve a visszacsatolt aktulis llapotok egyttes rtkeitl, addig a Moore modell esetn a bementeket csak kzvetett mdon (s nem kzvetlenl) befolysoljk a kimenetek ellltst. Azaz Moore modell esetben a kimeneteket az aktulisan eltrolt llapot rtktl (present state) kapunk. Ezltal a kimenetek s az llapotok kztt fellp szinkronizltlansgbl add problma megszntethet. A kvetkez 2.19. bra a klasszikus Mealy, illetve Moore-fle szekvencilis ramkri modellek blokkdiagram szint felptst mutatjk:

Kombinlt FSM modell: Mealy, Moore


A fenti 2.19. a.) s b.) brkon a Kombincis Logikai Hlzat felel a soron kvetkez Y(k+1) llapotok ellltsrt, ezrt hvjk kvetkez llapot (Next State) logikai blokknak is. Szmos szakirodalomban [ASHENDEN], [CHU] lnek azzal a lehetsggel is, hogy a kt FSM sorrendi hlzati modellt egyetlen komplex ramkri modellel adjk meg, lsd kvetkez 2.20. bra.
kls bemeneti kombincik Xn Mealy Kimeneti Aktulis llapot
(Dekdol)

Mealy kimenetek Zmealy

Kvetkez llapot

logika

Kombincis Logikai Hlzat


(kvetkez llapotot elllt)

Y(k+1)

llapot regiszter
Moore Kimeneti
(Dekdol)

Moore kimenetek Zmoore

Y(k) visszacsatols

logika

2.20. bra: Kombinlt FSM modell: Mealy, Moore esetre

FSM mkdsnek szemlletes brzolsi formi Mealy, Moore modellekre


Az FSM automata modelleket szemlletes mdon ltalban klnbz grafikus llapot diagramok segtsgvel, vagy az n. ASM (Algorithmic State Machine Chart algoritmikus llapotgp) diagramok megadsval lehet reprezentlni. Mindegyik esetben a bemeneteket, kimeneteket, llapotokat s llapot tmeneteket (transition) is tudjuk brzolni. Mg a hagyomnyos llapot diagram sokkal tmrebb megadsi mdot tesz lehehetv, fleg egyszerbb sorrendi hlzatok mkdsnek lersra; addg az ASM diagram felptse sszetettebb, s rszletesebb ler jelleget lt, amely egyben azt is jelenti, hogy sokkal bonyolultabb feladatok lerst is biztostja (pl. llapot tmenetek felttelei, akcik sorrendje stb. is szemlltethet). De a kt diagram termszetesen ekvivalens mdon azonos viselkedst kell, hogy meghatrozzon. A hagyomnyos llapotdiagram, illetve ASM diagramm jellsei s paramterei a kvetkez brn adottak (2.21. bra):

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

174

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Mo: Moore modell kimenete Me: Mealy modell kimenete

llapot bemenete

llapot nv Mo <= rtk

Mo: Moore modell kimenete Me: Mealy modell kimenete llapot nv Mo <= rtk Logikai kifejezs / Me <= rtk Logikai kifejezs / me <= rtk

Igaz Boolean felttel

Hamis

Me <= rtk

Kvetkez llapot

Kvetkez llapot

Kimenet a kvetkez ASM llapothoz

Kimenet a kvetkez ASM llapothoz

a.) llapotdiagram

b.) ASM-diagram

2.21. bra: llapotdiagram s ASM-diagram egyetlen llapotnak paramterei, fontosabb jellsei Tekintsk a kvetkez 2.22. bra szerinti pldt (hagyomnyos s ASM-diagram esetre egyarnt):

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.6. SZEKVENCILIS HLZATOK


x1

175

y0 z1<=1'

x1 x2 / z0 <= 1'

x1

x1 x2
y2

y1 z1<=1'

x1

a.) llapotdiagram
Mo: Moore modell kimenete Me: Mealy modell kimenete

y0
Z1 <= 1

Igaz

Hamis

X1 = 1'

Igaz

Hamis X2 = 1'

Igaz

Z0 <= 1

y1
Z1 <= 1

y2

Igaz X1 = 1'

Hamis

b.) ASM (algoritmikus llapotdiagram) 2.22. bra: Hagyomnyos llapotdiagram, illetve ASM diagram lehetsges megadsi mdja
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

176

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Az FSM modell egyes llapotait a felsorolt, n. enumerlt VHDL tpussal adjuk meg, amely sajt state_type tpust definilva bels jeleket adhatunk meg (state_reg, illetve state_next):
type state_type is (y0, y1, y2); --tpus deklarci --bels jelek

signal state_reg, state_next: eg_state_type;

A fenti llapotdiagramon, illetve ASM diagramon brzolt FSM modell Mealy, illetve Moore modell szerinti szrmaztatst a kvetkez VHDL lersok mutatjk. A kt eset kztti legfontosabb klnbsg termszetesen a kvetkez llapot (next-state) logika ellltsban van: mint ismeretes Mealy modell esetn a bemenetek s az llapotok is egyttesen befolysoljk a kimenet ellltst, mg Moore modellnl mindig csak az aktulis llapotokbl kapjuk a kimenetetek rtkeit.
-- Mealy modell VHDL lersa llapot diagram alapjn library ieee; use ieee.std_logic_1164.all; entity fsm_mealy is port( clk, reset: in std_logic; x1, x2: in std_logic; z0, z1: out std_logic ); end fsm_mealy; architecture arch of fsm_mealy is --egyedi felsorolt/enumerlt tpus deklarcija, s defincija az -- llapotok megadshoz: y0 = 0, y1 = 1, y2 = 2 type state_type is (y0, y1, y2); signal state_reg, state_next: state_type; begin -- llapot regiszter process(clk, reset) begin if (reset='1') then state_reg <= y0; elsif (clk'event and clk='1') then state_reg <= state_next; end if; end process; -- next-state logika case-when szerkezettel. Lerja, hogy melyik -- llapotbl, mely lehetsges llapotba juthatunk process(state_reg, x1, x2) www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.6. SZEKVENCILIS HLZATOK

177

begin case state_reg is --y0 llapot when y0 => if x1='1' then if x2='1' then state_next <= y2; else state_next <= y1; end if; else state_next <= y0; end if; --y1 llapot when y1 => if (x1='1') then state_next <= y0; else state_next <= y1; end if; --y2 llapot when y2 => state_next <= y0; end case; end process; -- Mealy kimeneti logika. z --itt az allapottol s a bemenetektl direkt mdon fgg a kimenet! process(state_reg, x1, x2) begin case state_reg is when y0 => if (x1='1') and (x2='1') then z0 <= '1'; else z0 <= '0'; end if; when y1 | y2 => z0 <= '0'; end case; end process; end arch;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

178

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

A kvetkez VHDL forrs pedig az llapotdiagram, vagy ASM diagram Moore modell szerint lerst szemllteti:
-- Moore modell VHDL lersa llapot diagram alapjn library ieee; use ieee.std_logic_1164.all; entity fsm_moore is port( clk, reset: in std_logic; x1, x2: in std_logic; z0, z1: out std_logic ); end fsm_moore;

architecture arch of fsm_moore is --egyedi felsorolt/enumerlt tpus deklarcija, s defincija az -- llapotok megadshoz: y0 = 0, y1 = 1, y2 = 2 begin type state_type is (y0, y1, y2); signal state_reg, state_next: state_type; begin -- llapot regiszter process(clk, reset) begin if (reset='1') then state_reg <= y0; elsif (clk'event and clk='1') then state_reg <= state_next; end if; end process;

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.6. SZEKVENCILIS HLZATOK

179

-- next-state logika case-when szerkezettel. Lerja, hogy melyik -- llapotbl, mely lehetsges llapotba juthatunk process(state_reg, x1, x2) begin case state_reg is --y0 llapot when y0 => if x1='1' then if x2='1' then state_next <= y2; else state_next <= y1; end if; else state_next <= y0; end if; --y1 llapot when y1 => if (x1='1') then state_next <= y0; else state_next <= y1; end if; --y2 llapot when y2 => state_next <= y0; end case; end process; -- Moore kimeneti logika --Moore eset: csak az aktulis allapottl fgg direkt mdon a kimenet! process(state_reg) begin case state_reg is when y0|y1 => z1 <= '0'; when y2 => z1 <= '1'; end case; end process; end arch;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

180

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

2.7. Tovbbi pldaprogramok VHDL-ben


Feladat 1: Hagyomnyos N-bites binris szmll s szimulcija
A Spartan3E FPGA a Digilent Nexys-2 fejlesztkrtya 50 MHz-es kristly osszcilltorrl kapja az rajelet a B8-as lbon keresztl (lsd Digilent Nexys2 Reference Manual [DIGILENT], [NEXYS2]). Az .ucf fjlban a knyszerfelttelknt (constraints) megadott periddus idt ezrt 20ns ra kell belltani. A jegyzetben a legtbb pldnl pontosan ennek a kls 50 MHz-es rajelnek a hasznlatt felttelezzk a szintetizls sorn. Az FPGA alap begyazott rendszerek tervezsi feladatai sorn azonban felmerlhet az igny ms rajelek, valamint alacsonyabb rajel frekvencik belltsra klnbz perifrk hasznlata esetn. Ez tbb mdon is trtnhet: Xilinx CoreGen genertor segtsgvel egy DCM-et hasznlva a bemen rajelbl (esetnkben 50MHz) tetszleges kimen rajel(eke)t llthatunk el, mivel az rajelek szorzsra, osztsra, fzistolsra is lehetsg van. Elre definilt VHDL nyelvi templatek segtsgvel: Xilinx ISE Edit men Language Templates Device Primitive Instantiation Spartan-3E Clock Components Digital Cloxk (DCM_SP). Ebben az esetben a Spartan3E eszkz primitvet hvunk meg, amelynek forrskdja beilleszthet egy VHDL forrsba (Valjban Xilinx CoreGenerator is egy ilyen nyelvi templatet / primitvet generl). Alacsonyabb rajelet egyszerbben is el tudunk lltani, a bejv (esetnkben 50 MHz) rajel folyamatos leosztsval, amelyet egy N-bites szmll ltrehozsval tudunk legegyszerbben megvalstani. Most erre nznk egy pldt. Ebben a feladatban az N-bites szmllnknak legyen a neve counterN_bit, s legyen kt bemenete: egy clk rajel, illetve egy clr trl std_logic bemenet, valamint egy q kimenete, amely N-bites sdt_logic_vector(N-1 downto 0) tpus, illetve egy max_tick kimenete, amely a szmll tfordulsa eltt a maximlis rtk elrst jelzi (std_logic tpus). Hasznljunk generic tpust az N rtknek megadshoz, s legyen N=4. Az N=4 bites szmll 0000 1111 ig szmol, majd tfordul (wrap-around), s jbl 0000-tl kezdve folytatja a szmll lptetst. Ekkor az N bites szmll mkdse a kvetkez VHDL lerssal adhat meg:

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.7. TOVBBI PLDAPROGRAMOK VHDL-BEN

181

-- hagyomnyos N-bites binris szmll library IEEE; use IEEE.STD_LOGIC_1164.all; USE ieee.numeric_std.ALL; entity counterN_bit is generic(N : integer := 4); port( clr : in STD_LOGIC; clk : in STD_LOGIC; max_tick : out STD_LOGIC; q : out STD_LOGIC_VECTOR(N-1 downto 0) ); end counterN_bit; architecture behav of counterN_bit is signal count_reg: unsigned(N-1 downto 0); signal count_next: unsigned(N-1 downto 0); begin process(clk, clr) begin if clr = '1' then count_reg <= (others => '0'); elsif clk'event and clk = '1' then count_reg <= count_next; end if; end process; --kovetkezo allapot count_next <= count_reg + 1; --kimeneti logika q <= STD_LOGIC_VECTOR(count_reg); max_tick <= '1' when count_reg = (2**N-1) else end behav; '0' ;

Megjegyzs: nyomatkosts vgett a _next kulcsszval a kvetkez llapot rtkt, mg _reg kulcsszval az aktulis llapot rtkt jelltjk, bels jelekknt (signal) megadva. Szimulci: tervezznk egy tesztpad-ot (counterN_bit_tb nven), amelybe az elz counterN_bit entitst, mint legmagasabb szint modult pldnyostjuk, s adjunk a bemeneti jeleire gerjesztst (clk, rst), ahhoz, hogy a mkdst vizsglhassuk. Teszteljk a VHDL lers viselkedst a Xilinx ISim szimultorban. A konstans rajel peridusnak adjuk meg 20 ns idegysget (~ 50 MHz a szimulcis freki is), mg a stim_process()-be helyezzk el a gerjesztseket.
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

182

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

-- Tesztgy a CounterN szmllhoz LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY counterN_bit_tb IS END counterN_bit_tb; ARCHITECTURE behavior OF counterN_bit_tb IS -- Component deklarci COMPONENT counterN_bit generic(N : integer :=8); port( clr : IN clk : IN q : OUT ); END COMPONENT; std_logic; std_logic; std_logic_vector(N-1 downto 0) Unit Under Test (UUT) pldnyostshoz

max_tick : OUT std_logic;

--bemenetek signal clr : std_logic := '0'; signal clk : std_logic := '0'; --kimenetek signal max_tick : std_logic; signal q : std_logic_vector(7 downto 0); -- Clock_periodus def: fizikai tipus deklarci constant clk_period : time := 20 ns; BEGIN -- pldnyosts the Unit Under Test (UUT) uut: counterN_bit --felldefinilja az alacsonybb hierarchiban lv N rtkt generic map(N => 8) PORT MAP ( clr => clr, clk => clk, www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.7. TOVBBI PLDAPROGRAMOK VHDL-BEN

183

max_tick => max_tick, q => q ); -- Clock process definicik clk_process :process begin clk <= '0'; wait for clk_period/2; clk <= '1'; wait for clk_period/2; end process; -- Stimulus process - gerjesztsek stim_proc: process begin -- hold reset state for 100 ns. clr <= '1'; wait for 100 ns; -- insert stimulus here clr <= '0'; wait for clk_period*10;

wait; end process; END;

A szimulcis teszt sorn kapott hullmforma lthat a kvetkez 2.23. brn:

2.23. bra: CounterN szmll viselkedsi szimulcija sorn kapott hullmalakok


Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

184

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Vizsglat: Az ISim szimultorban a q(7:0) jelre a jobb egrgombbal kattintva egy legrdl men jelenik meg, amelybl a Radix -> Hexadecimal kifejezst kell kivlasztani. Ekkor a N=8-bites szmll q[7:0] adat kimenetei az alaprtelmezett binris formtum helyett hexadecimlis formtumban kerlnek brzolsra. A tesztet nem elg az alaprtelmezett 1000 ns-ig futtatni, hanem a szimultor futsi idejnek kb. 5200 ns-os idegysget kell belltani (mivel 100 ns reset + 256 * 20 ns mg eljut a szmll vgig: 00FF). Ekkor a max_tick rtke 1 lesz, jelezve, hogy elrtk a maximlis rtkt a szmllnak. Az is lthat, amikor elrjk az FF vgrtket (8-bit esetn), akkor tfordul a szmll, s ismt 00-tl kezdi egyesvel nvelni (inkrementlni) az rtkeket, ahogy azt a helyes mkds szerint is elvrtuk. Implementci: implementljuk a fenti tervet, majd tltsk le az Nexys-2 FPGA-ra, felhasznlva a korbban trgyalt lpseket (lsd 2.4. fejezet). Ehhez hasznljuk bemenetknt clearnek a btn(0) nyomgombot, illetve clk-nak a kls 50 MHz-es rajelet (B8 lb), valamint a q(7:0) kimeneteket kssk r a megfelel Led(7:0) lbakra. Ezeket a knyszerfelttelek megfelel belltsval tudjuk megtenni (lsd korbban .ucf fjl belltsai). Az implementlt tervet tltsk fel az FPGA-ra, s vizsgljuk meg a mkdst.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.7. TOVBBI PLDAPROGRAMOK VHDL-BEN

185

Feladat 2: Hagyomnyos N-bites binris szmll mkdtetse osztott rajel hasznlatval, szimulcival, implementcival
Megjegyzs: mivel a kls rajel 50MHz volt, ezrt 20 ns-onknt vltoznak a LED(7:0)-ek llapotai. Az elz pldnkban teht folyamatosan nagy frekvencival vibrl LED kijelzket, nem pedig egyms utni lpsekben a szmll nvekedsnek megfelel, de lassan felvillan LED fnyeket lthattunk. Felmerl a krds, hogyan lehet mrskelni a kimeneti jelek vltozsait? Vlasz ennek megoldsra a kvetkez: 1. egyrszt egy rajel osztt (clk_div) kell VHDL-ben realizlni, majd pedig 2. a megfelelen leosztott rajelet (azaz a clk_div entits kimenett) az N-bites binris szmll rajel bemenethez kell ktni. Ezutn mr a LED kijelzkn keresztl az emberi szemmel is rzkelhet, lassan vltoz szmll mkdst lthatjuk. 1.) rajel leosztsra (clock division) ktfle lehetsg is addik: a.) Egyik lehetsg a Xilinx CoreGenerator nev programjban kivlasztunk s legenerlunk egy DCM_SP blokkot Spartan-3E FPGA-ra (IP Catalog FPGA Features and Design Clocking SPartan3E Single DCM_SP). Ebben az esetben azonban csak 5 MHz 311 MHz kztti rtket vlaszthatunk a kimeneti, osztott rajelnek (ami a feladatunk szempontjbl nem megfelel, amennyiben msodpercenknti jelvltst szeretnnk elrni a LED kimeneteken!!). Radsul ennek a DCM_SP blokknak az erforrs foglalsa is magasabb (1 DCM + nmi logikai erforrst is allokl). Ez a megolds olyan alkalmazsok esetn lehet kzenfekv, amikor tbbfle, s magasabb kimeneti rajelet szeretnnk ellltani, vagy bufferelt rajel(eket)t, illetve ha egy bejv kls rajelhez akarjuk szinkronizlni (PLL Phase Locked Loop) az ltalunk ltrehozott ramkri terveket. b.) Elre definilt VHDL nyelvi templatek / primitvek kivlasztsa s begyazsa a VHDL forrsainkba (Xilinx ISE Edit men Language Templates), ezzel ekvivalens, ha az ikonsoron a Villanykrte ikont vlasztjuk ki c.) Egy tovbbi lehetsges, s a mostani feladat szempontjbl egyszerbb s optimlisabb megolds is, ha egy nagy bitszlessg (N) binris szmllt hasznlunk a bejv rajel leosztsra. Jelen feladatban a c.) megvalstsi md szerint, teht egy binris szmllt hasznlunk az rajel leosztsra. Tekintsk a q(i) kimeneteit egy szmllnak, ahol az i=0 esetn a q(0) egy felezett rajelet llt el az els lpsben (mivel lehetsges rtkek 1 biten a 0 illetve 1). Ezltal, ha egy szmllt hasznlunk az rajel folyamatos leosztsra, akkor az i. lpsben a kimeneti osztott rajel
q (i ) : fi = f 2
i +1

(2.3)

frekvencij lesz. Ha pldul kzelten ~ 1 msodpercenknt (0.745 Hz) szeretnnk az rajel-osztknt hasznlt szmll kimenett belltani, amivel az N-bites binris szmllt
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

186

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

sszekapcsoljuk, akkor q(25) lpsig, azaz 26-bites szmllt kell tervezni. A szmllk rtkeinek, az rajelek, illetve peridus idk belltst foglalja ssze a kvetkez 2.13. tblzat: 2.13. tblzat: Az szmll konfigurlhat kimenete az rajel osztshoz
Frekvencia [Hz] 50 000000 25000000 12500000 6250000 3125000 1562500 781250 390625 195312.5 97656.25 48828.13 24414.06 12207.03 6103.52 3051.76 1525.88 762.94 381.47 190.73 95.37 47.68 23.84 11.92 5.96 2.98 1.49 0.745 Peridus [ms] 0.00002 0.00004 0.00008 0.00016 0.00032 0.00064 0.00128 0.00256 0.00512 0.01024 0.02048 0.04096 0.08192 0.16384 0.32768 0.65536 1.31072 2.62144 5.24288 10.48576 20.97152 41.94304 83.88608 167.77216 335.54432 671.08864 1342.17728

q(i) i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Els lpsknt teht egy 26-bites szmllt (q(25)) kimenettel kell tervezni a VHDL nyelven ahhoz, hogy a bejv 50 MHz-es rajelbl a kimeneten ~1 Hz-es rajelet kapjunk. Az entitsnak a neve legyen clk_div, amelynek VHDL lersa a kvetkez:

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.7. TOVBBI PLDAPROGRAMOK VHDL-BEN

187

-- N bites rajel oszt ramkr library IEEE; use IEEE.STD_LOGIC_1164.all; USE ieee.numeric_std.ALL;

entity clk_div is generic(N : integer := 26); port( clr : in STD_LOGIC; mclk : in STD_LOGIC; clk_1_hz : out STD_LOGIC ); end clk_div;

architecture behav of clk_div is signal count_reg: unsigned(N-1 downto 0); signal count_next: unsigned(N-1 downto 0); signal q : STD_LOGIC_VECTOR(N-1 downto 0); begin process(mclk, clr) begin if clr = '1' then count_reg <= (others => '0'); elsif mclk'event and mclk = '1' then count_reg <= count_next; end if; end process; --kovetkezo allapot meghatrozsa konkurens when-else utastssal count_next <= count_reg + 1; --kimeneti logika q <= STD_LOGIC_VECTOR(count_reg); clk_1_hz <= q(N-1); -- ~1 Hz generlt kimeneti rajel end behav;

Szimulci: egy fontos megjegyzs az rajel oszt ramkr (clk_div) szimulcijhoz. Mivel a q(i) bitszlessge ebben az esetben N=26 ,amely igen nagy rtket jelent ciklus pontos szimulci esetn (kis rajelet szeretnnk ellltni, azaz nagy peridus idej jelet). A futtatand szimulcis id ebben a feladatban legalbb ~50 milli ciklus x 20 ns = ~ 1 secra kellene az ISim szimultor futsi idejt belltani ahhoz, hogy a clk_1hz kimeneten legalbb egy 1Hz-es frekvencij rajel ciklus megjelenjen. Ezt a szmtgpen futtatva igen
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

188

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

idignyes lehet (fknt sok szimulcis jel esetn), amely akr kb. nhny perces futtatsi tesztet is jelenthet. Ezrt rdemesebb lehet a q(i) bitszlessgt, N rtkt kisebbre, pl: N .= 4-re belltani direkt mdon a clk_div generic deklarcijban. Majd ezutn kell sszelltani a tesztgyat, bele helyezni a legfelsbb szint, jelen esetben clk_div entitst s elindtani a szimulcit. (A vgn termszetesen a bitfjl generlsa sorn ne felejtsk el visszalltani az N = 26 rtket). Megjegyeznnk tovbb, hogy egy lehetsges alternatva a szimulcis futtats gyorstsra, az ISim szimultor felbontsnak (resolution), vagyis a szimulcis idegysg finomsgnak a belltsa: az alaprtken definilt [ps]-rl, durvbb [ns]-os, vagy esetleg [us] felbontsokra (Time Resolution for simulation is 1ps.). Ezekrl tovbbi rszletes informcit az ISim lersban olvashatunk [ISIM]. 2.) Az 1 Hz-es rajellel mkd N-bites binris szmll blokkszint ramkri megvalstsa a kvetkez 2.24. brn lthat:
clk_div Clk_1Hz Clk_div_CounterN_top counterN_bit q(N-1:0) Led(7:0)
mclk clr

mclk clr uut1

clk clr uut2

2.24. bra: Osztott rajellel mkdtetett N-bites binris szmll blokkszint felptse Ahogy lthat, a clk_div modul a bejv kls 50 MHz (FPGA B8 lbon [NEXYS2]) rajelet leosztja, s a kimenetn clk_1hz mr egy 1 Hz es rajelet kapunk. Ezt az rajelet kell egy bels jellel (int_clk) sszektni a counterN_bit modullal, amelyet mr korbban ismertetettnk hagyomnyos N-bites binris szmll nven. A legfels szint entitsnak a neve legyen clk_div_counterN_top.vhd. Teht VHDL lers a kvetkez:
library IEEE; use IEEE.std_logic_1164.all;

entity clk_div_with_counterN_top is generic (N : integer := 8); port( mclk : in std_logic; clr : in STD_LOGIC; LED : out std_logic_vector(N-1 downto 0) ); end clk_div_with_counterN_top; www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.7. TOVBBI PLDAPROGRAMOK VHDL-BEN

189

architecture behav of clk_div_with_counterN_top is component clk_div port ( clr : in std_logic; mclk : in std_logic; clk_1hz : out std_logic ); end component;

component counterN_bit generic( port ( clk : in std_logic; clr : in std_logic; max_tick : out STD_LOGIC; q : out std_logic_vector(N-1 downto 0) ); end component; signal int_clk : std_logic := '0'; --bels signal a clk sszektshez begin uut1 : clk_div port map( clr => clr, mclk => mclk, clk_1hz => int_clk); N : INTEGER := 8 );

uut2 : counterN_bit generic map ( N => 8) port map( clk => int_clk, clr => clr, max_tick => open, q => LED );

end behav;

A fenti VHDL lersban, mivel a counterN_bit nev pldnyostott entits max_tick portjt nem akarjuk FPGA lbra kiktni, ezrt kell megadnunk az open kulcsszt (ez a kulcssz a kimeneti portot szabadon hagyja, azaz nem szksges hozz ktni ms jeleket, vagy FPGA lbat sem). Az uut1 (unit under test) nven pldnyostott clk_div entits illetve az uut2 nven pldnyostott counterN_bit entits kztt a bels int_clk jel teremt kapcsolatot, amely tulajdonkppen a kt blokk kztt hzt leosztott rajelet jelenti.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

190

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

(Megjegyeznm, hogy rdemes kisebbre lltani a clk_div szmll N generic rtkt (N= 26 helyett pl. N:=2-re). Ekkor a szimultor futtatsi ideje, ha a teljes vizsglatot meg szeretnnk tenni, lervidl.). Ekkor az ISim szimultorban a kvetkez hullmforma alakot kapjuk:

2.25. bra: a leosztott rajellel mkdtetett CounterN szmll viselkedsi szimulcija sorn kapott hullmalakok (itt N=2, azaz 4 ciklus ideig tart egy-egy nvekmny) Implementci: implementljuk a tervet, majd tltsk le az Nexys-2 FPGA-ra, felhasznlva a korbban trgyalt lpseket. Ehhez hasznljuk bemenetknt clr-nek a btn(0) nyomgombot, illetve mclk-nak (master clock, nem azonos az osztott clk-val!) a kls 50 MHz-es rajelet (B8 lb), valamint a q(7:0) kimeneteket kssk r a megfelel Led(7:0) lbakra. Ezeket a knyszerfelttelek megfelel belltsval tudjuk megtenni (lsd korbban trgyalt .ucf fjl), a gyri Digilent Nexys2_1200General.ucf fjl paramterei alapjn. Az implementlt tervet tltsk fel az FPGA-ra, s ellenzzzk a mkdst. A Led-eknek mostmr kb. 1 secos ksleltetssel egyms utn kell felvillanniuk, ahogyan a szmll rtke nvekszik.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.7. TOVBBI PLDAPROGRAMOK VHDL-BEN

191

Feladat 3: Univerzlis N-bites binris szmll


Az univerzlis szmll, ahogy a neve is mutatja sokoldalbb alkalmazsi lehetsgeket rejt. Kls jelekkel vezrelve kpes lehet akr felfel, vagy lefel szmolni; megllthat, st bellthat egy inicializlt rtk, amelyrl a lptets elkezddhet, valamint kls szinkron sync_clr jel hatsra trlhet is. Ha jelezni szeretnnk a lefel szmls esetn is a szmll tfordulst a min_tick nven is be kell vezetni (tudjuk, hogy a max_tick a fels korltot jelzi). A kvnt mkds a biztostshoz az elz N-bites binris szmllt a kvetkez jelekkel kell kiegszteni: sync_clr, load, dir, min_tick. A dir jel (direction) a felfel, vagy lefel szmllst irnyt adja meg: dir = 1 felfel szmoljon, mg dir = 0 visszafel szmoljon. Load jel biztostja a szmll aktulis kezdrtknek prhuzamos betltst, amelyrl indulhat a szmols a dir-el megadott irny szerint lptetve. A szmll entits neve legyen: univ_counterN. Az univerzlis szmll legyen N=4 bites, generic-el megadva. A szmll VHDL lersa a kvetkez:
-- Univerzlis N-bites binris szmll library IEEE; use IEEE.STD_LOGIC_1164.all; USE ieee.numeric_std.ALL;

entity univ_counterN is generic(N : integer := 4); port( clr : in STD_LOGIC; clk : in STD_LOGIC; d: in std_logic_vector(N-1 downto 0);
syn_clr , load, dir : in STD_LOGIC;

max_tick, min_tick : out STD_LOGIC; q : out STD_LOGIC_VECTOR(N-1 downto 0) ); end univ_counterN;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

192

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

architecture behav of univ_counterN is signal count_reg: unsigned(N-1 downto 0); signal count_next: unsigned(N-1 downto 0); begin process(clk, clr) begin if clr = '1' then count_reg <= (others => '0'); elsif clk'event and clk = '1' then count_reg <= count_next; end if; end process; --kovetkezo allapot meghatrozsa konkurens when-else utastssal count_next <= (others =>'0') when syn_clr='1' else unsigned(d) count_reg + 1 count_reg - 1 count_reg; --kimeneti logika q <= STD_LOGIC_VECTOR(count_reg); max_tick <= '1' when count_reg = (2**N-1) else '0'; min_tick <= '1' when count_reg = 0 else '0'; end behav; when load='1' else when dir='1' else when dir='0' else

Szimulci s implementci: gyakorlsknt ehhez a feladathoz is ksztsnk egy tesztgyat, helyezzk el benne a szmllt, majd szimulljuk le a viselkedst ISim segtsgvel, vgl pedig implementljuk a tervet s tltsk le FPGA-ra.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.7. TOVBBI PLDAPROGRAMOK VHDL-BEN

193

Feladat 4: Modulo-m N-bites binris szmll


Tervezznk egy olyan n. modulo-m binris szmllt, amely 0-tl m1-ig szmol, majd pedig tfordul. A paramterezhet modulo-m szmll kt generic-et is hasznl: egyet a maradkos oszts meghatrozshoz (M), egyet pedig a bitszlessg megadshoz (N), s amelynek egyenlnek kell lennie log 2 M -el. A modulo-m szmll neve legyen
modulo_m_counter.

A szmll VHDL lersa a kvetkez, ahol az N=4, illetve M=10 (azaz 4-bites, modulo-10 szmll):
-- Modulo-m N-bites binris szmll library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all;

entity modulo_m_counter is generic( N: integer := 4; M: integer := 10 ); port( clk, reset: in std_logic; max_tick: out std_logic; q: out std_logic_vector(N-1 downto 0) ); end modulo_m_counter; -- szmll bitszlessge -- modulo-M

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

194

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

architecture behav of modulo_m_counter is signal count_reg: unsigned(N-1 downto 0); signal count_next: unsigned(N-1 downto 0); begin -- regiszter process(clk, reset) begin if (reset='1') then count_reg <= (others=>'0'); elsif rising_edge(clk) then count_reg <= count_next; end if; end process; -- next-state logikai, konkurens when-else rtkadssal count_next <= (others=>'0') when count_reg = (M-1) else count_reg + 1; -- kimeneti logika, konkurens rtkadsokkal q <= std_logic_vector(count_reg); max_tick <= '1' when count_reg=(M-1) else '0'; end behav;

A fenti kd szerint, amikor a modulo-M szmll elri az M 1-et tfordul, s j rtke 0 lesz, minden ms esetben nvekszik az rtke 1-el. Szimulci s implementci: gyakorlsknt ehhez a feladathoz is ksztsnk egy tesztgyat, helyezzk el benne a szmllt, majd szimulljuk le a viselkedst ISim segtsgvel, vgl pedig implementljuk a tervet s tltsk le FPGA-ra

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.7. TOVBBI PLDAPROGRAMOK VHDL-BEN

195

Feladat 5: Felfut-lt detektl ramkr Mealy esetben


Ebben a feladatban tervezznk meg s szimulljuk, valamint implementljuk egy Mealy modell szerint mkd felfut lt detektl ramkrt. A felfut-lt detektl ramkr egy olyan ptelem, amely 1 rajel ciklus ideig tart n.tskt, impulzust (tick) generl, amikor a bemenet 0 1 vltozst rzkeli. Ezt ltalban nem egy pedidikusan s gyorsan, hanem lassan vltakoz jel esetn alkalmazzk, pl. valamilyen trigger (indtimpulzus) esemny vizsglatra. Az entits nevnek adjuk meg: edge_detect_mealy. Az llapotgpnek kt llapota van, a zero, s a one, amely a nulls s egyes llapot mellett vizsglja a level (jelszint) rtknek vltozst. Az llapotokhoz sajt felsorolt tpust definilunk, s ezzel a tpussal kt bels jelet (state_reg, state_next), adunk meg.
level

zero

level

level / tick <= 1'

one

level

2.26. bra: Felfut lt detektl ramkr llapotdiagramja Mealy modell esetn A VHDL arra is lehetsget biztost, hogy ebben a feladatban a kvetkez llapot (nextstate logic) s kimeneti logikt egyetlen kombinlt process() lltsban, s nem kt elklnlt szekvencilis folyamatban adjuk meg (mint a korbbi pldkban):
-- felfut lt detektl ramkr mealy modellje library ieee; use ieee.std_logic_1164.all;

entity edge_detect_mealy is port( clk, reset: in std_logic; level: in std_logic; tick: out std_logic ); end edge_detect_mealy;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

196

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

architecture mealy_arch of edge_detect_mealy is --sajt felsorot tpus definicija: zero llapot, one llapotra -- zero = 0, one = 1 felsorolt tpus rtkei type state_type is (zero, one); signal state_reg, state_next: state_type; begin -- llapotregiszter process(clk,reset) begin if (reset='1') then state_reg <= zero; elsif (clk'event and clk='1') then state_reg <= state_next; end if; end process; -kvetkez llapot -- Mealy esetben s kimeneti logika

kombinlt

megvalstsa

process(state_reg,level) begin state_next <= state_reg; tick <= '0'; case state_reg is when zero=> if level= '1' then state_next <= one; tick <= '1'; end if; when one => if level= '0' then state_next <= zero; end if; end case; end process; end mealy_arch;

Szimulci s implementci: gyakorlsknt ehhez a feladathoz is ksztsnk egy tesztgyat, helyezzk el benne a edge_detect_mealy nven definilt entitsunkat majd szimulljuk le a viselkedst ISim segtsgvel, vgl pedig implementljuk a tervet, s tltsk le FPGA-ra,
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.7. TOVBBI PLDAPROGRAMOK VHDL-BEN

197

ahol a level, reset mint kls input jeleket kssk egy nyomogombra (vagy esetleg kapcsolra) a kimeneti tick jelet pedig a Led(0)-ra. Megjegyzs: ahhoz hogy a felvillans idtartama rzkelhet legyen, alkalmazzuk a korbban megismert clk_div rajel oszt ramkrt (valjban egy szmllt), amelynek leosztott rajel kimenett kssk be az l-detektl ramkr clk rajel bemenetre. Szimulcis eredmnyknt a kvetkezt kell kapni:

2.27. bra: Felfut lt detektl ramkr szimulcis eredmnye Mealy modell esetn

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

198

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Feladat 6: Felfut-lt detektl ramkr Moore esetben


Ebben a feladatban tervezznk meg s szimulljuk, valamint implementljuk Moore modell szerint a felfut-lt detektl ramkrt Az entits nevnek adjuk meg: edge_detect_moore. Az elz Moore modellhez kpest adjunk most meg hrom llapotot: (zero, one, edge), teht kln azt az llapotot is, amikor ppen felfut l van a vizsglt jel esetn.
level

zero

level level level


edge

tick <= 1'

level

one

level

2.28. bra: Felfut-lt detektl ramkr llapotdiagramja Moore modell esetn

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.7. TOVBBI PLDAPROGRAMOK VHDL-BEN

199

-- felfut lt detektl ramkr Moore modellje library ieee; use ieee.std_logic_1164.all;

entity edge_detect_moore is port( clk, reset: in std_logic; level: in std_logic; tick: out std_logic ); end edge_detect_moore;

architecture moore_arch of edge_detect_moore is --sajt felsorot tpus definicija: zero llapot, one llapotra --edge: l llapot -- zero = 0, edge = 1, one = 2 felsorolt tpus rtkei type state_type is (zero, edge, one); signal state_reg, state_next: state_type; begin -- llapotregiszter process(clk,reset) begin if (reset='1') then state_reg <= zero; elsif (clk'event and clk='1') then state_reg <= state_next; end if; end process;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

200

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

-- kvetkez llapot s kimeneti logika kombinlt megvalstsa -- Moore esetben process(state_reg,level) begin state_next <= state_reg; tick <= '0'; case state_reg is when zero=> if level= '1' then state_next <= edge; end if; when edge => tick <= '1'; if level= '1' then state_next <= one; else state_next <= zero; end if; when one => if level= '0' then state_next <= zero; end if; end case; end process; end moore_arch;

Szimulci s implementci: gyakorlsknt ehhez a feladathoz is ksztsnk egy tesztgyat, helyezzk el benne a edge_detect_moore nven definilt entitsunkat majd szimulljuk le a viselkedst ISim segtsgvel, vgl pedig implementljuk a tervet s tltsk le FPGA-ra, ahol a level, reset mint kls input jeleket kssk egy nyomogombra (vagy esetleg kapcsolra) a kimeneti tick jelet pedig a Led(0)-ra. Megjegyzs: ahhoz hogy a felvillans idtartama rzkelhet legyen, alkalmazzuk a korbban megismert clk_div rajel oszt ramkrt, amelynek leosztott rajel kimenett ksse be az ldetektl ramkr clk rajel bemenetre.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.7. TOVBBI PLDAPROGRAMOK VHDL-BEN

201

Feladat 7: Felfut-lt detektl ramkr megvalstsa egyszer kapu-szint strukturlis VHDL lerssal
Ebben a feladatban tervezznk meg a korbbi felfut-lt detektl ramkr egy strukturlis kapu-szint VHDL lerst a megadott 2.29. bra szerint, edge_detect_gate nven:
level d

q delay_reg

tick

clk reset

clk reset

2.29. bra: Felfut-lt detektl ramkr megadsa egyszer kapuszint kapcsolssal A korbbi Mealy, Moore fle FSM modell lerssal megadott felfut lt detektl ramkrt egy egyszerbb, kapuszint strukturlis VHDL lers formjban is meg lehet adni. Amikor pldul, az FSM zero llapotban van, s a bemeneti szint (level) 1 re vltozik, a kimenet is azonnal megvltozik (Mealy modell esetn). Az FSM ezutn one llapotba lp t, a clk jel kvetkez felfut lnek hatsra, majd pedig a kimenet (tick) is megvltozik. A jelterjedsi s megszlalsi idknek ksznheten mg a kvetkez felfut clk-rajel fzisban is a tick 1-es logikai rtken marad, mieltt visszallna 0-ra. A 2.29. brn lv kapuszint ramkri diagram bemenetre ha 0-t vagy 1-et adunk, az reprezentlja az FSM modell zero illetve one llapotait, azaz az elemi D-FF llapottbljnak mkdse szerint.
-- felfut lt detektl ramkr egyszer strukturlis kapuszint lersa library ieee; use ieee.std_logic_1164.all;

entity edge_detect_gate is port( clk, reset: in std_logic; level: in std_logic; tick: out std_logic ); end edge_detect_gate;

architecture gate_level_arch of edge_detect_gate is signal delay_reg: std_logic; begin

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

202

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK --itt nincsenek definilt llapotok -- ksleltet regiszter direkt mdon adott, amely megvalstja egy FSM -- one illetve zero allapotait. process(clk,reset) begin if (reset='1') then delay_reg <= '0'; elsif (clk'event and clk='1') then delay_reg <= level; end if; end process; -- dekdol/ kimeneti logika megvalstsa tick <= (not delay_reg) and level;

end gate_level_arch;

Szimulci s implementci: gyakorlsknt ehhez a feladathoz is ksztsnk egy tesztgyat, helyezzk el benne az edge_detect_gate nven definilt entitsunkat majd szimulljuk le a viselkedst az ISim segtsgvel, vgl pedig implementljuk a tervet s tltsk le FPGAra, ahol a level, reset mint kls input jeleket pedig kssk egy nyomgombra (vagy esetleg kapcsolra) a kimeneti tick jelet pedig a Led(0)-ra. Megjegyzs: ahhoz hogy a felvillans idtartama rzkelhet legyen, alkalmazzuk a korbban megismert clk_div rajel oszt ramkrt, amelynek leosztott rajel kimenett ksse be az ldetektl ramkr clk rajel bemenetre.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.8. KOMPLEX RENDSZEREK TERVEZSE VHDL SEGTSGVEL

203

2.8. Komplex rendszerek tervezse VHDL segtsgvel


A korbbi fejezetekben trgyalt egyszerbb VHDL lersokat felhasznlva, egyre nagyobb komplexits, s tbbszint hierarchival rendelkez digitlis rendszerek implementlhatk VHDL nyelven, klnbz programozhat digitlis ramkrk alkalmazsval. Minden esetben rdemes olyan modulokat tervezni, amelyeket a ksbbi fejlesztsek sorn is fel tudunk hasznlni: emiatt pldul rdemes lehet az I/O port-listkat minden hierarchia szinten egyeztetni azrt, hogy a komponens deklarciknl s pldnyostsoknl ne jelentsen problmt az elnevezsk, tpusuk, bitszlessgk stb. (Megjegyeznnk, hogy a bitszlessgek megadsra a korbban trgyalt generikusokat, vagy constant tpusokat lehet alkalmazni). A modularits vgett ebben a komplex feladatban a korbban trgyalt fontosabb VHDL nyelvi konstrukcikat, mint pldnyostott komponenseket hasznljuk fel. Egy konkrt pldn keresztl szemlltetjk a bonyolultabb rendszerek tervezst VHDLben: a VGA vezrl segtsgvel kimeneti kp generlsa, illetve a ksbbi 2.9. fejezetben a szabvnyos UART soros port segtsgvel adatok fogadst, s kldst vizsgljuk meg egy FPGA-s cleszkz s gazda szmtgp kztt.

2.8.1. Esettanulmny: VGA vezrl megvalstsa


Ahhoz hogy VHDL nyelven egy VGA-vezrlt meg tudjuk tervezni elszr a VGA szabvnyt, annak httert, s pontos idztst is tanulmnyoznunk kell. Az ismertetsre kerl legtbb bra az megtallhat Digilent Nexys-2 krtya [NEXYS2] referencia adatlapjban.

VGA szabvny
A VGA (Video Graphic Array) jeleket s idztsket a VESA (Video Electronics Standards Association) mint a szmtgpes megjelentssel foglalkoz legnagyobb elektronikai gyrtkat tmrt szabvnygyi szervezet dolgozta ki s fogadtatta el az 1980-as vek vgn [VESA], amely mra a szmtgpes grafika s megjelents terletn szles krben tmogatott szabvnny vlt. A VGA-vezrl tervezsekor az egyes idztsi paramterek belltst a VESA oldalrl is elrhetjk, amelyek tblzat formjban ingyenesen letlthetk. A VESA CVT Coordinated Video Timing Format v1.1 (CVT_d6r1.xls) olyan VGA megjelentsi formtumokat tartalmaz adatlap, amelybl a kvnt felbonts, s a vertiklis kpfrisstsi frekvencia alapjn generlhatk a szksges idztsi paramterek, amelyeket klnbz felbontsi mdok megadsakor sem kell feleslegesen. Ennek ellenre elfordulhat, hogy adott felbonts belltsa mellett kis mrtkben nvelni, vagy cskkenteni kell a szinkronizl jelek tblzatban megadott konkrt rtkekeit, azrt, hogy a monitoron a kisebb (1-2 pixeles) csszsokat korrigljuk. A mai VGA kijelzk (CRT/LCD) kpesek a klnbz kpfelbontsi mdokat akr automatikusan is kezelni, amelyeket a VGA vezrl-ramkr a klnbz idztsi paramterek megfelel hangolsval hatroz meg.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

204

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

CRT monitor mkdse


A kvetkez 2.30. bra egy hagyomnyos CRT (Cathode Ray Tube) katdsugrcsves monitor felptst mutatja, amelynek a funkcionlis mkdst hasznljk mindmig a VGA interfszek tervezsi feladatai sorn. Itt kell megemlteni, hogy a korai CRT, s a korszer LCD monitorok idztse s vezrl jelei hasonlan kezelhetek.
And (kperny) Katdsugrcs Eltrt tekercsek Rcs Elektron gyk

Katdsugr R, G, B jelek (gy fel)

VGA kbel Nagyfeszltsg Eltrtk and (>20KV) vezrlse Rcs vez. E.gy vez.

2.30. bra: hagyomnyos CRT monitor elvi felptse Az CRT monitor elvi felptsn is lthat, hogy az elektron gyk (vagy katdok az R-G-B komponensekre kln-kln) egy-egy fkuszlhat elektron nyalbot bocstanak ki, amelyek a vkuum csvn keresztl haladva vgl a fluoreszcens anyaggal bevont kpcs bels falnak tkznek, s fnyt emittlnak. A foszforeszkl anyaggal bevont kperny felletre ekzben ~ 20 kV-os andfeszltsg van kapcsolva. Az elektron gytl az andig megtett ton az elektron nyalbot szmos kls hats ri: szablyoz rcson kereszl, majd fggleges (vertiklis), illetve vzszintes (horizontlis) eltrt tekercsekkel szablyozzk, vezrlik az elektron sugr mozgst (pozcionlst). Ezek kzl a kt utbbi vezrl jel, nevezetesen a horizontlis, s vertiklis eltrtsek azok, amelyek pontos idztst kell elsdlegesen a VHDL-implementciban is megvalstani. A kpernyn az informci raszter minta szerint, tlsan jelenthet meg: horizontlisan balrl-jobbra, mg vertiklisan fentrl-lefel kell mozgatni, eltrteni a katd sugarakat. A kperny tartalmt mindig csak akkor frissthetjk jbl, amikor minden raszter ponton sorban vgighaladtunk. Termszetesen a nyalb jboli horizontlis vertiklis pozicionlsnak (azaz a sor vgrl a kvetkez sor elejre ugrsnak) is van nmi ideje, ezeket a szakirodalomban tbbflekppen retrace vagy blanking peridusoknak is szoks nevezni, amikor teht tnyleges informci nem jelenik meg a kpernyn. ltalnosan a kpfelbontst az elektron nyalb mrete, a nyalb frekvencia modulcija s a kpfrissts frekvencija egyttesen hatrozzk meg. A NM-es mret kpfelbonts esetn az N jelli a sorokat, mg M az oszlopokat. A kpi elemet pixelnek, vagy kppontnak nevezwww.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.8. KOMPLEX RENDSZEREK TERVEZSE VHDL SEGTSGVEL

205

zk. A mai tipikus kperny felontsok 320-1920 oszlopbl, illetve 200-1080 sorbl llnak (ahol 320200 a szabvnyos QVGA, mg 19201080 a HD-1080 felbontsokat jelentik). A mostani pldnkban egy szabvnyos VGA 640480 felbonts s 60Hz es kpfrisstsi belltssal implementljuka VGA vezrlt.

VGA port a Nexys-2 krtyn


A Digilent Nexys-2 krtyn a kvetkez bra szerint [NEXYS2] az R, G, B sznkomponenseket, illetve a HS, VS (horizontlis s vertiklis szinkron) jeleket kell csupn az FPGA lbai fel bektni (knyszerfelttelek megfelel megadsval .ucf fjlban). A VGA kimenet 8 sznkomponensbl ll, amelybl 3-3 a Red, illetve a Green, valamint 2- a Blue szncsatornt jelenti: ezrt a 8-bites vide jel segtsgvel 2^N, azaz egyszerre 256 klnbz sznrnyalatot tudunk egyidben megjelenteni. A tovbbi kt vezrl szinkron jel a Vertical Synch (VS), illetve a Horizontal Synch (HS) jeleket definilja. Ezek a jelek fizikailag egy szabvnyos DSub 15 lb analg VGA csatlakozra vannak bektve (lsd albbi 2.31. bra).

2.31. bra. VGA kimenet jelei s FPGA fizikai lbai kztti kapcsolat soros ellenllsokon keresztl ( Digilent Nexys-2 fejlesztkrtya [NEXYS2])

VGA szinkronizci
A VGA szinkronizl ramkr feladata, hogy az egyes video jelek idztst betartva megfelel idben generlja a vertiklis s horizontlis szinkron jeleket, amelyeket az FPGA lbain keresztl a VGA csatlakoz (DB15) fel egyms utn kld el. A h_sync horizontlis szinkron jel azt az idintervallumot specifiklja, mialatt a sugrnyalb balrl-jobbra vgigpsztz egy soron, mg a v_sync vertiklis szinkron jel azt az idegysget szabja meg, mialatt a sugrnyalb fentrl-lefel haladva vgigpsztz egy teljes, esestnkben most VGA felbonts kpkeretet (frame-t). A video_en jel ahhoz kell, hogy jelezzk, mikor van rvnyes, tnylegesen megjelenthet kpi-informci a psztzs sorn.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

206

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Vide rajel s szinkron jelek idztse


A 640480-as VGA felbontshoz ~25MHz-es vide rajelet (video clock-rate) kell belltani 60 Hz-es vertiklis s 60 KHz-es horizontlis frisstsi frekvencia mellett. Ezekhez a paramterekhez kell viszonytani a szinkronizlcis (timing) adatoknak a pontos belltsait, amelyeket akr a Nexys-2 gyrt oldalrl, akr a VESA szabvnygyi szervezet oldalrl rhetnk el [NEXYS2], [VESA]. Ez azt is jelenti egyben, hogy az FPGA 50 MHz-es kls bemeneti rajelt valamilyen mdon 25 MHz-re kell leosztani. Ktflekppen is megtehet ez: vagy egy rajel osztt ptnk szmll segtsgvel (lsd korbbi 2.7. fejezet Feladat 2.), vagy egy Xilinx DCM primitvet hasznlunk a tetszleges rajel ellltshoz Xilinx CoreGenerator segtsgvel. Jelenlegi pldnkban az els megvalstst kvetjk, teht egy egyszer rajel osztt ptnk N=1 bites szmll segtsgvel. A 640480 felbonts az aktv, azaz lthat tartomnyt (rgit) jeleti, amelyen kvl tallhat az n. nem-lthat (fekete rgi) tartomny, amikor a tekercsek s a sugrnyalbok megfelel bellsi idejt kell figyelembe venni. Teht valjban egy 800525 mret kpkockt kell kezelni, amelybl az aktv rgit a VGA 640480-as felbonts leszktett terlete jelenti. A VGA 640480 szabvny rajelknt 25 MHz-et kvekel meg, s a kvetkez paramterekkel kell szmolnunk: pn (pixel number) = 800 kppont / kpsor, ln (line number) = 525 kpsor / kpkocka, sn (screen number) = 60 kpkocka / msodperc. Ezekbl a paramterekbl a pixelek frisstsi gyakorisga a kvetkez mdon szmthat: ps (pixel_rate) = pn * ln * sn 25 milli kppont / msodperc.

Horizontlis szinkronizci
A h_sync a horizontlis szinkron jel, melynek teljes intervallumt 800 kppontra kell lltani a VGA szabvny szerint. A h_sync jelet egy specilis modulo-800 szmllval lehet megvalstani. A h_sync jel ellltst a teljes horizontlis tartomnyon bell a kvetkez fontosabb fzisokra lehet felosztani: T(h_total): az teljes idegysg, vagy ekvivalens pixelszm, amelybe mind a kperny lthat (aktv), mind pedig a nem lthat rgii is beletartoznak. (Megjegyzs: A horizontlis jelek szinkronizl paremterei esetn ezeket az idegysgeket mindig a velk ekvivalens kppont szmokkal (800 pixel) feleltetjk meg.) T(h_disp): megjelentsi (display) id, amely idegysg alatt a kperny aktv (lthat) tartomnyban a kppontok (640 pixel) megjelennek. T(h_pw): horizontlis impulzus id, amely idegysg alatt az elektronny a jobb oldalrl visszatr (retrace) a kperny bal oldalra. A video_en jelet ezen tartomny alatt inaktv jelszinten kell tartani a fekete, nem-lthat terlet miatt (96 pixel) T(h_fp): vertiklis front porch rtk: kpkocka jobboldali hatra, azaz T(h_pw) impulzus id eltti intervallum. A video_en jelet ezen front porch tartomny alatt inaktv jelszinten kell tartani a fekete, nem-lthat terlet miatt. (16 pixel)

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.8. KOMPLEX RENDSZEREK TERVEZSE VHDL SEGTSGVEL

207

T(h_bp): vertiklis back porch rtk: kpkocka baloldali hatra, azaz T(h_pw) impulzus id utni intervallum. A video_en jelet ezen back porch tartomny alatt inaktv jelszinten kell tartani a fekete, nem-lthat terlet miatt (48 pixel)

Aktv (lthat) terlet Nem lthat (fekete) terlet

Sugrnyalb visszallsi ideje (retrace)

Fggleges s vzszintes psztzs

h_video_en kppontok (pixel) szma h_sync

Frame #1 lthat horizontlis szlessge T(h_disp) Frame #1 baloldali hatra T(bp) = back porch

Frame #1 jobboldali hatra T(fp) = front porch

T(h_pw): horizontlis impulzus hossz (retrace ideje) Frame #1 teljes horizontlis szlessge T(h_total)

Frame #2 baloldali hatra T(bp) = back porch

sorok (line) szma v_sync


Frame #1 lthat vertiklis magassga T(v_disp) Frame #1 als hatra T(fp) = front porch T(v_pw): vertiklis impuzus hossz (retrace ideje) Frame #1 teljes vertiklis magassga T(v_total) Frame #2 fels hatra T(bp) = back porch

Frame #1 fels hatra T(bp) = back porch

2.32. bra: Horizontlis s vertiklis szinkronizci idzts VGA md (640480) esetn


Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

208

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Vertiklis szinkronizci
A horizontlis szinkronizcis jelekhez hasonlan itt is intervallumokra osztjuk a v_sync vertiklis szinkron vide jelet, melynek teljes intervallumt 525 sorra kell belltani a VGA szabvny szerint (ismerve azt, hogy 1 kpsor 800 teljes kppontbl ll). A v_sync jelet egy specilis modulo-525 szmllval lehet megvalstani. A v_sync jel ellltst a teljes vertiklis tartomnyon bell a kvetkez fontosabb fzisokra lehet felosztani: T(v_total): az a teljes idegysg, vagy ekvivalens sorszm, amelybe mind a kperny lthat (aktv), mind pedig a nem-lthat rgii is beletartoznak. (Megjegyzs: a vertiklis jelek szinkronizl paremterei esetn ezeket az idegysgeket mindig a velk ekvivalens sorok szmval (525 kpsor) feleltetjk meg.) T(v_disp): megjelentsi (display) id, amely idegysg alatt a kperny aktv (lthat) tartomnyban megjelennek a kpsorok (480 kpsor). T(v_pw): horizontlis impulzus id, amely idegysg alatt az elektronny a jobb oldalrl visszatr (retrace) a kperny bal oldalra. A video_en jelet ebben a tartomnyon bell inaktv jelszinten kell tartani a fekete, nem-lthat terlet miatt (2 kpsor). T(v_fp): vertiklis front porch rtk: kpkocka jobboldali hatra, T(h_pw) impulzus id eltti intervallum. A video_en jelet ezen front porch tartomny alatt inaktv jelszinten kell tartani a fekete, nem-lthat terlet miatt. (10 kpsor). T(v_bp): vertiklis back porch rtk: kpkocka baloldali hatra, T(h_pw) impulzus id utni intervallum. A video_en jelet ezen back porch tartomny alatt inaktv jelszinten kell tartani a fekete, nem-lthat terlet miatt (33 kpsor). A horizontlis s vertiklis VGA szinkronizcis jeleket a kvetkez 2.32. bra szemllteti. A kvetkez 2.14. tblzatban sszegyjtve tallhatak a VGA-vezrl VHDL lershoz szksges legfontosabb idztsi paramterek, konkrt rtkeikkel: 2.14. tblzat: VGA (640480) szinkron idztsi paramterei
VGA (640480)@60Hz/25 MHz: szinkron idztsi paramterek pixel jells T(h_total) T(h_disp) T(h_pw) T(h_fp) T(h_bp) T(v_total) T(v_disp) T(v_pw) T(v_fp) T(v_bp) nv horizontlis teljes rgi (lthat + nem lthat) horizontlis aktv (lthat) rgi horizontlis impulzus hossz (h_sync ideje) horizontlis front porch horizontlis back porch vertiklis teljes rgi (lthat + nem lthat) vertiklis aktv (lthat) rgi vertiklis impulzus hossz (v_sync ideje) vertiklis front porch vertiklis back porch (rajel) 800 640 96 16 48 416,800 384,000 1,600 8,000 23,200 Id 32 us 25.6 us 3.84 us 640 ns 1.92 us 16.7ms 15.36m s 64 us 320 us 928 us Kpsor 525 480 2 10 33

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.8. KOMPLEX RENDSZEREK TERVEZSE VHDL SEGTSGVEL

209

VGA idzt-szinkronizl VHDL implementcija


A fejezetben ismertetett VGA szinkronizcis idztsi paramtereknek megfelelen (lsd 2.14. tblzat) tervezzk meg a VGA vezrlt VHDL ler nyelv segtsgvel. Az entits neve legyen: VGA_sync. A szinkronizcis idztsi paramtereket definiljuk integer adattpus konstansknt. A VGA idzt-vezrl lelke kt klnbz, de gymstl fgg szmll: egy a horizontlis, egy pedig a vertiklis irnyokban szmol. Horizontlisan pixeleket szmolunk a vide rajel ciklusoknak megfelelen, vertiklisan pedig a pixelekbl ll sorokat (amikor a horizontlis irnyban elrtk a sor vgt, akkor nveljk, inkrementljuk 1-el a vertiklis szmll rtkt is). A VGA idzt-szinkronizl megvalstsra a kvetkez VHDL lers mutat egy lehetsges mdszert:
-- VGA idzt szinkronizl implementcija library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.all;

entity VGA_sync is port( mclk, rst: in std_logic; hs, vs: out std_logic; video_en : out std_logic ); end VGA_sync;

architecture Behavioral of VGA_sync is -- VGA 640x480 idztsi paramterek: konstansok hasznlatval --ms felbontshoz tparamterezhetek az rtkek constant C_HFP constant C_HBP constant C_HPW : integer:= : integer:= : integer:= constant C_HDISP : integer:= 640; --horizontal display time 16; --horiz. front porch 48; --horiz. back porch 96; --horiz. pulse with (retrace time)

constant C_VDISP : integer:= 480; --vertical display time constant C_VFP constant C_VBP constant C_VPW : integer:= : integer:= : integer:= 10; --v. front porch 33; --v. back porch 2; --vert. pulse with (retrace time)

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

210

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK --bels szmll jelek: max 10 biten trolunk CEIL(log2(800))!

signal v_count_reg, v_count_next: unsigned(9 downto 0); --525 signal h_count_reg, h_count_next: unsigned(9 downto 0); --800 -- kimeneti regiszterelt jelek signal v_sync_reg, h_sync_reg: std_logic; signal v_sync_next, h_sync_next: std_logic; -- bels llapot jelek ,vert. s horizontlis timing-nal hol van vge signal h_end, v_end : std_logic; --bels jel mclk rajel szintjt

signal pixel_tick : std_logic; --vizsgljuk

begin -- 25 MHz pixel_tick, ami a ksbbi felttel vizsglathoz -- a kls rajel 1 vagy 0 szintjt vizsglja pixel_tick <= '0' when mclk='1' else '1';

process (mclk, rst) begin -- resetelni minden regisztert if rst='1' then v_count_reg <= (others=>'0'); h_count_reg <= (others=>'0'); v_sync_reg <= '0'; h_sync_reg <= '0'; elsif (mclk'event and mclk='1') then v_count_reg <= v_count_next; h_count_reg <= h_count_next; v_sync_reg <= v_sync_next; h_sync_reg <= h_sync_next; end if; end process;

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.8. KOMPLEX RENDSZEREK TERVEZSE VHDL SEGTSGVEL

211

-- sttusz jelek generlsa/ szmllk vgllapotnak vizsglata h_end <= -- ha elrjk a horiz. szmll vgt 1

'1' when h_count_reg=(C_HDISP + C_HFP + C_HBP + C_HPW-1) else --799 '0'; v_end <= -- ha elrjk a vert. szmll vgt 0

'1' when v_count_reg=(C_VDISP + C_VFP + C_VBP + C_VPW-1) else --525 '0';

-- horizontlis szmll nvelse, majd 0-zsa amennnyiben ---elrtk a vgrtket, tfordul. process (h_count_reg,h_end,pixel_tick) begin if pixel_tick = '1' then if h_end='1' then h_count_next <= (others=>'0'); else h_count_next <= h_count_reg + 1; end if; else h_count_next <= h_count_reg; end if; end process; -- 25 MHz

-- vertiklis szmll nvelse, majd 0-zsa amennnyiben ---elrtk a vgrtket, tfordul. process (v_count_reg,h_end,v_end,pixel_tick) begin if pixel_tick = '1' and h_end='1' then if (v_end='1') then v_count_next <= (others=>'0'); else v_count_next <= v_count_reg + 1; end if; else v_count_next <= v_count_reg; end if; end process;

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

212

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK -- horizontalis and vertikalis szinkron jelek, regisztereltek a tskk -- elkerlse vgett h_sync_next <= '1' when (h_count_reg >= (C_HDISP + C_HFP)) --656

and (h_count_reg <= (C_HDISP + C_HFP + C_HPW - 1)) else --751 '0'; v_sync_next <= '1' when (v_count_reg >= (C_VDISP+C_VFP)) and (v_count_reg <= (C_VDISP+C_VFP+C_VPW-1)) else '0'; --490 --491

-- video enable (aktv rgiban megjelents engedlyezse) video_en <= '1' when (h_count_reg < C_HDISP) and (v_count_reg < C_VDISP) else '0';

-- regiszterelt vertikalis es horizontalis szinkron jelek kimenetekre --ktse hs <= h_sync_reg; vs <= v_sync_reg;

end Behavioral;

VGA idzt-szinkronizl szimulcija


Ksztsk el a tesztgyat a fent ismertetett VGA idzt-szinkronizl egysgnknek, VGA_sync_tb nven melybe helyezzk el a VGA_sync modulunkat, majd pldnyostsuk pl. uut (unit under test) nven. A szimultor mclk_period rajel peridusnak lltsunk be 40 ns-ot (= 25 MHz-et), amely mint tudjuk, megegyezik a VGA vide-rajelvel.
-- VGA idzt vezrl tesztgya LIBRARY ieee; USE ieee.std_logic_1164.ALL;

ENTITY VGA_sync_tb IS END VGA_sync_tb;

ARCHITECTURE behavior OF VGA_sync_tb IS

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.8. KOMPLEX RENDSZEREK TERVEZSE VHDL SEGTSGVEL

213

-- Component Declaration for the Unit Under Test (UUT)

COMPONENT VGA_sync PORT( mclk : IN rst : IN hs : OUT vs : OUT std_logic; std_logic; std_logic; std_logic; std_logic

video_en : OUT ); END COMPONENT;

--Inputs signal mclk : std_logic; signal rst : std_logic := '0';

--Outputs signal hs : std_logic; signal vs : std_logic; signal video_en : std_logic;

-- Clock period definitions constant mclk_period : time := 40 ns; -- 25 MHz VGA rajelhez

BEGIN -- Instantiate the Unit Under Test (UUT) uut: VGA_sync PORT MAP ( mclk => mclk, rst => rst, hs => hs, vs => vs, video_en => video_en );

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

214 -- Clock process definitions mclk_process :process begin mclk <= '0'; wait for mclk_period/2; mclk <= '1'; wait for mclk_period/2; end process;

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

-- Stimulus process stim_proc: process begin -- hold reset state for 100 ns. rst <= '1'; wait for 100 ns; rst <= '0'; wait for mclk_period*10; -- insert stimulus here wait; end process;

END;

Ezutn indtsuk el az ISim szimultort, s adjuk hozz a hullmforma (Wave) ablakhoz a kvetkez felsorolsban lv bels jeleket, melyek az uut nven pldnyostott VGA_sync entits bels jelei voltak (ez azrt szksges, hogy pontosan kvethessk a bels jelek vltozsait is, ne csak az IO portlists szerepl jeleket):
v_count_reg v_count_next h_count_reg h_count_next v_sync_reg h_sync_reg v_sync_next h_sync_next h_end v_end pixel_tick

A jelek hozzadsa utn jraindtjuk a szimultort (ekkor eltnnek a jelalakok a vizsglt/hozzadott jelek melll), Simulation Restart, majd adjunk meg futsi idnek kb. 17 ms-ot! Itt fontos megjegyezni, hogy a korbbi 2.14. tblzatnak megfelelen a szimuwww.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.8. KOMPLEX RENDSZEREK TERVEZSE VHDL SEGTSGVEL

215

ltor futasi idejt azrt lltjuk be legalbb T(v_total)-ra (vagy tbbszrsre), hogy lssuk is egy teljes kpkocka megjelentshez szksges jelvltsokat (v_end utn): azaz min. ~16.7 ms ideig kell teht futtatni a szimulcit. Az 2.33. brn a jelek szimulcis eredmnye lthat.

2.33. bra: ISim szimulci eredmnye VGA_sync entits futtatsra A fenti szimulcis eredmny egy kisebb intervallumt megvizsglva, valamint a korbbi szinkronizcis idztsi tblzattal (2.14. tbla) sszevetve a T(h_total) teljes horizontlis idre kb. 32 us-ot kell, hogy kapjunk. Ez lthat a mellkelt brn is. Tovbbi feladatknt vizsgljuk meg a fontosabb vezrl jelek belltsait, vltozsait: h_end, v_end, h_sync, v_sync, video_en, pixel_tick a v_count, h_count aktulis vltozsai, vgrtkei mellett!)

Teljes VGA-vezrl implementcija


A kvetkez lpsben tervevzzk meg a VGA vezrlt (legyen a neve VGA_disp_top.vhd), mint legmagasabb hierarchia szinten lv entitst, amely rendelkezik minden szksges I/O port-al. Legyenek a vgaRed(2:0), vgaGreen(2:0), vgaBlue(1:0) a sznkomponensenknti kimenetek (amelyek std_logic_vector tpusak), h_sync, illetve v_sync szinkronizcis kimenetek, illetve rendelkezzen a kls bemeneti rst reset jellel, valamint kls 50 MHz-es bemeneti mclk rajellel. Ebbl a bejv 50 MHz-es rajelbl (FPGA B8-as lb) lltsunk el a felre leosztott 25 MHz-es rajelet egy binris szmll segtsgvel, melyhez hasznljuk fel a korbban trgyalt clk_div entitst (q(N-1) kimenetnek bitszlessge csak N = 1!). Ezrt a VGA vezrlbe komponensknt kell meghvni, majd pldnyostani a clk_div nev entitst, amelynek kimeneti clk_25_mhz rajel portjt egy bels jelen (clk_25_mhz_sig) keresztl a fenti VGA_sync modul mclk rajel bemenetvel kell sszektni.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

216

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

A VGA_disp_top.vhd nev VGA vezrl implementcija VHDL nyelven a kvetkez:


-- VGA vezrl implementcija library IEEE; use IEEE.STD_LOGIC_1164.ALL;

entity VGA_disp_top is port( mclk, rst: in std_logic; h_sync, v_sync: out std_logic;

vgaRed : out std_logic_vector(2 downto 0); vgaGreen : out std_logic_vector(2 downto 0); vgaBlue : out std_logic_vector(1 downto 0) ); end VGA_disp_top;

architecture Behavioral of VGA_disp_top is

signal VGA_out_reg: std_logic_vector(7 downto 0); signal video_en: std_logic; signal clk_25_mhz_sig : std_logic; --bels jel a clk sszekapcsolsra -- VGA_sync komponens deklarcija pldnyostshoz COMPONENT VGA_sync PORT( mclk : IN rst : IN hs : OUT vs : OUT std_logic; std_logic; std_logic; std_logic; std_logic

video_en : OUT ); END COMPONENT;

COMPONENT clk_div PORT( clr : in STD_LOGIC; mclk : in STD_LOGIC; clk_25_mhz : out STD_LOGIC); END COMPONENT;

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.8. KOMPLEX RENDSZEREK TERVEZSE VHDL SEGTSGVEL

217

begin --pldnyostsa clk_div entitsnak uut1 nven uut1: entity work.clk_div(behav) port map(mclk=>mclk, clr=>rst, clk_25_mhz => clk_25_mhz_sig); --pldnyostsa VGA_sync entitsnak uut2 nven uut2: entity work.VGA_sync(Behavioral) port map(mclk=>clk_25_mhz_sig, rst=>rst, hs=>h_sync, vs=>v_sync, video_en => video_en);

--vga kimeneti buffer implementcija a generlt adat megjelentshez process (clk_25_mhz_sig, rst) begin if rst='1' then VGA_out_reg <= (others=>'0'); elsif (clk_25_mhz_sig'event and clk_25_mhz_sig='1') then --VGA_out_reg <= sw; VGA_out_reg <= "11101001"; end if; end process; -- VGA_out_reg jeleinek sztosztsa, mivel vgaRed(2:0), vgaGreen(2:0), --vgaBlue(1:0) std_vector_logic tpusak vgaRed <= VGA_out_reg(7 downto 5) when video_en='1' else (others => '0'); vgaGreen <= VGA_out_reg(4 downto 2) when video_en='1' else (others => '0'); vgaBlue <= VGA_out_reg(1 downto 0) when video_en='1' else (others => '0'); --legyen tetszleges a kimeneti kp

end Behavioral;

Teljes VGA vezrl szimulcija


A VGA_disp_top nev entitst, mint a VGA vezrl legfelsbb hierarchia szintjn lv modult pldnyostsuk a VGA_disp_top_tb nev tesztgyban, s vizsgljuk meg a mkdst. A gerjesztseknl a rst jeleket kell egyedl megfelelen belltanunk: a reset jel elengedsvel (inaktv alacsony szinten) elindul a VGA vezrl. Futtassuk el a szimultort legalbb 20 ms szimulcis ideig vrakozva (mivel tudjuk, hogy egy teljes v_sync peridus kb. ennyi idt vesz ignybe)! A teljes VGA vezrl tesztgynak VHDL lersa a kvetkez:
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

218 -- VGA vezrl testbench LIBRARY ieee; USE ieee.std_logic_1164.ALL;

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

ENTITY VGA_disp_top_tb IS END VGA_disp_top_tb;

ARCHITECTURE behavior OF VGA_disp_top_tb IS

-- Component Declaration for the Unit Under Test (UUT)

COMPONENT VGA_disp_top PORT( mclk : IN rst : IN std_logic; std_logic; std_logic; std_logic; std_logic_vector(2 downto 0); std_logic_vector(2 downto 0); std_logic_vector(1 downto 0)

h_sync : OUT v_sync : OUT vgaRed : OUT vgaGreen : OUT vgaBlue : OUT ); END COMPONENT; --Inputs

signal mclk : std_logic := '0'; signal rst : std_logic := '0'; --Outputs signal h_sync : std_logic; signal v_sync : std_logic; signal vgaRed : std_logic_vector(2 downto 0); signal vgaGreen : std_logic_vector(2 downto 0); signal vgaBlue : std_logic_vector(1 downto 0); -- Clock period definitions constant mclk_period : time := 20 ns; --50 MHz

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.8. KOMPLEX RENDSZEREK TERVEZSE VHDL SEGTSGVEL

219

BEGIN

-- Instantiate the Unit Under Test (UUT) uut: VGA_disp_top PORT MAP ( mclk => mclk, rst => rst, h_sync => h_sync, v_sync => v_sync, vgaRed => vgaRed, vgaGreen => vgaGreen, vgaBlue => vgaBlue );

-- Clock process definitions mclk_process :process begin mclk <= '0'; wait for mclk_period/2; mclk <= '1'; wait for mclk_period/2; end process;

-- Stimulus process stim_proc: process begin -- hold reset state for 100 ns. rst <= '1'; wait for 100 ns; rst <= '0'; wait for mclk_period*10; -- insert stimulus here wait; end process; END;

A VGA vezrl szimulcis eredmnye a kvetkez 2.34. brn lthat:

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

220

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

2.34. bra: A VGA vezrl szimulcis eredmnye (rszlet)


www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.8. KOMPLEX RENDSZEREK TERVEZSE VHDL SEGTSGVEL

221

VGA vezrl: Szintzis s impelementci


Szintetizljuk, majd generljuk le a VGA_disp_top.vhd legfelsbb hierarchia szinten lv entitst. Ehhez a kvetkez felhasznli knyszerfeltteleket is meg kell adni (.ucf):
NET "mclk" LOC = "B8"; # Bank = 0, Pin name = IP_L13P_0/GCLK8, Type = GCLK, Sch name = GCLK0

# VGA Connector NET "vgaRed<0>" Sch name = RED0 LOC = "R9"; # Bank = 2, Pin name = IO/D5, Type = DUAL,

NET "vgaRed<1>" LOC = "T8"; # Bank = 2, Pin name = IO_L10N_2, Type = I/O, Sch name = RED1 NET "vgaRed<2>" LOC = "R8"; # Bank = 2, Pin name = IO_L10P_2, Type = I/O, Sch name = RED2 NET "vgaGreen<0>" LOC = "N8"; # Bank = 2, Pin name = IO_L09N_2, Type = I/O, Sch name = GRN0 NET "vgaGreen<1>" LOC = "P8"; # Bank = 2, Pin name = IO_L09P_2, Type = I/O, Sch name = GRN1 NET "vgaGreen<2>" LOC = "P6"; # Bank = 2, Pin name = IO_L05N_2, Type = I/O, Sch name = GRN2 NET "vgaBlue<0>" LOC = "U5"; # Bank = 2, Pin name = IO/VREF_2, Type = VREF, Sch name = BLU1 NET "vgaBlue<1>" LOC = "U4"; # Bank = 2, Pin name = IO_L03P_2/DOUT/BUSY, Type = DUAL, Sch name = BLU2

NET "h_sync" LOC = "T4"; # Bank = 2, Pin name = IO_L03N_2/MOSI/CSI_B, Type = DUAL, Sch name = HSYNC NET "v_sync" LOC = "U3"; # Bank = 2, Pin name = IO_L01P_2/CSO_B, Type = DUAL, Sch name = VSYNC

# Buttons NET "rst" LOC = "B18"; # Bank = 1, Pin name = IP, Type = INPUT, Sch name = BTN0

Az elksztett s legenerlt bitfjlt vgl tltsk le a Digilent Nexys-2 krtyra s vizsgljuk meg a mkdst CRT, vagy LCD monitoron.

Tovbbi nll feladat:


Ahhoz, hogy a CRT monitoron a kimeneti kp szne llthat legyen, vezessen be kapcsolkat (switch). Erre a clra a krtyn lv 8 db programozhat kapcsolt (sw(7:0)) hasznlja fel. A 8 db programozhat kapcsol (8-bites) segtsgvel pont a 256 lehetsges sznkombinci kzl egyet lehet megjelenteni a monitoron. Mdostsa a VGA_disp_top entitst gy, hogy a kapcsolk aktulis rtkt a VGA_out_reg(7 downto 0) jelhez rendelje. Szimullja le a
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

222

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

viselkedst, majd pedig szintetizlja le, s generljon hozz futtathat bitstream fjlt. Vgl tltse fel az FPGA-ra, s vizsglja meg a programozott kapcsolk lltsval a kimeneti kp sznnek vltozst.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.9. Begyazott rendszer sszelltsa Xilinx EDK hasznlatval


Ebben a fejezetben a Xilinx EDK (Embedded Development Kit) begyazott rendszertervez krnyezet hasznlatt ismertetjk rviden, fknt a konfigurlhat MicroBlaze szoftprocesszor alap rendszertervezsre fkuszlva.

2.9.1. MicroBlaze begyazott szoft-processzor mag


A Xilinx MicroBlaze egy 32-bites, RISC (cskkentett) utasts-kszlet, s Harvard architektrt kvet (elklntett utasts-adat trols) n. szoft processzor mag, amely gazdag funkcionalitssal s utasts kszlet architektrval tmogatja az FPGA alap begyazott alkalmazsok fejlesztst s megvalstst. Egyrszt, a MicroBlaze maghoz tbbfajta, gyrt (Xilinx) specifikus, vagy fggetlen gyrtk ltal (3rd party) elre-definilt (ingyenes, vagy megvsrolhat) IP szellemi termkek integrlhatk. Ezek listjt a Xilinx EDK IP Catalogue katalgus nzetben lehet megtekiteni [XILINX_EDK]. Msrszt arra is lehetsg van, hogy akr sajt, egyedi (custom) szellemi termkeket implementljunk, s integrljunk egy begyazott alaprendszerhez. Ez temszetesen hosszabb, idignyesebbb folyamat, amely nagy tapasztalatot kvn, de a legoptimlisabb megolds lehet egy konfigurlhat sajt begyazott rendszer megvalstshoz.

2.35. bra: Xilinx MicroBlaze szoft-processzor mag bels felptse [MICROBLAZE]: Egy konfigurlhat MicroBlaze mag a kvetkez blokkszint bels felptssel rendelkezik, (lsd 2.35. bra).
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

224

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

A MicroBlaze processzor legfontosabb paramterei a kvetkezk [MICROBLAZE]: Konfigurlhat 32-bites processzor mag Jelenlegi legjabb verzija v.8.10 (Xilinx EDK 13.1 rendszerben) Pipeline feldolgozst tmogat architektra (3-, vagy 5-lpcss) Konfigurlhat 3-lpcss (erforrsra optimalizlt) vagy 5-lpcss pipeline (teljestmnyre optimalizlt vltozat) Konfigurlhat, opcionlis utasts-, s adat cache memria (I-Cache, D-Cache) Kzvetlen lekpezs (1-utas csoport asszociatv cache) 32 db, egyenknt 32-bites ltalnos cl regiszterrel rendelkezik (Register File) Sklzhat 32-bites, 64-bites, vagy 128-bites adatbusz 32-bites cmbusza van 32-bites utasts busszal rendelkezik (az utasts kdolst tekinve maximlisan a 3cm utastsokat, valamint kt cmzsi mdot tmogat: regiszteres, illetve az Imm-azonnali cmzsi mdokat). Aritmetikai Logikai Load/Store (Memria-regiszter transzfer mveletekhez RISC sajtossga) Programszervez utastsok (pl. Branch = if feltteles vgrehajts) Specilis utastsok Opcionlis Memria Menedzsel s Memria Vdelmi Egysggel (MMU Memory Management Unit) rendelkezhet. Akkor szksges, ha a MicroBlaze magon egy Linux OS (begyazott opercis rendszert akarunk hasznlni jelenleg az EDK-ban a Linux 2.6 verzit tmogatott). Opcionlis processzor magba gyazhat lebeg-pontos atirmetikai egysg (FPU Floating Point Unit) Szabvnyos IEEE 754 formtum szerinti mkds Barrel Shifter: tetszlegesen lptethet regiszter (opcionlis) Hardveres szorz (opcionlis): ha be van kapcsolva 3 db MULT18x18-as dediklt blokkot hasznl el a Spartan3E FPGA-n. Termszetesen ez is platform specifikus mveletvgz egysg). 3232 bites operanduszok szorzsa 64-bites eredmnnyel Hardveres oszt ramkr (opcionlis): szorz ramkrket, logikai cellkat s esetlegesen dediklt BRAM cellkat is lefoglalhat). Fast Simplex Link (FSL) FIFO csatornk: nagyon gyors, arbitrci nlkli, pont-pont sszekttetsek (pl. akr kt begyazott MicroBlaze processzor s/vagy hardver gyorst feldolgoz egysgek kztti kommunikcira). Hardveresen tmogatott hibakeress (szleskr debug funkcikkal MDM MicroBlaze Debug Module, Xilinx ChipScope) s begyazhat, de ms gyrt ltal szolgltatott logikai analiztor modulok (pl. Agilent Trace Module). Alapveten Big-Endian, azaz bit-fordtott trolsi formtumot kvet (de a jelenlegi 13.x rendszertl kezdve mr konfigurlhat az endianits a kvetkez kt byte/bit-sorrend szerint:

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.9. BEGYAZOTT RENDSZER SSZELLTSA XILINX EDK HASZNLATVAL

225

Little-endian: a legjabb ARM magos AXI-buszos rendszerek

tmogatsra.

Big-endian: PLB (Processor Local Bus) buszra csatlakoztathat I/O perifria eszkzk tmogatsra. Multi-processzoros kpessg: a begyazhat MicroBlaze processzor magok Mailbox IP-n keresztl zenet tadssal kommuniklhatnak, valamint Mutex (Mutual Exclusion) IP-n biztostja a processzorok kztti szinkronizcit.

Az j AMBA (Advanced Microcontroller Bus Architecture) busz architektrnak ksznheten az ARM magos processzorokat mr kzvetlenl ssze lehet ktni a MicroBlaze AXI rendszervel (EDK 13.x) [XILINX_EDK].

A MicroBlaze magrl tovbbi bvebb informcikat a Xilinx gyrt oldaln olvashatunk [MICROBLAZE].

2.9.2 MicroBlaze maghoz kapcsold buszrendszerek


A begyazhat MicroBlaze processzor mag [MICROBLAZE]:a klnbz I/O perifrikkal (IP magok) Xilinx specifikus buszokon keresztl tud kommuniklni. A buszokat ltalnosan tbbvonalas, egy-, vagy ktirny sszekttetseknek tekintjk, amelyeken keresztl a szksges informcik az rsi-, s olvassi tranzakciknak megfelelen tovbbtdnak. A kvetkez informcik tovbbtsra van lehetsg a buszvonalakon: Cm, Adat, s Vezrlsi informcikat klnbztethetnk meg

Arbiter Master/ Slave Slave

Master

Arbiter

Master

Slave

Slave

2.36. bra: Begyazott rendszer IO perifriinak osztlyozsa s kapcsolata [XILINX_EDK] A mikroprocesszorhoz kapcsolhat, konfigurlhat I/O perifrikat a kvetkez fontosabb paramterek szerint osztlyozhatjuk (2.36. bra): Arbiter (arbitrcis egysg) Arbitrcis jelleggel mkd, Master (mester, vagy msnven a kezdemnyez egy buszon), Slave (szolga, vagy fogad fl egy buszon), illetve akr
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

226

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Egyttes Master-Slave funkcij (pldul klnbz, vagy azonos buszvonalakat sszekt hidak Bridge).

MicroBlaze bels buszrendszerei:


Advanced Extensible Interface (AXI): ARM magos processzorok AMBA protokollja fel nyjtott tmogats Processor Local Bus (PLB): MicroBlaze processzor (vagy akr perifri) busz rendszere, amelyre szmos IO perifria kthet. Konfigurlhat 32-, 64-bites adapt /ill. cmbusszal, vagy esetenknt 128-bites adat busszal. On-chip Peripheral Bus (OPB): rgebbi, ma mr nem tmogatott (visszafele kompatibilits cljbl hagytk meg) 32-bites buszrendszer. IBM szabvnyra pl, funkcionalitsa azonos a PLB busszal. Local Memory Bus (LMB): MicroBlaze helyi memria busza, amelyen keresztl (de memria vezrlkn keresztl) az adat, illetve utasts rszek elrhetek Harvard architektra. Dediklt BRAM memrit hasznl. Fast Simplex Links (FSL): gyors, s kzvetlen pont-pont sszekttets processzor, illetve feldolgoz processzor (accelerator), valamint perifria kztt. Lnyegben egy 32-bit szles, s 16-mlysg programozhat FIFO-t definil. Xilinx Cache Link (XCL): MicroBlaze 32-bites Cache vonala, kln adat-, s utasts memria konfigurlhat (opcionlisan) Harvard architektra. A MicroBlaze magot a Cache vezrlkkel kti ssze.

Megjegyzs: vastagtott betvel azokat a rszeket emeltem ki, amelyek a jelenlegi begyazott rendszer hasznlatnak bevezetst szolgl feladatban fel lettek hasznlva. Ezekrl a busz interfszekrl rszletesen a Xilinx oldaln a [MICROBLAZE], illetve [XILINX_EDK] lersokban tovbbi rszleteket olvashatunk.

2.9.3. Begyazott alaprendszer sszelltsa Xilinx XPS-ben


Mieltt elindtannk a Xilinx XPS Platform Studio-t, gyzdjnk meg rla, hogy a Digilent gyrt ltal a Nexys-2 krtyhoz biztostott n. Xilinx Board Definition (.xbd) fjl (Digilent_Nexys2-1200/500_v2_2_0.xbd) a megfelel helyen van-e [NEXYS2]. Ha nincs belltva pldul egy j Xilinx rendszer teleptse utn, akkor ehhez elszr a gyrt oldalrl le kell tlteni a tmogat csomagot (BSP Board Support Package-t Digilent_Nexys_EDK_Board_Support_Files_V_2_1.zip [DIGILENT]), amelyet egy ideiglenes knyvtrba kell kicsomagolni. Majd pedig ezt a csomagot a \Digilent\ alknyvtr szintjrl a teleptett <Drive>\Xilinx\12.2\ISE_DS\EDK\board\ almappba kell msolni (a kvetkez 2.37. bra szerinti knyvtr hierarchia szerint bra csak a szemlltets vgett van).

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.9. BEGYAZOTT RENDSZER SSZELLTSA XILINX EDK HASZNLATVAL

227

2.37. bra: Xilinx EDK knyvtrszerkezete az .xbd fjl(ok) belltshoz Megjegyzs: A krtya defincis llomny (.xbd) belltsa mr a tervezs kezdeti fzisban azrt lehet nagyon fontos lps, mivel esetnkben szerencss mdon a gyrt (Digilent Inc) de akr ms gyrtk is a rendelkezsnkre bocstanak elre definilt belltsokat s paramtereket tartalmaz konfigurcis llomnyokat, amikor egy j begyazott alaprendszert kvnunk sszelltani. Amennyiben a gyrt nem ad ilyen jelleg tmogatst, vagy egyedi (sajt tervezs) FPGA-s krtyt kvnunk hasznlni, akkor sajt magunknak kell egy ilyen .xbd (board definition) fjlt ltrehozni a Xilinx XPS/EDK segtsgvel [XILINX_EDK]. Ez azonban pldul a kls memrik FPGA lbhozzrendelst, illetve pontos paramterezst tekintve igen komplex feladat is lehet, mg gyakorlott FPGA-alap begyazott rendszert tervez mrnkknek is. Termszetesen az .xbd belltst csak egyetlen egyszer, az adott krtyval trtn els tervezskor kell elvgezni. 1.) Indtsuk el ezutn a Xilinx -> Platform Studio (XSP) integrlt begyazott rendszer tervez programjt. Majd a File -> New Project -> Base System Builder Wizard opcijt vlasszuk ki, a begyazott alaprendszer sszelltshoz. Ez egy varzsl, amely vgigvezet grafikus ablakokon keresztl a tervezsi lpseken.

2.38. bra: Xilinx Platform Studio-alaprendszer sszelltsa


Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

228

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

2.) OK-ra kattintva rjuk be az j projekt file nevnek a kvetkezt: system.xmp. Termszertesen ez a nv tetszleges is lehet. Az .xmp kiterjeszts a Xilinx Project fjl formtumt jelenti. Vlasszunk ki (Browse) s hozzunk ltre egy knyvtrat a <Drive>\alknyvtr\system.xmp nven. A lnyeges megktsek a file nevre, s knyvtr nevre vonatkozan ugyanazok, mint amiket a Xilinx ISE krnyezetben megismerhettnk (lsd korbbi 2.4.2. alfejezet).

2.39. bra: Xilinx Platform Studio projekt elrsi tjnak megadsa 3.) Ezutn az dvzl Welcome ablakban vlasszuk ki az New Design opcit. 4.) A kvetkez Board ablakban vlasszuk ki a korbban ismertetett Digilent -> Nexys-2 (1200K, vagy 500K) fejlesztkrtykat rendelkezsre ll platformtl fggen. Alul a Board Information rszen ekkor megjelenik a pontos FPGA tpusa: Xilinx Spartan 3E- 1200 / vagy -500, FG320-as tokozssal, illetve -4 speed grade-el.

2.40. bra: Xilinx Platform Studio Digilent Nexys-2 1200 krtya kivlasztsa (amit a teleptett .xbd fjl tmogat)
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.9. BEGYAZOTT RENDSZER SSZELLTSA XILINX EDK HASZNLATVAL

229

5.) A kvetkez System ablakban az egy-processzoros rendszert vlasszuk ki (single-processzor system opcit). Termszetesen lehetsg van arra is, akr ebben a lpsben, vagy a ksbbiekben, hogy tovbbi begyazhat processzorokat adjunk a rendszerhez (multi-processor system). 6.) A kvetkez ablakban a begyazni kivnt processzor magot, annak rajelt s paramtereit tudjuk belltani. Mivel a feladat sorn hasznlt Spartan-3E FPGA-n csak szoft-processzor magokat lehet kialaktani (logikai s dediklt erforrsoktl fggen maximlisan 8-at engedlyez elhelyezni!) ezrt a processzor tpusnl a MicroBlaze magot vlasszuk ki, alap 50 MHz-es rendszerrajel mellett. A MicroBlaze-hez kapcsold loklis memria (LMB) mrett nveljk meg 8KB 32KB-ra, ami azrt szksges, hogy a ksbbi lefordtott alkalmazi programjaink belefrjenek az FPGA-n lv bels dediklt memrikba (ne kelljen kls memrit, vagy boot-loadert hasznlni). Tovbb ne engedlyezzk a lebegpontos szorzk (FPU) hasznlatt, mivel jelen megvalsts sorn nem lesz szksg rjuk, s gy jelents hardver erforrsokat takarthatunk meg (min. 3 szorzt + tovbbi logikai erforrsokat).

2.41. bra: Xilinx Platform Studio MicroBlaze processzor konfigurlsa 7.) A kvetkez Peripheral ablakban lehet megadni a MicroBlaze begyazott szoft-processzor maghoz integrlni kvnt IO perifria modulokat, amelyek a gyrt sajt szellemi termkeit, azaz n. IP (Intellectual Property) magok hozzadst jelentik a meglv tervnkhz. Alaprtelmezettknt a kvetkez IP modulok maradjanak bent (mivel ezeket a korbban ismertetett xbd fjl alapjn olvassa be, vagy egy j rendszer sszelltsakor adjuk hozz): 7-segmenses LED kijelzk, 8-db LED, kls 16Mbyte-os Mircon SRAM memria, 8 db nyomgomb, egy RS232 soros port, 8 kapcsol, illetve

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

230

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

1-1 adat s utasts oldali blokk-ram vezrl (Harvard architektra!), amely a korbban definilt 32KB mret loklis memria bank-ot tudja elrni (LMB). Egyik hozzadott perifria esetn se lltsuk be a megszakts kezelst szolgl bels jelet (mivel ebben a feladatban nem kvnjuk a perifrik megszakts-krseit a MicroBlaze oldalon kezelni).

2.42. bra: Xilinx Platform Studio IO perifrik (IP magok) hozzadsa az alaprendszerhez 8.) A kvetkez Cache ablakban a MicroBlaze processzor maghoz rendelhet begyazott cache memrikat lehet konfigurlni, s mretket lehet belltani. Mivel a kls Micron SRAM memrit adtunk hozz a rendszerhez, ezrt mindenkppen rdemes bekapcsolni mind az adat-, mind pedig az utasts oldali cache memrikat (a memria tesztelshez), amelyek mrett egyenknt lltsuk 2KB-os mretre. 9.) Az alkalmazi programokat konfigurl ablakban (Application Configuration) egyrszt adjuk meg, hogy a gyrt ltal sszelltott mely szoftver alakalmazsokat kvbjuk a sajt begyazott rendszernkhz illeszteni,msrszt, hogy a konzolon (terminal) keresztl mely I/O porthoz csatlakozunk. Ez utbbinak lltsuk be a szabvnyos RS232_PORT-ot (mivel ksbb majd egy soros kbelen keresztl egy Terminal alkalmazsban vizsglhatjuk a krseket, ill.kldseket). Az elre definilt tesztalkalmazsok legyenek a kvetkezk: TestApp_Memory, illetve TestApp_Peripheral. Termszetesen a ksbbiekben, sajt egyedi alkalmazi programokat is hozz tudunk adni a rendszerhez. Az alkalmazi programokat akr a Xilinx EDK rendszerben (br ez az EDK 10.1 s korbbi rendszerekben megszokott mdszer, s kevsb rugalmas md), akr az Eclipse alap Xilinx SDK begyazott szoftverfejleszt rendwww.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.9. BEGYAZOTT RENDSZER SSZELLTSA XILINX EDK HASZNLATVAL

231

szerben is ltre lehet hozni (Project men Export Hardware Design to SDK). Mg ebben az alkalmaz programokat konfigurl ablakban az alkalmazsok utastsainak s adatainak trolsi helyt is meg kell adni, amelyek a kvetkezk lehetnek:
ilmb: MicroBlaze utasts-oldali loklis memrija (16 Blokk-Ramot foglal le,

mrett korbban 32 KByte-ra nveltk!), dlmb: MicroBlaze adat-oldali lokli memrija (16 Blokk-Ram-ot foglal le, mrett korbban 32 KByte-ra nveltk), esetleg Micron_SRAM: 16 MByte mret kls memria (ez nem Blokk-Ram hasznl).

2.43. bra: Xilinx Platform Studio Memory Test s Peripheral Test alkalmazsok adat-, illetve utastsrszeinek trolsi helyei 10.) Az begyazott alaprendszer sszelltsnak utols lpseknt az sszefoglal ablakban (Summary) a MicroBlaze maghoz integrlt IP perifrik gyri nevei (Core Name ezek nem vltoztathatk meg, Xilinx specifikus nevek), azok pldnyostott nevei (Instance name megvltoztathatk), a hozzjuk rendelt bziscmek (Base address - .xbd alapjn kiosztott alaprtelmezett), illetve fels cmtartomny (High address) rtkek kerlnek listzsra. Lthat, hogy a MicroBlaze maghoz 4 db GPIO (ltalnos cl IO xps_gpio) perifria, 1 soros port kezel perifria (xps_uartlite), 1 kls memria vezrl (xps_mch_emc), valamint 1-1 adat-, utasts-oldali Loklis Blokk-Ram memria-interfsz vezrl csatlakozik (lmb_bram_if_ctrl). A File location ablak rszben az EDK projekt llomnyai kerlnek listzsra, amelyek kzl a kvetkez fontos formtumokat szksges kiemelni: o Xmp: Xilinx EDK projekt fjl (ez fogja ssze a teljes begyazott projektet)
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

232

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

o Mhs: MicroBlaze Hardvare Description: a begyazott rendszer szveges hardver lerja o Mss: MicroBlaze Software Description: a begyazott rendszer szveges szoftver lerja o Ucf: User Constraints File: felhasznli / tervezi knyszerfeltteleket tartalmaz szveges llomny o Bsb: Ha a BSB (Base System Builder) mentst bejelltk, akkor egy ksbbi begyazott rendszer tervezsekor, nem kell az alaprendszert ismtelten sszelltani, elg csak megnyitni a korbban sszelltott .bsb ler fjlt.

2.44. bra: Xilinx Platform Studio Summary ablak, az alaprendszer sszelltsnak utols fzisban 11.) Vgl a MicroBlaze-alap begyazott hardver alaprendszer sszelltsa utn a Xilinx Platform Studio tnyleges hasznlata megkezddhet, amely egyrszt alkalmas a begyazott rendszer (hw) tovbbi belltsainak finomtsra, I/O perifrik (IP magok) hozzadsra, illetve akr az alkalmazi programok (sw) rszek ltrehozsra is.

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.9. BEGYAZOTT RENDSZER SSZELLTSA XILINX EDK HASZNLATVAL

233

A MicroBlaze-alap begyazott alaprendszer sikeres sszelltsa utn a kvetkez tervezi nzet fogad bennnket a Xilinx Platform Studio-jnak grafikus ablakban (2.45. bra):
Terv forrsainak hierarchikus ablaka - projekt nzet - alkalmazi program nzet

Busz sszekttets hierarchia nzet

- Busz interfsz - Komponens- s rszletes portlista

zenet (transcript) ablak

Blokkdiagram (grafikus) nzet

2.45. bra: Az sszelltott MicroBlaze alap begyazott tesztrendszer grafikus fellete s ablakai, a projekt megnyitsakor EDK/XPS-ben [XILINX_EDK] A kvetkez 2.46. bra az sszelltott alaprendszer, illetve az integrlt I/O perifrikat (mint IP magokat) s azok busz-szint sszekttetseit szemllteti (ezt blokkdiagramot az XPS-ben lehet generltatni).
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

234

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

2.46. bra: a XPS-ben sszelltott begyazott rendszer grafikus, IP blokk-szint felptse

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.9. BEGYAZOTT RENDSZER SSZELLTSA XILINX EDK HASZNLATVAL

235

MHS: MicroBlaze Hardver ler llomny


A kvetkez forrskd a hardver tesztrendszer sszelltsa sorn keletkezett MicroBlaze hardver ler fjl bels struktrjt s nyelvi konstrukciit szemllteti [XILINX_EDK]:
# ############################################################################## # Created by Base System Builder Wizard for Xilinx EDK 12.2 Build EDK_MS2.63c # Thu Apr 08 03:02:29 2010 # Target Board: # Family: # Device: # Package: Digilent Nexys 2-1200 Board Rev C

spartan3e XC3S1200E FG320 -4

# Speed Grade:

# Processor number: 1 # Processor 1: microblaze_0 # System clock frequency: 50.0 # Debug Interface: On-Chip HW Debug Module # ############################################################################## PARAMETER VERSION = 2.1.0

PORT fpga_0_LEDs_8Bit_GPIO_IO_O_pin = fpga_0_LEDs_8Bit_GPIO_IO_O_pin, DIR = O, VEC = [0:7] PORT fpga_0_LED_7SEGMENT_GPIO_IO_O_pin = fpga_0_LED_7SEGMENT_GPIO_IO_O_pin, DIR = O, VEC = [0:11] PORT fpga_0_Push_Buttons_3Bit_GPIO_IO_I_pin = fpga_0_Push_Buttons_3Bit_GPIO_IO_I_pin, DIR = I, VEC = [0:2] PORT fpga_0_Switches_8Bit_GPIO_IO_I_pin = fpga_0_Switches_8Bit_GPIO_IO_I_pin, DIR = I, VEC = [0:7] PORT fpga_0_RS232_PORT_RX_pin = fpga_0_RS232_PORT_RX_pin, DIR = I PORT fpga_0_RS232_PORT_TX_pin = fpga_0_RS232_PORT_TX_pin, DIR = O PORT fpga_0_Micron_RAM_Mem_A_pin = fpga_0_Micron_RAM_Mem_A_pin_vslice_9_31_concat, DIR = O, VEC = [9:31] PORT fpga_0_Micron_RAM_Mem_OEN_pin = fpga_0_Micron_RAM_Mem_OEN_pin, DIR = O PORT fpga_0_Micron_RAM_Mem_WEN_pin = fpga_0_Micron_RAM_Mem_WEN_pin, DIR = O PORT fpga_0_Micron_RAM_Mem_BEN_pin = fpga_0_Micron_RAM_Mem_BEN_pin, DIR = O, VEC = [0:1] PORT fpga_0_Micron_RAM_Mem_DQ_pin = fpga_0_Micron_RAM_Mem_DQ_pin, DIR = IO, VEC = [0:15] PORT fpga_0_clk_1_sys_clk_pin = dcm_clk_s, DIR = I, SIGIS = CLK, CLK_FREQ = 50000000 PORT fpga_0_rst_1_sys_rst_pin = sys_rst_s, DIR = I, SIGIS = RST, RST_POLARITY = 1

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

236
BEGIN microblaze PARAMETER INSTANCE = microblaze_0 PARAMETER C_AREA_OPTIMIZED = 1 PARAMETER C_DEBUG_ENABLED = 1

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

PARAMETER C_ICACHE_BASEADDR = 0x80000000 PARAMETER C_ICACHE_HIGHADDR = 0x80ffffff PARAMETER C_CACHE_BYTE_SIZE = 2048 PARAMETER C_ICACHE_ALWAYS_USED = 1 PARAMETER C_DCACHE_BASEADDR = 0x80000000 PARAMETER C_DCACHE_HIGHADDR = 0x80ffffff PARAMETER C_DCACHE_BYTE_SIZE = 2048 PARAMETER C_DCACHE_ALWAYS_USED = 1 PARAMETER HW_VER = 7.30.b PARAMETER C_USE_ICACHE = 1 PARAMETER C_USE_DCACHE = 1 BUS_INTERFACE DLMB = dlmb BUS_INTERFACE ILMB = ilmb BUS_INTERFACE DPLB = mb_plb BUS_INTERFACE IPLB = mb_plb BUS_INTERFACE DXCL = microblaze_0_DXCL BUS_INTERFACE IXCL = microblaze_0_IXCL BUS_INTERFACE DEBUG = microblaze_0_mdm_bus PORT MB_RESET = mb_reset END

BEGIN plb_v46 PARAMETER INSTANCE = mb_plb PARAMETER HW_VER = 1.04.a PORT PLB_Clk = clk_50_0000MHz PORT SYS_Rst = sys_bus_reset END

BEGIN lmb_v10 PARAMETER INSTANCE = ilmb PARAMETER HW_VER = 1.00.a PORT LMB_Clk = clk_50_0000MHz PORT SYS_Rst = sys_bus_reset END

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.9. BEGYAZOTT RENDSZER SSZELLTSA XILINX EDK HASZNLATVAL

237

BEGIN lmb_v10 PARAMETER INSTANCE = dlmb PARAMETER HW_VER = 1.00.a PORT LMB_Clk = clk_50_0000MHz PORT SYS_Rst = sys_bus_reset END

BEGIN lmb_bram_if_cntlr PARAMETER INSTANCE = dlmb_cntlr PARAMETER HW_VER = 2.10.b PARAMETER C_BASEADDR = 0x00000000 PARAMETER C_HIGHADDR = 0x00007fff BUS_INTERFACE SLMB = dlmb BUS_INTERFACE BRAM_PORT = dlmb_port END

BEGIN lmb_bram_if_cntlr PARAMETER INSTANCE = ilmb_cntlr PARAMETER HW_VER = 2.10.b PARAMETER C_BASEADDR = 0x00000000 PARAMETER C_HIGHADDR = 0x00007fff BUS_INTERFACE SLMB = ilmb BUS_INTERFACE BRAM_PORT = ilmb_port END

BEGIN bram_block PARAMETER INSTANCE = lmb_bram PARAMETER HW_VER = 1.00.a BUS_INTERFACE PORTA = ilmb_port BUS_INTERFACE PORTB = dlmb_port END

BEGIN xps_gpio PARAMETER INSTANCE = LEDs_8Bit PARAMETER C_ALL_INPUTS = 0 PARAMETER C_GPIO_WIDTH = 8 PARAMETER C_INTERRUPT_PRESENT = 0 PARAMETER C_IS_DUAL = 0 PARAMETER HW_VER = 2.00.a

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

238
PARAMETER C_BASEADDR = 0x81440000 PARAMETER C_HIGHADDR = 0x8144ffff BUS_INTERFACE SPLB = mb_plb

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

PORT GPIO_IO_O = fpga_0_LEDs_8Bit_GPIO_IO_O_pin END

BEGIN xps_gpio PARAMETER INSTANCE = LED_7SEGMENT PARAMETER C_ALL_INPUTS = 0 PARAMETER C_GPIO_WIDTH = 12 PARAMETER C_INTERRUPT_PRESENT = 0 PARAMETER C_IS_DUAL = 0 PARAMETER HW_VER = 2.00.a PARAMETER C_BASEADDR = 0x81460000 PARAMETER C_HIGHADDR = 0x8146ffff BUS_INTERFACE SPLB = mb_plb PORT GPIO_IO_O = fpga_0_LED_7SEGMENT_GPIO_IO_O_pin END

BEGIN xps_gpio PARAMETER INSTANCE = Push_Buttons_3Bit PARAMETER C_ALL_INPUTS = 1 PARAMETER C_GPIO_WIDTH = 3 PARAMETER C_INTERRUPT_PRESENT = 0 PARAMETER C_IS_DUAL = 0 PARAMETER HW_VER = 2.00.a PARAMETER C_BASEADDR = 0x81420000 PARAMETER C_HIGHADDR = 0x8142ffff BUS_INTERFACE SPLB = mb_plb PORT GPIO_IO_I = fpga_0_Push_Buttons_3Bit_GPIO_IO_I_pin END

BEGIN xps_gpio PARAMETER INSTANCE = Switches_8Bit PARAMETER C_ALL_INPUTS = 1 PARAMETER C_GPIO_WIDTH = 8 PARAMETER C_INTERRUPT_PRESENT = 0 PARAMETER C_IS_DUAL = 0 PARAMETER HW_VER = 2.00.a

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.9. BEGYAZOTT RENDSZER SSZELLTSA XILINX EDK HASZNLATVAL

239

PARAMETER C_BASEADDR = 0x81400000 PARAMETER C_HIGHADDR = 0x8140ffff BUS_INTERFACE SPLB = mb_plb PORT GPIO_IO_I = fpga_0_Switches_8Bit_GPIO_IO_I_pin END

BEGIN xps_uartlite PARAMETER INSTANCE = RS232_PORT PARAMETER C_BAUDRATE = 9600 PARAMETER C_DATA_BITS = 8 PARAMETER C_USE_PARITY = 0 PARAMETER C_ODD_PARITY = 0 PARAMETER HW_VER = 1.01.a PARAMETER C_BASEADDR = 0x84000000 PARAMETER C_HIGHADDR = 0x8400ffff BUS_INTERFACE SPLB = mb_plb PORT RX = fpga_0_RS232_PORT_RX_pin PORT TX = fpga_0_RS232_PORT_TX_pin END

BEGIN xps_mch_emc PARAMETER INSTANCE = Micron_RAM PARAMETER C_NUM_BANKS_MEM = 1 PARAMETER C_NUM_CHANNELS = 2 PARAMETER C_MEM0_WIDTH = 16 PARAMETER C_MAX_MEM_WIDTH = 16 PARAMETER C_INCLUDE_DATAWIDTH_MATCHING_0 = 1 PARAMETER C_SYNCH_MEM_0 = 0 PARAMETER C_TCEDV_PS_MEM_0 = 85000 PARAMETER C_TAVDV_PS_MEM_0 = 85000 PARAMETER C_THZCE_PS_MEM_0 = 8000 PARAMETER C_THZOE_PS_MEM_0 = 8000 PARAMETER C_TWC_PS_MEM_0 = 85000 PARAMETER C_TWP_PS_MEM_0 = 55000 PARAMETER C_TLZWE_PS_MEM_0 = 5000 PARAMETER HW_VER = 3.01.a PARAMETER C_MEM0_BASEADDR = 0x80000000 PARAMETER C_MEM0_HIGHADDR = 0x80ffffff BUS_INTERFACE SPLB = mb_plb

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

240

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

BUS_INTERFACE MCH0 = microblaze_0_IXCL BUS_INTERFACE MCH1 = microblaze_0_DXCL PORT RdClk = clk_50_0000MHz PORT Mem_A = 0b000000000 & fpga_0_Micron_RAM_Mem_A_pin_vslice_9_31_concat PORT Mem_OEN = fpga_0_Micron_RAM_Mem_OEN_pin PORT Mem_WEN = fpga_0_Micron_RAM_Mem_WEN_pin PORT Mem_BEN = fpga_0_Micron_RAM_Mem_BEN_pin PORT Mem_DQ = fpga_0_Micron_RAM_Mem_DQ_pin END

BEGIN clock_generator PARAMETER INSTANCE = clock_generator_0 PARAMETER C_CLKIN_FREQ = 50000000 PARAMETER C_CLKOUT0_FREQ = 50000000 PARAMETER C_CLKOUT0_PHASE = 0 PARAMETER C_CLKOUT0_GROUP = NONE PARAMETER C_CLKOUT0_BUF = TRUE PARAMETER C_EXT_RESET_HIGH = 1 PARAMETER HW_VER = 4.00.a PORT CLKIN = dcm_clk_s PORT CLKOUT0 = clk_50_0000MHz PORT RST = sys_rst_s PORT LOCKED = Dcm_all_locked END

BEGIN mdm PARAMETER INSTANCE = mdm_0 PARAMETER C_MB_DBG_PORTS = 1 PARAMETER C_USE_UART = 1 PARAMETER C_UART_WIDTH = 8 PARAMETER HW_VER = 1.00.g PARAMETER C_BASEADDR = 0x84400000 PARAMETER C_HIGHADDR = 0x8440ffff BUS_INTERFACE SPLB = mb_plb BUS_INTERFACE MBDEBUG_0 = microblaze_0_mdm_bus PORT Debug_SYS_Rst = Debug_SYS_Rst END

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.9. BEGYAZOTT RENDSZER SSZELLTSA XILINX EDK HASZNLATVAL

241

BEGIN proc_sys_reset PARAMETER INSTANCE = proc_sys_reset_0 PARAMETER C_EXT_RESET_HIGH = 1 PARAMETER HW_VER = 2.00.a PORT Slowest_sync_clk = clk_50_0000MHz PORT Ext_Reset_In = sys_rst_s PORT MB_Debug_Sys_Rst = Debug_SYS_Rst PORT Dcm_locked = Dcm_all_locked PORT MB_Reset = mb_reset PORT Bus_Struct_Reset = sys_bus_reset PORT Peripheral_Reset = sys_periph_reset END

MHS ler fjl fbb komponensei a kvetkezek:


A # jelenti a kommentet.
PARAMETER VERSION = 2.1.0. Ez az MHS fjl paramtereinek, s nyelvi konst-

rukcijnak aktulis verzi szmt jelenti (ne vltoztassunk rajta!) PORT: ez egy kls (external) port, amely az .ucf (knyszerfelttel) fjlban megegyez nvvel kell, hogy szerepeljen. Definilja egy I/O port irnyultsgt, bitszlessgt (endianitst), illetve azt, hogy milyen jelrl van sz (lehet akr CLK rajel, vagy RST reset/inicializl jel). A BEGIN-END kulcsszk kztti rszeken egy-egy IP mag (szellemi termk) lersa szerepel, amely lehet akr egy MicroBlaze mag, vagy egy I/O perifria is. o A BEGIN kulcssz utn a perifria gyri neve kell, hogy szerepeljen (ezen NE vltoztassunk, klnben a fordt hibazenetet kld). o A PARAMETER kulcssz utn a pldnyostott nv ll: ezt tnevezhetjk (hasonlan a VHDL pldnyostshoz). o A paramterek kztt ltalban a HW_VER a begyazott IP mag aktulis hardver vltozatt jelenit (IP katalgus adat). o BUS_INTERFACE kulcssz azt defninlja, hogy az integrlt IP mag a begyazott rendszer melyik szabvnyos, a Xilinx ltal definilt bels buszrendszerhez csatlakozik (pldul PLB, XCL, LMB) o A PORT kulcssz utn a begyazott IP magok portjainak nevei szerepelnek, a kvetkez hozzrendels szerint: gyri_portnv = felhasznl_ltal_definilt_port / vagy bels jelnv:

Ezekrl a paramterekrl rszletes lerst a Xilinx EDK referencia segdlet (reference guide) nyjt [XILINK_EDK].

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

242

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

MSS: MicroBlaze Szoftver (Driver) ler llomny


A kvetkez forrskd a szoftver/driver (de nem alkalmazs!) tesztrendszer sszelltsa sorn generlt MicroBlaze driver ler fjl bels struktrjt s nyelvi konstrukciit szemllteti. Az itt lv alacsony-szint driverek ltalban az sszelltott begyazott rendszerben lv IP magok meghajt gyri programjai (hacsak nem egyedi, a felhasznl ltal definilt IP termkrl van sz.)
PARAMETER VERSION = 2.2.0

BEGIN OS PARAMETER OS_NAME = standalone PARAMETER OS_VER = 3.00.a PARAMETER PROC_INSTANCE = microblaze_0 PARAMETER STDIN = RS232_PORT PARAMETER STDOUT = RS232_PORT END

BEGIN PROCESSOR PARAMETER DRIVER_NAME = cpu PARAMETER DRIVER_VER = 1.12.b PARAMETER HW_INSTANCE = microblaze_0 PARAMETER COMPILER = mb-gcc PARAMETER ARCHIVER = mb-ar END

BEGIN DRIVER PARAMETER DRIVER_NAME = bram PARAMETER DRIVER_VER = 2.00.a PARAMETER HW_INSTANCE = dlmb_cntlr END

BEGIN DRIVER PARAMETER DRIVER_NAME = bram PARAMETER DRIVER_VER = 2.00.a PARAMETER HW_INSTANCE = ilmb_cntlr END

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.9. BEGYAZOTT RENDSZER SSZELLTSA XILINX EDK HASZNLATVAL

243

BEGIN DRIVER PARAMETER DRIVER_NAME = generic PARAMETER DRIVER_VER = 1.00.a PARAMETER HW_INSTANCE = lmb_bram END

BEGIN DRIVER PARAMETER DRIVER_NAME = gpio PARAMETER DRIVER_VER = 3.00.a PARAMETER HW_INSTANCE = LEDs_8Bit END

BEGIN DRIVER PARAMETER DRIVER_NAME = gpio PARAMETER DRIVER_VER = 3.00.a PARAMETER HW_INSTANCE = LED_7SEGMENT END

BEGIN DRIVER PARAMETER DRIVER_NAME = gpio PARAMETER DRIVER_VER = 3.00.a PARAMETER HW_INSTANCE = Push_Buttons_3Bit END

BEGIN DRIVER PARAMETER DRIVER_NAME = gpio PARAMETER DRIVER_VER = 3.00.a PARAMETER HW_INSTANCE = Switches_8Bit END

BEGIN DRIVER PARAMETER DRIVER_NAME = uartlite PARAMETER DRIVER_VER = 2.00.a PARAMETER HW_INSTANCE = RS232_PORT END

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

244
BEGIN DRIVER PARAMETER DRIVER_NAME = emc PARAMETER DRIVER_VER = 3.00.a PARAMETER HW_INSTANCE = Micron_RAM END

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

BEGIN DRIVER PARAMETER DRIVER_NAME = generic PARAMETER DRIVER_VER = 1.00.a PARAMETER HW_INSTANCE = clock_generator_0 END

BEGIN DRIVER PARAMETER DRIVER_NAME = uartlite PARAMETER DRIVER_VER = 2.00.a PARAMETER HW_INSTANCE = mdm_0 END

BEGIN DRIVER PARAMETER DRIVER_NAME = generic PARAMETER DRIVER_VER = 1.00.a PARAMETER HW_INSTANCE = proc_sys_reset_0 END

MSS driver/szoftver ler fjl fbb komponensei a kvetkezek:


A # jelenti a kommentet.
PARAMETER VERSION = 2.2.0. Ez az MSS fjl paramtereinek, s nyelvi konst-

rukcijnak aktulis verzi szmt jelenti (ne vltoztassunk rajta!) A BEGIN-END kulcsszk kztti rszeken egy-egy IP mag (szellemi termk) meghajt programja (drivere) szerepel. Ez rendelhet akr MicroBlaze maghoz, akr IO perifrihoz is. o A BEGIN DRIVER kulcssz utn a perifria neve kell, hogy szerepeljen. A driver neve lehet akr gyri (pl: GPIO, UARTLITE stb.) vagy lehet akr GENERIC, amely azt jelzi, hogy az adott perifrihoz nem tartozik driver (de akkor is meg kell adni). BEGIN OS: MicroBlaze mag opercis rendszere (ha nincs belltva, akkor n. standalone mdban fut) STD_IN: szabvnyos input (ezt rdemes az UART I/O perifria modul RX vonalra lltani, azrt, hogy egy terminlon keresztl tudjunk adatok kldeni, vagy akr fogadni lsd 2.43. bra)

www.tankonyvtar.hu

Fodor Attila, Vrshzi Zsolt, PE

2.9. BEGYAZOTT RENDSZER SSZELLTSA XILINX EDK HASZNLATVAL

245

STD_OUT: szabvnyos output (ezt szintn rdemes az UART IO peri-

fria modul TX vonalra lltani) BEGIN PROCESSOR: MicroBlaze-mag fordt programjnak belltsa: pl. szabvnyos GNU compiler (gcc) o A DRIVER_VER: jelzi a meghajt program aktulisan hasznlt verzi szmt (<fverzi.alverzi.revizi> formtumban pl. <1.01.b>) o A HW_INSTANCE kulcssz definilja a driver egy pldnyostott nevt (ez szintn tetszleges lehet MHS-hez hasonlan).

Hardver implementlsa s generlsa


A begyazottt alaprendszer elksztse a rendszer hardver rszeinek sszelltst jelenti. Ezt a Xilinx ISE fordtsi (szintetizlsi) lpseihez hasonlan kell implementlni, s a vgn a bitstream fjl-t legenerlni. Megjegyeznm, hogy a Xilinx XPS rendszer httr utastsokknt a Xilinx XST eszkz parancsait hvja meg (akr script alap, parancs-soros zemmdban is dolgozhatunk). 1. A Hardver rendszer implementlshoz az XPS PlatGen nevezet program moduljt kell elindtani, a Hardware men Generate Bitstream opci, vagy az Ikonsor eszkztrnak kivlasztsval. Ez a begyazott rendszer komplexitstl fggen nhny percet (tbb processzor esetn akr rt! is ignybe vehet). a. Ezekben a lpsekben trtnik a korbban megismert EDIF logikai netlista fjl ellltsa: Genarate Netlist , b. a terv (hardver) szintetizlsa, implementlsa (fizikai lekpezs / MAP, elhelyezs / PLACE illetve sszekts /ROUTE fzisok vgrehajtsa). Genarate Bitstream: 2. Az elz 1./b lpsben az implementlt terv egy system.bit nev bitstream llomny formjban generldik, a projektnk <drive>\ProjektNv\implementation\ alknyvtra alatt. Fontos! Mivel ez a fjl mg csak az elkszlt begyazott tesztrendszer hardver rszeit tartalmazza (hw), mindenfle szoftver alkalmazs (sw) lefordtsa nlkl, ezrt ha ezt a system.bit llomnyt letltjk az FPGA-s krtyra, csak a ramkrket (CLB, BRAM stb.) konfigurlsa trtnik meg, valjban rdemi vltozs a tesztrendszer mkdsnek ellenrzshez nem figyelhet meg!

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

246

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Alkalmazi szoftver implementlsa s fordtsa


A Xilinx XPS Application folyamat ablakban a szoftver projektek listjt lthatjuk (2.47. bra)

2.47. bra: Szoftver alkalmazsok Minden szoftver alkalmazshoz hozz kell rendelni egy begyazott processzort, amin a programjainkat futtatni szeretnnk (esetnkben, ha mst nem adtunk meg nvnek az .mhs fjl lerban, akkor ez a microblaze_0 nev processzor). Az Executable opci a legenerlt s futtathat szofver kd nevt definilja egy szabvnyos ELF (Executable and Linkable Format) fjl formjban (<Projektnv.elf>). Ez tltdik le, mint egy trgykd szoftver (sw) llomny az FPGA-ra. A Compiler opcik kztt lehet belltani az n. Linker Script-et, amellyel az egyes szegmensekhez (pl: instruction-kd, dataadat, stack-verem, heap-kupac) rendelhet akr a bels LMB BRAM memria (esetnkben), akr egy kls (Nexys-2 krtyn Micron_SRAM) memria. Ezeket hacsak nem akarunk boot-loadert rni az alkalmazsunkkhoz, amely a kls memribl tlti be az adatokat hagyjuk a bels lmb_Xbram memrikban definilva (X: jelli az d-adat, illetve iutasts rszeket). A Sources menpont alatt pedig a tnyleges alkalmazi program forrskdjait tallhatjuk, egy hierarchikus listba szervezve. Itt meg lehet adni akr szabvnyos forrs .c, .cpp, vagy fordtsi knyvtraknak .h, .hcc az llomnyait is. Jelenlegi pldnkban csak egyetlen generlt forrs llomny tallhat: <Projektnv.c> nven, amely a program belpsi pontjt, azaz a main() fggvnyt tartalmazza. A szoftver llomnyok fordtsa, valamint a futtathat trgykd llomny ellltsa (.elf) a kvetkez lpsekbl ll: 1. Library Generate : az IO perifrik (IP magokhoz) kapcsold driverek knyvtrainak (fggvnyeinek) ellltsa 2. Forrskdok (.c, .cpp) illetve header-fjlok (.h, .hpp) fordtsa (compiler) 3. Ha szksges, akkor a Linker-script generlsa : amely pontosan definilja az egyes szegmensek, mely cmtartomnyra (bels, vagy kls memria) kerljenek. Megjegyeznnk, ppen ezrt nveltk 32KByte mretre a bels BRAM memrit, hogy a lefordtott alkalmazi programokbl kpzett futtathat (.elf) fjl belefrjen. Ha
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

2.9. BEGYAZOTT RENDSZER SSZELLTSA XILINX EDK HASZNLATVAL

247

erre nincs lehetsg, akkor kls memrit (pl SRAM, DDR, vagy Flash memrit) kell hasznlni, s boot-loader-el kell betlteni a futtatand alkalmazi programjainkat. Ez azonban tlmutat a jelenlegi jegyzet funkcionalitsn. Tovbbi rszletekrt a Xilinx lersait [XILINX_EDK] rdemes ttekinteni, vagy akr a Xilinx Platform Studio HELP is hasznlhat a program hasznlatnak megrtshez.

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

2.10. Begyazott tesztalkalmazs (TestMemory) letltse s tesztelse az FPGA krtyn


Miutn minden szksges hardver-szoftver rendszert sszelltottunk, implementltunk, illetve lefordtottunk, akkor kvetkezhet a generlt bitstream fjl FPGA-ra tltse s tesztelse. A korbban ellltott futtathat trgykd .ELF alkalmazi llomnyt (TestMemory.elf), illetve a generlt bitstream llomnyt (system.bit) kell sszefzni n. mergelni. Ezt a Device Configuration men BRAM init/ Update Bitstream opci, vagy az Ikonsor tudjuk akr egy lpsben megtenni. Ezutn elll a <ProjektNv>\implementation alknyvtr alatt egy download.bit llomny (utalva a letlthetsgre) amely mr magban foglalja a futtathat alkalmazi program, illetve begyazott alaprendszer sszefordtott rszeit is. A felhasznli / alkalmazi TestMemory program futtatshoz a kvetkez lpseket kell megtenni: 4. Csatlakoztassuk s indtsuk el a Digilent Nexys-2 ktyt. 5. Az FPGA-s krtya, illetve a hoszt PC egy szabvnyos null-modem kbelen keresztl kell, hogy kapcsoldjon. 6. Ahhoz, hogy a soros porti adatokat meg tudjuk jelenteni, illetve el tudjuk kldeni egy Terminl programra is szksg van. Itt lehet hasznlni akr a Windows beptett Hypeterminal programjt, vagy ms kls programokat (pl. Telnet, Putty stb.) a. Mi az els, HyperTerminal belltst s hasznlatt mutatjuk be rviden.

b. Szksges paramterek: BaudRate: 9600 (Fontos: ez a bellts pontosan abbl az .mhs paramterbl szrmazik, amit a C_BAUDRATE paramternek lltottunk be az xps_uartlite modul esetn, lsd korbbi MHS fjl!). c. Data bit: 8 / Parity bit: None (ne legyen parits ellenrzs) / Stop bit: 1 / Flow Control: None. 7. Ezutn az Digilent Adept Suite program segtsgvel tltsk le az FPGA-ra a download.bit konfigurcis bitstream llomnyt.
Fodor Attila, Vrshzi Zsolt, PE www.tankonyvtar.hu

2.10. BEGYAZOTT TESZTALKALMAZS (TESTMEMORY) LETLTSE

249

8. Ha mindent jl lltottunk be, s generltunk, akkor a kvetkez informciknak kell megjelennie soros vonalon keresztl a HyperTerminal ablakban:
-- Entering main() Starting MemoryTest for Micron_RAM: Running 32-bit test...PASSED! Running 16-bit test...PASSED! Running 8-bit test...PASSED! -- Exiting main() --

(Hiba esetn: FAILED! zenetet kapunk). Ezzel az FPGA alap MicroBlaze begyzott rendszerek bevezetsl szolgl szemlltet tesztrendszer sszelltsa, valamint a hardver-szoftver rszek egyttes tesztelse befejezdtt. Tovbbi hasznos dokumentcik rhetek el a Xilinx oldaln, illetve a Xilinx Platform Studio grafikus felletn keresztl az albbi menpontokban: Help EDK Online Documentations: terminolgia, szoftverek rszeinek, komponenseinek, illetve EDK IP moduljainak rszletes ismertetses Help EDK examples on the web: rszletes lersok begyazott rendszerek szszelltshoz Xilinx Egyetemi Program keretben sok, haszos letlthet dokumentcit tallunk, nem csak EDK tmakrben [XILINX_UNI]

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

250

2. PROGRAMOZHAT LOGIKAI KAPURAMKRK

Irodalomjegyzk a 2. fejezethez
[ADA] ADA programming language (honlap): http://www.adaic.org/ [ASHENDEN] Peter. J. Ashenden: The Designer's Guide to VHDL, 3. Kiads (2008), Morgan Kaufmann Publisher [BME] dr. Horvth Tams, Harangoz Gbor VHDL segdlet, honlap:
http://www.fsz.bme.hu/~tom/vhdl/vhdl_s.pdf

[CATAPULTC] CatapultC Synthesis Tool (honlap - 2011)


http://www.mentor.com/esl/catapult/overview

[CHU] Pong P. Chu -FPGA Prototyping by VHDL Examples: Xilinx Spartan-3 Version, Wiley, 2008. Honlap: http://academic.csuohio.edu/chu_p/rtl/fpga_vhdl.html [DIGILENT] DigilentInc Hivatalos honlap: http://digilentinc.com (2011) [DISSZ] Vrshzi Zsolt PhD Disszertci: Emullt-digitlis CNN-UM architektrk vizsglata: Retina modell s Cellulris Hullmszmtgp implementcija FPGA-n. (Pannon Egyetem, ITDI 2010) honlap:
http://konyvtar.vein.hu/doktori/2010/Voroshazi_Zsolt_dissertation.pdf

[GAJSKI] D. D. Gajski and R. H. Kuhn, New VLSI Tools, IEEE Computer, Vol. 16, no. 12 (December 1983), pp. 1114. [HANDELC] Handel-C Synthesis Methodology (honlap - 2011)
http://www.mentor.com/products/fpga/handel-c/

[HASKELL] Richard E. Haskell & Darrin M. Hanna Introduction to Digital Design VHDL, Digilent Inc-LbeBooks, 2009. Honlap:
http://digilentinc.com/Data/Textbooks/Intro_Digital_Design-Digilent-VHDL_Online.pdf

[IMPULSEC] Impulse CoDeveloper (honlap - 2011) http://www.impulseaccelerated.com/ [ISIM] Xilinx ISim szimultor hivatalos oldal: http://www.xilinx.com/tools/isim.htm [KERESZTES] Hossz Gbor Keresztes Pter: VHDL alap rendszertervezs (Budapest, 2006) honlap:
https://wiki.sch.bme.hu/pub/Villanyszak/TervezesProgramozhatoEszkozokkel/vhdl.pdf

[LABVIEW] NI LabView FPGA Module (honlap - 2011) http://www.ni.com/fpga/ 71. oldal: [MATLAB] Matlab FPGA Design Tool (honlap - 2011) http://www.mathworks.com/fpgadesign/

[MICROBLAZE] MicroBlaze Reference Guide (2011) honlap:


http://www.xilinx.com/support/documentation/sw_manuals/xilinx13_1/mb_ref_guide.pdf

[MODELSIM] ModelSim PE Student Edition HDL Simulation (holnap - 2011):


http://model.com/content/modelsim-pe-student-edition-hdl-simulation

[MOORE] Gordon Moore: Cramming More Components Onto Integrated Circuits [Electronics Magazine, 1965] [NEXYS2] Digilent Nexys-2 fejleszt krtya: http://digilentinc.com/Products/Detail.cfm?NavPath=2,400,789&Prod=NEXYS2 (2011)
www.tankonyvtar.hu Fodor Attila, Vrshzi Zsolt, PE

IRODALOMJEGYZK A MSODIK FEJEZETHEZ

251

[PMOD] Digilent Peripheral Modules: (2011) [SPARTAN3] DS312 Spartan-3 FPGA Family: Complete Data Sheet (hivatalos adatlap 2011): http://www.xilinx.com/support/documentation/data_sheets/ds312.pdf [SYSTEMC] System-C Language Reference (honlap - IEEE Std 1666-2005)
http://www.systemc.org/home/ http://digilentinc.com/Products/Catalog.cfm?NavPath=2,401&Cat=9

[SYSTEM_VERILOG] System Verilog-Unified Hardware Design, Specification, and Verification Language (IEEE Std 1800-2009)
http://ieeexplore.ieee.org/xpl/mostRecentIssue.jsp?punumber=5354133

[VDEC] Digilent Video Decoder Board (2011) [VERILOG] Hardware Description Language Based on the Verilog(R) Hardware Description Language (IEEE Std 1364-1995). New York, Institute of Electrical and Electronics Engineers, Inc., 1995. [VESA] VESA 2011: Honlap: http://www.vesa.org (CVT: Coordinated Video Timing Formula adatlap) [VHDL87] IEEE Standard VHDL Language Reference Manual (IEEE Std 1076-1987). New York, Institute of Electrical and Electronics Engineers, Inc., 1988. [VHDL93] IEEE Standard VHDL Language Reference Manual (IEEE Std 1076-1993). New York, Institute of Electrical and Electronics Engineers, Inc., 1994. [WEBPACK] Xilinx ISE WebPack hivatalos honlap (legfrissebb verzi):
http://www.xilinx.com/tools/webpack.htm http://digilentinc.com/Products/Catalog.cfm?NavPath=2,648&Cat=4

[XILINX] Xilinx Hivatalos honlap: http://www.xilinx.com (2011) [XILINX_DEVICES] Xilinx eszkzk hivatalos oldala Xilinx eszkzk: http://www.xilinx.com/products/silicon-devices/fpga/index.htm (2011) [XILINX_EDK] Xilinx Embedded Development Kit - Platform Studio (honlap - 2011):
http://www.xilinx.com/tools/platform.htm

[XILINX_SCHEMATIC] Xilinx Schematic Editor (honlap - 2011)


http://www.xilinx.com/itp/xilinx10/isehelp/ise_c_schematic_overview.htm

[XILINX_STATE_CAD] Xilinx StateCAD (honlap - 2011)


http://www.xilinx.com/itp/xilinx10/isehelp/ise_n_statecad_navpage.htm

[XILINX_UNI] Xilinx University Program (honlap 2011):


http://www.xilinx.com/university/index.htm

Fodor Attila, Vrshzi Zsolt, PE

www.tankonyvtar.hu

Vous aimerez peut-être aussi