Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Cursus VHDL deel 2:
Maken van een MP3 player
Jan Genoe
In dit uitgewerkt voorbeeld schetsen we de werkwijze die moet gevolgd worden om uitgaande van een probleemstelling tot een concrete en werkende oplossing te komen. Alle details in verband met dit voorbeeld kunnen gevonden worden op: Xilinx.com/products/xaw/index.htm
Versie: woensdag 10 mei 2000
1
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Achtergrond van de MP3 player • MPEG laag 3 (MP3) is een manier om audio te comprimeren tot ongeveer 1/11de van de originele grote zonder kwaliteitsverlies. – een audio CD (650 Mbyte) wordt dus ongeveer 55 Mbyte
• 32 Mbytes EEPROM FLASH geheugen is tegenwoordig aan een redelijke prijs in de handel te krijgen • ICs die MP3 data "on the flow" omzetten naar de originele digitale data zijn ook goedkoop te verkrijgen. – bv MAS3507D van Micronas intermetall
• Een draagbare MP3 player is dus goedkoop te produceren en bevat geen bewegende componenten. Hij is dus enorm schokbestendig. – ideaal voor muziek te beluisteren gedurende eender welke activiteit
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
2
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Werking van de MP3 player
• Op een PC worden de MP3 data aangemaakt (of gedownload) en via de parallelle poort weggeschreven in het flash geheugen – er is soft genoeg om van muziek MP3 files te maken
• Bij het afspelen worden de liedjes vanuit het flash geheugen doorgegeven aan de MP3 decoder IC , die de gedecodeerde data doorgeeft aan de DA convertor • De DA convertor IC stuurt onmiddellijk de 2 speakers in de hoofdtelefoon aan. • Een CPLD moet dit alles controleren.
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
3
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Blokdiagram • Bouwblokken – – – – – – – – –
CPLD MP3 Decoder IC Flash geheugen LCD scherm drukknoppen DA convertor batterij 2 klokken connector Parallelle poort – JTAG connector
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
4
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
User interface
• 8 druknoppen – mute ontbreekt in de tekening
• 5 LCD symbolen • track-nummer display – seven-segment
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
5
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Flash geheugen
• 32 MBytes voor de opslag van de favoriete songs (bijna 60 minuten) • 2 Mbytes voor de start adressen van alle songs plus het eindadres.
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
6
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Print voorbeeld • Op het onderstaande demo-bordje wordt het besproken ontwerp getoond.
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
7
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Verschillende bouwblokken in de CPLD • • • • • •
Hoofd controle logica User interface controle I2C interface (naar de DA) Power management Parallelle poort interface Flash geheugen interface
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
8
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Werking van de play druktoets
• Geeft power aan de DAC • Toont het play symbool • Leest continu data van het flash geheugen en geeft deze door aan de decoder • Stopt als (stop, fwd, rev) geduwd wordt of als aan het einde van de data gekomen is • Wanneer we verder zijn dan een nieuw startadres, wordt het tracknummer ge-update.
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
9
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Werking van de stop druktoets
• Zet de DA convertor in een low power mode • laad het startadres van de huidige song in het adresgeheugen • ga over naar de idle toestand
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
10
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Werking van de RWD druktoets
• Zet de DA convertor in een low power mode • Verlaag het track nummer met 1 • laad het startadres van deze song in het adresgeheugen • ga terug naar de idle toestand indien we komen van de idle toestand en naar de play toestand indien we komen van de play toestand
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
11
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Werking van de FWD druktoets
• Zet de DA convertor in een low power mode • Verhoog het track nummer met 1 • laad het startadres van deze song in het adresgeheugen • ga terug naar de idle toestand indien we komen van de idle toestand en naar de play toestand indien we komen van de play toestand
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
12
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Bouwblok 1:User interface controle
• Ook hier gaan we opsplitsen in bouwblokken. – – – –
play modus LCD display sound control on/off
VHDL: MP3player
Jan Genoe KHLim
De basistruc is het geheel opsplitsen in bouwblokken die voldoende eenvoudig zijn. Van elk van de bouwblokken stellen we nu een FSM op.
Versie: woensdag 10 mei 2000
13
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Play modus FSM
VHDL: MP3player
Jan Genoe KHLim
Dit diagram is wel een beetje bedrieglijk, omdat voor vooruit en achteruitspoelen een enkele toestand is weergegeven terwijl het eigenlijk 2 verschillende toestanden zijn. We hebben hier dus 5 toestanden, waarvoor we dan 3 bits gaan nodig hebben als toestandsencodering.
Versie: woensdag 10 mei 2000
14
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Geluid controle logica
VHDL: MP3player
Jan Genoe KHLim
De uitgang van het volume control blokje is het volume level (vol_lvl[5:0]). Dit Volume level signaal bestaat uit 6 bits. Er is ook een volume changed (vol_adj) signaal dat aangeeft dat het volume veranderd is en dat dat dan ook moet doorgegeven worden aan de DA omzetter. Mute control is een eenvoudige T-FF. Wanneer het mute signaal toekomt klapt die om. Mute changed (mute_chg) geeft aan dat Mute van toestand veranderd is.
Versie: woensdag 10 mei 2000
15
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
sound controle FSM
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
16
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
LCD controle
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
17
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Bouwblok 2: Power-up reset controle logica
pup=1
pup=1
pup=1
VHDL: MP3player
rst 1
wsen 1
1
1
1
1
0
1
1
0
pup=0
pup=0
Jan Genoe KHLim
Na het opstarten moet de gehele controller gereset worden. Hiervoor wachten we eerst op het power-up signaal van de MP3 decoder (pup) en dan na twee wachttoestanden (om zeker te zijn dat de power wel stabiel is) wordt het reset weggenomen van alle bouwblokken in de CPLD. Bij een power down door de gebruiker (on_off) (of een verlies van power door de decoder) wordt eerst naar alle blokken een reset gestuurd en dan naar de DC/DC omzetter een signaal (wsen) om de spanning weg te nemen van de MP3 decoder.
Versie: woensdag 10 mei 2000
18
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Bouwblok 3: Inlezen van MP3 data via de parallelle poort • Het doel is een eenvoudige implementatie te bekomen • Alle MP3 liedjes worden als een geheel weggeschreven in het Flash geheugen – Het schrijven begint steeds vanaf het eerste liedje tot het laatste liedje (de vorige liedjes worden gewist)
• het wegschrijven onderbreekt alle andere bewerkingen – geen dubbele toegang van het flash geheugen nodig
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
19
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Originele Centronics printer kabel
• 18 signalen (36 contactpinnen): – – – –
elke signaallijn heeft een terugvoer verbinding nodig deze terugvoerverbinding werd rond elke lijn gevlochten (coax) Hierdoor werden op de connector 36 contactpinnen uitgevoerd Zo kon ook op PCB deze terugvoer met een zo klein mogelijke lus uitgevoerd worden.
• IBM bespaarde destijds door aan de PC kant een connector te nemen van maar 25 pinnen. – Hiervoor werden een aantal massaleidingen samen genomen
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
20
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Parallelle poort interface (PC kant)
• 25 pins connector – – – – – – – – – – –
8 data lijnen (2-9) [inout] 8 grond lijnen (18-25) Strobe signaal (1) [inout] Acknowledge (10) [in] Busy(11) [in] Paper end(12) [in] Select in(13) [in] Autofeed(14) [inout] Error(15) [in] Initialize(16) [inout] Select (17) [inout]
• Deze signalen kunnen door de PC flexibel aangesproken worden
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
21
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Bestandsuitwisseling tussen 2 PCs
• 2 PCs kunnen bestanden uitwisselen via de parallelle poort • Hiertoe is een gekruiste kabel nodig – – – – –
datalijnen onderling verbonden massalijnen verbonden stobe (1) en acknowledge (10) kruiselings verbonden Select (17) en Select in (13) kruiselings verbonden Initialize (16) en Busy (11) kruiselings verbonden
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
22
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Parallelle poort signalen pin
PC definitie
MP3player richting definitie
actief
Beschrijving
1
nStrobe
nStrobe
PC-MP3 Player
Low
Strobe. Dit signaal geeft aan dat de data op de data pins valid is.
2-9
Data[0:7]
Data[0:7]
PC-MP3 Player
N/A
MP3 Data.
10
nAck
nAck
MP3 Player-PC
Low
Acknowledge. Dit signaal geeft aan dat de MP3 speler de gezonden data ontvangen heeft en klaar is voor nieuwe data.
11
Busy
Dnld_Rdy
MP3 Player-PC
High
MP3 Player is klaar om een download te beginnen.
12
PError
Last_Byte
PC-MP3 Player
High
Deze bit wordt actief wanneer de doorgestuurde byte de laatste Byte van de MP3 Data is.
13
select
niet gebruikt
14
nAutoFd
Song_st
PC-MP3 Player
High
Deze bit is actief wanneer de MP3data een nieuwe song begint. De MP3 player gebruikt deze bit om het huidige adres van de song flash op te slagen in het starting adres flash geheugen.
15
nFault
niet gebruikt
16
nInit
Downld
PC-MP3 Player
High
PC is klaar om een download te beginnen. Deze start wanneer de MP3 Player het DLD_RDY signaal actief maakt.
17
nSelectln
niet gebruikt
18-25
GND
GND
N/A
N/A
Signal Ground.
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
23
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Parallelle poort interface (1)
• Als de PC klaar is om MP3-data te schrijven wordt het DownLd (16) signaal gegeven • De MP3 player antwoordt met dnld_rdy (11) als hij klaar is voor een download • Als nstrobe (1) laag wordt gezet door de PC, wordt een byte ingelezen • De MP3 player wacht tot deze byte goed in het flash geheugen geschreven is (next) • Hierna antwoordt de MP3player met een acknowledgement: nAck (10) • Als nstrobe (1) terug hoog wordt, wordt er gewacht op de volgende byte • Als DownLd (16) laag wordt, wordt de download beëindigd
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
24
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Parallelle poort interface diagram
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
25
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Parallelle poort interface (2)
• Als het Song_st (14) signaal hoog wordt – wordt de huidige waarde van de adres teller in het start adres flash geheugen opgeslagen. – wordt de songteller met 1 verhoogt.
• Als het Last_Byte (12) signaal hoog wordt – wordt de huidige waarde van de adres teller in het start adres flash geheugen opgeslagen.
• In deze gevallen moet er gewacht worden tot het start adres geheugen geschreven is
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
26
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Download controle state machine
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
27
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Bouwblok 4: I²C bus • Doel: doorgeven van settings (geen data) aan de MP3 decoder IC en aan de DA-convertor IC • Deze settings moeten doorgegeven worden bij startup en moeten gedurende de werking kunnen aangepast worden – Bv volume
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
28
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
I²C bus situering • IC bevatten een steeds toenemende complexiteit en steeds toenemende mogelijkheden • Om die mogelijkheden ten volle te benutten moeten de ICs de juiste parameters krijgen en moeten ICs onderling gegevens kunnen uitwisselen • De Inter IC bus (I²C bus) biedt hiervoor een eenvoudige oplossing: slechts 2 verbindingslijnen op PCB • Deze bus werd door Philips in het begin van de jaren 80 geïntroduceerd en wordt nog steeds hiervoor gebruikt • Zeer veel IC beschikken over deze bus als communicatiekanaal met andere ICs
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
29
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
I2C bus: voorbeeld
• n+1 ICs wisselen met elkaar gegevens uit aan de hand van 2 baantjes op de PCB
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
30
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
I²C bus specificaties
• Snelheid: – standaard: 100 kbit/s – Fast mode: 400 kbit/s – High speed: 3.4 Mbit/s
• Maximale bus capaciteit – 400 pF » Dit bepaalt het maximaal aantal devices en de maximale lengte van de lijn op PCB
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
31
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Basis I²C hardware
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
32
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Basis I²C hardware • Slechts 2 lijnen worden gebruikt: Klok en data • De lijnen zijn op PCB aan de voeding verbonden via een Pull-up weerstand • Elke driver kan deze lijn naar 0 trekken (nMOS transistor) • Elke ontvanger leest de lijn.
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
33
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
I²C bus timing diagram • Alle overgangen op de data lijn gebeuren wanneer de klok laag is. • Als de klok hoog is mag de datalijn uitgelezen worden
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
34
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Start en stop conditie • Als niemand de klok en data aanstuurt, zijn beide lijnen hoog. • Een hoog naar laag transitie op de data lijn als de klok hoog is, is een unieke start conditie • Een laag naar hoog transitie op de data lijn als de klok hoog is, is een unieke stop conditie
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
35
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Acknowledgement van de ontvanger
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
36
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Volledige data transfer • Eerst het adres van de bestemmeling, met read/write • Vervolgens de door te sturen data
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
37
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
FSM van de I²C controller • Vanuit het timing diagram kunnen we onmiddellijk het FSM diagram tekenen.
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
38
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
I²C blok controller diagram
VHDL: MP3player
Jan Genoe KHLim
Dit is een algemeen stuk vhdl code (i2c_master.vhd ). Dit kan je gebruiken om eender welke opeenvolging van bytes op de I²C bus te plaatsen. Het blok op een hoger niveau gaat dan bepalen wat er juist op de bus zal geplaatst worden. Daarom bespreken we eerst wat er moet gezonden worden. Elke keer dat er een byte verzonden is bekomen we het EOT signaal.
Versie: woensdag 10 mei 2000
39
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Door te zenden bytes via de I²C bus • We adresseren alleen de DAC via de I²C bus • Hiervoor moeten we een 8-bit woord of een 16 bit woord kunnen doorsturen • Het device adres is altijd hetzelfde, $9A • Het subadres varieert met de gevraagde functie
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
40
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Mogelijke functies voor de DAC
• Sample rate controle (SR_REG) • volume controle (AVOL) • Globale configuratie (GCFG)
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
41
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Sample rate controle
• In deze implementatie kiezen we steeds 00011111 VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
42
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Volume controle
• We sturen een gelijk volume naar beide uitgangen • Bij mute zetten we tijdelijk het volume op 000000 VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
43
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Globale configuratie
• Ofwel normal 00000100 • Ofwel low–power 00100100
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
44
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Algemene structuur MPEG controle (mpeg_chip_ctrl.vhd )
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
45
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Commando's voor de MPEG controle (mpeg_chip_ctrl.vhd )
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
46
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Interface met het flash geheugen (flash_cntr.vhd )
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
47
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Start adres flash geheugen
• Dit geheugen is maar 16 bits breed, en de nodige start adressen zijn 25 bits breed. • Het start adres moet dus in 2 stappen uitgelezen en weggeschreven worden – track[0]='1': minst beduidend deel – track[0]='0': meest beduidend deel
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
48
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Song adres counter (cnt_25.vhd) • 25 bit breed op 32 MB te kunnen uitlezen • telt op de stijgende klok als cnt_up hoog is • load gebeurt in 2 stappen (2 laad controle signalen) – meest significante bits (cnt_ld_u) – minst significante bits (cnt_ld_l) – 16 bits data om te laden (data)
• Een terminal count geeft aan dat alle 7 meest beduidende bits '1', om op tijd te weten dat het geheugen bijna vol is. • De laagste 18 bits kunnen op '1' gezet worden (preset_lower). – Het flash (EEPROM) geheugen wordt gewist in blokken van 128K – als er dan 1 bij opgeteld wordt zitten we in het volgende blok van 128K
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
49
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Het wegschrijven van de songs (download interface) • Eerst wordt de gehele inhoud van het flash geheugen gewist (parallelle poort moet wachten) • Dan worden alle binnenkomende bytes weggeschreven
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
50
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Detectie van een match • Eerst de meest beduidende bits vergelijken – de trackteller al met 1 verhogen
• daarna de minst beduidende bits vergelijken – als de hoogst beduidende een 1 is: alles gedaan
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
51
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Controle van de decoder IC (play_logic_state_machine.vhd )
• controleert de MP3 decoder • in van decoder – eod: end of data – rtr: data ontvangen
• out naar decoder – pr : er is nieuwe data
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
52
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Globaal overzicht controle
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
53
Jan Genoe
VHDL: Maken van een MP3 player
KHLim
Globale controle
VHDL: MP3player
Versie: woensdag 10 mei 2000
Jan Genoe KHLim
54