6 labozittingen: 1u30 Permanente evaluatie, laatste labozitting evaluatie (+ files afgeven) Cursus: http://telescript.denayer.wenk.be/~kvb/labo_digitale_systemen Wat? Implementatie van een parametrische audio equalizer FPGA: Xilinx XUP Virtex-II Pro User I/O via expansion board
Parametrische Audio Equalizer: 3 parameters: K: Versterking/verzwakkingsfactor Alpha: Bandbreedte Beta: Frequentie Demo! Parametrische Audio Equalizer: Hoe implementeren? VHDL schrijven Ontwerpen via Xilinx System Generator = subset van Simulink = grafische omgeving om snel DSP applicaties te ontwikkelen
Xilinx System Generator: Maak via GUI hardware designs Blokken slepen uit bibliotheken Automatische VHDL code generatie Bibliotheken bestaan uit: Eenvoudige basisblokken: logische poorten, registers, Basisblokken: tellers, FSMs, schuifregisters, Complexe blokken: geheugeninterfaces, FFTs, Ontwerpmethodologie: Problemen? Start = algoritme Simuleer en ontwerp in Simulink Converteer naar Xilinx System Generator blockset (manueel) 2 grote problemen: floating point fixed point conversie (bitbreedtes?) latency in hardware (bv. multipliers) oplossingen zie volgende labozittingen
Simulink: Mini-tutorial Algoritme: Begin met 1ste orde: 2 parameters (K en alpha) All pass:
Algoritme: Begin met 1ste orde: 2 parameters (K en alpha) All pass:
Combineer beide:
2 parameters: K en alpha Opdracht 1: ontwerp de 1ste orde allpass filter in Simulink Input = random source Output = spectrum analyzer Alpha = slider gain
Opdracht 2: integreer de 1ste orde allpass filter in het HP en LP netwerk = shelving equalizer Opdracht 3: Bij K > 0.5: de TF gaat de frequentie die we willen onderdrukken doorlaten (A = 1) en de overige frequenties versterken Herbekijk het LP & HP framework en zoek een oplossing zodat bij K > 0.5 het schema effectief de frequentie onderdrukt, en de overige doorlaat (met A = 1) Parametric equalizer: 3 parameters All-pass = 2de orde (2 parameters)
All-pass 2de orde: Totale framework blijft hetzelfde: 2de orde met juiste K!
Pole/zero plot: Opdracht 4: Ontwerp de 2de orde all-pass filter in Simulink Opdracht 5: Integreer de 2de orde all-pass in het LP & HP framework (met de juiste K implementatie!)
Xilinx System Generator tutorial Elk design: steeds Xilinx System Generator token includen Conversie tussen floating-point en fixed-point gebeurd via Gateway-blocks Fixed-point: format is steeds van de vorm Fix_16_13
Oefeningen: Let op! In HW hebben multipliers latency van aantal clockcycles nodig! Ga in de bibliotheek opzoek naar blokken die hiervoor kunnen gebruikt worden Tip: samplerate
Opdracht 6: Converteer de 1ste orde all-pass filter naar Xilinx System Generator blokken Opdracht 7: Converteer het 1ste orde LP & HP framework naar Xilinx System Generator blokken Opdracht 8: Converteer de 2de orde all-pass filter naar Xilinx System Generator blokken Opdracht 9: Converteer het 2de orde LP & HP framework naar Xilinx System Generator blokken Equalizer Implementation
Audio Equalizer Implementation Step 1: working simulation (correct upsample see further) Remember: Input/output: fixed [16, 14] Multipliers have latency Audio Equalizer Implementation Problems when implementing design: User I/O for parameters? Design clockspeed? Interface to Audio Codec?
Audio Equalizer Implementation User I/O for parameters? Implemented in Xilinx System Generator: K, Alpha and Beta from ROM (depth = 16) ROM address generated from counter ROM initial value vector defines parameters K: 0.05 0.95 Alpha: 0.4 0.95 Beta: -0.95-0.6 Counter enabled by user push buttons Need Up/Down FSM for debouncing and pulse detection Gateway in is boolean Audio Equalizer Implementation Interfacing: K_value Alpha_value Beta_value Alpha_up Alpha_down K_up K_down Beta_up Beta_down
Audio Equalizer Implementation Design clockspeed? Audio Codec is clocked @ 24 MHz by DCM Audio Coded sends samples @ 48 khz Set Tsysclk=1/24000000; in Matlab workspace or in model properties Set FPGA clock period at 1000/24 ns Set Simulink system period @ Tsysclk Set gateway_in sample rate @ 500*Tsysclk Design runs @ upsample_rate X 48 khz Designclock is derived from Fsysclk Fsysclk/(Upsample_rate x 48 khz) must be integer 500/upsample_rate must be integer Upsample can only be 1/2/4/5/10/25/50/ Audio Equalizer Implementation Interface to Audio Codec? Given by Xilinx XUP Virtex-2 Pro Development System AC97 Controller Initializes CODEC And handles data Transfer & timing AC97 CODEC sdata_tx sdata_rx sync AC97_clk (12.288 MHz) AC97reset_n AC97 CNTRL clk_in XC2VP30 (xupv2pwrapper.ngc) PCM_record_left PCM_record_right new_sample PCM_playback_left PCM_playback_right HDL code generated from System Generator model YOUR_DESIGN.vhd audio_left_in audio_right_in CE audio_left_out audio_right_out CLK 100 MHz Clock DCM 48 KHz rate 24 MHz System Clock
Audio Equalizer Implementation Next steps? Step 1: build the System Generator user io model Step 2: generate RTL from Xilinx ISE Project is created automatically Step 3: Open ISE project and add the following files: Insert Audio Codec Insert equalizer_top.vhd Insert ClockGen.xaw Insert equalizer.ucf Audio Equalizer Implementation Next steps? Step 4: you have to: Portmap your audio_equalizer Portmap user_io Write VHDL binary to 7-seg decoder for parameters Complete UCF file Generate bitstream and test! All files found on: http://telescript.denayer.wenk.be/~kvb/labo_digitale_systemen/implementationfiles