Examensarbete Videokort för VME-bussen Andreas Kingbäck 2003-06-02 Department of Science and Technology Linköpings Universitet SE-601 74 Norrköping, Sweden Institutionen för teknik och naturvetenskap Linköpings Universitet 601 74 Norrköping
Videokort för VME-bussen Examensarbete utfört i tillämpad elektronik vid Linköpings Tekniska Högskola, Campus Norrköping Andreas Kingbäck Handledare: Kent Axelsson Examinator: Kent Axelsson Norrköping den 2 juni 2003 Department of Science and Technology Linköpings Universitet SE-601 74 Norrköping, Sweden Institutionen för teknik och naturvetenskap Linköpings Universitet 601 74 Norrköping
Avdelning, Institution Division, Department Institutionen för teknik och naturvetenskap Datum Date 2003-06-02 Department of Science and Technology Språk Language X Svenska/Swedish Engelska/English Rapporttyp Report category X Examensarbete B-uppsats X C-uppsats D-uppsats ISBN ISRN Serietitel och serienummer ISSN Title of series, numbering URL för elektronisk version http://www.ep.liu.se/exjobb/itn/2003/de/030 Titel Videokort för VME-Bussen Title Videocard for the VMEbus Författare Author Andreas Kingbäck Sammanfattning Denna rapport behandlar konstruktion och tillverkning av ett videokort till Versa Module Eurocard (VME) bussen. Kortet skall användas vid laborationer i kurser där mikrodatorkort VM42 från PEP Modular Computer används. Grafikkortet klarar en upplösning på minst 640x480 punkter med 24-bitars färg. Hela konstruktionen är uppbyggd kring Lattice MACH4A3-384/160. Designen av MACH kretsen är uppbyggd i Very High speed integrated hardware Description Language (VHDL) med hjälp av programmen ActiveHDL, Synplify Pro, ispdesignexpert samt LatticePRO. Abstract This report is about the construction and fabrication of a video card for the Versa Module Euro card (VME) bus. The card will be used as a platform in laborations in courses including the VM42 microcontroller from PEP Modular Computer. The card is able to display a resolution of at least 640x480 pixels with 24bit color. The heart in the construction is the Lattice MACH4A3-384/160 Complex Programmable Logic Device (CPLD). All programming is done in Very High speed integrated hardware Description Language (VHDL) with the help of ActiveHDL, Synplify Pro, ispdesignexpert and LatticePRO software tools Nyckelord Keyword VMEbus, VME, VHDL, CPLD, Videokort, VM42, VGA, CAD, ActiveHDL, Protel, Mönsterkortstillverkning
Videokort för VME-bussen Sammanfattning Denna rapport behandlar konstruktion och tillverkning av ett videokort till Versa Module Eurocard (VME) bussen. Kortet skall användas vid laborationer i kurser där mikrodatorkort VM42 från PEP Modular Computer används. Grafikkortet klarar en upplösning på minst 640x480 punkter med 24-bitars färg. Hela konstruktionen är uppbyggd kring Lattice MACH4A3-384/160. Designen av MACH kretsen är uppbyggd i Very High speed integrated hardware Description Language (VHDL) med hjälp av programmen ActiveHDL, Synplify Pro, ispdesignexpert samt LatticePRO. Abstract This report is about the construction and fabrication of a video card for the Versa Module Euro card (VME) bus. The card will be used as a platform in laborations in courses including the VM42 microcontroller from PEP Modular Computer. The card is able to display a resolution of at least 640x480 pixels with 24bit color. The heart in the construction is the Lattice MACH4A3-384/160 Complex Programmable Logic Device (CPLD). All programming is done in Very High speed integrated hardware Description Language (VHDL) with the help of ActiveHDL, Synplify Pro, ispdesignexpert and LatticePRO software tools V M 4 2 VME-Buss V I D E O Andreas Kingbäck
Videokort för VME-bussen Förord Detta examensarbete uppstod på grund av att jag ville göra en större konstruktion med VHDL. Jag presenterade mina idéer för Kent Axelsson och Sig Björklund på ITN. Kent och jag kom då överens om ett examensarbete där en bild skulle hämtas från en kamera och sedan visas på en monitor. Bilden skulle även kunna behandlas av en mikrodator innan den visas på bildskärmen. Ett nyinköpt mikrokontrollerkort från PEP Modular Computer med VME buss interface skulle användas för ändamålet. På kortet skulle en eller flera FPGA eller CPLD kretsar sköta hanteringen av kameran och kommunikationen med mikrodatorkortet över VME-bussen. Tyvärr visade det sig att detta inte gick att genomföra på rimlig tid. Detta berodde främst på faktorer som vi inte kunde råda över i initialskedet. Efter grundläggande konstruktion på ca fyra veckor beställdes kretsar och en kamera för ändamålet. Under tiden fortsatte konstruktion av de olika delblocken samt test vartefter kretsarna anlände. Jag hade tyvärr stora problem att få kontakt med leverantören av kameran. När jag slutligen fick besked visade sig att den kamera som de hade hemma använde sig av USB bussen för att kommunicera med omvärlden i stället för parallell-interface. Den tidigare utlovade varianten fanns inte längre att få tag på. Lämpliga kretsar för USB bussen skulle heller inte finnas tillgängliga innan fjärde kvartalet 2001. När detta uppdagade sig hade ca sju veckor av tiden gått. Vi fick då överge videokameran. Nu skulle endast ett videokort konstrueras. Konstruktionsarbetet började då om från början med val av andra kretsar. Denna rapport bygger på konstruktionen av detta videokort. Jag vill passa på att tacka följande personer: Kent Axelsson för stöd i arbetet och hjälp med att beställa komponenter. Stig Björklund för hjälp med utvecklingskort för FPGA och CPLD. Rolf Samuelsson och Kjell Karlsson för hjälp med programvaror och labutrustning. Lars Wahlström på Solectron för hjälp med montering av komponenter på mönsterkortet och att han senare skänkte lödutrustning till ITN. Slutligen också min fästmö Anna för att hon stod ut med mig trots att jag i perioder inte var hemma så mycket. Andreas Kingbäck
Videokort för VME-bussen Ordlista Front porch: Back porch: BGA EDIF VME: CPLD: CPU: DAC: FPGA PLCC VGA: VHDL: VM42: Tiden mellan slutet på den aktiva video signalen och starten på synkroniseringssignalen. Tiden mellan slutet på synkroniseringssignalen och starten på den aktiva videosignalen. Ball Grid Array Electronic Design Interchange Format Versa Module Euro card Complex Programmable Logic Device. (Komplex programmerbar logikkrets). Central Processing Unit Digital to Analog Converter Field Programmable Gate Array Plastic Leaded Chip Carrier Video Graphics Array Very high speed integrated Hardware Description Language. Mikrodatorkort från PEP Modular Computer Andreas Kingbäck
Videokort för VME-bussen Innehållsförteckning INLEDNING... 1 KRAVSPECIFIKATION:... 1 UPPGIFT... 1 ARBETSGÅNG:... 1 TIDSPLAN:... 1 RAPPORTENS UPPLÄGGNING... 2 INDUSTRISTANDARD FÖR VGA 640 X 480 PUNKTER... 3 Specifikation för en rad... 3 Specifikation för ett svep... 3 Övrigt... 4 BILDSKÄRMEN... 5 VGA SIGNALGENERATOR... 5 ELEKTRISKT INTERFACE... 7 INLEDNING... 8 FUNKTIONS BESKRIVNING... 8 Bakplan... 9 DATAÖVERFÖRING... 9 Allmänt om läs- och skrivcykeln... 9 Signaler beteckningar... 10 Skrivcykeln... 14 VIDEOKORT... 16 VAL AV KOMPONENTER... 17 Styrenhet... 17 Grafikminne... 17 DAC... 17 Kristall... 17 Matningsspänning... 18 Övrigt... 18 HÅRDVARUKONSTRUKTION... 19 Strömförsörjning... 20 Minnet... 22 Video DAC... 23 Oscillator... 25 Styrenhet... 26 Komponentlista för Styrenhet... 26 VHDL... 27 UTVECKLINGSSYSTEMET... 28 ARBETSGÅNG FRÅN ACTIVEHDL TILL FÄRDIG KRETS... 29 ActiveHDL... 29 Syntes i Synplify Pro... 32 Andreas Kingbäck
Videokort för VME-bussen Implementation i ispdesignexpert... 34 Uppladdning av beskrivningen i kretsen med LatticePRO... 36 VHDL BESKRIVNING AV VIDEOKORTET... 38 IN, UT OCH INTERNA SIGNALER FÖR TOPPNIVÅN... 39 D-VIPPA FÖR ATT GENERERA HALVA KLOCKFREKVENSEN... 41 D-VIPPA FÖR ATT GENERERA HALVA KLOCKFREKVENSEN... 42 VGA-BLOCKET... 44 Signalbeskrivningar för VGA-blocket... 45 VGA-BLOCKET NIVÅ TVÅ... 46 KOLUMNRÄKNARE... 48 RESETMEKANISM FÖR RÄKNARNA... 49 DATASPLITTER FÖR ATT GENERERA 8-BITARSBUSSARNA R, G OCH B.... 50 VGA-ADDRESSGENERATOR... 51 GENERATOR FÖR VERTIKALA STYRPULSER... 53 GENERATOR FÖR HORISONTELLA STYRPULSER... 59 VME BLOCKET... 60 Signalbeskrivningar för VME-blocket... 61 Adressavkodaren och DTACK-generatorn... 62 Signalbeskrivningar för databussblocket... 67 VME-DATARIKTNINGSBLOCKET... 69 MINNESDATARIKTNINGSBLOCKET... 70 DATASTYRNINGSBLOCKET... 71 Skrivning till minnet från VME-bussen... 72 Läsning av minnet... 73 MIKRODATORKORT VM42... 77 CAD AV MÖNSTERKORTET... 80 INLEDNING... 80 SCHEMA... 80 MÖNSTERKORTET... 81 TILLVERKNING AV MÖNSTERKORTET... 83 TILLVERKNING AV ETT TVÅLAGERS MÖNSTERKORT... 84 Steg 1: Utskrift av ledningsmönster...84 Steg 2: Utskärning av laminat till lämplig storlek... 84 Steg 3: Borrning... 84 Steg 4: Rengörning av kortet... 85 Steg 5: Plättering... 85 Steg 6: Laminering av fotoresist... 86 Steg 7: Exponering... 86 Steg 8: Framkallning... 86 Steg 9: Estning... 87 Steg 10: Laminering av lödmask...87 Steg 11: Exponering av lödmask...87 Steg 12: Framkallning av lödmask... 88 Steg 13: Härdning av lödmask... 88 Andreas Kingbäck
Videokort för VME-bussen Rening av processvatten... 88 RESULTAT... 89 KÄLLFÖRTECKNING... 90 LITTERATUR:... 90 INTERNET:... 90 Andreas Kingbäck
Videokort för VME-bussen Bilagor BILAGA 1: KOPPLINGSSCHEMAN BILAGA 2: BESKRIVNING AV MÖNSTERKORTET BILAGA 3: VHDL-BLOCK BILAGA 4: VHDL-KOD BILAGA 5: VHDL-EKVATIONER BILAGA 6: BENKONFIGURATION BILAGA 7: DATABLAD SWITCHREGULATOR LM257S-3.3 BILAGA 8: DATABLAD MINNE AS7C34096 BILAGA 9: DATABLAD DAC ADV7120 BILAGA 10: DATABLAD IQXO-350 BILAGA 11: DATABLAD ispmach 4A CPLD Figurförteckning FIGUR 1: SYNKRONISERINGSSIGNALER... 6 FIGUR 2: VGA-KONTAKT... 7 FIGUR 3: VME-KONTAKTEN... 9 FIGUR 4: TIDSDIAGRAM FÖR LÄSCYKELN... 13 FIGUR 5: TIDSDIAGRAM FÖR SKRIVCYKELN... 15 FIGUR 6: SCHEMA FÖR STRÖMFÖRSÖRJNINGEN... 20 FIGUR 7: SCHEMA FÖR EN MINNSEKAPSEL... 22 FIGUR 8: VIDEODAC... 23 FIGUR 9: KOPPLINGSSCHEMA FÖR KRISTALL... 25 FIGUR 10: UTSIGNAL FRÅN KRISTALL... 25 FIGUR 11: ACTIVEHDL... 29 FIGUR 12: "DESIGN FLOW" I ACTIVEHDL 5.1... 30 FIGUR 13: FLÖDESINSTÄLLNINGAR I ACTIVEHDL... 31 FIGUR 14: SYNPLIFY PRO... 32 FIGUR 15: IMPLEMENTERINGSINSTÄLLNINGAR... 33 FIGUR 16: ISPDESIGNEXPERT... 34 FIGUR 17: ISPDESIGNEXPERT CONSTRAINT EDITOR... 35 FIGUR 18: ISPVM SYSTEM... 36 FIGUR 19: LATTICEPRO... 37 FIGUR 20: ALLA VHDL-BLOCKEN FÖR VIDEOKORTET... 38 FIGUR 21: D-VIPPA... 42 FIGUR 22: VGA-BLOCKET... 44 FIGUR 23: VGA-BLOCKET NIVÅ TVÅ... 46 FIGUR 24: DATASPLITTER... 50 FIGUR 25: VGA-ADDRESSGENERATOR... 51 FIGUR 26: SIMULERING AV DEN VERTIKALA SYNKPULSGENERATORN... 54 FIGUR 27: SIMULERING AV VERTIKAL STYRPULSGENERATOR... 57 FIGUR 28: VME-BLOCKET... 60 Andreas Kingbäck
Videokort för VME-bussen FIGUR 29: VME-BLOCKET PÅ NIVÅ 2... 62 FIGUR 30 TOPPNIVÅ DATABUSSBLOCKET... 66 FIGUR 31: NIVÅ TVÅ DATABUSSBLOCKET... 68 FIGUR 32: VME-DATARIKTNINGSBLOCKET... 69 FIGUR 33: MINNESRIKTNINGSBLOCKET... 70 FIGUR 34: DATASTYRNINGSBLOCKET... 71 FIGUR 35: SKRIVNING TILL MINNET FRÅN VME-BUSSEN... 72 FIGUR 36: LÄSNING AV MINNET... 73 FIGUR 37: MÖNSTERKORT... 81 FIGUR 38: KOMPONENTPLACERING... 82 Andreas Kingbäck
Videokort för VME-bussen Inledning På institutionen för Teknik och (ITN) vid Linköpings Universitet har under en längre tid i kurser för mikrodatorer ingått teoretiska kunskaper om hur man skall konstruera ett videokort. Nu vill man även kunna utföra praktiska laborationer och behöver då ett kort för ändamålet. I den kurs som man i första hand tänkt använda videokortet används en mikrokontroller från PEP Modular Computers av typen VM42 som är bestyckad med en MC68040 processor på 33 MHz. VM42-kortet har en anslutning för VME-buss. Läsaren förutses ha goda kunskaper i digital konstruktion och av programmeringsspråket VHDL för att till fullo kunna tillgodogöra sig denna rapport. Kravspecifikation: Videokortet skall anslutas till VME-bussen Kortet skall byggas upp med logik och programmeras med VHDL Upplösningen skall vara 640x480 Kortet skall kunna visa minst 256 färger Uppgift Konstruera och tillverka videokortet för VME-bussen enligt kraven angivna i förordet. Arbetsgång: 1. Konstruktion 2. Tillverkning 3. Test 4. Rapport Tidsplan: Arbetet påbörjas period 2 2001 och framläggning jan/feb 2003. Den långa tid som gått sedan starten på arbetet och slutförandet beror i huvudsak berott på inledande problem och att arbetet blev mycket större än vad jag kunde se i startläget. Efter sommaren började jag och arbeta och detta har tagit mycket av min tid därför har rapportskrivandet och färdigställandet av VHDL-koden tagit lång tid. Andreas Kingbäck 1
Videokort för VME-bussen Rapportens uppläggning Rapporten börjar med att beskriva grundläggande information om VGA och VME. Därefter följer konstruktion, VHDL-beskrivning, Testprogram i 68040 processorn, CAD, tillverkning av mönsterkortet samt test av kortet. Andreas Kingbäck 2
Videokort för VME-bussen VGA Video Graphics Array (VGA) är en standard för färgmonitorer som visar 16 färger med en upplösning på 640 x 480 punkter. Uppdateringsfrekvensen dvs. antalet bilder som visas per sekund är 60. Den första standarden som kunde visa färg var CGA (Colour Graphics Adapter) med en upplösning på 160 x 200 punkter med 16 färger eller 640 x 200 utan färg. Den lanserades 1981. Därefter kom EGA (Enhanced Graphics Adapter) 1984 och den klarade att visa 64 färger i en upplösning av 640 x 350 punkter. Efterföljaren till VGA var XVGA (Extended Video Grahics Array) med en maximal upplösning på 1024 x 768 punkter. Industristandard för VGA 640 x 480 punkter Videokortet skall följa industristandarden för VGA 640 x 480 punkter. Följande data gäller för standarden. Klockfrekvens 25.175 MHz Linje frekvens 31469 Hz Uppdaterings frekvens 59.94 Hz Specifikation för en rad 8 punkter front porch 96 punkter horisontal synk 40 punkter back porch 8 punkter vänster ram 640 punkter video 8 punkter höger ram Detta ger totalt 800 punkter rad. Specifikation för ett svep 2 linjer front porch 2 linjer vertikal synk 25 linjer back porch 8 linjer övre ram 480 linjer video 8 linjer nedre ram Detta ger totalt 525 linjer per svep Den horisontella och vertikala synkroniserings pulserna är negativa. Andreas Kingbäck 3
Videokort för VME-bussen Övrigt Det finns tre standardiserade moder som VGA-kort oftast klarar av. Dessa är : 640 x 350 punkter och 70Hz är kompatibel med EGA, men på en VGA skärm. 640 x 400 punkter och 70Hz är MS-DOS textläge. 640 x 480 punkter och 60Hz är standard Windows grafikläge med 16 färger. Andreas Kingbäck 4
Videokort för VME-bussen Bildskärmen Bilden skapas på bildskärmen när en stråle av elektroner träffar fosforlagret som finns inne i bildröret och ljus emitteras. För att skapa de olika färgerna finns tre stycken elektronkanoner en för varje färg (röd, grön och blå) längst bak i bildröret. För att elektronstrålen skall träffa fosforytan på rätt ställe så används kopparspolar som sitter runt bildrörets hals. När en ström flyter genom dessa spolar skapas ett magnetfält som böjer elektronstrålen. Innan elektronstrålen träffar fosforlagret passerar den skuggfiltret. Skuggfiltret är en platta med många hål som elektronstrålen kan passera genom. Hålavståndet i skuggfiltret avgör punktavståndet dvs. hur skarp bilden blir. VGA signalgenerator Bildskärmens styrenhet ser till att elektronstrålen sveper från vänster till höger och från topp till botten på bildröret För att starta och avbryta dessa svep finns det två stycken synkroniseringssignaler. Dessa synkroniseringspulser behövs för att bilden skall visas på ett korrekt sätt. Den horisontella synkroniseringssignalen används för att se till att punkterna visas på den synbara delen av bildskärmen sett från vänster till höger. Med en upplösning på 640x480 punkter och en uppdateringsfrekvens på 60Hz sänds bildpunkterna till bildskärmen i ett 25.422µs stort tids fönster. Horisontal synkroniseringspulsen går låg 0.64µs efter att sista bildpunkten har skickats till bildskärmen och är sedan låg i 3.81µs. En ny rad med bild punkter påbörjas tidigast 1.3µs efter att horisontal synkroniseringspulsen är avslutad. Med andra ord så upptar en linje tidsmässigt 25.422µs av det 31.17µs långa svepet. Under den återstående tiden är den horisontella noll intervallet. Under detta intervall är de utritade punkterna svarta. Se Figur 1 på nästa sida. Negativa pulser på den vertikala synkroniseringssignalen markerar början och slutet av videobilden som byggs upp av alla videoraderna. Detta för att bildskärmen skall visa alla linjerna i den synbara delen av bildskärmen sätt uppifrån och ned. Alla linjerna skickas till bildskärmen i ett 15.25ms stort tidsfönster. Den vertikala synkroniseringssignalen går låg minst 0.45ms efter att sista raden är överförd och ligger låg i 64µs. En bild tar upp 15.25ms av 16.784ms intervall. De övriga 1.534 ms kallas för den vertikala noll intervallet. Under detta intervall är då är de utritade punkterna svarta. Andreas Kingbäck 5
Videokort för VME-bussen Figur 1 Tids diagram för 640 x 480 60Hz Horsontellt blankningsi ntervall H-Synk 25.422µs 26.062µs 29.872µs 31.17µs Vertikalt blankningsi ntervall V-Synk 15.25ms 15.70ms 15.764ms 16.683ms Figur 1: Synkroniseringssignaler Andreas Kingbäck 6
Videokort för VME-bussen Elektriskt interface Bildskärmen ansluts med en femton polig honkontakt. Se Figur 2 och Tabell 1. Videosignalerna röd, grön och blå är analoga spänningar med topp till topp värde på 0.7V. Anpassningen är 75ohm. Övriga signaler har TTL nivåer dvs. 0 till 0.7V är en nolla och 3 till 5V en etta. Figur 2: VGA-kontakt Signal Stift Funktion Röd 1 Analog signal för den röda färg komponenten ca 0.7V topp till topp Grön 2 Analog signal för den gröna färg komponenten ca 0.7V topp till topp Blå 3 Analog signal för den blå färg komponenten ca 0.7V topp till topp Monitor ID 4 Använd av PC för att bestämma typ av bildskärm Digital jord 5 Digital jord. OBS måste åtskiljas från den analoga! Analog jord för röd färg 6 Analog jord för röd färg Analog jord för grön färg 7 Analog jord för röd färg Analog jord för blå färg 8 Analog jord för röd färg Ej använd 9 Jord för synkronisering 10 Jord för synkronisering Monitor ID 11 Använd av PC för att bestämma typ av bildskärm Monitor ID 12 Använd av PC för att bestämma typ av bildskärm Horisontal synk 13 Horisontal synk Horisontal synk 14 Horisontal synk Används ej 15 Tabell 1: Beskrivning av VGA-kontakten Andreas Kingbäck 7
Videokort för VME-bussen VME-bussen Inledning Förkortningen VMEbus står för Versa Module Eurocard bus och den definierades 1981 av ett antal olika tillverkare av datorkomponenter. I denna grupp ingick Motorola, Mosteck och Signetics som samarbetade för att definiera standarden. Sedan starten har standarden uppdaterats flera gånger och ny funktionalitet adderats. VMEbus-standarden är efterföljaren till VERSAbus som definierades av Motorola 1979 för sin 68000 mikroprocessor. VERSAbus används fortfarande idag men den har inte accepterats på samma sätt som VME-bussen. En stor fördel är att alla fritt får använda VME-bussen utan några licensavgifter. Detta hjälper till att stimulera användningen av bussen. Informationen om VME-bussen i detta kapitel är ej fullständig utan endast den information som är nödvändig för projektet beskrivs. Funktions beskrivning VME-bussen använder sig av en master/slav arkitektur. En huvudmodul överför data till och från slavmodulerna. Många huvudenheter kan finnas på samma buss därför kallas det för en fler behandlande buss (multi processing bus). För att detta skall fungera finns signalering för att bestämma vilken huvudenhet som får använda bussen. Vid fel i dataöverföringen signaleras även detta via bussen till huvudenheten som då behandlar felet på ett lämpligt sätt. VME-bussen är asynkron dvs. ingen klocksignal används för att synkronisera dataöverföringen. Den maximala dataöverföringshastigheten är 40Mbytes/s. Revision D av VME-bussen tillåter 64-bitars adress och 64-bitars dataöverföring och detta görs genom adress och data multiplexering. Överföringshastigheten i Revision D är maximalt 80Mbytes/s. Tabell 1 Egenskaper hos VME-bussen Adressering upp till 64-bitars databredd. (16,24,32 eller 64) Databussbredd upp till 64-bitar. (8,16,24,32 eller 64) Sju avbrottsnivåer. Felhantering Upp till 21 µ-processorer Systemdiagnos med SYSFAIL-signalen Kortstorlek 160x100mm eller 160x233mm Eurocard. Kontakt DIN-41612 Standard IEEE 1014, IEC 821 och IEEE 1101 Andreas Kingbäck 8
Videokort för VME-bussen Bakplan Modulerna är sammankopplade med ett bakplan. Bakplanet kan innehålla mellan två till tjugoen moduler. Ett eller två bakplan kan användas beroende på systemkonfigurationen. Om man använder ett bakplan med en kontakt (J1) finns 24 adress bitar,16 databitar och med två (J1 och J2) ökas kapaciteten till 64 bitars adress och databuss. Figur 3: VME-kontakten Dataöverföring Huvudenheterna överför data till och från slavenheterna via databussen. (DTB Data Transfer Bus). Databussen tillåter flera typer av busscykler. Dessa är läs/skriv cykel, blocköverföring, läs-modifieraskriv, endast adresscykel och avbrottscykeln. Endast läs- och skrivcykeln berörs i denna rapport då de andra ej används i detta projekt. För vidare information hänvisas till boken The VMEbus Handbook. Allmänt om läs- och skrivcykeln Läs och skriv cykeln är den mest förekommande av alla busscykler. Data kan överföras med 8,16,24 eller 32 bitar åt gången. Under överföringen adresserar en huvudenhet en slavenhet. Detta görs med adress linjerna A01-A31, sex stycken adressmodifieringskoder AM0-AM5 och två kontrollsignaler IACK* och LWORD*. Dessa signaler ligger ute på bussen när adressstroben AS* går låg. DS0* och DS1* bestämmer samtidigt vilken byte position inom en fyra bytes grupp som skall överföras. Se tabell 2. När slavenheten har läst av data från bussen signalerar den det till huvudenheten genom att sätta DTACK signalen låg. Huvudenheten avslutar sedan cykeln genom att sätta AS* hög. Se specifik information under läs- respektive skrivcykeln. Andreas Kingbäck 9
Videokort för VME-bussen Signaler beteckningar Endast de signaler som används i projektet beskrivs nedan. För fullständig specifikation hänvisas till IEEE 1014. Med en * efter signalens namn menas att den är aktivt låg. A01 A31 Adresseringssignaler som bestämmer vilken adress på videokortet som skall adresseras vid läsning eller skrivning. AS* När adresstroben går låg ligger adress och adressmodifieringssignalerna ute på bussen. D0 D15 Antalet bitar i databussen som används och dess position. Positionen varierar med hänsyn till signalerna DS0*, DS1*, A01 och LWORD* se tabell 2 DS0 DS1 Dessa signaler beskriver vilken i vilken position datan skall lagras. När de kombineras med LWORD* och A1 bestämmer de även storleken på data överföringen. Se Tabell 2 nedan. D31-D24 D23-D16 D15-D08 D7-D0 D S 1 * BYTE 0 BYTE 1 BYTE 2 BYTE 3 0 0 0 0 BYTE 0 BYTE 1 BYTE 2 0 1 0 0 BYTE 1 BYTE2 BYTE 3 1 0 0 0 BYTE 1 BYTE 2 0 0 1 0 BYTE 2 BYTE 3 0 0 1 1 BYTE 0 BYTE 1 0 0 0 1 D S 0 * A 0 1 L W O R D * Tabell 2: Antal databitar och deras position med hänsyn till DS1*, DS0*, A01 och LWORD* Andreas Kingbäck 10
Videokort för VME-bussen IACK* Avbrottskvittenssignal. Signalen drivs låg av den enhet som hanterar avbrottet. DTACK* Datakvittens. Vid skrivcykel sätts DTACK* efter att slavenheten har läst data från bussen och vid läscykel efter att data har lagts ut på bussen. DWORD* Bestämmer datastorleken vid överföring. BERR* Används för att indikera att ett överföringsfel uppstått. AM0 AM5 Adresseringsmodifieringskoderna bestämmer vilken typ av överföring som skall ske. I tabellen nedan visas standardmoderna vid överföring av data. IACK* förutsätts vara etta annars kommer processorn att hantera ett avbrott. Tabellen är på engelska för att förväxlingar inte skall ske. Address Modifier (Hex) Address Modifier (Binary) No of Address Bits Transfer Type 3F 111111 24 Standard supervisory block transfer 3E 111110 24 Standard supervisory program access 3D 111101 24 Standard supervisory data access 3C 111100 24 Standard supervisory 64-bit block transfer 3B 111011 24 Standard non-privileged block transfer 3A 111010 24 Standard non-privileged program access 39 111001 24 Standard non-privileged data access 38 111000 24 Standard non-privileged 64-bit block transfer 2D 111101 16 Short supervisory access 29 111001 16 Short non-privileged access 10 1F - User Defined Tabell 3: Adressmodifieringskoder från 10H till 3FH när IACK = 1 Andreas Kingbäck 11
Videokort för VME-bussen Läscykeln Läscykeln används när huvudenheten skall hämta information från slavenheten. En läscykel utförs enligt följande: Huvudenheten adresserar slavenheten genom att lägga ut korrekt adress på adressbussen A00 -> A31 Samtidigt sätts adresseringsmodifieringskoderna (AM0 -> AM5), IACK* går hög och WRITE*- signalen går hög för att påvisa att det är en läsoperation. Efter en viss tid för att signalerna skall stabilisera sig går AS* låg. Samtidigt sätts DS0 och DS1 för att indikera hur informationen skall överföras på databussen. Slavenheten lägger ut data på databussen och drar DTACK* låg för att indikera att data är utlagt på databussen. För att avsluta busscykeln sätter huvudenheten signalen AS* hög. Slavenheten är då inte längre adresserad och DTACK* går hög. Busscykeln är nu avslutad. Andreas Kingbäck 12
Videokort för VME-bussen A00-A31 Adress AM0-AM5 Adresserings modifierings koder AS* DS0-DS1 IACK* WRITE* D00-D31 DATA DTACK* Figur 4: Tidsdiagram för läscykeln Andreas Kingbäck 13
Videokort för VME-bussen Skrivcykeln Skrivcykeln används när huvudenheten skall skriva information till slavenheten. En skrivcykel utförs enligt följande: Huvudenheten adresserar slavenheten genom att lägga ut korrekt adress på adressbussen A00 -> A31 Samtidigt sätts adresseringsmodifieringskoderna (AM0 -> AM5), IACK* går hög och WRITE*- signalen går låg för att påvisa att det är en skrivoperation. Efter en viss tid för att signalerna skall stabilisera sig går AS* låg. Samtidigt sätts DS0 och DS1 för att indikera hur informationen skall överföras på databussen. Huvudenheten lägger ut data på databussen och drar AS* låg för att indikera att data är utlagt på databussen. För att avsluta busscykeln sätter slavenheten signalen DTACK* låg. Slavenheten är då inte längre adresserad och AS* går hög. Busscykeln är nu avslutad. Andreas Kingbäck 14
Videokort för VME-bussen A00-A31 Adress AM0-AM5 Adresseringsmodifieringskoder AS* DS0-DS1 IACK* WRITE* D00-D31 DATA DTACK* Figur 5: Tidsdiagram för skrivcykeln Andreas Kingbäck 15
Videokort för VME-bussen VIDEOKORT Videokortet skall visa den bild om lagras i videominnet enligt industristandarden för VGA. Undantag är att färgdjupet skall vara 24 bitar. Kommunikationen mellan mikrodatorn och minnet skall ske via VME-bussen. Videokortet är uppbyggt av ett fem stycken olika block. Dessa block bygger upp helheten och förenklar både konstrukionen och programmeringen av kortet. De fem block är: Spännings omvandling från 5V till 3.3V Videominne DAC Styrenhet Kristall Figur 2 Blockuppbyggnad av video kortet. Andreas Kingbäck 16
Videokort för VME-bussen Val av komponenter Valet av komponenter utfördes med tanke på enkel funktion, långt pris, kort leveranstid och att de i första hand skall vara ytmonterade med matningspänning. 3.3V. Styrenhet Valet av styrenhet en CPLD från LATTICE var enkel då det inom institutionen finns laborationskort med en enklare MACH-krets med tillhörande programmeringsutrustning och programvara. Samtliga kretsar inom M4-serien stöder programmering via IspJTAG interfacet. (Se programmering av CPLD). Antalet logiska anslutningar till kretsen måste vara högt då endast en CPLD skall användas. Den största krets som LATTICE tillhandahåller i PLCC kapsling är M4A3-384/160 med 208 ben varav 160 är användbara logik in / ut gångar. Valet av PLCC kapsel berodde på att tillverkaren av kretskortet ej har någon utrustning för att verifiera placeringen av BGA kapslar och att dessa ej kan lödas manuellt. Matningsspänningen är 3.3V. Provexemplar kunde snabbt erhållas från LATTICE via PELCON i Stockholm. Grafikminne Då funktionen skall vara enkel ville jag använda statiska ram. Dessa måste vara tillräckligt snabba för att både kunna lagra data som kommer från VME-bussen och hela tiden försörja DAC med data. Matningsspänningen skall vara 3.3V. Minnets åtkomsttid måste maximalt vara 20ns. Minneskapaciteten skall vara 300KB * 24-bitar. Valet blev AS7C34096-12 från Alliance Semiconductors. Minnet är 512KB * 8 med en åtkomsttid på 12ns. Det totala minnet byggs upp av tre stycken kretsar. DAC DAC skall vara så enkel som möjligt och klara av VGA-grafik. Efter en del letande på Internet hittade jag en video-dac (Digital to Analog Video converter) från Analog Devices. Den har tre stycken separata åtta bitars DAC, en för varje färg. Den klarar av omvandlings hastigheter upp till 50MHz. Matningsspänning 5.0V. För att få rätt spänningsreferens till DAC krävs en spänningsreferens (AD589) även den från Analog Devices. Kristall För att få den standardiserade frekvens 25.175MHz och samtidigt ha tid att lägga in i minnet från VME-bussen behövs en kristall med klockfrekvensen 50.350MHz. Denna finns ej som standard utan måste beställas. Tyvärr är minimiantalet vid beställning 50st kristaller. Detta gör att vi får nöja oss med en kristall på 50MHz som finns i tillgänglig i valfritt antal. Andreas Kingbäck 17
Videokort för VME-bussen Vald kristall som finns med i ELFA katalogen är IQXO-350 från IQD Ltd. Matningsspänning Samtliga kretsar utom DAC kräver en matningsspänning på 3.3V. För att få en så låg förlust som möjligt i omvandlingen dvs. låg värmeutveckling valdes en switchregulator. En bra sådan är LM2576 från National Semiconductors. Den ger 3.3V och max 3A konstant ström vid en inspänning mellan 5 till 40V. Switch-regulatorn matas med fem volt från VME-bussen. Femvoltsmatningen till DACkretsen går direkt från VME-bussen via ett par avkopplingskondensatorer. Övrigt Övriga komponenter är valda utifrån rekommendationer i respektive krets datablad. Samtliga finns i ELFA:s standardsortiment. Ytmonterade kapslingar är valda i första hand med utgångspunkt på formatet 0805. Andreas Kingbäck 18
Videokort för VME-bussen Hårdvarukonstruktion Denna del tar ingående upp konstruktionen av de fem olika delblocken. Fullständiga kopplingsscheman finns i bilaga 1. Andreas Kingbäck 19
Videokort för VME-bussen Strömförsörjning Mattningsspänningen skall vara +5V och kommer via VME-bussen. CPLD-kretsen och minnet kräver en matningsspänning på 3,3V. Denna spänning genereras med hjälp av en switchregulator (LM2576S-3.3) från National Semiconductor. Grundkoppling av switchregulatorns yttre komponenter är hämtad från databladet. Kortet drar i medel max 1A vid drift men spikar på upp till 3A kan förekomma. För att visa att regulatorn fungerar och att det finns matningsspänning på kortet har två lysdioder kopplats in. Figur 6: Schema för strömförsörjningen Andreas Kingbäck 20
Videokort för VME-bussen Den maximala temperaturen för PN-övergången i switchregulatorn får max vara 125 grader. Databladet säger även att man skall ligga 15 grader under detta värde för säker drift. Enligt databladet i bilaga 7 sidan 13 ges formeln för förlusteffekten enligt följande: P f ( ) V UT V + IN IQ I LASTV VIN = SAT Inspänningen V IN =5,0V, utspänningen V UT =3,3V och den maximala strömmen I LAST =1,0A. Övriga konstanter återfinns i databladet. I V Q SAT = 0.005A = 1.4V Detta sättes in i formeln och ger förlusteffekten P f =0.949W Ohms lag för termiska resistansen när stationärt tillstånd råder är T j T = R Den omgivande temperaturen T a i lådan uppskattas till 25 C. Enligt tidigare får temperaturen i PNövergången ej överstiga 110 C. Förlusteffekten har vi redan beräknat och den termiska resistansen för (S) kapsling är 50 C/W enligt databladet. Detta insatt i formeln ger att temperaturen i PN-övergången endast blir 69.5 C grader vilket är lägre än 110 C och vi behöver därför ingen kylfläns. a th P f Komponentlista för 3,3V strömförsörjning Följande komponenter bygger upp strömförsörjningsmodulen: Switchregulator LM2576S-3.3 1st Kondensator 1000uF 4st Kondensator 100uF 1st Motstånd 68ohm 2st Drossel 100uH 1st Zenerdiod 1N5882 1st Lysdiod grön 2st Andreas Kingbäck 21
Videokort för VME-bussen Minnet Minnesmodulen är uppbyggd med tre stycken 512KBx8bitars kapslar från Alliance Semiconductor. Minnet är vanliga SRAM med en åtkomsttid på 12ns. Matningsspänningen är 3,3V. Skrivning och läsning sker samtidigt från alla kapslar därför är skriv- och aktiveringssignalerna ihopkopplade. Hela schemat för minnesmodulen återfinns i bilaga 1. Bilden nedan visar en förstoring över inkopplingen av en minneskapsel. Syrning av samtliga signaler sker direkt från CPLD:n Datablad i bilaga 8. Figur 7: Schema för en minnsekapsel Komponentlista för minnesmodulen Följande komponenter bygger upp minnesmodulen: SRAM AS7C34096 3st Kondensator 0.1uF 3st Andreas Kingbäck 22
Videokort för VME-bussen Video DAC Video-DAC-kretsen (ADV7120) från Analog Devices sköter omvandlingen från digitala till analoga signaler. Den innehåller tre stycken 8-bitars DA-omvandlare. Dvs. en för varje färgkomponent (R, G & B). Datablad i bilaga 9. Samtliga insignaler styrs direkt från CPLD:n. Övriga yttre komponenter är kopplade enligt schemat i databladet på sidan 10, bilaga 9. Då kretsen är känslig för störningar har stor vikt lagts på att minimera dessa. R14,R31,R32 ser till att impedansen blir 75ohm och bandgapsreferensen AD589 genererar spänningsreferensen på 1,23V. L2, L3 är drosslar för att minimera att störningar fortplantar sig i matningsledningarna. Figur 8: VideoDAC Andreas Kingbäck 23
Videokort för VME-bussen Komponentlista för VideoDAC Följande komponenter bygger upp Video-DAC-modulen: Video DAC ADV7120 1 st Zenerdiod AD589 (1,2V) 1 st Kondensator 0.1µF 4 st Kondensator 10µF 1 st Kondensator 33µF 1 st Avstörningspärla BL01RN 2 st Motstånd 75Ω 3 st Motstånd 560Ω 1 st Andreas Kingbäck 24
Videokort för VME-bussen Oscillator Oscillatorn skall generera systemklockan på 50MHz. Inspänningen på 5V avkopplas med en 0.1uF kondensator. På utgången ligger en filterkondensator på 15pF. Datablad finns i bilaga 10. Figur 9: Kopplingsschema för kristall Figur 10: Utsignal från kristall Komponentlista för Oscillatorn Följande komponenter bygger upp oscillatormodulen: Oscillator IQXO-350C 1 st Kondensator 0.1µF 1 st Kondensator 15pF 1 st Andreas Kingbäck 25
Videokort för VME-bussen Styrenhet Mach-kretsen M4A3-384/160 är kopplad till de andra kretsarna som skall styras samt VME-bussen. Kopplingsschemat återfinns i bilaga 1 då den är för stor för att visas snyggt här. Kretsen matas med 3,3V och 12 stycken avkopplingskondensatorer är anslutna till respektive matningsspäningsben. Kretsen programmeras via JTAG och dess koppling återfinns även i bilaga 1. Datablad i bilaga 11. Komponentlista för Styrenhet Följande komponenter bygger upp styrenheten: CPLD M4A3-384/160 1 st Kondensator 0.1µF 12 st Andreas Kingbäck 26
Videokort för VME-bussen VHDL För att klara utvecklingen av nya snabba system med integrerade kretsar, utvecklade United States Department of Defence 1980 VHSIC (Very High Speed Integrated Circuit Hardware Description Language). Genast kom många synpunkter in från industrin och i juni 1981 föddes efterföljaren VHDL. Under åren 1983 till 1985 fortsatte utvecklingen av VHDL med företagen Intermetrics, IBM och TI i spetsen. 1986 överfördes alla rättigheter för språket till IEEE. Den stora anledningen till att VHDL började utvecklas var att den hårdvara som konstruerades var dåligt dokumenterad och att den ständigt behövde förnyas. De system som då fanns på marknaden byggdes upp med flera olika fysiska komponenter. Simulering utfördes med olika simuleringsprogram vilka inte var kompatibla med varandra. Med hjälp av VHDL kan företagen nu bygga upp sina konstruktioner i datorn innan de realiserar konstruktionen fysiskt. Även simulering sker på ett enkelt sätt utan att konstruktionen byggs fysiskt. Några fördelar med VHDL beskrivningar: Ökad portabilitet VHDL-konstruktioner härrör sig till en standard och kan implementeras i flera olika miljöer. Dessa kan vara PLD, FPGA eller CPLD. Detta medför att konstruktören har en stor frihet att välja vilken plattform och leverantör han skall använda sig av. Utbytbarhet När den använda kretsen är gammal och inte går att köpa, väljs enkelt en nyare version och den programmeras med den gamla VHDL beskrivningen. Detta minimerar kostnaden och man kan hela tiden använda sig av den senaste tekniken. Teknologioberoende VHDL-konstruktioner är hela tiden oberoende av utvecklingen av IC-kretsar. Detta minskar inlärningstiden för ny teknologi, vilket i sin tur minskar utvecklingstiden. Effektiv dokumentation Det är mycket enkelt att i koden med kommentarer beskriva kretsens funktion. Detta gör det mycket enkelt att i framtiden modifiera konstruktionen. Högt spann Med en VHDL-modell kan man komma åt alla nivåer i en konstruktion. Från övergripande block ner till transistornivå. Andreas Kingbäck 27
Videokort för VME-bussen Utvecklingssystemet Utvecklingssystemet består av fyra olika delar. Detta gör att man måste följa kedjan från editor, syntes, implementering och uppladdning av kod till CPLD:n genom olika program. Det är inte säkert att koden som skrivs i editorn kommer att godkännas i senare steg. Detta beror oftast på att kompilatorn inte klarar av hela VHDL-standarden. Personligen hade jag sett att alla stegen var implementerade i ett program. I detta avsnitt visas endast ytligt konstruktionsflödet genom de olika programmen, inte hur nya objekt skapas och hur dessa simuleras. Följande programvaror har använts: ActiveHDL ver 5.1 för editering och simulering. Synplify Pro ver 7.1 för syntes. Lattice ispdesignexpert ver 8.3.2 för implementering. LatticePRO ver 8.2.2 för uppladdning av kod Anledningen till att dessa program användes är att de finns på Campus Norrköping. Nackdelen med ActiveHDL är att den inte fullt ut stödjer Lattice MACH-kretsar i denna version. Med det menas att det inte går att på ett enkelt sätt simulera konstruktionen efter syntes och implementation. Jag har påpekat detta till ALDEC och de säger att denna funktion kommer att finnas i senare versioner av programmet. Ytterligare problem är att ActiveHDL godkänner kod som senare inte Synplify Pro klarar av att syntisera. Detta har gjort att jag vid något tillfälle fått tänka om från början och helt göra om VHDL-koden. Det finns dock många fördelar med ActiveHDL. Det är mycket enkelt att simulera och skapa testbänkar. Editorn är mycket bra med undantaget att man inte kan ändra namn på blocken på ett enkelt sätt. Från version 5.0 av ActiveHDL öppnas Synplify Pro med hjälp av design flow fönstret. Andreas Kingbäck 28
Videokort för VME-bussen Arbetsgång från ActiveHDL till färdig krets ActiveHDL När ActiveHDL startas visas Design Flow till höger och projektet till vänster. Där återfinns alla de filer som ingår i projektet. Öppna en fil genom att dubbelklicka på den. Fönstret längst ned visar vilka kommandon som har utförts, kompileringsfel mm. Figur 11: ActiveHDL Andreas Kingbäck 29
Videokort för VME-bussen Figur 12: "Design Flow" i ActiveHDL 5.1 Figuren ovan visar konstruktionsflödet. Det finns tre olika sätt att göra koden. Dessa är ren VHDLkod (HDE), funktionsdiagram (FSM) och blockdiagram (BDE). Givetvis kan dessa tekniker kombineras för att ytterligare göra koden mer överskådlig. Efter att koden är klar kan den simuleras. Dvs. programmet tar inte hänsyn till den valda kretsen utan utgår bara från den genererade VHDLkoden. Innan syntes och implementation kan utföras måste de program som skall användas specificeras. Detta görs i Flow Settings. Se figur 5. I denna version av ActiveVHDL kan inte ispdesignexpert väljas. IspExpert kan väljas men det stöder inte MACH-kretsarna., vilket medför att ispdesignexpert måste startas separat. Andreas Kingbäck 30
Videokort för VME-bussen Figur 13: Flödesinställningar i ActiveHDL Andreas Kingbäck 31
Videokort för VME-bussen Syntes i Synplify Pro Starta syntesen genom att klicka på synthesis i design flow -fönstret. Synplify Pro startas och de filer som behövs för synteseringen kommer automatiskt att laddas in i programmet. Se figur 6 nedan. Klicka på knappen Impl Options och välj där ispmach och M4A3-384. Se figur 7. Starta sedan syntiseringen genom att klicka på Run knappen. Filen top.edf kommer då att skapas. Denna fil skall sedan användas av ispdesignexpert under implementeringen. Figur 14: Synplify Pro Andreas Kingbäck 32
Videokort för VME-bussen Figur 15: Implementeringsinställningar Andreas Kingbäck 33
Videokort för VME-bussen Implementation i ispdesignexpert Starta implementationen genom starta IspDesignEXPERT och öppna projektet VM_video.syn. När koden har synteserats måste filen top.edf först tas bort ur projektet och sedan läggas till igen. Detta för att ispdesignexpert skapar en arbetskopia i en annan katalog. Figur 16: ispdesignexpert För att låsa utgångarna mot rätt ben på kretsen klicka först på M43A-384/160-10YC och sedan på Constraint Editor. Se Figur 12 och bilaga 6. Skapa JEDEC filen genom att klicka på JEDEC File i Processes for Current Source fönstret. Därefter skapas filen vm_video.jed som skall programmeras ner i kretsen med hjälp av LatticePro. Andreas Kingbäck 34
Videokort för VME-bussen Figur 17: ispdesignexpert Constraint Editor Andreas Kingbäck 35
Videokort för VME-bussen Uppladdning av beskrivningen i kretsen med LatticePRO Starta LatticePRO genom att först starta ispvm System och därefter LatticePro genom att klicka på knappen längst ner till höger. Se figur 10 och 11 nedan. I LatticePRO öppnas filen download.wch som innehåller inställningarna för uppladdningen av JEDEC filen. Se figur 9. Tryck sedan på GO knappen så laddas programmet ner i CPLD:n. Om allt har gått bra är CPLD kretsen nu programmerad och klar att användas. Glöm inte att göra en reset för att initiera kretsen. Figur 18: ispvm System Andreas Kingbäck 36
Videokort för VME-bussen Figur 19: LatticePRO Andreas Kingbäck 37
Videokort för VME-bussen VHDL Beskrivning av Videokortet VHDL-beskrivningen bygger på fyra stycken grundblock. Dessa är VME-blocket, Adressmultiplexerblocket, VGA-blocket och Databussblocket. På toppnivån ingår även en D-vippa som halverar klockfrekvensen innan den går vidare till VGA-blocket. Kommunikationen mellan blocken sköts med enstaka signaler. Sammankopplingen av blocken återfinns i figur 12 nedan. Att notera är att alla kontrollsignaler är aktivt låga om inget annat anges! De analoga signaler som går till monitorn kan inte påverkas i VHDL-beskrivningen med de listas ändå som utsignaler. Tyvärr går det ej på ett enkelt sätt att byta namn på blocken vilket jag annars skulle ha gjort. Figur 20: Alla VHDL-blocken för videokortet Andreas Kingbäck 38
Videokort för VME-bussen In, Ut och Interna signaler för toppnivån Insignaler till CPLD: A(22:0) AM(5:0) Dvme IACK AS LWORD CLK RST WRITE 23 bitars adressbuss från VME-bussen. Adressmodifieringskoder från VME-bussen. Databuss till/från VME-bussen. Avbrottskvittenssignal från VME-bussen. Adressstrobe från VME-bussen. Datastorlek från VME-bussen. Klocksignal från intern kristall. (50MHz) Reset signal från VME-bussen Skriv signal från VME-bussen Utsignaler från CPLD: R G B Vsync Hsync Ref_w Vgaclk Blank Sync Dvme BERR DTACK Digital 8-bitars färgsignal för röd färg Digital 8-bitars färgsignal för grön färg Digital 8-bitars färgsignal för blå färg Signal för vertikal synk Signal för horisontell synk Om denna sätts hög läggs endast vit färg ut Startar omvandlingen från digital till analog signal Signal för att endast lägga ut svart färg Synksignal för DAC, anväds ej. Databuss till VME-bussen. Signal för att indikera överföringsfel. ACK-signal till VME-bussen. Andreas Kingbäck 39
Videokort för VME-bussen Interna signaler för toppnivån: VME_address Addr Address_sel TrasferFlag TransferComplete Addres_Select ToVGA R G B Datarequest Oe We Dmem Ref_w Blank Vga_clk Adress från VME-blocket till adressmultiplexern. Adress till det interna RAM-minnet. Styrsignal för val av adress från VME-bussen eller VGAblocket. Signal för att starta en ny operation går från VMEblocket till databusblocket Signal för att bekräfta att efterfrågat operation är utförd. Signalen går från databussblocket till VME-blocket Signal från databussblocket till adressmultiplexern. Färgdata från databussblocket till VGA-blocket Digital färg signal för röd färg går till DAC:en Digital färg signal för grön färg går till DAC:en Digital färg signal för blå färg går till DAC:en Signal för begäran av ny data från databussblocket Signal för att läsa från det interna minnet Signal för att skriva till det interna minnet Databuss till/från det interna minnet Signal för att bara lägga ut vit färg till monitorn. Signal för att bara lägga ut svart färg till monitorn. DAC:en läser in ny data från ToVGA på positiva klockflanker. Andreas Kingbäck 40
Videokort för VME-bussen Hierarki Nedan visas hur de olika blocken är strukturerade. Om namnet avslutas med.vhd betyder detta att blocket innehåller VHDL kod. TOPP NIVÅ 1 NIVÅ 2 dff dff.vhd vme block Adressdecoder block Dtack generator block Adressdecoder block.vhd Dtack generator block.vhd Databusblock datacontroler VMEDataDirectionBloc MemoryDataDirectionB Datacontroler.vhd VMEDataDirectionBlock.v MemoryDataDirectionBloc vgablock databuffer Vgaaddress generator Vsync generator Hsync generator linecounter Pixelcounter Databuffer.vhd Vgaaddress generator.vhd Vsync generator.vhd Hsync generator.vhd Linecounter.vhd Pixelcounter.vhd Addressmux addressmux.vhd Andreas Kingbäck 41
Videokort för VME-bussen D-vippa för att generera halva klockfrekvensen Innehåll D-vippan innehåller endast VHDL-kod som bygger upp funktionen för vippan. Figur 21: D-Vippa Funktionsbeskrivning: VGA-blocket behöver en klocksignal på 25MHz Denna signal används för att skicka ut data från ramminnet i rätt takt till monitorn. Kristallen på kortet ger 50MHz och den skall således delas med två. Klockfrekvensen skapas lätt med en D-vippa som återkopplas från den inverterande utgången. Denna koppling kallas också för T-vippa och ändrar sitt tillstånd på varje positiv klockflank. EN (aktivera) och CLR (nollställ) används inte utan vippan startar i ett slumpvalt läge när strömmen slås på. Simuleringsmässigt behöver man dock initiera signalen för att det skall fungera. Detta görs genom att sätta Dstate = 0 vid deklareringen. Se nedan samt koden för D-vippan. signal Dstate: std_logic := '0'; Andreas Kingbäck 42
Videokort för VME-bussen VHDL-kod library IEEE; use IEEE.STD_LOGIC_1164.all; entity DFF is port( CLK, D, CLR,EN : in std_logic; Q : out std_logic; Qn : out std_logic := '0' ); end DFF; architecture DFF of DFF is signal Dstate: std_logic := '0'; begin end DFF; Q <= Dstate when EN='1' else 'Z'; Qn <= not Dstate; seq: process(clk,clr) begin if (CLR = '0') then Dstate <= '0'; elsif CLK'event and CLK='1'then Dstate <= D; end if; end process; Andreas Kingbäck 43
Videokort för VME-bussen VGA-blocket Innehåll VGA-blocket är uppbyggt av fem underliggande block och ett antal logiska grindar, buffrar och en multiplexer. Dessa komponenter bygger upp VGA-blockets funktion. Figur 22: VGA-blocket Funktionsbeskrivning VGA-blockets uppgift är att skapa de signaler som behövs för att bildskärmen och video-dackretsen skall styras på rätt sätt. Den färginformation som skall skickas till video-dac-kretsen för omvandling till analoga signaler kommer från tovga bussen och delas upp till R, G och B bussarna. R, G och B bussarna uppdateras på negativa klockflanker och video-dac-kretsen gör omvandlingen på positiv klockflank. Signalerna som styr detta är vgaclk. Hsync, vsync och blank. Dessa signaler styrs enligt definition i VGA-avsnittet. Signalerna ref_w och sync är för framtida bruk. Andreas Kingbäck 44
Videokort för VME-bussen Signalbeskrivningar för VGA-blocket Insignaler till VME-blocket: Datarequest ToVGA Halfclock RST Signal för begäran av ny data från databussblocket Färgdata från databussblocket till VGA-blocket 25MHz klocksignal Resetsignal Utsignaler från VGA-blocket: R G B Vsync Hsync Ref_w Vgaclk Blank Sync Digital 8-bitars färgsignal för röd färg Digital 8-bitars färgsignal för grön färg Digital 8-bitars färgsignal för blå färg Signal för vertikal synk Signal för horisontell synk Om denna sätts hög läggs endast vit färg ut Startar omvandlingen från digital till analog signal Signal för att endast lägga ut svart färg Synkroniseringssignal för DAC, används ej. Interna signaler för VGA-blocket Lineno(9:0) PixelValue(9:0) H_reset V_reset Vblank Hblank Hdatarequest Vdatarequest Räknare för rad Räknare för kolumn Horisontell reset Vertikal reset Vertikal blanksignal Horisontell blanksignal Horisontell databegäran Vertikal databegäran Andreas Kingbäck 45
Videokort för VME-bussen VGA-blocket nivå två Innehåll VME-blocket är uppbyggt av sex underliggande block. Dessa block är databuffer, vgaadress_generator, vsync_generator, hsync_generator, linecounter och pixelcounter. Figur 23: VGA-blocket nivå två Funktionsbeskrivning Se föregående funktionsbeskrivning! Andreas Kingbäck 46
Videokort för VME-bussen Radräknare Innehåll Blocket för radräknaren innehåller endast VHDL-kod som bygger upp funktionen. Funktionsbeskrivning Räknar upp ett steg på positiv klockflank. Om CLR sätts låg nollställs räknaren vid positiv klockflank (synkron reset). VHDL-kod library IEEE; Library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_UNSIGNED.all; entity linecounter is port ( CLK : in std_logic; CLR : in std_logic; Q : out std_logic_vector(9 downto 0) ); end entity; architecture linecounter_arch of linecounter is signal TEMP_Q : std_logic_vector(9 downto 0); begin process(clk) begin if rising_edge(clk) then if CLR = '0' then TEMP_Q <= "0000000000"; else TEMP_Q <= TEMP_Q + 1; end if; end if; end process; Q <= TEMP_Q; end architecture; Andreas Kingbäck 47
Videokort för VME-bussen Kolumnräknare Innehåll Blocket för kolumnräknaren innehåller endast VHDL-kod som bygger upp funktionen. Funktionsbeskrivning Räknaren upp på positiv klockflank. Om CLR sätts låg nollställs räknaren vid positiv klockflank (synkron reset). VHDL-kod Library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_UNSIGNED.all; entity pixelcounter is port ( CLK : in std_logic; CLR : in std_logic; Q : out std_logic_vector(9 downto 0) ); end entity; architecture pixelcounter_arch of pixelcounter is signal TEMP_Q : std_logic_vector(9 downto 0); begin process(clk) begin if rising_edge(clk) then if CLR = '0' then TEMP_Q <= "0000000000"; else TEMP_Q <= TEMP_Q + 1; end if; end if; end process; Q <= TEMP_Q; end architecture; Andreas Kingbäck 48