Masterproef Universele RGB en DVI generator
Studiegebied Industriële wetenschappen en technologie Opleiding Master in de industriële wetenschappen: Elektronica-ICT Afstudeerrichting Elektronica Academiejaar 2008-2009
Wim Ramon
Howest – departement PIH, Graaf Karel de Goedelaan 5, 8500 Kortrijk
Voorwoord Als laatstejaars student kreeg ik de kans om mijn opleiding te beëindigen met een masterproef. Het is vanzelfsprekend dat ik hierbij hulp heb gekregen van een aantal mensen. Daarom zou ik langs deze weg enkele mensen willen bedanken. In eerste instantie wil ik Connectronics Poperinge bedanken om deze masterproef mogelijk te maken. Ik wil hierbij mijn externe promotor Jeroen Deserranno bedanken voor het opvolgen van mijn masterproef. Hij was ook altijd bereid mij op het technische vlak bij te staan. Vervolgens wil ik graag mijn interne promotor Benjamin Samyn bedanken. Hij zorgde voor de nodige raadgevingen en begeleiding bij mijn masterproef. Tot slot wil ik mijn ouders bedanken. Zij hebben het mogelijk gemaakt deze opleiding te kunnen volgen. Met morele en financiële steun hebben zij een bijdrage geleverd aan mijn studies.
I
Inhoudsopgave Voorwoord .................................................................................................................................. I Inhoudsopgave .......................................................................................................................... II Gebruikte afkortingen .............................................................................................................. VI Lijst van figuren ......................................................................................................................VII Lijst van tabellen ....................................................................................................................... X Inleiding ..................................................................................................................................... 1 1
Studieonderzoek .................................................................................................................. 2 1.1
Inleiding ....................................................................................................................... 2
1.2
Beeldopbouw ............................................................................................................... 2
1.3
Digital Visual Interface [1] .......................................................................................... 4
1.3.1
Inleiding ............................................................................................................... 4
1.3.2
Connectoren ......................................................................................................... 4
1.3.3
Single versus dual link ......................................................................................... 6
1.3.4
Single versus dual pixel mode .............................................................................. 7
1.3.5
High color depth ................................................................................................... 7
1.3.6
Controlesignalen ................................................................................................... 8
1.4
OpenLDI [1] ................................................................................................................ 8
1.4.1
Inleiding ............................................................................................................... 8
1.4.2
Connector ............................................................................................................. 8
1.4.3
Single versus dual pixel mode .............................................................................. 9
1.4.4
Controlesignalen ................................................................................................... 9
1.5
Studie bestaande RGB/DVI generator ....................................................................... 10
1.5.1
DAC ................................................................................................................... 11
1.5.2
HSYNC en VSYNC ........................................................................................... 11
1.5.3
Panellink receiver ............................................................................................... 12
1.5.4
LVDS receiver.................................................................................................... 12
1.5.5
Videobuffer ........................................................................................................ 13
1.5.6
RAM-geheugen .................................................................................................. 13
1.5.7
Seriële communicatie ......................................................................................... 14
1.5.8
FPGA .................................................................................................................. 14
1.5.9
Voeding .............................................................................................................. 15 II
1.5.10 1.6
Universele en DVI connector ............................................................................. 15
1.6.2
Voeding .............................................................................................................. 15
1.6.3
DVI transmitter .................................................................................................. 16
Hardware RGB/DVI generator .................................................................................. 19
2.1.1
Communicatiedragers ......................................................................................... 19
2.1.2
FPGA .................................................................................................................. 22
2.1.3
Geheugen ............................................................................................................ 24
2.1.4
Analoge video .................................................................................................... 27
2.1.5
Microcontroller................................................................................................... 31
2.1.6
Universele connector .......................................................................................... 32
2.1.7
Voeding .............................................................................................................. 32
2.1.8
Extra hardware ................................................................................................... 34
2.2
Hardware mezzanine board ....................................................................................... 34
2.2.1
DVI transmitter .................................................................................................. 35
2.2.2
Voeding, DVI en universele connector .............................................................. 35
2.2.3
EEPROM ............................................................................................................ 36
2.2.4
Besluit................................................................................................................. 36
2.3
4
Studie DVI transmitters en receivers ......................................................................... 16
PCB Hardware .................................................................................................................. 19 2.1
3
Studie DVI mezzanine board ..................................................................................... 15
1.6.1
1.7 2
Universele connector .......................................................................................... 15
Routing board ............................................................................................................ 36
Configuratie van de FPGA [6] .......................................................................................... 38 3.1
Inleiding ..................................................................................................................... 38
3.2
MAX II CPLD ........................................................................................................... 38
3.2.1
Configuratie FPGA via PFL ............................................................................... 38
3.2.2
Configuratiedata via PFL in flashgeheugen ....................................................... 41
Implementatie [2] .............................................................................................................. 45 4.1
UART blok ................................................................................................................ 45
4.1.1
Inleiding ............................................................................................................. 45
4.1.2
UART ................................................................................................................. 46
4.1.3
Databuffer........................................................................................................... 47 III
4.1.4
Read .................................................................................................................... 48
4.1.5
Besluit................................................................................................................. 49
4.2
Video- en patrooninstellingen ................................................................................... 49
4.3
DVI blok .................................................................................................................... 50
4.3.1
DVI resolution settings ....................................................................................... 50
4.3.2
DVI generator ..................................................................................................... 51
4.3.3
DVI patroongeneratie ......................................................................................... 51
4.3.4
Datamapping ...................................................................................................... 52
4.3.5
PLL ..................................................................................................................... 53
4.4
5
4.4.1
RGB resolution settings ..................................................................................... 54
4.4.2
RGB generator.................................................................................................... 54
4.4.3
RGB patroongeneratie ........................................................................................ 55
4.4.4
Videobuffer ........................................................................................................ 55
4.4.5
PLL ..................................................................................................................... 56
4.5
IIC blok ...................................................................................................................... 57
4.6
Problemen VHDL design .......................................................................................... 57
Softwareapplicatie [4] ....................................................................................................... 59 5.1
Inleiding ..................................................................................................................... 59
5.2
Eisen .......................................................................................................................... 59
5.3
Opbouw programma .................................................................................................. 59
5.3.1
GUI ..................................................................................................................... 59
5.3.2
Klassendiagram .................................................................................................. 61
5.3.3
Klasse clsCommunication .................................................................................. 61
5.3.4
Klasse clsScreenSettings .................................................................................... 63
5.3.5
Klasse clsPattern ................................................................................................ 65
5.3.6
Klasse clsClock .................................................................................................. 66
5.4 6
7
RGB blok ................................................................................................................... 54
Besluit ........................................................................................................................ 68
Hardware-instelling........................................................................................................... 69 6.1
DVI transmitter register ............................................................................................. 69
6.2
FTDI chip .................................................................................................................. 71
Besluit ............................................................................................................................... 73 IV
Literatuurlijst ............................................................................................................................ 74 Bijlagen .................................................................................................................................... 76
V
Gebruikte afkortingen DAC DDWG DVI EDID EEPROM EPCS FIFO FPD FPGA GUI H HBP HD HFP HS HSYNC HT IIC JTAG LCD LSB LVDS OpenLDI PLL RGB SMB TMDS UART UXGA V VB VBP VESA VFP VGA VS VSYNC VT XGA
Digitaal Analoog Converter Digital Display Working Group Digital Visual Interface Extended Display Identification Data Electrically Erasable Programmable Read-only Memory Serial Configuration Device First In First Out Flat Panel Display Field Programmable Gate Array Graphical User Interface Horizontale pixel breedte Horizontale Back Porch High Definition Horizontale Front Porch Horizontale Synchronisatie Horizontale Sychronisatie Horizontale Totale pixel breedte Inter-IC Communication Joint Test Action Group Liquid Cristal Display Least Significant Bit Low Voltage Differential Signaling Open LVDS Display Interface Phase Locked Loop Rood/Groen/Blauw SubMiniature B Transition Minimized Differential Signaling Universal Asynchronous Receiver Transmitter Ultra Extended Graphics Array Verticale pixel breedte Visual Basic Verticale Back Porch Video Electronics Standards Association Verticale Front Porch Video Graphics Array Verticale Sychronisatie Verticale Synchronisatie Verticale Totale pixel breedte Extended Graphics Array
VI
Lijst van figuren Figuur 1.1: Digitale beeldopbouw .............................................................................................. 2 Figuur 1.2: VESA-standaard 1920x1080@60Hz ....................................................................... 3 Figuur 1.3: DVI-A connector ..................................................................................................... 4 Figuur 1.4: DVI-I single link connector ..................................................................................... 5 Figuur 1.5: DVI-I dual link connector ....................................................................................... 5 Figuur 1.6: DVI-D single link connector ................................................................................... 5 Figuur 1.7: DVI-D dual link connector ...................................................................................... 5 Figuur 1.8: DVI-connector ......................................................................................................... 5 Figuur 1.9: Single TMDS link.................................................................................................... 6 Figuur 1.10: Dual TMDS link .................................................................................................... 7 Figuur 1.11: OpenLDI connector ............................................................................................... 8 Figuur 1.12: LVDS-link ............................................................................................................. 9 Figuur 1.13: Huidige RGB/DVI generator ............................................................................... 10 Figuur 1.14: Blokschema huidige RGB/DVI generator ........................................................... 10 Figuur 1.15: Blokschema DAC ................................................................................................ 11 Figuur 1.16: Schema HSYNC TTL niveau .............................................................................. 11 Figuur 1.17: Blokschema panellink receiver............................................................................ 12 Figuur 1.18: Blokschema LVDS receiver ................................................................................ 12 Figuur 1.19: Schema buffer + RAM-geheugen rood videokanaal ........................................... 13 Figuur 1.20: Blokschema DVI-transmitter............................................................................... 16 Figuur 1.21: SiI 1178 transmitter [40] ..................................................................................... 17 Figuur 1.22: SiI 164 transmitter [39] ....................................................................................... 17 Figuur 1.23: SiI 1160 transmitter [38] ..................................................................................... 17 Figuur 1.24: SiI 163B receiver [37] ......................................................................................... 17 Figuur 2.1: Blokschema RGB/DVI generator .......................................................................... 19 Figuur 2.2: Schema seriële communicatie ............................................................................... 20 Figuur 2.3: FDTI chip .............................................................................................................. 21 Figuur 2.4: Schema MAX II .................................................................................................... 24 Figuur 2.5: Schema flashgeheugen .......................................................................................... 25 Figuur 2.6: Schema RAM-geheugen ........................................................................................ 26 Figuur 2.7: Schema DAC ......................................................................................................... 27 VII
Figuur 2.8: Schema videobuffer ............................................................................................... 28 Figuur 2.9: Schema ontkoppeling buffers ................................................................................ 29 Figuur 2.10: Schema -5V schakelende voeding ....................................................................... 29 Figuur 2.11: Schema videoswitch ............................................................................................ 30 Figuur 2.12: Schema TTL buffer ............................................................................................. 30 Figuur 2.13: Schema microcontroller....................................................................................... 31 Figuur 2.14: Schema universele connector .............................................................................. 32 Figuur 2.15: Schema splitsing analoge en digitale ground ...................................................... 33 Figuur 2.16: Schema DC-DC converter ................................................................................... 33 Figuur 2.17: Blokschema mezzanine board ............................................................................. 34 Figuur 2.18: Schema DVI transmitters .................................................................................... 35 Figuur 2.19: Schema EEPROM ............................................................................................... 36 Figuur 2.20: Blokschema routing RGB/DVI generator ........................................................... 37 Figuur 2.21: Blokschema routing mezzanine board ................................................................. 37 Figuur 3.1: Blokschema configuratie FPGA ............................................................................ 38 Figuur 3.2: VHDL-design configuratie FPGA ......................................................................... 39 Figuur 3.3: Blokschema configuratie FPGA via PFL .............................................................. 39 Figuur 3.4: Megawizard PFL FPGA configuratie .................................................................... 40 Figuur 3.5: VHDL blok PFL FPGA configuratie .................................................................... 41 Figuur 3.6: Megawizard PFL flash programming .................................................................... 42 Figuur 3.7: Setup page convert programming files .................................................................. 43 Figuur 3.8: VHDL blok PFL flash programming .................................................................... 43 Figuur 3.9: Hardware setup flash programming ...................................................................... 44 Figuur 4.1: Blokschema VHDL design .................................................................................... 45 Figuur 4.2: Blok Uart ............................................................................................................... 45 Figuur 4.3: UART .................................................................................................................... 46 Figuur 4.4: UART_9Baudrate .................................................................................................. 46 Figuur 4.5: Uni_Com_Dec ....................................................................................................... 47 Figuur 4.6: Simulatie Uni_Com_Dec....................................................................................... 47 Figuur 4.7: Read ....................................................................................................................... 48 Figuur 4.8: Simulatie Read....................................................................................................... 48 Figuur 4.9: Video_Pattern_Settings ......................................................................................... 49 VIII
Figuur 4.10: Blokschema DVI ................................................................................................. 50 Figuur 4.11: Resolution_settings DVI ..................................................................................... 50 Figuur 4.12: DVI_GEN ............................................................................................................ 51 Figuur 4.13: DVI pattern .......................................................................................................... 52 Figuur 4.14: Mapping_Sil_1178 .............................................................................................. 52 Figuur 4.15: PLL DVI .............................................................................................................. 53 Figuur 4.16: Blokschema RGB ................................................................................................ 54 Figuur 4.17: Resolution_settings RGB .................................................................................... 54 Figuur 4.18: RGB_GEN ........................................................................................................... 55 Figuur 4.19: RGB pattern ......................................................................................................... 55 Figuur 4.20: Videobuffer.......................................................................................................... 56 Figuur 4.21: PLL RGB ............................................................................................................. 56 Figuur 4.22: IIC ........................................................................................................................ 57 Figuur 4.23: HSYNC................................................................................................................ 58 Figuur 4.24: VSYNC................................................................................................................ 58 Figuur 5.1: GUI RGB/DVI generator (DVI) ............................................................................ 59 Figuur 5.2: GUI RGB/DVI generator (RGB)........................................................................... 60 Figuur 5.3: GUI RGB/DVI generator (Communication) ......................................................... 60 Figuur 5.4: Klassendiagram RGB/DVI generator .................................................................... 61 Figuur 5.5: Klasse clsCommunication ..................................................................................... 61 Figuur 5.6: Klasse clsScreenSettings ....................................................................................... 63 Figuur 5.7: Klasse clsPattern .................................................................................................... 65 Figuur 6.1: Register DVI transmitter ....................................................................................... 69 Figuur 6.2: GUI IICProg .......................................................................................................... 70 Figuur 6.3: GUI MProg 3.5 ...................................................................................................... 71
IX
Lijst van tabellen Tabel 1.1: Pinbeschrijving DVI-connector ................................................................................ 5 Tabel 1.2: Pinbeschrijving OpenLDI-connector ........................................................................ 8 Tabel 1.3: Performance EPF6024A ......................................................................................... 14 Tabel 2.1: Type PLLs Stratix II ............................................................................................... 23 Tabel 6.1: Registerwaarden DVI transmitter single link.......................................................... 70 Tabel 6.2: Registerwaarden DVI transmitter dual link ............................................................ 71
X
Inleiding Het doel van deze masterproef bestond erin een universele RGB/DVI generator te ontwerpen om RGB- en DVI-inputs uit te testen, dit in samenwerking met Connectronics Poperinge. Dit bedrijf specialiseert zich voornamelijk in het produceren van complexe boards waarbij een grote toegevoegde waarde vereist is. Eén van de kwaliteitseisen is het leveren van operationele boards, na een CAT-test. Een CAT-test bestaat uit het testen van software, firmware alsook de realisatie van dedicated hardware. Dit nieuwe ontwerp zal de huidige generator in het bedrijf vervangen om de recente videoresoluties op RGB- en DVI-inputs uit te testen. Dit nieuwe ontwerp van de generator bezit een universele connector die ervoor moet zorgen dat eender welk type DVI/LVDS transmitter kan worden aangesloten. Het board dat voorzien is van een DVI/LVDS transmitter moet automatisch herkend worden door de generator. Het gegenereerde beeld op het analoog en digitaal kanaal moet HD (1920x1080@60Hz) ondersteunen. Vervolgens bevat de generator standaard vier patronen: colorbar, graybar, ramp, pixel on/off. Alle instellingen moeten zowel via hardware als software kunnen worden ingesteld. De communicatie om de beeldparameters in te stellen moet zowel via het RS232 als USB-protocol kunnen gebeuren. Tot slot moet het board voorzien zijn van een RAM- en flashgeheugen dat één HD beeld kan opslaan. Ten eerste gebeurde er een studie van DVI om de kennis rond deze video interface te verruimen. In deze studie werd ook de huidige RGB/DVI generator geanalyseerd. Hierdoor werd een idee gevormd hoe deze werd opgebouwd. Vervolgens werd de nieuwe hardware gekozen voor het ontwerp van de RGB/DVI generator. Hierbij werd rekening gehouden met de vooropgestelde eisen. Al deze componenten werden in één schema gebracht om daarna de routing door interne mensen van het CAD team te laten uitvoeren. Ondertussen werd een VHDL design geschreven. Dit design zorgt voor het genereren van de testpatronen. Dit zowel voor de aansturing op RGB- als DVI-kanaal. Verder zorgt dit design voor de communicatie via een UART interface zodat de generator via software kan worden ingesteld. Tot slot werd een softwareapplicatie geschreven. Zo kan de gebruiker communiceren met de generator en de nodige beeldparameters aanpassen. De instellingen van de rotary buttons moet ook via software kunnen worden aangepast. In deze masterproef worden bovenstaande alinea’s wat meer verduidelijkt. De hoofdstukken volgen de chronologische opbouw van mijn masterproef zoals dit doorheen het jaar gebeurde.
1
1
Studieonderzoek
1.1
Inleiding
Tijdens de afgelopen jaren zijn veel standaarden ontwikkeld om digitale videodata te verzenden. Hiervan is DVI een zeer populaire interface interface die wordt gebruikt voor de consumer toestellen. In volgende paragrafen wordt ordt uitgelegd hoe een digitaal beeld wordt opgebouwd en concreter wat de eigenschappen zijn van DVI. Verder worden word de verschillende DVI connectoren en de DVI variant iant openLDI toegelicht. toege
1.2
Beeldopbouw
[7] Digitale video is opgebouwd uit pixels. Het H is belangrijk het juiste aantal pixels te bepalen voor blanking en synchronisatie. Een verkeerde instelling van deze parameters kan zorgen voor screen jitter. De mogelijkheid mogelijk bestaat bij het verkeerd aantal pixels dat de receiver hierdoor het beeld niet kan tonen op de monitor. Aan de hand van een voorbeeld zullen de verschillende parameters worden opgenoemd voor de beeldopbouw. Als voorbeeld wordt de maximum resolutie van de RGB/DVI generator generator beschouwd. Deze bedraagt 1920x1080 met een verversingsfrequentie van 60Hz. Figuur 1.1 toont uit welke delen een digitaal beeld wordt opgebouwd.. Met behulp van de aanduidingen aanduiding wordenn de verschillende parameters benoemd.
Figuur 1.1: 1.1 Digitale beeldopbouw
A = Dee horizontale breedte. Dit stemt overeen met de werkelijke beeldresolutie. (H) B - A = Horizontale front porch (HFP) C - B = Horizontale synchronisatie breedte (HS) D - C = Horizontale back porch (HBP) D = De totale horizontale breedte (HT) E = De verticale breedte. Dit stemt overeen met de werkelijke beeldresolutie. (V) F - E= Verticale front porch (VFP) G - F = Verticale synchronisatie breedte (VS) H – G = Verticale back porch (VBP) H = De totale verticale breedte (VT) 2
Er bestaan twee mogelijkheden om deze beeldparameters te bepalen. Als eerste kan deze instelling door de fabrikant worden opgegeven. Indien deze parameters niet worden opgegeven, wordt in de meeste gevallen gebruik gemaakt van de VESA standaard. VESA staat voor Video Electronics Standards Association en werd opgericht in 1989. Deze organisatie concentreert zich op interface standaarden voor computeromgevingen. Het opgegeven voorbeeld zal gebruik maken van deze standaard. Deze standaard maakt gebruik van twee timings namelijk de [10] Generalized Timing Formula (GTF) en [11] Coordinated Video Timings (CVT). De GTF standaard werd goedgekeurd in 1999 en werd vervangen in 2002 door de CVT standaard. De GTF standaard wordt vooral nog gebruikt voor VGAinterface. In bijlage 1 en 2 vindt u de Excel-sheets waarmee de beeldparameters kunnen worden bepaald. Als voorbeeld wordt een screenshot genomen van de Excel-sheet die gebaseerd is op de CVT standaard. Figuur 1.2 toont de bekomen waarden.
Figuur 1.2: VESA-standaard 1920x1080@60Hz
Als de pixelklok niet is gedefinieerd, kan deze worden berekend met volgende formule. HT = HFP + HS + HBP + H VT = VFP + VS + VBP + V Pixelklok = HT.VT . f Hierbij stelt f de verversingsfrequentie voor. In dit voorbeeld wordt 60Hz genomen als verversingsfrequentie. Als voorbeeld wordt terug vorige opgave genomen. 3
HFP = 128 pixels HS = 200 pixels HBP = 328 pixels VFP = 3 pixels VS = 5 pixels VBP = 32 pixels Pixelklok = (128 + 200 + 328 + 1920).(3 + 5 + 32 +1080).60 = 173MHz Dit resultaat stemt overeen met de gevonden waarde met behulp van de Excel-sheet. Excel
1.3
Digital Visual Interface [1]
1.3.1
Inleiding
[3] DVI is de afkorting van Digital Visual Interface en is ontworpen in 1998 door DDWG (Digital Display Working Group). roup). Oorspronkelijk was DVI bedoeld als interface om niet gecomprimeerde digitale videodata te versturen naar monitoren. Momenteel is DVI de standaard voor digitale gegevensoverdracht. Enkele voorbeelden zijn hierbij TV, DVD players, settop boxes. Doordat DVI geen gebruik maakt van compressie betekent dit dat het volledige beeld constant wordt herzonden. her De bandbreedte bij DVI iss tot 165MHz 165 single link en boven de 165MHz voor dual link. Dit biedt een aantal voordelen. Zo zijn de beeldprestaties veel hoger alsook de snelheid van update en reactie. DVI brengt een digitaal videosignaal over zonder enig gegevensverlies. Een pixel wordt gedefinieerd door een 24 bits RGB gegevensstroom. Het protocol dat DVI gebruikt om de videostroom te verzenden heet Transition Minimized mized Differential Signaling (TMDS). MDS). DVI bezit ook een aantal pinnen om de EDID-prom (Extended Display Identification Data) te lezen. Deze EDID-prom EDID bevat informatie i.v.m. mogelijkheden gelijkheden die de monitor bezit. bezit
1.3.2
Connectoren
De interface van DVI kan opgedeeld worden in drie delen. Deze zijn namelijk de DVI-A, DVI DVI-D en DVI-I. Wat volgt is een korte beschrijving van deze interfaces.
Figuur 1.3: DVI-A connector
Een eerste interface is de DVI-A. DVI De DVI-A ondersteunt enkel analoog videosignaal. video Dit type van connector werd enkel el ontwikkeld als overgang van VGA naar DVI. Dit type van connector bevat de analoge signalen rood, groen, blauw, horizontale en verticale synchronisatie en ground.
4
Figuur 1.4: DVI-II single link connector
De tweede interface is de DVI-I. DVI Dit is de oorspronkelijke interface die een combinatie maakt tussen digitaal en analoog videosignaal. Deze connector bevat maximaal 23 pinnen voor digitale signalen en 6 pinnen voor analoge signalen. Afhankelijk van dual of single link verschillen het aantal pinnen.
Figuur 1.5: DVI-II dual link connector
Figuur 1.6: DVI-D D single link connector
De laatste interface is de DVI-D. D. Deze interface bestaat enkel uit digitale signalen. Deze connector zal op termijn de DVI-I DVI verdringen. Momenteel wordt deze connector ook gebruikt bij digitale monitoren en tv-toestellen. toestellen. Hier is terug een verschil tussen het aantal pinnen in dual en single link.
Figuur 1.7: DVI-D D dual link connector
Hieronder volgt een pinbeschrijving schrijving van een volledige volledig DVI-connector.
Figuur 1.8: DVI-connector
Tabel 1.1: Pinbeschrijving DVI-connector connector PIN#
SIGNAL
PIN#
SIGNAL
1
T.M.D.S DATA 2-
16
HOT PLUG DETECT
2
T.M.D.S DATA 2+
17
T.M.D.S DATA 0-
3
T.M.D.S DATA 2/4 SHIELD
18
T.M.D.S DATA 0+
4
T.M.D.S DATA 4-
19
T.M.D.S DATA 0/5 SHIELD
5
T.M.D.S DATA 4+
20
T.M.D.S DATA 5-
6
DDC CLOCK
21
T.M.D.S DATA 5+
7
DDC DATA
22
T.M.D.S CLOCK SHIELD
8
ANALOG VERT. SYNC
23
T.M.D.S CLOCK+
9
T.M.D.S DATA 1-
24
T.M.D.S CLOCK-
10
T.M.D.S DATA 1+
11
T.M.D.S DATA 1/3 SHIELD
C1
ANALOG RED
12
T.M.D.S DATA 3-
C2
ANALOG GREEN
13
T.M.D.S DATA 3+
C3
ANALOG BLUE
14
+5V POWER
C4
ANALOG HORZ SYNC
15
GND
C5
ANALOG GROUND
5
1.3.3
Single versus dual link
DVI maakt gebruik van twee soorten verbindingen namelijk single en dual link. Single link ondersteunt een minimum bandbreedte van 25MHz. Dit is vastgelegd door DDWG. In de specificaties van de DDWG staat beschreven dat elke chipset een minimum resolutie van 640x480@60Hz ondersteunt. Dit komt neer op een minimum pixelklok van 25,175MHz. De maximum pixelklok bij single link ligt vast op 165MHz dit is tevens het minimum voor dual link. Single link maakt gebruik van vier TMDS signalen. Figuur 1.9 toont een schema van een DVI signaal via single link. Channel 0 verstuurt het blauwe kleur, channel 1 het groene kleur en channel 2 het rode kleur. Channel C verstuurt de pixelklok zodat de receiver weet op welke kloksnelheid de data wordt verzonden.
Figuur 1.9: Single TMDS link
Wanneer de bandbreedte meer dan 165MHz bedraagt, wordt overgestapt naar dual link. De bovengrens is afhankelijk van de kabelkwaliteit of de chipset. De limiet van dual link ligt op 330MHz omdat de grens van 2 x 165MHz per link terug wordt bereikt. Dual link is geschikt voor HD waarbij geen gebruik wordt gemaakt van reduced blanking. Het aantal TMDS signalen bij dual link bedraagt zes. Het verzenden van de videostroom gebeurt als volgt. De eerste link (eerste drie TMDS signalen) verzendt de oneven pixels van één videolijn. De tweede link (de volgende drie TMDS signalen) verzendt de even pixels van de videolijn. De eerste pixel van iedere videolijn is steeds oneven. Indien een interface dual link ondersteunt, moet dynamisch kunnen worden geswitcht tussen dual en single link. Het gebruik van dual link zorgt ervoor dat een hogere datasnelheid wordt gehaald. Figuur 1.10 toont een weergave van DVI dual link toepassing.
6
Figuur 1.10: Dual TMDS link
1.3.4
Single versus dual pixel mode
Single link biedt de keuze om één of twee pixels te ontvangen/verzenden per pixelklok. Dual link ondersteunt enkel single pixel mode. Bij single pixel mode wordt er slechts één pixel per stijgende flank van de pixelklok ontvangen/verzonden. Bij dual pixel mode wordt zowel de even als de oneven pixel per stijgende klokpuls ontvangen/verzonden. Het voordeel is dat de klokfrequentie de helft wordt van de uiteindelijke pixelklok. Door deze kleinere bandbreedte is de timing van het hardware design lager. Het ondersteunen van dual pixel mode is afhankelijk van de chipset van de DVI receiver/transmitter. De bandbreedte in dual pixel mode varieert dus van 12,5MHz tot 82,5MHz. Indien de DVI receiver/transmitter in single link – dual pixel mode werkt is het perfect mogelijk dat de DVI transmitter/receiver de data verwerkt in single link - single pixel mode. De single link tussen transmitter en receiver is echter altijd single link – single pixel mode.
1.3.5
High color depth
Standaard wordt 24 bit RGB data over de DVI link getransporteerd. Dit komt neer op 8 bit per kleur. Als meer dan 8 bit per kleur is gewenst, wordt de tweede link gebruikt. Deze tweede link bevat de LSB van de data. Indien in high color depth wordt gestuurd, moet de receiver dit natuurlijk ondersteunen.
7
1.3.6
Controlesignalen
De DVI standaard bestaat uit een een aantal controlesignalen. Hieronder worden deze kort toegelicht. HSYNC: VSYNC: DE:
Horizontale synchronisatie Verticale synchronisatie Data enable indien ‘0’ zijn HSync, VSync en CTLx actief, indien ‘1’ is video actief CTL0-CTL3: Gereserveerd voor link I CTL4-CTL9: Gereserveerd voor link II CLK: Pixelklok
1.4
OpenLDI [1]
1.4.1
Inleiding
OpenLDI staat voor Open LVDS Display Interface en is een DVI variant. Deze DVI variant is ontworpen om digitale video te verzenden van computer naar een digital flat panel display. d Ook bij deze standaard wordt de video niet gecomprimeerd verzonden. De standaard maakt gebruik van LVDS om de videodata te verzenden. LVDS staat voor Low Voltage Differential Signalling. Een LVDS-link link ondersteunt videoformaten en timings met een klok kl tussen de 32,5MHz tot 160MHz.. Bij openLDI kan je maximum gebruik maken van 8 seriële datalijnen en twee sample kloklijnen.. Deze tweede sample klok is gebruikt in dual pixel mode om compatibel te zijn met een FPD-link FPD receiver.
1.4.2
Connector
Hieronder een korte pinbeschrijving van een openLDI connector.
Figuur 1.11: OpenLDI connector Tabel 1.2: Pinbeschrijving OpenLDI-connector OpenLDI PIN#
SIGNAL
PIN#
SIGNAL
PIN#
SIGNAL
PIN#
SIGNAL
1
Link2 D0-
10
GND
19
2
Link2 DO+
11
NC
20
Link2 D3-
28
GND
Link2 D3+
29
NC
3
Link2 D1-
12
NC
21
4
Link2 D1+
13
Link1 D0-
22
Link2 CLK-
30
NC
Link2 CLK+
31
5
Link2 D2-
14
Link1 D0+
23
DDD CLK SCL
NC
32
GND
6
Link2 D2+
15
Link1 D1-
24
VCC
33
Link1 CLK-
7
NC
16
Link1 D1+
25
DDC DATA SDA
34
Link1 CLK+
8
NC
17
Link1 D2-
26
GND
35
Link1 D3-
9
GND
18
Link1 D2+
27
NC
36
Link1 D3+
8
1.4.3
Single versus dual pixel mode
Bij single pixel mode bestaat de keuze om een 18 bit of 24 bit digitale RGB videodatastroom te verzenden naar de LVDS transmitter. Bij 18 bit is dit dus 6 bit per kleur en worden de seriële datalijnen A0-A2 gebruikt. Bij 24 bit single pixel wordt 8 bit per kleur gebruikt. De gebruikte seriële datalijnen zijn A0-A3. Dual pixel ondersteunt ook de 18 en 24 bit digitale RGB videodata. Het verschil met single link is dat nu wordt gesproken over upper/lower pair. Het gevolg hiervan is dat één upper/lower pair twee pixels voorstelt. Als voorbeeld wordt een 24 bit dual pixel RGB signaal genomen dat naar de LVDS transmitter wordt gezonden. De upper data bestaat uit RU0-RU7, GU0-GU7, BU0-BU7. De lower data bestaat uit RL0-RL7, GL0-GL7, BL0-BL7. Het logische gevolg van deze extra pixel is natuurlijk de extra seriële datalijnen. In 24 bit dual pixel mode wordt de totale breedte gebruikt van A0-A7. Figuur 1.12 toont een voorstelling van een LVDS-link.
Figuur 1.12: LVDS-link
1.4.4
Controlesignalen
In totaal gebruikt openLDI zeven controle signalen die instelbaar zijn door het systeem die de transmitter of receiver aanstuurt. Hieronder een korte opsomming. HSYNC VSYNC DE CNTLE CNTLF CLK1 CLK2
Horizontale synchronisatie Verticale synchronisatie Data enable Gereserveerd controlesignaal Gereserveerd controlesignaal Sample klok 1 Sample klok 2
9
1.5 Studie bestaande RGB/DVI generator Tijdens mijn stageperiode werd een studie uitgevoerd van de RGB/DVI generator die momenteel wordt gebruikt voor CAT-testen. Deze studie had als doel kennis te verwerven van de hardware die aanwezig is op het huidige board. Per component wordt in onderstaande beschrijving een korte analyse uitgevoerd. Deze analyse heeft betrekking tot de eigenschappen van een bepaald component. Als eerste wordt een blokschema opgesteld van de generator. Per blok wordt de hardware besproken.
Figuur 1.13: Huidige RGB/DVI generator
Met behulp van het schema (zie bijlage 3) van de RGB/DVI generator wordt onderstaand blokschema gevormd.
Figuur 1.14: Blokschema huidige RGB/DVI generator
10
1.5.1
DAC
[11] De RGB/DVI generator bezit een 8 bit DAC (digital to analog converter). De maximale bandbreedte van deze DAC bedraagt 80MHz. Figuur 1.15 toont een blokschema van de DAC ADV7120.
Figuur 1.15: Blokschema DAC
In vele video opstellingen worden de RGB signalen gebufferd omdat de monitor het signaal verzwakt. Deze DAC hoeft geen buffering aan de uitgangen IOR, IOG en IOB. De buffering van de signalen gebeurt intern in de chip. Wat opvalt, is de lage bandbreedte van 80MHz. Dit gaat tot XGA een resolutie van 1024x768@60Hz. Het zenden van een 24 bit RGB videosignaal en aansturing van de DAC gebeurt door de FPGA die aanwezig is op het board.
1.5.2
HSYNC en VSYNC
De horizontale en verticale synchronisatie moeten TTL compatibel zijn. De signalen worden echter gegenereerd door de FPGA op een spanning van 3,3V. Een transistorschakeling zorgt voor de buffering en spanningsversterking naar TTL niveau.
Figuur 1.16: Schema HSYNC TTL niveau
11
1.5.3
Panellink receiver
[16] De panellink receiver ondersteunt een bandbreedte van 25-86MHz. Dit stemt overeen met een resolutie van VGA tot XGA. De interface van deze receiver ondersteunt zowel single als dual pixel. De beperking ligt in het aantal bit per kleur. In single link ondersteunt deze receiver 24 bit per kleur, in dual link zijn er dit slechts 18 bit per kleur. Buiten de videosignalen bezit de receiver nog een aantal controlesignalen. Figuur 1.17 toont hiervan een weergave.
Figuur 1.17: Blokschema panellink receiver
1.5.4
LVDS receiver
[41] De generator bevat tevens een LVDS receiver. Deze receiver heeft een bandbreedte van 20 tot 65MHz. De receiver ondersteunt single link met een 24 bit videostroom. Figuur 1.18 toont hiervan een blokschema. LVDS signalen worden omgezet naar een 24 bit videostroom. Verder bestaat deze receiver uit synchronisatie- en controlesignalen.
Figuur 1.18: Blokschema LVDS receiver
De controlesignalen van zowel de panellink als de LVDS receiver worden verbonden met de FPGA. De digitale videodata wordt na buffering gezonden naar de DAC, het RAM-geheugen of de FPGA. 12
1.5.5
Videobuffer
[12] Zowel het 24 bit RGB signaal afkomstig van de panellink als de LVDS receiver wordt gebufferd. De 16 bit buffer heeft twee functies. Een eerste functie is het bufferen van de signalen. Een tweede functie is het bepalen welk videosignaal naar de FPGA, RAM-geheugen en de DAC wordt gezonden. Indien een voorbeeld genomen wordt met de LVDS receiver, dan wordt de 24 bit videostroom na de buffer hoogimpedant. Door de buffer van de panellink hoogimpedant te maken, zal ervoor gezorgd worden dat slechts één videosignaal zich op de bus bevindt.
1.5.6
RAM-geheugen
[18] De RGB generator bevat drie blokken RAM-geheugen. De grootte van dit geheugen is een 32K x 8 RAM-geheugen en bevat 8 IO-datalijnen. Per kleur wordt één RAM-geheugen gebruikt. In totaal kan dus per kleur 262,144 kbit aan data worden opgeslagen. Figuur 1.19 toont een gedeelte van een schema voor de dataopslag van het rode kleur. van LVDS RAM
naar FPGA Figuur 1.19: Schema buffer + RAM-geheugen rood videokanaal
Even ter verduidelijking RED_DATA(0..7) is de videodata die afkomstig is van de LVDS of panellink receiver. RED_DATA_ALT(0..7) is de digitale videodata die naar de FPGA wordt gezonden. De 74F245, een bidirectionele transceiver, bevindt zich tussen beiden signalen. [13] Deze bidirectionele transceiver heeft de mogelijkheid zijn outputs hoogimpedant te zetten. De mogelijkheid bestaat om data te lezen van het RAM-geheugen ofwel van de LVDS of panellink receiver. 13
1.5.7
Seriële communicatie
[14] De generator bezit seriële communicatie via het RS232 protocol. Met behulp van een MAX232 gebeurt de communicatie tussen de generator en PC. Deze seriële communicatie heeft als doel de parameters van een beeld in te stellen. De maximale datatransfer via het RS232 protocol bedraagt 115200 Bd.
1.5.8
FPGA
[17] De generator bezit een EPF6024A, deze FPGA komt uit de FLEX® 6000 family van Altera. Hieronder volgt een kort overzicht welke recources de FPGA bezit. Feature EPF6024A Typical gates: 24000 Logic elements (Les): 1960 Maximum I/O pins: 218 Supply voltage (VCCINT): 3.3 V Naar pixelklok toe moet deze FPGA zeker een klokfrequentie halen van 80MHz. Tabel 1.3 toont kort een overzicht van de verschillende snelheden in deze FPGA. Tabel 1.3: Performance EPF6024A
Er kan besloten worden dat deze FPGA voldoende recources en snelheid heeft om de hardware op de PCB aan te sturen. De configuratie gebeurt aan de hand van een EPC1. Deze configuratiechip bezit een interne oscillator en 1 Mbit geheugen. Met behulp van een JTAG connector kan de EPC1 worden geprogrammeerd. Bij iedere power up wordt de configuratiedata van de FPGA uit de EPC1 gelezen.
14
1.5.9
Voeding
De input voedingsspanning op het board bedraagt 12V. De 5V spanning wordt bereikt aan de hand van een regulator LM7805. Deze regulator kan een maximum stroom van 1A leveren. De regulator wordt gekoeld met behulp van een koelelement. De 3,3V voedingsspanning wordt bekomen aan de hand van de regulator LT1587. De 3,3V spanning is uitgesplitst in een aantal subnetten. Het doel van deze subnetten is het extra filteren van de digitale 3,3V spanning. Dit om de ruis en rimpelspanning zo klein mogelijk te houden. De subnetten zorgen ervoor dat de filtering zo dicht mogelijk bij de component kan worden geplaatst. Dit om ruis te verkleinen die zou kunnen ontstaan, indien de filtering ver verwijderd is van de hardware component.
1.5.10 Universele connector Via de 100 pin connector die zich op de generator bevindt, wordt de videodata verzonden. Het voordeel van deze connector is het kunnen plaatsen van verschillende transmitters. Er kunnen dus gelijke mezzanine boarden worden gebruikt maar met verschillende transmitters. Met mezzanine board wordt bedoeld een PCB voorzien van een connector die op een ander board kan worden ingeplugd. Deze mezzanine boarden worden gevoed door een gefilterde 5V spanning die afkomstig is van de voedingsspanning van de generator.
1.6 Studie DVI mezzanine board In het bedrijf zijn een aantal mezzanine boards ontworpen die kunnen worden ingeplugd op de generator. Deze studie zal zich beperken tot één board. Hierna volgt nog een studie van meer recentere transmitters die zich op andere boards bevinden. Het mezzanine board kan opgedeeld worden in vier delen. Deze zijn namelijk: de universele connector, voeding, DVI transmitter en DVI connector.
1.6.1
Universele en DVI connector
Bij de universele connector wordt rekening gehouden om de juiste pinnummering te respecteren, dit t.o.v. de pinnummering van de universele connector bij de generator. De DVI connector die zich op het board bevindt, is een DVI-I. Hierbij zijn de analoge signalen niet verbonden.
1.6.2
Voeding
De 5V voedingspanning voor het mezzanine board is afkomstig van de generator. Deze 5V voedingspanning wordt teruggebracht op 3,3V. Omdat een stabiele voedingsspanning met kleine rimpel verreist is voor de DVI transmitters wordt de 3,3V spanning voorzien van condensatoren die de rimpel verkleinen.
15
1.6.3
DVI transmitter
[36] De DVI transmitter die men gebruikt op dit board is de SIL160. Deze transmitter ondersteunt single/dual pixel mode. De resolutie kan variëren van VGA tot UXGA en dit met een pixelklok tussen de 25-165MHz. Single/dual link wordt niet ondersteund door deze transmitter. Figuur 1.20 toont een functioneel blokschema van de transmitter.
Figuur 1.20: Blokschema DVI-transmitter
Hieronder volgt een korte verduidelijking van bovenstaand blokschema. DIE[23:0]: 24 bit even data pixels DIO[23:0]: 24 bit oneven data pixels DE: data enable HSYNC: Horizontale synchronisatie VSYNC: Verticale synchronisatie CTL 1..3: Controle signalen Edge: Instellen op welke flank de videodata ingelezen moet worden. Pixs: Instellen single of dual pixel mode IDCK: De pixelklok
1.7 Studie DVI transmitters en receivers De keuze van de nieuwe universele connector wordt bepaald a.d.h.v. de hoeveelheid signalen die naar deze connector wordt geroutet. De hoeveelheid signalen hangt af van het type transmitter of receiver. Deze studie heeft als doel het bepalen van de verschillende controlesignalen. Met controlesignalen wordt bedoeld het aantal signalen dat nodig is om de DVI transmitter correct te laten werken. Deze aansturing zal gebeuren door de FPGA. Als tweede puntje zal worden uitgezocht welke transmitter dual link ondersteunt. Deze transmitter zal dan gebruikt worden om op het nieuwe mezzanine board te plaatsen. Volgende figuren geven een kort overzicht van een aantal DVI transmitters en een DVI receiver die voorkomen in het bedrijf. 16
Figuur 1.21: SiI 1178 transmitter [40]
Figuur 1.22: SiI 164 transmitter [39]
Figuur 1.23: SiI 1160 transmitter [38]
Figuur 1.24: SiI 163B receiver [37]
Als laatste wordt nogmaals het blokschema van de LVDS receiver bestudeerd. Deze receiver bevindt zich op de RGB/DVI generator. Zie figuur 1.20. Uit de studie kan het volgende worden besloten: DVI transmitters en receivers hebben meer signalen nodig voor de aansturing dan LVDS transmitters en receivers. Uit vorige blokschema’s is gebleken dat volgende signalen moeten voorzien zijn op de universele connector. SDA SCL Edge Pixs IDCK+ IDCKHSYNC VSYNC DE CTRL[3..1] ISEL/RST#
Interface IIC wordt voorzien voor het instellen van de DVI transmitter. Bepalen wanneer data moet worden ingelezen op stijgende of dalende flank. Instellen single of dual pixel mode. Positieve pixelklok Negatieve pixelklok Horizontale synchronisatie Verticale synchronisatie Data enable Controlesignalen Reset van de IIC controller 17
Met behulp van de studie worden er voldoende signalen voorzien van de FPGA naar de universele connector. De essentiële signalen zijn benoemd op de universele connector. Signalen die afhankelijk zijn van transmitter worden als reserve aangeduid. De conclusie van bovenstaande studie is dat slechts één transmitter dual link ondersteunt. Dit is namelijk de SiI1178, deze zal dan ook worden gebruikt voor het nieuwe mezzanine board.
18
2
PCB Hardware
2.1
Hardware RGB/DVI generator
In dit hoofdstuk worden de verschillende hardware onderdelen voor de RGB/DVI generator bepaald. Elk hardware onderdeel wordt getoetst aan de beoogde doelstelling. Om het geheel overzichtelijk te houden wordt het PCB design opgesplitst in een aantal blokken. Ieder van deze blokken wordt afzonderlijk behandeld. Figuur 2.1 toont de verschillende hardwareblokken. FLASH
RAM
USB
DAC FPGA
RS232 RS485
IIC
Universele connector
Digitale video out
Figuur 2.1: Blokschema RGB/DVI generator
2.1.1
Communicatiedragers
Het board beschikt over de nodige hardware om te communiceren via het USB, RS232 en RS485 protocol. Via het gekozen protocol kan data worden verzonden naar de FPGA om de beeldparameters van de generator in te stellen. Met behulp van deze communicatie-interface kunnen beelden worden ingeladen in flash- en RAM-geheugen.
2.1.1.1 Seriële communicatie De vereiste van de IC is het ondersteunen van het RS232 en RS485 protocol. Wat volgt is een beschrijving waarom deze protocollen aanwezig zijn. Het RS232 protocol is een standaard die vroeger veel werd gebruikt voor seriële communicatie. Tegenwoordig wordt deze standaard minder gebruikt en vervangen door het RS485 protocol. Dit is te wijten aan de nadelen van het RS232 protocol die in onderstaande alinea worden toegelicht. Het RS232 protocol gebruikt minimaal twee communicatielijnen namelijk Tx (Transmitted data) en Rx (Received data). Deze lijnen zijn gerefereerd t.o.v. een massaverbinding. Door gebruik te maken van één nullijn is RS232 zeer gevoelig voor storing. Het triggerniveau van de Tx en Rx datalijn ligt daarom tussen de ± 3V. 19
Omdat reflectie mogelijk is, wordt de datasnelheid en kabellengte beperkt bij RS232. Deze datasnelheid is gestandaardiseerd op 20 kBd bij een kabellengte van 12 m. Hoe kleiner men de kabellengte neemt hoe groter de baudrate kan worden genomen. Bovenstaande nadelen kunnen worden verholpen door gebruik te maken van het RS485 protocol. [9] Dit protocol maakt gebruik van differentiële lijnen om de data te verzenden. Door het differentieel uitvoeren van de communicatielijnen is dit protocol beter immuun tegen storingen. De RS485 ontvanger vergelijkt het spanningsverschil tussen beide lijnen, dit is verschillend met RS232 protocol dat gebruik maakt van een nulreferentie lijn. Het voordeel van deze hoge storingsimmuniteit is het behalen van een hogere baudrate en kabellengte. Om hogere snelheden te behalen wordt een afsluitweerstand voorzien langs beide einden, dit zorgt ervoor dat reflecties worden voorkomen. De afsluitweerstand bedraagt 120 ohm, dit is het gevolg van de kabel impedantie die varieert tussen de 100 tot 120 ohm. Deze impedantie aanpassing zorgt voor een minimum aan ruis. [21] De IC die beide protocollen ondersteunt is de LTC1387 multiprotocol tranceiver van Lineair Technology. Figuur 2.2 toont het bekomen schema.
Figuur 2.2: Schema seriële communicatie
Met behulp van een selectielijn die zich bevindt op pin 8 kan een keuze worden gemaakt tussen RS232 en RS485. Wanneer wordt gekozen voor RS485 zal een relais de nodige 120 ohm afsluitweerstand op de ontvangstzijde inschakelen. Dit IC haalt een baudrate van 120 kBd via het RS232 protocol en 5 MBd als wordt overgeschakeld naar het RS485 protocol. Deze multiprotocol transceiver werkt op een voedingsspanning van 5V. Het gevolg is dat de I/O lijnen RxD en TxD variëren tussen 0 en 5V. Om deze lijnen te converteren naar 3,3V I/O spanning van de FPGA wordt een logic converter gebruikt. Het converteren gebeurt d.m.v. een bidirectionele logic converter. Dit omdat de Txd lijn van de FPGA naar de LTC1387 moet worden geconverteerd van 3,3V naar 5V. Omgekeerd moet de Rxd lijn van de LTC1387 naar de FPGA geconverteerd worden van 5V naar 3,3V.
20
2.1.1.2 USB Communicatie [25] Veel apparatuur communiceert tegenwoordig via het USB-protocol.. Dit D wordt voorzien op het board. Door het twisted pair differentieel communicatiekanaal is het USB-protocol immuun tegen storingen. Het voordeel door de differentiële uitvoering is een hogere baudrate t.o.v. RS232. Er wordt gekozen voor de FT2232D van FTDI,, dit IC bevat twee UART/FIFO controllers die afzonderlijk kunnen worden wo ingesteld. Het voordeel van dit IC is dat de USBUSB connectie kan worden aangesproken door een virtuele COM poort. Figuur 2.3 toont een aanbevolen schema dat in de datasheet terug te vinden is. De IC wordt aangesloten via de voeding van het board. boa Dit zorgt ervoor dat de USB-bus USB niet onnodig wordt belast.
Figuur 2.3: FDTI chip
Omdat de communicatie met de FPGA gebeurt op 3,3V, worden de I/O pinnen van dit IC gevoed op 3,3V (Zie figuur 2.3 VCCIOA en VCCIOB). De voedingsspanning spanning van de USB wordt enkel gebruikt om een reset te geven wanneer een USB-kabel USB kabel wordt ingeplugd. Deze IC wordt voorzien van een EEPROM 93C46. Dit EEPROM zorgt voor een aantal extra’s. Zo is het mogelijk het A en B kanaal afzonderlijk te configureren als bv. één UART en één parallelle FIFO. Het voordeel is de mogelijkheid om dit EEPROM te programmeren via de USB interface. Hiervoor wordt gebruik gemaakt van een programma afkomstig van FTDI chip. In hoofdstuk 7.2 wordt de configuratie van deze IC besproken.
21
2.1.1.3 Besluit Daar waar vroeger frequent het RS232 protocol werd gebruikt, zo is de nieuwe standaard het RS485 en USB protocol. Vermits in het bedrijf deze drie protocollen nog gehanteerd worden, worden deze ondersteund door de hardware van de RGB/DVI generator. Dit zorgt ervoor dat verschillende devices kunnen worden aangesloten. De baudrate bij de LTC1387 bedraagt 120 kBd via het RS232 protocol. Dit is hetzelfde als de MAX232 bij de vorige RGB/DVI generator. Voor RS485 communicatie bedraagt de baudrate 5 MBd. Indien via de USB communicatie wordt gewerkt, kan een baudrate worden gehaald tot 1 MBd voor RS232 en 3 MBd voor RS485.
2.1.2
FPGA
2.1.2.1 Stratix II [35] In videobeeldverwerking is de timing van zeer groot belang. De digitale videodata moet snel verwerkt kunnen worden, dit om een stabiel signaal naar de DVI transmitter of de DAC te verzenden. Om aan deze timing te kunnen voldoen wordt een keuze gemaakt uit de highend FPGA’s van Altera. Om een vergelijkende studie te maken tussen de high-end FPGA’s wordt de productcataloog van Altera geraadpleegd. De uiteindelijke keuze wordt een Stratix II EP2S60 FPGA. De keuze van de EP2S60 gaf op drie punten de doorslag. Een eerste criterium is de aanwezigheid van voldoende blok RAM. Dit blok RAM kan later als buffer gebruikt worden om een deel van de videodata op te slaan. Hierbij wordt als standaard een blok RAM genomen die 20 lijnen van een totaal beeld kan bufferen. Hieronder volgt de berekening indien de generator een maximum resolutie van 1920x1080 uitstuurt: 1920 pixels/lijn * 30 bit/pixel * 20 lijnen = 1152000 bits Er moet dus een minimum van 1,152 Mbit blok RAM aanwezig zijn. Een tweede criterium is de aanwezigheid van voldoende IO pinnen. Volgens een eerste samenvatting van de hardware zouden ongeveer 400 IO pinnen worden geroutet naar de FPGA. De EP2S60672 bezit 492 IO pinnen. Dit is voldoende voor het design. Een derde criterium is de aanwezigheid van 12 PLLs. Dit is al bij het ontwerp van de FPGA geïmplementeerd zodat deze PLLs geen recources van de FPGA verbruiken. Deze PLLs hebben de mogelijkheid realtime de klokken te veranderen alsook een faseverschuiving aan toe te brengen. Tabel 2.2 toont de twee verschillende types PLLs die aanwezig zijn in de Stratix II.
22
Tabel 2.1: Type PLLs Stratix II Feature
Enhanced PLL
Fast PLL
Input Frequency Range
1,5-450MHz
20-750MHz
Output Frequency Range
1,5-500MHz
9,375MHz to 1,040 GHz
External Output Frequency Range
1,5-450MHz
20-500MHz
Yes
Yes
Programmable Phase Shift
125 ps
105 ps
Programmable Delay Shift
125 ps
105 ps
Clock Switchover
Yes
Yes
PLL Reconfiguration
Yes
Yes
Programmable Bandwidth
Yes
Yes
Clock Power Down Mode
Yes
Yes
Dynamic clock Source Select
Yes
Yes
Dynamic Phase alignement Support
No
Yes
Spread-Spectrum Clocking
Yes
No
Number of Dedicated External Differential Clock Outputs
3
0
Number of Feedback Clock Inputs
1
0
Up to 4
Up to 8
Programmable Frequency Synthesis
Number of PLLs per Device
Met een maximum outputklok van 450MHz bij de enhanced PLLs en 500MHz bij de fast PLLs zal zeker voldaan worden aan de doelstelling van 200MHz. Het voordeel van een enhanced PLL is het nauwkeuriger kunnen instellen van de klok. Als laatst wordt de datasnelheid opgezocht van de I/O pinnen. Uit de datasheet volgt dat snelheden tot 300MHz kunnen behaald worden met LVTTL. Dit voldoet aan de vooropgestelde 200MHz. De volledige I/O standaard van de FPGA wordt als LVTTL ingesteld. De Stratix II voldoet aan de eisen.
2.1.2.2 Configuratie MAX II [26] Voor de configuratie van de FPGA zijn er twee opties mogelijk. Als eerste kan de FPGA geconfigureerd worden via een EPCS (Serial configuration device). Een tweede optie is de configuratie via een MAX II en flashgeheugen. Uiteindelijk wordt gekozen voor de configuratie via de MAX II. Deze heeft twee voordelen: de kostprijs is lager dan een EPCS en er bevindt zich al een flashgeheugen op het PCB design voor de opslag van beelddata. Hieruit volgt dus dat het flashgeheugen zowel configuratiedata als beelddata zal bezitten. In volgend punt iets meer over het flashgeheugen. Met behulp van de application note AN386 van Altera en de datasheet van de MAX II wordt besloten de MAX II EPM240T100C5 te gebruiken. Deze CPLD bevat voldoende logic elements om een design te implementeren die de Stratix II kan configureren. Figuur 2.4 toont het schema.
23
Figuur 2.4: Schema MAX II
2.1.2.3 Besluit De FPGA’s van Altera hebben doorheen de jaren enorm veel logische elementen bij gekregen op eenzelfde oppervlakte. Wanneer de Stratix II wordt vergeleken met de FLEX 6000 dan is er een factor 30 verschil in het aantal logische elementen. Deze hoeveelheid aan logica zorgt ervoor dat grotere designs kunnen worden geïmplementeerd. Een tweede verschil is de stijging van de kloksnelheden en de aanwezigheid van 12 PLLs. Deze PLLs zijn standaard voorzien in de FPGA en verbruiken dus geen logische elementen. Het realtime instellen van de PLL en toe brengen van een faseverschuiving is van zeer groot belang. Hierdoor kan de timing gemakkelijk worden bijgesteld. Wanneer even op de configuratie wordt teruggekomen dan is er de mogelijkheid designs te implementeren die groter zijn dan 128 Mbit. Natuurlijk zal een groter flashgeheugen moeten worden voorzien. Indien er werd gekozen voor een EPCS dan moet er worden overgestapt naar flashgeheugen indien de design groter wordt dan 128 Mbit.
2.1.3
Geheugen
2.1.3.1 Flashgeheugen [31] De keuze van het flashgeheugen hangt af van een aantal factoren. In punt 2.1.2.2 werd aangehaald dat het flashgeheugen wordt gebruikt om de configuratiedata van FPGA op te slaan. Om dit flashgeheugen te kunnen uitlezen moet dit worden ondersteund door de MAX II. Na opzoeking volgt dat de CPLD MAX II een aantal types van Intel, ST Micro en Spansion ondersteunt.
24
Een volgende factor is de werkspanning, dit volgt uit de I/O spanning van de FPGA en MAX II. Beide devices werken op een I/O spanning gelijk aan LVTTL (3,3V). Het logische gevolg is dat de werkspanning van het flashgeheugen gelijk is aan 3,3V. Zoals eerder vermeld, wordt het flashgeheugen voor twee doeleinden gebruikt. Enerzijds bevat het de configuratiedata voor de FPGA. De tweede functie dient als dataopslag voor één HD beeld. De keuze van het aantal Mbit dataopslag wordt als volgt vastgelegd. Als eerste wordt de maximum dataopslag berekend van één HD beeld bestaande uit 10 bit/kleur. Deze 10 bit/kleur werd als doelstelling vastgelegd bij het begin van de masterproef. HD resolutie: 1920 pix x 1080 pix Aantal bit per kleur: 10 bit Aantal kleuren per pixel: 3 (Rood, groen, blauw) Totaal aantal bit = 1920 x 1080 x 10 x 3 = 62,208 Mbit De grootte van de configuratiedata wordt aan de hand van een bestaand project bepaald. Het gekozen project is een SDI generator waar de projectgrootte kleiner dan 16 Mbit bedraagt. Om toch een zekere reserve in te bouwen is de minimum vereiste grootte van het flashgeheugen 100Mbit. De uiteindelijke keuze wordt het 128 Mbit flashgeheugen in de S29GL-N MirrorBit™ flash family van Spansion. Figuur 2.5 toont het schema.
Figuur 2.5: Schema flashgeheugen
Zoals men kan merken in bovenstaand blokschema zijn de gebruikelijke interfaces aanwezig. Het flashgeheugen bestaat uit 23 adreslijnen en 16 datalijnen. Alle controlelijnen zijn actief laag, dit wordt aangegeven door volgend teken: #. De toegangstijd tot dit geheugen bedraagt 100 ns. 25
De generator zal dus de mogelijkheid bieden een extra beeld te onthouden eventueel gerelateerd aan een bepaalde testopstelling. Deze mogelijkheid was niet aanwezig op de vorige generator.
2.1.3.2 RAM-geheugen [23] De keuze van het RAM-geheugen wordt op basis van de dataopslag van één HD beeld bepaald. Het aantal MBit dat hiervoor wordt voorzien is namelijk 62,208 Mbit. De waarde werd in het hoofdstuk van de flash berekend. De keuze van het RAM-geheugen wordt aan de hand van volgende parameters vastgelegd: de I/O pinnen worden aangestuurd met LVTTL namelijk 3,3V, het geheugen moet minimum 62,208 MBit aan data kunnen opslaan en als laatste is de cycle time van zeer cruciaal belang. De klokfrequentie van het RAM-geheugen moet tenminste dezelfde zijn als deze van de maximale pixelklok. Dit zorgt dat de videodata, die zich bevindt in het RAM-geheugen, op tijd naar de FPGA kan worden gezonden. De FPGA stuurt deze data door naar het RGB of DVI outputkanaal. De keuze van het SDRAM, rekening houdend met bovenstaande beperkingen, is de 64 Mbit synchrone DRAM van Micron. Het schema ziet er als volgt uit.
Figuur 2.6: Schema RAM-geheugen
26
Net zoals bij het flashgeheugen zijn hier terug de gebruikelijke controlesignalen aanwezig. Deze controlesignalen zijn terug actief laag. De breedte van de databus bedraagt 32 bit. Indien één pixel uit een 30 bit RGB kleur bestaat dan kan één pixel per klokcyclus worden gelezen. Door deze brede databus hoeft slechts één RAM-geheugen worden geplaatst op de PCB, dit t.o.v. drie ramgeheugens op de vorige RGB/DVI generator.
2.1.4
Analoge video
2.1.4.1 DAC [22] Een DAC zorgt voor de omzetting van het digitale beeld naar analoge videosignalen. Deze DAC produceert de analoge videosignalen rood, groen en blauw. De vereisten van deze DAC zijn de volgende: de DAC moet 10 bit per kleur en HD resolutie ondersteunen. M.a.w. de maximum pixelklok van 173MHz moet gesampled kunnen worden. De keuze van de DAC is de TDA8777 familie van Philips. De maximum sampleklok bedraagt 240MHz en de DAC ondersteunt 10 bit per kleur. Figuur 2.7 toon het schema van deze DAC.
Figuur 2.7: Schema DAC
Om een 1V spanning te verkrijgen moeten een aantal parameters van de DAC worden ingesteld. Het bekomen van een correcte 1V outputspanning hangt af van de VREF spanning. Deze ingang moet ingesteld worden op een referentie spanning van 1,21V. Op de ingang RSET wordt een weerstand van 1150 ohm aangesloten. Figuur 2.7 toont een weerstand van 560 ohm dit werd in het hardware design verkeerd gekozen. Door deze weerstand wordt de uitgangsstroom van de DAC ingesteld zodat zich een spanning van 1V over de weerstand van 75 ohm bevindt. 27
Aan de ingang van de DAC klok wordt een weerstand en condensator in serie geplaatst. De condensator van 100pF zorgt voor een grotere rise en fall time van de klok. De reden is de eventuele storing die kan veroorzaakt worden door steile klokflanken van de DAC klok.
2.1.4.2 Analoge videobuffer en switch [33] Alvorens de analoge videosignalen naar de monitor te zenden wordt deze eerst gebufferd. Het doel van deze buffering is de DAC niet te belasten. Indien er stroom zou vloeien naar de monitor, daalt de stroom die vloeit door de 75 ohm weerstand. Dit betekent een spanningsval met als gevolg donkere kleuren die op het scherm verschijnen. Buffering is dus van uiterst belang. De buffer moet een voldoende bandbreedte hebben. De richtwaarde die wordt genomen is 240MHz, dit volgt uit bandbreedte van de DAC. Bij een waarde van 240MHz mag de buffer nog geen enkele verzwakking toebrengen aan het signaal. Een tweede criterium is een hoge slew rate van de opamp. Algemeen neemt men volgende formule als referentie: slew rate = 2 * π* frequentie* spanning Dit wordt toegepast met de frequentie gelijk aan 240MHz. slew rate = 2 *π* 240MHz * 1V = 1508 V/µs De uiteindelijke keuze is OPA695 van Texas Instruments en heeft een slew rate van 4300V/µs. Figuur 2.8 toont de buffering van het blauwe videosignaal.
Figuur 2.8: Schema videobuffer
Bovenstaand design wordt aangehaald in de datasheet als referentiedesign voor de buffering van videosignalen. De OPA695 is een breedbandige opamp hierdoor is deze zeer gevoelig voor ruis. Om deze ruis te onderdrukken wordt de voedingsspanning van de opamps voldoende ontkoppeld. Figuur 2.9 toont hierbij de schakeling.
28
Figuur 2.9: Schema ontkoppeling buffers
Bij het bepalen van de condensatoren wordt per twee opamps een ontkoppeling voorzien op de positieve en negatieve voedingsklem. Deze ontkoppeling gebeurt door het parallel zetten van een 10nF en 100nF condensator. De 5V voedingsspanning wordt nog voorzien van een extra filter en 10 µF condensator. Als laatste wordt nog een koppeling voorzien tussen beide voedingsklemmen. Dit gebeurt met behulp van een parallel schakeling van een 10nF en 820pF condensator. Hierdoor wordt de tweede harmonische vervorming met 6dB verzwakt i.p.v. 3dB. Deze schakeling wordt zo dicht mogelijk geplaatst bij de zes buffers. [27] De -5V spanning voor de negatieve voedingsklem van de opamp is afkomstig van een step down voltage regulator namelijk de LM2675-5. Figuur 2.10 toont hiervan het schema.
Figuur 2.10: Schema -5V schakelende voeding
29
Aan de hand van de datasheet en application note 1157 die terug te vinden is in bijlage 4 wordt de keuze van de componenten bepaald. Deze datasheet bevat ook een referentiedesign dat wordt gehanteerd in dit design. Dit referentiedesign is gebaseerd op een +5V uitgangsspanning. Een doelstelling van de generator is het kunnen switchen van de analoge video tussen de DVIA uitgang en de RGB uitgang. Als extra kan via een externe bron bv. Quantum Data generator naar de DVI-A worden gezonden. [20] Om dit mogelijk te maken worden er videoswitches gebruikt. Hiervoor wordt geopteerd voor de ADG719. Deze switch heeft één beperking namelijk een bandbreedte van 200MHz, dit voldoet echter nog aan de doelstellingen. Figuur 2.11 toont het schema van de videoswitch.
Figuur 2.11: Schema videoswitch
De 0 ohm overbruggingsweerstand is een voorziening die wordt genomen als er problemen optreden met de switch.
2.1.4.3 HSYNC en VSYNC De signalen HSYNC en VSYNC worden rechtstreeks door de FPGA gegenereerd. De spanning bedraagt slechts 3,3V, dit niveau wordt omgevormd naar een 5V spanningsniveau. Dit gebeurt aan de hand van de 74LVC1T45, dit component dient tevens als buffer. Figuur 2.12 toont de schakeling voor HSYNC.
Figuur 2.12: Schema TTL buffer
2.1.4.4 Besluit Wanneer een vergelijking wordt uitgevoerd van de vorige RGB/DVI generator t.o.v. de huidige generator dan is er een groot verschil merkbaar. Als eerste is er de scheiding van de analoge en digitale ground, dit heeft als doel beter analoge signalen te produceren. 30
Straks meer hierover in punt 2.1.7. Een tweede vergelijking is de DAC die met zijn bandbreedte van 240MHz HD ondersteunt. Bij de oude generator waren deze videobuffers niet aanwezig omdat deze zich bevonden in de IC zelf. Als laatste kan door gebruik te maken van de videoswitches niet alleen het analoge videosignaal gezonden worden naar de output SMB connectoren. Maar is er ook de mogelijkheid de analoge signalen te zenden naar de DVI connector. Omdat er zich ook input SMB connectoren op het board bevinden kan met behulp van de switchen dit signaal naar de DVI connector worden gezonden. Als laatste wordt geen gebruik gemaakt van transistoren voor de omvorming en buffering voor de TTL uitgangen van HSYNC en VSYNC. Met behulp van een klein IC gebeurt zowel de omzetting als de buffering naar TTL niveau.
2.1.5
Microcontroller
[28] Wanneer een mezzanine board wordt ingeplugd moet dit automatisch worden herkend door de generator. [30] Om dit te verwezenlijken zal gebruik worden gemaakt van een EEPROM die zich op het mezzanine board bevindt. De EEPROM zal via IIC worden uitgelezen. De gekozen microcontroller is de 89LPC932A en beschikt over een IIC-interface. Deze microcontroller staat in verbinding met de FPGA. De data verstuurd door de FPGA wordt door de microcontroller via het IIC protocol verzonden. Om de stroom te beperken die naar de FPGA vloeit worden weerstanden van 100 ohm voorzien, vooral wanneer deze microcontroller niet geprogrammeerd is, kan deze grotere stromen veroorzaken. Figuur 2.13 toont het schema van deze microcontroller.
Figuur 2.13: Schema microcontroller
Door gebruik te maken van deze IIC bus kan de EEPROM van een ingeplugd board worden uitgelezen. Informatie met betrekking tot aantal bits per kleur, instelling van de DVI transmitters kunnen via deze weg worden ingelezen in de FPGA. Dit heeft het voordeel verschillende mezzanine boarden te ondersteunen zonder het design van de FPGA aan te passen. Door de juiste parameters te zenden kan de FPGA de juiste data op de correcte videoof synchronisatielijn verzenden. 31
2.1.6
Universele connector
Met behulp van de voorgaande studie van DVI transmitters en receivers wordt de breedte van de universele connector bepaald. De universele connector die wordt gekozen bevat 114 pinnen en voldoet om de nodige signalen te verzenden naar het mezzanine board. Deze connector bevat onder meer de digitale video, analoge video en controle signalen om de DVI transmitter aan te sturen. Andere signalen die zich nog bevinden op deze connector zijn voedingspanning en IIC lijnen. De universele connector bevat een algemeen ground vlak en de maximale stroom per pin bedraagt 1A. Figuur 2.14 toont het schema van de universele connector.
Figuur 2.14: Schema universele connector
2.1.7
Voeding
[32] Op het board bevinden zich in totaal vijf spanningen deze zijn namelijk: Digitale voeding bestaat uit: +5V, +3,3V, +1,2V Analoge voeding bestaat uit: +5VA, +3,3VA Het board wordt gevoed op een spanning van 12V, d.m.v. onderstaande schakeling (zie figuur 2.15) wordt de analoge spanning van 12V bekomen. De schakeling zorgt ervoor dat storingen die ontstaan op de digitale voeding worden uitgefilterd naar de analoge voeding. De filtering gebeurt via een LC circuit .
32
Figuur 2.15: Schema splitsing analoge en digitale ground
Deze schakeling heeft echter één beperking. De maximumstroom die door de spoel mag vloeien, bedraagt 1A. De stroom is daarom een beperkende factor. Voor de toepassing van de generator is de 1A voldoende op de analoge voeding. Om de verschillende voedingen te bekomen wordt gebruik gemaakt van een DC-DC converter die in te stellen is via een externe weerstand. Figuur 2.16 toont een voorbeeld van de 5V digitale spanning. Het voordeel van deze converter is dat er geen koelplaat aanwezig hoeft te zijn.
Figuur 2.16: Schema DC-DC converter
De digitale voeding van 3,3V wordt gesplitst in twee voedingen. De tweede voeding van 3,3V wordt bekomen door een regulator met als ingangsspanning 5V. De reden van twee voedingen is het uitsplitsen van de belastingsstroom die maximum 5A mag bedragen per voeding. Hieronder volgt een kort overzicht van de belastingsstromen. Deze stromen worden bepaald aan de hand van de specificaties in de datasheets van het component. Voedingsspanning: ++3,3V (830mA) RAM: 280 mA Flash: 90mA MAX II: 400mA USB: 60mA Voedingsspanning: +3,3V (4,19A) DAC: 90mA FPGA: 2A (Volle belasting) Microcontroller: 700mA Voeding mezzanine board: 1A 33
De stromen die worden bepaald bij een bepaalde IC is een schatting. Niet alle hardware wordt in rekening gebracht. In bovenstaande opsomming worden de grootste belastingen opgesomd. Zoals blijkt is het aangewezen te werken met twee netten die de hardware voorzien van de 3,3V spanning.
2.1.8
Extra hardware
Op de generator bevinden zich nog twee rotary buttons. Met behulp van de eerste rotary kan een videobeeld geselecteerd worden. De tweede rotary button bepaalt de instelling van de transmitter. Dit heeft betrekking op single/dual link, single/dual pixel mode en edge bepaling op welke flank de eerste data mag verzonden worden. Er bevinden zich ook een aantal debug leds, dit kan handig zijn om bepaalde signalen of instellingen te visualiseren. Als laatste bevinden zich nog een aantal extra connectoren op het board. Twee hiervan zijn twee 8 bit uitbreidingsconnectoren. Deze kunnen eventueel worden gebruikt om signalen over te brengen naar andere boards. Een laatste connector biedt de mogelijkheid om een LCDdisplay aan te sturen.
2.2
Hardware mezzanine board
Het mezzanine board kan net zoals de generator in een aantal blokken worden verdeeld (zie figuur 2.17). Dit zijn namelijk de universele connector, EEPROM voor board herkenning, DVI transmitter, voeding en DVI connector. De doelstelling van dit board is het uitlezen van het type board via de EEPROM. Het board is voorzien van een DVI-I connector, dit om de mogelijkheid te bieden om zowel DVI-A als DVI-D te ondersteunen.
Figuur 2.17: Blokschema mezzanine board
34
2.2.1
DVI transmitter
Om DVI-D te ondersteunen wordt een DVI transmitter voorzien. De transmitter zorgt voor de omvorming van het digitale beeld naar TMDS signalen. Bij de keuze van de IC wordt rekening gehouden dat de transmitter zowel single als dual link ondersteunt. Hierbij moet de maximum pixelklok in single 165MHz bedragen en in dual link boven de 200MHz. De keuze van de DVI transmitter is de SiI1178 van Silicon Image. Deze transmitter biedt enkel de mogelijkheid om in single link te werken. Door twee transmitters met elkaar te verbinden kan in dual link worden gewerkt. Hierbij worden de transmitters opgedeeld in een master en slave. Door het gebruik van twee transmitters bestaat de mogelijkheid om high color depth te ondersteunen. Hierbij zal slave de LSB doorsturen. Figuur 2.18 toont het schema. Hierbij is de linkse transmitter master en de rechtse slave. De SYNCO van de master is verbonden met de SYNCI van de slave.
Figuur 2.18: Schema DVI transmitters
Het bepalen van de juiste componenten gebeurt met behulp van de datasheet.
2.2.2
Voeding, DVI en universele connector
Het mezzanine board wordt gevoed d.m.v. de voeding afkomstig van de generator. Deze voeding wordt extra gefilterd om de rimpelspanning en storingen te vermijden. Om deze filtering te voorzien wordt gebruik gemaakt van de LP2985. Met behulp van deze IC kan de rimpelspanning op de uitgangsspanning verminderd worden tot 30 µV. Door middel van het plaatsen van een LC circuit na de IC wordt deze spanning nogmaals gefilterd. Deze filtering is nodig omdat DVI transmitters zeer gevoelig zijn voor storingen op de digitale voeding. Ook bij deze DVI transmitters wordt terug een onderscheid gemaakt tussen digitale en analoge voeding. De DVI connector die zich bevindt op het board is een DVI-I. Hierdoor kan zowel gebruik gemaakt worden van het analoge als digitale beeld. Met behulp van het schema van 35
de generator wordt gezorgd dat de juiste signalen worden verbonden met de juiste pin van de universele connector.
2.2.3
EEPROM
[19] De EEPROM die zich bevindt op het board is een IIC EEPROM met een 256 kbit geheugen. (Zie figuur 2.19). Dit is ruim voldoende voor deze toepassing. Deze EEPROM kan de gegevens bevatten van de DVI transmitter. Zo weet de generator hoe deze moet worden aangestuurd. Als extra kan nog een default waarde meegeven worden van beeld en resolutie. Dit kan handig zijn als een board voor een bepaalde vaste testopstelling wordt gebruikt.
Figuur 2.19: Schema EEPROM
2.2.4
Besluit
Wanneer even wordt vergeleken tussen het mezzanine board van de vorige generator en het nieuwe mezzanine board dan kan het volgende worden besloten. Door de aanwezigheid van een IIC EEPROM kan het mezzanine board worden herkend. De DVI transmitter ondersteunt dual link zodat er zich geen beperking voordoet tot UXGA. Aan de hand van deze transmitters zal het mogelijk zijn HD te ondersteunen. Door gebruik te maken van beide transmitters die zich bevinden op het mezzanine board bestaat er de mogelijkheid om 10 bit/kleur te verzenden in single link. Het volledige schema van de RGB/DVI generator alsook het mezzanine board bevinden zich in bijlage 5 en 6.
2.3
Routing board
Uit bovenstaande hardwarebeschrijving volgt dat de RGB/DVI generator is voorzien van recente nieuwe hardware componenten. Niet alleen de hardware maar ook de routing van de signalen op het board zullen worden aangepast aan de hogere pixelklokken. Door de video- en controlesignalen op lengte te routen wordt er gezorgd dat de tijdsvertraging voor beide signalen gelijk zijn. Verder zullen alle digitale signaallijnen een impedantie hebben van 50 ohm en de analoge signalen 75 ohm. De volledige routing van beide PCB’s wordt intern in het bedrijf gedaan door een aparte groep mensen van het CAD team met jaren ervaring. Om deze mensen te ondersteunen bij de routing van het board worden een aantal blokschema’s opgesteld. Deze blokschema’s hebben als doel enkele aandachtspunten overzichtelijk over te brengen. Figuur 2.20 toont het schema voor de generator figuur 2.21 voor het mezzanine board.
36
FPGA
Gelijke lengte HSYNC analoog VSYNC analoog
Universele connector
Gelijke lengte Oneven en even video datalijnen HSYNC_Mez VSYNC_Mez PixelClockPixelClock+ INPixelClockINPixelClock+ Data_Enable
Figuur 2.20: Blokschema routing RGB/DVI generator
Figuur 2.21: Blokschema routing mezzanine board
37
3
Configuratie van de FPGA [6]
3.1
Inleiding
De Stratix II is opgebouwd uit SRAM-cellen om de configuratiedata op te slaan. Deze SRAM-cellen zijn vluchtig waardoor de Stratix II na iedere power-on terug moet worden geconfigureerd. Er werd geopteerd om de configuratie van de FPGA te laten verlopen via een MAX II CPLD (niet vluchtig) van Altera en een extern flashgeheugen. De reden voor deze oplossing is de lagere kostprijs van de hardware dit t.o.v. een EPCS (Serial Configuration Device). Een tweede reden is de aanwezigheid van een flashgeheugen op het board voor de dataopslag van één beeld. Het flashgeheugen zal dus opslag bieden voor de configuratiedata alsook de videodata van één HD beeld. Het volgende hoofdstuk biedt wat meer uitleg hoe de Stratix II wordt geconfigureerd. M.a.w. hoe de configuratiedata van de flash naar de Stratix II wordt gezonden. Als tweede deel wordt uitleg gegeven hoe de configuratiedata in het flashgeheugen wordt geprogrammeerd.
3.2
MAX II CPLD
Zoals werd beschreven, gebeurt de configuratie via de MAX II die de configuratiedata uit een flashgeheugen leest. Figuur 3.1 toont hiervan een blokschema.
Figuur 3.1: Blokschema configuratie FPGA
Met behulp van de JTAG interface wordt via de MAX II de configuratiedata geprogrammeerd in het flashgeheugen. Hierbij wordt geen gebruik gemaakt van de FPGA resources. Nadien leest de MAX II de configuratiedata van het flashgeheugen en configureert hiermee de Stratix II. Welk design zich in de MAX II bevindt, zal in de volgende paragrafen duidelijk worden.
3.2.1
Configuratie FPGA via PFL
Het flashgeheugen wordt enkel gebruikt als opslagmedium voor de configuratiedata. Dit flashgeheugen bezit echter niet de nodige logica om een FPGA te configureren. Een design in de MAX II zal zorgen voor de configuratie van de FPGA. De MAX II kan je dus aanzien als de bootloader van de FPGA. Een eerste design dat hiervoor wordt aangewend, is de statemachine. Hieronder volgen de verschillende states die deze statemachine bezit.
38
Constant Constant Constant Constant Constant Constant Constant Constant
STATE_IDLE STATE_RESTART STATE_WAIT_NSTATUS STATE_CONFIGURING STATE_CONF_DONE STATE_INIT STATE_INIT_DONE STATE_ERROR
: STD_LOGIC_VECTOR := x"0"; : STD_LOGIC_VECTOR := x"1"; : STD_LOGIC_VECTOR := x"2"; : STD_LOGIC_VECTOR := x"3"; : STD_LOGIC_VECTOR := x"4"; : STD_LOGIC_VECTOR := x"5"; : STD_LOGIC_VECTOR := x"6"; : STD_LOGIC_VECTOR := x"7";
Figuur 3.2 toont het blokschema van het design. De statemachine wordt voorgesteld door config_state_machine. Deze statemachine stuurt een controleblok aan namelijk config_control_signal. Het blok flashmem stelt het flashgeheugen voor. Naargelang de state van het controleblok wordt data uit het flashgeheugen uitgelezen. De configuratiedata wordt op zijn beurt doorgezonden naar de FPGA.
Figuur 3.2: VHDL-design configuratie FPGA
De statemachine is deels aangepast aan het design van de generator. De reden voor het niet verder afwerken van deze statemachine is het gebruik van de parallel flash loader (PFL). De PFL is een blok door Altera ontworpen die in te stellen is via de megawizard. Dit IP-blok zorgt voor de communicatie tussen flashgeheugen en MAX II. Op zijn beurt configureert dit blok de FPGA met de data uit het flashgeheugen. Figuur 3.3 toont hierbij een blokschema.
Figuur 3.3: Blokschema configuratie FPGA via PFL
39
Figuur 3.4 toont de megawizard voor de instellingen van de PFL.
Figuur 3.4: Megawizard PFL FPGA configuratie
Hieronder volgt wat meer toelichting bij deze interface. De PFL wordt ingesteld voor FPGA configuration.. Ook het flashgeheugen moet worden getypeerd.. De generator bezit een 128 Mbit flashgeheugen met een 16 bit brede databus. Er wordt wordt ingesteld dat de IO pinnen van de flash hoogimpedant worden. Dit gebeurt na de configuratie als het flashgeheugen niet meer moet worden uitgelezen.. Dit zal ervoor zorgen dat de FPGA de flash kan aanspreken na configuratie. Ten eerste worden er een aantal aan instellingen ingevuld voor de FPGA-configuratie. configuratie. Zo zal de externe klokfrequentie,, een 48MHz 48 kristal, worden opgegeven. Vervolgens wordt de toegangstijd van het flashgeheugen ingevuld.. Deze toegangstijd kan worden teruggevonden in de datasheet van het flashgeheugen en bedraagt hier 100ns. Daarna wordt het byteadres b voor de option bits opgegeven.. Dit byteadres wordt namelijk bij configuratie eerst door de PFL gelezen. Dit adres en het daarop volgend byteadres bevatten namelijk het startstart en eindadres van de configuratiedata.
40
Om de configuratietijd zo klein mogelijk te houden wordt gekozen voor de fast passive parallelconfiguratie. Ook de configuratieklok zal 48MHz bedragen. Indien tijdens het configureren problemen opduiken kan worden overgeschakeld naar passive serial configuratie. De configuratieklok kan je ook instellen op 24MHz. Dit is mogelijk door de verhouding tussen inputklok en DCLK output op twee te brengen. Het verschil tussen de fast passive parallel en passive serial configuratie is zeer duidelijk. Bij het eerste wordt de configuratiedata over een 8 bit brede databus verzonden naar de FPGA. De passive serial configuratie gebruikt slechts één IO lijn. Tot slot wordt ingesteld wat er gebeurt als zich een fout voordoet tijdens het configureren. Hierbij zal de MAX II proberen de FPGA opnieuw te configureren. Als read mode voor het flashgeheugen wordt dit default op normal geplaatst. Het uiteindelijk design wordt weergegeven in figuur 3.5. VCC
pf l_nreset pfl_flash_access_request pf l_flash_access_granted
INPUT GND
POR
PFL
PIN_66 f lash_addr[22..0] f lash_data[15..0] f lash_nce flash_nw e f lash_noe
OUTPUT BIDIR VCC OUTPUT OUTPUT OUTPUT
f lash_nwe
PIN_97
f lash_noe
PIN_71 PIN_41
pf l_clk
INPUT VCC
f pga_conf _done
INPUT VCC
PIN_12 f pga_nstatus
PIN_21
PIN_19 PIN_44 GND
pf l_nreset
INPUT GND INPUT VCC
pf l_clk fpga_pgm[2..0] fpga_conf_done fpga_nstatus pf l_nreconf igure
fpga_data[7..0] fpga_dclk f pga_nconfig
inst
OUTPUT OUTPUT OUTPUT
f lash_addr[22..0]
f lash_data[15..0]
f lash_nce
f pga_data[7..0] f pga_dclk
f pga_nconf ig
PIN_20 PIN_18
PIN_8 PIN_7 PIN_6 PIN_5 PIN_4 PIN_3 PIN_2 PIN_1
PIN_54 PIN_57 PIN_55 PIN_53 PIN_49 PIN_48 PIN_47 PIN_43 PIN_61 PIN_52 PIN_62 PIN_51 PIN_50 PIN_96 PIN_42 PIN_98
PIN_64 PIN_86 PIN_87 PIN_84 PIN_89 PIN_74 PIN_58 PIN_77 PIN_81 PIN_67 PIN_68 PIN_82 PIN_83 PIN_69 PIN_70 PIN_75 PIN_88 PIN_92 PIN_90 PIN_76 PIN_91 PIN_95 PIN_99
Figuur 3.5: VHDL blok PFL FPGA configuratie
Het design wordt als volgt opgebouwd. Het signaal pfl_flash_access_granted wordt slechts hoog als de voedingsspanning stabiel is. Dit wordt gecontroleerd door het POR signaal. De tijd voor het actief hoog worden van het POR signaal kan hardwarematig aangepast worden. Dit door het veranderen van de tijdsconstante van een RC-schakeling. De andere inputs en outputs zijn voorzien om de configuratiedata uit het flashgeheugen te lezen en te verzenden naar de FPGA. Door de input pfl_nreset laag te houden kan de FPGA opnieuw worden geconfigureerd. Na het compileren van dit design volgt uit de samenvatting dat de MAX II volledig wordt benut. Het design bevat namelijk 231 van de 240 aanwezige logic elements.
3.2.2
Configuratiedata via PFL in flashgeheugen
De PFL van Altera biedt de mogelijkheid om de configuratiedata in het flashgeheugen te downloaden. Figuur 3.6 toont de megawizard.
41
Figuur 3.6: 6: Megawizard PFL flash programming
Deze wizard is zeer handig in gebruik en vraagt enkele instellingen. Deze instellingen in hebben betrekking tot de geheugencapaciteit en databreedte van het flashgeheugen geheugen. De optie set the flash bus pins to tri-state state when not in use wordt aangevinkt, maar is in deze toepassing niet noodzakelijk. Dit zal ervoor zorgen zo dat de outputpinnen van het flashgeheugen hoogimpedant worden als de MAX II niet schrijft of leest uit het geheugen. geheugen Hieronder volgt nu een overzicht hoe te werk wordt gegaan bij het programmeren van het flashgeheugen via de PFL. Wanneer in Quartus een design aangemaakt wordt, zal hierbij ook een SOF-file worden gecreëerd. SOF staat voor SRAM Object File ile en wordt gebruikt om de SRAM-cellen cellen juist te configureren configurere in de FPGA. Om deze data in de flash te laden, moet deze worden worden geconverteerd in een POF (Programmer Object File). ile). De functie om files te converteren bevindt zich in het Quartus programma. Figuur 3.7 toont de setup pagina in Quartus die hiervoor zorgt.
42
Option bits
Figuur 3.7: Setup page convert programming files
Bij het instellen van deze interface worden een aantal specificaties ingevuld. Zo moet de configuratie device en mode worden bepaald. De configuratie device is een flashgeheugen van 128Mbit. De mode die werd gekozen voor de FPGA configuratie, is de fast passive parallelconfiguratie. (Dit werd al in punt 3.2.1 bepaald.) Ook het byteadres van de option bits wordt opgegeven. Dit startadres is hetzelfde als deze opgegeven bij het initialiseren van de PFL. Het is belangrijk dat beide adressen gelijk zijn. Het design ziet er als volgt uit (zie figuur 3.8). VCC OUTPUT
altparallel_flash_loader0 BIDIR VCC
f lash_addr[22..0]
f lash_data[15..0]
pfl_nreset pf l_flash_access_request pfl_f lash_access_granted
flash_addr[22..0] f lash_data[15..0] flash_nce flash_nw e flash_noe
OUTPUT
f lash_nce
OUTPUT
f lash_nwe
OUTPUT
f lash_noe
inst
PIN_54 PIN_57 PIN_55 PIN_53 PIN_49 PIN_48 PIN_47 PIN_43 PIN_97 PIN_61 PIN_71 PIN_52 PIN_41 PIN_62 PIN_51 PIN_50 PIN_96 PIN_42 PIN_98
PIN_64 PIN_86 PIN_87 PIN_84 PIN_89 PIN_74 PIN_58 PIN_77 PIN_81 PIN_67 PIN_68 PIN_82 PIN_83 PIN_69 PIN_70 PIN_75 PIN_88 PIN_92 PIN_90 PIN_76 PIN_91 PIN_95 PIN_99
Figuur 3.8: VHDL blok PFL flash programming
Uit het design volgt dat de PFL altijd toegang heeft tot het flashgeheugen. Dit wordt verwezenlijkt door het signaal pfl_flash_accesss_granted te verbinden met VCC. Het uiteindelijk configureren gebeurt via de programmer in Quartus. De geconverteerde SOFfile wordt als bijlage toegevoegd aan de POF-file van de PFL. Figuur 3.9 toont de uiteindelijke hardware setup. 43
Figuur 3.9: Hardware setup flash programming
Bij het configureren wordt als eerste de PFL in de CPLD geconfigureerd. Hierna volgt de configuratiedata die via de PFL naar het flashgeheugen wordt gezonden.
44
4
Implementatie [2]
In dit hoofdstuk wordt dieper ingegaan op de implementatie van de VHDL code. Het design wordt opgedeeld in een aantal blokken. Om de structuur overzichtelijk te houden worden sommige blokken nogmaals onderverdeeld.
Figuur 4.1: Blokschema VHDL design
Ieder van deze blokken wordt in afzonderlijke paragrafen hieronder behandeld. De toelichting heeft de bedoeling weer te geven waarvoor het blok wordt gebruikt. In dit hoofdstuk wordt de code niet toegelicht. Deze is eigendomsrecht van het bedrijf en is om deze reden niet opgenomen in deze scriptie. Wat volgt is een beschrijving van de verschillende blokken.
4.1
UART blok
Eén van de doelstellingen van deze masterproef is het instellen van de generator via een softwareapplicatie. Het communiceren tussen de FPGA en de hardware die het USB of RS232 protocol ondersteunt gebeurd aan de hand van een UART interface. Het UART VHDL blok wordt uit een bestaand design aangewend. Als eerste wordt de werking van de UART uitgelegd. Daarna volgt de communicatie tussen de UART en de instelbare VHDL blokken.
4.1.1
Inleiding
Figuur 4.2 toont de volledige design van de UART. StopChar 255 inst22
StartChar
DataToUART[23..16]
254
8
inst21
8
Param ete r Value BlockAddress H"08" DummyValue H"AA" ReadDummy Load
Data[0][7..0]
PIN_88 LVTTL/LVCMOS 32MHz
32MHz Start
Sy sClk
SendPuls
Start
data[7..0]
Parameter BAUDRATE SYSTEM_CLOCK MSB_FIRST STOP_BITS WIDTH
DataToUART[7..0]
DataToUART[15..8]
Block[7..0]
TxD_PC
PIN_8 LVTTL/LVCMOS
Uart INPUT VCC INPUT VCC
sy sclk rxd D_In[7..0] load
Read_Data
Load TxDBusy
Data_in[23..0]
PIN_10 LVTTL/LVCMOS
sample DEnable
Param eter Value Command_Length 7 Uni_Com_Dec
DEnable
Data_From_Uart[7..0] Sy sclk
data[15..0][7..0]
Start
DValid
DEnable
Start
inst9
Data[15..0][7..0] 32MHz
Send
RxD_PC
OUTPUT
TxDBusy
inst8 Data_out[7..0]
inst12
Txd_busy
read
txd Txd_Busy
denable
32MHz DataToUART[23..0]
D_Out[7..0]
dv alid
inst30
Sy sclk
Value 19200 32000000 "NO" 1 8
UART
databuffer
Figuur 4.2: Blok Uart
Het blok bestaat uit drie delen: read, UART en databuffer gedeelte. Deze delen worden in onderstaande alinea verduidelijkt.
45
4.1.2
UART
Het UART blok communiceert met de UART interface van de FTDI chip of de LTC1387 chip. Figuur 4.3 toont het UART blok. PIN_88 LVTTL/LVCMOS PIN_8 LVTTL/LVCMOS
Uart
32MHz
INPUT VCC
TxD_PC
INPUT VCC
sy sclk
D_Out[7..0]
rxd D_In[7..0]
txd Txd_Busy
load
RxD_PC
OUTPUT
PIN_10 LVTTL/LVCMOS
TxDBusy
sample dv alid
Param eter BAUDRATE SYSTEM_CLOCK MSB_FIRST STOP_BITS WIDTH
Value 19200 32000000 "NO" 1 8
DEnable
denable
inst8
Figuur 4.3: UART
De UART bevat vier inputs. De input sysclk die ingesteld is op 32MHz deze waarde wordt ook meegegeven bij de parameter system_clock. Het is belangrijk dat deze system_clock correct wordt ingevuld. Deze waarde wordt gebruikt om de baudrate te berekenen. De tweede input is de rxd die verbonden is met de txd van de hardware UART interface. Als laatste zijn nog de inputs D_In[7..0] en load. Als load logisch ‘1’ wordt, kan data worden ingelezen in D_In[7..0]. De ingelezen data wordt verzonden via de txd output van de UART. Bij het verzenden van data via de txd output wordt de output txd_Busy hoog. Dit signaal wordt gebruikt om eventueel aan te geven dat er momenteel geen data kan worden gezonden naar het UART blok. Als laatste zijn nog de gebruikte outputs D_Out[7..0] en denable. Als de UART data ontvangt via de rxd input wordt denable hoog en wordt de data verzonden via D_Out[7..0]. Bij het verzenden naar de output D_Out[7..0] worden start- en stopbit verwijderd. Het UART bezit nog vijf parameters die instelbaar zijn. Dit zijn namelijk: - Baudrate: instellen van de gewenste baudrate die ondersteund wordt door de hardware. - System_Clock: de klok waarmee het UART blok wordt aangestuurd. - MSB_First: bij deze parameter wordt ingesteld welke bit eerst komt na de startbit. In dit voorbeeld is het de LSB (Least Significant Bit) die volgt na de startbit. Dit volgt uit de NO die wordt ingesteld bij deze parameter. - Stop_bits: hoeveel stopbits volgen nadat één byte werd verzonden. - Width: de breedte van de data tussen twee opeenvolgende startbits. Zonder rekening te houden met de stopbit. De uiteindelijke UART interface bestaat uit negen UART blokken. Dit blok wordt ingesteld met een default baudrate van 9600. Door het juiste adres en selectie te sturen naar de input iSelectUART[7..0] kan een andere baudrate worden gekozen. UART_9BAUDRATE Start Data[9][7..0] Data[8][7..0]
iStart iAddress[7..0] iSelectUART[7..0]
100MHz
iSy sclk TxD_PC
INPUT VCC
PIN_L23
iRxd iD_In[7..0] iLoad inst7
oD_Out[7..0] oTxd oTxd_Busy
OUTPUT
TxDBusy
oSample oDValid oDEnable
DEnable
Param eter BAUDRATE_1 BAUDRATE_2 BAUDRATE_3 RxD_PC BAUDRATE_4 PIN_L24 BAUDRATE_5 BAUDRATE_6 BAUDRATE_7 BAUDRATE_8 BAUDRATE_9 SYSTEM_CLOCK MSB_FIRST STOP_BITS DataWIDTH Address
Value 9600 14400 19200 38400 57600 115200 230400 460800 921600 100000000 S"NO" 1 8 B"00000110"
Figuur 4.4: UART_9Baudrate
Via het softwareprogramma kan de gebruiker de baudrate veranderen. Meer hieromtrent in het hoofdstuk 5.3. 46
4.1.3
Databuffer
De Uni_Com_Dec dient als databuffer voor het UART blok (zie figuur 4.5). Parameter Value Command_Length 7 Uni_Com_Dec Data[15..0][7..0] 32MHz DEnable
Data_From_Uart[7..0] Sy sclk
data[15..0][7..0]
Start
DValid
DEnable inst12
Figuur 4.5: Uni_Com_Dec
Uni_Com_Dec bestaat uit de input Data_From_Uart[7..0] die verbonden is met D_Out[7..0] van de UART. De DEnable input wordt aangestuurd door de denable van de UART. De databuffer bestaat uit 16 plaatsen die elk één byte kunnen opslaan. Dit kan worden uitgelezen door de output data[15..0][7..0]. De eerste array stelt de plaats voor, de tweede de plaats in de byte. Door gebruik te maken van de simulator in Quartus wordt dit blok uitgetest.
Figuur 4.6: Simulatie Uni_Com_Dec
De output DValid wordt logisch ‘1’ indien de databuffer vol is. Door de parameter command_length in te stellen kan de lengte van de buffer worden aangepast. Zo is het mogelijk dat DValid actief hoog wordt nadat de buffer zeven byte bevat (zie figuur 4.6). Als de buffer wordt ingesteld om zeven bytes te ontvangen, moeten deze elkaar opvolgen. Als de tijd tussen twee bytes te lang duurt, wordt terug vanaf nul geteld om de buffer op te vullen. Hoe een VHDL blok data uit deze databuffer leest, wordt aan de hand van het UART_9Baudrate besproken (zie figuur 4.4). Elk blok die instelbaar is door software krijgt een input iStart en iAddress. In dit design wordt de maximum diepte van de databuffer op tien bytes ingesteld. Het adres van de instelbare VHDL blokken bevindt zich altijd op de tiende plaats (Data[9][7..0]) van de databuffer. Dit wordt in het gehele design gehanteerd. De input iStart wordt verbonden met de output DValid van de databuffer.
47
Bij het hoog worden van DValid controleert elk blok of het adres zich bevindt in de databuffer. Als dit adres overeenstemt met het adres van het VHDL blok dan bevinden zich op de andere plaatsen in de databuffer de instelwaarden. Per blok wordt vastgelegd waar zich een bepaalde instelwaarde bevindt in de databuffer. Bij het schrijven van data naar de databuffer moet rekening worden gehouden dat er altijd tien bytes na elkaar worden gezonden. Indien er slechts vier bytes nodig zou zijn, moeten de andere waarden worden opgevuld met een nul. Indien geen tien byte gezonden wordt, zal DValid nooit actief hoog worden. Er wordt gezorgd dat software en hardware op elkaar zijn afgestemd. In het geval van het UART_9Baudrate bevindt zich de instelling van baudrate op plaats acht in de array. Het softwareprogramma moet er dus voor zorgen dat de instelling zich in de juiste byte bevindt. Dit geldt ook voor andere instelbare VHDL blokken.
4.1.4
Read
Als laatste bestaat het read gedeelte uit een Read_Data, ReadDummy, StartChar en StopChar (zie figuur 4.7). De werking van deze blokken wordt met behulp van een simulatie verduidelijkt. StartChar 254 inst21
Param eter Value BlockAddress H"08" DummyValue H"AA"
DataToUART[7..0] ReadDummy
8
StopChar 255 inst22
DataToUART[23..0]
32MHz Start DataToUART[23..16]
8
Data[0][7..0]
Read_Data 32MHz
Load Sy sClk
SendPuls
Start
data[7..0]
DataToUART[15..8]
Load TxDBusy
Sy sclk Data_in[23..0]
Data_out[7..0] Send
Start Txd_busy
Block[7..0] inst30
inst9
Figuur 4.7: Read
Figuur 4.8: Simulatie Read
Als start hoog wordt bij het ReadDummy blok dan wordt de byte op plaats nul gelezen. Als deze overeenstemt met het blockaddress namelijk 0x08 dan wordt SendPuls hoog en wordt de data 0xAA naar het Read_Data blok gezonden. Wanneer de input Start logisch ‘1’ wordt, zal achtereenvolgens 0xFE, 0xAA en 0xFF naar de output Data_out[7..0] worden gezonden. Hierbij zal de output send hoog worden telkens een nieuwe byte wordt verzonden. Dit hoog worden van de send output zorgt ervoor dat de UART blok de data inleest en verzendt naar de txd output. 48
4.1.5
Besluit
Met behulp van simulatie werd het volledige UART design uitgetest. Dit zal een hulp zijn bij het verder uitwerken van de VHDL blokken die via de UART interface moeten worden ingesteld. Het is belangrijk dat elk blok geadresseerd is en de signalen iStart (ouput DVALID) en iAdress(output Data[9][7..0]) aanwezig zijn. De andere plaatsen in de databuffer kunnen willekeurig volgens het aantal instellingen worden ingevuld.
4.2
Video- en patrooninstellingen
Het design bevat een aantal instellingen die zowel via software al hardware kunnen worden ingesteld. Het VHDL blok Video_Pattern_Settings zorgt voor een correcte instelling van het design. Figuur 4.9 toont het VHDL blok. Param eter Value BlockAddr B"00000101" Video_Pattern_Settings clk
ColorBar_DVI Start
Data[9][7..0] Data[0][4..0] Pattern_Adress[3..0] Data[3][4..0] DVIControl_Adress[3..0]
clk iStart iAddress[7..0]
o_ColorBar_DVI
o_Gray Bar_DVI
iPatternRotary [3..0]
o_ColorBar_AN
iDVI_ControlRotary [3..0]
PixelOnOf f _DVI
o_PixelOnOf f _DVI
iPattern[4..0]
iDVI_Control[4..0]
RAMP_DVI
o_Ramp_DVI
Gray Bar_DVI RGB_ColorBar RGB_RAMP
o_Ramp_AN
RGB_PixOnOf f
o_PixelOnOf f _AN
RGB_Gray Bar
o_Gray Bar_AN o_R_DVIA
OUTPUT
o_R_DVIA
o_G_DVIA
OUTPUT
o_G_DVIA
o_B_DVIA
OUTPUT
o_B_DVIA
o_HS_DVIA
OUTPUT
o_HS_DVIA
o_VS_DVIA
OUTPUT
o_VS_DVIA
o_R_AN
OUTPUT
o_R_AN
o_G_AN
OUTPUT
o_G_AN
o_B_AN
OUTPUT
o_B_AN
o_HS_AN
OUTPUT
o_HS_AN
o_VS_AN
OUTPUT
o_Single_nDual_link
o_VS_AN sSingle_nDual_link
PIN_W2 PIN_W1 PIN_V2 PIN_V1 PIN_V3 PIN_AB1 PIN_AA2 PIN_AA1 PIN_Y2 PIN_Y1
o_Single_nDual_pix sSingle_nDual_pix inst26
Figuur 4.9: Video_Pattern_Settings
Het blok is instelbaar via software. Dit wordt gerealiseerd door een adres te geven en de input iStart en iAddress[7..0] te voorzien. De inputsignalen die als pattern worden benoemd dienen om een patroon te kiezen. Dit signaal zorgt er ook voor dat het beeld naar de juiste connector wordt verzonden. De gebruiker heeft de keuze analoog of digitaal beeld te zenden naar de DVI connector of analoog beeld naar de analoge output. De signalen iPattern[4..0] en iDVI_Control[4..0] worden verbonden met de databuffer van de UART. De signalen iPatternRotary[3..0] en iDVI_ControlRotary[3..0] lezen de instelling van de overeenkomstige rotary button. Default start de generator met de instelling van de rotary buttons. De software kan deze instellingen overschrijven. Deze blijft geldig zolang via hardware de rotary button niet wordt aangepast. De output van dit blok stuurt een gekozen patroon aan en stelt de eigenschap in met betrekking tot single - dual link en single - dual pixel mode. De outputpinnen sturen de videoswitches aan. Hierdoor kan het analoog beeld worden verzonden naar de analoge output of de DVI connector. De mogelijkheid bestaat ook om de analoge input te verzenden naar de DVI connector.
49
4.3 DVI blok Om het DVI blok te implementeren in de FPGA wordt de omschrijving van dit blok neergeschreven. Hieronder worden de punten opgesomd waaraan dit blok moet voldoen: - single/dual link; - single/dual pixel mode; - generatie van vier patronen; - configureerbare pixelklok; - datamapping naar SiI1178; - configureerbare resolutie. Met bovenstaande informatie wordt het blokschema van de DVI blok opgesteld. Dit schema bestaat uit vier grote blokken. Figuur 4.10 toon hierbij het bekomen model.
Figuur 4.10: Blokschema DVI
In de volgende paragrafen zal elk blok iets meer in detail worden besproken.
4.3.1
DVI resolution settings
Een eerste VHDL blok is het resolution_settings blok. Dit blok heeft slechts één functie en dit is het bijhouden van de beeldparameters. Resolution_Settings Clk Start Data[9][7..0] Data[8][7..0] Data[1][3..0],Data[0][7..0] Data[3][3..0],Data[2][7..0] Data[5][3..0],Data[4][7..0] Data[7][3..0],Data[6][7..0] Data[1][3..0],Data[0][7..0] Data[3][3..0],Data[2][7..0] Data[5][3..0],Data[4][7..0] Data[7][3..0],Data[6][7..0]
DVI_ScreenWidth[11..0] clk
oScreenWidth[11..0]
iRS_Set
oHFrontPorch[11..0]
iAddress[7..0]
oHBackPorch[11..0]
i_nWidth_Height[7..0]
oHSWidth[11..0]
iScreenWidth[11..0]
oScreenHeight[11..0]
iHFrontPorch[11..0]
oVFrontPorch[11..0]
iHBackPorch[11..0]
oVBackPorch[11..0]
iHSWidth[11..0] iScreenHeight[11..0]
oVSWidth[11..0]
DVI_HFrontPorch[11..0] DVI_HBackPorch[11..0] DVI_HSWidth[11..0] DVI_ScreenHeight[11..0] DVI_VFrontPorch[11..0] DVI_VBackPorch[11..0] DVI_VSWidth[11..0]
Parameter ScreenWidth HFrontPorch HBackPorch HSWidth ScreenHeight VFrontPorch VBackPorch VSWidth BlockAddr
Value 640 16 80 64 480 2 10 8 B"00000001"
Enable_DVI_GEN
oEN_GEN
iVFrontPorch[11..0] iVBackPorch[11..0] iVSWidth[11..0]
inst20
Figuur 4.11: Resolution_settings DVI
Dit blok start op met de parameter om het beeld in te stellen met volgende resolutie 640x480@60Hz. De eenheid is echter ook instelbaar via de UART interface en bezit een uniek adres.
50
Indien het signaal start actief hoog wordt dan zal in de databuffer van de UART worden gelezen. Als het adres in de buffer overeenstemt met het blockaddress dan is de overige aanwezig data bestemd voor dit blok. De beeldparameters bevinden zich op een unieke plaats in de databuffer. Door het vastleggen van deze plaatsen zal bij de softwareapplicatie de data correct in de buffer moeten worden geschreven. De output van deze eenheid is de default waarde ofwel de ingestelde waarde via de UART interface. De output van het blok is verbonden met de DVI generator.
4.3.2
DVI generator
Het blok DVI_Gen heeft als functie het genereren van de signalen DE, HSYNC, VSYNC. De beeldparameters zijn afkomstig van het resolution_setting blok. Op het ritme van de bijhorende pixelklok worden de signalen HS (HSYNC), VS (VSYNC) en DE gegenereerd. DVI_GEN DVI_ScreenWidth[11..0] DVI_HFrontPorch[11..0] DVI_HBackPorch[11..0] DVI_HSWidth[11..0] DVI_ScreenHeight[11..0] DVI_VFrontPorch[11..0] DVI_VBackPorch[11..0] DVI_VSWidth[11..0]
HS_GEN ScreenWidth[11..0]
HS
HFrontPorch[11..0]
VS
HBackPorch[11..0]
DE
VS_GEN DE_GEN
HSWidth[11..0] ScreenHeight[11..0] VFrontPorch[11..0] VBackPorch[11..0] VSWidth[11..0]
PixClk Enable_DVI_GEN
PixClk Enable
inst3
Figuur 4.12: DVI_GEN
Door middel van het signaal Enable kan de generator gedisabled worden. Dit signaal wordt een aantal klokpulsen laag gehouden wanneer de resolutie van de generator wordt gewijzigd. Het gevolg hiervan is dat alle interne counters worden gereset en de nieuwe beeldparameters stabiel kunnen worden ingelezen. Dit voorkomt eventuele fouten. Fouten bij het instellen van de DVI_GEN zouden ervoor zorgen dat het beeld verkeerd wordt aangestuurd.
4.3.3
DVI patroongeneratie
De generatie van de verschillende patronen gebeurt per patroon. Dit betekent dus vier blokken. Zoals in de doelstelling vastgelegd werd zullen volgende patronen aanwezig zijn colorbar, graybar, ramp en pixel on/off. De aansturing van het blok gebeurt door de DVI generator. Dit is voor de vier patronen gelijk. Per patroon wordt de keuzemogelijkheid voorzien om de videodata in single/dual link of single/dual pixel mode te verzenden. De vier patronen verzenden hun data via een bus naar het datamapping blok van de SiI1178. Door een selectielijn te voorzien kan een patroon geënabled of gedisabled worden. Het blok Video_Pattern_Settings zorgt ervoor dat slechts één patroon is aangestuurd. Door de andere patronen te disablen worden de uitgangen tristate gezet.
51
PatternColorbar sSingle_nDual_link
PatternGray Bar
DE_Pattern
sSingle_nDual_pix PixClk DE_GEN HS_GEN VS_GEN ColorBar_DVI DVI_ScreenWidth[11..0]
Single_nDual_link
oDE
Single_nDual_pix
oHS
PixClk
oVS
iDE
o_ev en_R[7..0]
iHS
o_ev en_G[7..0]
iVS
o_ev en_B[7..0]
i_Enable
o_odd_R[7..0]
ScreenWidth[11..0]
o_odd_G[7..0]
sSingle_nDual_link
HS_Pattern
sSingle_nDual_pix
VS_Pattern
PixClk
ev en_R[7..0]
DE_GEN
ev en_G[7..0]
HS_GEN
ev en_B[7..0] odd_R[7..0] odd_G[7..0]
VS_GEN Gray Bar_DVI DVI_ScreenWidth[11..0]
odd_B[7..0]
o_odd_B[7..0]
PatternPixOn_Of f
DE_GEN HS_GEN VS_GEN PixelOnOf f _DVI
oHS
PixClk
oVS
iDE
o_ev en_R[7..0]
iHS
o_ev en_G[7..0]
iVS
o_ev en_B[7..0]
i_Enable
o_odd_R[7..0]
ScreenWidth[11..0]
o_odd_G[7..0]
HS_Pattern VS_Pattern ev en_R[7..0] ev en_G[7..0] ev en_B[7..0] odd_R[7..0] odd_G[7..0] odd_B[7..0]
inst2
PatternRamp
sSingle_nDual_link
PixClk
oDE
Single_nDual_pix
o_odd_B[7..0]
inst1
sSingle_nDual_pix
DE_Pattern Single_nDual_link
Single_nDual_link
oDE
Single_nDual_pix
oHS
PixClk
oVS
iDE
o_ev en_R[7..0]
iHS
o_ev en_G[7..0]
iVS
o_ev en_B[7..0]
i_Enable
DE_Pattern
sSingle_nDual_link
HS_Pattern
sSingle_nDual_pix
VS_Pattern
PixClk
ev en_R[7..0]
DE_GEN
ev en_G[7..0]
HS_GEN
ev en_B[7..0] odd_R[7..0]
o_odd_R[7..0] o_odd_G[7..0]
VS_GEN Ramp_DVI
odd_G[7..0]
DVI_ScreenWidth[11..0]
odd_B[7..0]
DE_Pattern Single_nDual_link
oDE
Single_nDual_pix
oHS
PixClk
oVS
iDE
o_ev en_R[7..0]
iHS
o_ev en_G[7..0]
iVS
o_ev en_B[7..0]
i_Enable
o_odd_R[7..0]
ScreenWidth[11..0]
o_odd_G[7..0]
o_odd_B[7..0]
HS_Pattern VS_Pattern ev en_R[7..0] ev en_G[7..0] ev en_B[7..0] odd_R[7..0] odd_G[7..0] odd_B[7..0]
o_odd_B[7..0]
inst4
inst9
Figuur 4.13: DVI pattern
De patronen worden aangestuurd door het signaal DE_GEN. Wanneer dit signaal hoog wordt, stuurt het patroon bij elke stijgende flank van de pixelklok de videodata naar het mapping blok. Sommige patronen bezitten het signaal DVI_ScreenWidth[11..0]. De reden hiervoor is dat bv. bij de colorbar de breedte van elke bar moet worden berekend. Dit is afhankelijk van de totale breedte van de ingestelde resolutie. De signalen HS_GEN en VS_GEN worden niet gebruikt bij de opbouw van de videodata. Deze signalen worden met een delay naar buiten gestuurd. De reden hiervoor is dat er per blok een delay ontstaat tussen het hoog worden van DE_GEN en de videodata output.
4.3.4
Datamapping
De datamapping zorgt voor het correct verzenden van de videodata naar de transmitter. Bij iedere stijgende flank van de pixelklok wordt de videodata ingelezen in dit blok. De videodata wordt hierna via een correcte mapping naar de outputlijnen van de transmitter verzonden. Doordat de DVI-transmitters dual link ondersteunen moet de mapping aangepast zijn zodat kan worden aangegeven indien in single of dual link wordt verzonden. Mapping_SiI_1178 PixClk_out PixClk sSingle_nDual_link DE_Pattern HS_Pattern VS_Pattern ev en_R[7..0] ev en_G[7..0] ev en_B[7..0] odd_R[7..0] odd_G[7..0] odd_B[7..0] Enable_DVI_GEN
PixClk_out PixClk Single_nDual_link iDE iHS iVS even_R[7..0] even_G[7..0] even_B[7..0] odd_R[7..0] odd_G[7..0] odd_B[7..0] Enable
DataMaster[11..0] DataSlave[11..0] DE_Master HS_Master VS_Master DE_Slave HS_Slave VS_Slave DVI_RST_MASTER DVI_RST_SLAVE
OUTPUT
DataMaster[11..0]
OUTPUT
DataSlav e[11..0]
OUTPUT
DE_Master
OUTPUT
HS_Master
OUTPUT
VS_Master
OUTPUT
DE_Slav e
OUTPUT
HS_Slav e
OUTPUT
VS_Slav e
OUTPUT
DVI_RST_MASTER
OUTPUT
DVI_RST_SLAVE
PIN_AF17 PIN_AE17 PIN_W16 PIN_AF18 PIN_V16 PIN_AD3 PIN_AE18 PIN_W17 PIN_AD2 PIN_AF19 PIN_V17 PIN_AD1 PIN_AE19 PIN_W18 PIN_AC3 PIN_AF20 PIN_V18 PIN_AB3 PIN_AE20 PIN_W19 PIN_AF21 PIN_AA3 PIN_V19 PIN_AE21 PIN_T6 PIN_W20 PIN_AF22 PIN_V20 PIN_T4 PIN_AE22 PIN_W21 PIN_V21
inst51
Figuur 4.14: Mapping_Sil_1178
52
Dit blok bevat nog een selectielijn waarmee bij een resolutieverandering de output kan worden gereset. De output bestaat uit een master en slave gedeelte. DataMaster[11..0] bevat de videodata voor de master en DataSlave[11..0] voor de slave. De output DVI_RST_Master en DVI_RST_SLAVE zijn verbonden met het register van de DVI transmitter. Het is essentieel dat het register van de DVI transmitter wordt gereset bij iedere resolutieverandering. Verder uitleg over het DVI transmitter register volgt in paragraaf 6.1.
4.3.5
PLL
De PLL zorgt voor de klokken die noodzakelijk zijn voor de aansturing van de blokken. Er wordt gebruik gemaakt van de enhanced PLL. Deze PLL is hardcore voorzien in de FPGA. De PLL wordt ingesteld met behulp van de megawizard die aanwezig is in Quartus. Deze PLL biedt de mogelijkheid zo dicht mogelijk de gevraagde pixelklok te benaderen. De acht aanwezige fast PLL’s hebben minder multiplier en divider waarden. Het gevolg is dat bij de keuze van een fast PLL de kans bestaat dat het verschil tussen pixelklok en gevraagde waarde te groot wordt. De PLL wordt voorzien van een configuratieblok die zorgt voor de reconfiguratie van de PLL. Dit blok is standaard voorzien in Quartus en wordt met behulp van de megawizard ingesteld. Met behulp van de application note an367 wordt de nodige informatie over dit blok gelezen(zie bijlage 7). Met de informatie betreffende de reconfiguratie wordt een blok geïmplementeerd die zorgt voor de juiste aansturing. Dit blok wordt terug geadresseerd. Als het adres voorkomt in de databuffer van de UART zullen de nodige parameters worden uitgelezen. Ook hier wordt het adres slechts vergeleken wanneer het signaal start actief hoog wordt. Parameter Value Address B"00000001"
Reconfig_DVI_PixelClk
Reconf ig_pll clk clk
Start
Data[6][0] Data[5][0],Data[4][7..0]
Data[1][0] Data[0][0]
owrite_param
ireconf ig
Data[7][0]
Data[2][2..0]
oread_param
iAddress[7..0]
Data[8][0]
Data[3][3..0]
oreconf ig
iStart
Data[9][7..0]
reconfig read_param w rite_param data_in[8..0] counter_type[3..0] counter_param[2..0]
odata[8..0]
iread_param
ocounter_ty pe[3..0]
iwrite_param
ocounter_param[2..0]
idata[8..0] icounter_ty pe[3..0] icounter_param[2..0] ireset iPLLreset inst18
oreset oPLLreset oEN_GEN
DVI_Scandataout DVI_Scandone
pll_scandataout pll_scandone
clk
clock reset pll_areset_in
inst24
busy
DVI_PixlCLK data_out[8..0] CLK100MHz
pll_scandata pll_scanclk pll_scanread pll_scanw rite
inclk0 areset scanclk scanread scanw rite scandata
pll_areset
inst15
inclk0 f requency : 100.000 MHz Operation Mode: No Compensation PLL Ty pe: Enhanced PLL Clk
Ratio
c0 109/100
Ph (dg) DC (%) 0.00
50.00
c1 109/100 -45.00
50.00
c2 109/100
0.00
50.00
c3 109/100
0.00
50.00
c4 109/100
0.00
50.00
c0 PixClk c1 c2 PixClk_out c3 OUTPUT c4 OUTPUT DVI_Scandataout scandataout DVI_Scandone scandone Lock_DVI_CLK locked
PIN_AE12
Master_PixClk Slav e_PixClk
PIN_AF12
Stratix II
Figuur 4.15: PLL DVI
Het reconfig_DVI_PixelClk blok bevat een tekstbestand waarbij de PLL met default waarden kan worden ingesteld. Enkel de parameters die zich bevinden in dit tekstbestand kunnen worden aangepast. Tekstbestand zie bijlage 8. De DVI_PixCLK PLL bevat twee interne pixelklokken en twee outputklokken. De eerste klok dient om het design aan te sturen. De tweede interne klok dient als klok om het outputregister up-te-daten. De twee output klokken zijn voor het aansturen van de DVI transmitters. Zowel de master als slave hebben een aparte klok. Hierdoor bestaat de mogelijkheid om er per kanaal een faseverschuiving aan toe te brengen.
53
4.4 RGB blok Het RGB blok is als het ware een kopie van het DVI blok. Toch zijn enkele aanpassingen gebeurd. Het RGB blok zorgt voor een juiste aansturing van de DAC. Dit component zorgt voor de omzetting van de digitale videodata naar een analoog RGB signaal. Doordat een andere hardware component wordt aangestuurd zullen enkele blokken worden aangepast. Figuur 4.16 toont terug een blokschema van het RGB blok. Dit schema zorgt terug om op een overzichtelijk wijze de VHDL blokken te implementeren.
Figuur 4.16: Blokschema RGB
4.4.1
RGB resolution settings
Het RGB resolution setting blok is identiek aan dit van het DVI gedeelte. Het blok bevat de parameters op het beeld default met resolutie 640x480@60Hz in te stellen. Resolution_Settings Clk Start Data[9][7..0] Data[8][7..0] Data[1][3..0],Data[0][7..0] Data[3][3..0],Data[2][7..0] Data[5][3..0],Data[4][7..0] Data[7][3..0],Data[6][7..0] Data[1][3..0],Data[0][7..0] Data[3][3..0],Data[2][7..0] Data[5][3..0],Data[4][7..0] Data[7][3..0],Data[6][7..0]
DVI_ScreenWidth[11..0] clk
oScreenWidth[11..0]
iRS_Set
oHFrontPorch[11..0]
iAddress[7..0]
oHBackPorch[11..0]
i_nWidth_Height[7..0]
oHSWidth[11..0]
iScreenWidth[11..0]
oScreenHeight[11..0]
iHFrontPorch[11..0]
oVFrontPorch[11..0]
iHBackPorch[11..0]
oVBackPorch[11..0]
iHSWidth[11..0] iScreenHeight[11..0]
oVSWidth[11..0]
DVI_HFrontPorch[11..0] DVI_HBackPorch[11..0] DVI_HSWidth[11..0] DVI_ScreenHeight[11..0] DVI_VFrontPorch[11..0] DVI_VBackPorch[11..0] DVI_VSWidth[11..0]
Parameter ScreenWidth HFrontPorch HBackPorch HSWidth ScreenHeight VFrontPorch VBackPorch VSWidth BlockAddr
Value 640 16 80 64 480 2 10 8 B"00000001"
Enable_DVI_GEN
oEN_GEN
iVFrontPorch[11..0] iVBackPorch[11..0] iVSWidth[11..0]
inst20
Figuur 4.17: Resolution_settings RGB
De gebruikelijke interface is identiek en dit blok krijgt een uniek adres. Door dit adres te verzenden naar de generator kan het blok met een andere resolutie worden ingesteld. Dit blok is verbonden met de RGB generator.
4.4.2
RGB generator
De RGB generator en DVI generator zijn identieke kopieën. De generatie van de signalen HSYNC,VSYNC en DE gebeuren op dezelfde manier. Door de beeldparameters in te lezen worden deze signalen op de stijgende flank van de pixelklok aangestuurd. Een klein verschil zit in de generatie van HSYNC en VSYNC. Door de delay die ontstaat door de videodata naar de DAC te sturen en om te zetten naar analoge signalen moeten de synchronisatiesignalen vertraagd worden. 54
De reden hiervan is dat de synchronisatiesignalen rechtstreeks vanuit de FPGA worden gegenereerd en naar de output SMB connector worden gestuurd. De generator bezit terug een selectielijn die laag komt bij het veranderen van de resolutie. Hierdoor worden alle interne counters gereset. RGBGEN RGB_ScreenWidth[11..0]
HS_RGB_GEN
RGB_HFrontPorch[11..0] RGB_HBackPorch[11..0] RGB_HSWidth[11..0]
ScreenWidth[11..0]
HS
HFrontPorch[11..0]
VS
HBackPorch[11..0]
DE
VS_RGB_GEN DE_RGB_GEN
HSWidth[11..0]
RGB_ScreenHeight[11..0]
ScreenHeight[11..0]
RGB_VFrontPorch[11..0]
VFrontPorch[11..0]
RGB_VBackPorch[11..0]
VBackPorch[11..0]
RGB_VSWidth[11..0]
VSWidth[11..0] RGB_PixClk Enable_RGB_GEN
PixClk Enable
inst10
Figuur 4.18: RGB_GEN
4.4.3
RGB patroongeneratie
Zoals in het DVI blok worden op het RGB-kanaal de vier patronen gegenereerd. Er wordt terug gewerkt met een bussysteem waarop de uitgangen worden aangesloten. Er kan slechts één van de vier patronen toegang hebben tot deze bus. De DAC ondersteunt geen single – dual link en single - dual pixel mode deze features worden dan ook verwijderd uit de blokken. De DAC is echter wel een tien bit converter. Dit zorgt ervoor dat de videodata wordt verzonden met een 10 bit per kleur. Dit wordt aangepast aan de bestaande patroonblokken. RGB_Colorbar RGB_PixClk DE_RGB_GEN HS_RGB_GEN VS_RGB_GEN RGB_Colorbar
DE_RGB_Pattern PixClk
oDE
iDE
oHS
iHS
oVS
iVS
o_R[9..0]
Enable RGB_ScreenWidth[11..0] ScreenWidth[11..0]
o_G[9..0]
HS_RGB_Pattern VS_RGB_Pattern R[9..0] G[9..0] B[9..0]
o_B[9..0]
RGB_Gray Bar RGB_PixClk
HS_RGB_GEN
RGB_Gray Bar RGB_ScreenWidth[11..0]
RGB_PixOn_Of f
VS_RGB_GEN RGB_PixOnOf f
DE_RGB_Pattern PixClk
oDE
iDE
oHS
iHS iVS Enable
oDE
iDE
oHS oVS
iVS
o_R[9..0]
Enable
o_G[9..0]
ScreenWidth[11..0]
o_B[9..0]
HS_RGB_Pattern VS_RGB_Pattern R[9..0] G[9..0] B[9..0]
inst21
RGB_PixClk
HS_RGB_GEN
PixClk
iHS
VS_RGB_GEN
inst16
DE_RGB_GEN
DE_RGB_Pattern
DE_RGB_GEN
HS_RGB_Pattern VS_RGB_Pattern
oVS o_R[9..0] o_G[9..0]
R[9..0] G[9..0] B[9..0]
o_B[9..0]
inst22
RGB_Ramp RGB_PixClk DE_RGB_GEN HS_RGB_GEN VS_RGB_GEN RGB_Ramp RGB_ScreenWidth[11..0]
DE_RGB_Pattern PixClk
oDE
iDE
oHS
iHS
oVS
iVS
o_R[9..0]
Enable
o_G[9..0]
ScreenWidth[11..0]
o_B[9..0]
HS_RGB_Pattern VS_RGB_Pattern R[9..0] G[9..0] B[9..0]
inst23
Figuur 4.19: RGB pattern
De uitleg bij de signalen kan worden teruggevonden in paragraaf 4.3.3.
4.4.4
Videobuffer
Alle outputsignalen afkomstig van de patronen worden gezonden naar de videobuffer. Deze videobuffer heeft twee functies. Ten eerste kan nog een kleine delay worden toegevoegd aan de signalen HS en VS. Dit kan met behulp van het kloksignaal DelayPixClk. Ten tweede worden de videosignalen met één pixelklok vertraagd. Dit heeft als doel de videosignalen in een buffer te lezen en deze met een kleinere delay naar de output te verzenden. 55
De delay waarover wordt gesproken is deze tussen de stijgende flank van de pixelklok en de verandering aan de output. Figuur 4.20 toont de videobuffer. VideoBuf f er RGB_PixClk RGB_Delay PixClk
PixClk
Delay PixClk RGB_Half PixClk_90deg Half PixClk_90deg DE_RGB_Pattern iDE HS_RGB_Pattern iHS VS_RGB_Pattern iVS R[9..0] i_ev en_R[9..0] G[9..0] i_ev en_G[9..0] B[9..0] i_ev en_B[9..0]
o_ev en_R[9..0]
OUTPUT
oR[9..0]
o_ev en_G[9..0]
OUTPUT
oG[9..0]
o_ev en_B[9..0]
OUTPUT
oB[9..0]
oDE
OUTPUT
nBlank
oHS
OUTPUT
o_HS
oVS
OUTPUT
o_VS
PIN_R23 PIN_R24 PIN_T25 PIN_Y23 PIN_U25 PIN_W23 PIN_AD25 PIN_U26 PIN_V23 PIN_AD26 PIN_AA23 PIN_V25 PIN_U23 PIN_AC25 PIN_AA12 PIN_V26 PIN_T22 PIN_AC24 PIN_AB12 PIN_W25 PIN_T24 PIN_AB24 PIN_W26 PIN_U24 PIN_AA24 PIN_Y25 PIN_V24 PIN_AB25 PIN_W24 PIN_AB26 PIN_Y24 PIN_AA25 PIN_AA26
inst54
Figuur 4.20: Videobuffer
De signalen oR[9..0], oG[9..0], oB[9..0] en nBlank worden naar de DAC verzonden. Met het signaal nBlank wordt aangegeven wanneer videodata wordt verzonden. Dit stemt overeen met het signaal DE. De signalen o_HS en o_VS worden rechtstreeks naar de SMB connector verzonden.
4.4.5
PLL
Zoals bij het DVI blok een enhanced PLL wordt gebruikt zal deze ook hier worden aangewend. Dit PLL zorgt voor de nodige klokken om de blokken aan te sturen. De PLL wordt terug voorzien van een configuratieblok voorafgegaan door een blok die zorgt voor de juiste instelling van het configuratieblok. Reconf ig_pll
Parameter Value Address B"00000011"
Reconfig_RGB_PixelClk
clk clk
Start
iStart
Data[9][7..0]
iAddress[7..0]
Data[8][0]
Data[6][0] Data[5][0],Data[4][7..0] Data[3][3..0] Data[2][2..0] Data[1][0] Data[0][0]
oreconf ig oread_param owrite_param
ireconf ig
Data[7][0]
reconfig read_param w rite_param data_in[8..0] counter_type[3..0] counter_param[2..0]
odata[8..0]
iread_param
ocounter_ty pe[3..0]
iwrite_param
ocounter_param[2..0]
idata[8..0]
oreset
icounter_ty pe[3..0]
oPLLreset
RGB_Scandataout
icounter_param[2..0]
oEN_GEN
RGB_Scandone
ireset iPLLreset inst19
pll_scandataout pll_scandone
clk
clock reset pll_areset_in inst34
busy
RGB_PixelCLK data_out[8..0] CLK100MHz
pll_scandata pll_scanclk pll_scanread pll_scanw rite
inclk0 areset scanclk scanread scanw rite scandata
inclk0 f requency : 100.000 MHz Operation Mode: Normal PLL Ty pe: Enhanced PLL Clk
Ratio
Ph (dg) DC (%)
c0 487/400
0.00
50.00
c1 487/400
0.00
50.00
c2 487/400 142.44 50.00 c3 487/800 90.00
pll_areset inst56
RGB_PixClk c0 RGB_Delay PixClk c1 c2 OUTPUT DAC_CLK c3 RGB_Half PixClk_90deg scandataout RGB_Scandataout RGB_Scandone scandone Lock_RGB_CLK locked
PIN_AE13
50.00
Stratix II
Figuur 4.21: PLL RGB
De PLL bestaat uit drie interne klokken en één externe outputklok. Een eerste klok is de RGB_PixClk en is de pixelklok die het RGB design aanstuurt. Een tweede klok is de RGB_DelayPixClk deze klok zorgt voor een extra in te stellen delay voor de signalen HSYNC en VSYNC. Tot slot is er nog de RGB_HalfPixClk_90deg die de videobuffer aanstuurt.
56
4.5
IIC blok
Het IIC blok bestaat uit drie ingangen en twee uitgangen. Via de uitbreidingsconnector wordt de IIC bus aangesloten op de SCL- en SDA-lijn van het IIC blok. Door middel van samples wordt via dit blok nagegaan of de master zendt naar slave of omgekeerd. Figuur 4.22 toont hierbij het IIC blok. Param eter Value FILTERWIDTH 6
clk
I2cTrough
PIN_G26 SCL_IN SDA_IN
PIN_L9
Sy Sclk INPUT VCC BIDIR VCC
PIN_E25
Scl_In Sda_In
Scl_Out Sda_Out
OUTPUT
SCL_OUT
BIDIR VCC
SDA_OUT
PIN_K9
inst6
Figuur 4.22: IIC
Op dit blok werden geen simulaties uitgevoerd. Het blok wordt gekopieerd van een bestaand design en ingeplugd in dit design.
4.6
Problemen VHDL design
Zoals in paragraaf 4.4.2 werd besproken zijn de signalen HSYNC en VSYNC vertraagd. Uit metingen volgde dat het analoge beeld teveel naar links was verschoven. Door een meting uit te voeren op het signaal HSYNC en VSYNC werd de vertraging opgemeten. Figuur 4.23 en 4.24 tonen het HYSNC en VSYNC signaal. De meting werd uitgevoerd bij een resolutie van 1280x1024@60Hz. Als eerste werd de theoretische tijd bepaald tussen het videosignaal en HSYNC. Hetzelfde gebeurde tussen het videosignaal en VSYNC. Als eerste wordt de vertraging bepaald tussen het videosignaal en HSYNC. De pixelklok bedraagt 109 MHz. Het aantal pixels tussen het videosignaal en HSYNC is de front porch (zie paragraaf 1.2). Daaruit volgt dat de tijd gelijk is aan: 1 Front porch(µs) = 80 pix. = 734ns 109MHz Uit figuur 4.23 volgt dat ∆x de tijd tussen het videosignaal en HSYNC gelijk is aan 770ns De tweede berekening is de tijd tussen het videosignaal en VSYNC. Daaruit volgt dat de tijd gelijk is aan: Time = ((VFront Porch.ScreenWidth) + (VFront Porch + 1) HFront porch +
HSwidth + back porch ).
1 Pixelklok
Time = ((3.1280) pix + (3 + 1)(80 + 136 + 216) pix).
1 = 51µs 109MHz
Uit figuur 4.24 volgt dat ∆x de tijd tussen het videosignaal en VYSNC gelijk is aan 66.8µs
57
HSYNC VSYNC
Videodata
Videodata
Figuur 4.23: HSYNC
Figuur 4.24: VSYNC
Na controle van het VHDL design werd vastgesteld dat de delay time van HSYNC en VSYNC verkeerd werden ingesteld. Dit werd aangepast zodat het beeld nu correct gecentreerd op het beeldscherm verschijnt.
58
5
Softwareapplicatie [4]
5.1
Inleiding
Het volgende hoofdstuk heeft een toelichting van de softwareapplicatie. Het softwareprogramma zorgt voor het instellen van de beeldparameters van de generator. De hardware-instellingen via de rotary buttons zijn ook door het softwareprogramma instelbaar. Als eerste worden de eisen opgesteld en de GUI verduidelijkt. In de daaropvolgende paragrafen worden de verschillende klassen voorgesteld en nader verklaard. Als laatste wordt nog een toelichting gegeven bij de softwareproblemen tijdens het debuggen van het programma.
5.2
Eisen
In paragraaf 4.1 werd het UART VHDL blok besproken. Daaruit volgde dat bepaalde VHDL blokken kunnen worden ingesteld via het UART blok. Om de juiste data te verzenden naar dit UART blok wordt een VB.NET programma geschreven. Dit programma moet zowel via het USB-protocol als via het RS232-protocol data verzenden. De mogelijkheid moet bestaan om de resolutie van zowel het DVI- als RGB-kanaal afzonderlijk in te stellen. Bij iedere verandering van resolutie moet de bijhorende pixelklok worden berekend. De software zorgt voor de correcte instelling van de pixelklok. Als laatste bestaat de mogelijkheid de verschillende instellingen die beschikbaar zijn via hardware ook d.m.v. software aan te passen.
5.3
Opbouw programma
5.3.1
GUI
Als eerste wordt de GUI van het programma ontwikkeld. Het programma is opgebouwd uit drie tabbladen. Een eerste tabblad DVI verzorgt het instellen van het DVI-kanaal. Het tweede tabblad RGB biedt de mogelijkheid om het RGB-kanaal in te stellen. Het laatste tabblad communication laat de gebruiker toe de gewenste communicatiedrager te selecteren.
Figuur 5.1: GUI RGB/DVI generator (DVI)
59
Via de GUI (zie figuur 5.1) kan de gebruiker de beeldparameters instellen. Dit volgens twee standaarden namelijk de VESA standaard volgens de Generalized Timing Formula (GTF) en de Coordinated Timing Formula (CVT). De parameters dual link en dual pixel mode kunnen via software worden ingesteld. Tot slot bestaat het DVI tabblad uit de selectie van de vier patronen die aanwezig zijn in de generator. Bij het verzenden van de resolutie kan de gebruiker de charge pump en de bandbreedte van de loopfilter instellen. Dit door Enable CP/LF settings aan te vinken.
Figuur 5.2: GUI RGB/DVI generator (RGB)
Het tweede tabblad (zie figuur 5.2) verzorgt de instelling van beeldparameters voor het RGBkanaal terug volgens de twee standaarden. Het analoge beeld omvat twee instellingen. Het beeld kan naar de DVI-A output of RGB-output worden gezonden. Een laatste instelling is de mogelijkheid om de input van het analoge RGB-kanaal door te sturen naar de DVI-A connector. Net zoals bij het DVI-kanaal kan de gebruiker ook hier eventueel de chargepump en de bandbreedte van de loopfilter aanpassen.
Figuur 5.3: GUI RGB/DVI generator (Communication)
Het derde tabblad communication (zie figuur 5.3) bezit de mogelijkheid om de baudrate in te stellen. Als er gebruik wordt gemaakt van de USB-communicatie wordt de FTDI chip automatisch gedetecteerd. Bij gebruik van de seriële communicatie kan de gebruiker de gewenste COM-poort selecteren.
60
5.3.2
Klassendiagram
Het programma is opgebouwd uit vier klassen. Om tot dit klassendiagram te komen wordt vooraf een schema opgesteld. Het is belangrijk dat vooraf wordt nagegaan uit welke delen het programma zal worden opgebouwd. Het opstellen van een klassendiagram toont op een overzichtelijke manier de structuur van het programma. Het uiteindelijke klassendiagram wordt weergegeven in figuur 5.4.
Figuur 5.4: Klassendiagram RGB/DVI generator
Ieder van deze klassen zal in afzonderlijke paragrafen worden behandeld. Een klasse is opgebouwd uit drie delen: fields, properties en methods. De fields zijn de gegevens die deel uitmaken van een klasse. Dit kunnen variabelen, integer, string … zijn. Deze kunnen private of public toegankelijk zijn. De properties van een objectklasse toont de eigenschappen van de klasse. Eigenschappen zijn waarden die opgevraagd of ingesteld kunnen worden. De methods zijn acties die door de objectklasse kunnen worden uitgevoerd. Na het oproepen van een methode wordt een stuk code uitgevoerd. Twee klassen bezitten de methode New. Deze methode wordt constructor genoemd en dient om het object te initialiseren. Deze constructor wordt gebruikt om eigenschappen in te stellen die niet meer kunnen worden gewijzigd. Verdere uitleg volgt in de bespreking van de klasse.
5.3.3
Klasse clsCommunication
De klasse clsCommunication wordt gebruikt om de data te verzenden volgens het gekozen protocol. Deze klasse bestaat uit de properties RS232 en USB. Zo kan nagegaan worden welk protocol door de gebruiker werd gekozen. Figuur 5.5 toont hierbij de klasse clsCommunication en bijhorende module D2XX_Unit_NET.
Figuur 5.5: Klasse clsCommunication
61
De methods ConfigRS232 of ConfigUSB en CloseRS232 of CloseUSB zorgen voor het initialiseren of sluiten van het gekozen protocol. Hieronder volgt een stuk code die zowel bij het initialiseren van de USB als seriële communicatie aanwezig is. Omdat het softwareprogramma de huidige instelling van baudrate niet kent, moet dit worden achterhaald. Als voorbeeld wordt de code van de USB-connectie genomen. 'Constructor Public Sub New() Baudrate(0) = FT_BAUD_9600 Baudrate(1) = FT_BAUD_14400 Baudrate(2) = FT_BAUD_19200 Baudrate(3) = FT_BAUD_38400 Baudrate(4) = FT_BAUD_57600 Baudrate(5) = FT_BAUD_115200 Baudrate(6) = FT_BAUD_230400 Baudrate(7) = FT_BAUD_460800 Baudrate(8) = FT_BAUD_921600 End Sub 'Get the current baudrate setting For i = 0 To 8 FT_Status = FT_SetBaudRate(FT_Handle, Baudrate(i)) Send(15, 0, 0, 0, 0, 0, 0, 0, 0, 15) Sleep(200) 'Get number of bytes waiting to be read FT_Status = FT_GetQueueStatus(FT_Handle, FT_RxQ_Bytes) FT_Status = FT_Read_Bytes(FT_Handle, Byte0(0), FT_RxQ_Bytes, BytesRead) If Byte0(0)=CByte(254) And Byte0(1)=CByte(170) And Byte0(2)=CByte(255) Then Send(0, 0, 0, 0, 0, 0, 0, 0, frmRGBDVIGEN.cmbBaudrateUSB.SelectedIndex, 6) Exit For End If Next
For lus
De klasse clsCommunication bezit een constructor die bij het initialiseren de mogelijke baudrates in een array plaatst. Als de gebruiker de baudrate heeft gekozen en klikt op Open Communication gebeurt het volgende. Een for lus zorgt ervoor dat alle baudrates worden doorlopen. Bij elke instelling van baudrate wordt er data naar de generator gezonden. Deze data wordt gezonden naar het ReadDummy blok meer uitleg hierover zie paragaaf 4.1.4. Het softwareprogramma gaat na of er data werd teruggezonden. Als de data overeenstemt met de opeenvolgende waarden 254, 170 en 255 dan heeft het softwareprogramma de correcte baudrate gevonden. Als laatste wordt via de gevonden baudrate van de generator de gekozen baudrate door de gebruiker verzonden naar de generator. De generator zal na deze stap communiceren met de nieuwe gekozen baudrate. De code is gebaseerd op het feit dat de generator bij een verkeerd ingestelde baudrate nooit de correcte data zal terugzenden. Als de generator echter correct de data terugzendt weet het programma 100% zeker dat de baudrate goed werd ingesteld.
62
Verder bestaat de klasse uit Loadports die het aantal COM-poorten telt die aanwezig zijn. Via de methode Send wordt de data afkomstig van clsSreenSetting, clsPattern of clsClock verzonden volgens het gekozen protocol. Om de data te verzenden via het USB-protocol worden de functies uit de module D2XX_Unit_NET aangeroepen. Deze module is afkomstig van een voorbeeldprogramma en zorgt voor de connectie met het FT2xx.dll bestand. Onderstaande code toont hoe de data wordt verzonden. Hierbij wordt gebruik gemaakt van de functie FT_Write_Bytes die wordt aangeroepen uit de module D2XX_Unit_NET. Public Sub Send(ByVal Byte0 As Byte, ByVal Byte1 As Byte, ByVal Byte2 As Byte, ByVal Byte3 As Byte, ByVal Byte4 As Byte, ByVal Byte5 As Byte, ByVal Byte6 As Byte, ByVal Byte7 As Byte, ByVal Byte8 As Byte, ByVal Byte9 As Byte) Dim BytesWritten As Integer FT_Status = FT_Write_Bytes(FT_Handle, Byte0, 1, BytesWritten) FT_Status = FT_Write_Bytes(FT_Handle, Byte1, 1, BytesWritten) FT_Status = FT_Write_Bytes(FT_Handle, Byte2, 1, BytesWritten) FT_Status = FT_Write_Bytes(FT_Handle, Byte3, 1, BytesWritten) FT_Status = FT_Write_Bytes(FT_Handle, Byte4, 1, BytesWritten) FT_Status = FT_Write_Bytes(FT_Handle, Byte5, 1, BytesWritten) FT_Status = FT_Write_Bytes(FT_Handle, Byte6, 1, BytesWritten) FT_Status = FT_Write_Bytes(FT_Handle, Byte7, 1, BytesWritten) FT_Status = FT_Write_Bytes(FT_Handle, Byte8, 1, BytesWritten) FT_Status = FT_Write_Bytes(FT_Handle, Byte9, 1, BytesWritten) End Sub
5.3.4
Klasse clsScreenSettings
De klasse clsScreenSettings wordt gebruikt om een object aan te maken die de informatie bevat omtrent de beeldinstellingen. Van deze klasse worden twee objecten bij de opstart van het programma aangemaakt. De twee objecten DVIScreenSettings en RGBScreenSettings zijn het gevolg van het afzonderlijk kunnen instellen van het DVI en RGB kanaal. Figuur 5.6 toont de klasse.
Figuur 5.6: Klasse clsScreenSettings
63
De klasse bestaat uit de beeldparameters zoals deze werden aangehaald in paragraaf 1.2. Deze properties worden door de form frmRGBDVIGEN uitgelezen en zichtbaar op het scherm getoond. Zo weet de gebruiker met welke instellingen het scherm van het DVI of RGB-kanaal wordt ingesteld. De klasse bestaat uit drie methodes. Een eerste methode is Dual_Link_PixelMode. Dit zorgt ervoor dat de generator ingesteld kan worden volgens volgende parameters: - single link – single pixel mode; - single link – dual pixel mode; - dual link single pixel mode. Deze methode zorgt ervoor dat de instelling wordt verzonden naar de generator. De volgende methode is ExcelVESA_CVT en ExelVESA_GTF. Met behulp van deze methode wordt het overeenkomstig GTF of CVT Excel-bestand uitgelezen. Door gebruik te maken van deze Excel-bestanden kan op een eenvoudige manier de beeldparameter worden uitgelezen bij een gekozen resolutie. De gebruiker hoeft slecht de resolutie en verversingsfrequentie op te geven. Als meer informatie is gewenst over de Excel-bestanden dan kan punt 1.2 worden geraadpleegd. Onderstaande code toont wat wordt uitgevoerd wanneer het programma wordt geladen. Deze code wordt slechts éénmaal uitgevoerd. De eerste twee coderegels zorgen ervoor dat beide Excel-bestanden worden geopend. De laatste twee coderegels zorgen ervoor dat het Excel-proces op de achtergrond draait. Hiermee wordt bedoeld dat het Excel-bestand kan worden aangesproken maar visueel niet zichtbaar is op het scherm. xlsWB_CVT = xlsapp_CVT.Workbooks.Open(System.Windows.Forms.Application.StartupPath + "\CVT.xls") xlsWB_GTF = xlsapp_GTF.Workbooks.Open(System.Windows.Forms.Application.StartupPath + "\GTF.xls") xlsapp_CVT.Visible() = False xlsapp_GTF.Visible() = False
Op de volgende bladzijde wordt de code getoond waarbij het GTF Excel-bestand wordt aangesproken. Ten eerste worden de beeldparameters schermbreedte (sScreenwidth), schermhoogte (sScreenheight) en verversingsfrequentie (sFrameRate) verzonden. Daarna wordt er geprobeerd de gewenste parameters uit te lezen. Als het Excel-bestand door één of andere reden niet meer aangesproken zou kunnen worden dan wordt dit ook in een messagebox weergegeven.
64
Public Sub ExcelVESA_GTF(ByVal sScreenheight As String, ByVal sScreenwidth As String, ByValsFrameRate As String, ByVal xlsapp As Microsoft.Office.Interop.Excel.Application) xlsapp.Cells.Item(18, 11) = sScreenwidth xlsapp.Cells.Item(19, 11) = sScreenheight xlsapp.Cells.Item(31, 11) = sFrameRate Try ScreenWidth = CType(xlsapp.Cells(18, 11), Range).Value HFrontPorch = CType(xlsapp.Cells(135, 18), Range).Value HSWidth = CType(xlsapp.Cells(132, 18), Range).Value HBackPorch = CType(xlsapp.Cells(138, 18), Range).Value ScreenHeight = CType(xlsapp.Cells(19, 11), Range).Value VFrontPorch = CType(xlsapp.Cells(147, 18), Range).Value VSWidth = CType(xlsapp.Cells(141, 18), Range).Value VBackPorch = CType(xlsapp.Cells(153, 18), Range).Value PixelClock = CType(xlsapp.Cells(75, 18), Range).Value Catch ex As Exception MsgBox("No Excel file is found", MsgBoxStyle.OkOnly, "WARNING!!") End Try End Sub
De volgende code toont wat wordt doorlopen bij het sluiten van het softwareprogramma. Er wordt gezorgd dat beide Excel-bestanden worden gesloten zonder de veranderingen op te slaan. Dit wordt gerealiseerd door de code: xlsWB_CVT.Close(False). Waarbij false aangeeft dat wijzigingen niet moeten worden opgeslaan. xlsWB_CVT.Close(False) xlsapp_CVT.Workbooks.Close() xlsapp_CVT.Quit() xlsWB_GTF.Close(False) xlsapp_GTF.Workbooks.Close() xlsapp_GTF.Quit() GC.Collect()
5.3.5
Klasse clsPattern
De klasse clsPattern bestaat slechts uit twee methodes. Figuur 5.7 toont de klasse.
Figuur 5.7: Klasse clsPattern
De volgende code toont de methode DVIPattern. De gebruiker kan via de GUI aanvinken welk patroon getoond moet worden. De form stuurt de instelling door naar de klasse. Afhankelijk van het gekozen kanaal en patroon zal de data worden verzonden naar de generator. De methode DVIPattern stuurt de juiste data om een bepaald DVI patroon weer te geven. RGBPattern doet net hetzelfde maar voor het RGB kanaal. De data die wordt verzonden via het softwareprogramma moet afgestemd zijn op de generator. Het verkeerd zenden van data zal ervoor zorgen dat de generator niet correct wordt ingesteld. 65
Public Sub DVIPattern(ByVal bColorbar As Boolean, ByVal bRamp As Boolean, ByVal bGraybar As Boolean, ByVal bPixelOnOff As Boolean, ByVal iAddress As Integer, ByVal Com As clsCommunication) If bColorbar = True Then Com.Send(0 + 16, 1, 1, 0, 0, 0, 0, 0, 0, iAddress) ElseIf bRamp = True Then Com.Send(1 + 16, 1, 1, 0, 0, 0, 0, 0, 0, iAddress) ElseIf bPixelOnOff = True Then Com.Send(2 + 16, 1, 1, 0, 0, 0, 0, 0, 0, iAddress) ElseIf bGraybar = True Then Com.Send(3 + 16, 1, 1, 0, 0, 0, 0, 0, 0, iAddress) End If End Sub
5.3.6
Klasse clsClock
De klasse clsClock bevat een aantal parameters waarmee de PLL kan worden ingesteld. Een eerste eigenschap is de bandbreedte van de loopfilter. Deze bandbreedte wordt ingesteld aan de hand van een gekozen weerstand en capaciteit. De mogelijke weerstand- en capaciteitwaarden zijn vastgelegd en worden teruggevonden in de application note van de PLL. Deze waarden worden bij het aanmaken van het object meegegeven. Met de methode FindResCap wordt aan de hand van een gekozen bandbreedte de weerstand en capaciteit bepaald. De methode controlbits zet de bekomen waarde om naar een binaire waarde. De correspondeerde binaire waarde van de gekozen capaciteit en weerstand wordt met behulp van de application note in het programma vast gecodeerd. Net zoals de bandbreedte kan worden ingesteld kan ook de chargepump worden bepaald. Deze waarden zijn terug vast gecodeerd in het programma en er is slechts keuze tussen een aantal waarden. Een volgend punt is het bepalen van de multiplier en divider voor de VCO klok. Na deling met de postscaler wordt de uiteindelijke pixelklok bekomen. Bij het bepalen van de multiplier en divider moeten met een aantal punten worden rekening gehouden. Deze restricties worden uitgelegd aan de hand van een deel code.
66
Private Sub SetPixelClock(ByVal dFrequentie As Double) Dim dClock As Double = 0 Dim C As Integer = 0 Dim M As Integer = 0 Dim N As Integer = 0 dInputClock = 100 'MHz dOutputClock = 0 For C = 1 To 255 ' De waarde c kan variëren van 1 tot 255 zie datasheet stratix II. For M = 1 To 511 ' De waarden n en m kunnen variëren van 1 tot 511 zie datasheet stratix II. For N = 1 To 511 dClock = Convert.ToDouble((100 * (M / N) / C)) If (100 * M / N) > 300 And (100 * M / N) < 1000 Then 'VCO frequentie ligt tussen de 300 en 1000MHz If dFrequentie - dClock < 1 And dFrequentie - dClock > 0 Then If (dFrequentie - dOutputClock) > (dFrequentie - dClock) Then dOutputClock = dClock dC = C dM = M dN = N End If End If End If Next Next Next End Sub
Met de methode SetPixelClock worden de muliplier (M), divider (N) en postscaler (C) van de pixelklok bepaald. Zoals uit de code volgt kunnen M, N en C slechts variëren tussen een bepaalde waarde. Dit is vastgelegd en kan worden teruggevonden in de datasheet van de Stratix II. Net zoals de parameters M, N en C zijn de VCO frequenties ook beperkt. De VCO klok kan slechts variëren tussen de 300 MHz en 1000 MHz. Als laatste wordt de referentieklok meegegeven die 100 MHz bedraagt. Met al deze parameters wordt nu de best passende waarden voor C, M en N bepaald. Dit om een zo goed mogelijke benadering van de pixelklok te bekomen. Nadat de volledige pixelklok is gedefinieerd, wordt de data verzonden naar de generator. Enkel de postscaler moet nog worden omgevormd. Dit gebeurt met de methode Nominalcount zie onderstaande code. Private Sub NominalCount(ByVal dNominalCount As Double) If dNominalCount Mod 2 = 0 Then bHigh_count = CByte(dNominalCount / 2) bLow_count = CByte(dNominalCount / 2) bBypass = 0 Else bHigh_count = CByte((dNominalCount + 1) / 2) bLow_count = CByte(dNominalCount - bHigh_count) bBypass = 1 End If End Sub
Zoals uit vorige code wordt besloten is de postscaler opgesplitst in een bHigh_count byte, bLow_count byte en een bBypass bit. 67
De gekozen formule voor deze parameters is van twee factoren afhankelijk. Dit is het even of oneven zijn van de postscaler en de gewenste duty cycle van 50 %. In bovenstaande code wordt postscaler vervangen door de naam van dNominalCount. De formules om deze waarden te bepalen zijn terug te vinden in de application note van de PLL in de Stratix II. Als de gebruiker een duty cycle wenst verschillend van 50 % dan gelden andere formules.
5.4
Besluit
De softwareapplicatie communiceert met de generator volgens een ingestelde baudrate. Softwarematig kunnen alle instellingen van de generator worden aangepast. Als de gebruiker aanpassingen aanbrengt aan de charge pump of bandbreedte dan bestaat de mogelijkheid dat de PLL zich in de state unlock bevindt. De enige manier om dit op te lossen is een reconfiguratie van het design in de Stratix II. Het is dus aan te raden dat aanpassingen aan de bandbreedte of charge pump enkel worden aangepast als dit nodig is. Tot slot kan de snelheid bij het opvragen van het Excel-bestand worden verhoogd. Dit kan d.m.v. een ODBCverbinding. In deze toepassing speelde de snelheid van het softwareprogramma geen zo’n grote rol.
68
6
Hardware-instelling
Op het board bevinden zich drie hardwarecomponenten waarvan de instellingen kunnen worden gewijzigd. Dit zijn de twee DVI transmitters waarbij het register kan worden ingesteld via het IIC protocol. Het laatste component is de EEPROM van de FTDI chip. Dit EEPROM bezit de instellingen voor de FTDI chip. In het volgende hoofdstuk worden de instellingen van deze componenten verder uitgediept.
6.1
DVI transmitter register
De DVI transmitter is opgebouwd uit een register dat instelbaar is via het IIC protocol. Op het mezzanine board bevinden zich twee DVI transmitters. Afhankelijk van de werking in single of dual link zal de gebruiker één of twee DVI transmitters moeten instellen. Figuur 6.1 toont het register.
Figuur 6.1: Register DVI transmitter
In bijlage 9 bevindt zich de datasheet met uitleg betreffende de instelbare registerwaarden. De adressen 0x8 tot 0xF zijn instelbaar via de IIC bus. Via hardware is een DVI master transmitter en DVI slave transmitter aanwezig. Meer uitleg zie hoofdstuk 2.2.1. De master wordt via het adres 0x70 aangesproken, de slave via het adres 0x72. De master en slave instellen gebeurt hardwarematig. Wanneer een 0V spanning wordt aangelegd aan pin 24 van de DVI transmitter (zie figuur 2.18) wordt die als master ingesteld. Een spanning gelijk aan VCC zal de transmitter instellen als slave. De data wordt verzonden via hardware die aangesloten is op de parallelle poort. Dit PCB board is ontworpen in het bedrijf en wordt gebruikt om de data via de parallelle poort om te zetten naar een IIC-interface. De IIC-bus wordt aangesloten op de uitbreidingsconnector die in verbinding staat met het IIC VHDL blok. 69
Door gebruik te maken van een bestaand VB-programma wordt de data verzonden naar de parallelle poort van de PC. Figuur 6.2 toont de GUI van dit programma.
Figuur 6.2: GUI IICProg
Bovenaan wordt het device adres ingevuld. In dit voorbeeld wordt het adres genomen van de master. In de volgende tekstbox wordt het subadres ingevuld samen met de registerwaarde. Beide worden gescheiden d.m.v. een komma. Indien de data niet correct verzonden wordt verschijnt een error message op het scherm. Door gebruik te maken van dit programma kon de DVI output worden uitgetest. Er wordt dus geen gebruik gemaakt van de microcontroller in de testfase. De DVI-transmitter wordt vervolgens met de volgende waarden ingesteld in single link mode. In de linkerkolom bevindt zich het subadres, in de rechterkolom bevindt zich de registerwaarde (zie tabel 6.1). Tabel 6.1: Registerwaarden DVI transmitter single link
0x0F --> 0x44 0x0F --> 0x4C 0x0E --> 0x34 >= 100MHz of 0x10 < 100MHz 0x0A --> 0x80 0x09 --> 0x80 0x0C --> 0x89 0x0D --> 0x60 0x08 --> 0x33
70
Indien wordt gewerkt in dual link dan moeten beide transmitters worden ingesteld. Tabel 6.2 toont de sequentie en data waarmee de transmitters worden ingesteld. Tabel 6.2: Registerwaarden DVI transmitter dual link
Stap 1 Slave: Adres 0x72 0x0F --> 0x44 0x0F --> 0x4C 0x0E --> 0x10 0x0A --> 0x80 0x09 --> 0x80 0x0C --> 0xC9 0x0D --> 0x70 0x08 --> 0x32
Stap 2 Master: Adres 0x70 0x0F --> 0x44 0x0F --> 0x4C 0x0E --> 0x10 0x0A --> 0x80 0x09 --> 0x80 0x0C --> 0x89 0x0D --> 0x70 0x08 --> 0x32
Stap 3 Slave: Adres 0x72 0x08-->0x33
Stap 4 Master: Adres 0x70 0x08-->0x33
Het is aangewezen om het register bij power-on te resetten. Dit is ook zo bij het veranderen van de resolutie of pixelklok. Deze reset wordt gegeneerd door de FPGA bij elke verandering van de beeldparameters.
6.2 FTDI chip Zoals besproken in hoofdstuk 2.1.1.2 is de FDTI chip voorzien van een EEPROM. Bij iedere power up of reset wordt de EEPROM gescand. Indien deze EEPROM geprogrammeerd is wordt de data uit de EEPROM uitgelezen en wordt de FDTI chip ingesteld. Het programmeren van de EEPROM kan rechtstreeks via de USB-connectie. De EEPROM hoeft dus niet vooraf te worden geprogrammeerd. Door gebruik te maken van het programma MProg 3.5 wordt de EEPROM ingesteld. Dit programma is te downloaden via de site van FTDI chips. Figuur 6.3 toont de GUI van dit programma.
Figuur 6.3: GUI MProg 3.5
71
Via bovenstaande interface kan het type van chip worden gekozen. Eenmaal dit type is vastgelegd worden de instellingen weergegeven met betrekking tot deze chip. Volgende aanpassingen worden aangebracht. Zowel kanaal A als B worden als RS232 UART ingesteld. De USB-power option wordt self powered aangeduid dit werd zo voorzien in hardware. Als driver voor het A-kanaal wordt D2XX Direct aangevinkt. Dit wil zeggen dat gebruik wordt gemaakt van een DLL bestand om te communiceren met de FTDI IC. Indien de kabel wordt ingeplugd dan herkent de PC dit als een USB-connectie. De driver van kanaal B wordt als Virtual COM Port aangevinkt. Indien de DLL niet werkt of zich niet bevindt op de PC kan de USB-communicatie toch worden gebruikt. Bij het inpluggen wordt de USB-poort aanzien als een virtuele COM-poort. De poort is dan ook terug te vinden onder de aanwezige COM poorten op het systeem. De instellingen worden via de USB-aansluiting naar de EEPROM geschreven. Door gebruik te maken van dit programma kan de EEPROM op een eenvoudige manier worden geconfigureerd. De instellingen kunnen op ieder moment worden aangepast door de huidige data te overschrijven. Dit is enkel mogelijk als het vinkje Only Program Blank Devices is uitgevinkt.
72
7
Besluit
Deze masterproef was een leerrijke uitdaging dankzij de grote verscheidenheid van de opdracht. Onderzoek, software en hardware kwamen aan bod. Als eerste werd de configuratie getest van de Stratix II. Op het board bevindt zich een MAX CPLD en flashgeheugen die zorgen voor de configuratie van de FPGA. De mogelijkheid bestaat om de SOF-file van de Stratix II in het flashgeheugen op te slaan. Bij een power up wordt de FPGA door de MAX II geconfigureerd. Vervolgens werd een design geschreven om het RGB- en DVI-kanaal apart in te stellen. Op beide kanalen kan de gebruiker via de rotary buttons één van de vier testpatronen selecteren. Op het DVI-kanaal kunnen via de rotary buttons volgende instellingen worden gemaakt: - single link - single pixel mode; - dual link - single pixel mode; - single link - dual pixel mode. De generator is uitgetest op een resolutie van 1600x1200@60Hz, dit zowel op het RGB- als DVI-kanaal. Een volgend blok dat het VHDL design bezit, is een UART interface zodat via software zowel de resolutie als de hardware-instellingen van de rotary buttons kan worden overschreven. Tot slot werd een softwareapplicatie geschreven om zowel via het USB- als RS232-protocol te communiceren met de generator. Door de aanwezigheid van een Excel-sheet worden de beeldparameters bepaald. Deze Excel-sheet bevat formules gebaseerd op de VESA videostandaard. Deze applicatie zorgt ervoor dat de pixelklok ook kan worden aangepast zonder dat de FPGA opnieuw moet worden geconfigureerd. De communicatie met de generator werd uitgetest en de gebruiker kan het RGB- en DVIkanaal onafhankelijk van elkaar instellen. Deze instellingen zijn de vier patronen alsook de gewenste resolutie. De verdere stappen die nog moeten worden ondernomen zijn het uittesten van de generator in dual link. Het veelvuldig compileren en simuleren van het VHDL design om aan de timing te voldoen, neemt vaak heel wat kostbare tijd in beslag. Hierdoor werd de aanwezige microcontroller niet geprogrammeerd. Als dit geïmplementeerd wordt, kan de generator het board met DVI transmitter automatisch herkennen. Met deze masterproef werd mijn kennis verruimd zowel op het vlak van DVI, software als hardware.
73
Literatuurlijst [1] Keith, J., Video Demystified, 5th edition. LLH Technology Publishing, 2001 [2] VHDL Handbook, HARDI Electronics AB, 2000 [3] Deserranno, J., Repairers training III, Powerpoint, 02/25/2007 [4] Douglas B., M. Parr, Visual Basic.NET voor studenten. Pearson, 2003 [5] DDWG Promoters, Digital Visual Interface. 10/08/2008. http://www.ddwg.org/lib/dvi_10.pdf [6] Altera, FPGA CPLD and ASIC from Altera. 01/08/2008. http://www.altera.com/ [7] Engdahl, T., Video Timing. 26/08/2008. http://www.epanorama.net/documents/vga2rgb/timings.html [8] VESA Coordinated Video Timing Generator. 22/08/2008. http://www.vesa.org/Public/CVT/CVTd6r1.xls [9] Alles over RS485 verbindingen. 11/04/2009. http://www.clock.nl/Alles%20over%20RS485%20verbindingen.pdf [10] The VESA Generalized Timing Formula. 20/08/2008, http://www.vesa.org/Public/GTF/GTF_V1R1.xls [11] A. Devices, ADV7120, 80 MHz Triple 8-Bit Video DAC, 1990. datasheet. [12] National Semiconductor, 74ABT16244, 16-Bit Buffer, 1995. datasheet. [13] Fairchild Semiconductor, 74F245, Octal Bidirectional Transceiver with 3-STATE Outputs, 2005. datasheet. [14] Texax Instruments, MAX232, DUAL EIA-232 DRIVERS/RECEIVERS, 2002. datasheet. [15] Altera, EPC, Configuration Devices for SRAM-Based LUT Devices, 2005. datasheet. [16] Silicon Image, SiI 141B, PanelLink Digital Receiver, 2001. datasheet. [17] Altera, FLEX 6000, Programmable Logic Device Family, 2001. datasheet. [18] Cypress, CY7C199, 32K x 8 Static RAM, 2003. datasheet. [19] Microchip, 93C66A/B, 4K 5.0V Automotive Temperature Microwire Serial EEPROM, 1998. datasheet. [20] A. Devices, ADG719, Low Voltage 4Ω Dual SPST Switches, 1998. datasheet. [21] Linear Technology, LTC1387, Single 5V RS232/RS485Multiprotocol Transceiver, 1997. datasheet. [22] Philips, TDA8777, Triple 10-bit video DAC, 2006. datasheet. [23] Micron, MT48LC2M32B2, Synchronous DRAM, 2001. datasheet. [24] A. Devices, ADG752, CMOS Low Voltage RF/Video SPDT Switch, 1999. datasheet. 74
[25] FTDI Chip, FT2232D, Dual USB UART/FIFO I.C., 2006. datasheet. [26] Altera, MAX II, Device Family Data Sheet, 2007. datasheet. [27] National Semiconductor, LM2675, SIMPLE SWITCHER® Power Converter High Efficiency 1A Step-Down Voltage Regulator, 2005. datasheet. [28] Philips, P89LPC932, 8-bit microcontroller with two-clock core, 2002. datasheet. [29] A. Devices, ADG3304, Bidirectional Logic Level Translator, 2005. datasheet. [30] STMicroelectronics, M24256-B, Serial I²C Bus EEPROM, 2002. datasheet. [31] Spansion, S29GL-N, MirrorBit™ Flash Family, 2006. datasheet. [32] Power-one, YM12S05, DC-DC Converter, 2007. datasheet. [33] Texas Instruments, OPA695, Ultra-Wideband Current-Feedback Operational Amplifier With Disable, 2008. datasheet. [35] Altera, Stratix II Device Handbook, 2007. datasheet. [36] Silicon Image, SiI 160, PanelLink Digital Transmitter, 2000. datasheet. [37] Silicon Image, SiI 163B, PanelLink Receiver, 2005. datasheet. [38] Silicon Image, SiI 1160, PanelLink Transmitter, 2005. datasheet. [39] Silicon Image, SiI 164, PanelLink Transmitter, 2002. datasheet. [40] Silicon Image, SiI 1178, Dual Link PanelLink Transmitter, 2002. datasheet. [41] National Semiconductor, DS90CF384, +3.3V LVDS Receiver 24-Bit Flat Panel Display (FPD) Link—65 MHz, 2000. datasheet.
75
Bijlagen Bijlage 1: Excel-bestand VESA GTF Standaard Bijlage 2: Excel-bestand VESA CVT Standaard Bijlage 3: Schema bestaande RGB/DVI generator Bijlage 4: Application note AN1157 Bijlage 5: Schema RGB/DVI generator Bijlage 6: Schema mezzanine board Bijlage 7: Application note AN367 Bijlage 8: Tekstbestand PLL Bijlage 9: Datasheet SiI1178 Alle bijlagen zijn opgenomen op cd-rom en zijn terug te vinden in de map bijlagen.
76