design of a silicon efficient dsp-based multi-channel codec & filter device

1 downloads 0 Views 4MB Size Report
Codec & Filter Device. Ausgeführt zum Zwecke der Erlangung des akademischen Grades eines Doktors der technischen Wissenschaften unter der Leitung von.
DISSERTATION

An Optimised Architecture for a Σ∆-based Multi-Channel Codec & Filter Device Ausgeführt zum Zwecke der Erlangung des akademischen Grades eines Doktors der technischen Wissenschaften unter der Leitung von

Univ. Prof. Dr. Johann Weinrichter Institut für Nachrichtentechnik und Hochfrequenztechnik Institutsnummer 389 Eingereicht an der Technischen Universität Wien Fakultät für Elektrotechnik von

Wilfried Kausel Schulgasse 80/8 A-1180 Wien Matrikelnummer 7625528 geboren am 5. Juni 1957 in Wien

Wien, am 5.5.1999

KURZFASSUNG

Diese Arbeit befaßt sich mit der Entwicklung eines kostengünstigen Vierkanal-Codecs, der vier herkömmliche Einkanal-Codecs in verschiedensten Applikationen ersetzen kann. Der neue Baustein wurde für einen modernen 0.72 µm CMOS Prozeß mit zwei Metallisierungsebenen konzipiert. Alle internationalen Normen für derartige Bausteine mußten eingehalten und ehrgeizige Ziele, betreffend Chipgröße, Testzeit und Ausbeute, sollten erreicht werden. Die Vorgaben wurden von der Konkurrenzsituation und vom Markt diktiert und waren im Rahmen einer vorangegangenen Machbarkeitsstudie erarbeitet worden. Der Entwurfsvorgang als auch die Entwurfsmethodik eines modernen, gemischt analogen und digitalen CMOS Schaltkreises mit Sigma-Delta-Wandlern und digitaler Signalverarbeitung werden ausführlich behandelt. Darüber hinaus werden Lösungswege aufgezeigt, die neu sind oder die deutliche Verbesserungen bekannter Lösungen darstellen, wie überhaupt das Thema „Optimierung“ sich durch die ganze Arbeit zieht. In Teil 1 werden die Rahmenbedingungen einer derartigen Entwicklung diskutiert, verfügbare Schaltkreise mit ähnlicher Funktion verglichen, die Marktsituation vorgestellt und Entwicklungsziele formuliert. Teil 2 befaßt sich mit den theoretischen Grundlagen von Abtastsystemen, Sigma-DeltaWandlern, Digitalfiltern und Quantisierungsverfahren. Auf möglichst leicht verständliche Weise werden die Funktionsblöcke und ihre Analyseverfahren vorgestellt, die im gegenständlichen Schaltkreis oder bei dessen Entwurf Verwendung fanden oder in Betracht gezogen wurden. Teil 3 stellt mögliche Entwurfsverfahren vor und erläutert die Konzepte, die der Arbeit zugrunde gelegt wurden. Alternative Lösungsvarianten werden verglichen und bewertet. Entwurfs- und Verifikationsmethoden werden vorgestellt und ihre Probleme aufgezeigt. Das verwendete Optimierungsverfahren für die Filterblöcke wird erläutert. Teil 4 beschreibt die Architektur des Schaltkreises, der schließlich erfolgreich in die Fertigung übernommen wurde. Block für Block wird die Funktion anhand von Schaltbildern und Signalflußdiagrammen erläutert und Ergebnisse von Analysen und Simulationen vorgestellt. Es wird eine neue, verbesserte Variante des „dynamic element matching (DWA)“ Verfahrens für Multibit-Sigma-Delta-D/A-Wandler vorgeschlagen, die eine ausgezeichnete Genauigkeit der absoluten Verstärkung bei verhältnismäßig kleinen Einheitskondensatoren besitzt, zusätzlich zu den guten Linearitätseigenschaften bekannter Lösungen. Ein origineller Vorschlag für die Interpretation der Bitsequenz eines Sigma-Delta-Modulators in Verbindung mit einer einfachen, dem „Dithering“ ähnlichen Maßnahme, erlaubt eine Flächeneinsparung einer typischen „Comb“-Dezimatorstufe zweiter Ordnung von über 12%. Zwei eigene Kapitel befassen sich mit dem Aufbau des Signalprozessorkernes, der zu einem Digitalfilter-Automaten geschrumpft ist sowie der Testbarkeit der ganzen Schaltung. Teil 5 widmet sich den vorhandenen Publikationen zum Thema, geht kurz auf deren Inhalt ein und ordnet sie Kategorien zu. Vorgeschlagene Lösungen werden verglichen und mit Anmerkungen versehen. Das Ergebnis dieser Arbeit ist ein überaus kostengünstiger Schaltkreis, der sich derzeit in Produktion befindet. Sowohl Chipgröße ( outfile option -nocnt -bin -hex -vref float -fb float -cap float[8] -matching float

unit

[V] [pF] [pF]

description input file does not contain buffer length header convert from bit-string convert from hexadecimal representation reference voltage ( full scale) feedback capacitor ( fsample Cunit) specify eight capacitor values (Cunit C) DAC element matching (standard deviation)

206

default (off) (off) (on) (1.4125 V) (13.0 pF) (1.0 pF[8]) (0.0)

-t filename -h, -help

time command, write CPU time to file this page

(off)

Plot (plot) This command creates a PX-Graph window to display its input stream interactively. For the window a new child process is created. The graphical window offers a zooming function and allows creation of postscript files for a printer. Options control the shape of the plot, the number of signals, plot and axes labels and other features. If signals is set to a value > 1 then multi column input is assumed. If no single y column is selected then all columns are displayed in one frame. If an x axis column is specified then this column is used to label the x-axes instead of being displayed as a separate trace. If enough signal names are given then signal numbering is suppressed. command syntax: plot -options < infile [> outfile]1 option -signals int -xcol int -ycol int -yoffs float -x0 float -dx float -title string -name string -xunit string -yunit string -lnx -lny -grid -mask int -opts string -all -debug name -t filename -h, -help

unit

description number of signals (columns) in input stream select column for x axis select single column for y axis constant offset for y values x axis offset x axis increment plot title signal name or blank separated signal names x axis label y axis label logarithmic x axis logarithmic y axis draw grid lines select one of several predefined masks other PX-graph options plot all active plots into one frame copy input to output, title & tmpfile = name time command, write CPU time to file this page

default (1) (none) (1) (0.0) (0) (1) (“X-graph”) (“Set”) (“x”) (“y”) (off) (off) (off) (off) (“”) (off) (off) (off)

Table Reshape (table) This command takes a stream containing a single or multi column table at standard input and creates another single or multi column table at standard output. Options to delete a column or to insert a column from an external binary file are provided. The column width of the input stream must be specified using the -width option, the column width of the external table must be specified using the -signals option. Using the -delete option the indicated input column will be deleted from the stream while using the extract option all columns except the indicated one will be deleted. If a column containing x-axes information is specified then this column will also be kept and copied (original sequence is maintained).

1

If debug mode is enabled then input stream is copied to output stream

207

If a signal from an external file is to be inserted and no target position is given then this column will be appended after the last column of the original input stream. It is required that input columns and insertion columns have the same length. command syntax: table -options < infile > outfile option -width int -delete int -extract int -xcol int -fname string -signals int -select int -position int -t filename -h, -help

unit

description number of columns in input stream number of input column to delete number of input column to extract number of input column containing x-axes data name of external binary file number of signals (columns) in external file column of external file to insert into stream output column containing inserted signal time command, write CPU time to file this page

default (1) (0) (0) (0) (“”) (1) (1) (width+1) (off)

Execute Shell (run) This primitive creates a shell command providing proper CPU-time accounting. command syntax: run -options option -sh string -t filename -h, -help

unit

Description shell command time command, write CPU time to file this page

default (“”) (off)

Flag (flag) This primitive creates one or more named flags in order to allow other processes to wait for proper input data. In a typical application channel processing processes will set a flag after the simulation stimulus file for one Codec channel has been prepared properly. The main process containing the actual simulator command will continuously poll all these flags and actually start the simulator as soon as all necessary input files are present. The simulator itself will signal its completion to the channel processing processes as soon as its output data files are ready for analysis. command syntax: flag -options option -n int -o name -t filename -h, -help

unit

Description number of flags name of the flag or group of flags time command, write CPU time to file this page

default (1) (“flag”) (off)

Continue on flag (cont) This primitive continuously polls one or more named flags. It actually waits until other processes are signalling a certain execution state. Waiting for flags puts the process in a suspended state in order not to block the CPU. By using the -n option it is possible to wait for more than one flag at once. Execution goes on as soon as all flags of the group are active. The names of the group members are derived by appending 208

a number to the name specified by the -i option (name0, name1, name2...). This name conversion applies as soon as the -n option is specified even if it is set to one. Once a flag has been sensed active it is reset automatically. A time-out interrupts the process in case of a deadlock. command syntax: cont -options option -n int -timeout float -o name -t filename -h, -help

unit

description number of channels (extends name if specified) time-out in seconds name of the flag or group (*0,*1,*2...) of flags time command, write CPU time to file this page

default (1) (off) (“flag”) (off)

Analyse signal (anal) This block implements the same distortion and gain analysis as dist but does not generate a stimulus nor actually start the simulator. Anal computes signal characteristics for one signal buffer giving textual output only. If the stimulus frequency is set to zero then an idle channel noise analysis is done calculating the unweighted and weighted rms of the band limited noise. command syntax: anal -options < infile option -len int -freq float -sample float -decim int -noisehp float -noisebw float -weight ident -dboffs float -t name -h, -help

unit [samples] [Hz] [Hz] [Hz] [Hz] [dB]

description useful buffer length stimulus frequency sampling rate decimate before FFT (use 3rd order comb) noise band lower bound noise band width spectral weights (psopho or Cmess) zero dB offset trace file this page

default (1024) (1020 Hz) (8.0 kHz) (1) (0.0 Hz) (4000.0 Hz) (none) (0.0 dB) (“gain.tim”)

Time Domain Analysis (tana) Time domain analysis calculates several signal characteristics and prints the results. Output values are in ASCII format separated by a space. They appear in the order shown below. command syntax: tana -options < infile > outfile option -rms -dc -min -max -peak -imin -imax -ipeak -len -nl -db -dboffs float -outfile name -term -t name -h, -help

unit

[dB]

description output root mean square of signal output mean value of signal output minimum of signal output maximum of signal output maximum of abs(signal) output position of first min output position of first max output position of first peak output number of samples print new line character after all output voltages as 20 log10(x) zero dB offset name of output file terminate stream (dont propagate input data) trace file this page

default (off) (off) (off) (off) (off) (off) (off) (off) (off) (off) (off) (0.0 dB) (“stdout”) (off if outfile) (“”)

209

Frequency Domain Analysis (fana) Frequency domain analysis calculates a spectrum and prints several characteristics. Output values are in ASCII format separated by a space. They appear in the order shown below. This block implements the same distortion and gain analysis as dist but does not generate a stimulus nor actually start the simulator. Anal computes signal characteristics for one signal buffer. If the stimulus frequency is set to zero then the stimulus band-pass and band-rejection filter is skipped. command syntax: fana -options < infile > outfile option -len int -freq float -adjust int

unit [samples] [Hz] 0|1|2

-lev float -sample float -decim int -noisehp float -noisebw float -weight ident -dboffs float -rmswb -rmssel -rmsnoi -distwb -distsel -pwrwb -nl -outfile name -term -t name -h, -help

[dBm0] [Hz] [Hz] [Hz] [dB]

description useful buffer length stimulus frequency adjust frequency for 0=any, 1=int, 2=odd int number of periods stimulus level sampling rate decimate before FFT (use 3rd order comb) noise band lower bound noise band width spectral weights (psopho or Cmess) zero dB offset rms wideband (deviation from lev) rms selective (deviation from lev) rms noise distortion wideband distortion selective rms wideband (absolute) print new line character after all name of output file terminate stream (dont propagate input data) trace file this page

default (1024) (1020 Hz) (2) (0 dBm0) (8.0 kHz) (1) (0.0 Hz) (4000.0 Hz) (none) (0.0 dB) (off) (off) (off) (off) (off) (off) (off) (“stdout”) (off if outfile) (“”)

Varying Parameters (vary) This operator repeats a command line varying a parameter between certain limits. Special characters are used as place holders in the command line. A @-sign is replaced by the varying parameter. A #-sign is replaced by the channel number in case of multi-channel operation. A &-sign is replaced by the result of the reference run. The part enclosed by [ ] is executed only once for all channels. Normally it is preceded by the stimulus generator part and succeeded by the analysis part. If in a multi-channel simulation the reference string contains an empty common part (like [ ] ) then no separate run will be made and channel zero will be assigned to the reference simulation. The resulting value will be used as a reference for all channels. Otherwise a reference analysis will be made for each channel separately and these different references will be used for different channels. In the reference string xref will be substituted for all @-signs while &-signs are replaced by zero. If the -xinput option is set then discrete input values are read from a binary stream at stdinp instead of looping between start to stop with increment. command syntax: vary -options > outfile option -xinput -x0 float -x1 float

unit

description read external binary table start value stop value

default (off) (0) (20)

210

-dx float -xref float -chan int -dut string -ref string -debug -t name -h, -help

increment reference value number of channels command line command line to generate a reference debug flag trace file this page

(1) (0) (1) (“”) (“”) (off) (“”)

Total Distortion & Gain over Level (distortion) The distortion and linearity analysis is actually a Perl script implementing the procedure according ITU O.132 using the computational elements described above. For each level in the indicated interval a stimulus sine-wave (default: 1020 Hz, 1024 samples, 8kHz sampling rate, A-law) is generated, its spectrum is calculated and a voice-band filter is applied eliminating all lines outside the interval between 300 Hz and 3400 Hz. The DUT string specifies the interface to the device under test. In this string # is replaced by the channel number and the part enclosed in brackets [ ] is executed only once for all -chan number of channels. A typical DUT specification for a multi-channel simulator of a Codec transmit path is chan 4 -dut “|bin2pcm >adc#.in[vhdlsim -options]pcm2binadc#.in[vhdlsim -options]pcm2bin values.size()) { StringList msg = "input index "; msg

Suggest Documents