WO1996015484A9 - Monolithic pc audio circuit - Google Patents

Monolithic pc audio circuit

Info

Publication number
WO1996015484A9
WO1996015484A9 PCT/US1995/014254 US9514254W WO9615484A9 WO 1996015484 A9 WO1996015484 A9 WO 1996015484A9 US 9514254 W US9514254 W US 9514254W WO 9615484 A9 WO9615484 A9 WO 9615484A9
Authority
WO
WIPO (PCT)
Prior art keywords
circuit
digital
signal
output
data
Prior art date
Application number
PCT/US1995/014254
Other languages
French (fr)
Other versions
WO1996015484A2 (en
WO1996015484A3 (en
Filing date
Publication date
Priority claimed from US08/333,467 external-priority patent/US5589830A/en
Priority claimed from US08/334,462 external-priority patent/US6047073A/en
Priority claimed from US08/333,460 external-priority patent/US5585802A/en
Priority claimed from US08/333,536 external-priority patent/US5659466A/en
Priority claimed from US08/333,386 external-priority patent/US5598158A/en
Priority claimed from US08/333,564 external-priority patent/US5668338A/en
Priority claimed from US08/510,139 external-priority patent/US5581253A/en
Priority to EP95942395A priority Critical patent/EP0789868A2/en
Priority to JP8516131A priority patent/JPH10509544A/en
Application filed filed Critical
Publication of WO1996015484A2 publication Critical patent/WO1996015484A2/en
Publication of WO1996015484A9 publication Critical patent/WO1996015484A9/en
Publication of WO1996015484A3 publication Critical patent/WO1996015484A3/en

Links

Definitions

  • This invention relates generally to computer controlled audio systems and more particularly to an audio circuit for use with system boards and add-in cards for desktop and portable computers.
  • the preferred embodiment of the present invention is particularly designed to be compatible with systems built primarily to run the MS-DOS, Windows, UNIX, and OS/2 operating systems, otherwise generally referred to IBM compatibles.
  • the present invention includes a stereo audio CODEC and a digital wavetable audio synthesizer.
  • personal computers are manufactured with only limited audio capabilities. These limited capabilities provide monophonic tone generation to provide audible signals to the user concerning various simple functions, such as alarms or other user alert signals. Any voice capability is typically not high quality.
  • the typical personal computer system has no capability of providing stereo, high-quality audio which is a desired enhancement for multimedia and video game applications, nor do they have built-in capability to generate or synthesize music or other complex sounds.
  • Typical sound cards also provide MIDI interfaces and game ports to accept inputs from MIDI instruments such as keyboard and joysticks for games.
  • a number of add-on products have been developed.
  • One such line of products is referred to in the industry as a sound board.
  • These sound boards are circuit boards carrying a number of integrated circuits and other associated circuitry which the user installs in expansion slots provided by the computer manufacturer.
  • the expansion slots provide an ISA interface to the system bus thereby enabling the host processor to access sound generation and control functions on the board under the control of application software.
  • These boards include a monolithic FM synthesizer circuit for generating sound from data provided from system memory.
  • Such boards also include a digital signal processing integrated circuit that carries out digital-to-analog and analog-to-digital conversions, processes commands from the host CPU under control of application software, generates control signals for the other circuits, processes MIDI data in and out, and provides data decompression on stored data.
  • Other integrated or discrete circuits are necessary to interface with analog input or output ports, as well as separate circuits for system bus interface, among others.
  • the mixer allowed mixing sounds from the microphone, line-in, CD-input and the digital sound, and CD audio play in the background.
  • the synthesizer function was limited in the number of voices that could be processed and was FM-based, as distinguished from more advanced wave table synthesizers. Such systems had limited mixing, panning and control functions for providing effects and did not provide individual voice effects.
  • the latest Sound Blaster product designated Sound Blaster 16 ASP, provided 16-bit playback and record sampling and 44.1 KHz stereo sampling rate.
  • This latest version was a multiple chip embodiment which included a wavetable synthesizer circuit or chip, a dedicated processor circuit or chip, a separate bus interface chip, separate A/D and D/C circuits, an analog amplifier and other associated circuitry on a expansion board. While this system offered enhanced programmability, higher sampling rates and a larger sample size, it was nevertheless a multiple chip embodiment, suitable primarily for expansion slot use and was a high power consumer.
  • This latest version offered no local memory, was not Plug-n-Play compatible and included a dedicated processor to process application and synthesis instructions.
  • the wavetable option required a separate daughter board which included, among other things, a four megabyte ROM for storing wavetable data.
  • Ultrasound Another prior art system was offered by Advanced Gravis and Forte under the name Ultrasound.
  • This system was another expansion slot sound board embodiment which incorporated into one chip the synthesizer, MIDI and game interfaces, DMA control and Adlib Sound Blaster compatibility logic.
  • the Ultrasound card included on-board DRAM (1 megabyte) for wavetable data; an address decoding chip; separate analog circuitry for interfacing with analog inputs and outputs; a separate programmable ISA bus interface chip; an interrupt PAL chip; and a separate digital-to-analog/analog-to-digital converter chip.
  • each of the prior systems had one or more limitations on compatibility with various industry standard software and/or hardware. None of the prior systems provided optional Plug-n-Play compatibility. The prior art systems either utilized the host CPU extensively for synthesizer functions, or provided a dedicated synthesizer processor thereby either increasing cost or slowing down the operation by requiring extensive host CPU overhead.
  • the system of the present invention solves each of these problems in a number of unique and efficient ways.
  • the system of the present invention also provides enhanced capabilities heretofore unavailable.
  • the present invention provides a monolithic PC audio integrated circuit which includes a system bus interface which is AT ISA-compatible, a system control module providing Plug-n-Play compatibility, system control registers, system control logic and interrupt generation and compatibility functions for existing PC audio software.
  • the system of the present invention further includes a coding and decoding module (CODEC) for providing analog-to-digital and digital-to-analog conversion, data compression, and analog mixing and muxing of audio signals.
  • CDEC coding and decoding module
  • a digital wavetable audio synthesizer module and a MIDI and game port module are also provided.
  • the circuit of the present invention further provides a local memory module which enables the circuit to interface with external DRAM, ROM and serial EEPROM for Plug-n-Play compatibility.
  • the circuit of the present invention further includes noise reduction attributes, a facility for external address decoding, buffered input and output capability, as well as other features which conserve on-chip resources.
  • Fig. 1 is a schematic architectural overview of the basic modules of the circuit C;
  • Fig. 2 is a schematic illustration of the physical layout of circuit C
  • Fig. 3 is a table summarizing pin assignments for the circuit C
  • Fig. 4 is an alternative layout diagram for the circuit C; noise and a primary clock signal employed by the circuit C;
  • Fig. 5 is a table summarizing pin assignments for the circuit C grouped by module
  • Fig. 6 is a schematic illustration of a typical full-featured implementation of a PC audio circuit C with associated circuits, buses and interconnections;
  • Fig. 7 is table summarizing pin assignments and functions that relate to local memory control
  • Figs. 8, 9 and 10 comprise a table of register mnemonics with indexes and module assignments where appropriate;
  • Fig. 11 is a schematic diagram illustrating an example of multiplexing circuitry
  • Fig. 12 is a block diagram schematic illustration of the system control module of the circuit C;
  • Fig. 13 is a schematic block diagram of the circuit C including modular interfaces to the register data bus;
  • Fig. 14 is a schematic diagram of implementation detailed for the register data bus
  • Fig. 14a is a schematic diagram of a portion of the ISA bus interface circuitry
  • Fig. 15 is a timing diagram illustrating worse case ISA-bus timing for the circuit C
  • Fig. 16 is a timing diagram relating to buffered input and outputs for the circuit C;
  • Fig. 16a is a schematic diagram of a portion of the emulation logic for the circuit C;
  • Fig. 16b is a schematic block diagram of circuit access possibilities for application software and emulation TSR programs
  • Fig. 17 is a schematic illustration of the Plug-n-Play state machine included within the circuit C;
  • Fig. 18 is a timing diagram relating to reading serial EEPROM data from external circuitry relating to Plug-n-Play compatibility
  • Fig. 19 is a schematic illustration of a circuit for facilitating PNP data transfer from external circuitry to the circuit C via the register data bus;
  • Fig. 20 is a schematic illustration of a linear feed back shift register necessary to implement an initiation key for access to Plug-n-Play registers;
  • Fig. 21 is a flow chart illustrating the manner in which the Plug-n-Play circuitry associated with the circuit C transitions from isolation mode to either configuration mode or sleep mode;
  • Fig. 22 is a table summarizing resources required for programming the Plug-n-Play serial EEPROM
  • Fig. 23 is a table providing data on all interrupt-causing events in the circuit C;
  • Fig. 24 is a schematic illustration of external oscillators and stabilizing logic associated therewith utilized by the circuit C;
  • Fig. 24a is a schematic illustration of logic and counter circuits associated with various low power modes of the circuit C;
  • Fig. 24b is a flow chart illustrating the response of circuit C to suspend mode operation
  • Fig. 24c is a flow chart illustrating the various register-controlled low power modes of the circuit C;
  • Fig. 25 is a schematic illustration of details of the clock oscillator stabilization logic of Fig. 24;
  • Fig. 26 is a table describing events which occur in response to various power conservation modes enabled via the status of bits in register PPWRI contained within the circuit C;
  • Fig. 27 is a timing diagram showing the relationship between various power conservation modes and signals and clock signals utilized by the circuit C;
  • Fig. 28 is a table summarizing pins associated with the system bus interface included in the circuit C;
  • Fig. 29 is a block diagram schematically illustrating the basic modules which comprise the local memory control module of the circuit C;
  • Fig. 30 is a block diagram schematically illustrating the master state machine associated with the local memory control module of the circuit C;
  • Fig. 31 is a timing diagram illustrating the relationship of suspend mode control signals and a 32 KHz clock signal utilized by the circuit C;
  • Fig. 32 is a state diagram schematically illustrating refresh cycles utilized by the circuit C during suspend mode operation
  • Fig. 33 is a timing diagram for suspend mode refresh cycles
  • Fig. 34a is a timing diagram for 8-bit DRAM accesses
  • Fig. 34b is a timing diagram for 16-bit DRAM accesses
  • Fig. 34c is a timing diagram for DRAM refresh cycles
  • Fig. 35 is a timing diagram illustrating how real addresses are provided from the circuit C to external memory devices
  • Fig. 36 is a schematic block diagram of a control circuit for local memory record and playback FIFOs
  • Fig. 37 is a diagram illustrating the relationship between data stored in system memory and interleaved in local memory via the circuit C;
  • Fig. 38 is a table describing data transfer formats for 8 and 16-bit sample sizes under DMA control
  • Fig. 39 is a schematic block diagram illustrating circuitry for implementing interleaved DMA data from system memory to local memory via the local memory control module of the circuit C;
  • Fig. 40 is a schematic block illustration of the game port interface between external devices and the circuit C;
  • Fig. 41 is a schematic block illustration of a single bit implementation for the game input/output port of the circuit C;
  • Fig. 41a is a diagram illustrating input signal detection via the game port of the circuit C;
  • Fig. 42 is a schematic block diagram illustrating the MIDI transmit and receive ports for the circuit C;
  • Fig. 43 is a timing diagram illustrating the MIDI data format utilized by the circuit C;
  • Fig. 44 is a block diagram of the various functional blocks of the CODEC module of the present invention.
  • Fig. 45 is a schematic of the preferred embodiment of the left channel stereo mixer of the present invention.
  • Fig. 45a is a table of gain and attenuation values.
  • Fig. 46 is a diagram of a partial wave form indicating signal discontinuities for attenuation/gain changes;
  • Fig. 47 is a block diagram showing zero detect circuits for eliminating "zipper” noise.
  • Fig. 48 is a block diagram showing clock generation functions in the present invention.
  • Fig. 49 is a block diagram of serial data transfer functions of the present invention.
  • Fig. 49a is a block diagram of the serial transfer control block
  • Fig. 50 is a block diagram showing internal and external data paths and interfacing with external devices, supported by the present invention.
  • Fig. 51 is a block diagram of the digital to analog converter block of the present invention.
  • Fig. 52 is a block diagram of the front end of the digital to analog converter block of the present invention.
  • Fig. 53a-53f are graphs showing outputs of various stages of the DAC block, including frequency response
  • Fig. 54 shows six graphs representing outputs and frequency response of various stages of the DAC block
  • Fig. 55 is a schematic representation of the Interp.l block, phase 1 of
  • Fig. 56 is a schematic representation of the Interp.l block, phase 2 of Fig. 52;
  • Fig. 57 is a schematic representation of the Interp.2 block of Fig. 52;
  • Fig. 58 is a graph of the frequency response of the Interp.2 block of
  • Fig. 59 is a graph representing the in-band rolloff of the Interp.2 block of Fig. 52;
  • Fig. 60 is a schematic representation of an embodiment of the Interp.3 block of Fig. 52;
  • Fig. 61 is a schematic representation of another embodiment of the Interp.3 block of Fig. 52;
  • Fig. 62a is a graph of the frequency response of the Interp.3 block of Fig. 52;
  • Fig. 62b is a graph of the passband roUoff of the Interp.3 block of Fig. 52;
  • Fig. 63 is a schematic representation of the noise shaper block of Fig. 52;
  • Fig. 64 is a signal flow graph (SFG) of the noise shaper block in Fig. 52;
  • Fig. 65 is a plot of the poles and zeros in the s plane for the noise shaper block of Fig. 52;
  • Fig. 66 is a plot of the transfer function magnitude of the noise shaper block of Fig. 52;
  • Fig. 67 is a plot of the poles and zeros in the z plane of the noise shaper block of Fig. 52;
  • Fig. 68 is a graph of the transfer function of the noise shaper filter of Fig. 52;
  • Fig. 69 is a plot of the ideal and realizable zeros of the noise filter block of Fig. 52;
  • Fig. 70 is a plot comparing two embodiments of noise transfer functions for the noise shaper block of Fig. 52;
  • Fig. 71 is a plot of the noise and signal transfer functions of the noise shaper block of Fig. 52;
  • Fig. 72 is a plot of the signal transfer function magnitude in phase and passband of the noise shaper block of Fig. 52;
  • Fig. 73 is a graph of the group delay (sec.) of the noise shaper block of Fig. 52;
  • Fig. 74 is a graph of the constant attenuation/gain contours of various embodiments of the noise shaper block of Fig. 52;
  • Fig. 75 plots A max versus noise gain k for an embodiment of the noise shaper block of Fig. 52;
  • Fig. 77 is a graph showing the impulse response of the D/A FIR filter
  • Fig. 78 is a graph showing the frequency response of the D/A FIR filter
  • Fig. 79 schematically illustrates one embodiment of the D/A conversion circuit of the present invention.
  • Figs. 80 and 81 schematically illustrate another embodiment showing the differential D/A conversion circuit of the present invention.
  • Fig. 82 is a block diagram of the CODEC ADC of the present invention.
  • Fig. 83 is a block diagram of the front end of the CODEC ADC
  • Fig. 84 is a graph illustrating the sigma-delta modulator output spectrum-range and phase for the ADC of the present invention.
  • Fig. 85 is a graph illustrating the sigma-delta modulator output spectrum, in detail.
  • Fig. 86 is a graph illustrating the output spectrum of the sinc6 Decim.1 filter output
  • Fig. 87 is a graph illustrating the output spectrum of the half-band
  • Fig. 88 is a graph illustrating the output spectrum of the 16-bit Decim.3 filter output
  • Fig. 89 is a block diagram of the Decim.1 filter
  • Fig. 90 graphically illustrates the frequency response of the Decim.1 filter
  • Fig. 91 graphically illustrates a detailed frequency response of the Decim.1 filter
  • Fig. 92 is a block diagram of the half-band Decim.2 filter-direct form
  • Fig. 93 is a block diagram of the half-band Decim.2 filter-transposed form
  • Fig. 94 graphically illustrates the frequency response of the Decim.2 filter
  • Fig. 95 is a detailed frequency response graph of the Decim.2 filter
  • Fig. 96 is a block diagram of the compensation filter of the CODEC
  • Fig. 97 graphically illustrates the frequency response of the Decim.3 filter
  • Fig. 98 graphically illustrates, in detail, the frequency response of the Decim.3 filter
  • Fig. 99 graphically illustrates the compensator circuit frequency response (un-compensated).
  • Fig. 100 graphically illustrates the total frequency response of the compensator circuitry in passband (un-compensated).
  • Fig. 101 graphically illustrates the total frequency response of the compensator in passband (compensated).
  • Fig. 102 is a block diagram of the synthesizer module of the present invention.
  • Fig. 103 illustrates signal flow in the synthesizer module of the present invention
  • Figs. 104a- 104f are graphs illustrating addressing control options in the synthesizer module of the present invention.
  • Figs. 105a- 105e are graphs illustrating volume control options in the synthesizer module of the present invention.
  • Figs. 106a and 106b are graphs of low frequency oscillator waveforms available for the synthesizer module of the present invention.
  • Fig. 107 is an architectural diagram of an address controller of the synthesizer module of the present invention.
  • Fig. 108a and 108b are timing diagrams of the operations performed by the address controller of Fig. 107;
  • Fig. 109 is an architectural diagram of a volume controller of the synthesizer module of the present invention.
  • Fig. 110 is a timing diagram of the operations performed by the volume controller of Fig. 109;
  • Fig. 111 is an architectural drawing of the register array of the synthesizer module of the present invention.
  • Fig. 112 is a timing chart of the operations of the register array in Fig. 111;
  • Fig. 113 is an architectural drawing of the overall volume control circuitry of the synthesizer module of the preset invention.
  • Fig. 114a is a logic diagram of a comparator illustrated in Fig. 113;
  • Fig. 114b is a timing chart of the operations of the comparator in Fig. 114a;
  • Fig. 115 is an architectural drawing of the LFO generator of the synthesizer module of the present invention.
  • Fig. 116 is an architectural diagram of the signal path of the synthesizer module of the present invention.
  • Fig. 117 is a timing diagram of the operations performed by the signal path of Fig. 116;
  • Fig. 118 is an architectural diagram of accumulation logic of the synthesizer module of the present invention.
  • Fig. 119 is a timing diagram of the operations performed by the accumulation logic of Fig. 118.
  • Fig. 120 is a timing diagram of the overall operations performed by the synthesizer module of the present invention.
  • Fig. 1 is a functional block diagram of the sigma-delta modulator of the present invention.
  • Fig. 2 is a schematic illustration of the sigma-delta modulator of the present invention.
  • Timers can be readily implemented by providing a clock signal derived from external oscillator signals to an appropriate logic circuit.
  • An 80 microsecond clock signal can be provided by dividing the 16.9 MHz oscillator signal by 1344 for example.
  • the generation of control signals which respond to the status of various bits of data held in registers throughout the circuit C is a simple matter of providing control inputs to blocks or arrays of gate circuits to satisfy the required input/output or truth table requirements. Consequently, these details, where not considered significant to the claimed invention, need not and have not been provided since such matters are clearly within the level or ordinary skill in the art.
  • the circuit C includes five basic modules: a system control module 2; a coder-decoder (CODEC) module 4; a synthesizer module 6; a local memory control module 8; and MIDI and game port module 10. These modules are formed on a monolithic integrated circuit.
  • a register data bus 12 provides communication of data between modules and between circuit C and a system bus interface 14. Timing and control for circuit C is provided by logic circuits within system control module 2 operating in response to clock signals provided by one or both oscillators 16 and 18 depending upon the particular system requirement. Control of circuit C is generally determined by logic circuits included within module 2 which are in turn controlled by the state of various registers and ports provided throughout the circuit C.
  • Fig. 1 is a functional block diagram and does not correspond directly to a physical layout for the integrated circuit embodiment.
  • Various circuits, interconnects, registers etc. which provide or facilitate the functions specified in Fig. 1 may be formed in several locations spread throughout the integrated circuit as needed or as dictated by manufacturing processes, convenience or other reasons known to those of ordinary skill in the art.
  • the circuit of the present invention may be fully integrated using conventional integration processes such as are well known in the industry.
  • the circuit of the present invention is packaged in a 160 pin plastic quad flat pack (PQFP), as will be described in more detail below.
  • PQFP 160 pin plastic quad flat pack
  • the physical layout of the various modules and the pin-out arrangement have been designed to isolate analog circuits and inputs/outputs from the noisier digital circuitry and pins.
  • Fig. 2 an example of the desired physical layout relationship among various portions or modules of the circuit C is schematically illustrated.
  • the most noise sensitive elements of circuit C e.g., those associated with the analog aspects of the CODEC, specifically the mixer block, are located near the circuit edge opposite the largely digital local memory control and synthesizer modules.
  • the pin-out arrangement of the package isolates analog mixer input and output pins in a group 20 as far removed as possible from the noisiest digital output pins and clock inputs, which are located on the opposite side 22.
  • Fig. 3 Representative pin assignments are given in Fig. 3, where pin names correspond to industry standard designations, such as the ISA Plug-n-Play specification, version 1.0, May 28, 1993, available from Microsoft Corporation and the industry standard ISA bus specification as set forth in AT Bus Design by Edward Solari, published by Annabooks, San Diego, CA; ISBM 0-929392-08-6, the contents of which are incorporated by reference herein.
  • An alternative pin assignment is provided in Fig. 3a, which likewise maintains the desired physical relationship among the various modules.
  • analog pins generally include those in the range of 96 through 113, including a plurality of analog power (AVCC) and ground (AVSS) pins. It is a noise reduction feature of the present invention to provide individual VSS and VCC pins for the majority of individual analog pins. Pins 82-95 and 114 are less noisy inputs.
  • Other layout features include placing the external oscillator pins XTAL1[I,0] and XTAL2[I,0] near the clock block of the system control module. This system control module clock block should also be placed near the CODEC clock block 30. It is also important that all 16.9 MHz clocks used throughout the circuit C are implemented to minimize the skew between them. Minimizing internal clock skew is important for timing purposes as well as noise reduction in the present circuit.
  • FIG. 6 a typical full-featured implementation of a PC audio circuit C with associated circuits, buses and interconnections is described.
  • the configuration of Fig. 6 is exemplary of how the circuit C would be utilized in a PC audio card, taking advantage of all available RAM and EPROM resources and being fully compatible with the ISA Plug-n-Play specification.
  • circuit C is interfaced to host computer system (not shown ) via system bus interface module 14 and the industry standard
  • AT/ISA system control, address and data connections include: system data (SD); system address (SA); system byte high enable (SBHE); interrupt request (IRQs); input/output channel check (IOCHCK); direct memory access request (DRQ) and acknowledge (DAK); input/output read (IOR); input/output write (IOW); reset; address enabled (AEN); terminal count (TC); input/output channel ready (CHRDY); and input/output chip select 16 (IOCS 16).
  • SD system data
  • SA system address
  • SBHE system byte high enable
  • IQs input/output channel check
  • DRQ direct memory access request
  • DK acknowledge
  • IOR input/output read
  • IOW input/output write
  • reset address enabled
  • AEN address enabled
  • TC terminal count
  • CHRDY input/output channel ready
  • IOCS 16 input/output chip select 16
  • the following input/output lines and associated circuitry and/or devices are interfaced to the CODEC module 4.
  • a monophonic microphone/amp input 50 and monophonic output 52 via external amplifier 54 are provided.
  • An external capacitance, resistance circuit 56 is provided for deriving reference bias current for various internal circuits and for providing isolation capacitance as required.
  • a general purpose, digital two-bit flag output 60 controlled by a programmable register, is provided for use as desired in some applications.
  • Game/MIDI ports 62 include 4-bit game input 65, 4-bit game output 66 and MIDI transmit and receive bi-directional interface 68.
  • the system control external connections include the 16.9344 MHz and 24.576 MHz clocks 16 and 18 and a 32 KHz clock or suspend input 70.
  • Input 70 is used for memory refreshing and power conservation and is multiplexed with other signals as described in detail elsewhere in this application.
  • the interface for local memory control module 8 includes frame synchronize (FRSYNC) and effect output 72 which is used to provide a synchronizing clock pulse at the beginning of each frame for voice generation cycles and to provide access to an optional external digital signal processor
  • Plug-n-Play chip select 76 enables an external EPROM 78 for providing configuration data over a 3-bit data bus 80 during system initialization sequences.
  • an external 8-bit data bus 82 and an 8-bit address bus 84 is provided for data and address communication between local memory control module 8 and external memory devices.
  • ROM chip select 83 and 2-bit ROM address output 85 are used to address one-of-four, two-megabyte by sixteen bit EPROMs 86 which are provided for external data and command sequence storage, as described in more detail elsewhere in this specification.
  • EPROMs 86 interface with circuit C via 4-bit output enable 88 which is a one-of-four select signal multiplexed with ram column address strobe 90 to conserve resources.
  • One aspect of addressing for EPROMs 86 is provided by a 3-bit real address input 92.
  • the address signals on line 92 are multiplexed with multiplexed row-column address bits for DRAM cycles provided on DRAM input 94.
  • Pin 96 of circuit C is an 8-bit bidirectional data bus which provides data bits for DRAM cycles via data [7:0] lines 98.
  • Pin 96 is multiplexed in ROM cycles as real address bits 18:11 to EPROMs 86 and input data bits 7:0 (half of RD 15:0) to circuit C.
  • Data communication from EPROMs 86 is via 16-bit data output 100 (RD[15:0]) which is split and multiplexed into circuit C via 8-bit buses 82 and 84 during ROM cycles.
  • EPROM data input is carried over bidirectional line 96 and bidirectional line 102 (RD[15:8]) during ROM cycles.
  • Line 102 also provides 8-bit ROM addressing (RLA[10:3]) during multiplexed ROM address and data transfer cycles. Line 102 also is multiplexed to provide row-column address bits (MA[10:3]) for DRAM cycles.
  • RLA[10:3] 8-bit ROM addressing
  • MA[10:3] row-column address bits
  • Output 104 is a ROM-address hold signal used to latch the state of 16-bit ROM addresses provided via outputs 96 and 102, buses 82 and 84 and
  • a 16-bit latch 108 is provided to latch ROM addresses in response to the ROM-address hold signal.
  • the circuit C supports up to four, 4-megabyte by 8-bit DRAMS 110 used for local data storage. Circuit C interfaces with DRAMS 110 via various address, data and control lines carried over two 8-bit buses 84 and 86, as described above. Row address strobing is provided via RAS output pin 112. Output 112 is provided directly to the RAS inputs of each DRAM circuit 110. For clarity, in Fig. 6, output 112 is also shown as providing the write enable (WE) output control signal which is provided to the write enable input of each
  • DRAM circuit 110 In the preferred embodiment, the write enable output is provided on a separate output pin (see Fig. 3) from circuit C.
  • DRAM column address strobe (CAS[3:0]) is provided via BKSEL[3:0] output pin 114 during DRAM cycles.
  • 3-bits of DRAM row and column addressing are provided via output 116, and an additional eight address bits are multiplexed via bidirectional pin 102, bus 84 and DRAM input 118 during DRAM cycles.
  • a summary of all local memory interface terminals is provided in Fig. 7.
  • the circuit C provides seven interrupt channels 130 from which up to three interrupts can be selected. In the preferred embodiment, two interrupts are used for audio functions and the third is used for the CD-ROM or other external device. Also shown at line 130 (a group of eight lines) is the ISA standard IOCHCK output, which is used by the circuit C to generate non-maskable interrupts to the host CPU.
  • the circuit of the present invention provides general compatibility with Sound Blaster and AdLib applications. When running under MS-DOS a terminate and stay resident (TSR) driver sequence must be active with the host CPU to provide compatibility.
  • TSR stay resident
  • One such driver sequence is that provided by Ultrasound and called Sound Board Operation System (SBOS).
  • circuit C When application software, typically a game, sends a command to a register in circuit C designated as a Sound Blaster or AdLib register, the circuit C captures it and interrupts the processor with the IOCHK pin. The nonmaskable interrupt portion of the SBOS driver then reads the access and performs a software emulation of the Sound Blaster or AdLib function.
  • the circuit C also provides six DMA channels 136 and DMA acknowledge lines 138 from which three DMA functions can be selected.
  • the three DMA functions include: wave-file record transfers and system-memory transfers; wave-file playback transfer; and a DMA channel required by the external CD-ROM interface.
  • the circuit C provides necessary signals or hooks to facilitate the use of an external PNP compatible device driver such as external CD interface 125.
  • the circuit C provides separate interrupt request and direct memory address request pins for external interface 125, which are schematically shown as a single line 124. In the preferred embodiment, a separate input pin is provided for each (see Fig. 3).
  • External device chip select and DMA acknowledge outputs are provided by circuit C via separate output pins (Fig. 3) shown collectively as line 126 in Fig. 6. Data exchange between circuit C and the external device drive is provided via the ISA standard 16-bit bidirectional data bus 128.
  • Circuit C is, in general, a register controlled circuit wherein various logic operations and alternative modes of operation are controlled by the status of various bits or bit groups held in various registers. Complete descriptions and definitions of registers and their related functions are set forth in the charts and written description included elsewhere herein. Circuit C also includes several blocks of input/output address space, specifically, five fixed addresses and seven relocatable blocks of addresses. In the register description given herein, register mnemonics are assigned based on the following rules:
  • the first character is assigned a code that specifies the area or module to which the register belongs;
  • the final character is either R for a direct register, P for a port (to access an array of indexed registers), or I for an indirect register.
  • circuit C There are eight groups of functions in circuit C that utilize programmable registers. The status of programmable registers are subject to control in response to instructions executed by the host CPU system. The eight groups of functions and their associated direct addresses are listed in Table II below. Two of the addresses for Plug-n-Play registers are decoded from all twelve bits of the ISA address bus (SA[11:0]). The remaining addresses are decoded from the first ten bits (SA[9:0]).
  • the circuit C In addition to the ten and twelve-bit address spaces used for internal input/output mapping, the circuit C also provides an optional external- decoding mode wherein four system address bits (SA[3:0], Figs. 3,6) and two chip-select signals, implemented as SA[5,4], address registers within circuit C. This mode is selected by the status of address pin RA [20] at the trailing edge of the system reset signal.
  • SA[3:0], Figs. 3,6 two chip-select signals, implemented as SA[5,4], address registers within circuit C. This mode is selected by the status of address pin RA [20] at the trailing edge of the system reset signal.
  • This multiplexing can be provided in the manner discussed below with regard to other multiplexed pins and functions.
  • Table III shows how direct addressed registers and ports are accessed in external decode mode. Indexed registers are accessed the same way as in internal decoding mode (see preceding register table), except that the direct addresses change to the ones shown in Table III below.
  • a number of registers and defined first-in/first-out address spaces within circuit C are accessible via DMA read and write cycles. These are listed in the following tables, where LMC and CODEC refer to the module within circuit C where such registers and FIFOs reside:
  • External decoding mode is utilized in those systems which are non- PNP compliant to provide access to internal registers and ports via external decoding logic circuits.
  • multiplex pins 139 and 140 which correspond to the suspend # and C32KHZ inputs in one state, with the FRSYNC# and EFFECT# outputs in the alternate state.
  • the functions served by these signals are discussed elsewhere herein.
  • multiplexing is provided for these pair of pins by sensing the state of terminal RA[21] (see Fig. 6) at the trailing edge of the reset signal.
  • the D-input to latch 144 can be set to a low or high value.
  • Latch 144 upon being clocked by the trailing edge of the reset signal will provide at the Q output a corresponding low or high output.
  • This latch output is provided to a 4:2 multiplex circuit 146.
  • Multiplexor 146 assigns pins 139 and 140 to the SUSPEND# and C32KHZ function if the Q output is high, and alternatively, assigns pins 139 and 140 to the EFFECT# and FRSYNC# output function of the Q output is low.
  • Plug-n-Play compatible expansion card mode is provided in the same manner, by latching the state of input pin PNPCS on the trailing edge of the reset signal.
  • Plug-n-Play mode is selected by a low value, and system board mode selected by a high value. The selection is made depending on whether the circuit C is being used in a Plug-n-Play compatible system, or a system board, non Plug-n-Play compatible system.
  • the circuit C includes multiplexing between external pins relating to compact disk drive control and serial port synchronization, clock and data transfer used when an external digital signal processing circuit or other external, serial format circuits are utilized. This is more fully discussed in the CODEC module description below.
  • control of an external device is provided within the system control module via the EX_IRQ (interrupt request), EX_DRQ (DMA request), EX_DAK# (acknowledge) and CD_CS# (chip select) pins.
  • EX_IRQ interrupt request
  • EX_DRQ DMA request
  • EX_DAK# acknowledgenowledge
  • CD_CS# chip select
  • the ESPSYNC, ESPCLK, ESPDIN and ESPDOUT functions correspond to synchronization pulse, clock, data in and data out, respectively.
  • system control module 2 includes numerous registers, compatibility logic, Plug-n-Play ISA implementation logic, interrupt and DMA channel selection logic, and miscellaneous control functions such as clocks, resets, test logic, etc.
  • System control module 2 is shown in greater detail in Fig. 12.
  • system control module 2 includes a system bus interface block 150, industry software compatibility logic block 152, interrupt and DMA channel selection logic block 154, a Plug-n-Play logic block 153, a register data bus 12, and a miscellaneous logic and timing block 158.
  • the system control module in general controls the functioning of the circuit C in response to various timing, and control signals as well as enables responses to control functions held in various registers which serve to change the modes of operation, power consumption levels, and other control features.
  • System bus interface 150 provides the hardware links between the processor-controlled system bus 156 and the various modules and portions of circuit C.
  • Circuit C is designed to be fully compatible with the Plug-n-Play ISA system bus specification.
  • One aspect of the Plug-n-Play ISA specification is a requirement for an interface to a serial EEPROM where the system configuration data is stored and available during system initialization to provide configuration data to the host CPU.
  • the system bus interface also has to comply with the ISA portion of the EISA bus specification. These two specifications are industry standards and commonly available.
  • the ISA bus interface 150 provides interface compatibility with a 16-bit data bus, which when in 5 volt mode has a drive capability selectable to be either 24, 12 or 3.2 miliamps. The power up default is 24 miliamps. In output mode, the data bus is edge-rate controlled and the delay between lines is mutually skewed to reduce the effects of ground bounce.
  • ISA bus interface 150 also provides interface for a 12-bit address bus and support for two audio interrupts and one CD-ROM or external device interrupt chosen from seven interrupt request lines 130. Support is also provided for use of the IOCHK signal to generate non-maskable interrupts to the host CPU.
  • the interface 150 also provides support for three DMA channels chosen from six sets of DMA lines 136 and a corresponding set of DMA acknowledge lines 138.
  • the six channels available are 0, 1, 3, 5, 6 and 7 (channel 0, 1 and 3 are 8-bit DMA channels and channels 5, 6 and 7 are 16-bit DMA channels).
  • the three DMA functions supported are: wave-file record transfers and system-memory transfers; wave-file play transfers; and DMA channel required by the CD-ROM or external device interface. A mode is provided whereby both record and play functions can be mapped to the same DMA channel, although only one can be enabled at a time.
  • Register data bus 12 facilitates system bus input and output and DMA accesses to registers provided throughout the circuit C.
  • register data bus interfaces via a plurality of bi-directional data bus transceivers 160 to synthesizer registers 162, local memory control registers 164, system control registers 166, MIDI and game ports and registers 168 and CODEC registers 170. The purpose and function of these registers is described more fully elsewhere in this specification.
  • a bi-directional data bus transceiver 160 is also provided between register data bus
  • Register data bus 12 also interfaces with various local memory latches 173, 174 and 175 and CODEC FIFOs 176 and 178, as will be described in detail elsewhere in this specification.
  • Circuit C supports either eight or 16-bit data transfer to or from the system data bus.
  • the alignment of the data to and from the register data bus is defined by the least significant bits of the ISA address bus. These are designated SA[0] and SBHE#, as shown in Fig. 6. These two bits are decoded as shown in the following Table VI for accesses to other than the general input/output data ports (I8/16DP):
  • Register data bus 12 is formed of two 8-bit busses 180 and 182.
  • Low byte bus 182 interfaces via data bus transceiver 184 to the low byte of system data bus 128 (see Fig. 6).
  • High byte bus 180 interfaces to high byte of system data bus 128.
  • Controlled bus driver 186 transfers data between buses 182 and 180 to effect data translation set forth in the table above, in response to control and decoding logic 190.
  • Control logic 190 responds to input SBHE#, and SA[0] to generate control signals via lines 192, 194, 196, 198 and 200 to implement the data translation set forth in the table above.
  • An 8-bit latch 202 is provided to latch the low byte data until the high byte is active to provide 16-bit input/output accesses.
  • Controlled driver 204 responds to control signals from control and decoding logic 190 to effect simultaneous low and high byte input/output accesses.
  • Control logic 190 also receives ISA bus signals IOR# and IOW# which enable read or write accesses respectively. While these inputs are shown as a single line 206 they are provided on individual pins to circuit C, as are the input signals illustrated on lines 208 and 210. PNP data transfers under the control of logic circuits 190 and 212 are provided via bus 182 and controlled bi-directional transceiver 214. PNP logic functions and registers are described in detail elsewhere in this specification. Control and decoding logic 190 may be implemented in any suitable conventional method to provide industry standard ISA system bus interface control and address decoding and to implement the data handling protocol set forth herein. Likewise, PNP logic circuit 212 may be implemented with conventional circuits to provide an industry standard PNP complaint interface.
  • Control and decode logic 190 provides conventional handshake, decoding and bus interface circuitry to interface with industry standard ISA system bus.
  • Accesses to all PNP registers use odd, 8-bit addresses. Since IOCS16# is not asserted for these accesses, the lower 8 bits of the ISA data bus are used. These are passed from/to the lower 8 bits of the register data bus.
  • IOCS16# is an industry standard interface signal asserted via an external pinout (see Fig. 6).
  • I8DP located at P3XR+5 and I16DP located at P3XR+ (4-5) are used to access 8 and 16-bit, indexed registers included in the circuit C.
  • I16DP is the only port on the circuit C that is capable of 16-bit I/O accesses.
  • IOCS16# is asserted for all accesses to these general data ports.
  • the general I/O data port accesses are translated is a follows:
  • System bus interface 150 is responsible for translating 16-bit I/O writes that are broken up by software into two 8-bit writes (even byte first, then odd byte). For this, the even-byte write is latched in the latch 202 and provided over the low half of the register data bus during the subsequent odd-byte write. The register data bus will provide whatever was last latched in an even-8-bit-I/O write during odd-8-bit-I/O writes.
  • the data width is determined by the DMA channel used as follows:
  • the appropriate byte is driven on the ISA data bus 128.
  • the other byte is not driven; it will remain in the high- impedance state.
  • weak feedback inverters (“keeper” or “sticky-bit” circuits) are provided in accordance with conventional, well known methods. Such circuits provide a weak feedback path that drives the node voltage back on itself to keep it from floating.
  • ISA Data Bus Drive Considerations There are three special ISA-data-bus design facets built into the IC for the purpose of reducing the peak return current required when the data bus is driving out. The first is that the output drive capacity is selectable, via a programmable register, to be either 24, 12 or 3.2 milliamps (when VCC is at 5 volts). The second is that there is a special current restriction circuit built into the output buffers that slows the edge rates; this circuit is implemented in the same way as that used by the
  • the third design aspect is that the data bus is broken up into a few groups, each of which is skewed from the others, as shown in the Fig. 14a.
  • PPWRI[SD] indicates the circuit C is in shut-down mode, initiated by a specific I/O write to PPWRI.
  • AEN The decodes above are only enabled when AEN is low.
  • IOCHRDY Control Only accesses to P3XR+2 through P3XR+7 are capable of extending the ISA-bus I/O cycle by causing IOCHRDY to become inactive; accesses to all the P2XR, ports, CODEC, and Plug-n-Play ISA registers never extend the cycle.
  • the registers that can extend the cycle including the 46 registers indexed by IGIDXR, the following categories exist:
  • Buffered I/O writes are important because they allow the CPU to continue without having to wait. However, if not handled properly, they can be the source of problems resulting from mixing up the order in which the I/O cycles are handled. For example, if there were a buffered I/O write to local memory immediately followed by a write to the local memory I/O address registers, then the write to local memory may be sent to the wrong address. This kind of problem is handled by forcing any subsequent accesses to the circuit C to be extended while there is a buffered I/O write in progress. Referring now to Fig. 16, IIOR#, IIOW#, and IBIOWIP# are internal signals.
  • IIOR# and IIOW# become active after the previous buffered write has completed, signaled by IBIOWIP# (buffered I/O Write) becoming inactive. Note that IIOR# and IIOW# are not gated by IBIOWIP# during DMA cycles.
  • An I/O write to any of these registers automatically causes IBIOWIP# to become active so that IOCHRDY will become inactive during the next I/O access to the circuit C.
  • I/O read to any of the buffered registers causes the logic to (1) force IOCHRDY inactive (regardless as to whether IBIOWIP# is active), (2) if IBIOWIP# is active, wait until it becomes inactive and keep IOCHRDY inactive, (3) wait for the read-data to become available to the ISA bus, and (4) allow IOCHRDY to become active; at this point the cycle is finished off like a zero-wait-state cycle.
  • IGIDXR If IGIDXR is in auto-increment mode (SVSR), then it will increment on the trailing edge of either an 8-bit I/O write to P3XR+5 or a 16-bit write to P3XR+(4-5); if the write was to a buffered port, then
  • SVSR auto-increment mode
  • IGIDXR is incremented after the trailing edge of IBIOWIP#.
  • the system control module 2 includes logic and registers needed for compatibility with existing game-card software.
  • the circuit C is compatible with software written for native mode Ultrasound, MPU-401, Sound Blaster and AdLib.
  • Logic circuits and timers for compatibility are designated generally as block 152 in Fig. 12. These include the following functions: (i) registers described in the register description part of this document; and (ii) two 8-bit timers, one having an 80 microsecond resolution and the other a 320 microsecond resolution; (iii) two general purpose registers; (iv)
  • AdLib Timer 1 is an 8-bit preloadable counter that increments to OFFh before generating an interrupt. It is clocked by an 80 microsecond clock.
  • AdLib Timer 2 is the same, except that it is clocked by a 320 microsecond clock.
  • UASBCI[3:2] Both timers can be changed to run off the 1 MHz clock by UASBCI[4]. These timers are also enabled by UADR[STRT1] and UADR[STRT2].
  • Logic block 152 also includes two 8-bit general purpose registers that are used for MPU-401 emulation and to support other emulation software.
  • the general purpose registers referred to as UGP1I and UGP2I, can be located anywhere in the
  • Each register actually represents two registers: one that is read out to the application and one that is written in by the application.
  • the registers When the registers are written (by the application) at the emulation address, they may be enabled to generate an interrupt; they are subsequently read (by the emulation software that received the interrupt) via a back-door access location in the GUS Hidden Register Data Port (UHRDP). Writing to those same back-door locations, updates the general purpose registers associated with the read operation.
  • This emulation protocol is schematically illustrated in Fig. 16a.
  • MPU-401 Emulation Several controls have been added to the general purpose registers in support of MPU-401 emulation; the assumption is that there is an MPU-401emulation TSR running concurrently with the application (typically game software).
  • the emulation address (UGPA1I, UGPA2I, and ICMPTI[3:0]) may be set to match the MIDI UART address.
  • the two UART addresses can be swapped so that the receive/transmit data is accessed via P3X0R+0 and the control/status data is accessed via IVERI[M401].
  • Application writes to the general purpose registers cause interrupts (potentially NMIs).
  • Emulation software captures the interrupts, reads the data in the emulation registers via the back door (UHRDP), and uses it to determine how to control the synthesizer.
  • the MIDI commands may also be sent to the UART so that the application can be driven by the same interrupts and observe the same status as the MPU-401 card.
  • Fig. 16b is a schematic block diagram showing the access possibilities for the application and the emulation TSR.
  • the switch symbols are enables that are controlled by the IEMUAI and IEMUBI emulation control registers.
  • MPU-401 Status Emulation Two MPU-401 status bits are generated, DRR# (Data Receive Ready, bit 6) and DSR# (Data Send Ready, bit 7), which are readable via UBPA1I.
  • the intended meaning of these bits is as follows: DRR# becomes active (low) when the host (CPU) is free to send a new command or data byte to the UART; DSR# becomes active (low) when there is data available in the UART's receive data register. Note that the names of these bits are derived from the perspective of the MPU-401 hardware rather than the CPU. Selection between reading these bits and the actual data written to the emulation register comes from IEMUBI[5:4].
  • DRR# is set inactive (high) by the hardware whenever there is a write to either of the emulation registers via the emulation address (ICMPTI[3:0],
  • DSR# is set inactive (high) by the hardware when there is a read of UGP2I via the emulation address (ICMPTI[3:2], UGPA2I).
  • UGP1I[7] via the back door (UHRDP) also update the state of this flag. This bit defaults to low at reset.
  • the system control module 2 includes registers and logic needed to implement the Plug and Play ISA (PNP) specification from Microsoft.
  • PNP Plug and Play ISA
  • the circuit C includes two PNP-compliant logical devices.
  • the AUDIO-functions logical device consists of most of the circuit C including the synthesizer, the codec, the ports, etc.
  • the external function or CD-ROM logical device is associated with only the external functions.
  • PNP I/O Ports and Registers In support of PNP, the circuit C provides a number of specialized registers. These are indexed via PIDXR and accessed via the read and write ports PNPRDP and
  • the reset signal latches the state of the output pin 76 (PNPCS, Fig, 6) at power-up to determine the PNP mode. If it is latched low, then the circuit C is assumed to be on a PNP-compliant card that contains a serial EEPROM 78 (PNP card mode). If it is latched high, then the circuit C is assumed to be on a system board that does not contain a serial EEPROM 78 (PNP-system mode).
  • CSN Card Select Number
  • PCSNBR Card Select Number
  • PNP interface can be in one of four possible states: wait-for-key, isolation, configuration, and sleep.
  • wake is the wake command
  • X is the data value associated with the command
  • CSN is the current card select number, all as explained in the Plug And Play ISA specification.
  • the output of the PNP state machine is PNPSM[1:0], as shown in the diagram.
  • PNP logic waits for a key of 32 specific bytes to be written to PIDXR. No PNP registers are available when in this state (except PIDXR for the key).
  • PNP software executes a specific algorithm of IOR cycles to PISOCI to isolate each PNP card and assign it a distinct CSN. If the circuit C is in PNP-system mode, then reads of PISOCI always cause the part to "lose” the isolation and go into sleep mode.
  • PNP software can read all resource data from the PNP EEPROM 78, assigns the resources (I/O address space, IRQ numbers, and DMA numbers), and send specific PNP commands (such as "activate").
  • the PNP hardware is dormant.
  • PNP-initialization mode data is automatically read out of the EEPROM based on the state of PNPSM[1:0] as follows:
  • bits[7:0] represent the even byte (the first byte read via PRESDI) and bits[15:8] represent the odd byte.
  • SK the serial clock, is ICLK1M (see the CLOCKS description below), which is a frequency of 996 KHz.
  • LFSR linear feedback shift register
  • LFSR 230 is reset to 6Ah anytime the value written to PIDXR does not match the LFSR. If all 32 proper bytes are written to PIDXR, then the PNP state machine changes from Wait-For-Key mode to Sleep mode (See Fig. 17).
  • Isolation Mode When in Isolation mode, the data contained at the beginning of the serial EEPROM 78 is shifted in, one bit at a time, and used in the algorithm shown in Fig. 21.
  • the PNP specification allows for the last eight bits of the serial identifier, the checksum, to either be calculated or simply transferred from the serial EEPROM 78. These values are not calculated by the circuit C; they are transferred directly from the serial EEPROM 78.
  • the algorithm of Fig. 21 enables transition from isolation mode to either configuration mode or sleep mode.
  • CSN card select number
  • PCSNBR card select number back door
  • NMI Non-Maskable Interrupt
  • the table in Fig. 23 provides data on all interrupt- causing events in the circuit C. Note that when the circuit C is in auto-timer mode and the UACWR has been written to a 04h, then the write to the UADR does not generate an interrupt.
  • DMA Reads of the circuit C will cause the system data bus to be driven only if the circuit C has set the DMA request signal; also, the circuit C will ignore all DMA writes if the acknowledge occurred without a DMA request.
  • DMA Rates For DMA transfers between local and system memory, the rate of transfer is controlled by LDMACI[4:3]. The fastest rate for all DMA transfers allows about one-half to 1 microseconds from the end of the last
  • DAK signal to the beginning of the next DRQ signal. This is incorporated by counting two edges of the ICLK2M, the 2 MHz clock.
  • the circuit C has numerous internal clock requirements. This section of the description refers to all internal clocks which are generated from external crystals 16 and 18 (Fig. 1). Referring now to Fig. 24, all of the clocks that are generated by this block off of crystal 16 are guaranteed to be steady (held high) when either oscillator is not valid and to start toggling again after the oscillator is stable. The logic is designed such that there is no possibility of glitching on these clocks while the oscillators are stabilizing.
  • oscillator stabilization logic 232 in Fig. 24. It is used: (1) to exit suspend mode; (2) to exit shut-down mode; and (3) to stabilize the oscillators following a software reset (PCCCI) in which the IC is in the shut-down mode. It is bypassed when the RESET pin becomes active.
  • PCCCI software reset
  • the IOSC16M signal is the input clock signal from the 16.9344 MHz clock 16. This clock signal is provided as an input clock signal to oscillator stabilization logic 232 via a control or gate signal on line 233. Gating logic 242 also generates an enable signal on line 235 to control the on/off state of clock 16.
  • gating logic 242 provides an output ICLK16M signal via a buffer 237 which is used as the basic system clock for the circuit C, and a 16.9344 MHz output via buffer 239 which is utilized by logic block 241 to generate various clock signals of different frequencies for specific subcircuits or functions. Note that similar stabilization logic could be provided for crystal 18 if desired. In the present embodiment, crystal 18 provides a buffered 24 MHz output on line 234 in response to activation signal PPWRKPWR24).
  • the oscillator stabilization logic 232 consists of a 16-bit counter 238 that is clocked by oscillator 16, and a flip-flop 240 that controls the counter 238. The result is a gate to the gating logic 242 (Fig. 24) that either allows the clock to pass or disables it glitch-free.
  • the signal STOP_CLK for the 16.9 MHz. clock 16 clears counter 238 during suspend and shut-down modes.
  • a software reset PCCCI
  • PCCCI software reset
  • PCCCI requires that system reset PCARST# be held active for either 256 states or 64K states of clock 16 depending on whether the circuit C is in a shut-down mode (see discussion below).
  • Logic counters within the stabilization logic 232 also provide control signals to implement the required delay.
  • the signal GO_CLK sets control flip-flop 240 while the RESET pin is active. Once the circuit C exits suspend and shutdown mode, STOP_CLK becomes inactive, counter 238 clocks out 64K states, and the CLOCK_ENABLE output of the circuit 238 becomes active.
  • STOP_CLK, GO_CLK signals are internally generated from logic circuits responsive to the status of power control registers and reset signals as described elsewhere herein.
  • Fig. 24a further details of the clock generation, control and stabilization circuitry are described. It should be noted that the logic and counters shown in Fig. 24a are intended to be an example of how the logic described could be implemented. Those of ordinary skill in the art will realize there are numerous variations which might be used without deviating from the functional specification.
  • System reset signal 430 is an external ISA bus signal. System reset 430 is asserted for at least ten milliseconds (thereby enabling PCARST#) to allow enough time for oscillators 16 and 18 to stabilize before signal PCARST# on line 431 goes inactive (high). Signal PCARST# forces most memory functions (registers, latches, flip-flops, bits in RAM) into the default state, causes all ISA-bus activity to be ignored and halts local memory cycles.
  • System reset is provided as a GO-CLK asynchronous set signal 435 to flip-flop 240, which forces the Q-output high on line 233 to immediately enable gating logic 242, thereby enabling the 16 MHz clock signal.
  • the 24 MHz clock is also enabled by reset since it is controlled by the PWR24 bit of register PPWRI which in turn is set high as its default state in response to the
  • the PCCCI signal is an I/O mapped command from the PNP logic (software reset) controlled by the status of the PCCCI register. Assertion of PCCCI is provided on line 434 as an alternative source of signal PCARST#.
  • suspend mode is entered in response to an active input from the Suspend# pin.
  • the suspend mode logic is shown in active-positive mode in Fig. 24a.
  • An active input suspend signal is provided on line 446 and input to ORGATE 448 and ANDGATE 450.
  • ISUSPRQ becomes active at line 452 which activates modular signals I2LSUSPRQ and I2SSUSPRQ via gates 454 and 456, respectively.
  • the suspend input on line 446 is also provided to a 2-bit delay counter 458 which provides an 80 ⁇ second delayed output to ORGATE 448 and ANDGATE 450.
  • Delay circuit 458 is clocked by the ICLK12K internally generated clock signal provided on line 460. Consequently, after 80 ⁇ seconds
  • ANDGATE 450 is enabled and generates suspend-in-progress signal ISUSPIP on line 462. This signal is provided to generate modular suspend-in-progress signals, as desired.
  • ISUSPIP is provided as an input to ORGATE 464 to generate a modular I2LSUSPIP signal for the local memory module of the circuit C, which is used to disable the 16.9 MHz clock signal used by the local memory module during normal operations.
  • ISUSPIP is also provided via ORGATE 467 and ORGATE 466 to ground oscillator 16 approximately 80 ⁇ seconds after ISUSPRQ has been asserted, and as a STOP CLK input on line 436 to clear counter 238. Clearing counter 238 requires the oscillator 16 to stabilize after being enabled when the suspend signal is deactivated. Similarly, ISUSPIP is provided as an input to ANDGATE 468 via ORGATE 470 to disable the 24 MHz oscillator 18.
  • the clock circuit of the system control module 2 provides various clocks for functions throughout the circuit C.
  • the clock circuit of the system control module 2 provides various clocks for functions throughout the circuit C.
  • ICLK1M is implemented with a duty cycle of 9 clocks high and 8 clocks low to comply with the requirements of PNP serial EEPROM 78. All other clocks are implemented such that their duty cycle is a close to 50-50 as possible.
  • Test-Mode Requirements When the chip is in test mode, the circuit for many of these clocks is bypassed (see register description below). Additionally, the 16.9 and 24.5 MHz clocks are directly controlled without the intervening logic or 64K state counters.
  • the circuit C has the ability to disable various blocks of logic from consuming very much current. It also can be in shut-down mode, wherein both oscillators are disabled, and in suspend mode, wherein both oscillators are disabled and most of the pins become inaccessible. Control for disabling various blocks and placing the circuit C in shut-down mode comes from programmable register PPWRI; suspend mode is controlled by the SUSPEND# pin (see Fig. 6). Suspend mode causes the I/O pins to change behavior as shown in the table:
  • the pins SA[11:6], SBHE#, DAK[7:5,3], and SD[15:8] have weak internal pull-up resistors; however, the power to these resistors can be disabled via IV ⁇ RI[PUPWR] SO that they do not drive voltage onlo the ISA bus during suspend mode.
  • a controlled buffer is provided internal to the pin. In suspend mode, this buffer is disabled and its output (the input to the circuit C) is grounded.
  • Register PPWRI is a 7-bit register used to reduce the power being consumed by various blocks of logic within the circuit C and place it into shut-down mode.
  • the table set forth in Fig. 26 describes what happens when various bits in register PPWRI are cleared or set. Each of the bits in PPWRI are defined such that they are low when in low-power mode.
  • the 100 microsecond timers referenced in Fig. 26 consist of two conventional timer circuits within logic block 158 (Fig. 12), each driven by ICLK100K (divide by 10). One of the timers is used to count out the going-to-low-power-state time and the other is used to count out the coming-out-of-low-power-state time. These same timers may be used for suspend mode as well.
  • register PPWRI is schematically illustrated as register 472.
  • Shut-down mode is activated in response to each bit of register 472 being cleared to a logic low state.
  • the status of each of the bits from register 472 is provided as an inverted input to ANDGATE 474, which provides an output to timer 476 when all bits are low.
  • an output is provided at line 478 which disables (grounds) oscillator 16 via ANDGATE 480, provided that none of the bits from register
  • the status of the PWR24 bit controls power to oscillator 18 via gate 468.
  • Modular power modes are implemented in response to the status of individual bits within register 472 (PPWRI).
  • PWRRI the status of bit 4
  • the status of bit 4 is provided as an input to counter circuit 484, ORGATE 486 and ANDGATE 488.
  • These circuit elements provide a synthesizer suspend request signal 490 followed by a delayed synthesizer suspend in progress signal 492 which is also used to disable the synthesizer clock signals via gate 493.
  • a similar delay and logic circuit 494 is provided for the local memory module.
  • the remaining bits of register 472 control the status of various modules and portions of modules within the circuit C, as described elsewhere in this specification. Logic implementation of these functions is schematically illustrated in Fig. 24a.
  • Fig. 24b is a flow chart schematically representing the response of circuit C to suspend mode activation and deactivation.
  • Fig. 24c is a flow chart illustrating the register-controlled low-power modes.
  • Fig. 27 shows how the oscillators, clocks, and signals respond to the SUSPEND# pin. Note that in Fig. 27 the ICLK24M signal is illustrated as being stabilized, which is optional but not required.
  • ISUSPRQ is logically ORed into I2LSUSPRQ and I2SSUSPRQ from the shutdown logic.
  • ISUSPIP is logically ORed into I2LSUSPIP (see Fig. 26) If the circuit C is already in shut-down mode when SUSPEND# is asserted, then: (i) the I/O pins are changed to match the requirements of suspend mode shown above; and (ii) the codec analog circuitry is placed into low-power mode if it is not already in that mode.
  • the CODEC analog circuitry is placed in low-power mode whenever SUSPEND# is active by providing the ISUSPIP signal on line 461 to ANDGATE via invertor 465.
  • the logic waits for greater than 80 microseconds before stopping the clocks to the rest of the circuit C and disabling the oscillators.
  • Clock signals ICLK16M and ICLK24M from oscillators 16 and 18, respectively, are disabled (as well as re-enabled) such that there are no distortions or glitches; after they go into one of their high phases, they never go back low.
  • SUSPEND# is deactivated, the oscillators are re-enabled, but clock signal ICLK16M does not toggle again until oscillator 16 has stabilized, 4 to 8 milliseconds later; this occurs after the oscillator 16 has successfully clocked 64K times.
  • the ISUSPRQ# signal is de-asserted to allow the logic in the rest of the circuit C to operate. All of the ISA bus pins, and many of the other pins, are disabled while ISUSPRQ# is active. It is not possible to access the circuit C via the ISA bus while ISUSPRQ# is active; therefore, software must delay for about 10 milliseconds after SUSPEND# is released before attempting to access the circuit C.
  • ISUSPIP suspend in progress
  • PCARST# is an internally generated signal which forces most memory functions in the circuit C ⁇ registers, latches, flip-flops, bits of RAM ⁇ into their default state. While it is active, all ISA-bus activity is ignored and no local memory cycles take place.
  • PCARST# is generated as a logical OR of the reset from the RESET pin and the software reset (PCCCI) described below. The RESET pin is required to be asserted for at least 10 milliseconds, which provides enough time for the oscillators to stabilize before PCARST# becomes inactive. If the software reset occurs when the IC is in shut-down mode, PCARST# becomes active and the oscillator stabilization logic counts through 64K states before releasing PCARST#.
  • PCARST# becomes active for 256 16.9 MHz clocks (about 15 microseconds). While PCARST# is active, all the 16.9 MHz and 24.5 MHz clocks are passed onto the other blocks in the IC; however, the various divide-down clocks shown in the CLOCKS section above do not toggle because the divide-down circuitry used to generate them is also reset.
  • RESET-Pin-Only Functions The following items are affected by the RESET pin, but not by PCARST#: the state of the I/O pins that are latched at the trailing edge of reset, the PCSNI, PSRPAI, and PNPSM[1:0] registers and state machine which have there own specific reset requirements, the test control register (ITCI), and control for the oscillator stabilization logic (which is used to count out software resets). All other functions are reset into their default state.
  • the Software Reset. PCCCI The software reset holds PCARST# active while the 16.9 MHz oscillator is forced to clock through either 256 states (if not shut-down is in progress or if ITCI.BPOSC] is active) or 64K states.
  • Synthesizer RAM block After PCARST# becomes inactive, the synthesizer logic (see discussion below) will sequence through all 32 voice-RAM blocks to clear them out. This will take about 22 microseconds.
  • RES or RESERVED specifies reserved bits. All such fields must be written with zeros; reads return indeterminate values; a read-modify-write operation can write back the value read.
  • This register is used to emulate AdLib operation. This register is written by AdLib application software and is read by AdLib emulation software in order to program the internal synthesizer to duplicate the AdLib
  • this is a read-write register with different values for the read and write addresses.
  • UASBCI[0] 0
  • writes to this register are latched but not readable; reads provide the following status information:
  • This register performs AdLib-compatibility functions based on the state of various bits as follows:
  • AdLib timer emulation bits are written. All of these bits also default to low after reset. Note that when the MSB is set high, the other bits do not change. When IVERI[RRMD] is active, the following bits are readable from this address, regardless of the state of UASBCI[0] or UACWR.
  • This simple read-write register causes an interrupt.
  • UDCI DMA Channel Control Register
  • General purpose register 1 consists of two 8-bit registers, UGP1I IN and UGP1I OUT, used for AdLib, Sound Blaster, and MPU-401 compatibility; it does not control any signals of the circuit C. They are accessed by a combination of this address (UHRDP) and the address specified by UCMPTI[1:0] and UGPA1I (the emulation address).
  • UGP1I IN is written via the emulation address and read via UHRDP.
  • UGP1I OUT is read via the emulation address and written via UHRDP. Accesses to these registers via the emulation address result in interrupts (if enabled). Note: see rV ⁇ RI[HRLEN#] for a description of how access to this register is restricted.
  • General purpose register 2 consists of two 8-bit registers, UGP2I IN and UGP2I OUT, used for AdLib, Sound Blaster, and MPU-401 compatibility; it does not control any signals of the circuit C. They are accessed by a combination of this address (UHRDP) and the address specified by UCMPTI[3:2] and UGPA2I (the emulation address).
  • UGP2I IN is written via the emulation address and read via UHRDP.
  • UGP2I OUT is read via the emulation address and written via UHRDP. Accesses to these registers via the emulation address result in interrupts (if enabled). Note: see rV ⁇ RI[HRLEN#] for a description of how access to this register is restricted.
  • This register controls the address through which general-purpose register 1 is accessed.
  • the 8 bits written become bits [7:0] of the emulation address for UGPII; emulation address bits [9:8] are specified by ICMPTI[1:0].
  • This register controls the emulation address through which general-purpose register 2 is accessed.
  • the 8 bits written become bits [7:0] of the emulation address for UGP2I; emulation address bits [9:8] are specified by ICMPTI[3:2]. Note: see IVERI[HRLEN#] for a description of how access to this register is restricted.
  • This register specifies the indexed address to a variety of registers within the circuit C.
  • the data ports associated with this index are I8DP and I16DP.
  • SVSR[7] When in auto-increment mode (SVSR[7]), the value in this register is incremented by one after every I/O write to either I8DP or I16DP (but not
  • 8-bit I/O accesses to P3XR+5 are used to transfer 8-bit data.
  • 16-bit I/O accesses to P3XR+4 are used to transfer 16-bit data. It is also possible to transfer 16-bit data by using an 8-bit I/O access to P3XR+4 followed by an 8-bit access to P3XR+5.
  • the index associated with these ports is IGIDXR.
  • IGIDXR When in auto-increment mode (SVSR[7]), the value in IGIDXR is incremented by one after every I/O write to either I8DP or I16DP (but not 8-bit writes to the low byte of I16DP, P3XR+4).
  • Timer 1 Load Value This is the value that will be loaded into AdLib timer 1 whenever: (1) UADR[STRT1] is high and this timer increments past OFFh; or (2) UADR[STRT1] is low and there is a rising clock edge of this timer's 80 microsecond clock (16.9344 MHz divided by 1344). Reads of this register provide the preload values, not the actual state of the timer.
  • Timer 2 Load Value This is the value that will be loaded into AdLib timer 2 whenever: (1) UADR[STRT2] is high and this timer increments past OFFh; or (2) UADR[STRT2] is low and there is a rising clock edge of this timer's 320 microsecond clock (timer l's clock divided by 4). Reads of this register provide the preload values, not the actual state of the timer.
  • IDECI Decode Control Register
  • PCSNBR Card Select Number Back Door
  • CSN card select number
  • PNP Index Address Register PNP Index Address Register
  • PNPWRP PNP Data Write Port
  • PNPRDP PNP Data Read Port
  • Address is relocatable between 003h and 3FFh, read only.
  • Address is set by (1) setting the PIDXR register to 00h, and (2) writing the byte that represents bits 9 through 2 to PNPWRP; bits 0 and 1 are both always assumed to be high (1 1).
  • PNP registers are indexed with PIDXR and accessed via
  • PSRPAI PNP Set Read Data Port Address Register
  • PNPRDP PNP Isolate Command Register
  • Reading this register will cause the circuit C to drive a specific value-based on data read out of the PNP serial EEPROM 78 ⁇ onto the ISA bus 156 and observe the data back into the circuit C to see if there is a difference. This can result in a "lose-isolation" condition and cause the PNP state machine to go into sleep mode. If the circuit C is in PNP-system mode (see the POWER-UP PNP MODE SELECTION section), then it is assumed that there is no serial EEPROM 78 and no data will ever be driven on the bus for reads from this register; in PNP-system mode, reads of PISOCI always cause the circuit C to "lose” the isolation and go into sleep mode. Reads from this register are only allowed when the PNP state machine is in the isolation state.
  • PCCCI PNP Confirguration Control Command Register
  • PWAKEI PNP WAKErCSNl Command Register
  • This register provides the data from the local memory control module 8 (LMC) that has been read out of the PNP serial EPROM 78. Note: if the serial EEPROM 78 has been placed into direct control mode (PSEENI[0]), then the wake command must be executed before access via PRESDI is possible. This command is only valid when the PNP state machine is in the configuration state.
  • LMC local memory control module 8
  • a high on bit 0 of this register indicates that the next byte of PNP resource data is available to be read; all other bits are reserved.
  • This command is only valid when the PNP state machine is in the configuration state.
  • PCSNI PNP Card Select Number Register
  • this register When the PNP state machine is in the isolation state set up the CSN for the circuit C and send the PNP state machine into configuration mode. When the PNP state machine is in configuration mode, this register is readable, but not writeable.
  • PIDNI Logical Device Number Register
  • AUDIO functions, synthesizer, codec, and ports; 01h the external (CD-ROM) interface. This register can only be accessed when the PNP state machine is in the configuration state.
  • PNP Audio Activate Register PUACTI
  • PNP Audio I/O Range Check Register PNP Audio I/O Range Check Register
  • the following table shows all the various PNP registers that control the address of blocks of I/O space within the circuit C.
  • the registers provides data back to standard PNP software concerning the type of interrupts supported by the circuit C. It will always be read back as 02h to indicate edge-triggered, active-high interrupts.
  • PNP Audio IRQ Channel 2 Select Register PNP Audio IRQ Channel 2 Select Register (PUI2SI).
  • PNP Audio IRQ Channel 2 Type Register PNP Audio IRQ Channel 2 Type Register
  • the registers provides data back to standard PNP software concerning the type of interrupts supported by the circuit C. It will always be read back as 02h to indicate edge-triggered, active-high interrupts.
  • PNP Audio DMA Channel Select Registers PUD1SI. PUD2SI.
  • bits[3:0] are used to directly control the serial EEPROM 78.
  • Bits[7:4] are read-only status bits that show the state of various control signals that are latched at the trailing edge of RESET (see the PIN SUMMARY section in the general description above for details). This register is only accessible when the PNP state machine is in the configuration state.
  • This register is used to disable clocks and enable low-power modes for major sections of the circuit C. Writes to this register are accomplished differently than most.
  • the MSB of the data, ENAB is used to specify whether ones or zeros are to be written; for bits[6:0], a high indicates that ENAB is to be written into the bit and a low indicates that the bit is to be left unmodified.
  • ENAB the MSB of the data
  • a high indicates that ENAB is to be written into the bit
  • a low indicates that the bit is to be left unmodified.
  • the circuit C enters shut-down mode and the 16.9 MHz. oscillator 16 becomes disabled.
  • the 16.9 MHz oscillator 16 is re-enabled. After being re-enabled, the 16.9 MHz clock will require 4 to 8 milliseconds before becoming stable.
  • This register is only accessible when the PNP state machine is in the configuration state.
  • a high on bit 0 of this register activates the external interface (e.g., CD-ROM) function; all other bits are reserved.
  • the external interface e.g., CD-ROM
  • all other bits are reserved.
  • the external function CD-ROM address space is not decoded; the external function (e.g.,
  • CD-ROM interrupt and DMA channels are not enabled.
  • PRRCI PNP CD-ROM I/O Range Check Register
  • the registers provides data back to standard PNP software concerning the type of interrupts supported by the circuit C. It will always be read back as 02h to indicate edge-triggered, active-high interrupts.
  • Fig. 44 depicts, in block diagram format, the various features and functions included within the CODEC module device 505.
  • the CODEC device 505 includes on-chip memory, which is preferably configured as 16-sample, 32-bit wide, record and playback FIFOs, 538, 532, with selectable thresholds capable of generating DMA and I/O interrupts for data read and write operations.
  • the Mixing and Analog Functions block 510 includes left and right channel analog mixing, muxing and loopback functions. Left channel and right channel stereo, and single channel mono, analog audio signals are summed in Mixing and Analog Functions block 510. These mono and stereo audio signals are output from the CODEC 505 for external use, on analog output pins 522.
  • Inputs to the Mixing and Analog Functions block 510 are provided from: external Analog Input Pins 520, analog output from a Synthesizer Digital-to-Analog Converter block 512, which is external to CODEC 505 or may be a processing block within CODEC 505, and from the
  • Playback Digital-to-Analog Converter block 514 Analog audio output from Mixing Analog Functions block 510 is provided to record Analog-to-Digital Converter 516 block.
  • Synthesizer Digital-to-Analog Converter block 512 receives Digital data from a synthesizer 524. Throughout this description, it should be understood that synthesizer 524 is an external device, or may be integrated onto the same monolithic integrated circuit as the CODEC device 505.
  • the record path for the CODEC 505 is illustrated in Fig. 44, with analog audio data being output from Mixing and Analog Functions block 510 and provided to record Analog-to-Digital Converter (ADC) 516 block to be converted to 16-bit signed data.
  • ADC Analog-to-Digital Converter
  • the selected sample rate for record ADC 516 affects the sound quality such that the higher the sample rate for record ADC 516, the better the recorded digital audio signal approaches the original audio signal in quality.
  • ADC 516 Analog-to-Digital Converter
  • the function and operation of a fourth order cascaded delta-sigma modulator, preferably implemented in record ADC 516 block, is described in application Serial No. 08/071,091, filed 12/21/93, entitled "Fourth Order Cascaded Sigma-Delta Modulator," assigned to the common assignee of the present invention.
  • the converted digital audio data is then sent to format conversion block 536 which converts the 16-bit digital audio data to a preselected data format.
  • the formatted digital data is then sent to 32-bit wide record FIFO 538 as 16-bit left and 16-bit right channel data for further submission to register data bus 526 for output to external system memory (not shown) or to off-chip local memory record FIFO 530 (LMRF).
  • the playback path for CODEC 505 includes digital data, in a preselected data format, being sent to 32-bit wide playback FIFO 532 from the off-chip local memory playback FIFO (LMPF) 528 or from external system memory (not shown), via the register data bus 526.
  • LMPF off-chip local memory playback FIFO
  • LMRF 530 and LMPF 528 may be discreet off-chip FIFOs, or may be dedicated address space within off-chip local memory 110 configured as FIFOs.
  • the formatted data is then input to format conversion clock 534, where it is converted to 16-bit signed data.
  • the data is then sent to the CODEC playback DAC 514, where it is converted to an analog audio signal and output to the input of Mixing and Analog functions block 510.
  • a Serial Transfer Control block 540 provides serial-to-parallel and parallel-to-serial conversion functions, and loop back capability between the output of 32-bit wide record FIFO 538 and the input of 32-bit wide playback FIFO 532. Also, synthesizer serial input data port 542 (Fig. 44), which receives serial data from synthesizer 524, communicates with serial Transfer Control block 540. Serial Transfer Control block 540 is connected to record FIFO 538, playback FIFO 532, off-chip local memory 110 (or, LMRF 530 and LMPF 528) via local memory control 790, synth serial input data port 542, and to External Serial Interface.
  • Bi-directional serial data communication over External Serial Interface 544 is provided to Serial Transfer Control block 540 (also see Fig. 49).
  • External serial interface 544 may be a UART, or other device that provides either synchronous or asynchronous controlled serial data transfers.
  • External Serial Interface 544 (Fig. 44) can be connected to communicate serially with an external digital signal processor (DSP) for off-chip generation of special audio effects, or with any other device capable of bi-directional serial data communication.
  • External serial interface 544 can also connect to and provide a serial data path from external synthesizer serial input port 542. Bi- directional data transfer is also accomplished via data path 550 between serial transfer control 540 and local memory control 790.
  • the CODEC 505 includes A/D conversion functions in the record path and D/A conversion functions in the playback path. These conversion functions are capable of operating independently of each other at different sample rates so A/D and D/A operations may be performed simultaneously, each having a different sample rate and data format.
  • Loop access circuitry in mixing block 606) provides a capability to sample an audio signal and perform an A/D operation at one rate, digitize the signal, and then playback the digitized sample back through the playback D/A at a different sample rate.
  • the block designated Counters, Timers and Miscellaneous digital functions 518 includes circuitry which controls: the A/D and D/A conversions in CODEC 505, format conversion blocks 532, 536, and data transfer functions.
  • CODEC 505 operation allows the following data formats: 8-bit unsigned linear; 8-bit ⁇ -law; 8-bit A-law; 16-bit signed little endian; 16-bit signed big endian; or 4-bit 4:1 IMA ADPCM format.
  • Fig. 45 the left channel of CODEC analog mixer 606 of Mixing and Analog functions block 510 is depicted.
  • the layout of the right channel of mixer 606 is identical to the left channel, but is not shown in Fig. 45. Except for minor signal name modifications, all descriptions of left channel signals and functions are applicable to the right channel.
  • the CODEC analog mixer 606 has more programmable features and more functions than prior CODEC audio devices.
  • Each of the five input lines to the analog mixer 606 in Fig. 45 includes a programmable attenuation/gain control circuit 608, 610, 612, 614 and 696, respectively. All inputs and outputs to and from analog mixer 606, are stereo signals, except for input MONOIN 690 and output MONOOUT 668, which are mono signals. The choice of mono or stereo audio signal inputs or outputs is also selectable.
  • Each of the triangle blocks depicted in Fig. 45 represents a programmable attenuation/gain control circuit.
  • the registers that control the respective attenuation/gain control circuits and the attenuation/gain range for that circuit are identified in Fig. 45 next to the respective triangle block, and are located in the Registers block 566 in Fig. 50. The description and address of each of these registers is described below. Individual bits in these registers are capable of being modified as described in application Serial No.
  • Fig. 45a The range of attenuation values for these registers are shown in Fig. 45a.
  • the value stored in each attenuation/gain control register is used to provide the selected gain or attenuation value to CODEC control logic in the
  • Block 734 (Fig. 47) explained below.
  • the amplitude of the analog audio signal input to the respective attenuation/gain circuit is controlled by the value stored in the respective attenuation/gain control register.
  • the CODEC 505 is designed to be generally register-compatible with the CS4231 (Modes 1 and 2), with the AD1848 and other prior art.
  • An indirect addressing mechanism is used for accessing most of the CODEC registers. In Mode 1 (discussed below), there are 16 indirect registers; in
  • Mode 2 (discussed below), there are 28 indirect registers; and in Mode 3
  • RES or RESERVED specifies reserved bits. All such fields must be written with zeros; reads return indeterminate values; a read-modify-write operation can write back the value read.
  • CODEC INDEXED DATA PORT CDATAP
  • PLAYBACK and RECORD DATA REGISTERS (CPDR, CRDR)
  • Data written to this address is loaded into the playback FIFO. Data read from this address is removed from the record FIFO. Bits in Status Register 1 indicate whether the data is the left or right channel, and, for 16- bit samples, the upper or lower portion of the sample. Writes to this address when either the playback FIFO is in DMA mode or the playback path is not enabled (CFIG1I) are ignored; reads from this address when either the record FIFO is in DMA mode or the record path is not enabled (CFIG1I) are ignored.
  • This register specifies the sample rate (selects which of the two oscillator is to be used and the divide factor for that oscillator), stereo or mono operation, linear or companded data, and 8 or 16 bit data. It can only be changed when the mode change enable bit (CIDXR[6]) is active.
  • this register controls both the playback and record paths.
  • bits[3:0] of this register controls both the record and playback sample rate (i.e., they must be the same) and bits[7:4] specify the state of the playback-path data format.
  • this register controls only the playback path; the record sample rate is controlled by CRDFI.
  • registers collectively provide the 16-bit preload value used by the playback sample counters.
  • CUPCTI provides the upper preload bits [15:8] and CLPCTI provides the lower preload bits [7:0]. All 16 bits are loaded into the counter during the write of the upper byte; therefore, the lower byte should be written first; however, if only the low byte is written and the counter underflows, the new value will be placed into the timer. Reads of these registers return the value written into them, not the current state of the counter. In mode 1, this register is used for both playback and capture; in modes 2 and 3 it is used for playback only.
  • registers collectively provide the 16-bit preload value used by the general purpose timer. Each count represents 10 microseconds (total of 650 milliseconds).
  • CUTIMII provides the upper preload bits [15:8] and CLTIMI provides the lower preload bits [7:0]. Writing to CLTIMI causes all 16 bits to be loaded into the general purpose timer. Reads of these registers return the value written into them, not the current state of the counter.
  • This register provides additional status information on the FIFOs as well as reporting the cause of various interrupt requests.
  • Each of the TIR, RFDI, and PFDI bits are cleared by writing a 0 to the active bit; writing a 1 to a bit is ignored; these bits can also be cleared by a write of any value to CSRIR.
  • Bits[3:0], the overrun-underrun bits, are cleared to a low by reading CSRIR; these bits are also cleared when the mode change enable bit in CIDXR goes from high to low.
  • CUPCTI provides the upper preload bits [15:8]
  • CLRCTI provides the lower preload bits [7:0]. All 16 bits are loaded into the counter during the write of the upper byte; therefore, the lower byte should be written first; however, if only the low byte is written and the counter underflows, the new value will be placed in the timer. Reads of these registers return the value written into them, not the current state of the counter.
  • This 8-bit register specifies the playback frequency when variable- frequency-playback mode has been enabled via CFIG3I[2].
  • the playback frequency will be PCS/(16*(48+CPVFI)), where PCS is the frequency of the oscillator selected by CPDFI[0].
  • the 16.9 MHz oscillator provides a range from about 3.5 KHz to 22.05 KHz; the 24.5 MHz oscillator provides a range from about 5.0 KHz to 32 KHz. It is not necessary to set CIDXR[MCE] when altering the value of this register.
  • control register CLICI 604 controls multiplexer (MUX) 602 such that only one of four analog audio signals pass through MUX 602 and attenuation/gain control circuit 664. If not muted by attenuation/gain control circuit 664, the selected signal is then provided to either left record ADC 666, or looped back through attenuation/gain control circuit 606 to be summed in playback mixer 678 with the output of left playback DAC 680.
  • MUX multiplexer
  • loop back is accomplished over loop back path 676, which provides a loop back path for system test and dub-over capability so that in playback mode, MICL 684, LINEINL 682, AUX1L 686, or left synthesizer DAC 692 output signals may be superimposed over audio signals coming from the output of left playback DAC 680.
  • This provides a Karioke-type capability with stored audio signals coming from left playback DAC 680.
  • control register CFIG3I[SYNA] 607 is used to control left synth DAC MUX 694 to select between analog inputs AUX1L 686 and left synthesizer DAC 692.
  • the selected analog audio signal then passes to the input of MUX 602 and to attenuation/gain control circuit 612.
  • the output of attenuation/gain control circuit 612 is then input to main mixer 698 to be summed with all other non-muted analog audio input signals available at the input to main mixer 698.
  • Main mixer loopback path 677 provides the output of main mixer 698 to the input of MUX 602.
  • Main mixer 698 output is also provided to attenuation/gain control circuit 674 for further submission to mono mixer 672, as LEFTOUT, where it is summed with analog output RIGHTOUT 616 from the right channel mixer (not shown).
  • Signals LEFTOUT and RIGHTOUT are summed in mono mixer 672 and then sent through mute control 604 to be available as analog output signal MONOOUT 668.
  • Signal LEFTOUT is also input to attenuation/gain control circuit 602. If not muted, LEFTOUT is available as an analog output left channel stereos signal LINEOUTL 670.
  • the analog audio input signal MONOIN 690 passes through attenuation/gain control circuit 696 and is available to main mixer 698 as an input signal, and as an analog mono input signal 618 to the right channel main mixer (not shown).
  • the CODEC 505 includes circuitry to ensure that the amplitude of each respective analog audio signal in analog mixer 606 is maintained until the signal attains a nominal value. This is accomplished by zero detect circuit 715. Updated attenuation/gain control information is not loaded into the respective attenuation/gain control register until the analog audio signal that is to be acted on with the new attenuation/gain control value either crosses zero volts 714 (Fig. 46) with respect to a reference voltage, or until a time-out count is reached by 25 millisecond timer 718 which will result in a default condition causing the respective attenuation/gain control register in Registers block 566 (Fig. 50) to be loaded with the new gain/attenuation control value.
  • the attenuation/gain control circuit 710 shown within dotted line in Fig. 47, is provided for each attenuation/gain control register in Registers block 566 of Fig. 44.
  • there are sixteen attenuation/gain control registers (CLCI, CLICI, CRICI, CLAXII, CRAXII, CLAX2I, CRAX2I, CLDACI, CRDACI, CLLICI, CRLICI, CLMICI, CRMICI,
  • CLOAI, CROAI and CMONOI which may be written to change the gain or attenuation control values stored therein, which value is in turn is used to change the amplitude of the analog audio signal being processed by the particular attenuation/gain control register being written to.
  • more or less attenuation/gain control registers may be implemented.
  • Register Select Decode block 716 latches the new attenuation/gain control value into gain latch 730. After decoding the write to one of the attenuation/gain control registers, Register Select Record block 716 sends an enable to 25 millisecond timer block 718 and 100 To 300 Microsecond block 720 to initiate a power-up. Power is then provided for 100 to 300 microseconds to each of the Near Zero Detect blocks 732, by Comparator
  • Power-On Control block 738 enabled by 100 to 300 microsecond block 720.
  • the 25 millisecond timer block 718 utilizes ICLK3K, the 3.15 KHz clock, to count to 80.
  • the timing in 100 to 300 Microsecond timer block 720 is accomplished by the logic therein waiting for two edges of 3.15 KHz clock, ICLK3K.
  • the Near Zero detect block 732 Once powered, the Near Zero detect block 732 generates a strobe when the audio input signal 740 approaches nominal voltage.
  • the zero detect logic in each Near Zero Detect block 732 may be implemented with comparators, or other circuits capable of providing an output signal whenever the input audio signal 740 is equal to a predetermined reference voltage.
  • the zero detect strobe is used to latch the new attenuation/gain value into latch
  • the zero detect circuitry 732 will remain powered until the fixed 25 millisecond timer 718 completes its count.
  • An analog reference voltage is used such that when VCC is 5 volts, the value of AREF is 0.376 times VCC, nominal. When VCC is 3.3 volts, the value of AREF is 0.303 times VCC, nominal. AREF is capable of driving up to 250 microamps without degradation and can be placed into high-impedance mode, controlled by CMONOI[AR3S].
  • the zero detect circuit 715 minimizes "zipper" noise or other audible discontinuities when input signal 740 is to be increased or decreased in amplitude. By powering up the near zero detect circuits 732 only when an attenuation/gain register is written to, unnecessary noise, from comparators or other voltage detect circuits in Near Zero Detect block 732 switching every time a zero crossing is sensed is eliminated.
  • Fig. 46 by increasing the gain at input signal zero crossing 714, signal discontinuity 710 is eliminated.
  • input signal 740 changes amplitude at zero crossing 714 is output from zero detect circuit 715 as output signal 736 (Fig. 47), and continues with its new amplitude along curve 712 (Fig. 46).
  • All programmable attenuation/gain control circuits in CODEC 505 include zero crossing detect circuitry 715.
  • Zero crossing circuit 715 performs identically for each attenuation/gain control register in Registers block 566 (Fig. 50).
  • An additional noise management feature of CODEC 505 is used to suppress noise on power-up. Audible glitches from audio outputs LINEOUT 670 and MONOOUT 668 (Fig. 45) are suppressed when power is being applied or removed from CODEC 505, or when low-power mode is entered or exited. During all power-up and power-down phases, CODEC 505 output amplifiers in mute circuits 602 and 604 (Fig. 45) are muted.
  • digital operations occur on the rising edge of the 16.9 MHz system clock, and analog operations are performed on the falling edge of the system clock, or at some other time prior to the next rising edge of the system clock.
  • digital operations inherently produce noise which must be attenuated as much as possible before analog operations are performed.
  • Inherently noisy digital operations include, RAM reads, precharging a bus and performing an addition.
  • Analog functions require a quiet supply and ground. For example, a comparator requires a low level noise background to be able to detect a one millivolt level to achieve a proper compare.
  • the record and playback paths of CODEC 505 are independently programmable to provide a different sample rate for playback and record.
  • a continuously variable rate playback mode is provided for playback DAC 514 (Fig. 44), which includes a choice of two ranges of sample clock rates ranging from 3.5 to 22.05 KHz or from 5.0 to 32.00 KHz. Each sample rate range contains 256 incremental clock rates.
  • the playback frequency for playback DAC 514 can be continuously varied over 256 steps, resulting in smooth transitions between audio sample rates which produces high quality sounds.
  • the data sample rate had to be increased and interpolated, then the rate increased again and the signal interpolated again to achieve the desired sound and transition between sample rates. This required excessive processor intervention.
  • an analog audio signal may be sampled and converted to digital by record ADC 516 at one rate, then played back through playback
  • CD audio data being converted to analog through playback DAC 514 at 44.1 KHz, then being processed through record ADC 516 circuitry and made available as serial or parallel digital audio data that can be recorded by external audio equipment on DAT at 48 KHz.
  • CD compact disc
  • DAT digital audio tape data
  • the continuously variable playback frequency mode can be selected to incrementally increase the playback sample rate in
  • CODEC 505 without external processor intervention for up-sampling and interpolation.
  • the frequency range is preferably selected by control register CPDFI[0] in the Registers block 566 (Fig. 50), which is programmable to be able to select, at any time, the playback frequency to be used, and thus, which clock is to be used. See Fig. 48. This requires some external processor intervention to load the frequency select instruction, but not as much overhead as previous audio systems. For software compatibility with existing systems, however, the playback-variable frequency mode is different than the 14 sample rate mode operation of playback DAC 514 and record ADC 516.
  • Oscillators with external crystals 560 are used to generate the range of frequencies for the playback variable frequency mode.
  • two external crystals in conjunction with on-chip circuitry are used to produce two clocks, one being at 24.576 MHz and one being at 16.9344 MHz.
  • Selecting the 16.9 MHz clock with select logic circuit 762 will provide a 256 step frequency range from between 3.5 KHz to 22.05 KHz. Selecting the 24.5 MHz crystal will provide a 256 step frequency range of 5.0 to 32.00 KHz.
  • the chosen crystal oscillator is divided by three or more to create an X256 clock
  • sample rate times 256 The X256 clock is then divided by four to create the X64 clock (sample rate times 64).
  • the X64 clock repeats an 8-cycle, aperiodic pattern which produces the frequencies within the selected range.
  • the various clocks, generated by the divide-down logic in Fig. 48, are used to change the sample rate (pitch) during playback through the playback DAC
  • This capability of continuously variable playback sample rates can be used with any DAC, and is not limited to the ⁇ - ⁇ playback DAC 514 described herein.
  • Table C1 describes the formulas preferably used to select the sample frequency for each range.
  • Table C2 illustrates how the first ten clock frequencies in one range are generated using the 16.9 MHz external crystal oscillator.
  • Table C3 illustrates the preferred way of using the X256 clock to create the wave forms illustrated Table C2.
  • Fig. 48 illustrates the clock select circuitry which provides the independently selectable sample rates for the record and playback paths of CODEC 505, and the continuously variable playback sample rates for playback DAC 514.
  • Playback DAC 514 and record ADC 516 are each capable of operating at one of 14 different sample rates ranging from 5.5 to 48.0 KHz. These sample rates are preferably derived from the two external crystal oscillators 560 (Fig. 50).
  • Select logic circuitry 762 in CODEC 505 controls each 2:1 MUX 766 to select the output of either the 16 MHz or 24 MHz oscillator, depending on which sample rate is selected.
  • the status of control registers CPDFI[0], CPDFI[3:1], CRDFI[0], CRDFI[3:10], CFIG3I[2] and CPVFI[7:0] controls the divide-down logic to be used to generate a selected clock signal.
  • Clock CP256X is used to control operations in the playback DAC 514.
  • Clock CP64X is used to control operations in the semi-digital filter 804 (Fig. 51).
  • CODEC 505 includes logic and control for transfers of serial digital audio data, including parallel-to-serial (PTS) conversion blocks 788, 789 and serial-to-parallel (STP) conversion logic 782.
  • a record multiplexer (MUX) 784 is controlled by control register ICMPTI[8:6]. If bits [8:6] equal zero, MUX 784 selects parallel digital audio data from record ADC 516. If equal to one, MUX 784 selects the output of STP conversion logic 782. In the record path, the output of record MUX 784 is provided to the CODEC record FIFO 538. Referring to Fig. 44, the output of record FIFO 538 is available on register data bus 526; at local memory control 790 (which may transfer the data to off-chip local memory 110, Fig.
  • a playback MUX 794 is controlled by control registers ICMPTI[8:6] and LMFSI[PE]. If ICMPTI[8:6] is not equal to one, or if LMFSI[PE] equals one, then audio data from STP block 782 is available at the input to playback FIFO 532. Otherwise, data from register data bus 526 is available at playback FIFO 532.
  • data from local memory control 790 (which may obtain data from local memory 110, Fig. 44) is provided to playback FIFO 532 via playback MUX 794. Audio data from synth DSP 796 or record FIFO 538 may also be available at the input of playback MUX 794.
  • the value of ICMPTI[8:6] determines the operation of serial transfer control MUXES 554 and 548.
  • Serial transfer control MUX 546 operation is controlled by the status of LMFSI[PE].
  • synthesizer DSP 796 may be an external device, or may be included in a synthesizer module on the same monolithic integrated circuit as the CODEC device 505 to increase the flexibility and speed of operation between the CODEC 505 and the synthesizer.
  • External serial interface 544 may be connected to a synthesizer DSP having a serial input and output (not shown) whereby that synthesizer DSP could receive serial data from, via Serial Transfer Control block 540, record FIFO 538, and could send serial data to, via Serial Transfer Control block 540, playback FIFO 532.
  • the record and playback MUXES 784 and 794, in the serial data transfer logic of CODEC 505 are preferably bit-stream multiplexers.
  • state machines are used to generate and/or operate on the control signals and clocks necessary to accomplish the transfers. See the description of control signals during serial data transfers, above.
  • Most transfers in Serial Transfer Control block 540 operate off a 2.1 MHz, 50 percent duty cycle clock, derived by dividing the 16.9344 MHz crystal oscillator by eight. Transfers from the synth DSP 796 to an external device utilize 32 clocks per frame, based on the synth DSP frame rate.
  • the STP logic blocks 782 are 16- bit slaves to the bit streams that drive them.
  • Each PTS converter blocks 788, 789 transfer operation brings in 16-bits of data to be shifted out serially.
  • the number of transfers, the data configuration, and the order of the data varies based on the transfer mode selected, discussed below.
  • the PTS blocks 788, 789 behave the same as that of 16-bit DMA transfers to the FIFOs, described below and depicted in Table C4 (e.g., if in 8-bit mono mode, there is one serial transfer for every two data samples, with the first sample being the LSBs and the second being the MSBs or, if in 16-bit stereo mode, there are two transfers for every sample received.)
  • the PTS blocks 788, 789 indicates that there is data ready to be transferred out by setting a flag.
  • the serial transfer control block 540 responds by generating a pulse, STSYNC (serial transfer sync) that is intended to initiate the flow of serial data, MSB first. After 16 bits are transferred, a clear pulse is sent to PTS blocks 788, 789 from the serial transfer control block 540 so new data can be loaded into the respective PTS block 788 or 789.
  • STSYNC serial transfer sync
  • Various operating modes can be selected by modifying the contents of a control register, ICPMTI in Registers block 566 (Fig. 50), to the selected mode of operation shown in Table C5.
  • the sample rate in these modes can be lower than 44.1 KHz. Otherwise, the first fourteen signals are processed at 44.1 KHz.
  • CODEC 505 only supports a sample rate of 44.1 KHz. In these two modes, if synth DSP 796 operates at other than 44.1 KHz, proper operation will not occur.
  • LMPF 528 (Fig. 44).
  • the LMPF 528 (Fig. 44).
  • the audio data is then output from playback FIFO 532, formatted (decompressed) to 16-bit signed data, as described in discussion of Format Conversion block 534 in Fig. 44, and then input to the playback DAC 514 as 16-bit signed data.
  • the data is then sent to the Mixing Analog
  • Functions block 510 which contains left and right analog mixers, discussed previously regarding description of Fig. 45.
  • 16-bit signed digital signals to record ADC 516 The 16-bit left and right channel stereo data from record ADC 516 is then formatted to a pre-selected format and sent to 32-bit wide record FIFO 538 for further submission to register data bus 526, then to external bus 562, then to external system memory (not shown) via DMA or I/O data transfers or to LMRF 530 (Fig. 44).
  • DMA data transfers occur between either the LMRF 530 (where LMRF 530 has been loaded with audio data from on-chip record FIFO 538) and the external system memory via external bus 562 or, directly between the on-chip record FIFO 538 and the external system memory.
  • CODEC 505 is capable of performing I/O between the external system memory and the CODEC on-chip record and playback FIFOs 538, 532, and also between the system memory and the off-chip LMPF 528 and LMRF 530, for improved system flexibility.
  • both the left and right channel stereo DACs in playback DAC 514 block are provided with the same audio data from playback FIFO 532.
  • control register CRDFI[4] being active low, preferably only data from the left stereo ADC in record ADC 516 block (data from right stereo ADC ignored) is processed and provided to the record FIFO 538.
  • only data from the right stereo ADC is provided to record FIFO 538.
  • Stop band and reject circuitry is used to eliminate signal reflections at multiples of f s , plus and minus the signal frequency.
  • the stop band rejection at 0.6 F s for 22 KHz is preferably greater than 75 dB. Stop band rejection is used in combination with analog filtering to eliminate high frequency images (reflections) during D/A conversions in playback DAC 514.
  • Oversampling in record ADC 516 is performed at 64 times the sample rate at a lower bit resolution.
  • the signal is then down-sampled and filtered in record ADC 516 until the desired resolution and sample rate, for instance,
  • Table C4 provides information regarding the number of audio data samples transformed per DMA transfer, and the number of cycles per DMA transfer for each 8-bit or 16-bit DMA transfer, depending on the type of DMA transfer selected. For example, in 8-bit DMA transfer mode, audio data formatted as 4-bit ADPCM mono audio data will transfer two 4-bit samples during one DMA cycle. In 16-bit DMA transfer mode, four 4-bit ADPCM mono samples will be transferred during one DMA cycle. During 16-bit DMA cycles, the first byte to playback FIFO 532 is assigned to bits [7:0] and the second byte bits [15:8]. Simultaneous record and playback (read and write) operation is provided.
  • the external system processor (not shown) reads the CODEC 505 status registers to determine if an I/O operation is needed and addresses CODEC 505 via Control Logic and External Bus Interface 568 to determine which area within CODEC 505 has requested data.
  • the external system control (not shown) can perform an I/O operation for data transfer to the playback or record FIFOs (532, 538), asynchronously. Error conditions for record FIFO 538 and playback FIFO 532 are shown in Table C6.
  • 32-bit record and playback FIFOs, 538, 532 preferably configured with 16-bits dedicated to left channel data and 16-bits to the right channel data, thresholds, or taps, on the record and playback FIFOs 538, 532 at the 0, 7, and 15 sample address, correspond to "empty,” "half-full” and "full.”
  • These addresses are monitored by control logic block 568 so a I/O interrupt request (IRQ) or DMA request (DRQ) can be generated (Mode 3 only, explained below) depending on the state of CODEC 505's record or playback FIFOs 538, 532. This operation is explained in greater detail, below.
  • Separate DRQ signals are capable of being generated for the record and playback FIFOs 538, 532.
  • a mode is provided that allows the playback DRQ to be shared so it can function as either the record or playback DMA request channel.
  • Systems lacking DMA capability may use I/O transfers instead.
  • the DMA transfer mode is specified in configuration control register CFIG1I of Registers block 566 (Fig. 50). If the record or playback paths are disabled (via CFIG1I [1:0]), after the associated DRQ request signal has become active, the audio data sample will continue to be transferred, while waiting for the acknowledge, as if the path were still enabled.
  • the playback path When the playback path is disabled, via CFIG1I [0], the playback audio is immediately muted and all samples remaining in playback FIFO 532 are allowed to shift out of FIFO 532 at the sample rate.
  • Off-chip local memory 110 (Fig. 44) is preferably used in conjunction with the on-chip playback and record FIFOs 532, 538.
  • local memory 110 is figured as a large record and a large playback FIFO, each with approximately 16-megabits of 8-bit addresses.
  • a 19-bit counter in CODEC Counters, Timers block 518 is programmed to select the size of the area in DRAM to form the respective LMPF 528 and LMRF 530, which can be configured to hold up to 512K samples. More or less audio sample memory for the LMPF 528 and LMRF 530, or local memory 110, may be configured depending on design and/or application requirements. It is preferable to use DRAM instead of SRAM due to lower cost and power requirements.
  • CODEC 505 includes a mode for performing interleaved DMA transfers of data between external system memory and the LMPF 528, and vice versa.
  • Two 16-sample counters in Counters, Etc. block 518 are provided, one for playback FIFO 532 and one for record FIFO 538.
  • the sample counters count the number of samples that go into or come out of each respective FIFO. Each counter decrements by one every sample period, except in ADPCM mode. After the counter reaches zero, an interrupt is generated, if not masked, and the counter is reloaded with the next value the counter is to decrement from.
  • the count value of the counters are programmed by way of record and playback count registers (CURCTI, CORCTI, CUPCTI and CLPCTI) in Registers block 566 (Fig. 50).
  • control register CSR3I in Registers block 566.
  • the CODEC playback counter can be made to decrement when a DMA transfer is made from external system memory to off-chip local memory 110, as well as when DMA transfers are made from external system memory to the on-chip record or playback FIFOs 538, 532.
  • Table C7 shows the relationship between the data format and the events causing the sample counters to decrement.
  • Table C8 identifies the events causing the sample counters to decrement, and the variables used in the preferable Boolean equations, below, which are used to generate the count enable inputs to the counters.
  • Table C9 shows the format by which audio data is provided to and received from the record and playback FIFOs 538, 532 of CODEC 505 from the prospective of an external system or microprocessor (not shown).
  • the letter “S” in Table C6 refers to “sample” and the number following the letter “S” refers to the sample number.
  • the letter “R” or “L” after the sample number refers to right or left channel stereo audio data.
  • the CODEC timers located in Counters and Timers block 518 (Fig. 44), are used to time certain external system functions, such as length of time to play an audio signal, etc. An interrupt is generated when the timer count is complete.
  • CODEC 505 preferably does not utilize a timer in this block for its functions, but having this capability for industry compatibility and expandability purposes is necessary.
  • the CODEC 505 can operate in one of three modes during playback or record.
  • the CODEC 505 is generally register compatible with present audio systems, by operating in modes 1 and 2.
  • An indirect addressing mechanism is used for accessing most of the CODEC registers, contained in Registers block 566 Fig. 50. In mode 1, there are preferably 16 indirect registers. In mode 2, there are preferably 28 indirect registers. In mode 3, which is unique to CODEC 505, there are preferably 32 indirect registers. These modes operate as follows:
  • the playback sample counter decrements when the playback path is enabled (CFIG1I[0]).
  • the record sample counter decrements when the record path is enabled (CFIG1I[1]), unless CFIG1I[2] and CFIG1I[0] are also enabled.
  • CODEC index address register, CIDXR[DTD] is set and the active path generates an interrupt (CSR3R[5:4]), then the respective path that requested the interrupt stops operating. That data path begins operation and the counter starts counting again once the interrupt or CIDXR[DTD] is cleared.
  • the DMA or I/O cycle control bits, CFIG1I[7:6] do not affect the sample counter's behavior.
  • MODE 3 Same as mode 2 operation, except the sample counters do not count when in I/O mode (CFIG1I[7:6]). Also, an enable is provided for each sample counter from configuration register, CFIG2I[5:4]. This is an enhanced mode, with independent record and playback path sample rates, record and playback programmable FIFO thresholds, additional analog mixer input enabled for synthesizer DAC audio signals, attenuation/gain controls for mixer 606 (Fig. 45) LINE/MONO outputs, and continuously variable programmable sample frequency mode (256 steps) in playback path.
  • a programmable 16-bit timer is provided in modes 2 and 3. This timer has approximately a 10 microsecond resolution and uses a 100 KHz clock, CLK100K. The timer is enabled by CFIG2I[6].
  • a programmable register pair in CODEC 505 specifies the 16-bit counter preset (CUTIMI and CLTIMI). The counter decrements every 10 microseconds until it reaches zero. At this point, the timer interrupt bit in Status Register 3 is set, the interrupt bit in Status Register 1 is set, and an interrupt is generated, if enabled via CEXTI[1]. The counter is reloaded with CUTIMI and CLTIMI values on the next timer clock.
  • the record and playback FIFOs 538, 532 include programmable thresholds, or taps, for signaling an IRQ or DRQ from or to the respective FIFO from external system memory. Threshold operation is as follows: a pointer tree at record and playback FIFOs, 538, 532, indicates, if equal to zero, that the address is empty of data, and if equal to one, that data is present.
  • the transition of the index pointer tree from a one (full) to a zero (empty) for a particular address in either FIFO will trigger an IRQ or DRQ interrupt for an external system to fill the playback FIFO 532 above the preselected threshold level (playback), or to empty the record FIFO 538 to an external system so it is below the preselected level (record).
  • the CODEC Logic Control block 568 (Fig. 50) is connected to each tap on either FIFO.
  • the threshold select in configuration register CFIG3I[4, 5]) in Registers block 566 (Fig. 50) determines whether the empty, full, or mid-level threshold is selected.
  • the Logic Control block 568 continuously monitors the taps and automatically generates and performs whatever functions it is designed to perform (e.g., DMA or I/O interrupt generation). When the tap signals that the threshold address is empty (playback) or full (record), depending on whether the tap is located at the position of full, empty or mid-range in the FIFO, an interrupt request is generated.
  • DMA counters in Counters, Timers, Etc. block 518 (Fig. 44) are set for a certain number of data samples to be transferred to or from CODEC 505. Whenever a counter has completed its count, an interrupt request is generated.
  • the value in the index pointer of the record and playback FIFO 538, 532 is provided to the CODEC control block 568.
  • a bit will be changed in a status register, in Registers block 566. This status bit can be read by the external system processing to perform a write and read operation to or from that FIFO.
  • the status register in Registers block 566 is changed in real-time based on the threshold (taps) in the FIFOs changing from a one to a zero. When that occurs, a bit toggles in a status register, and when the status register is checked by the external system processor, the processor will determine which device is requesting the interrupt.
  • the CODEC registers in Register block 566 are addressed with a direct address over Register Data Bus 526, or via indirect addressing by way of an index register in Registers block 566.
  • the following interrupts can be generated: (1) playback and record FIFO I/O threshold reached; (2) playback and record sample counters have decremented to zero; and (3) CODEC timer has decremented to zero.
  • Control Logic block 568 (Fig. 50) is combined into one interrupt signal, IACODEC, which is passed to interrupt selection logic in Control Logic block 568.
  • the interrupt may be masked by a global enable, CEXTI[1].
  • the state of the interrupts are displayed in the global status register, CSR1R[0] located in Registers block 566 (Fig. 50).
  • Control Logic block 568 Two general purpose control signals are provided from Control Logic block 568, referenced, GPOUT [1:0]. The state of these digital outputs reflects the state of the corresponding control bit located in the External Control Register (CEXTI) in Registers block 566 (Fig. 50).
  • CEXTI External Control Register
  • the CODEC includes a low-power mode.
  • Three programmable bits, selecting the low-power shut-down status of CODEC 505, power control register, PPWRI[2:0], located in Registers block 566 (Fig. 50) can disable the record path, the playback path or the analog circuitry of CODEC 505. In other embodiments, more or less bits may be used.
  • both external crystal oscillators 560 Fig. 50
  • all registers in Registers block 566 Fig. 44 are readable.
  • CODEC 505 In suspend mode, selected by the external computer system or processor, CODEC 505 performs as if all 3-bits in the power control register, PPWRI, are selecting low-power states, both oscillators 560 are disabled and most of the CODEC I/O pins (not shown) become inaccessible.
  • a dedicated suspend mode control pin, SUSPEND# active low
  • a technique for reducing power consumed by clock driven circuits is described in application Serial No. 07/918,622, entitled “Clock Generator Capable of Shut-Down Mode and Clock Generation Method," assigned to the common assignee of the present invention and incorporated herein for all purposes.
  • Table C12 describes what the PPWRI[2:0] bits cause to happen to CODEC 505 circuitry in power shut-down mode.
  • CODEC 505 is already in shut-down mode when SUSPEND# is asserted, then: (1) the I/O pins are changed to match the requirements of suspend mode described above; and (2) CODEC 505 analog circuitry in playback DAC 514, record ADC 516 and synth DAC 512 (if synth DAC 512 is embodied as a processing block within CODEC 505) is placed into low-power mode, if it is not already in that mode. After the ISUSPRQ# is asserted, the logic in Control Logic block 568 waits for more than 100 microseconds before stopping the clocks of CODEC 505 and before disabling the oscillators.
  • the 16 MHz clock ICLK16M and the 24 MHz clock ICLK24M are disabled (and later re-enabled) such that there are no distortions or glitches. After the clocks go into one of their high phases, they are held there until suspend mode is deactivated.
  • the external oscillators 560 are re-enabled, but ICLK16M and ICLK24M do not toggle again until the oscillators 560 have stabilized, 4 to 8 milliseconds later. This occurs after both oscillators 560 have successfully clocked 64K times.
  • the ISUSPRQ# signal is deasserted to allow the logic in the rest of CODEC 505 to operate.
  • Signal ISUSPIP suspend in progress is active while the clocks are not valid. It is used to change the status of the I/O pins per the suspend requirements in Table Cll.
  • a voltage detect circuit in Control Logic block 568 determines whether the CODEC is in the 5 volt or 3.3 volt operating mode. The operating status is determined by the output of the voltage detect circuit register AVCCIS5.
  • the operating voltage detect circuitry is utilized so the external computer system, or processor, can be informed that a signal cannot be generated greater than the operating VCC. For example, during 3.3 volt operation, a 4 volt signal cannot be generated. It also is used to set the analog full scale reference voltage and the range of drive capability of the digital I/O pins.
  • the CODEC 505 is capable of interacting with an external CD-ROM interface 568 (Fig. 50). Signals including chip select, DMA request, DMA acknowledge and interrupt request from the CD-ROM interface are supported by the CODEC 505.
  • An external serial EPROM or EEPROM 570 may be utilized by CODEC 505 to make the CODEC 505 Plug-n-Play (PNP) compatible with
  • PNP software may be used to control the serial EPROM or EEPROM to configure the CODEC 505 for an external computer system or microprocessor. Where an external serial EPROM or EEPROM for PNP capability is not available, the external CD-ROM interface is not accessed by the CODEC.
  • CODEC playback DAC 514 (Fig. 44), and synth DAC 512 if synth
  • DAC 512 is embodied within CODEC 505, each include an interpolation block 800 (Fig. 51), a noise shaper 802 and a semi-digital FIR filter 804 for left and right channel stereo audio data. Only the left channel is shown in Fig. 51 and described herein. Operation of the right channel is identical. The operation of CODEC playback DAC 514 will be described herein. The operation of synth DAC 512 is identical if embodied within CODEC 505, otherwise the operation of the synth DAC may deviate.
  • a 16-bit digital audio signal 806 is output from Format Conversion block 534 (Fig. 44), and is input as a signed data signal to interpolator block 800 (Fig. 51) of playback DAC 514 where the signal is up-sampled.
  • the multi-bit up-sampled digital audio signal 840 is output to the input of noise shaper 802, where it is quantized and converted to a 1-bit digital output signal 842.
  • the 1-bit signal 842 is then input to semi-digital FIR filter 804 which filters out undesired out of band frequencies and converts the signal to an analog audio signal 808, which is available at the output of playback DAC 514.
  • the left channel analog audio signal 808 is available as an input to left channel CODEC playback mixer 678 (Fig. 45).
  • the 16-bit digital audio signal 806 is first interpolated, then quantized and noise-shaped.
  • the playback DAC 514 receives as input, the 16-bit digital signal 806 at a sampling rate f s and produces at the output of interpolator block 800 (Fig. 51) a 1-bit signal 840 up-sampled to 64 times the sample rate for the 16-bit input signal 806 (64 times oversampling). Interpolation is performed in three stages in interpolator block 800, since one stage would require too complex a filter. The complexity of the circuitry is minimized by performing the 64 x up-sampling interpolation in three stages, with interpolation up-sampling factors of 2 in Interp.l blocks 810 and 812, 2 in Interp. 2 block 814, and 16 in Interp. 3 block 816.
  • the noise shaper 802 is operated at the rate of 64 ⁇ f s .
  • a typical input spectrum to Interp.1 block 810, 812 contains components of frequencies up to f s /2, and their undesired images centered about integer multiples of f s . See Fig. 53a for a typical input spectrum.
  • an FIR filter is preferably employed which has a passband extending to about 0.40 f s and has a stopband beginning at about 0.60 f s .
  • the passband extends to about 0.45 f s and the stopband begins at about 0.55 f s .
  • the stopband attenuation of the filter is preferably greater than 100 dB, and the passband ripple is about +/- 0.1 dB. This ensures that images of frequencies lower than 0.45 f s , will be attenuated by at least 100 dB. Higher frequencies, however, will fall inside the filter's transition band together with their image, which will be attenuated less.
  • the spectrum of the output of Interp. 1 blocks 810, 812, for the input shown in Fig. 53a, is shown in Fig. 53b.
  • the impulse response coefficients used in Interp. 1 blocks 810, 812 are given in Table C13. The quantity of s and values associated with, these coefficients will be different if the passband or the stopband changes.
  • This interpolative filtering is performed digitally, to avoid filtering in the analog domain when operating at the lowest rate, which would require a complex, or sharp transition, analog filter. Without such an analog filter, the images would appear at the output.
  • the analog filter would have to have variable cutoff to accomodate changes in the sampling rate, which is not an acceptable solution.
  • a sinc 5 filter is used in this stage, which provides approximately 30 dB of image attenuation.
  • the spectrum of the output of the second interpolator stage 814 is shown in Fig. 53c.
  • a sinc 2 interpolator with a differential delay of two, is used. This interpolator serves the following purposes: it attenuates the images around 4f s enough for the images to not exceed the noise levels introduced by the next block, i.e., noise shaper 802, and it also introduces a zero at 2 f s , which together with interpolator stage 2 814, provides enough attenuation for images around 2 f s .
  • the spectrum for the output of the third stage 816 is shown in Fig. 53d.
  • Noise shaper 802 converts the up-sampled multi-bit output 840 from the third interpolator stage 816 to a 1-bit signal 842. It shapes the noise according to a Chebyshev (equiripple) high-pass transfer function. The spectrum for the noise shaper 802 output appears in Fig. 53e. The operation of noise shaper block 802 is described herein.
  • the 1-bit signal from noise shaper 802 is then filtered with a semi- digital FIR filter 804 (Fig. 51).
  • Noise shaper 802 has less than unity gain.
  • Interp.l stage, blocks 810, 812 is a symmetric (linear phase) FIR filter with 2N-1 taps (N distinct coefficients), with N equal to 40 in the preferred embodiment.
  • the interpolation factor in this block is two. It is designed to have an attenuation of about 100 dB or more in the stopband, and approximately +/- 0.1 dB or less ripple in the passband.
  • the passband response also compensates for the rolloff introduced by the sinc 5 Interp. 2 stage 814, sinc 5 Interp. 3 stage 816 and the semi-digital FIR filter 804 used in the playback DAC 514 D/A conversion process, as well as the gain variation introduced by the noise shaper 802.
  • the FIR filter in this Interp. 1 stage 810, 812 includes passband compensation achieved by combining into one function all the frequency variations introduced by subsequent stages.
  • the FIR filter when used as interpolator, acts on the input sequence of a digital values, 16-bit input signal 806, whereby every other data sample is equal to zero (for interpolation by 2).
  • the even and odd output signals 834, 832 from the two phases of Interp. 1 810, 812 are:
  • phase 1 even coefficients
  • odd output signal 832 odd coefficients
  • the Interp. 1 blocks 810, 812 filter has phase linearity, which means the impulse response is symmetric with respect to the midpoint, with the symmetry condition given as:
  • the impulse response contains coefficients which are very small. For large stopband attenuations, these coefficients are very important.
  • the coefficients are scaled so the magnitude of each is between one-half and one. Then, in the summation circuit 818 (Figs. 55, 56), the partial products associated with the smallest coefficients are added first, scaled, and then added to the products associated with the next higher-valued coefficient, and so on. This means the sums cannot be performed in an arbitrary order (e.g., in the same order as the taps are updated), unless the word width is further increased to preserve the precision.
  • the second interpolator stage 814, Interp. 2 is a sinc 5 interpolator filter.
  • the interpolation factor in this block is two. Due to the attenuation that will be provided by the semi-digital filter 804, a high attenuation around 2 x f s , is not needed, and a relatively simple structure is used.
  • the transfer function of the filter for Interp. 2 stage 814 is:
  • the Interp. 2 filter 814 has only integer coefficients.
  • the passband rolloff has to be compensated in Interp. 1 blocks 810, 812.
  • Interp. 2 filter 814 Since the Interp. 2 filter 814 interpolates by two, it operates on a sequence in which every other sample is zero, as illustrated below:
  • Fig. 57 shows an embodiment of the Interp. 2 814 filter. A scaling factor of 2 has been applied throughout. The frequency response, normalized to DC, is shown in Figs. 58 and 59.
  • the transfer function of Interp. 3 block 816 is:
  • the interpolation factor in this block is 16.
  • the differential delay is 2.
  • the order is 2.
  • One embodiment of the implementation of the transfer function is given in Fig. 60.
  • the differentiators 839 run at a lower rate, while the integrators 841 run at a higher rate.
  • the differentiators 841 having 2 delays can be factored into a differentiator with one delay and a 2-sample accumulator, where:
  • Interp. 3 block 816 Another embodiment for Interp. 3 block 816 is shown in Fig. 61. Each signal sample is used 16 times by the integrator 846, which runs at the highest rate. A zero is introduced a 4 f s .
  • interpolator 3 filter 816 normalized to DC, is shown in Figs. 62a and 62b.
  • the final stage of the interpolator, noise shaper block 802 takes the multi-bit signal output from the third interpolator stage, interpolator 3 block 816 (Fig. 52), and converts it to a 1-bit signal while shaping the quantization noise according to a high-pass function.
  • the block diagram implementation for the shaper 802, which is a preferably fifth order shaper, is shown in Fig. 63.
  • the 1-bit output signal 842 is also input to integrators 822. Integrator 822 inputs must have suitable scaling factors, kl-5, to make the loop stable for a predetermined range of input amplitudes, as determined by the remainder of the digital path shown in Fig. 63.
  • the simple additive noise model shown in Fig. 63 is used to represent the quantizer.
  • STF Transfer Function
  • NTF noise Transfer Function
  • phase variation in the passband is very small, on the order of about 0.05 degrees, and the magnitude variation can easily be compensated in Interp. 1 810, 812 block.
  • a signal flow graph (SFG) for noise shaper block 802 is shown in Fig. 64.
  • the transfer functions are developed as follows:
  • ⁇ k ⁇ setting to zero gains of loops touching forward path k
  • the transfer functions have the form:
  • the coefficients are chosen to match a Chebyshev function, which yields equiripple quantization noise in the passband and a flat stopband.
  • the values for Ai and the Bi are obtained from the Ci and Wi in the above equations by matching the noise TF to the desired shaping function.
  • a function is chosen for the NTF which has zeros equally spaced inside the noise stopband (i.e., the signal band), and a flat high-frequency response.
  • the stopband edge, the stopband attenuation and the filter order must be determined. Since the stopband attenuation is preferably at least 90 dB and the stopband edge is about 6 KHz for an input sampling rate of 8 KHz, or equivalently, about 36 KHz at the maximum sampling rate of 48 KHz, the filter order preferred is five. That is, the noise stop band for noise shaper 802 extends to at least 0.70 f s , and preferably to about 0.75 f s which is about 0.25 f s past the signal band. This allows the design requirements for the semi-digital filter to be less stringent.
  • N 5
  • m ranges from 0 to 4
  • ⁇ 1 is related to the attenuation G given in dB by:
  • Fig. 65 The pole-zero diagram in the s-plane is shown in Fig. 65.
  • a plot of the frequency response out to 300 KHz is shown in Fig. 66.
  • the discrete zeros and poles are obtained using the bilinear transformation:
  • Fig. 67 gives the pole-zero diagram in the z-plane for noise shaper 802.
  • the preferred frequency response of the discrete filter for noise shaper 802 is shown in Fig. 68.
  • the numerator in the transfer function of the selected structure must be matched to the discrete filter.
  • the nature of the zeros that can be realized with it are found by equating the numerator of the noise NTF to zero, producing:
  • B1, B2 are selected so that preferably the zeros have the same angles as those required by the ideal transfer function. This is shown in Fig. 69, where the angles are exaggerated.
  • the values of B1, B2 also depend on the values of K2 and K4.
  • the scaling coefficients k shown in Fig. 63 as k 1 -k 5 , should be adjusted so noise shaper 802 is stable for the desired range of amplitudes for the input signals. Preferably, this is accomplished with the following criteria in mind:
  • the scaling coefficients, k are equal for the 2nd and 4th integrators 822a (Fig. 63) and also for the third and fifth integrators 822b. This permits re-utilization of one hardware block 830 containing two integrators 822 and associated adders 848 without having to change scaling coefficients, k. Hardware block 830 is enclosed inside the dotted line in Fig. 63.
  • the scaling coefficients, k are only negative powers of two, so only hardwired shifts are used, without multiplication.
  • the scaling coefficients, k set the stability range to be compatible with the desired input signal levels.
  • the scaling coefficients obtained for an input signal range of +/- 0.25 dB preferably, are:
  • the feedback coefficient values B1 and B2, for positioning the zeros are obtained using these scaling factors and preferably are:
  • the preferred feedback coefficients A 1 -A 5 for positioning the poles, are:
  • STF Signal Transfer Function
  • the STF for noise shaper 802 is fixed. If the oversampling ratio is large enough, the STF will have little effect inside the signal band.
  • poles can be tweaked to some extent, but this is not desirable, because stability may be compromised.
  • a better embodiment is to compensate for any distortion in the first interpolation filter Interp. 1 blocks 810, 812.
  • the magnitude of the STF and the NTF is shown in Fig.
  • the passband tilt is significant enough to violate the preferred +/- 0.1 dB ripple requirement for the entire playback path, and must be compensated. With regard to group delay distortion, however, it is still acceptable.
  • the difference between maximum and minimum group delay values is about 21.95 ns.
  • NTF Noise Transfer Function
  • a fixed value of noise gain K at f s /2 can be obtained for any value of noise attenuation G provided the bandwidth is correct, or vice versa.
  • a plot of constant noise gain contours is shown in Fig. 74.
  • noise gain 1.7 is used which results in stability and near maximum input amplitude, A max .
  • a noise gain 1.7 is used which results in stability and near maximum input amplitude, A max .
  • the maximum amplitude into the loop is preferably kept at about 0.25.
  • the noise shaper filter block 2010 performs a sigma-delta conversion to convert a multi-bit digital input signal 2012, preferably 25 bits wide and at a frequency of 64 ⁇ F s , to a 1-bit digital output signal 2014.
  • This quantization to a 1-bit output signal introduces noise in the signal, which is shaped according to a high pass signal transfer function given by: , where
  • the noise shaper filter 2010 has a noise transfer function given by:
  • E(Z) is the digital noise input signal.
  • the coefficients C 1 , C 2 , C 3 , C 4 , C 5 are given in Table C19.
  • the noise shaper block 2010, shown in Fig. 121 includes a total of twelve 23-bit addition operations, two multiplication operations, and five scaling operations in between the five integration stages I 1 -I 5 .
  • the twelve addition operations are performed by adders a1-a12.
  • the two multiplication operations are performed by multipliers 2016 and 2018.
  • the five scaling operations are indicated by the fractional factors identified in Fig. 121 (i.e. 1/8, 1/2, 1/4, 1/2 and 1/4). Scaling is performed by a bit shifting operation.
  • the clock signal used to control the data path implementing noise shaper block of Fig. 122, 2010 is set to a rate of 256 times the sample frequency (256 F s ).
  • the coefficients C 1 - C 5 which implement the poles for the above-mentioned transfer functions, have been quantized to 10 bits without adversely effecting the transfer function in the signal band.
  • the noise shaper block 2010 implementation has coefficients C 1 -C 5 which are multiplied by the quantized output 2014 of quantizer 2020, which has a value of either + 1 or -1.
  • the coefficients C 6 and C 7 implementing the transfer function zeroes, have been reduced to two terms, each term being a power of two.
  • the values for coefficients C 1-7 are shown in Table C19.
  • the noise shaper block 2010 output signal 2014 occurs once every four 256F s clock cycles, or at a rate of 64 times the sample frequency (64 F s ).
  • the data input and output rates are at 64F s .
  • the fixed bit width through noise shaper block 2010, with data normalized in a prior interpolation filter is 23 bits, where 3 bits are integer and 19 are fractional.
  • An implementation of noise shaper block 2010 in Fig. 121 which utilizes fewer adders to save hardware and increase efficiency is illustrated schematically in Fig. 122.
  • the embodiment of the digital sigma-delta modulator, noise shaper circuit 2050, as shown in Fig. 122, is an implementation of the functional sigma-delta modulator noise shaper block 2010, illustrated in Fig.
  • the embodiment shown in Fig. 122 utilizes the adders illustrated therein such that the five stages of integration shown in Fig. 121 are performed by the embodiment shown in Fig. 122, using a lesser number of adders, by multiplexing the adders in Fig. 122 so each multiplexed adder in Fig. 122 may perform more than one integration stage operation per single-bit output.
  • each adder associated with each of the five integration stages performs only one operation per output.
  • the embodiment shown in Fig. 122 is a much more efficient and less expensive design.
  • the multiplexers in Fig. 122 which control certain adders, are selecting devices which may be implemented by the multiplexers shown in Fig. 122, or by any other device which selects a digital output signal from among a plurality of digital input signals.
  • the scaling factors illustrated in Fig. 121 after adders a1, a4, a6, a9, and all, which are powers of two, are implemented in bit shift operations.
  • the addition operations of adder a6, the scaling operation of 1/4 between adders a6 and a7, and the addition operation of adder a7 are performed by adderl and adder2 along with shifter3 in Fig 122.
  • the input sh3 to shifter3 in Fig. 122 which is generated in a control circuit, not shown, shifts the output of adderl by 2 -2 or 2 -3 , as needed during the calculations.
  • Fig. 121 the two addition operations performed on adders all and a12 with a scaling of 1/4 in-between are performed by adderl and adder2 in the Fig. 122 embodiment during a first clock cycle.
  • the addition operations of adder a4 the scaling of 1/2 between adders a4 and a5, and the addition operation of adder a5 are performed by adder4 and adder5 in Fig. 122, along with the fixed shift of 2 -2 after adder4 in Fig 122.
  • the two addition operations, performed on adders a9 and a10, along with a scaling of 1/2 are performed by adder4 and adder5 in the Fig. 122 embodiment during a different clock cycle. That is, a different clock cycle than the operations of a4 and a5 of Fig. 121, which as previously described, are also performed on adder4 and adder5 of Fig. 122.
  • Fig. 121 the addition operation of adder al, the scaling of 1/8 between adders al and a2, and the addition operation of adder a2 are performed by adderl and adder2 and shifter3 in Fig. 122.
  • the control input sh3 causes shifter3 to multiply the output of adderl by 2 -3 .
  • the addition performed by adder a3 is accomplished as illustrated in Fig. 122 by the "1" input of mux3 being held equal to zero by mux3_sel being set equal to 1 and by register r8 being cleared.
  • the addition operation performed by adder a8 is performed by adder4 and adder5 in Fig. 122.
  • the feedback coefficients C 6 and C 7 in Fig. 121 are performed by shifterl, adder3, and shifter2 in Fig. 122. These two feedback coefficients are quantized to a shifted sum of two terms as shown in Table C19.
  • a sequence of four 64Fs clocks are used to generate the output of noise shaper circuit 2050. At different clock cycles during the sequence, the value in integrators I 3 and I 5 of Fig. 121 are provided to register r3 of Fig. 122.
  • the input c6_7 is used to cause shifterl to shift the data in register r3 by a factor of 2 -3 or by 2 -2 as needed for implementing C6 and C7, respectively.
  • Fig. 122 are used to hold the values of the integration stages I 1 , I 2 , I 3 , I 4 , and I 5 in Fig. 121 along with the output of adders a3 and a9.
  • the values are clocked continuously at 256 F s through the eight registers in Fig. 122 to make the data available to the adders at the proper time.
  • the feedback terms implementing the zeroes of the transfer equation are created by multiplying the output of integrator I 3 , in Fig. 121 by coefficient C 6 and adding the product to the input of integrator I 2 . Similarly, the output of integrator I 5 is "multiplied" by coefficient C7 and added into the input of integrator I 4 . At different clock cycles during the sequence of four 64 F s clocks, the output of integrators I 3 and I 5 of Fig. 121 are provided to register r3 of Fig. 122.
  • I 5 is accomplished using shifterl and shifter2 in Fig. 122.
  • the control input C6_7 is used to control shifters 1 and 2 to implement coefficient C6 and C7 at the appropriate time.
  • Shifter 1 is switched between a scaling factor operation of -2 -3 and 2 -2 for C6 and C7, respectively.
  • Shifter 2 is switched between a scaling factor operation of 2 5 and 2 7 for C6 and C7, respectively.
  • the product of C6 and integrator I 3 is held in register r11, in Fig. 122, and then used by adder4. Then, the product of C7 and integrator I 5 is held in register r11.
  • n represents the current sequence of four clock cycles which generate one quantized output 14 shown in Fig. 121.
  • Q (n) is the 1-bit quantized output signal 14 representing the polarity of the output 2022 of integrator I 5 during sequence n.
  • cycle 1 the new value of interpolator I 1 is calculated.
  • the sum of output 2014 "multiplied" by coefficient C5 and the scaled input 2012 is then scaled by 1/8. This sum is added to the previous value of interpolator I 1 .
  • This new value of I 1 is stored. Also, the product of interpolator I 5 and coefficient C7 is stored.
  • Table C21 depicts the data transfers made on each clock cycle for noise shaper circuit 2050.
  • Control signals, utilized by noise shaper circuit 2050 are generated external to Fig. 122 include: multiplexer control signals, an input to toggle shifters 1 and 2 to select between coefficient inputs C 6 and C 7 , an input to shifters 1 and 2, an input to shifter 3, and clear signals for registers r11 and r8.
  • Shifter 3 is used to implement the scaling factor of 1/8 prior to integrator 1 (I1) and the scaling factor of 1/4 prior to I3 and I5, in Fig. 121. To scale by a factor of
  • the quantized output bit signal 2030 in Fig. 122 takes on a value of one if the output signal 2022 (Fig. 121) of I 5 is less than zero, and zero if I 5 output signal 2022 is greater than or equal to zero.
  • output bit signal 2030 represents the sign of the quantized output signal 2014 of the noise shaper block 2010 of Fig. 121.
  • Registers r5-r8 are one group of serially configured data registers used to store data values which represent the output of adder a8, the value of 12 and 14 of Fig. 121.
  • the output of adder 5 is provided to the first data register in the serial configuration, r5.
  • the last data register, r8 in that group of serially configured data registers is provided to mux 3 and mux 2 as an input.
  • the other group of serially configured data registers includes registers r1-r4. This group of serially configured data registers is used to store data values for the output of adder a3, and the value of integrators I1, 13 and 15 of Fig. 121.
  • the first data register in this group receives an input from the output of adder 2.
  • the last data register in this group r4 provides its output to mux 6 as an input.
  • there are two intermediate data registers In the first group, these are r6 and r7. In the second group, these are r2 and r3.
  • the output of r6 is provided to mux 4 as an input.
  • the output of r3 is provided to mux 6 and mux 5 as an input and to shifter 1 and adder 3 as an input.
  • the coefficient decode (coef. decode) block 2032 which is a RAM, ROM, or other memory storage device, in Fig. 122, receives a control signal 2038 from an external control circuit, not shown, to select coefficients C 1 , C 3 , C 4 , or C 5 for output from coef. decode block 2032 to be input to adder 1.
  • Coef. decode block 2032 performs a one's complement on the selected coefficient to implement the multiplication of Cx * (-1) if the 1-bit output 2014 in Fig. 121, or Q(n), equals 1.
  • Fig. 121 is output from mux 1 output signal 2034 as the output of register r9 or r10 in Fig. 122, depending on the clock cycle number.
  • the purpose of mux 1 is to cause its output 2034 to equal the quantized output, Q n , of integrator 5. Since the new value of integrator 5 I5 n+1 is calculated while the current quantized output Q n is still needed, both are kept in registers r9 and r10.
  • the input r9_10_ck from a control circuit latches the sign bit of adder2 during cycle 3 into register r9 as Q n+1 . During this same cycle, the current Q n in register r9 is latched into register r10.
  • the mux select control signal for mux 1 is set to zero, which allows the output of r9 to be provided as mux 1 output signal 34.
  • the mux select control signal for mux 1 is set to 1, which causes the output of r10 to be provided as mux 1 output signal 2034.
  • Mux 1 output signal 2034 is used as the carry-in (cin) 36 to adder 1 to complete the two's complement for the selected coefficient C 1 , C 2 , C 3 or C 5 .
  • Table C21 Many operations in Table C21 are performed to allow the common hardware implemented in the noise shaper circuit 2050 of Fig. 122 to perform the integration, multiplication and addition functions of the noise shaper block 2010 of Fig. 121.
  • coefficient C 4 from Fig. 121 is prescaled by a multiplication by 4 and then stored as C 4 * 4 in Fig. 122 and then scaled by 1/4 by shifter 3 in Fig. 122.
  • This operation is performed to reduce the number of shifts needed by shifter 3 to two so shifter 3 can scale the signal by a factor of 1/4 or 1/8 depending on whether integration stage I 1 , I 3 or I 5 from Fig. 121 is being performed by the implementation in Fig. 122, as previously discussed.
  • the output of Fig. 122 adder2 and adder5 are the output of Fig 121. adder a3 and adder a8, respectively.
  • the sum of Fig 122. adder2 results from the input c4 selecting coefficient C4*4 from the coef decode block 2032.
  • the coefficient C4 is stored as C4*4 to allow for a common factor of 1/4, implemented by shifter 3, with other calculations.
  • the output of mux 3 is zero from register r8, which is cleared with r8_clr.
  • the output of adderl is equal to Q n *C4*4.
  • Input sh3 0 causes shifter 3 to shift this value by 2 for a factor of 1/4 resulting in Q n *C4.
  • Fig. 122 adder5 is the output of Fig. 121 a8. This value is then stored in register r5.
  • the input mux6_sel 0.
  • the output of shifter 3 is added to register r4, which contains the current output of Fig. 121 integrator 1 I1 n .
  • the output of Fig. 122 adder2 is the new output of Fig. 121 integrator 1 I1 n+1 . This value is then stored in register rl. Also in cycle 1, the output of Fig.
  • 122 shifter2 is the feedback into Fig. 121 a9 from integrator 5 I5 n .
  • the input C6_7 1 which causes the value I5 n currently in Fig. 122 register r3 to be multiplied by coefficient C7 using the terms shown in Table C19.
  • the one's compliment of C7 * I5 n is stored in register r11. When this term is used in cycle 2, the two's compliment is obtained by using the input signal r11_ck as the carry in to adder4 of Fig. 122. In cycle 1, the output of Fig. 122 adder5 is not used.
  • the output of Fig. 122 adder2 is the new output of Fig. 121 integrator 5 I5 n+1 .
  • the input mux6_sel 0.
  • the output of shifter 3 is added to register r4, which contains the current output of Fig. 121 integrator 5 I5 n .
  • the output of Fig. 122 adder2 is the new output of Fig. 121 integrator 5 I5 n+1 . This value is then stored in register rl. Also in cycle 2, the output of Fig. 122 adder5 is the new output of Fig. 121 integrator 4 I4 n+1 .
  • the output of adder4 is shifted by 1 for a factor of 1/2 and added to Fig. 121 integrator 4 I4 n located in Fig. 122 register r8. This new value of Fig. 121 integrator 4 I4 n+1 is then stored in register r5.
  • the input C6_7 0 causes the Fig. 121 integrator 3 value 13. currently in Fig. 122 register r3 to be multiplied by coefficient C6 using the terms shown in Table C19.
  • the one's compliment of C6 * I3 n is stored in register r11.
  • the two's compliment is obtained by using the input signal r11_ck as the carry in to adder4 of Fig. 122. Since a new Fig. 121 integrator 5 I5 n+1 output is calculated, on the next cycle the input r9_10_ck transitions from 0 to 1 to clock the value Q n into register r10 and Q n+1 into register r9.
  • Fig. 122 register r3 to be added to the previously stored feedback into Fig.
  • the semi-digital FIR filter 804 filters the 1-bit signal 842 at 64 times the frequency of the sample rate for the 16-bit input signal 806 which is input to the Interpolator filter block 800 (Fig. 51), and converts the 1-bit signal 842 to an analog signal output signal 808.
  • Semi-digital FIR filter 804 coefficients are preferably positive and preferably have a ratio of maximum value to minimum value of less than 40.
  • Figure 77 shows the impulse response
  • Fig. 78 shows the frequency response of this semi-digital filter 804.
  • Semi-digital FIR filter 804 performs the functions of: 1) converting the 1-bit digital signal to an analog signal; and 2) filtering out high frequency noise created by noise shaper 802.
  • Semi-digital FIR filter 804 combines the D/A converter function with the analog low pass filter function in such a way that the high frequency noise is removed without adding substantial distortion at lower frequencies.
  • Semi-digital FIR filter 804 includes a shift register 850 (Fig. 79). Data taps 853 are present at the input to each successive flip-flop 852 in shift register 850. The logic state of each data tap 853 is used to control the switching of a current sink 855 which is connected to the respective data tap 853. The value of the respective current sink 855 represents a coefficient used to produce the desired impulse response for the filter. All current sinks 855 are summed together and converted to a voltage by means of an op amp 854 and resistor 856.
  • Shift register 850 which preferably is a 107 bit long shift register, forms a digital delay line whereby each flip flop 852 represents one unit of delay.
  • x(k) the input to shift register 850
  • the first data tap 853 would be termed x(k-1) since it has the same value as x(k) does, but is delayed by a single clock period.
  • x(k-2) the next data tap 853 would be termed x(k-2) and so on.
  • each data tap 853 controls an individual current sink 855.
  • the total current, IOUT 857 is equal to the scaled sum of each of the current sources 855. This can be represented with the following equation:
  • IOUT(k) 10* (k) + I1* x(k-1) + 12* x(k-2) + . . . + IN* x(k-N)
  • the coefficients for semi-digital FIR filter 804 are determined by values of each of the individual currents.
  • the value of each of the coefficients represented by the current sinks 855 is not a function of the 1-bit signal 842, which helps maintain the linearity of the structure.
  • Figs. 80 and 81 two differential currents, IOUT 857 and IOUT* 859, are used.
  • the 1-bit signal 842 output from noise shaper 802 can take on only 2 values: logic 1 and logic 0.
  • For each bit in the shift register 850 if a logic 1 exists, the current sink 855 associated with the bit is connected to the IOUT line. If a logic 0 exists, the current sink 855 associated the bit is connected to the IOUT* line.
  • the following is an example of a semi-digital filter having two taps. In this example there are four possibilities, as shown in table C14.
  • IOUT 857 and IOUT* 859 take on values from 0 to 10+I1.
  • IOUT 857 and IOUT* 859 which in this two bit example has a value of (IO+I1)/2.
  • This DC offset in this example can be effectively removed by subtracting a fixed amount of current (IO+I1)/2, from the
  • IOUT 857 and IOUT* 859 lines are as described in table C15.
  • FIG. 80 and 81 two offset current sources, 880 and 882 are used to achieve reduction of the inherent DC offset.
  • Current source lOFFSET* 880 is connected to the current summing node 884 of ampl 860.
  • Current source lOFFSET 882 is connected to the current summing node 886 of amp2 861.
  • the value of current sources lOFFSET* 880 and lOFFSET 882 is (10 + I1 +... + IN)/2.
  • IOUT* 859 For each shift register data tap combination, IOUT* 859 has the same magnitude and opposite sign as IOUT 857. As a differential structure, even ordered distortion product terms and common mode noise are reduced.
  • the differential currents are then converted to voltages by a pair of op amps, op ampl 860 and op amp2 861, each with resistive feedback 862 and capacitor 865 as shown in Fig. 81, which results in voltage signals DACOUTA 863 and DACOUTB 864. High frequencies are removed by capacitor 865 which is in parallel with each of the resistors 862 associated with ampl 860 and amp2 861.
  • the differential voltage DACOUTA-DACOUTB is converted to a single ended voltage output signal VOUT 858 by a conventional differential-to-single-ended converter circuit which includes resistors 872, 874, 876 and 878 and op amp3 870.
  • the positive input to op amp3 870 is connected through resistor 878 to a reference voltage, VREF, which is preferably ground, but may be a mid-range voltage between VCC and ground.
  • the CODEC record ADC 516 (Fig. 82) functions to preserve a high signal to distortion ratio (STD) compatible with CD quality (higher than 90 dB) audio while reducing the sampling rate of the incoming analog signal from a value of 64 ⁇ f s , to f s , where f s is the output sampling rate.
  • the record ADC 516 performs a decimation on the oversampled audio signal such that decimation filter block 902 down-samples the 64 x over-sampled signal by 64.
  • the decimation process explained below, is performed in three stages within decimation filter block 902, by factors of 16, 2 and 2, respectively, to minimize decimation circuit complexity.
  • the record ADC 516 receives as input an analog audio signal 906, which is converted by a fourth order ⁇ - ⁇ A/D 900 into a 7-bit signal 908 at a sampling rate of 64 ⁇ f s (64 ⁇ oversampling).
  • the decimation filter block 902 receives this 7-bit input signal 908 and produces a 16-bit output signal 910 at a sampling rate f s .
  • the spectrum of the sampled analog input signal 906 contains components of frequencies up to f s /2 and their images centered about integer multiples of 64 ⁇ f s , where the input signal 908 is assumed to be band-limited (high frequencies filtered out) by an anti-aliasing filter of adequate attenuation located in the record path before the ⁇ - ⁇ A/D 900 (not shown).
  • the anti-aliasing filter may be user installed or may be in
  • the record ADC 516 output spectrum is shown in Fig. 84 out to 64 x f s /2, and a detail of the passband (in this case, 4 KHz) appears in Fig. 85.
  • the spectrum of the output of Decim. 1 914 is shown in Fig. 86.
  • a half-band filter is used, with stopband attenuation of about 100 dB.
  • the spectrum of the output is shown in Fig. 87.
  • This stage consists of an equiripple FIR filter, with a passband extending to about 0.45 f s and a stopband beginning at about O.55 f s .
  • the stopband attenuation of the Decim.3 filter 918 is greater than or equal to about 100 dB, and the passband ripple is less than +/- 0.1 dB. This guarantees that aliasing will not occur at frequencies lower than 0.45 f s .
  • This decimator is a sinc 6 integrator-comb filter, implemented as shown in Fig. 89.
  • the registers 920 shown in Fig. 89 all have the same MSB weight, which depends on the word length of the input signal 908, the decimation factor (16) and the order of the decimator (6).
  • This embodiment is chosen so Decim. 1 914 can correctly represent all possible input signal levels at the output signal 915, where saturation will be performed to a value approximating the full scale analog input. Truncation of LSB's can be performed using known methods.
  • the bit lengths shown preserve about 120 dB STD. If the registers 920 are implemented as a RAM, not shown, then all will have the same length.
  • Each integrator 921 includes a summing node 922 and a delay block
  • the integrators 921 operate at the high rate 64 ⁇ f s .
  • Each differentiator 924 includes a difference node 923 and a delay block 920.
  • the differentiators 924 operate at the lower rate of 4 ⁇ f s , operating on one out of every 16 samples generated by the integrators 921.
  • the transfer function performed by this block is:
  • the frequency response is shown in Fig. 90.
  • the response is not flat in the passband.
  • a detail of the rolloff is shown in Fig. 91.
  • the second decimator, Decim.2 916 is a half-band linear phase FIR filter.
  • This filter has a stopband of equal size as the passband, and equal ripple in the passband and the stopband. Since the stopband ripple is very low to obtain an attenuation of about 100 dB or more, the filter is essentially flat in the passband.
  • a special property of this filter is that every other coefficient in its impulse response is equal to zero, except the middle coefficient, which is equal to 1.
  • Decim.2 916 When configured as a decimate by two filter, Decim.2 916 can be embodied in two basic forms. The first is a modified "direct" form, which results in the structure shown in Fig. 92. The second is a transposed form obtained reversing the signal flow graph of the first, and is shown in Fig. 93. Referring to Fig. 93, C1-C5 are the coefficients and the coefficient for xnml is equal to one. Each multiplier 925 multiplies the same input signal sample by a respective filter coefficient C1-C5. Delay blocks 926 and summing nodes 927, 928 are connected as shown in Fig. 93.
  • each multiplier 925 for coefficients C2-C5 is provided to a summing node 927 and to a summing node 928.
  • the output of multiplier 925 for coefficient C1 is provided to a delay block 926 and to a summing node 928, as shown.
  • Fig. 93 The transposed structure in Fig. 93 has several advantages over the direct one of Fig. 92, whereby:
  • This decimator, Decim.3 916 is a symmetric (linear phase) FIR filter. It is designed to have an attenuation of about 100 dB in the stopband, and a +/-0.1 dB or less ripple in the passband. It is designed as a flat passband response half-band filter followed by a compensation filter.
  • the frequency response of the half-band Decim.3 filter 918 is shown in Figs. 97 and 98. When used as decimator, the Decim.3 filter 918 computes one sample for every two samples of input. Referring to Fig. 93, the transposed half-band structure is employed, since the entire filter operates at the lower sampling rate including the data tap updates.
  • the Decim.3 filter 918 has a linear phase characteristic which ensures the impulse response is symmetric, where the symmetry condition is: (N odd) with h k being the filter coefficients.
  • N is odd, but N may be even with a different symmetry condition.
  • the first 30 coefficients for Decim. 3 918 are listed.
  • the response of the half-band filter is obtained by using the coefficients listed in Table
  • a Nyquist rate FIR compensator filter 904 (Fig. 53) is connected to the output of Decim.3 918 and is utilized to compensate for the rolloff introduced by the sinc 6 decimator filter, Decim.1 914, to give a flat response, and to provide gain compensation.
  • FIR filter 904 includes a series of multipliers 930, denoted M1-4, which multiply the compensation input signal 910, which is the signal output from Decim.3 filter 918 (Fig. 83), by a compensator filter coefficient C1-4, respectively.
  • the product of each respective multiplier 930, P1-4 is input to a summing node 934.
  • the compensator audio output signal 912 (Fig. 96) is provided to format conversion block 536 (Fig. 44) and to overrange detect circuit 913 (Fig. 82) as a 16-bit signed digital audio signal.
  • Overrange detect circuit 913 detects where the amplitude of compensator output signal 912 is with respect to full scale and sets output bits B0 and B1. These bits are utilized by the user, using known methods, to adjust the gain of the audio signal being detected.
  • the appropriate attenuation/gain control circuit in Mixer 606 (Fig. 45) can be programmed to increase or decrease the signal amplitude, as needed.
  • the compensation filter 904 operates at the Nyquist rate and is also linear phase, with only 7 data taps, which means 4 coefficients are needed.
  • the frequency response for the decimator after compensation filter 904 is shown in Fig. 99.
  • the total frequency response for the decimator in the passband is shown in Fig. 100 (before compensation) and in Fig. 101 (after compensation).
  • Compensation filter 914 performs the following transfer function:
  • the impulse response coefficients for compensation filter 914 are as follows:
  • the synthesizer module is a wavetable synthesizer which can generate up to 32 high-quality audio digital signals or voices, including up to eight delay-based effects.
  • the synthesizer module can also add tremolo and vibrato effects to any voice. This synthesizer module provides several improvements to prior art wavetable synthesizers and also provides enhanced capabilities heretofore unavailable.
  • Figure 102 illustrates the synthesizer module's interfaces to the local memory control module 8, the system bus interface 14 of the system control module 2, the CODEC module 4, and synthesizer DAC 512. It also shows the internal signal flow of logic contained within the synthesizer module 6.
  • the synthesizer module 6 produces one left and one right digital output.
  • each frame there are 32 slots, in which a data sample (S) of each of a possible 32 voices is individually processed through the signal paths shown in Figure 102.
  • an address generator 1000 For each voice processed during a frame, an address generator 1000 generates an address of the next data sample (S) to be read from wavetable data 1002.
  • the wavetable address for data sample S contains an integer and a fractional portion.
  • the integer portion is the address for data sample, S1, and is incremented by 1 to address data sample, S2.
  • the fractional portion indicates the distance from S1 towards S2 for interpolating the data sample, S.
  • interpolation logic 1004 causes the two data samples, S1 and S2, to be read from wavetable data 1002.
  • the wavetable data is stored in local dynamic random access memory (DRAM) and/or read only memory (ROM). From this data, the interpolation logic 1004 derives data sample, S. This interpolation process is discussed in more detail below.
  • Wavetable data can be ⁇ -Law compressed. In the case of ⁇ -Law compression, S1 and S2 will be expanded before interpolation under the control of the synthesizer module's signal path, discussed below.
  • a volume generator 1012 causes the data sample to be multiplied by three volume components that add envelope, low frequency oscillator (LFO) variation, right offset, left offset and effects volume.
  • LFO low frequency oscillator
  • the left and right offsets provide stereo field positioning, the effects volume is used when generating an echo effect, and LFO variation in the volume adds tremolo to the voice.
  • An LFO generator 1021 generates the LFO variation. As is discussed in more detail below, LFO generator 1021 is also used to generate LFO variation in the wavetable addressing rate to add vibrato to a voice. LOUT 1006,
  • ROUT 1008, and EOUT 1010 are the outputs resulting from data sample S being multiplied by the three volume components.
  • LOUT 1006 and ROUT 1008 connect to left and right accumulators 1014 and 1016. If effects processing is occurring, EOUT 1010 sums into one of eight effects accumulators 1018. After all the voices in a frame are processed, the left 16-bit wide and right 16-bit wide (32-bit wide total) accumulator data is converted from a parallel format to a serial format by convertor 1019.
  • the left accumulator data and the right accumulator data can be output serially to synthesizer DAC interface circuitry 1025.
  • Synthesizer DAC interface circuitry 1025 interfaces synthesizer DAC 5l2 to the synthesizer module 6.
  • the interface circuitry comprises: (i) clock divider circuitry and control logic which controls the clock divider (not shown); (ii) clock generation circuitry for clocking synthesizer DAC 512 operations (not shown); and (iii) a serial to parallel convertor (not shown). See also Fig. 118.
  • the clock divider circuitry is described in U.S. patent application Serial No. , by
  • the serial to parallel convertor in the interface circuitry 1025 converts the accumulator data to parallel format and sends this parallel data to the synthesizer DAC 512 for conversion into analog signals.
  • Synthesizer DAC 512 preferably comprises the same circuitry as CODEC playback DAC 514.
  • the output of synthesizer DAC 512 is provided as an analog left input to left synth DAC MUX 649 (and as an analog right input to right synth DAC MUX, not shown) in the analog mixer 606 (Fig. 45) of the CODEC module 4.
  • the resulting analog signals may then be applied to an audio amplifier and speaker for playing the generated sound. See section IV. CODEC MODULE for more details.
  • Each of the effects accumulators 1018 can accumulate any, all, or none of the effects data generated during a frame.
  • the data stored in the effects accumulators is written back as wavetable data to be read at a later time period.
  • the effects accumulators 1018 store values for longer than one voice processing time allowing signal flow from one voice to another voice.
  • the left 16-bit wide and right 16-bit wide accumulator data can also be output, in serial format, through serial output line 1020 to the serial transfer control block 540 in CODEC module 4.
  • the accumulator data can be output through the serial transfer control block 540 on line 1023 to an external serial port 798. See IV. CODEC MODULE for more details.
  • Test equipment an external DAC, or a digital signal processor can be connected to external serial port 798.
  • Serial data may also be input through external serial port 798, sent on line 1047 to the synthesizer DAC interface circuitry 1025, converted into parallel format by the serial to parallel convertor in the interface circuitry, and then sent to synthesizer
  • the synthesizer registers 1022 contain programmed parameters governing the processing of each voice. These various registers are referred to throughout this section on the synthesizer module, but these registers are discussed in more detail below in section N. ⁇ . Registers.
  • the voice parameters are programmed into the registers 1022 through register data bus 1024 by a programmed input/output (PIO) operation.
  • PIO programmed input/output
  • Figure 103 illustrates signal flow during voice generation and effects processing.
  • the synthesizer module 6 acts as a signal generator and either generates a tone or plays back recorded data from wavetable data 1002 contained in local ROM or DRAM. Wavetable data is written into the local DRAM through a system direct memory access (DMA) transfer through DMA bus 1026. Local memory is discussed in more detail in section VI.
  • LOCAL MEMORY CONTROL MODULE The addressing rate of the wavetable data 1002 controls the pitch or frequency of the generated voice's output signal. Address generator 1000 controls this addressing rate, but this rate is also dependent on any LFO variation.
  • the reference FC(LFO) signifies frequency control (i.e., the wavetable addressing rate which affects a voices' pitch or frequency) which is dependent on any LFO variation. LFO variations add vibrato to a voice.
  • the wavetable data 1002 is addressed and a data sample, S, is interpolated, the data sample is passed through three volume multiplying paths, as illustrated in Figure 103. As a data sample passes through any of the three volume multiplying paths, it is multiplied by three individual volume components.
  • the first volume component is VOL(L). (L) indicates that this volume component can be looped and ramped under register control.
  • the second volume component, VOL(LFO) adds volume LFO variations. LFO variations in volume add a tremolo to a tone. As illustrated, after the VOL(L) and VOL(LFO) components are multiplied, the voice's signal path splits three ways into each of the three volume multiplying paths. The top two paths generate stereo right and left data outputs for the voice.
  • the stereo positioning of a voice can be controlled in one of two ways: (i) a single pan value can be programmed, placing the signal in one of sixteen pan positions from left to right; or (ii) separate left and right offset values, ROFF and LOFF, can be programmed to place the voice anywhere in the stereo field. ROFF and LOFF can also be used to affect the total volume output. Right and left volume outputs for this voice are then summed with all other voices' right and left outputs generated during the same frame. The accumulated right and left outputs for the frame are then output to the Synthesizer DAC 512 in CODEC module 4.

Abstract

A monolithic integrated circuit for providing enhanced audio performance in personal computers is disclosed. The monolithic circuit includes a wavetable synthesizer; a full function stereo coding and decoding circuit (CODEC) including analog-to-digital and digital-to-analog data conversion; data compression, and mixing and muxing of analog signals; a local memory control module for interfacing with external memory; a game-MIDI port module; a system bus interface; and a control module for compatibility and circuit control functions.

Description

APPLICATION FOR PATENT TITLE: MONOLITHIC PC AUDIO CIRCUIT
Specification
Background of the Invention
1. Field of the Invention.
This invention relates generally to computer controlled audio systems and more particularly to an audio circuit for use with system boards and add-in cards for desktop and portable computers. The preferred embodiment of the present invention is particularly designed to be compatible with systems built primarily to run the MS-DOS, Windows, UNIX, and OS/2 operating systems, otherwise generally referred to IBM compatibles. The present invention includes a stereo audio CODEC and a digital wavetable audio synthesizer.
2. Brief Description of the Related Technology.
Typically, personal computers are manufactured with only limited audio capabilities. These limited capabilities provide monophonic tone generation to provide audible signals to the user concerning various simple functions, such as alarms or other user alert signals. Any voice capability is typically not high quality. The typical personal computer system has no capability of providing stereo, high-quality audio which is a desired enhancement for multimedia and video game applications, nor do they have built-in capability to generate or synthesize music or other complex sounds.
Musical synthesis capability is necessary when the user desires to use a musical composition application to produce or record sounds through the computer to be played on an external instrument, or through analog speakers and in multimedia (CD-ROM) applications as well. Typical sound cards also provide MIDI interfaces and game ports to accept inputs from MIDI instruments such as keyboard and joysticks for games.
Additionally, users at times desire the capability of using external analog sound sources, such as stereo equipment, microphones, and non-MIDI electrical instruments to be recorded digitally and/or mixed with digital sources before recording or playback through their computer. To satisfy these demands, a number of add-on products have been developed. One such line of products is referred to in the industry as a sound board. These sound boards are circuit boards carrying a number of integrated circuits and other associated circuitry which the user installs in expansion slots provided by the computer manufacturer. The expansion slots provide an ISA interface to the system bus thereby enabling the host processor to access sound generation and control functions on the board under the control of application software.
Presently, the most common sound boards in the industry are the
Sound Blaster, and Adlib. These boards include a monolithic FM synthesizer circuit for generating sound from data provided from system memory. Such boards also include a digital signal processing integrated circuit that carries out digital-to-analog and analog-to-digital conversions, processes commands from the host CPU under control of application software, generates control signals for the other circuits, processes MIDI data in and out, and provides data decompression on stored data. Other integrated or discrete circuits are necessary to interface with analog input or output ports, as well as separate circuits for system bus interface, among others.
These prior systems also have limited capabilities to produce audio-phile quality sound, are high power consumers and are not suitable for use in system board applications where expansion slots are not utilized. Furthermore, such prior systems are not suitable for Plug-n-Play environments which require compliance with industry standard self-configuring methodology. Prior sound cards employed on-board jumper switches to provide configuration data for the host CPU. Later versions of Sound Blaster, Sound Blaster Pro and Pro2, added stereo to sound output capabilities by providing upgraded FM synthesizer integrated circuits, stereo output jacks, stereo digital recording and playback, a separate mixer integrated circuit and a separate CD-ROM interface. The Pro DSP circuit provided record and playback at up to 44.1 KHz in mono or
22.05 KHz in stereo. The mixer allowed mixing sounds from the microphone, line-in, CD-input and the digital sound, and CD audio play in the background.
Such systems required multiple integrated circuits, did not provide Plug-n-Play compatibility, had limited mixing capabilities, were large power consumers, and were only useable in expansion-slot configuration.
Furthermore, the synthesizer function was limited in the number of voices that could be processed and was FM-based, as distinguished from more advanced wave table synthesizers. Such systems had limited mixing, panning and control functions for providing effects and did not provide individual voice effects.
Furthermore, such prior systems did not provide a local memory interface for temporarily storing sound data, but required system memory access for all data transfers. This limitation required frequent DMA or programmed I/O cycles to provide sound data for recording and playback, thereby imposing significant processor overhead.
These prior systems were also limited by an 8-bit sample size which limited dynamic range to 256 steps, and produced more pronounced aliasing than larger bit sample techniques. The latest Sound Blaster product, designated Sound Blaster 16 ASP, provided 16-bit playback and record sampling and 44.1 KHz stereo sampling rate. This latest version was a multiple chip embodiment which included a wavetable synthesizer circuit or chip, a dedicated processor circuit or chip, a separate bus interface chip, separate A/D and D/C circuits, an analog amplifier and other associated circuitry on a expansion board. While this system offered enhanced programmability, higher sampling rates and a larger sample size, it was nevertheless a multiple chip embodiment, suitable primarily for expansion slot use and was a high power consumer. This latest version offered no local memory, was not Plug-n-Play compatible and included a dedicated processor to process application and synthesis instructions. The wavetable option required a separate daughter board which included, among other things, a four megabyte ROM for storing wavetable data.
Popular prior art CODECs provide only fourteen sample rates for record and playback modes, which range between 5.51 and 48.0 Khz. Also, each such prior art CODEC device can only use the same sample rate for simultaneous record and playback. Record and playback rates are not independently programmable.
Another prior art system was offered by Advanced Gravis and Forte under the name Ultrasound. This system was another expansion slot sound board embodiment which incorporated into one chip the synthesizer, MIDI and game interfaces, DMA control and Adlib Sound Blaster compatibility logic. In addition to this ASIC the Ultrasound card included on-board DRAM (1 megabyte) for wavetable data; an address decoding chip; separate analog circuitry for interfacing with analog inputs and outputs; a separate programmable ISA bus interface chip; an interrupt PAL chip; and a separate digital-to-analog/analog-to-digital converter chip.
None of the prior systems provided single chip implementation of the synthesizer, data compression/decompression, CODEC for D/A and A/D operations, mixer, analog interface, system bus interface, interrupt and DMA control, and compatibility features. Multiple chip embodiments have obvious limitations relating to cost, size and speed, as well as power consumption.
Combining all the functions required and desired in a single chip embodiment, while avoiding unwanted noise and other signal denigration has been one limitation or obstacle to full integration. Another obstacle has been the unavailability of an efficient architectural design for the single chip embodiment. Still another obstacle has been the lack of an efficient way to control individual modules and to manage power to such a fully integrated system.
Furthermore, each of the prior systems had one or more limitations on compatibility with various industry standard software and/or hardware. None of the prior systems provided optional Plug-n-Play compatibility. The prior art systems either utilized the host CPU extensively for synthesizer functions, or provided a dedicated synthesizer processor thereby either increasing cost or slowing down the operation by requiring extensive host CPU overhead.
The system of the present invention solves each of these problems in a number of unique and efficient ways. The system of the present invention also provides enhanced capabilities heretofore unavailable.
Summary of the Invention
The present invention provides a monolithic PC audio integrated circuit which includes a system bus interface which is AT ISA-compatible, a system control module providing Plug-n-Play compatibility, system control registers, system control logic and interrupt generation and compatibility functions for existing PC audio software. The system of the present invention further includes a coding and decoding module (CODEC) for providing analog-to-digital and digital-to-analog conversion, data compression, and analog mixing and muxing of audio signals. A digital wavetable audio synthesizer module and a MIDI and game port module are also provided. The circuit of the present invention further provides a local memory module which enables the circuit to interface with external DRAM, ROM and serial EEPROM for Plug-n-Play compatibility. Data transfer for the circuit of the present invention is facilitated via an on-chip register data bus and control circuit. The circuit of the present invention further includes noise reduction attributes, a facility for external address decoding, buffered input and output capability, as well as other features which conserve on-chip resources.
Brief Description of the Drawings
A better understanding of the present invention can be obtained when the following detailed description of the preferred embodiment is considered in conjunction with the following drawings, in which:
Fig. 1 is a schematic architectural overview of the basic modules of the circuit C;
Fig. 2 is a schematic illustration of the physical layout of circuit C; Fig. 3 is a table summarizing pin assignments for the circuit C;
Fig. 4 is an alternative layout diagram for the circuit C; noise and a primary clock signal employed by the circuit C;
Fig. 5 is a table summarizing pin assignments for the circuit C grouped by module;
Fig. 6 is a schematic illustration of a typical full-featured implementation of a PC audio circuit C with associated circuits, buses and interconnections;
Fig. 7 is table summarizing pin assignments and functions that relate to local memory control;
Figs. 8, 9 and 10 comprise a table of register mnemonics with indexes and module assignments where appropriate;
Fig. 11 is a schematic diagram illustrating an example of multiplexing circuitry;
Fig. 12 is a block diagram schematic illustration of the system control module of the circuit C;
Fig. 13 is a schematic block diagram of the circuit C including modular interfaces to the register data bus;
Fig. 14 is a schematic diagram of implementation detailed for the register data bus;
Fig. 14a is a schematic diagram of a portion of the ISA bus interface circuitry;
Fig. 15 is a timing diagram illustrating worse case ISA-bus timing for the circuit C;
Fig. 16 is a timing diagram relating to buffered input and outputs for the circuit C;
Fig. 16a is a schematic diagram of a portion of the emulation logic for the circuit C;
Fig. 16b is a schematic block diagram of circuit access possibilities for application software and emulation TSR programs;
Fig. 17 is a schematic illustration of the Plug-n-Play state machine included within the circuit C;
Fig. 18 is a timing diagram relating to reading serial EEPROM data from external circuitry relating to Plug-n-Play compatibility;
Fig. 19 is a schematic illustration of a circuit for facilitating PNP data transfer from external circuitry to the circuit C via the register data bus;
Fig. 20 is a schematic illustration of a linear feed back shift register necessary to implement an initiation key for access to Plug-n-Play registers;
Fig. 21 is a flow chart illustrating the manner in which the Plug-n-Play circuitry associated with the circuit C transitions from isolation mode to either configuration mode or sleep mode;
Fig. 22 is a table summarizing resources required for programming the Plug-n-Play serial EEPROM;
Fig. 23 is a table providing data on all interrupt-causing events in the circuit C;
Fig. 24 is a schematic illustration of external oscillators and stabilizing logic associated therewith utilized by the circuit C;
Fig. 24a is a schematic illustration of logic and counter circuits associated with various low power modes of the circuit C;
Fig. 24b is a flow chart illustrating the response of circuit C to suspend mode operation;
Fig. 24c is a flow chart illustrating the various register-controlled low power modes of the circuit C;
Fig. 25 is a schematic illustration of details of the clock oscillator stabilization logic of Fig. 24;
Fig. 26 is a table describing events which occur in response to various power conservation modes enabled via the status of bits in register PPWRI contained within the circuit C;
Fig. 27 is a timing diagram showing the relationship between various power conservation modes and signals and clock signals utilized by the circuit C;
Fig. 28 is a table summarizing pins associated with the system bus interface included in the circuit C;
Fig. 29 is a block diagram schematically illustrating the basic modules which comprise the local memory control module of the circuit C;
Fig. 30 is a block diagram schematically illustrating the master state machine associated with the local memory control module of the circuit C;
Fig. 31 is a timing diagram illustrating the relationship of suspend mode control signals and a 32 KHz clock signal utilized by the circuit C;
Fig. 32 is a state diagram schematically illustrating refresh cycles utilized by the circuit C during suspend mode operation;
Fig. 33 is a timing diagram for suspend mode refresh cycles;
Fig. 34a is a timing diagram for 8-bit DRAM accesses;
Fig. 34b is a timing diagram for 16-bit DRAM accesses;
Fig. 34c is a timing diagram for DRAM refresh cycles;
Fig. 35 is a timing diagram illustrating how real addresses are provided from the circuit C to external memory devices;
Fig. 36 is a schematic block diagram of a control circuit for local memory record and playback FIFOs;
Fig. 37 is a diagram illustrating the relationship between data stored in system memory and interleaved in local memory via the circuit C;
Fig. 38 is a table describing data transfer formats for 8 and 16-bit sample sizes under DMA control;
Fig. 39 is a schematic block diagram illustrating circuitry for implementing interleaved DMA data from system memory to local memory via the local memory control module of the circuit C;
Fig. 40 is a schematic block illustration of the game port interface between external devices and the circuit C;
Fig. 41 is a schematic block illustration of a single bit implementation for the game input/output port of the circuit C;
Fig. 41a is a diagram illustrating input signal detection via the game port of the circuit C;
Fig. 42 is a schematic block diagram illustrating the MIDI transmit and receive ports for the circuit C;
Fig. 43 is a timing diagram illustrating the MIDI data format utilized by the circuit C;
Fig. 44 is a block diagram of the various functional blocks of the CODEC module of the present invention;
Fig. 45 is a schematic of the preferred embodiment of the left channel stereo mixer of the present invention;
Fig. 45a is a table of gain and attenuation values. Fig. 46 is a diagram of a partial wave form indicating signal discontinuities for attenuation/gain changes;
Fig. 47 is a block diagram showing zero detect circuits for eliminating "zipper" noise.;
Fig. 48 is a block diagram showing clock generation functions in the present invention;
Fig. 49 is a block diagram of serial data transfer functions of the present invention;
Fig. 49a is a block diagram of the serial transfer control block;
Fig. 50 is a block diagram showing internal and external data paths and interfacing with external devices, supported by the present invention;
Fig. 51 is a block diagram of the digital to analog converter block of the present invention;
Fig. 52 is a block diagram of the front end of the digital to analog converter block of the present invention;
Fig. 53a-53f are graphs showing outputs of various stages of the DAC block, including frequency response;
Fig. 54 shows six graphs representing outputs and frequency response of various stages of the DAC block;
Fig. 55 is a schematic representation of the Interp.l block, phase 1 of
Fig. 52;
Fig. 56 is a schematic representation of the Interp.l block, phase 2 of Fig. 52;
Fig. 57 is a schematic representation of the Interp.2 block of Fig. 52; Fig. 58 is a graph of the frequency response of the Interp.2 block of
Fig. 52;
Fig. 59 is a graph representing the in-band rolloff of the Interp.2 block of Fig. 52;
Fig. 60 is a schematic representation of an embodiment of the Interp.3 block of Fig. 52;
Fig. 61 is a schematic representation of another embodiment of the Interp.3 block of Fig. 52;
Fig. 62a is a graph of the frequency response of the Interp.3 block of Fig. 52;
Fig. 62b is a graph of the passband roUoff of the Interp.3 block of Fig. 52;
Fig. 63 is a schematic representation of the noise shaper block of Fig. 52;
Fig. 64 is a signal flow graph (SFG) of the noise shaper block in Fig. 52;
Fig. 65 is a plot of the poles and zeros in the s plane for the noise shaper block of Fig. 52;
Fig. 66 is a plot of the transfer function magnitude of the noise shaper block of Fig. 52;
Fig. 67 is a plot of the poles and zeros in the z plane of the noise shaper block of Fig. 52;
Fig. 68 is a graph of the transfer function of the noise shaper filter of Fig. 52;
Fig. 69 is a plot of the ideal and realizable zeros of the noise filter block of Fig. 52;
Fig. 70 is a plot comparing two embodiments of noise transfer functions for the noise shaper block of Fig. 52;
Fig. 71 is a plot of the noise and signal transfer functions of the noise shaper block of Fig. 52;
Fig. 72 is a plot of the signal transfer function magnitude in phase and passband of the noise shaper block of Fig. 52;
Fig. 73 is a graph of the group delay (sec.) of the noise shaper block of Fig. 52;
Fig. 74 is a graph of the constant attenuation/gain contours of various embodiments of the noise shaper block of Fig. 52;
Fig. 75 plots Amax versus noise gain k for an embodiment of the noise shaper block of Fig. 52; and
Fig. 76 is a graph of an embodiment of the noise gain k versus band width for g=-90dB of the noise shaper block of Fig. 52.
Fig. 77 is a graph showing the impulse response of the D/A FIR filter;
Fig. 78 is a graph showing the frequency response of the D/A FIR filter;
Fig. 79 schematically illustrates one embodiment of the D/A conversion circuit of the present invention;
Figs. 80 and 81 schematically illustrate another embodiment showing the differential D/A conversion circuit of the present invention;
Fig. 82 is a block diagram of the CODEC ADC of the present invention;
Fig. 83 is a block diagram of the front end of the CODEC ADC;
Fig. 84 is a graph illustrating the sigma-delta modulator output spectrum-range and phase for the ADC of the present invention;
Fig. 85 is a graph illustrating the sigma-delta modulator output spectrum, in detail;
Fig. 86 is a graph illustrating the output spectrum of the sinc6 Decim.1 filter output;
Fig. 87 is a graph illustrating the output spectrum of the half-band
Decim.2 filter output;
Fig. 88 is a graph illustrating the output spectrum of the 16-bit Decim.3 filter output;
Fig. 89 is a block diagram of the Decim.1 filter;
Fig. 90 graphically illustrates the frequency response of the Decim.1 filter;
Fig. 91 graphically illustrates a detailed frequency response of the Decim.1 filter;
Fig. 92 is a block diagram of the half-band Decim.2 filter-direct form; Fig. 93 is a block diagram of the half-band Decim.2 filter-transposed form;
Fig. 94 graphically illustrates the frequency response of the Decim.2 filter;
Fig. 95 is a detailed frequency response graph of the Decim.2 filter; Fig. 96 is a block diagram of the compensation filter of the CODEC
D/A conversion circuitry;
Fig. 97 graphically illustrates the frequency response of the Decim.3 filter; Fig. 98 graphically illustrates, in detail, the frequency response of the Decim.3 filter;
Fig. 99 graphically illustrates the compensator circuit frequency response (un-compensated);
Fig. 100 graphically illustrates the total frequency response of the compensator circuitry in passband (un-compensated); and
Fig. 101 graphically illustrates the total frequency response of the compensator in passband (compensated).
Fig. 102 is a block diagram of the synthesizer module of the present invention;
Fig. 103 illustrates signal flow in the synthesizer module of the present invention;
Figs. 104a- 104f are graphs illustrating addressing control options in the synthesizer module of the present invention;
Figs. 105a- 105e are graphs illustrating volume control options in the synthesizer module of the present invention;
Figs. 106a and 106b are graphs of low frequency oscillator waveforms available for the synthesizer module of the present invention;
Fig. 107 is an architectural diagram of an address controller of the synthesizer module of the present invention;
Fig. 108a and 108b are timing diagrams of the operations performed by the address controller of Fig. 107;
Fig. 109 is an architectural diagram of a volume controller of the synthesizer module of the present invention;
Fig. 110 is a timing diagram of the operations performed by the volume controller of Fig. 109;
Fig. 111 is an architectural drawing of the register array of the synthesizer module of the present invention;
Fig. 112 is a timing chart of the operations of the register array in Fig. 111;
Fig. 113 is an architectural drawing of the overall volume control circuitry of the synthesizer module of the preset invention;
Fig. 114a is a logic diagram of a comparator illustrated in Fig. 113; Fig. 114b is a timing chart of the operations of the comparator in Fig. 114a;
Fig. 115 is an architectural drawing of the LFO generator of the synthesizer module of the present invention;
Fig. 116 is an architectural diagram of the signal path of the synthesizer module of the present invention;
Fig. 117 is a timing diagram of the operations performed by the signal path of Fig. 116;
Fig. 118 is an architectural diagram of accumulation logic of the synthesizer module of the present invention;
Fig. 119 is a timing diagram of the operations performed by the accumulation logic of Fig. 118; and
Fig. 120 is a timing diagram of the overall operations performed by the synthesizer module of the present invention.
THESE ARE FIGS. FROM D-5733-MAKE COPIES OF THESE 2 FIGS:
Fig. 1 is a functional block diagram of the sigma-delta modulator of the present invention; and
Fig. 2 is a schematic illustration of the sigma-delta modulator of the present invention.
Description of the Preferred Embodiment
The following description sets forth the preferred embodiment of a monolithic PC audio circuit, including system architecture, packaging, power management, system control, timing and memory interfacing, as well as significant implementation details. Various options for circuits suitable for use with the present invention are disclosed in the following United States patent applications, the contents of which each are incorporated herein by reference. An alternative technique for reducing power consumed by clock driven circuits is described in United States patent application serial No. 07/918,622, entitled "Clock Generation Capable of Shut Down Mode and Clock Generation Method," assigned to the common assignee of the present invention. Throughout the specification where it is required to affect the status of single bits within a register or field, the preferred method and apparatus for performing such single-bit manipulations are set forth in United States patent application serial No. 08/171,313, filed December 21, 1993, and entitled "Method and Apparatus for Modifying the Contents of a Register Via a Command Bit," assigned to the common assignee of the present invention.
Throughout this specification where reference is made to various timers, gating and other control logic, unless otherwise specified, the precise logic circuit implementation details may not be provided. In such instances the implementation details are considered trivial given the state of the art in computer-assisted logic design and layout techniques available for VLSI logic circuit design.
Under the current state of the art, such details are implemented from selectable, programmable logic arrays or blocks of standardized logic circuits made available for such purposes on VLSI circuits. Timers, for example, can be readily implemented by providing a clock signal derived from external oscillator signals to an appropriate logic circuit. An 80 microsecond clock signal can be provided by dividing the 16.9 MHz oscillator signal by 1344 for example. The generation of control signals which respond to the status of various bits of data held in registers throughout the circuit C is a simple matter of providing control inputs to blocks or arrays of gate circuits to satisfy the required input/output or truth table requirements. Consequently, these details, where not considered significant to the claimed invention, need not and have not been provided since such matters are clearly within the level or ordinary skill in the art.
I. ARCHITECTURAL OVERVIEW
Referring now to Fig. 1, an architectural overview of the basic modules of the circuit C is provided. The circuit C includes five basic modules: a system control module 2; a coder-decoder (CODEC) module 4; a synthesizer module 6; a local memory control module 8; and MIDI and game port module 10. These modules are formed on a monolithic integrated circuit. A register data bus 12 provides communication of data between modules and between circuit C and a system bus interface 14. Timing and control for circuit C is provided by logic circuits within system control module 2 operating in response to clock signals provided by one or both oscillators 16 and 18 depending upon the particular system requirement. Control of circuit C is generally determined by logic circuits included within module 2 which are in turn controlled by the state of various registers and ports provided throughout the circuit C.
Fig. 1 is a functional block diagram and does not correspond directly to a physical layout for the integrated circuit embodiment. Various circuits, interconnects, registers etc. which provide or facilitate the functions specified in Fig. 1 may be formed in several locations spread throughout the integrated circuit as needed or as dictated by manufacturing processes, convenience or other reasons known to those of ordinary skill in the art. The circuit of the present invention may be fully integrated using conventional integration processes such as are well known in the industry. The circuit of the present invention is packaged in a 160 pin plastic quad flat pack (PQFP), as will be described in more detail below.
A. Physical Layout Features and Noise Reduction.
It is a feature of the present invention that the physical layout of the various modules and the pin-out arrangement have been designed to isolate analog circuits and inputs/outputs from the noisier digital circuitry and pins. Referring now to Fig. 2, an example of the desired physical layout relationship among various portions or modules of the circuit C is schematically illustrated. To minimize digitally induced noise in analog circuits, the most noise sensitive elements of circuit C, e.g., those associated with the analog aspects of the CODEC, specifically the mixer block, are located near the circuit edge opposite the largely digital local memory control and synthesizer modules.
To further isolate digitally induced noise in the analog circuitry, the pin-out arrangement of the package isolates analog mixer input and output pins in a group 20 as far removed as possible from the noisiest digital output pins and clock inputs, which are located on the opposite side 22.
Furthermore, the most sensitive pin group 20 is flanked by less noisy inputs in regions 26 and 28. Representative pin assignments are given in Fig. 3, where pin names correspond to industry standard designations, such as the ISA Plug-n-Play specification, version 1.0, May 28, 1993, available from Microsoft Corporation and the industry standard ISA bus specification as set forth in AT Bus Design by Edward Solari, published by Annabooks, San Diego, CA; ISBM 0-929392-08-6, the contents of which are incorporated by reference herein. An alternative pin assignment is provided in Fig. 3a, which likewise maintains the desired physical relationship among the various modules.
Since it is a feature of the present invention to provide compatibility with existing standard or popular hardware and software such as the ISA Plug-n-Play specification, AdLib, Sound Blaster and Graves Forte Ultrasound applications, references throughout this application to certain signal and register mnemonics such as ISA, PNP, AdLib, GUS, generally refer to compatible configurations for the circuit of the present invention. It also should be noted that a # sign following mnemonics for signals, or bit statusflags and the like, indicates such are active low.
Referring now to Fig. 3, analog pins generally include those in the range of 96 through 113, including a plurality of analog power (AVCC) and ground (AVSS) pins. It is a noise reduction feature of the present invention to provide individual VSS and VCC pins for the majority of individual analog pins. Pins 82-95 and 114 are less noisy inputs. Other layout features include placing the external oscillator pins XTAL1[I,0] and XTAL2[I,0] near the clock block of the system control module. This system control module clock block should also be placed near the CODEC clock block 30. It is also important that all 16.9 MHz clocks used throughout the circuit C are implemented to minimize the skew between them. Minimizing internal clock skew is important for timing purposes as well as noise reduction in the present circuit.
It is a feature of the present invention to minimize noise in the analog signals ensuring that analog sampling and digital circuit activity be clocked independently. In the preferred embodiment, separate analog and digital clock signals with different frequencies are provided from a common oscillator. The analog clock signal is not derived from the digital or vice versa, so there is no defined phase relationship between the two. Furthermore, an analog clock skewing circuit is provided to reduce the possibility that digital and analog clock driven events overlap.
Referring now to Fig. 5, further explanation of the pin assignments according to a general functional group is given. Those pins associated with System Control Module 2 are listed under that heading with a mnemonic and number of pins provided. Likewise, those pins associated with the CODEC, local memory and ports and miscellaneous function appear under those headings respectively. Note here, as well as elsewhere in this specification, reference to "CD" pins or functions, such as CD_DRQ, should be considered equivalent to "EX," such as EX_DRQ which generically designates a pin of function associated with an external device.
B. Typical System Implementation.
Referring now to Fig. 6, a typical full-featured implementation of a PC audio circuit C with associated circuits, buses and interconnections is described. The configuration of Fig. 6 is exemplary of how the circuit C would be utilized in a PC audio card, taking advantage of all available RAM and EPROM resources and being fully compatible with the ISA Plug-n-Play specification.
In Fig. 6, the circuit C is interfaced to host computer system (not shown ) via system bus interface module 14 and the industry standard
AT/ISA system control, address and data connections. These include: system data (SD); system address (SA); system byte high enable (SBHE); interrupt request (IRQs); input/output channel check (IOCHCK); direct memory access request (DRQ) and acknowledge (DAK); input/output read (IOR); input/output write (IOW); reset; address enabled (AEN); terminal count (TC); input/output channel ready (CHRDY); and input/output chip select 16 (IOCS 16). These connections provide standard communication and control functions between the circuit C and the host computer system.
In a typical embodiment, the following input/output lines and associated circuitry and/or devices are interfaced to the CODEC module 4.
Provision is made for four sets of stereo inputs via standard jacks, 42, and a stereo analog output (line out L, R) 44 with external stereo amplifier 46 and jacks 48. A monophonic microphone/amp input 50 and monophonic output 52 via external amplifier 54 are provided. An external capacitance, resistance circuit 56 is provided for deriving reference bias current for various internal circuits and for providing isolation capacitance as required. A general purpose, digital two-bit flag output 60, controlled by a programmable register, is provided for use as desired in some applications. Game/MIDI ports 62 include 4-bit game input 65, 4-bit game output 66 and MIDI transmit and receive bi-directional interface 68.
The system control external connections include the 16.9344 MHz and 24.576 MHz clocks 16 and 18 and a 32 KHz clock or suspend input 70. Input 70 is used for memory refreshing and power conservation and is multiplexed with other signals as described in detail elsewhere in this application.
The interface for local memory control module 8 includes frame synchronize (FRSYNC) and effect output 72 which is used to provide a synchronizing clock pulse at the beginning of each frame for voice generation cycles and to provide access to an optional external digital signal processor
74 which may be used to provide additional special effects or other DSP functions.
Plug-n-Play chip select 76 enables an external EPROM 78 for providing configuration data over a 3-bit data bus 80 during system initialization sequences. For data and address communication between local memory control module 8 and external memory devices an external 8-bit data bus 82 and an 8-bit address bus 84 is provided.
ROM chip select 83 and 2-bit ROM address output 85 are used to address one-of-four, two-megabyte by sixteen bit EPROMs 86 which are provided for external data and command sequence storage, as described in more detail elsewhere in this specification. EPROMs 86 interface with circuit C via 4-bit output enable 88 which is a one-of-four select signal multiplexed with ram column address strobe 90 to conserve resources. One aspect of addressing for EPROMs 86 is provided by a 3-bit real address input 92. The address signals on line 92 are multiplexed with multiplexed row-column address bits for DRAM cycles provided on DRAM input 94. Pin 96 of circuit C (MD[7:0]) is an 8-bit bidirectional data bus which provides data bits for DRAM cycles via data [7:0] lines 98. Pin 96 is multiplexed in ROM cycles as real address bits 18:11 to EPROMs 86 and input data bits 7:0 (half of RD 15:0) to circuit C. Data communication from EPROMs 86 is via 16-bit data output 100 (RD[15:0]) which is split and multiplexed into circuit C via 8-bit buses 82 and 84 during ROM cycles. EPROM data input is carried over bidirectional line 96 and bidirectional line 102 (RD[15:8]) during ROM cycles.
Line 102 also provides 8-bit ROM addressing (RLA[10:3]) during multiplexed ROM address and data transfer cycles. Line 102 also is multiplexed to provide row-column address bits (MA[10:3]) for DRAM cycles.
Output 104 is a ROM-address hold signal used to latch the state of 16-bit ROM addresses provided via outputs 96 and 102, buses 82 and 84 and
16-bit address input line 106 during ROM accesses by the circuit C. A 16-bit latch 108 is provided to latch ROM addresses in response to the ROM-address hold signal.
The circuit C supports up to four, 4-megabyte by 8-bit DRAMS 110 used for local data storage. Circuit C interfaces with DRAMS 110 via various address, data and control lines carried over two 8-bit buses 84 and 86, as described above. Row address strobing is provided via RAS output pin 112. Output 112 is provided directly to the RAS inputs of each DRAM circuit 110. For clarity, in Fig. 6, output 112 is also shown as providing the write enable (WE) output control signal which is provided to the write enable input of each
DRAM circuit 110. In the preferred embodiment, the write enable output is provided on a separate output pin (see Fig. 3) from circuit C. DRAM column address strobe (CAS[3:0]) is provided via BKSEL[3:0] output pin 114 during DRAM cycles. 3-bits of DRAM row and column addressing are provided via output 116, and an additional eight address bits are multiplexed via bidirectional pin 102, bus 84 and DRAM input 118 during DRAM cycles. A summary of all local memory interface terminals is provided in Fig. 7.
Referring again to Fig. 6, the circuit C provides seven interrupt channels 130 from which up to three interrupts can be selected. In the preferred embodiment, two interrupts are used for audio functions and the third is used for the CD-ROM or other external device. Also shown at line 130 (a group of eight lines) is the ISA standard IOCHCK output, which is used by the circuit C to generate non-maskable interrupts to the host CPU. The circuit of the present invention provides general compatibility with Sound Blaster and AdLib applications. When running under MS-DOS a terminate and stay resident (TSR) driver sequence must be active with the host CPU to provide compatibility. One such driver sequence is that provided by Ultrasound and called Sound Board Operation System (SBOS). When application software, typically a game, sends a command to a register in circuit C designated as a Sound Blaster or AdLib register, the circuit C captures it and interrupts the processor with the IOCHK pin. The nonmaskable interrupt portion of the SBOS driver then reads the access and performs a software emulation of the Sound Blaster or AdLib function.
The circuit C also provides six DMA channels 136 and DMA acknowledge lines 138 from which three DMA functions can be selected. The three DMA functions include: wave-file record transfers and system-memory transfers; wave-file playback transfer; and a DMA channel required by the external CD-ROM interface. The availability of local memory DRAMs 110 and the provision of large first-in/first-out data registers in the DRAMs, as is described herein below, reduces the requirement for wave-file DMA functions, and in some instances can eliminate the need for wave-file DMA channels altogether.
Referring to Fig. 6, for use in those systems which include a compact disc drive, the circuit C provides necessary signals or hooks to facilitate the use of an external PNP compatible device driver such as external CD interface 125. The circuit C provides separate interrupt request and direct memory address request pins for external interface 125, which are schematically shown as a single line 124. In the preferred embodiment, a separate input pin is provided for each (see Fig. 3). External device chip select and DMA acknowledge outputs are provided by circuit C via separate output pins (Fig. 3) shown collectively as line 126 in Fig. 6. Data exchange between circuit C and the external device drive is provided via the ISA standard 16-bit bidirectional data bus 128.
II. REGISTERS AND ADDRESS ALLOCATION
Circuit C is, in general, a register controlled circuit wherein various logic operations and alternative modes of operation are controlled by the status of various bits or bit groups held in various registers. Complete descriptions and definitions of registers and their related functions are set forth in the charts and written description included elsewhere herein. Circuit C also includes several blocks of input/output address space, specifically, five fixed addresses and seven relocatable blocks of addresses. In the register description given herein, register mnemonics are assigned based on the following rules:
1. The first character is assigned a code that specifies the area or module to which the register belongs;
Figure imgf000023_0001
2. The middle two to four characters describe the function of the register.
3. The final character is either R for a direct register, P for a port (to access an array of indexed registers), or I for an indirect register.
A. Relocatable Address Blocks.
The seven relocatable address blocks included in the circuit C are referenced herein according to the mnemonics set forth in Table I below, wherein PNP refers to industry standard Plug-n-Play specifications:
Figure imgf000024_0002
B. Direct Address Summary.
There are eight groups of functions in circuit C that utilize programmable registers. The status of programmable registers are subject to control in response to instructions executed by the host CPU system. The eight groups of functions and their associated direct addresses are listed in Table II below. Two of the addresses for Plug-n-Play registers are decoded from all twelve bits of the ISA address bus (SA[11:0]). The remaining addresses are decoded from the first ten bits (SA[9:0]).
Figure imgf000024_0001
A complete listing of all input/output programmable registers and ports is given in Figs. 8-10 wherein all address numbers are in hexadecimal format. Index values provide alternative function addresses using a common basic address. C. External-Decoding Mode.
In addition to the ten and twelve-bit address spaces used for internal input/output mapping, the circuit C also provides an optional external- decoding mode wherein four system address bits (SA[3:0], Figs. 3,6) and two chip-select signals, implemented as SA[5,4], address registers within circuit C. This mode is selected by the status of address pin RA [20] at the trailing edge of the system reset signal.
If RA [20] is low at the trailing edge of the reset signal, then normal input/output address decoding is implemented, where system address inputs SA[11:0] address all the registers in the circuit C. If RA[20] is high at the trailing edge of system reset, then external decoding mode is implemented:
Figure imgf000025_0001
This multiplexing can be provided in the manner discussed below with regard to other multiplexed pins and functions.
The following table shows how direct addressed registers and ports are accessed in external decode mode. Indexed registers are accessed the same way as in internal decoding mode (see preceding register table), except that the direct addresses change to the ones shown in Table III below.
Figure imgf000025_0002
Figure imgf000026_0001
D. DMA Accesses.
A number of registers and defined first-in/first-out address spaces within circuit C are accessible via DMA read and write cycles. These are listed in the following tables, where LMC and CODEC refer to the module within circuit C where such registers and FIFOs reside:
Figure imgf000026_0002
External decoding mode is utilized in those systems which are non- PNP compliant to provide access to internal registers and ports via external decoding logic circuits.
E. Multiplexed Terminals.
To conserve resources, several groups of external terminals or pins, in addition to the ROM/DRAM multiplexed address and data transfer pins described above, are multiplexed between alternate functions. Four of the groups are multiplexed based upon the status of external pins upon the trailing edge of the reset signal, which occurs upon power up or other system resets.
Referring now to Fig. 11, it is desired to multiplex pins 139 and 140 which correspond to the suspend # and C32KHZ inputs in one state, with the FRSYNC# and EFFECT# outputs in the alternate state. The functions served by these signals are discussed elsewhere herein. In the circuit C, multiplexing is provided for these pair of pins by sensing the state of terminal RA[21] (see Fig. 6) at the trailing edge of the reset signal. By providing a pull-up resistor 142 on the RA[21] pin or not providing such a resistor, the D-input to latch 144 can be set to a low or high value. Latch 144, upon being clocked by the trailing edge of the reset signal will provide at the Q output a corresponding low or high output. This latch output is provided to a 4:2 multiplex circuit 146. Multiplexor 146 assigns pins 139 and 140 to the SUSPEND# and C32KHZ function if the Q output is high, and alternatively, assigns pins 139 and 140 to the EFFECT# and FRSYNC# output function of the Q output is low.
Multiplexing or selecting between Plug-n-Play compatible expansion card mode and system board mode is provided in the same manner, by latching the state of input pin PNPCS on the trailing edge of the reset signal. Plug-n-Play mode is selected by a low value, and system board mode selected by a high value. The selection is made depending on whether the circuit C is being used in a Plug-n-Play compatible system, or a system board, non Plug-n-Play compatible system.
A summary of the pins that are multiplexed based on modes selected at reset is provided in Table V below.
Figure imgf000027_0001
To further conserve resources, the circuit C includes multiplexing between external pins relating to compact disk drive control and serial port synchronization, clock and data transfer used when an external digital signal processing circuit or other external, serial format circuits are utilized. This is more fully discussed in the CODEC module description below.
Referring to Fig. 6, control of an external device, such as a CD drive, is provided within the system control module via the EX_IRQ (interrupt request), EX_DRQ (DMA request), EX_DAK# (acknowledge) and CD_CS# (chip select) pins. These four pins are illustrated schematically as lines 124 and 126 in Fig. 6. When circuit C is functioning in a serial transfer mode (as discussed more fully in the CODEC description below), multiplexing of these four external device control pins is controlled by the status of bit seven of register ICMPTI. External serial transfer mode is enabled when ICMPTI[7] is high. In that case, the external device control pins are multiplexed as follows:
Figure imgf000028_0002
The ESPSYNC, ESPCLK, ESPDIN and ESPDOUT functions correspond to synchronization pulse, clock, data in and data out, respectively.
The following is a table of all the pins in the circuit C, sorted by I/O pin type:
Figure imgf000028_0001
Figure imgf000029_0001
III. SYSTEM CONTROL MODULE
A. System Control Functions.
Referring now to Fig. 1, the system control module 2 includes numerous registers, compatibility logic, Plug-n-Play ISA implementation logic, interrupt and DMA channel selection logic, and miscellaneous control functions such as clocks, resets, test logic, etc. System control module 2 is shown in greater detail in Fig. 12.
Referring now to Fig. 12, system control module 2 includes a system bus interface block 150, industry software compatibility logic block 152, interrupt and DMA channel selection logic block 154, a Plug-n-Play logic block 153, a register data bus 12, and a miscellaneous logic and timing block 158. The system control module in general controls the functioning of the circuit C in response to various timing, and control signals as well as enables responses to control functions held in various registers which serve to change the modes of operation, power consumption levels, and other control features.
1. System Bus Interface.
System bus interface 150 provides the hardware links between the processor-controlled system bus 156 and the various modules and portions of circuit C. Circuit C is designed to be fully compatible with the Plug-n-Play ISA system bus specification. One aspect of the Plug-n-Play ISA specification is a requirement for an interface to a serial EEPROM where the system configuration data is stored and available during system initialization to provide configuration data to the host CPU. The system bus interface also has to comply with the ISA portion of the EISA bus specification. These two specifications are industry standards and commonly available. The ISA bus interface 150 provides interface compatibility with a 16-bit data bus, which when in 5 volt mode has a drive capability selectable to be either 24, 12 or 3.2 miliamps. The power up default is 24 miliamps. In output mode, the data bus is edge-rate controlled and the delay between lines is mutually skewed to reduce the effects of ground bounce.
ISA bus interface 150 also provides interface for a 12-bit address bus and support for two audio interrupts and one CD-ROM or external device interrupt chosen from seven interrupt request lines 130. Support is also provided for use of the IOCHK signal to generate non-maskable interrupts to the host CPU.
The interface 150 also provides support for three DMA channels chosen from six sets of DMA lines 136 and a corresponding set of DMA acknowledge lines 138. In accordance with the ISA DMA specification, the six channels available are 0, 1, 3, 5, 6 and 7 (channel 0, 1 and 3 are 8-bit DMA channels and channels 5, 6 and 7 are 16-bit DMA channels). The three DMA functions supported are: wave-file record transfers and system-memory transfers; wave-file play transfers; and DMA channel required by the CD-ROM or external device interface. A mode is provided whereby both record and play functions can be mapped to the same DMA channel, although only one can be enabled at a time.
2. The Register Data Bus.
Data distribution between the ISA bus and the circuit C is provided via register data bus 12. Register data bus 12 facilitates system bus input and output and DMA accesses to registers provided throughout the circuit C. Referring now to Fig. 13, register data bus interfaces via a plurality of bi-directional data bus transceivers 160 to synthesizer registers 162, local memory control registers 164, system control registers 166, MIDI and game ports and registers 168 and CODEC registers 170. The purpose and function of these registers is described more fully elsewhere in this specification. A bi-directional data bus transceiver 160 is also provided between register data bus
12 and ISA data bus 172, which is the data portion of ISA system bus 156 shown in Fig. 12. Register data bus 12 also interfaces with various local memory latches 173, 174 and 175 and CODEC FIFOs 176 and 178, as will be described in detail elsewhere in this specification.
Circuit C supports either eight or 16-bit data transfer to or from the system data bus. In the case of input/output accesses from the ISA data bus, the alignment of the data to and from the register data bus is defined by the least significant bits of the ISA address bus. These are designated SA[0] and SBHE#, as shown in Fig. 6. These two bits are decoded as shown in the following Table VI for accesses to other than the general input/output data ports (I8/16DP):
Figure imgf000031_0001
Referring now to Fig. 14 details of register data bus control are illustrated. Register data bus 12 is formed of two 8-bit busses 180 and 182. Low byte bus 182 interfaces via data bus transceiver 184 to the low byte of system data bus 128 (see Fig. 6). High byte bus 180 interfaces to high byte of system data bus 128. Controlled bus driver 186 transfers data between buses 182 and 180 to effect data translation set forth in the table above, in response to control and decoding logic 190. Control logic 190 responds to input SBHE#, and SA[0] to generate control signals via lines 192, 194, 196, 198 and 200 to implement the data translation set forth in the table above.
An 8-bit latch 202 is provided to latch the low byte data until the high byte is active to provide 16-bit input/output accesses. Controlled driver 204 responds to control signals from control and decoding logic 190 to effect simultaneous low and high byte input/output accesses.
Control logic 190 also receives ISA bus signals IOR# and IOW# which enable read or write accesses respectively. While these inputs are shown as a single line 206 they are provided on individual pins to circuit C, as are the input signals illustrated on lines 208 and 210. PNP data transfers under the control of logic circuits 190 and 212 are provided via bus 182 and controlled bi-directional transceiver 214. PNP logic functions and registers are described in detail elsewhere in this specification. Control and decoding logic 190 may be implemented in any suitable conventional method to provide industry standard ISA system bus interface control and address decoding and to implement the data handling protocol set forth herein. Likewise, PNP logic circuit 212 may be implemented with conventional circuits to provide an industry standard PNP complaint interface.
Control and decode logic 190 provides conventional handshake, decoding and bus interface circuitry to interface with industry standard ISA system bus.
Accesses to all PNP registers use odd, 8-bit addresses. Since IOCS16# is not asserted for these accesses, the lower 8 bits of the ISA data bus are used. These are passed from/to the lower 8 bits of the register data bus.
IOCS16# is an industry standard interface signal asserted via an external pinout (see Fig. 6).
I8DP located at P3XR+5 and I16DP located at P3XR+ (4-5) are used to access 8 and 16-bit, indexed registers included in the circuit C. I16DP is the only port on the circuit C that is capable of 16-bit I/O accesses. IOCS16# is asserted for all accesses to these general data ports. The general I/O data port accesses are translated is a follows:
Figure imgf000032_0001
System bus interface 150 is responsible for translating 16-bit I/O writes that are broken up by software into two 8-bit writes (even byte first, then odd byte). For this, the even-byte write is latched in the latch 202 and provided over the low half of the register data bus during the subsequent odd-byte write. The register data bus will provide whatever was last latched in an even-8-bit-I/O write during odd-8-bit-I/O writes.
For DMA accesses, the data width is determined by the DMA channel used as follows:
Figure imgf000033_0001
During 8-bit DMA and I/O reads, the appropriate byte is driven on the ISA data bus 128. The other byte is not driven; it will remain in the high- impedance state.
It should be noted that to make sure the register data bus' voltage does not drift into the transition region when it is not being driven, weak feedback inverters ("keeper" or "sticky-bit" circuits) are provided in accordance with conventional, well known methods. Such circuits provide a weak feedback path that drives the node voltage back on itself to keep it from floating.
ISA Data Bus Drive Considerations. There are three special ISA-data-bus design facets built into the IC for the purpose of reducing the peak return current required when the data bus is driving out. The first is that the output drive capacity is selectable, via a programmable register, to be either 24, 12 or 3.2 milliamps (when VCC is at 5 volts). The second is that there is a special current restriction circuit built into the output buffers that slows the edge rates; this circuit is implemented in the same way as that used by the
PC Net ISA chip, 79C960/1. The third design aspect is that the data bus is broken up into a few groups, each of which is skewed from the others, as shown in the Fig. 14a.
3. Register Data Bus I/O Decoding.
There are seven relocatable and four non-relocatable blocks of address space decoded. They are:
Figure imgf000034_0002
The notation "PPWRI[SD]" in the above table indicates the circuit C is in shut-down mode, initiated by a specific I/O write to PPWRI.
The 2XX and 3XX decodes are further broken down as follows:
Figure imgf000034_0001
AEN. The decodes above are only enabled when AEN is low.
IOR and IOW. Along with the above decodes, the SBI 150 provides IOR and IOW from the ISA data bus. The worst case ISA-bus timing that must be assumed when interfacing to these signals is illustrated in Fig. 15. Note that this diagram shows the fastest I/O cycle possible which will only occur during accesses to the single 16-bit port that is addressable in the IC, P3XR=(4-5). All other ports will follow 8-bit timing (IOCS16# is not driven active), which is much slower, IOR# and IOW# stay active for about 530 nanoseconds for 8-bit I/O cycles.
IOCHRDY Control. Only accesses to P3XR+2 through P3XR+7 are capable of extending the ISA-bus I/O cycle by causing IOCHRDY to become inactive; accesses to all the P2XR, ports, CODEC, and Plug-n-Play ISA registers never extend the cycle. For the registers that can extend the cycle (including the 46 registers indexed by IGIDXR), the following categories exist:
Figure imgf000035_0001
Buffered I/O writes are important because they allow the CPU to continue without having to wait. However, if not handled properly, they can be the source of problems resulting from mixing up the order in which the I/O cycles are handled. For example, if there were a buffered I/O write to local memory immediately followed by a write to the local memory I/O address registers, then the write to local memory may be sent to the wrong address. This kind of problem is handled by forcing any subsequent accesses to the circuit C to be extended while there is a buffered I/O write in progress. Referring now to Fig. 16, IIOR#, IIOW#, and IBIOWIP# are internal signals. IIOR# and IIOW# become active after the previous buffered write has completed, signaled by IBIOWIP# (buffered I/O Write) becoming inactive. Note that IIOR# and IIOW# are not gated by IBIOWIP# during DMA cycles.
The registers that allow buffered I/O writes-called buffered registers- are the synthesizer voice-specific registers, IGIDXR = 00h-ODh and 10h-18h, the Local Memory Control (LMC) 16-bit access register, IGIDXR = 51h, and the LMC Byte Data Register, LMBDR. An I/O write to any of these registers automatically causes IBIOWIP# to become active so that IOCHRDY will become inactive during the next I/O access to the circuit C. An I/O read to any of the buffered registers causes the logic to (1) force IOCHRDY inactive (regardless as to whether IBIOWIP# is active), (2) if IBIOWIP# is active, wait until it becomes inactive and keep IOCHRDY inactive, (3) wait for the read-data to become available to the ISA bus, and (4) allow IOCHRDY to become active; at this point the cycle is finished off like a zero-wait-state cycle.
Control IGIDXR. If IGIDXR is in auto-increment mode (SVSR), then it will increment on the trailing edge of either an 8-bit I/O write to P3XR+5 or a 16-bit write to P3XR+(4-5); if the write was to a buffered port, then
IGIDXR is incremented after the trailing edge of IBIOWIP#.
4. Existing Game Card Compatibility.
The system control module 2 includes logic and registers needed for compatibility with existing game-card software. The circuit C is compatible with software written for native mode Ultrasound, MPU-401, Sound Blaster and AdLib. Logic circuits and timers for compatibility are designated generally as block 152 in Fig. 12. These include the following functions: (i) registers described in the register description part of this document; and (ii) two 8-bit timers, one having an 80 microsecond resolution and the other a 320 microsecond resolution; (iii) two general purpose registers; (iv)
MPU-401 status emulation flags and control registers.
a. AdLib Timer 1 and Adlib Timer 2. AdLib Timer 1 is an 8-bit preloadable counter that increments to OFFh before generating an interrupt. It is clocked by an 80 microsecond clock. AdLib Timer 2 is the same, except that it is clocked by a 320 microsecond clock. On the next clock after they reach OFFh, the interrupt becomes active and they are re-loaded with their programmed value (UAT1I and UAT2I). The interrupts are cleared and enabled by UASBCI[3:2]. Both timers can be changed to run off the 1 MHz clock by UASBCI[4]. These timers are also enabled by UADR[STRT1] and UADR[STRT2].
b. Auto-Timer Mode. It is possible to place the circuit C into auto-timer mode by writing to UASBCI[0]. This mode is used to emulate AdLib hardware. When in auto-timer mode, reads of UASRR provide the state of various flags instead of UASWR. When in auto-timer mode and UACWR has been set to 04h, the following changes take place:
(1) write to UADR no longer cause interrupts; (2) writes to UADR are no longer latched in the simple register that is readable from that same address; and (3) writes to UADR are instead latched in a register that drives out various flags related to the control of the AdLib timers.
c. General Purpose Registers. Logic block 152 also includes two 8-bit general purpose registers that are used for MPU-401 emulation and to support other emulation software. The general purpose registers, referred to as UGP1I and UGP2I, can be located anywhere in the
ISA 10-bit I/O address space via UGPA1I, UGPA2I, and ICMPTI[3:0]. Each register actually represents two registers: one that is read out to the application and one that is written in by the application. When the registers are written (by the application) at the emulation address, they may be enabled to generate an interrupt; they are subsequently read (by the emulation software that received the interrupt) via a back-door access location in the GUS Hidden Register Data Port (UHRDP). Writing to those same back-door locations, updates the general purpose registers associated with the read operation. This emulation protocol is schematically illustrated in Fig. 16a.
d. MPU-401 Emulation. Several controls have been added to the general purpose registers in support of MPU-401 emulation; the assumption is that there is an MPU-401emulation TSR running concurrently with the application (typically game software). To match the MPU-401 card, the emulation address (UGPA1I, UGPA2I, and ICMPTI[3:0]) may be set to match the MIDI UART address. The two UART addresses can be swapped so that the receive/transmit data is accessed via P3X0R+0 and the control/status data is accessed via IVERI[M401]. Application writes to the general purpose registers cause interrupts (potentially NMIs). Emulation software captures the interrupts, reads the data in the emulation registers via the back door (UHRDP), and uses it to determine how to control the synthesizer. The MIDI commands may also be sent to the UART so that the application can be driven by the same interrupts and observe the same status as the MPU-401 card.
Fig. 16b is a schematic block diagram showing the access possibilities for the application and the emulation TSR. The switch symbols are enables that are controlled by the IEMUAI and IEMUBI emulation control registers.
MPU-401 Status Emulation. Two MPU-401 status bits are generated, DRR# (Data Receive Ready, bit 6) and DSR# (Data Send Ready, bit 7), which are readable via UBPA1I. The intended meaning of these bits is as follows: DRR# becomes active (low) when the host (CPU) is free to send a new command or data byte to the UART; DSR# becomes active (low) when there is data available in the UART's receive data register. Note that the names of these bits are derived from the perspective of the MPU-401 hardware rather than the CPU. Selection between reading these bits and the actual data written to the emulation register comes from IEMUBI[5:4].
DRR# is set inactive (high) by the hardware whenever there is a write to either of the emulation registers via the emulation address (ICMPTI[3:0],
UGPA1I, UGPA2I), if a write to that register is enabled. Writes to UGP1I[6] via the back door (UHRDP) also updates the state of this flag. This bit defaults to high at reset.
DSR# is set inactive (high) by the hardware when there is a read of UGP2I via the emulation address (ICMPTI[3:2], UGPA2I). Writes to
UGP1I[7] via the back door (UHRDP) also update the state of this flag. This bit defaults to low at reset.
5. Plug-n-Play Logic.
The system control module 2 includes registers and logic needed to implement the Plug and Play ISA (PNP) specification from Microsoft. There are several state machines within the PNP block of the circuit C (see discussion below); some of these utilize a clock that is derived from the 16.9
MHz. oscillator (C59N).
The circuit C includes two PNP-compliant logical devices. The AUDIO-functions logical device consists of most of the circuit C including the synthesizer, the codec, the ports, etc. The external function or CD-ROM logical device is associated with only the external functions.
a. PNP I/O Ports and Registers. In support of PNP, the circuit C provides a number of specialized registers. These are indexed via PIDXR and accessed via the read and write ports PNPRDP and
PNPWRP.
b. Power-Up PNP Mode Selection. The reset signal latches the state of the output pin 76 (PNPCS, Fig, 6) at power-up to determine the PNP mode. If it is latched low, then the circuit C is assumed to be on a PNP-compliant card that contains a serial EEPROM 78 (PNP card mode). If it is latched high, then the circuit C is assumed to be on a system board that does not contain a serial EEPROM 78 (PNP-system mode).
In PNP-system mode, the Card Select Number (CSN) is assigned via a different method than that of the PNP standard (see PCSNBR). This is so the system board implementation can exist without the external serial EEPROM. If external decoding is selected (see the PIN SUMMARY section of the general description), then all PNP registers are accessible regardless of the PNP mode. Thus, in this mode, it is not necessary to assign a CSN or incorporate any of the PNP protocol into the software to obtain access to the PNP registers.
c. PNP State Machine. Referring now to Fig. 17, PNP interface can be in one of four possible states: wait-for-key, isolation, configuration, and sleep. In Fig. 17, wake is the wake command, X is the data value associated with the command, and CSN is the current card select number, all as explained in the Plug And Play ISA specification. The output of the PNP state machine is PNPSM[1:0], as shown in the diagram.
Wait For Kev. In this state, the PNP logic waits for a key of 32 specific bytes to be written to PIDXR. No PNP registers are available when in this state (except PIDXR for the key).
Isolation. In this state, PNP software executes a specific algorithm of IOR cycles to PISOCI to isolate each PNP card and assign it a distinct CSN. If the circuit C is in PNP-system mode, then reads of PISOCI always cause the part to "lose" the isolation and go into sleep mode.
Configuration. From this state PNP software can read all resource data from the PNP EEPROM 78, assigns the resources (I/O address space, IRQ numbers, and DMA numbers), and send specific PNP commands (such as "activate").
Sleep. In this mode, the PNP hardware is dormant.
d. Interface to the Serial EEPROM. When the audio logical devices is not activated (PUACTI[0]), then it is possible to access the PNP serial EEPROM 78. There are two modes of access-PNP-initialization and PNP-control╌selected by PSEENI[0]. In PNP-initialization mode, data is automatically read out of the EEPROM based on the state of PNPSM[1:0] as follows:
Figure imgf000040_0001
Referring now to Fig. 18, timing for reading the serial-EEPROM data is provided. Note that the data is required to enter the circuit C in the reverse order from what is standard for a serial EEPROM. Also, bits[7:0] represent the even byte (the first byte read via PRESDI) and bits[15:8] represent the odd byte. SK, the serial clock, is ICLK1M (see the CLOCKS description below), which is a frequency of 996 KHz.
In PNP-control mode the EEPROM pins are controlled directly via bits in PSECI.
e. Initiation Key and Linear Feedback Shift Register. Access to PNP registers is preceded by a hardware/software unlock mechanism that requires the implementation of a linear feedback shift register (LFSR). Implementation of the LFSR 230 is illustrated in Fig. 20. The unlock is complete after the software writes the following 32 values to PIDXR: 6A, B5, DA, ED, F6, FB, 7D, BE, DF, 6F, 37, 1B, 0D, 86, C3, 61, B0, 58, 2C, 16, 8B, 45, A2, D1, E8, 74, 3A, 9D, CE, E7, 73, 39. These values are internally calculated with LFSR 230. LFSR 230 is reset to 6Ah anytime the value written to PIDXR does not match the LFSR. If all 32 proper bytes are written to PIDXR, then the PNP state machine changes from Wait-For-Key mode to Sleep mode (See Fig. 17).
f. Isolation Mode. When in Isolation mode, the data contained at the beginning of the serial EEPROM 78 is shifted in, one bit at a time, and used in the algorithm shown in Fig. 21.
The PNP specification allows for the last eight bits of the serial identifier, the checksum, to either be calculated or simply transferred from the serial EEPROM 78. These values are not calculated by the circuit C; they are transferred directly from the serial EEPROM 78. The algorithm of Fig. 21 enables transition from isolation mode to either configuration mode or sleep mode.
g. Card Select Number Register. The Plug-n-Play specification requires that a card select number (CSN) be assigned to all devices on the system bus, and that such number be accessible. In the circuit C, there is an 8-bit register, designated card select number back door (PCSNBR) where the card select number (CSN) is stored. The CSN is writeable when the PNP state machine is in Isolation mode. It can be read when the PNP state machine is in Configuration mode.
It is possible to write to the CSN without going through the normal PNP protocol by using the following procedure:
1. Place a pull-up resistor on PNPCS to place the card in PNP system mode at power-up.
2. While the AUDIO logical device is not active (PUACTI[0]=0), place the PNP state machine into Isolation mode.
3. Write the CSN to the Game Control Register, 201h.
h. Plug-n-Play Resource Requirement Map. An example of resources required for programming the PNP serial EEPROM 78 is provided in Fig. 22.
6. Interrupts and IRQ Channel Selection.
There are several groups of signals associated with interrupts. They are:
Figure imgf000041_0001
These are combined into the three IRQ channel selection possibilities for the circuit C as follows:
Figure imgf000041_0002
Figure imgf000042_0001
The following equation shows how the above three equations are mapped to the IRQ pins (see Fig. 3), where "x" in IRQx specifies the IRQ number. The notation "(UICI[2:0]==IRQx)" should read "UICI[2:0] specifies IRQx".
Figure imgf000042_0002
The Non-Maskable Interrupt (NMI) function is controlled as follows (between being driven low and being high-impedance):
Figure imgf000042_0003
In the above equations and those that follow, note that a "/" preceding a variable or signal signifies logic not. The * signifies the AND function, + signifies the OR function and the "/", "*", and "+" are prioritized as first, second and third, respectively. The programmable bit fields and signals associated with the above equations are:
Figure imgf000043_0002
Interrupt Events. The table in Fig. 23 provides data on all interrupt- causing events in the circuit C. Note that when the circuit C is in auto-timer mode and the UACWR has been written to a 04h, then the write to the UADR does not generate an interrupt.
7. DMA Channel Selection.
The following are the signals used in the circuit C which are associated with DMA data transfer requests:
Figure imgf000043_0001
These are combined into the three DRQ channel selection possibilities for the circuit C as follows:
Figure imgf000043_0003
The following equation shows how the above three equations are mapped to the DRQ pins (see Fig. 3), where "x" in DRQx specifies the DRQ number. The notation "(UDCI[2:0] = =DRQx)" should read "UDCI[2:0] specifies DRQx".
Figure imgf000044_0001
Enabling DRQs from High-Impedance. Here are the equations for the signals that enable the DRQ lines from high-impedance:
Figure imgf000044_0002
Driving the Data Bus During DMA. DMA reads of the circuit C will cause the system data bus to be driven only if the circuit C has set the DMA request signal; also, the circuit C will ignore all DMA writes if the acknowledge occurred without a DMA request.
DMA Rates. For DMA transfers between local and system memory, the rate of transfer is controlled by LDMACI[4:3]. The fastest rate for all DMA transfers allows about one-half to 1 microseconds from the end of the last
DAK signal to the beginning of the next DRQ signal. This is incorporated by counting two edges of the ICLK2M, the 2 MHz clock.
8. Clocks.
The circuit C has numerous internal clock requirements. This section of the description refers to all internal clocks which are generated from external crystals 16 and 18 (Fig. 1). Referring now to Fig. 24, all of the clocks that are generated by this block off of crystal 16 are guaranteed to be steady (held high) when either oscillator is not valid and to start toggling again after the oscillator is stable. The logic is designed such that there is no possibility of glitching on these clocks while the oscillators are stabilizing.
This is the purpose of the oscillator stabilization logic 232 in Fig. 24. It is used: (1) to exit suspend mode; (2) to exit shut-down mode; and (3) to stabilize the oscillators following a software reset (PCCCI) in which the IC is in the shut-down mode. It is bypassed when the RESET pin becomes active.
In Fig. 24, the IOSC16M signal is the input clock signal from the 16.9344 MHz clock 16. This clock signal is provided as an input clock signal to oscillator stabilization logic 232 via a control or gate signal on line 233. Gating logic 242 also generates an enable signal on line 235 to control the on/off state of clock 16.
As explained below, gating logic 242 provides an output ICLK16M signal via a buffer 237 which is used as the basic system clock for the circuit C, and a 16.9344 MHz output via buffer 239 which is utilized by logic block 241 to generate various clock signals of different frequencies for specific subcircuits or functions. Note that similar stabilization logic could be provided for crystal 18 if desired. In the present embodiment, crystal 18 provides a buffered 24 MHz output on line 234 in response to activation signal PPWRKPWR24).
Oscillator Stabilization Logic. Referring now to Fig. 25, the oscillator stabilization logic 232 consists of a 16-bit counter 238 that is clocked by oscillator 16, and a flip-flop 240 that controls the counter 238. The result is a gate to the gating logic 242 (Fig. 24) that either allows the clock to pass or disables it glitch-free. The signal STOP_CLK for the 16.9 MHz. clock 16 clears counter 238 during suspend and shut-down modes. In the preferred embodiment, a software reset (PCCCI) requires that system reset PCARST# be held active for either 256 states or 64K states of clock 16 depending on whether the circuit C is in a shut-down mode (see discussion below). Logic counters within the stabilization logic 232 also provide control signals to implement the required delay. The signal GO_CLK sets control flip-flop 240 while the RESET pin is active. Once the circuit C exits suspend and shutdown mode, STOP_CLK becomes inactive, counter 238 clocks out 64K states, and the CLOCK_ENABLE output of the circuit 238 becomes active. STOP_CLK, GO_CLK signals are internally generated from logic circuits responsive to the status of power control registers and reset signals as described elsewhere herein.
Referring now to Fig. 24a, further details of the clock generation, control and stabilization circuitry are described. It should be noted that the logic and counters shown in Fig. 24a are intended to be an example of how the logic described could be implemented. Those of ordinary skill in the art will realize there are numerous variations which might be used without deviating from the functional specification.
System reset signal 430 is an external ISA bus signal. System reset 430 is asserted for at least ten milliseconds (thereby enabling PCARST#) to allow enough time for oscillators 16 and 18 to stabilize before signal PCARST# on line 431 goes inactive (high). Signal PCARST# forces most memory functions (registers, latches, flip-flops, bits in RAM) into the default state, causes all ISA-bus activity to be ignored and halts local memory cycles.
System reset is provided as a GO-CLK asynchronous set signal 435 to flip-flop 240, which forces the Q-output high on line 233 to immediately enable gating logic 242, thereby enabling the 16 MHz clock signal. The 24 MHz clock is also enabled by reset since it is controlled by the PWR24 bit of register PPWRI which in turn is set high as its default state in response to the
PCARST# signal.
Still referring to Fig. 24a, the PCCCI signal is an I/O mapped command from the PNP logic (software reset) controlled by the status of the PCCCI register. Assertion of PCCCI is provided on line 434 as an alternative source of signal PCARST#.
Still referring to Fig. 24a, suspend mode is entered in response to an active input from the Suspend# pin. For ease of reference, the suspend mode logic is shown in active-positive mode in Fig. 24a. An active input suspend signal is provided on line 446 and input to ORGATE 448 and ANDGATE 450. In response, ISUSPRQ becomes active at line 452 which activates modular signals I2LSUSPRQ and I2SSUSPRQ via gates 454 and 456, respectively. The suspend input on line 446 is also provided to a 2-bit delay counter 458 which provides an 80 μ second delayed output to ORGATE 448 and ANDGATE 450. Delay circuit 458 is clocked by the ICLK12K internally generated clock signal provided on line 460. Consequently, after 80 μ seconds
ANDGATE 450 is enabled and generates suspend-in-progress signal ISUSPIP on line 462. This signal is provided to generate modular suspend-in-progress signals, as desired. For example, ISUSPIP is provided as an input to ORGATE 464 to generate a modular I2LSUSPIP signal for the local memory module of the circuit C, which is used to disable the 16.9 MHz clock signal used by the local memory module during normal operations.
ISUSPIP is also provided via ORGATE 467 and ORGATE 466 to ground oscillator 16 approximately 80 μ seconds after ISUSPRQ has been asserted, and as a STOP CLK input on line 436 to clear counter 238. Clearing counter 238 requires the oscillator 16 to stabilize after being enabled when the suspend signal is deactivated. Similarly, ISUSPIP is provided as an input to ANDGATE 468 via ORGATE 470 to disable the 24 MHz oscillator 18.
Various Clocks. The clock circuit of the system control module 2 provides various clocks for functions throughout the circuit C. Here is a summary:
Figure imgf000047_0001
ICLK1M is implemented with a duty cycle of 9 clocks high and 8 clocks low to comply with the requirements of PNP serial EEPROM 78. All other clocks are implemented such that their duty cycle is a close to 50-50 as possible.
Test-Mode Requirements. When the chip is in test mode, the circuit for many of these clocks is bypassed (see register description below). Additionally, the 16.9 and 24.5 MHz clocks are directly controlled without the intervening logic or 64K state counters.
9. Power Consumption Modes.
The circuit C has the ability to disable various blocks of logic from consuming very much current. It also can be in shut-down mode, wherein both oscillators are disabled, and in suspend mode, wherein both oscillators are disabled and most of the pins become inaccessible. Control for disabling various blocks and placing the circuit C in shut-down mode comes from programmable register PPWRI; suspend mode is controlled by the SUSPEND# pin (see Fig. 6). Suspend mode causes the I/O pins to change behavior as shown in the table:
Figure imgf000048_0001
The pins SA[11:6], SBHE#, DAK[7:5,3], and SD[15:8] have weak internal pull-up resistors; however, the power to these resistors can be disabled via IVΕRI[PUPWR] SO that they do not drive voltage onlo the ISA bus during suspend mode. For those pins forced to a high-impedance state to prevent current consumption, a controlled buffer is provided internal to the pin. In suspend mode, this buffer is disabled and its output (the input to the circuit C) is grounded.
a. Register Controlled Low-Power Modes. Register PPWRI is a 7-bit register used to reduce the power being consumed by various blocks of logic within the circuit C and place it into shut-down mode. The table set forth in Fig. 26 describes what happens when various bits in register PPWRI are cleared or set. Each of the bits in PPWRI are defined such that they are low when in low-power mode.
The 100 microsecond timers referenced in Fig. 26 consist of two conventional timer circuits within logic block 158 (Fig. 12), each driven by ICLK100K (divide by 10). One of the timers is used to count out the going-to-low-power-state time and the other is used to count out the coming-out-of-low-power-state time. These same timers may be used for suspend mode as well.
Referring now to Fig. 24a, register PPWRI is schematically illustrated as register 472. Shut-down mode is activated in response to each bit of register 472 being cleared to a logic low state. The status of each of the bits from register 472 is provided as an inverted input to ANDGATE 474, which provides an output to timer 476 when all bits are low. After the appropriate 100 μ second delay an output is provided at line 478 which disables (grounds) oscillator 16 via ANDGATE 480, provided that none of the bits from register
472 have changed state to a logic high in the interim delay. This status check is provided via ORGATE 482 which provides a second, enabling input to ANDGATE 480. The output of timer 476 is also provided as a STOP_CLK input to clear counter 238 of stabilization circuit 232 to provide an appropriate delay when exiting shut-down mode.
As noted elsewhere, the status of the PWR24 bit controls power to oscillator 18 via gate 468. Modular power modes are implemented in response to the status of individual bits within register 472 (PPWRI). For example, the status of bit 4 (PWRS) is provided as an input to counter circuit 484, ORGATE 486 and ANDGATE 488. These circuit elements provide a synthesizer suspend request signal 490 followed by a delayed synthesizer suspend in progress signal 492 which is also used to disable the synthesizer clock signals via gate 493. A similar delay and logic circuit 494 is provided for the local memory module. The remaining bits of register 472 control the status of various modules and portions of modules within the circuit C, as described elsewhere in this specification. Logic implementation of these functions is schematically illustrated in Fig. 24a.
Fig. 24b is a flow chart schematically representing the response of circuit C to suspend mode activation and deactivation. Fig. 24c is a flow chart illustrating the register-controlled low-power modes.
b. Suspend Mode. When the SUSPEND# pin becomes active, the circuit C behaves similarly to when it is placed into shut-down mode. The timing diagram in Fig. 27 shows how the oscillators, clocks, and signals respond to the SUSPEND# pin. Note that in Fig. 27 the ICLK24M signal is illustrated as being stabilized, which is optional but not required.
ISUSPRQ is logically ORed into I2LSUSPRQ and I2SSUSPRQ from the shutdown logic. ISUSPIP is logically ORed into I2LSUSPIP (see Fig. 26) If the circuit C is already in shut-down mode when SUSPEND# is asserted, then: (i) the I/O pins are changed to match the requirements of suspend mode shown above; and (ii) the codec analog circuitry is placed into low-power mode if it is not already in that mode. The CODEC analog circuitry is placed in low-power mode whenever SUSPEND# is active by providing the ISUSPIP signal on line 461 to ANDGATE via invertor 465.
After the ISUSPRQ# is asserted, the logic waits for greater than 80 microseconds before stopping the clocks to the rest of the circuit C and disabling the oscillators. Clock signals ICLK16M and ICLK24M from oscillators 16 and 18, respectively, are disabled (as well as re-enabled) such that there are no distortions or glitches; after they go into one of their high phases, they never go back low. After SUSPEND# is deactivated, the oscillators are re-enabled, but clock signal ICLK16M does not toggle again until oscillator 16 has stabilized, 4 to 8 milliseconds later; this occurs after the oscillator 16 has successfully clocked 64K times. After ICLK16 has been toggling for at least 80 microseconds, the ISUSPRQ# signal is de-asserted to allow the logic in the rest of the circuit C to operate. All of the ISA bus pins, and many of the other pins, are disabled while ISUSPRQ# is active. It is not possible to access the circuit C via the ISA bus while ISUSPRQ# is active; therefore, software must delay for about 10 milliseconds after SUSPEND# is released before attempting to access the circuit C. ISUSPIP (suspend in progress) is active during the time when the internal clocks are not valid; it is used to change the behavior of the I/O pins in the Local Memory Control module per the suspend requirements (suspend-mode refresh).
10. Reset.
There are two main sources of reset: (1) assertion of the RESET pin and (2) the I/O mapped command for reset from the PNP logic (PCCCI). Both generate long pulses over the PCARST# signal. There is also a reset of the synthesizer module 6 and Gravis Ultrasound functions, caused by a write to Reset Register (URSTI). There is also a reset for the MIDI interface controlled by bits in GMCR.
PCARST#. PCARST# is an internally generated signal which forces most memory functions in the circuit C╌registers, latches, flip-flops, bits of RAM╌into their default state. While it is active, all ISA-bus activity is ignored and no local memory cycles take place. PCARST# is generated as a logical OR of the reset from the RESET pin and the software reset (PCCCI) described below. The RESET pin is required to be asserted for at least 10 milliseconds, which provides enough time for the oscillators to stabilize before PCARST# becomes inactive. If the software reset occurs when the IC is in shut-down mode, PCARST# becomes active and the oscillator stabilization logic counts through 64K states before releasing PCARST#. If the software reset occurs when the IC is not in shut-down mode, then PCARST# becomes active for 256 16.9 MHz clocks (about 15 microseconds). While PCARST# is active, all the 16.9 MHz and 24.5 MHz clocks are passed onto the other blocks in the IC; however, the various divide-down clocks shown in the CLOCKS section above do not toggle because the divide-down circuitry used to generate them is also reset.
RESET-Pin-Only Functions. The following items are affected by the RESET pin, but not by PCARST#: the state of the I/O pins that are latched at the trailing edge of reset, the PCSNI, PSRPAI, and PNPSM[1:0] registers and state machine which have there own specific reset requirements, the test control register (ITCI), and control for the oscillator stabilization logic (which is used to count out software resets). All other functions are reset into their default state.
The Software Reset. PCCCI. The software reset holds PCARST# active while the 16.9 MHz oscillator is forced to clock through either 256 states (if not shut-down is in progress or if ITCI.BPOSC] is active) or 64K states.
Synthesizer RAM block. After PCARST# becomes inactive, the synthesizer logic (see discussion below) will sequence through all 32 voice-RAM blocks to clear them out. This will take about 22 microseconds.
External Function Interface. When PCARST# is active, the pins RAS# and ROMCS# both become active (RAS# = ROMCS# = 0). This is the only way that this situation can occur. When it does occur, it can be decoded by the external function (e.g., CD-ROM) to determine that reset is active.
B. System Control PIN Summary. The pins set forth in Fig. 28 are associated with the system bus interface.
C. System Control Register Overview.
In the following register definitions, RES or RESERVED specifies reserved bits. All such fields must be written with zeros; reads return indeterminate values; a read-modify-write operation can write back the value read.
1. P2XR Direct Registers.
a. Mix Control Register (UMCR).
Figure imgf000052_0001
Figure imgf000053_0002
Figure imgf000053_0001
Figure imgf000054_0001
d. AdLib Command Read and Write Register (UACRR. UACWR).
Figure imgf000054_0002
This register is used to emulate AdLib operation. This register is written by AdLib application software and is read by AdLib emulation software in order to program the internal synthesizer to duplicate the AdLib
Figure imgf000055_0002
When not in auto-timer mode, this is a read-write register with different values for the read and write addresses. In auto-timer mode (UASBCI[0] = 0), writes to this register are latched but not readable; reads provide the following status information:
Figure imgf000055_0001
Figure imgf000056_0003
This register performs AdLib-compatibility functions based on the state of various bits as follows:
Figure imgf000056_0001
For case 2, the following AdLib timer emulation bits are written. All of these bits also default to low after reset. Note that when the MSB is set high, the other bits do not change. When IVERI[RRMD] is active, the following bits are readable from this address, regardless of the state of UASBCI[0] or UACWR.
Figure imgf000056_0002
Figure imgf000057_0001
g. GUS Hidden Register Data Port (UHRDP).
Figure imgf000057_0004
h. Sound Blaster Interrupt 2XC Register (UI2XCR).
Figure imgf000057_0002
Writes to this simple read-write register cause an interrupt. This register can also be written to via U2XCR, through which no interrupt is generated. The interrupt is cleared by writing UASBCI[5]=0.
i. Sound Blaster 2XC Register (U2XCR).
Figure imgf000057_0003
Figure imgf000058_0004
j. Sound Blaster Register 2XE (U2XER).
Figure imgf000058_0003
This is a simple read-write register used for Sound Blaster emulation. I/O reads of this register cause interrupts (if enabled).
k. Register Control Register (URCR).
Figure imgf000058_0002
Figure imgf000058_0001
Figure imgf000059_0001
1. Status Read Register (USRR).
Figure imgf000059_0002
Figure imgf000060_0002
2. URCR[2:0], UHRDP Indexed Registers.
a. DMA Channel Control Register (UDCI).
Figure imgf000060_0001
Figure imgf000061_0001
b. Interrupt Control Register (UICI).
Figure imgf000061_0002
c. General Purpose Register 1 (UGPII).
Address: P2XR+0Bh read/write; index URCR[2:0]=1
Default: 00h
General purpose register 1 consists of two 8-bit registers, UGP1I IN and UGP1I OUT, used for AdLib, Sound Blaster, and MPU-401 compatibility; it does not control any signals of the circuit C. They are accessed by a combination of this address (UHRDP) and the address specified by UCMPTI[1:0] and UGPA1I (the emulation address). UGP1I IN is written via the emulation address and read via UHRDP. UGP1I OUT is read via the emulation address and written via UHRDP. Accesses to these registers via the emulation address result in interrupts (if enabled). Note: see rVΕRI[HRLEN#] for a description of how access to this register is restricted.
d. General Purpose Register 2 (UGP2I).
Address: P2XR+0Bh read/write; index URCR[2:0]=2
Default: 00h
General purpose register 2 consists of two 8-bit registers, UGP2I IN and UGP2I OUT, used for AdLib, Sound Blaster, and MPU-401 compatibility; it does not control any signals of the circuit C. They are accessed by a combination of this address (UHRDP) and the address specified by UCMPTI[3:2] and UGPA2I (the emulation address). UGP2I IN is written via the emulation address and read via UHRDP. UGP2I OUT is read via the emulation address and written via UHRDP. Accesses to these registers via the emulation address result in interrupts (if enabled). Note: see rVΕRI[HRLEN#] for a description of how access to this register is restricted.
e. General Purpose Register 1 Address (UGPA1I).
Address: P2XR+0Bh write; index URCR[2:0]=3
Default: 00h
This register controls the address through which general-purpose register 1 is accessed. The 8 bits written become bits [7:0] of the emulation address for UGPII; emulation address bits [9:8] are specified by ICMPTI[1:0].
Note: see IVERI[HRLEN#] for a description of how access to this register is restricted.
f. General Purpose Register 2 Address (UGPA2I).
Address: P2XR+0Bh read, write; index URCR[2:0]=4
Default: 00h
This register controls the emulation address through which general-purpose register 2 is accessed. The 8 bits written become bits [7:0] of the emulation address for UGP2I; emulation address bits [9:8] are specified by ICMPTI[3:2]. Note: see IVERI[HRLEN#] for a description of how access to this register is restricted.
g. Clear Interrupt Register (UCLRII).
Address: P2XR+0Bh write; index URCR[2:0]=5
Writing to this register causes all the interrupts described in the USRR to be cleared. Note:see IVERI[HRLEN#] for a description of how access to this register is restricted.
h. Jumper Register (UJMPI).
Figure imgf000063_0001
3. P3XR Direct Registers.
a. General Index Register (IGIDXR).
Address: P3XR+3 read, write
Default: 00h
This register specifies the indexed address to a variety of registers within the circuit C. The data ports associated with this index are I8DP and I16DP. When in auto-increment mode (SVSR[7]), the value in this register is incremented by one after every I/O write to either I8DP or I16DP (but not
8-bit writes to the low byte of I16DP).
b. General 8/16-Bit Data Port (I8DP, I16DP).
Address: P3XR+5 for I8DP, P3XR+4-5h for I16DP, read, write
These are the data ports that are used to access a variety of registers within the circuit C. 8-bit I/O accesses to P3XR+5 are used to transfer 8-bit data. 16-bit I/O accesses to P3XR+4 are used to transfer 16-bit data. It is also possible to transfer 16-bit data by using an 8-bit I/O access to P3XR+4 followed by an 8-bit access to P3XR+5. The index associated with these ports is IGIDXR. When in auto-increment mode (SVSR[7]), the value in IGIDXR is incremented by one after every I/O write to either I8DP or I16DP (but not 8-bit writes to the low byte of I16DP, P3XR+4).
4. IGIXR, I8DP-I16DP Indexed Registers.
a. AdLib. Sound Blaster Control (UASBCI).
Figure imgf000064_0001
Figure imgf000065_0002
b. AdLib Timer 1 (UAT1I).
Address: P3XR+5 read, write; index IGIDXR = 46h
Default: 00h
Timer 1 Load Value. This is the value that will be loaded into AdLib timer 1 whenever: (1) UADR[STRT1] is high and this timer increments past OFFh; or (2) UADR[STRT1] is low and there is a rising clock edge of this timer's 80 microsecond clock (16.9344 MHz divided by 1344). Reads of this register provide the preload values, not the actual state of the timer.
c. AdLib Timer 2 (UAT2I).
Address: P3XR+5 read, write; index IGIDXR = 47h
Default: 00h
Timer 2 Load Value. This is the value that will be loaded into AdLib timer 2 whenever: (1) UADR[STRT2] is high and this timer increments past OFFh; or (2) UADR[STRT2] is low and there is a rising clock edge of this timer's 320 microsecond clock (timer l's clock divided by 4). Reads of this register provide the preload values, not the actual state of the timer.
d. GF-1 Reset Register (URSTI).
Figure imgf000065_0001
Figure imgf000066_0002
e. Compatibility Register (ICMPTI).
Figure imgf000066_0001
Figure imgf000067_0002
f. Decode Control Register (IDECI).
Figure imgf000067_0001
Figure imgf000068_0002
g. Version Number Register (IVERI).
Figure imgf000068_0001
Figure imgf000069_0001
h. MPU-401 Emulation Control A (IEMUAI).
Figure imgf000069_0002
Figure imgf000070_0001
i. MPU-401 Emulation Control B (IEMUBI).
Figure imgf000070_0002
Figure imgf000071_0001
Figure imgf000072_0002
j. Test Control Register (ITCI).
Figure imgf000072_0001
5. PNP Direct Registers.
a. Card Select Number Back Door (PCSNBR). Address: 0201h write
Default: 00h
If the circuit C is in PNP system mode (latched by the state of the PNPCS pin at the end of reset), the AUDIO logical device has not been activated (PUACTI[0]=0), and the PNP state machine is in isolation mode, then it is possible to write a card select number (CSN) to the circuit C via this I/O port.
b. PNP Index Address Register (PIDXR).
Address: 0279h write
Default: 00h
This is the 8-bit index address register which points to standard Plug and Play registers.
c. PNP Data Write Port (PNPWRP).
Address: 0A79h write
This is the port used to write to Plug and Play ISA registers, indexed by PIDXR.
d. PNP Data Read Port (PNPRDP).
Address: Address is relocatable between 003h and 3FFh, read only.
Address is set by (1) setting the PIDXR register to 00h, and (2) writing the byte that represents bits 9 through 2 to PNPWRP; bits 0 and 1 are both always assumed to be high (1 1).
This is the port used to read from Plug and Play ISA registers, indexed by PIDXR.
6. PLOXR, PNPWRP-PNPRDP PNP Indexed Registers.
These PNP registers are indexed with PIDXR and accessed via
PNPRDP and PNWRP. Many of the registers~PIDXR=30h and greater-are further indexed by the Logical Device Number Register (PLDNI); all such registers can only be accessed when the PNP state machine is in the configuration state.
a. PNP Set Read Data Port Address Register (PSRPAI).
Address: 0A79h write; index PIDXR=0
Default: 00h
Writes to this register set up SA[9:2] of the address of the PNP Read
Data Port (PNPRDP). SA[1:0] are both assumed to be high. Writes to this register are only allowed when the PNP state machine is in the isolation state. b. PNP Isolate Command Register (PISOCI).
Address: PNPRDP read; index PIDXR=1
Reading this register will cause the circuit C to drive a specific value-based on data read out of the PNP serial EEPROM 78╌onto the ISA bus 156 and observe the data back into the circuit C to see if there is a difference. This can result in a "lose-isolation" condition and cause the PNP state machine to go into sleep mode. If the circuit C is in PNP-system mode (see the POWER-UP PNP MODE SELECTION section), then it is assumed that there is no serial EEPROM 78 and no data will ever be driven on the bus for reads from this register; in PNP-system mode, reads of PISOCI always cause the circuit C to "lose" the isolation and go into sleep mode. Reads from this register are only allowed when the PNP state machine is in the isolation state.
c. PNP Confirguration Control Command Register (PCCCI).
Figure imgf000074_0001
key mode, but it is valid for the other three modes.
d. PNP WAKErCSNl Command Register (PWAKEI). Address: 0A79h write; index PIDXR=3
Writes to this register affect the PNP state machine based on the state of the CSN register and the data written. If the data is 00h and the CSN is 00h, then the PNP state machine will enter the isolation state. If the data is not 00h and the CSN matches the data, then the PNP state machine will enter the configuration state. If the data does not match the CSN, then the PNP state machine will enter the sleep state. This command also resets the serial EEPROM 78 control logic that contains the address to that part. This command is ignored if the PNP state machine is in the wait-for-key mode, but it is valid for the other three modes.
e. PNP Resource Data Register (PRESDI).
Address: PNPRDP read; index PIDXR=4
Default: 00h
This register provides the data from the local memory control module 8 (LMC) that has been read out of the PNP serial EPROM 78. Note: if the serial EEPROM 78 has been placed into direct control mode (PSEENI[0]), then the wake command must be executed before access via PRESDI is possible. This command is only valid when the PNP state machine is in the configuration state.
f. PNP Resource Status Register (PRESSI).
Address: PNPRDP read; index PIDXR=5
Default: 00h
A high on bit 0 of this register indicates that the next byte of PNP resource data is available to be read; all other bits are reserved. After the
PRESDI is read, this bit becomes cleared until the next byte is available.
This command is only valid when the PNP state machine is in the configuration state.
g. PNP Card Select Number Register (PCSNI).
Address: 0A79h write, PNPRDP read; index PIDXR=6
Default: 00h
Writes to this register while the PNP state machine is in the isolation state set up the CSN for the circuit C and send the PNP state machine into configuration mode. When the PNP state machine is in configuration mode, this register is readable, but not writeable.
h. PNP Logical Device Number Register (PLDNI). Address: 0A79h write, PNPRDP read; index PIDXR=7
Default: 00h
This register further indexes the PNP address space into logical devices. The circuit C has two logical device numbers (LDN): 00h = all
AUDIO functions, synthesizer, codec, and ports; 01h=the external (CD-ROM) interface. This register can only be accessed when the PNP state machine is in the configuration state.
i. PNP Audio Activate Register (PUACTI).
Address: 0A79h write, PNPRDP read; indexes PIDXR=30h and
PLDNI =0
Default: 00h
A high on bit 0 of this register activates all the AUDIO functions; all other bits are reserved. When low, none of the AUDIO-function address spaces are decoded and the interrupt and DMA channels are not enabled, j. PNP Audio I/O Range Check Register (PURCI).
Figure imgf000076_0001
k. PNP Address Control Registers.
The following table shows all the various PNP registers that control the address of blocks of I/O space within the circuit C.
Figure imgf000077_0001
All unused bits in the above PNP address control registers are reserved. All of the above PNP address control registers are written via
0A79h and read via PNPRDP. The unspecified LSBs of P2XR, P3XR,
PCODAR, and PCDRAR are all assumed to be zero. See the General
Description section for a description of the functions controlled by the various address blocks.
1. PNP Audio IRQ Channel 1 Select Register
(PUIISI).
Figure imgf000077_0002
m. PNP Audio IRQ Channel 1 Type Register
(PUI1TI).
Address: PNPRDP read; indexes PIDXR=71h and PLDNI=0
Default: 02h
The registers provides data back to standard PNP software concerning the type of interrupts supported by the circuit C. It will always be read back as 02h to indicate edge-triggered, active-high interrupts.
n. PNP Audio IRQ Channel 2 Select Register (PUI2SI).
Figure imgf000078_0001
o. PNP Audio IRQ Channel 2 Type Register (PUI2TI).
Address: PNPRDP read; indexes PIDXR=73h and PLDNI=0
Default: 02h
The registers provides data back to standard PNP software concerning the type of interrupts supported by the circuit C. It will always be read back as 02h to indicate edge-triggered, active-high interrupts.
p. PNP Audio DMA Channel Select Registers (PUD1SI. PUD2SI).
Figure imgf000078_0002
Figure imgf000079_0001
q. PNP Serial EEPROM Enable (PSEENI).
Figure imgf000079_0002
r. PNP Serial EEPROM Control (PSECI).
Address: 0A79h write, PNPRDP read; index PIDXR=F1h and PLDNI=0 Default: XXXX 000X
When in control mode (PSEENI[0]), if PUACTI is inactive, then bits[3:0] are used to directly control the serial EEPROM 78. Bits[7:4] are read-only status bits that show the state of various control signals that are latched at the trailing edge of RESET (see the PIN SUMMARY section in the general description above for details). This register is only accessible when the PNP state machine is in the configuration state.
Figure imgf000080_0001
s. PNP Power Mode (PPWRI).
Address: 0A79h write, PNPRDP read; index PIDXR=F2h and PLDNI=0 Default: X111 1111
This register is used to disable clocks and enable low-power modes for major sections of the circuit C. Writes to this register are accomplished differently than most. The MSB of the data, ENAB, is used to specify whether ones or zeros are to be written; for bits[6:0], a high indicates that ENAB is to be written into the bit and a low indicates that the bit is to be left unmodified. Thus, when there is a need to modify a subset of bits[6:0], it is not necessary for software to read the register ahead of time to determine the state of bits that are not to change. Examples are: to set bit[0] high, a write of 81h is needed; to clear bit[4] to a low, a write of 10h is needed.
If a single command comes to clear bits[6:1] to the low state (I/O write of 0111 111X, binary), then the circuit C enters shut-down mode and the 16.9 MHz. oscillator 16 becomes disabled. When, subsequently, one or more of bits[6:1] are set high, the 16.9 MHz oscillator 16 is re-enabled. After being re-enabled, the 16.9 MHz clock will require 4 to 8 milliseconds before becoming stable.
This register is only accessible when the PNP state machine is in the configuration state.
Figure imgf000081_0001
Figure imgf000082_0002
t. PNP CD-ROM Activate Register (PRACTI).
Address: 0A79h write, PNPRDP read; indexes PIDXR=30h and
PLDNI= 1
Default: 00h
A high on bit 0 of this register activates the external interface (e.g., CD-ROM) function; all other bits are reserved. When low, the external function (CD-ROM) address space is not decoded; the external function (e.g.,
CD-ROM) interrupt and DMA channels are not enabled.
u. PNP CD-ROM I/O Range Check Register (PRRCI).
Figure imgf000082_0001
v. PNP CD-ROM High, Low Address Register
(PRAHI. PRALI).
See the PNP address control registers above.
w. PNP CD-ROM IRQ Select Register (PRISI).
Figure imgf000083_0001
x. PNP CD-ROM IRQ Type Register (PRITI).
Address: PNPRDP read; indexes PIDXR=71h and PLDNI= 1
Default: 02h
The registers provides data back to standard PNP software concerning the type of interrupts supported by the circuit C. It will always be read back as 02h to indicate edge-triggered, active-high interrupts.
y. PNP CD-ROM DMA Select Register (PRDSI).
Figure imgf000083_0002
IV. CODEC MODULE
Fig. 44 depicts, in block diagram format, the various features and functions included within the CODEC module device 505. The CODEC device 505 includes on-chip memory, which is preferably configured as 16-sample, 32-bit wide, record and playback FIFOs, 538, 532, with selectable thresholds capable of generating DMA and I/O interrupts for data read and write operations. The Mixing and Analog Functions block 510 includes left and right channel analog mixing, muxing and loopback functions. Left channel and right channel stereo, and single channel mono, analog audio signals are summed in Mixing and Analog Functions block 510. These mono and stereo audio signals are output from the CODEC 505 for external use, on analog output pins 522. Inputs to the Mixing and Analog Functions block 510 are provided from: external Analog Input Pins 520, analog output from a Synthesizer Digital-to-Analog Converter block 512, which is external to CODEC 505 or may be a processing block within CODEC 505, and from the
Playback Digital-to-Analog Converter block 514. Analog audio output from Mixing Analog Functions block 510 is provided to record Analog-to-Digital Converter 516 block. Synthesizer Digital-to-Analog Converter block 512 receives Digital data from a synthesizer 524. Throughout this description, it should be understood that synthesizer 524 is an external device, or may be integrated onto the same monolithic integrated circuit as the CODEC device 505.
The record path for the CODEC 505 is illustrated in Fig. 44, with analog audio data being output from Mixing and Analog Functions block 510 and provided to record Analog-to-Digital Converter (ADC) 516 block to be converted to 16-bit signed data. The selected sample rate for record ADC 516 affects the sound quality such that the higher the sample rate for record ADC 516, the better the recorded digital audio signal approaches the original audio signal in quality. The function and operation of a fourth order cascaded delta-sigma modulator, preferably implemented in record ADC 516 block, is described in application Serial No. 08/071,091, filed 12/21/93, entitled "Fourth Order Cascaded Sigma-Delta Modulator," assigned to the common assignee of the present invention. The converted digital audio data is then sent to format conversion block 536 which converts the 16-bit digital audio data to a preselected data format. The formatted digital data is then sent to 32-bit wide record FIFO 538 as 16-bit left and 16-bit right channel data for further submission to register data bus 526 for output to external system memory (not shown) or to off-chip local memory record FIFO 530 (LMRF). The playback path for CODEC 505 includes digital data, in a preselected data format, being sent to 32-bit wide playback FIFO 532 from the off-chip local memory playback FIFO (LMPF) 528 or from external system memory (not shown), via the register data bus 526. It should be understood throughout this application that LMRF 530 and LMPF 528 may be discreet off-chip FIFOs, or may be dedicated address space within off-chip local memory 110 configured as FIFOs. The formatted data is then input to format conversion clock 534, where it is converted to 16-bit signed data. The data is then sent to the CODEC playback DAC 514, where it is converted to an analog audio signal and output to the input of Mixing and Analog functions block 510.
A Serial Transfer Control block 540 provides serial-to-parallel and parallel-to-serial conversion functions, and loop back capability between the output of 32-bit wide record FIFO 538 and the input of 32-bit wide playback FIFO 532. Also, synthesizer serial input data port 542 (Fig. 44), which receives serial data from synthesizer 524, communicates with serial Transfer Control block 540. Serial Transfer Control block 540 is connected to record FIFO 538, playback FIFO 532, off-chip local memory 110 (or, LMRF 530 and LMPF 528) via local memory control 790, synth serial input data port 542, and to External Serial Interface. Bi-directional serial data communication over External Serial Interface 544, which includes an external serial port, is provided to Serial Transfer Control block 540 (also see Fig. 49). External serial interface 544 may be a UART, or other device that provides either synchronous or asynchronous controlled serial data transfers. External Serial Interface 544 (Fig. 44) can be connected to communicate serially with an external digital signal processor (DSP) for off-chip generation of special audio effects, or with any other device capable of bi-directional serial data communication. External serial interface 544 can also connect to and provide a serial data path from external synthesizer serial input port 542. Bi- directional data transfer is also accomplished via data path 550 between serial transfer control 540 and local memory control 790.
The various loop back and data conversion functions associated with Serial Transfer Control block 540 are shown in more detail in Figs. 49 and 49a.
The CODEC 505 includes A/D conversion functions in the record path and D/A conversion functions in the playback path. These conversion functions are capable of operating independently of each other at different sample rates so A/D and D/A operations may be performed simultaneously, each having a different sample rate and data format. Loop access circuitry (in mixing block 606) provides a capability to sample an audio signal and perform an A/D operation at one rate, digitize the signal, and then playback the digitized sample back through the playback D/A at a different sample rate.
The block designated Counters, Timers and Miscellaneous digital functions 518 includes circuitry which controls: the A/D and D/A conversions in CODEC 505, format conversion blocks 532, 536, and data transfer functions. CODEC 505 operation allows the following data formats: 8-bit unsigned linear; 8-bit μ-law; 8-bit A-law; 16-bit signed little endian; 16-bit signed big endian; or 4-bit 4:1 IMA ADPCM format.
Referring to Fig. 45, the left channel of CODEC analog mixer 606 of Mixing and Analog functions block 510 is depicted. The layout of the right channel of mixer 606 is identical to the left channel, but is not shown in Fig. 45. Except for minor signal name modifications, all descriptions of left channel signals and functions are applicable to the right channel.
The CODEC analog mixer 606 has more programmable features and more functions than prior CODEC audio devices. Each of the five input lines to the analog mixer 606 in Fig. 45 (LINEINL 682, MICL 684, AUXIL 686, AUX2 688 and MONOIN 690) includes a programmable attenuation/gain control circuit 608, 610, 612, 614 and 696, respectively. All inputs and outputs to and from analog mixer 606, are stereo signals, except for input MONOIN 690 and output MONOOUT 668, which are mono signals. The choice of mono or stereo audio signal inputs or outputs is also selectable.
Each of the triangle blocks depicted in Fig. 45 represents a programmable attenuation/gain control circuit. The registers that control the respective attenuation/gain control circuits and the attenuation/gain range for that circuit are identified in Fig. 45 next to the respective triangle block, and are located in the Registers block 566 in Fig. 50. The description and address of each of these registers is described below. Individual bits in these registers are capable of being modified as described in application Serial No.
08/171,313, entitled Method and Apparatus for Modifying the Contents of a Register via a Command Bit, which describes a single-bit manipulation technique that obviates the need to address an entire register, and is assigned to the common assignee of the present invention and incorporated herein for all purposes.
The range of attenuation values for these registers are shown in Fig. 45a. The value stored in each attenuation/gain control register is used to provide the selected gain or attenuation value to CODEC control logic in the
Counters, Timers and Misc. Digital Functions block 518, and Gain/attenuation
Block 734 (Fig. 47) explained below. The amplitude of the analog audio signal input to the respective attenuation/gain circuit is controlled by the value stored in the respective attenuation/gain control register.
The overview of the registers used in CODEC 505 Registers block 566, including their preferred functions, are as follows:
The CODEC 505 is designed to be generally register-compatible with the CS4231 (Modes 1 and 2), with the AD1848 and other prior art. An indirect addressing mechanism is used for accessing most of the CODEC registers. In Mode 1 (discussed below), there are 16 indirect registers; in
Mode 2 (discussed below), there are 28 indirect registers; and in Mode 3
(discussed below), there are 32 indirect registers.
In the following register definitions, RES or RESERVED specifies reserved bits. All such fields must be written with zeros; reads return indeterminate values; a read-modify-write operation can write back the value read.
CODEC DIRECT REGISTERS
CODEC INDEX ADDRESS REGISTER (CLDXR)
Figure imgf000087_0001
Figure imgf000088_0001
CODEC INDEXED DATA PORT (CDATAP)
Address: PCODAR+1 read, write
Modes: 1, 2, and 3
This is the access port through which all CODEC indexed registers-pointed to by the CODEC Indexed Address Register (CIDXR[4:0])╌are written or read.
CODEC STATUS 1 REGISTER (CSRIR)
Figure imgf000089_0001
Figure imgf000090_0001
PLAYBACK and RECORD DATA REGISTERS (CPDR, CRDR)
Address: PCODAR+3 read (record FIFO), write (playback FIFO)
Modes: 1, 2, and 3
Data written to this address is loaded into the playback FIFO. Data read from this address is removed from the record FIFO. Bits in Status Register 1 indicate whether the data is the left or right channel, and, for 16- bit samples, the upper or lower portion of the sample. Writes to this address when either the playback FIFO is in DMA mode or the playback path is not enabled (CFIG1I) are ignored; reads from this address when either the record FIFO is in DMA mode or the record path is not enabled (CFIG1I) are ignored.
CODEC CIDXR, CDATAP INDEXED REGISTERS
LEFT, RIGHT A/D INPUT CONTROL (CLICI, CRICI)
Figure imgf000091_0001
LEFT, RIGHT AUX 1/SYNTH INPUT CONTROL (CLAX1I, CRAX1I)
Figure imgf000092_0001
LEFT, RIGHT AUXILIARY 2 INPUT CONTROL (CLAX2I, CRAX2I)
Figure imgf000092_0002
Figure imgf000093_0002
LEFT, RIGHT PLAYBACK DAC CONTROL (CLDACI, CRDACI)
Figure imgf000093_0001
PLAYBACK DATA FORMAT REGISTER (CPDFI)
Address: PCODAR+1 read, write; index CIDXR[4:0] = 8
Default: 0000 0000
Modes: The definition of this register varies based on the mode
This register specifies the sample rate (selects which of the two oscillator is to be used and the divide factor for that oscillator), stereo or mono operation, linear or companded data, and 8 or 16 bit data. It can only be changed when the mode change enable bit (CIDXR[6]) is active.
In mode 1, this register controls both the playback and record paths. In mode 2, bits[3:0] of this register controls both the record and playback sample rate (i.e., they must be the same) and bits[7:4] specify the state of the playback-path data format.
In mode 3, this register controls only the playback path; the record sample rate is controlled by CRDFI.
Figure imgf000094_0001
Figure imgf000095_0001
CONFIGURATION REGISTER 1 (CFIG1I)
Figure imgf000095_0002
Figure imgf000096_0003
EXTERNAL CONTROL REGISTER (CEXTI)
Figure imgf000096_0001
STATUS REGISTER 2 (CSR2I)
Figure imgf000096_0002
Figure imgf000097_0001
MODE SELECT, ID REGISTER (CMODEI)
Figure imgf000097_0002
Figure imgf000098_0001
LOOPBACK CONTROL REGISTER (CLCI)
Figure imgf000098_0002
UPPER, LOWER PLAYBACK COUNT REGISTERS (CUPCTI, CLPCTI)
Address: PCODAR+1 read, write; upper index CIDXR[4:0] = Eh, lower index CIDXR[4:0] = Fh
Default: 0000 0000 (for both) Modes: definition of these registers vary based on the mode
These registers collectively provide the 16-bit preload value used by the playback sample counters. CUPCTI provides the upper preload bits [15:8] and CLPCTI provides the lower preload bits [7:0]. All 16 bits are loaded into the counter during the write of the upper byte; therefore, the lower byte should be written first; however, if only the low byte is written and the counter underflows, the new value will be placed into the timer. Reads of these registers return the value written into them, not the current state of the counter. In mode 1, this register is used for both playback and capture; in modes 2 and 3 it is used for playback only.
CONFIGURATION REGISTER 2 (CFIG2I)
Figure imgf000099_0001
Figure imgf000100_0002
CONFIGURATION REGISTER 3 (CFIG3I)
Figure imgf000100_0001
Figure imgf000101_0002
LEFT, RIGHT LINE INPUT CONTROL REGISTERS (CLLICI, CRLICI)
Figure imgf000101_0001
LOWER, UPPER TIMER REGISTERS (CLTIMI, CUTIMI)
Address: PCODAR+ 1 read, write; low index CIDXR[4:0] = 14h, upper index CIDXR[4:0] = 15h Default: 0000 0000 (for both)
Modes: 2 and 3
These registers collectively provide the 16-bit preload value used by the general purpose timer. Each count represents 10 microseconds (total of 650 milliseconds). CUTIMII provides the upper preload bits [15:8] and CLTIMI provides the lower preload bits [7:0]. Writing to CLTIMI causes all 16 bits to be loaded into the general purpose timer. Reads of these registers return the value written into them, not the current state of the counter.
LEFT, RIGHT MIC INPUT CONTROL REGISTERS (CLMICI, CRMICI)
Figure imgf000102_0001
STATUS REGISTER 3 (CSR3I)
Address: PCODAR+ 1 read, write (to clear specific bits); index
CIDXR[4:0] = 18h
Default: X000 0000
Modes: 2 and 3; definition of bits[5:4] vary based on the mode
This register provides additional status information on the FIFOs as well as reporting the cause of various interrupt requests. Each of the TIR, RFDI, and PFDI bits are cleared by writing a 0 to the active bit; writing a 1 to a bit is ignored; these bits can also be cleared by a write of any value to CSRIR. Bits[3:0], the overrun-underrun bits, are cleared to a low by reading CSRIR; these bits are also cleared when the mode change enable bit in CIDXR goes from high to low.
Figure imgf000103_0001
CSR2I[PFU].
LEFT, RIGHT OUTPUT ATTENUATION REGISTER (CLOAI, CROAI)
Figure imgf000104_0001
MONO I/O CONTROL REGISTER (CMONOI)
Figure imgf000104_0002
Figure imgf000105_0002
RECORD DATA FORMAT REGISTER (CRDFI)
Figure imgf000105_0001
Figure imgf000106_0001
UPPER, LOWER RECORD COUNT REGISTERS (CURCTI, CLRCTI)
Address: PCODAR+ 1 rd, wr; upper index CIDXR[4:0] = lEh, lower index CIDXR[4:0] = lFh
Default: 0000 0000 (for both)
Modes: 2 and 3; in mode 1, function is moved to CUPCTI and CLPCTI These registers collectively provide the 16-bit preload value used by the record sample counters. CURCTI provides the upper preload bits [15:8] and CLRCTI provides the lower preload bits [7:0]. All 16 bits are loaded into the counter during the write of the upper byte; therefore, the lower byte should be written first; however, if only the low byte is written and the counter underflows, the new value will be placed in the timer. Reads of these registers return the value written into them, not the current state of the counter.
PLAYBACK VARIABLE FREQUENCY REGISTER (CPVFI)
Address: PCODAR+ 1 read, write; index CIDXR[4:0] = lDh
Default: 0000 0000 Modes: 3 only
This 8-bit register specifies the playback frequency when variable- frequency-playback mode has been enabled via CFIG3I[2]. The playback frequency will be PCS/(16*(48+CPVFI)), where PCS is the frequency of the oscillator selected by CPDFI[0]. The 16.9 MHz oscillator provides a range from about 3.5 KHz to 22.05 KHz; the 24.5 MHz oscillator provides a range from about 5.0 KHz to 32 KHz. It is not necessary to set CIDXR[MCE] when altering the value of this register.
Referring to Fig. 45, in mixer 606, for the record path of CODEC 505, the status of control register CLICI 604 controls multiplexer (MUX) 602 such that only one of four analog audio signals pass through MUX 602 and attenuation/gain control circuit 664. If not muted by attenuation/gain control circuit 664, the selected signal is then provided to either left record ADC 666, or looped back through attenuation/gain control circuit 606 to be summed in playback mixer 678 with the output of left playback DAC 680. This loop back is accomplished over loop back path 676, which provides a loop back path for system test and dub-over capability so that in playback mode, MICL 684, LINEINL 682, AUX1L 686, or left synthesizer DAC 692 output signals may be superimposed over audio signals coming from the output of left playback DAC 680. This provides a Karioke-type capability with stored audio signals coming from left playback DAC 680.
The contents of control register CFIG3I[SYNA] 607 is used to control left synth DAC MUX 694 to select between analog inputs AUX1L 686 and left synthesizer DAC 692. The selected analog audio signal then passes to the input of MUX 602 and to attenuation/gain control circuit 612. The output of attenuation/gain control circuit 612 is then input to main mixer 698 to be summed with all other non-muted analog audio input signals available at the input to main mixer 698.
Main mixer loopback path 677 provides the output of main mixer 698 to the input of MUX 602. Main mixer 698 output is also provided to attenuation/gain control circuit 674 for further submission to mono mixer 672, as LEFTOUT, where it is summed with analog output RIGHTOUT 616 from the right channel mixer (not shown). Signals LEFTOUT and RIGHTOUT are summed in mono mixer 672 and then sent through mute control 604 to be available as analog output signal MONOOUT 668. Signal LEFTOUT is also input to attenuation/gain control circuit 602. If not muted, LEFTOUT is available as an analog output left channel stereos signal LINEOUTL 670.
The analog audio input signal MONOIN 690 passes through attenuation/gain control circuit 696 and is available to main mixer 698 as an input signal, and as an analog mono input signal 618 to the right channel main mixer (not shown).
As shown in Fig. 47, the CODEC 505 includes circuitry to ensure that the amplitude of each respective analog audio signal in analog mixer 606 is maintained until the signal attains a nominal value. This is accomplished by zero detect circuit 715. Updated attenuation/gain control information is not loaded into the respective attenuation/gain control register until the analog audio signal that is to be acted on with the new attenuation/gain control value either crosses zero volts 714 (Fig. 46) with respect to a reference voltage, or until a time-out count is reached by 25 millisecond timer 718 which will result in a default condition causing the respective attenuation/gain control register in Registers block 566 (Fig. 50) to be loaded with the new gain/attenuation control value.
The attenuation/gain control circuit 710, shown within dotted line in Fig. 47, is provided for each attenuation/gain control register in Registers block 566 of Fig. 44. In the preferred embodiment, there are sixteen attenuation/gain control registers (CLCI, CLICI, CRICI, CLAXII, CRAXII, CLAX2I, CRAX2I, CLDACI, CRDACI, CLLICI, CRLICI, CLMICI, CRMICI,
CLOAI, CROAI and CMONOI) which may be written to change the gain or attenuation control values stored therein, which value is in turn is used to change the amplitude of the analog audio signal being processed by the particular attenuation/gain control register being written to. In other applications, more or less attenuation/gain control registers may be implemented.
In operation, whenever one of the attenuation/gain control registers is written to, Register Select Decode block 716 latches the new attenuation/gain control value into gain latch 730. After decoding the write to one of the attenuation/gain control registers, Register Select Record block 716 sends an enable to 25 millisecond timer block 718 and 100 To 300 Microsecond block 720 to initiate a power-up. Power is then provided for 100 to 300 microseconds to each of the Near Zero Detect blocks 732, by Comparator
Power-On Control block 738, enabled by 100 to 300 microsecond block 720.
The 25 millisecond timer block 718 utilizes ICLK3K, the 3.15 KHz clock, to count to 80. The timing in 100 to 300 Microsecond timer block 720 is accomplished by the logic therein waiting for two edges of 3.15 KHz clock, ICLK3K. Once powered, the Near Zero detect block 732 generates a strobe when the audio input signal 740 approaches nominal voltage. The zero detect logic in each Near Zero Detect block 732 may be implemented with comparators, or other circuits capable of providing an output signal whenever the input audio signal 740 is equal to a predetermined reference voltage. The zero detect strobe is used to latch the new attenuation/gain value into latch
726. The zero detect circuitry 732 will remain powered until the fixed 25 millisecond timer 718 completes its count.
An analog reference voltage (AREF) is used such that when VCC is 5 volts, the value of AREF is 0.376 times VCC, nominal. When VCC is 3.3 volts, the value of AREF is 0.303 times VCC, nominal. AREF is capable of driving up to 250 microamps without degradation and can be placed into high-impedance mode, controlled by CMONOI[AR3S].
If input signal 740 has not reached nominal voltage before the 25 millisecond timer 718 completes its count, the new attenuation/gain control value is nevertheless loaded into the respective attenuation/gain control register, as a default condition. If a write to any of the attenuation/gain control registers in Register block 566 (Fig. 50) occurs before the 25 millisecond timeout is reached, the 25 millisecond timer 718 is reset, regardless of its count status.
The zero detect circuit 715 minimizes "zipper" noise or other audible discontinuities when input signal 740 is to be increased or decreased in amplitude. By powering up the near zero detect circuits 732 only when an attenuation/gain register is written to, unnecessary noise, from comparators or other voltage detect circuits in Near Zero Detect block 732 switching every time a zero crossing is sensed is eliminated.
Referring to Fig. 46, by increasing the gain at input signal zero crossing 714, signal discontinuity 710 is eliminated. By using zero detect block 732, input signal 740 changes amplitude at zero crossing 714 is output from zero detect circuit 715 as output signal 736 (Fig. 47), and continues with its new amplitude along curve 712 (Fig. 46).
All programmable attenuation/gain control circuits in CODEC 505 (triangles in analog mixer 606) include zero crossing detect circuitry 715. Zero crossing circuit 715 performs identically for each attenuation/gain control register in Registers block 566 (Fig. 50).
An additional noise management feature of CODEC 505 is used to suppress noise on power-up. Audible glitches from audio outputs LINEOUT 670 and MONOOUT 668 (Fig. 45) are suppressed when power is being applied or removed from CODEC 505, or when low-power mode is entered or exited. During all power-up and power-down phases, CODEC 505 output amplifiers in mute circuits 602 and 604 (Fig. 45) are muted.
To enhance the performance of the CODEC, digital operations occur on the rising edge of the 16.9 MHz system clock, and analog operations are performed on the falling edge of the system clock, or at some other time prior to the next rising edge of the system clock. Generally, digital operations inherently produce noise which must be attenuated as much as possible before analog operations are performed. Using different edges of the system clock, in addition to delaying the clocks generated from the system clock that are used by the analog circuitry with respect to the clocks used by the digital circuitry, will produce the desired result. Inherently noisy digital operations include, RAM reads, precharging a bus and performing an addition. Analog functions require a quiet supply and ground. For example, a comparator requires a low level noise background to be able to detect a one millivolt level to achieve a proper compare.
The record and playback paths of CODEC 505 are independently programmable to provide a different sample rate for playback and record. A continuously variable rate playback mode is provided for playback DAC 514 (Fig. 44), which includes a choice of two ranges of sample clock rates ranging from 3.5 to 22.05 KHz or from 5.0 to 32.00 KHz. Each sample rate range contains 256 incremental clock rates. By enabling this variable playback mode by modifying the status of control register CFIG3I[2], the playback frequency for playback DAC 514 can be continuously varied over 256 steps, resulting in smooth transitions between audio sample rates which produces high quality sounds. Previously, with only fourteen different sample rates being used, the data sample rate had to be increased and interpolated, then the rate increased again and the signal interpolated again to achieve the desired sound and transition between sample rates. This required excessive processor intervention.
Utilizing the feedback loops within CODEC analog mixer 606 (Fig. 45), and the independent programmability of the sample rates of record ADC 516 and playback DAC 514, an analog audio signal may be sampled and converted to digital by record ADC 516 at one rate, then played back through playback
DAC 514 at another rate. This feature provides a translator capability between an audio signal recorded and played at different sample rates. For example, the direct recording of compact disc (CD) audio, or digital audio tape data (DAT) onto formatted tapes without significant degradation of signal quality is implemented by CD audio data being converted to analog through playback DAC 514 at 44.1 KHz, then being processed through record ADC 516 circuitry and made available as serial or parallel digital audio data that can be recorded by external audio equipment on DAT at 48 KHz.
In the present invention, the continuously variable playback frequency mode can be selected to incrementally increase the playback sample rate in
CODEC 505 without external processor intervention for up-sampling and interpolation. The frequency range is preferably selected by control register CPDFI[0] in the Registers block 566 (Fig. 50), which is programmable to be able to select, at any time, the playback frequency to be used, and thus, which clock is to be used. See Fig. 48. This requires some external processor intervention to load the frequency select instruction, but not as much overhead as previous audio systems. For software compatibility with existing systems, however, the playback-variable frequency mode is different than the 14 sample rate mode operation of playback DAC 514 and record ADC 516.
Oscillators with external crystals 560 (Fig. 50) are used to generate the range of frequencies for the playback variable frequency mode. Preferably, two external crystals in conjunction with on-chip circuitry are used to produce two clocks, one being at 24.576 MHz and one being at 16.9344 MHz.
Selecting the 16.9 MHz clock with select logic circuit 762 will provide a 256 step frequency range from between 3.5 KHz to 22.05 KHz. Selecting the 24.5 MHz crystal will provide a 256 step frequency range of 5.0 to 32.00 KHz.
To provide each of the 256 steps over a selected frequency range, the chosen crystal oscillator is divided by three or more to create an X256 clock
(sample rate times 256). The X256 clock is then divided by four to create the X64 clock (sample rate times 64). The X64 clock repeats an 8-cycle, aperiodic pattern which produces the frequencies within the selected range. The various clocks, generated by the divide-down logic in Fig. 48, are used to change the sample rate (pitch) during playback through the playback DAC
514 (Fig. 44), such that the higher the sample rate, the higher the pitch and the lower the sample rate, the lower the pitch. This capability of continuously variable playback sample rates can be used with any DAC, and is not limited to the Σ-Δ playback DAC 514 described herein.
Table C1 describes the formulas preferably used to select the sample frequency for each range.
Figure imgf000112_0001
Table C2 illustrates how the first ten clock frequencies in one range are generated using the 16.9 MHz external crystal oscillator.
Figure imgf000113_0001
Table C3 illustrates the preferred way of using the X256 clock to create the wave forms illustrated Table C2. The 4-cycle pattern illustrated in Table C3, given by the status of register SMX64[1:0], is used to ensure that the X64 clock maintains a 50 percent duty cycle, which is preferred.
Figure imgf000113_0002
Fig. 48 illustrates the clock select circuitry which provides the independently selectable sample rates for the record and playback paths of CODEC 505, and the continuously variable playback sample rates for playback DAC 514. Playback DAC 514 and record ADC 516 (Fig. 44) are each capable of operating at one of 14 different sample rates ranging from 5.5 to 48.0 KHz. These sample rates are preferably derived from the two external crystal oscillators 560 (Fig. 50). Select logic circuitry 762 in CODEC 505 controls each 2:1 MUX 766 to select the output of either the 16 MHz or 24 MHz oscillator, depending on which sample rate is selected.
Gate logic block 752 in the record path, and 764 in the playback path, provide the selected clock signal to divide-down logic blocks 754, 756, and blocks 760, 757, respectively, to provide a selected slower clock. As shown in Fig. 48, the status of control registers CPDFI[0], CPDFI[3:1], CRDFI[0], CRDFI[3:10], CFIG3I[2] and CPVFI[7:0] controls the divide-down logic to be used to generate a selected clock signal. Clock CP256X is used to control operations in the playback DAC 514. Clock CP64X is used to control operations in the semi-digital filter 804 (Fig. 51).
Referring to Figs. 49 and 49a, CODEC 505 includes logic and control for transfers of serial digital audio data, including parallel-to-serial (PTS) conversion blocks 788, 789 and serial-to-parallel (STP) conversion logic 782. A record multiplexer (MUX) 784 is controlled by control register ICMPTI[8:6]. If bits [8:6] equal zero, MUX 784 selects parallel digital audio data from record ADC 516. If equal to one, MUX 784 selects the output of STP conversion logic 782. In the record path, the output of record MUX 784 is provided to the CODEC record FIFO 538. Referring to Fig. 44, the output of record FIFO 538 is available on register data bus 526; at local memory control 790 (which may transfer the data to off-chip local memory 110, Fig.
44, for storage as a record FIFO) via parallel to serial converter 789, serial transfer control 540 and data path 550; and at the input of PTS block 789 whereby the data is then provided, via Serial Transfer Control block 540, to: record FIFO 538, playback FIFO 532 (via serial to parallel converter 782), or to External Serial Interface 544.
As shown in Fig. 49a, in the CODEC playback path, a playback MUX 794 is controlled by control registers ICMPTI[8:6] and LMFSI[PE]. If ICMPTI[8:6] is not equal to one, or if LMFSI[PE] equals one, then audio data from STP block 782 is available at the input to playback FIFO 532. Otherwise, data from register data bus 526 is available at playback FIFO 532.
As shown if Fig. 49, data from local memory control 790 (which may obtain data from local memory 110, Fig. 44) is provided to playback FIFO 532 via playback MUX 794. Audio data from synth DSP 796 or record FIFO 538 may also be available at the input of playback MUX 794. As illustrated in Fig. 49a, the value of ICMPTI[8:6] determines the operation of serial transfer control MUXES 554 and 548. Serial transfer control MUX 546 operation is controlled by the status of LMFSI[PE].
As shown in Fig. 44, audio data from synthesizer DSP 796 is also available at the input of synthesizer DAC 512. The output of synth DAC 512 is provided as an analog input to left synth DAC MUX 649 (and right synth DAC MUX, not shown) in CODEC analog mixer 606 (Fig. 45). Synthesizer DSP 796 may be an external device, or may be included in a synthesizer module on the same monolithic integrated circuit as the CODEC device 505 to increase the flexibility and speed of operation between the CODEC 505 and the synthesizer.
With the arrangement of STP and PTS converter logic blocks 782 and 789, respectively, and Serial Transfer Control block 540, a digital loop back capability between record and playback paths of CODEC 505 exists. This provides greater flexibility for testing and for data transfer of audio data from external sources to or from record FIFO 538 or playback FIFO 532, or to off-chip local memory 110, Fig. 44, via local memory control 790, or to external system memory (not shown). A digital data path (Figs. 44, 49), via PTS and STP blocks 789 and 782 is depicted between the record FIFO 538 output and the playback FIFO 532 input. The loop between the playback DAC 514 output and the record ADC 516 input is analog and resides in Mixer 606, Fig. 45, and is illustrated with left playback DAC 680 looping to left record ADC 666.
External serial interface 544 may be connected to a synthesizer DSP having a serial input and output (not shown) whereby that synthesizer DSP could receive serial data from, via Serial Transfer Control block 540, record FIFO 538, and could send serial data to, via Serial Transfer Control block 540, playback FIFO 532.
The record and playback MUXES 784 and 794, in the serial data transfer logic of CODEC 505 are preferably bit-stream multiplexers. Preferably, state machines are used to generate and/or operate on the control signals and clocks necessary to accomplish the transfers. See the description of control signals during serial data transfers, above. Most transfers in Serial Transfer Control block 540, operate off a 2.1 MHz, 50 percent duty cycle clock, derived by dividing the 16.9344 MHz crystal oscillator by eight. Transfers from the synth DSP 796 to an external device utilize 32 clocks per frame, based on the synth DSP frame rate. The STP logic blocks 782 are 16- bit slaves to the bit streams that drive them. A pulse, STSYNC, generated by serial transfer control block 540, is followed by 16 bits of data, MSB first. As with the PTS blocks 788, 789 the data configuration and order is the same as for 16-bit DMA transfers. STSYNC toggles after the LSB of each 16-bit left or right data sample is transferred.
Each PTS converter blocks 788, 789 transfer operation brings in 16-bits of data to be shifted out serially. The number of transfers, the data configuration, and the order of the data varies based on the transfer mode selected, discussed below. The PTS blocks 788, 789 behave the same as that of 16-bit DMA transfers to the FIFOs, described below and depicted in Table C4 (e.g., if in 8-bit mono mode, there is one serial transfer for every two data samples, with the first sample being the LSBs and the second being the MSBs or, if in 16-bit stereo mode, there are two transfers for every sample received.)
Figure imgf000116_0001
The PTS blocks 788, 789 indicates that there is data ready to be transferred out by setting a flag. The serial transfer control block 540 responds by generating a pulse, STSYNC (serial transfer sync) that is intended to initiate the flow of serial data, MSB first. After 16 bits are transferred, a clear pulse is sent to PTS blocks 788, 789 from the serial transfer control block 540 so new data can be loaded into the respective PTS block 788 or 789.
Preferably, there are three sources and three destinations for all digital audio data multiplexed through the serial transfer control block 540. Various operating modes can be selected by modifying the contents of a control register, ICPMTI in Registers block 566 (Fig. 50), to the selected mode of operation shown in Table C5.
Figure imgf000117_0001
In general, if record or playback FIFO 538, 532 is the data destination, the format and sample rate of that path must conform to that shown in Table C5, otherwise, indeterminate data transfers will result. For example, with STM = 2, the playback path sample rate and format must be the same as the synth DSP 796 (16-bit stereo, 44.1 KHz). With STM = 3, the playback path sample rate and format must match the record path. In mode 4, the sample rate is 44.1 KHz or less. The modes where synth DSP 796 specifies that the sample rate can be lower than 44.1 KHz is where the value in synthesizer global mode register SGMI[ENH] is low and the register indicating the number of active synthesizer voices, SAVI[AV], is set to greater than 14. That is, if more than 14 audio voices, or signals, are being processed, the sample rate in these modes can be lower than 44.1 KHz. Otherwise, the first fourteen signals are processed at 44.1 KHz. For modes STM = 1 and STM = 2, CODEC 505 only supports a sample rate of 44.1 KHz. In these two modes, if synth DSP 796 operates at other than 44.1 KHz, proper operation will not occur.
As shown in Fig. 50, during playback mode, digital audio data, from external system memory (not shown), which may be formatted in one of several selectable formats, is provided, via DMA or I/O transfers, to external bus 562, through control logic and external bus interface block 568, and on to register data bus 526 as left and right channel 16-bit stereo data, for ultimate submission to 32-bit wide playback FIFO 532, or LMPF 528 (Fig. 44). The LMPF 528 (Fig. 44) may down-load prerecorded left and right channel 16-bit wide digital stereo audio data signals directly over register data bus 526 to the playback FIFO 532, whereby prior I/O or DMA transfers would have been made between the external system memory and the LMPF 528, which reduces the number of DMA transfers necessary between external system memory and CODEC playback FIFO 532. During playback, the most common mode of data transfer is DMA transfers between the external system memory and the CODEC playback FIFO 532.
In either case, the audio data is then output from playback FIFO 532, formatted (decompressed) to 16-bit signed data, as described in discussion of Format Conversion block 534 in Fig. 44, and then input to the playback DAC 514 as 16-bit signed data. The data is then sent to the Mixing Analog
Functions block 510, which contains left and right analog mixers, discussed previously regarding description of Fig. 45.
In the record path, external analog audio signals that are input through the CODEC analog input pins 520 are sent through Mixing and Analog Functions block 510, and are provided as left and right channel stereo
16-bit signed digital signals to record ADC 516. The 16-bit left and right channel stereo data from record ADC 516 is then formatted to a pre-selected format and sent to 32-bit wide record FIFO 538 for further submission to register data bus 526, then to external bus 562, then to external system memory (not shown) via DMA or I/O data transfers or to LMRF 530 (Fig. 44).
In record mode, DMA data transfers occur between either the LMRF 530 (where LMRF 530 has been loaded with audio data from on-chip record FIFO 538) and the external system memory via external bus 562 or, directly between the on-chip record FIFO 538 and the external system memory.
CODEC 505 is capable of performing I/O between the external system memory and the CODEC on-chip record and playback FIFOs 538, 532, and also between the system memory and the off-chip LMPF 528 and LMRF 530, for improved system flexibility.
Referring to Fig. 50, when the playback path of CODEC 505 is in mono mode, with control register CPDFI[4] being active low, both the left and right channel stereo DACs in playback DAC 514 block are provided with the same audio data from playback FIFO 532. When the record path is in mono mode, with control register CRDFI[4] being active low, preferably only data from the left stereo ADC in record ADC 516 block (data from right stereo ADC ignored) is processed and provided to the record FIFO 538. In an alternative embodiment in mono mode, only data from the right stereo ADC is provided to record FIFO 538.
Aliasing problems arise in the record ADC 516 when audio signal frequencies are processed at greater than the Nyquist rate, i.e. greater than 0.5 fs (one-half the sample rate). Stop band and reject circuitry is used to eliminate signal reflections at multiples of fs, plus and minus the signal frequency. The stop band rejection at 0.6 Fs for 22 KHz is preferably greater than 75 dB. Stop band rejection is used in combination with analog filtering to eliminate high frequency images (reflections) during D/A conversions in playback DAC 514.
Oversampling in record ADC 516 is performed at 64 times the sample rate at a lower bit resolution. The signal is then down-sampled and filtered in record ADC 516 until the desired resolution and sample rate, for instance,
44.1 KHz at 16 bits, is achieved. The detailed description of the functions and operation of record ADC 516 circuitry is discussed below.
Table C4, above, provides information regarding the number of audio data samples transformed per DMA transfer, and the number of cycles per DMA transfer for each 8-bit or 16-bit DMA transfer, depending on the type of DMA transfer selected. For example, in 8-bit DMA transfer mode, audio data formatted as 4-bit ADPCM mono audio data will transfer two 4-bit samples during one DMA cycle. In 16-bit DMA transfer mode, four 4-bit ADPCM mono samples will be transferred during one DMA cycle. During 16-bit DMA cycles, the first byte to playback FIFO 532 is assigned to bits [7:0] and the second byte bits [15:8]. Simultaneous record and playback (read and write) operation is provided.
During I/O operations, the external system processor (not shown) reads the CODEC 505 status registers to determine if an I/O operation is needed and addresses CODEC 505 via Control Logic and External Bus Interface 568 to determine which area within CODEC 505 has requested data. The external system control (not shown) can perform an I/O operation for data transfer to the playback or record FIFOs (532, 538), asynchronously. Error conditions for record FIFO 538 and playback FIFO 532 are shown in Table C6.
Figure imgf000120_0001
With the 16-sample, 32-bit record and playback FIFOs, 538, 532, preferably configured with 16-bits dedicated to left channel data and 16-bits to the right channel data, thresholds, or taps, on the record and playback FIFOs 538, 532 at the 0, 7, and 15 sample address, correspond to "empty," "half-full" and "full." These addresses are monitored by control logic block 568 so a I/O interrupt request (IRQ) or DMA request (DRQ) can be generated (Mode 3 only, explained below) depending on the state of CODEC 505's record or playback FIFOs 538, 532. This operation is explained in greater detail, below.
Separate DRQ signals are capable of being generated for the record and playback FIFOs 538, 532. In external systems that can spare only a single DMA channel for CODEC 505, a mode is provided that allows the playback DRQ to be shared so it can function as either the record or playback DMA request channel. Systems lacking DMA capability may use I/O transfers instead. The DMA transfer mode is specified in configuration control register CFIG1I of Registers block 566 (Fig. 50). If the record or playback paths are disabled (via CFIG1I [1:0]), after the associated DRQ request signal has become active, the audio data sample will continue to be transferred, while waiting for the acknowledge, as if the path were still enabled. After the final audio sample is transferred, no other DMA requests will be serviced. When the record path is disabled, via CFIG1I [1], or when the record and playback paths both are being enabled for DMA transfers but single channel DMA operation is selected with CFIG1I[2:0] = [1,1,1], then all data remaining in record FIFO 538 is cleared so that when record FIFO 538 is re-activated, no old data will be available for processing. Before being disabled, however, the record path prior to record FIFO 538, including format conversion block 536 (Fig. 44), and filtering functions in record ADC 516, is not cleared for four sample periods.
When the playback path is disabled, via CFIG1I [0], the playback audio is immediately muted and all samples remaining in playback FIFO 532 are allowed to shift out of FIFO 532 at the sample rate. Four sample periods after playback FIFO 532 is empty, with zeros driven through the post-FIFO playback path, the playback path is disabled to minimize power consumption.
Off-chip local memory 110 (Fig. 44) is preferably used in conjunction with the on-chip playback and record FIFOs 532, 538. Preferably, local memory 110 is figured as a large record and a large playback FIFO, each with approximately 16-megabits of 8-bit addresses. A 19-bit counter in CODEC Counters, Timers block 518 is programmed to select the size of the area in DRAM to form the respective LMPF 528 and LMRF 530, which can be configured to hold up to 512K samples. More or less audio sample memory for the LMPF 528 and LMRF 530, or local memory 110, may be configured depending on design and/or application requirements. It is preferable to use DRAM instead of SRAM due to lower cost and power requirements.
CODEC 505 includes a mode for performing interleaved DMA transfers of data between external system memory and the LMPF 528, and vice versa.
In interleaved data mode, external digital audio data samples, which are stored sequentially in external system memory as L1, R1, L2, R2, ... are transferred over external bus 562, to local memory control 790 (Fig. 49), in Control Logic block 568 (Fig. 50), which reformats the data prior to storing it in the LMPF 528 such that the left channel data samples are stored in one area of off-chip local memory 110 as L1, L2, L3, ... block and the right channel data samples are stored in another area of local memory 110 data as R1, R2, R3,... block. In mono mode, the same data is stored in both blocks of local memory 110. For record mode in CODEC 505, the samples would be sent from LMRF 530 to external system memory, using the same method in reverse.
Two 16-sample counters in Counters, Etc. block 518 (Fig. 44) are provided, one for playback FIFO 532 and one for record FIFO 538. The sample counters count the number of samples that go into or come out of each respective FIFO. Each counter decrements by one every sample period, except in ADPCM mode. After the counter reaches zero, an interrupt is generated, if not masked, and the counter is reloaded with the next value the counter is to decrement from. The count value of the counters are programmed by way of record and playback count registers (CURCTI, CORCTI, CUPCTI and CLPCTI) in Registers block 566 (Fig. 50). Status of the counters is reported via control register CSR3I in Registers block 566. In mode 3, explained below, the CODEC playback counter can be made to decrement when a DMA transfer is made from external system memory to off-chip local memory 110, as well as when DMA transfers are made from external system memory to the on-chip record or playback FIFOs 538, 532.
Table C7 shows the relationship between the data format and the events causing the sample counters to decrement.
Figure imgf000122_0001
Table C8 identifies the events causing the sample counters to decrement, and the variables used in the preferable Boolean equations, below, which are used to generate the count enable inputs to the counters.
Figure imgf000122_0002
Figure imgf000123_0003
Figure imgf000123_0001
Table C9 shows the format by which audio data is provided to and received from the record and playback FIFOs 538, 532 of CODEC 505 from the prospective of an external system or microprocessor (not shown). The letter "S" in Table C6 refers to "sample" and the number following the letter "S" refers to the sample number. The letter "R" or "L" after the sample number refers to right or left channel stereo audio data.
Figure imgf000123_0002
The CODEC timers, located in Counters and Timers block 518 (Fig. 44), are used to time certain external system functions, such as length of time to play an audio signal, etc. An interrupt is generated when the timer count is complete. CODEC 505 preferably does not utilize a timer in this block for its functions, but having this capability for industry compatibility and expandability purposes is necessary. The CODEC 505 can operate in one of three modes during playback or record. The CODEC 505 is generally register compatible with present audio systems, by operating in modes 1 and 2. An indirect addressing mechanism is used for accessing most of the CODEC registers, contained in Registers block 566 Fig. 50. In mode 1, there are preferably 16 indirect registers. In mode 2, there are preferably 28 indirect registers. In mode 3, which is unique to CODEC 505, there are preferably 32 indirect registers. These modes operate as follows:
MODE 1. The playback sample counter in Counters, etc. block 518, Fig. 44, decrements when the playback path is enabled (CFIG1I[0]) or the record path is enabled (CFIG1I[1]). When both paths are enabled, only the playback path affects the counter and the record sample counter is not available. If register CODEC index address register, CIDXR[DTD], is set and the active path generates an interrupt (CSR1R[GINT]), then the sample counter stops counting. The counter starts counting again once the interrupt or CIDXR[DTD] is cleared. The DMA or I/O cycle control bits, CFIG1I[7:6], do not affect the sample counter's behavior.
MODE 2. The playback sample counter decrements when the playback path is enabled (CFIG1I[0]). The record sample counter decrements when the record path is enabled (CFIG1I[1]), unless CFIG1I[2] and CFIG1I[0] are also enabled. If CODEC index address register, CIDXR[DTD], is set and the active path generates an interrupt (CSR3R[5:4]), then the respective path that requested the interrupt stops operating. That data path begins operation and the counter starts counting again once the interrupt or CIDXR[DTD] is cleared. The DMA or I/O cycle control bits, CFIG1I[7:6], do not affect the sample counter's behavior.
MODE 3. Same as mode 2 operation, except the sample counters do not count when in I/O mode (CFIG1I[7:6]). Also, an enable is provided for each sample counter from configuration register, CFIG2I[5:4]. This is an enhanced mode, with independent record and playback path sample rates, record and playback programmable FIFO thresholds, additional analog mixer input enabled for synthesizer DAC audio signals, attenuation/gain controls for mixer 606 (Fig. 45) LINE/MONO outputs, and continuously variable programmable sample frequency mode (256 steps) in playback path.
A programmable 16-bit timer is provided in modes 2 and 3. This timer has approximately a 10 microsecond resolution and uses a 100 KHz clock, CLK100K. The timer is enabled by CFIG2I[6].
A programmable register pair in CODEC 505 specifies the 16-bit counter preset (CUTIMI and CLTIMI). The counter decrements every 10 microseconds until it reaches zero. At this point, the timer interrupt bit in Status Register 3 is set, the interrupt bit in Status Register 1 is set, and an interrupt is generated, if enabled via CEXTI[1]. The counter is reloaded with CUTIMI and CLTIMI values on the next timer clock.
The record and playback FIFOs 538, 532 include programmable thresholds, or taps, for signaling an IRQ or DRQ from or to the respective FIFO from external system memory. Threshold operation is as follows: a pointer tree at record and playback FIFOs, 538, 532, indicates, if equal to zero, that the address is empty of data, and if equal to one, that data is present. The transition of the index pointer tree from a one (full) to a zero (empty) for a particular address in either FIFO will trigger an IRQ or DRQ interrupt for an external system to fill the playback FIFO 532 above the preselected threshold level (playback), or to empty the record FIFO 538 to an external system so it is below the preselected level (record).
The CODEC Logic Control block 568 (Fig. 50) is connected to each tap on either FIFO. The threshold select in configuration register CFIG3I[4, 5]) in Registers block 566 (Fig. 50) determines whether the empty, full, or mid-level threshold is selected. The Logic Control block 568 continuously monitors the taps and automatically generates and performs whatever functions it is designed to perform (e.g., DMA or I/O interrupt generation). When the tap signals that the threshold address is empty (playback) or full (record), depending on whether the tap is located at the position of full, empty or mid-range in the FIFO, an interrupt request is generated. DMA counters in Counters, Timers, Etc. block 518 (Fig. 44) are set for a certain number of data samples to be transferred to or from CODEC 505. Whenever a counter has completed its count, an interrupt request is generated.
The value in the index pointer of the record and playback FIFO 538, 532 is provided to the CODEC control block 568. When the index pointer has reached the FIFO threshold, a bit will be changed in a status register, in Registers block 566. This status bit can be read by the external system processing to perform a write and read operation to or from that FIFO. The status register in Registers block 566 is changed in real-time based on the threshold (taps) in the FIFOs changing from a one to a zero. When that occurs, a bit toggles in a status register, and when the status register is checked by the external system processor, the processor will determine which device is requesting the interrupt. The CODEC registers in Register block 566 are addressed with a direct address over Register Data Bus 526, or via indirect addressing by way of an index register in Registers block 566.
In the CODEC 505, the following interrupts can be generated: (1) playback and record FIFO I/O threshold reached; (2) playback and record sample counters have decremented to zero; and (3) CODEC timer has decremented to zero. The result of the CODEC interrupt logic located in
Control Logic block 568 (Fig. 50) is combined into one interrupt signal, IACODEC, which is passed to interrupt selection logic in Control Logic block 568. The interrupt may be masked by a global enable, CEXTI[1]. The state of the interrupts are displayed in the global status register, CSR1R[0] located in Registers block 566 (Fig. 50).
The following interrupt equations describe the states required to set (CSET) and clear (CCLR) the logic in Control Logic block 568 associated with CODEC 505 interrupts. There is one latch in Control Logic block 568 to drive each of the three interrupt status bits in CSR2I. Referring now to Table C10, the definitions of the variables in the following interrupt equations are given.
Figure imgf000126_0001
Figure imgf000127_0002
Figure imgf000127_0001
Two general purpose control signals are provided from Control Logic block 568, referenced, GPOUT [1:0]. The state of these digital outputs reflects the state of the corresponding control bit located in the External Control Register (CEXTI) in Registers block 566 (Fig. 50).
The CODEC includes a low-power mode. Three programmable bits, selecting the low-power shut-down status of CODEC 505, power control register, PPWRI[2:0], located in Registers block 566 (Fig. 50) can disable the record path, the playback path or the analog circuitry of CODEC 505. In other embodiments, more or less bits may be used. In the shut-down mode, both external crystal oscillators 560 (Fig. 50) are disabled but all registers in Registers block 566 Fig. 44 are readable. In suspend mode, selected by the external computer system or processor, CODEC 505 performs as if all 3-bits in the power control register, PPWRI, are selecting low-power states, both oscillators 560 are disabled and most of the CODEC I/O pins (not shown) become inaccessible. A dedicated suspend mode control pin, SUSPEND# (active low), causes the CODEC I/O pins to be forced high, forced low, or be set into a digital or analog high-impedance mode. See Table C11, which describes the state of the I/O pins in suspend mode. A technique for reducing power consumed by clock driven circuits is described in application Serial No. 07/918,622, entitled "Clock Generator Capable of Shut-Down Mode and Clock Generation Method," assigned to the common assignee of the present invention and incorporated herein for all purposes.
Figure imgf000128_0001
Table C12 describes what the PPWRI[2:0] bits cause to happen to CODEC 505 circuitry in power shut-down mode.
Figure imgf000128_0002
When the SUSPEND# pin becomes active (goes low), the CODEC behaves similarly to when it is placed into shut-down mode. Signal ISUSPRQ is logically ORed into I2LSUSPRQ and I2SSUSPRQ from the shut-down logic. ISUSPIP is logically ORed into I2LSUSPIP. If CODEC 505 is already in shut-down mode when SUSPEND# is asserted, then: (1) the I/O pins are changed to match the requirements of suspend mode described above; and (2) CODEC 505 analog circuitry in playback DAC 514, record ADC 516 and synth DAC 512 (if synth DAC 512 is embodied as a processing block within CODEC 505) is placed into low-power mode, if it is not already in that mode. After the ISUSPRQ# is asserted, the logic in Control Logic block 568 waits for more than 100 microseconds before stopping the clocks of CODEC 505 and before disabling the oscillators. The 16 MHz clock ICLK16M and the 24 MHz clock ICLK24M are disabled (and later re-enabled) such that there are no distortions or glitches. After the clocks go into one of their high phases, they are held there until suspend mode is deactivated.
After SUSPEND# is deactivated, the external oscillators 560 are re-enabled, but ICLK16M and ICLK24M do not toggle again until the oscillators 560 have stabilized, 4 to 8 milliseconds later. This occurs after both oscillators 560 have successfully clocked 64K times. After the output clocks have been toggling for at least 100 microseconds, the ISUSPRQ# signal is deasserted to allow the logic in the rest of CODEC 505 to operate. Signal ISUSPIP (suspend in progress) is active while the clocks are not valid. It is used to change the status of the I/O pins per the suspend requirements in Table Cll.
The CODEC 505 can operate at either VCC = +3.3 or 5 volts. A voltage detect circuit in Control Logic block 568 (Fig. 50) determines whether the CODEC is in the 5 volt or 3.3 volt operating mode. The operating status is determined by the output of the voltage detect circuit register AVCCIS5. The operating voltage detect circuitry is utilized so the external computer system, or processor, can be informed that a signal cannot be generated greater than the operating VCC. For example, during 3.3 volt operation, a 4 volt signal cannot be generated. It also is used to set the analog full scale reference voltage and the range of drive capability of the digital I/O pins.
The CODEC 505 is capable of interacting with an external CD-ROM interface 568 (Fig. 50). Signals including chip select, DMA request, DMA acknowledge and interrupt request from the CD-ROM interface are supported by the CODEC 505.
An external serial EPROM or EEPROM 570 (Fig. 50) may be utilized by CODEC 505 to make the CODEC 505 Plug-n-Play (PNP) compatible with
ISA, EISA or other industry standard buses or devices. Commercially available PNP software may be used to control the serial EPROM or EEPROM to configure the CODEC 505 for an external computer system or microprocessor. Where an external serial EPROM or EEPROM for PNP capability is not available, the external CD-ROM interface is not accessed by the CODEC.
A. Digital Signal Processing Portion of CODEC Playback Path. The CODEC playback DAC 514 (Fig. 44), and synth DAC 512 if synth
DAC 512 is embodied within CODEC 505, each include an interpolation block 800 (Fig. 51), a noise shaper 802 and a semi-digital FIR filter 804 for left and right channel stereo audio data. Only the left channel is shown in Fig. 51 and described herein. Operation of the right channel is identical. The operation of CODEC playback DAC 514 will be described herein. The operation of synth DAC 512 is identical if embodied within CODEC 505, otherwise the operation of the synth DAC may deviate.
A 16-bit digital audio signal 806 is output from Format Conversion block 534 (Fig. 44), and is input as a signed data signal to interpolator block 800 (Fig. 51) of playback DAC 514 where the signal is up-sampled. After the first three stages of interpolation, the multi-bit up-sampled digital audio signal 840 is output to the input of noise shaper 802, where it is quantized and converted to a 1-bit digital output signal 842. The 1-bit signal 842 is then input to semi-digital FIR filter 804 which filters out undesired out of band frequencies and converts the signal to an analog audio signal 808, which is available at the output of playback DAC 514. The left channel analog audio signal 808 is available as an input to left channel CODEC playback mixer 678 (Fig. 45).
Referring to the front end of playback DAC 514 in Fig. 52, the 16-bit digital audio signal 806 is first interpolated, then quantized and noise-shaped.
The playback DAC 514 receives as input, the 16-bit digital signal 806 at a sampling rate fs and produces at the output of interpolator block 800 (Fig. 51) a 1-bit signal 840 up-sampled to 64 times the sample rate for the 16-bit input signal 806 (64 times oversampling). Interpolation is performed in three stages in interpolator block 800, since one stage would require too complex a filter. The complexity of the circuitry is minimized by performing the 64 x up-sampling interpolation in three stages, with interpolation up-sampling factors of 2 in Interp.l blocks 810 and 812, 2 in Interp. 2 block 814, and 16 in Interp. 3 block 816. The noise shaper 802 is operated at the rate of 64 × fs.
A typical input spectrum to Interp.1 block 810, 812 contains components of frequencies up to fs/2, and their undesired images centered about integer multiples of fs. See Fig. 53a for a typical input spectrum. To carry out the first interpolation in Interp. 1 block 810, to fs = 2 × fs, an FIR filter is preferably employed which has a passband extending to about 0.40 fs and has a stopband beginning at about 0.60 fs. Preferably, the passband extends to about 0.45 fs and the stopband begins at about 0.55 fs. The stopband attenuation of the filter is preferably greater than 100 dB, and the passband ripple is about +/- 0.1 dB. This ensures that images of frequencies lower than 0.45 fs, will be attenuated by at least 100 dB. Higher frequencies, however, will fall inside the filter's transition band together with their image, which will be attenuated less. The useful bandwidth is therefore about 3.6 KHz at fs = 8 KHz, or 19.8 KHz at fs = 44.1 KHz. The spectrum of the output of Interp. 1 blocks 810, 812, for the input shown in Fig. 53a, is shown in Fig. 53b. The impulse response coefficients used in Interp. 1 blocks 810, 812 are given in Table C13. The quantity ofs and values associated with, these coefficients will be different if the passband or the stopband changes.
Figure imgf000131_0001
Figure imgf000132_0001
This interpolative filtering is performed digitally, to avoid filtering in the analog domain when operating at the lowest rate, which would require a complex, or sharp transition, analog filter. Without such an analog filter, the images would appear at the output. The analog filter would have to have variable cutoff to accomodate changes in the sampling rate, which is not an acceptable solution.
The second interpolation stage, performed by Interp. 2 block 814, changes the sampling rate to fs" = 4fs. A sinc5 filter is used in this stage, which provides approximately 30 dB of image attenuation. The spectrum of the output of the second interpolator stage 814 is shown in Fig. 53c.
The third interpolation stage, Interp. 3 block 816, changes the sampling rate further, by a factor of 16, to fs" = 64 fs. A sinc2 interpolator, with a differential delay of two, is used. This interpolator serves the following purposes: it attenuates the images around 4fs enough for the images to not exceed the noise levels introduced by the next block, i.e., noise shaper 802, and it also introduces a zero at 2 fs, which together with interpolator stage 2 814, provides enough attenuation for images around 2 fs. The spectrum for the output of the third stage 816 is shown in Fig. 53d.
The final block in the front end of playback DAC, and the last stage of the interpolation filter, is a fifth order noise shaper 802 (Fig. 52). Noise shaper 802 converts the up-sampled multi-bit output 840 from the third interpolator stage 816 to a 1-bit signal 842. It shapes the noise according to a Chebyshev (equiripple) high-pass transfer function. The spectrum for the noise shaper 802 output appears in Fig. 53e. The operation of noise shaper block 802 is described herein.
The 1-bit signal from noise shaper 802 is then filtered with a semi- digital FIR filter 804 (Fig. 51). Semi-digital FIR filter 804 compensates for the attenuation caused by noise shaper 802, and also achieves a relatively flat noise floor extending to about 20 KHz when fs = 8 KHz. Noise shaper 802 has less than unity gain. The spectrum of the semi-digital FIR filter 804 analog output signal is shown in Fig. 53f. Time domain examples of a digital signal being processed by interpolator 800, noise shaper 802 and semi-digital FIR filter 804 are given in Fig. 54.
B. The Interpolator Processing Blocks (810. 812. 814 and 816). A more detailed discussion of the processing blocks of the interpolator 800 follows.
1. Interpolator 1.
Interp.l stage, blocks 810, 812, is a symmetric (linear phase) FIR filter with 2N-1 taps (N distinct coefficients), with N equal to 40 in the preferred embodiment. The interpolation factor in this block is two. It is designed to have an attenuation of about 100 dB or more in the stopband, and approximately +/- 0.1 dB or less ripple in the passband. The passband response also compensates for the rolloff introduced by the sinc5 Interp. 2 stage 814, sinc5 Interp. 3 stage 816 and the semi-digital FIR filter 804 used in the playback DAC 514 D/A conversion process, as well as the gain variation introduced by the noise shaper 802.
The FIR filter in this Interp. 1 stage 810, 812 includes passband compensation achieved by combining into one function all the frequency variations introduced by subsequent stages.
Referring to Fig. 52, when used as interpolator, the FIR filter acts on the input sequence of a digital values, 16-bit input signal 806, whereby every other data sample is equal to zero (for interpolation by 2). This means one odd output sample signal 832 is computed using only odd coefficients in Interp. 1 phase 2 block 812, and the next even output sample signal 834 is computed using only even coefficients in Interp. 1 phase 1 block 810, but on the same set of 16-bit input signals 806. This leads to a polyphase (in this case, 2-phase) implementation shown as Interp. 1 810 and 812 in Fig. 52, in which two sub-filters execute in parallel, and the filter outputs 832 and 834 are interleaved by known methods to create the Interp. 1 signal output 836 which is then provided to Interp. 2 block 814.
In the time domain, the even and odd output signals 834, 832 from the two phases of Interp. 1 810, 812 are:
Figure imgf000134_0004
for even output signal 834, phase 1 (even coefficients), and for odd output signal 832, phase 2 (odd coefficients).
Figure imgf000134_0001
All delays are at the input sampling rate.
The Interp. 1 blocks 810, 812 filter has phase linearity, which means the impulse response is symmetric with respect to the midpoint, with the symmetry condition given as:
Figure imgf000134_0002
Figure imgf000134_0003
(N odd)
This is reflected in the structure of the filters 810 and 812, shown in Figs. 55 and 56, respectively.
Typically, the impulse response contains coefficients which are very small. For large stopband attenuations, these coefficients are very important.
To preserve the precision, the coefficients are scaled so the magnitude of each is between one-half and one. Then, in the summation circuit 818 (Figs. 55, 56), the partial products associated with the smallest coefficients are added first, scaled, and then added to the products associated with the next higher-valued coefficient, and so on. This means the sums cannot be performed in an arbitrary order (e.g., in the same order as the taps are updated), unless the word width is further increased to preserve the precision.
2. Interpolator 2.
The second interpolator stage 814, Interp. 2, is a sinc5 interpolator filter. The interpolation factor in this block is two. Due to the attenuation that will be provided by the semi-digital filter 804, a high attenuation around 2 x fs, is not needed, and a relatively simple structure is used. The transfer function of the filter for Interp. 2 stage 814 is:
Figure imgf000135_0001
expanding to,
Figure imgf000135_0002
Thus, the Interp. 2 filter 814 has only integer coefficients. The passband rolloff has to be compensated in Interp. 1 blocks 810, 812.
Since the Interp. 2 filter 814 interpolates by two, it operates on a sequence in which every other sample is zero, as illustrated below:
Figure imgf000135_0004
This leads to a two-phase implementation as shown in Fig. 57, similar to Interp. 1 810, 812 blocks, where:
Figure imgf000135_0003
j
Figure imgf000136_0002
In H2α and H2b, the delays occur at the input sampling rate fs. The common term in the transfer functions in both phases of Interp. 2 filter 814 results in some hardware savings. Fig. 57 shows an embodiment of the Interp. 2 814 filter. A scaling factor of 2 has been applied throughout. The frequency response, normalized to DC, is shown in Figs. 58 and 59.
3. Interpolator 3.
The transfer function of Interp. 3 block 816 is:
Figure imgf000136_0001
The interpolation factor in this block is 16. The differential delay is 2. The order is 2. One embodiment of the implementation of the transfer function is given in Fig. 60. The differentiators 839 run at a lower rate, while the integrators 841 run at a higher rate.
The differentiators 841 having 2 delays can be factored into a differentiator with one delay and a 2-sample accumulator, where:
Figure imgf000136_0003
Another embodiment for Interp. 3 block 816 is shown in Fig. 61. Each signal sample is used 16 times by the integrator 846, which runs at the highest rate. A zero is introduced a 4 fs. The double delay blocks
841A,B in Fig. 60 and 846A in Fig. 61 operate to introduce an additional zero at 2 fs, which together with interpolator 2 sinc6 filter 814, provides enough image attenuation and is more economical than using a sinc6 filter for interpolator 2 filter 814. The frequency response of interpolator 3 filter 816, normalized to DC, is shown in Figs. 62a and 62b.
C. Noise Shaper.
The final stage of the interpolator, noise shaper block 802 (Figs. 51, 52), takes the multi-bit signal output from the third interpolator stage, interpolator 3 block 816 (Fig. 52), and converts it to a 1-bit signal while shaping the quantization noise according to a high-pass function. The block diagram implementation for the shaper 802, which is a preferably fifth order shaper, is shown in Fig. 63. The 1-bit output signal 842 is also input to integrators 822. Integrator 822 inputs must have suitable scaling factors, kl-5, to make the loop stable for a predetermined range of input amplitudes, as determined by the remainder of the digital path shown in Fig. 63. The simple additive noise model shown in Fig. 63 is used to represent the quantizer.
Two transfer functions are defined for this circuit: a signal
Transfer Function (STF) Y/X, where X is the digital audio input signal 840 (Fig. 52), and a noise Transfer Function (NTF) Y/E, where E is the quantization noise (modeled as additive, white, uniformly distributed noise). Once the NTF is fixed, the STF is also determined. Since the system is not a FIR filter, the response is no longer strictly phase-linear.
The phase variation in the passband, however, is very small, on the order of about 0.05 degrees, and the magnitude variation can easily be compensated in Interp. 1 810, 812 block.
A signal flow graph (SFG) for noise shaper block 802 is shown in Fig. 64. The transfer functions are developed as follows:
Forward Path Gains:
The cumulative gains of all possible direct paths from input to output:
For X:
Figure imgf000137_0002
For E:
T1 = 1
Loop Gains:
The gains of all closed loops.
Figure imgf000137_0001
Figure imgf000138_0001
Non-touching Loops:
The products of the gains of sets of loops without any common nodes are calculated. First, pairs of non-touching loops have to be identified. Then, triplets are found, then sets of 4, etc. In the preferred embodiment, only pairs of non-touching loops exist.
Figure imgf000138_0002
Determinant:
This is defined in terms of the loop gains as
Δ = 1 - Σ loop gains + Σ gains of pairs of NTL - Σ gains of triplets of NTL+ ...
NTL = non - touching loops
In the preferred embodiment, there are no triplets of non-touching loops, so
Figure imgf000138_0003
Sub-determinants:
Δk = Δ setting to zero gains of loops touching forward path k
For X:
All loops are touched by T1, so
Δ1 = 1
For E:
Figure imgf000138_0004
The transfer functions can then be constructed for X and E using Mason's rule, where
Figure imgf000139_0003
The transfer functions have the form:
Figure imgf000139_0004
Figure imgf000139_0005
for noise, and
Figure imgf000139_0001
for the signal, where
Figure imgf000139_0006
Where, referring to Fig. 63,
Figure imgf000139_0002
The coefficients are chosen to match a Chebyshev function, which yields equiripple quantization noise in the passband and a flat stopband. The values for Ai and the Bi are obtained from the Ci and Wi in the above equations by matching the noise TF to the desired shaping function.
Preferably, a function is chosen for the NTF which has zeros equally spaced inside the noise stopband (i.e., the signal band), and a flat high-frequency response. For the preferred embodiment, the stopband edge, the stopband attenuation and the filter order must be determined. Since the stopband attenuation is preferably at least 90 dB and the stopband edge is about 6 KHz for an input sampling rate of 8 KHz, or equivalently, about 36 KHz at the maximum sampling rate of 48 KHz, the filter order preferred is five. That is, the noise stop band for noise shaper 802 extends to at least 0.70 fs, and preferably to about 0.75 fs which is about 0.25 fs past the signal band. This allows the design requirements for the semi-digital filter to be less stringent.
First, the continuous time zeros and poles are obtained, where the zeros are given by:
Figure imgf000140_0001
and the poles by:
Figure imgf000140_0002
where N = 5, m ranges from 0 to 4, ωr = stopband edge = 2π . 36000, and ∈1 is related to the attenuation G given in dB by:
Figure imgf000141_0002
The pole-zero diagram in the s-plane is shown in Fig. 65. A plot of the frequency response out to 300 KHz is shown in Fig. 66. Next, the discrete zeros and poles are obtained using the bilinear transformation:
Figure imgf000141_0001
Figure imgf000141_0003
Figure imgf000141_0004
where T = 1/fs, and fs = 64 × 48 KHz = 3.072 MHz. This is the highest sampling rate at which the noise shaper 802 will operate, and corresponds to an oversampling factor of 64 times the highest sampling rate for the input signal. It should be understood, however, that the noise shaper will be operated at other (lower) sampling rates. Solving these equations yields:
Figure imgf000142_0003
Figure imgf000142_0004
Fig. 67 gives the pole-zero diagram in the z-plane for noise shaper 802.
Figure imgf000142_0001
K is the gain of the NTF at f = fs/2 (or z = -1) and is an important parameter for stability. The preferred frequency response of the discrete filter for noise shaper 802 is shown in Fig. 68.
The numerator in the transfer function of the selected structure must be matched to the discrete filter. The nature of the zeros that can be realized with it are found by equating the numerator of the noise NTF to zero, producing:
Figure imgf000142_0002
One root of this equation is z1 = 1; the others are obtained from
Figure imgf000142_0005
C1, C2 are not independent because they are related to B1, B2 as specified by the NTF equation, previously described. The solution yields the other 4 roots as follows:
Figure imgf000143_0003
The structure shown in Figs. 63 and 64 allows one zero at DC (z = 1) and two pairs of complex zeros, both of which have real parts equal to 1. This means they cannot be on the unit circle. However, if their angles are small enough, they will still provide enough attenuation. To actually be able to have zeros on the unit circle, more feedback loops (i.e., more coefficients) must be used.
B1, B2 are selected so that preferably the zeros have the same angles as those required by the ideal transfer function. This is shown in Fig. 69, where the angles are exaggerated.
B1, B2 are then selected to be negative, in which case the angle, α, of the respective zero is:
Figure imgf000143_0001
Figure imgf000143_0002
The values of B1, B2 also depend on the values of K2 and K4. In general, the scaling coefficients k, shown in Fig. 63 as k1-k5, should be adjusted so noise shaper 802 is stable for the desired range of amplitudes for the input signals. Preferably, this is accomplished with the following criteria in mind:
● The scaling coefficients, k, are equal for the 2nd and 4th integrators 822a (Fig. 63) and also for the third and fifth integrators 822b. This permits re-utilization of one hardware block 830 containing two integrators 822 and associated adders 848 without having to change scaling coefficients, k. Hardware block 830 is enclosed inside the dotted line in Fig. 63.
● The scaling coefficients, k, are only negative powers of two, so only hardwired shifts are used, without multiplication.
● The scaling coefficients, k, equalize the signal range at the integrator 822 outputs so the required word width is uniform throughout the structure.
● The scaling coefficients, k, set the stability range to be compatible with the desired input signal levels.
The scaling coefficients obtained for an input signal range of +/- 0.25 dB preferably, are:
Figure imgf000144_0002
The feedback coefficient values B1 and B2, for positioning the zeros, are obtained using these scaling factors and preferably are:
B1 = -0.039326867 (quantized to 1/32(1 + 1/4) = 0.0390625) B2 = -0.0149988 (quantized to 1/64(1-1/32) = 0.01513671875) The coefficients for denominator D in the NTF equation, HE(z), above, are obtained by matching the terms in equal powers of z in the equation:
Figure imgf000144_0001
with the denominator D of the discrete filter to obtain the Wi values, shown above, and then, working through the equations given, together with the values of B1 and B2. In this embodiment, for Fig. 63, a unique solution exists. The preferred feedback coefficients A1-A5, for positioning the poles, are:
Figure imgf000145_0001
These feedback coefficients can be quantized to 10 bits, before the STF begins to be affected inside the signal band, where:
Figure imgf000145_0002
The actual NTF magnitude is compared in Fig. 70 with the magnitude of a NTF obtained placing all the zeros at DC (z = 1). It can be seen that the noise power in the signal band is about 16.3 dB less in the selected structure, using Chebyshev zeros, than it is in the simpler one with all zeros at DC.
1. Signal Transfer Function (STF) For Noise Shaper.
Once the feedback coefficients, A; B; shown in Fig. 63 have been determined, the STF for noise shaper 802 is fixed. If the oversampling ratio is large enough, the STF will have little effect inside the signal band.
Otherwise, the poles can be tweaked to some extent, but this is not desirable, because stability may be compromised. A better embodiment is to compensate for any distortion in the first interpolation filter Interp. 1 blocks 810, 812. The magnitude of the STF and the NTF is shown in Fig.
71 over the entire frequency range. The preferred STF response in the passband appears in more detail in Fig. 72. The group delay inside the passband is shown in Fig. 73.
The passband tilt is significant enough to violate the preferred +/- 0.1 dB ripple requirement for the entire playback path, and must be compensated. With regard to group delay distortion, however, it is still acceptable.
The difference between maximum and minimum group delay values is about 21.95 ns. The phase deviation from linear at 3.6 KHz with fs = 8 KHz is equal to:
Figure imgf000146_0001
Figure imgf000146_0002
2. Noise Transfer Function (NTF) for Noise Shaper. The linearized analysis employed to obtain the transfer functions discussed above cannot predict the effects of signal level on stability when the quantizer is overloaded and the additive noise model fails. However, it is known that stability is directly related to the maximum value of NTF. A value close to 2 is the limit of stable operation. In the preferred embodiment, the maximum value for the NTF is obtained for f = fs/2 (z
= -1), where the parameters of the NTF are interrelated:
● For a fixed stopband width, higher noise attenuations result in higher values of noise gain K at f = fs/2.
● For a fixed noise attenuation, higher stopband widths also result in higher values of noise gain.
A fixed value of noise gain K at fs/2 can be obtained for any value of noise attenuation G provided the bandwidth is correct, or vice versa. A plot of constant noise gain contours is shown in Fig. 74.
In the preferred embodiment, a noise gain of 1.7 is used which results in stability and near maximum input amplitude, Amax. A noise gain,
K = 1.85 and higher appears to be unstable. This indicates that the transition from stability (K = 1.7) to instability (K = 1.85) is rather abrupt. The maximum input amplitude, Amax, that the circuit can tolerate before going unstable is directly related to the noise gain value. For example, all loop configurations that followed the contour for K = 1.8 have a value of Amax = 0.2, while those that fall on the K = 1.71 contour have a value Amax = .4. The arrow in Fig. 74 shows the direction from stability to instability in the G-B space. Amax does not increase indefinitely as K decreases. It actually peaks around K = 1.71. This is determined in part by the values of the integrator gains (Fig. 75).
If the bandwidth remains constant and the noise attenuation G is varied, Amax vs. K is shown in Fig. 75 for a bandwidth of 20 KHz. If the noise attenuation G remains constant and the bandwidth varies, a plot as in Fig. 76 results. This was obtained for G = 90 dB. The stability limit of K = 1.8 is reached with about 40 KHz bandwidth.
For a bandwidth at about 36 KHz, the noise gain value K, is about 1.707 which also coincides with the peak Amax = 0.4. To ensure stable operation, the maximum amplitude into the loop is preferably kept at about 0.25.
The implementation for the digital sigma-delta modulator which makes up the noise shaper is as follows:
Referring to Fig. 121, the noise shaper filter block 2010 performs a sigma-delta conversion to convert a multi-bit digital input signal 2012, preferably 25 bits wide and at a frequency of 64 × Fs, to a 1-bit digital output signal 2014. This quantization to a 1-bit output signal introduces noise in the signal, which is shaped according to a high pass signal transfer function given by: , where
Figure imgf000147_0002
Figure imgf000147_0003
where Wk is given by:
Figure imgf000147_0004
with
Figure imgf000147_0005
Figure imgf000147_0001
Figure imgf000148_0001
0.125
The noise shaper filter 2010 has a noise transfer function given by:
Figure imgf000148_0002
where E(Z) is the digital noise input signal. The coefficients C1, C2, C3, C4, C5 are given in Table C19.
The noise shaper block 2010, shown in Fig. 121, includes a total of twelve 23-bit addition operations, two multiplication operations, and five scaling operations in between the five integration stages I1-I5. The twelve addition operations are performed by adders a1-a12. The two multiplication operations are performed by multipliers 2016 and 2018. The five scaling operations are indicated by the fractional factors identified in Fig. 121 (i.e. 1/8, 1/2, 1/4, 1/2 and 1/4). Scaling is performed by a bit shifting operation. The clock signal used to control the data path implementing noise shaper block of Fig. 122, 2010 is set to a rate of 256 times the sample frequency (256 Fs). The coefficients C1 - C5, which implement the poles for the above-mentioned transfer functions, have been quantized to 10 bits without adversely effecting the transfer function in the signal band. The noise shaper block 2010 implementation has coefficients C1-C5 which are multiplied by the quantized output 2014 of quantizer 2020, which has a value of either + 1 or -1. The coefficients C6 and C7, implementing the transfer function zeroes, have been reduced to two terms, each term being a power of two. The values for coefficients C1-7 are shown in Table C19.
Figure imgf000148_0003
Figure imgf000149_0001
The noise shaper block 2010 output signal 2014 occurs once every four 256Fs clock cycles, or at a rate of 64 times the sample frequency (64 Fs). The data input and output rates are at 64Fs. The fixed bit width through noise shaper block 2010, with data normalized in a prior interpolation filter, is 23 bits, where 3 bits are integer and 19 are fractional. An implementation of noise shaper block 2010 in Fig. 121 which utilizes fewer adders to save hardware and increase efficiency is illustrated schematically in Fig. 122. The embodiment of the digital sigma-delta modulator, noise shaper circuit 2050, as shown in Fig. 122, is an implementation of the functional sigma-delta modulator noise shaper block 2010, illustrated in Fig. 121, with the amount of hardware minimized to reduce the number of adders required. Thus, the embodiment shown in Fig. 122 utilizes the adders illustrated therein such that the five stages of integration shown in Fig. 121 are performed by the embodiment shown in Fig. 122, using a lesser number of adders, by multiplexing the adders in Fig. 122 so each multiplexed adder in Fig. 122 may perform more than one integration stage operation per single-bit output. In Fig. 121, each adder associated with each of the five integration stages performs only one operation per output. Thus, the embodiment shown in Fig. 122 is a much more efficient and less expensive design.
The multiplexers in Fig. 122 which control certain adders, (i.e. mux 3 which controls adder 1, mux 4 which controls adder 4, mux 6 which controls adder 2, mux 2 which controls adder 5 and mux 1 which controls adder 1) are selecting devices which may be implemented by the multiplexers shown in Fig. 122, or by any other device which selects a digital output signal from among a plurality of digital input signals.
The scaling factors illustrated in Fig. 121 after adders a1, a4, a6, a9, and all, which are powers of two, are implemented in bit shift operations. In Fig. 121, the addition operations of adder a6, the scaling operation of 1/4 between adders a6 and a7, and the addition operation of adder a7 are performed by adderl and adder2 along with shifter3 in Fig 122. The input sh3 to shifter3 in Fig. 122, which is generated in a control circuit, not shown, shifts the output of adderl by 2-2 or 2-3, as needed during the calculations.
In Fig. 121, the two addition operations performed on adders all and a12 with a scaling of 1/4 in-between are performed by adderl and adder2 in the Fig. 122 embodiment during a first clock cycle. In Fig. 121, the addition operations of adder a4, the scaling of 1/2 between adders a4 and a5, and the addition operation of adder a5 are performed by adder4 and adder5 in Fig. 122, along with the fixed shift of 2-2 after adder4 in Fig 122. In Fig. 121, the two addition operations, performed on adders a9 and a10, along with a scaling of 1/2, are performed by adder4 and adder5 in the Fig. 122 embodiment during a different clock cycle. That is, a different clock cycle than the operations of a4 and a5 of Fig. 121, which as previously described, are also performed on adder4 and adder5 of Fig. 122.
In Fig. 121, the addition operation of adder al, the scaling of 1/8 between adders al and a2, and the addition operation of adder a2 are performed by adderl and adder2 and shifter3 in Fig. 122. The control input sh3 causes shifter3 to multiply the output of adderl by 2-3. In Fig. 121, the addition performed by adder a3 is accomplished as illustrated in Fig. 122 by the "1" input of mux3 being held equal to zero by mux3_sel being set equal to 1 and by register r8 being cleared. In Fig. 121, the addition operation performed by adder a8 is performed by adder4 and adder5 in Fig. 122. Since the calculation performed by adder a8 in Fig. 121 is the sum of two terms, one input to adder4 in Fig. 122 is held equal to zero by register r11 being cleared using input r11_clr and by adding the output of adder4 to the output from mux2 in adder5.
The feedback coefficients C6 and C7 in Fig. 121 are performed by shifterl, adder3, and shifter2 in Fig. 122. These two feedback coefficients are quantized to a shifted sum of two terms as shown in Table C19. A sequence of four 64Fs clocks are used to generate the output of noise shaper circuit 2050. At different clock cycles during the sequence, the value in integrators I3 and I5 of Fig. 121 are provided to register r3 of Fig. 122. The input c6_7 is used to cause shifterl to shift the data in register r3 by a factor of 2-3 or by 2-2 as needed for implementing C6 and C7, respectively. Registers r1-r8 in Fig. 122 are used to hold the values of the integration stages I1, I2, I3, I4, and I5 in Fig. 121 along with the output of adders a3 and a9. The values are clocked continuously at 256 Fs through the eight registers in Fig. 122 to make the data available to the adders at the proper time.
The feedback terms implementing the zeroes of the transfer equation are created by multiplying the output of integrator I3, in Fig. 121 by coefficient C6 and adding the product to the input of integrator I2. Similarly, the output of integrator I5 is "multiplied" by coefficient C7 and added into the input of integrator I4. At different clock cycles during the sequence of four 64 Fs clocks, the output of integrators I3 and I5 of Fig. 121 are provided to register r3 of Fig. 122. The multiplication of feedback filter coefficient C6 by the output of integrator I3 as well as the multiplication of feedback filter coefficient C7 by the output of integrator
I5 is accomplished using shifterl and shifter2 in Fig. 122. The control input C6_7 is used to control shifters 1 and 2 to implement coefficient C6 and C7 at the appropriate time. Shifter 1 is switched between a scaling factor operation of -2-3 and 2-2 for C6 and C7, respectively. Shifter 2 is switched between a scaling factor operation of 25 and 27 for C6 and C7, respectively. The product of C6 and integrator I3 is held in register r11, in Fig. 122, and then used by adder4. Then, the product of C7 and integrator I5 is held in register r11.
The sequence of four clock cycles and operations performed therein, wherein each clock cycle is at a rate of 64 Fs, is provided in Table C20.
Figure imgf000151_0001
Figure imgf000152_0001
In the prior art, U.S. Pat. No. 5,196,850 for a "Fourth Order Digital Delta-Sigma Modulator", assigned to Crystal Semiconductor of Austin, TX, describes the use of a single adder with a bank of serially connected registers, typically four, to implement a sigma-delta modulator comprised of a series of cascaded integrators. As disclosed therein, the output of the integrators must be summed to form the output of the digital sigma delta. In the present invention, the digital sigma-delta modulator, which utilizes the architecture shown in Fig. 121, uses two sets of adders where each set is comprised of two adders to implement the calculations for the integrator stages, five in the preferred embodiment, as well as the summation of the quantized output multiplied by the coefficients and the output of the integrator stages. The calculations for calculating the 1-bit output are shown in Table C20. The calculations shown by the circuit of Fig. 121 have been allocated to one of the four clock cycles available to calculate each output value. In Table C20, n represents the current sequence of four clock cycles which generate one quantized output 14 shown in Fig. 121. Q(n) is the 1-bit quantized output signal 14 representing the polarity of the output 2022 of integrator I5 during sequence n. Ix represents the value for each of the five integrators I1 - I5 of Fig. 121, where x = 1 - 5.
Describing the Operations of Table C20 For Each Clock Cycle
In cycle 0, two intermediate values are calculated with the output of adders a3 and a9, in Fig. 121. The output of adder a3 is the sum of the current interpolator I1 output and the coefficient C4 "multiplied" by the 1-bit quantized output 2014. The output of a3 is stored. The output of adder a8 is the sum of the current interpolator I3 output and the coefficient C2 "multiplied" by output 2014. The output of a8 is stored.
In cycle 1, the new value of interpolator I1 is calculated. The sum of output 2014 "multiplied" by coefficient C5 and the scaled input 2012 is then scaled by 1/8. This sum is added to the previous value of interpolator I1. This new value of I1 is stored. Also, the product of interpolator I5 and coefficient C7 is stored.
In cycle 2, the new value of interpolator I5 is calculated. The output
2014 is "multiplied" by coefficient Cl and added to the previous value of interpolator I4. This sum is then scaled by 1/4 and added to the previous value of interpolator I5. This new value of I5 is stored. Also in cycle 2, the new value of interpolator I4 is calculated. The output of adder a8 previously stored in cycle 0 is added to the product of output 2014 and coefficient C7 previously stored in cycle 1. This sum is then scaled by 1/2 and added to the previous value of interpolator I4. This new value of I4 is stored. Also in cycle 2, the product of interpolator I3 and coefficient C6 is stored.
In cycle 3, the new value of interpolator I3 is calculated. The output
2014 is "multiplied" by coefficient C3 and added to the previous value of interpolator I2. This sum is then scaled by 1/4 and added to the previous value of interpolator I3. This new value of I3 is stored. Also in cycle 3, the new output of interpolator I2 is calculated. First, the output of adder a3, previously stored in cycle 0, is added to the product of interpolator I3 and coefficient C6. This sum is scaled by 1/2 and added to the previous value of integrator I2. This new value of integrator I2 is stored. This sequence of four cycles is repeated.
The calculations made in each of the four clock cycles of the sequence of operation by noise shaper circuit 2050 of Fig. 122 are shown in Table C21. Table C21 depicts the data transfers made on each clock cycle for noise shaper circuit 2050. Control signals, utilized by noise shaper circuit 2050 are generated external to Fig. 122 include: multiplexer control signals, an input to toggle shifters 1 and 2 to select between coefficient inputs C6 and C7, an input to shifters 1 and 2, an input to shifter 3, and clear signals for registers r11 and r8. Shifter 3 is used to implement the scaling factor of 1/8 prior to integrator 1 (I1) and the scaling factor of 1/4 prior to I3 and I5, in Fig. 121. To scale by a factor of
1/4, shifter 3 shifts the multi-bit digital signal by two bit places. To shift by a factor of 1/8, shifter 3 shifts the bit stream by three bit places. Registers r1 - r8 are clocked continuously with the 256Fs clock. The quantized output bit signal 2030 in Fig. 122 takes on a value of one if the output signal 2022 (Fig. 121) of I5 is less than zero, and zero if I5 output signal 2022 is greater than or equal to zero. Thus, output bit signal 2030 represents the sign of the quantized output signal 2014 of the noise shaper block 2010 of Fig. 121.
In Fig. 122, two groups of serially configured data registers are shown. Registers r5-r8 are one group of serially configured data registers used to store data values which represent the output of adder a8, the value of 12 and 14 of Fig. 121. The output of adder 5 is provided to the first data register in the serial configuration, r5. The last data register, r8 in that group of serially configured data registers is provided to mux 3 and mux 2 as an input. The other group of serially configured data registers includes registers r1-r4. This group of serially configured data registers is used to store data values for the output of adder a3, and the value of integrators I1, 13 and 15 of Fig. 121. The first data register in this group, r1, receives an input from the output of adder 2. The last data register in this group, r4 provides its output to mux 6 as an input. In each of the two groups of serially configured data registers described, there are two intermediate data registers. In the first group, these are r6 and r7. In the second group, these are r2 and r3. In the first group, the output of r6 is provided to mux 4 as an input. In the second group, the output of r3 is provided to mux 6 and mux 5 as an input and to shifter 1 and adder 3 as an input.
The coefficient decode (coef. decode) block 2032, which is a RAM, ROM, or other memory storage device, in Fig. 122, receives a control signal 2038 from an external control circuit, not shown, to select coefficients C1, C3, C4, or C5 for output from coef. decode block 2032 to be input to adder 1. Coef. decode block 2032 performs a one's complement on the selected coefficient to implement the multiplication of Cx * (-1) if the 1-bit output 2014 in Fig. 121, or Q(n), equals 1. The Q(n) value in
Fig. 121, is output from mux 1 output signal 2034 as the output of register r9 or r10 in Fig. 122, depending on the clock cycle number. The purpose of mux 1 is to cause its output 2034 to equal the quantized output, Qn, of integrator 5. Since the new value of integrator 5 I5n+1 is calculated while the current quantized output Qn is still needed, both are kept in registers r9 and r10. In Fig. 122, the input r9_10_ck from a control circuit latches the sign bit of adder2 during cycle 3 into register r9 as Qn+1. During this same cycle, the current Qn in register r9 is latched into register r10.
As shown in Table C20, during clock cycles 0-2, the mux select control signal for mux 1 is set to zero, which allows the output of r9 to be provided as mux 1 output signal 34. During clock cycle 3, the mux select control signal for mux 1 is set to 1, which causes the output of r10 to be provided as mux 1 output signal 2034. Mux 1 output signal 2034 is used as the carry-in (cin) 36 to adder 1 to complete the two's complement for the selected coefficient C1, C2, C3 or C5.
Many operations in Table C21 are performed to allow the common hardware implemented in the noise shaper circuit 2050 of Fig. 122 to perform the integration, multiplication and addition functions of the noise shaper block 2010 of Fig. 121. For example, in cycle 0 of Table C21, coefficient C4 from Fig. 121 is prescaled by a multiplication by 4 and then stored as C4 * 4 in Fig. 122 and then scaled by 1/4 by shifter 3 in Fig. 122. This operation is performed to reduce the number of shifts needed by shifter 3 to two so shifter 3 can scale the signal by a factor of 1/4 or 1/8 depending on whether integration stage I1, I3 or I5 from Fig. 121 is being performed by the implementation in Fig. 122, as previously discussed.
Also, in cycle 0, the value in register rl is multiplied by a factor of two prior to the r1 output signal 40 entering mux 5, to compensate for a fixed multiplication factor of 1/2 performed on the adder a4 output signal 2042. In this manner, all five stages of integration (I1-I5) shown in Fig. 121 are accomplished by the hardware implementation shown in Fig. 122.
In cycle 0, the output of Fig. 122 adder2 and adder5 are the output of Fig 121. adder a3 and adder a8, respectively. The sum of Fig 122. adder2 results from the input c4 selecting coefficient C4*4 from the coef decode block 2032. The coefficient C4 is stored as C4*4 to allow for a common factor of 1/4, implemented by shifter 3, with other calculations. The output of mux 3 is zero from register r8, which is cleared with r8_clr. The output of adderl is equal to Qn*C4*4. Input sh3 = 0 causes shifter 3 to shift this value by 2 for a factor of 1/4 resulting in Qn*C4. The output of integrator 1 I1 of Fig. 121 is in register r3. The input mux6_sel = 1 and the output of Fig. 122 adder2 is the output of a3 of Fig. 121, which is equal to I1n * C4 * Qn. This value is then stored in register rl. Also during cycle 0 the sum of Fig. 122 adder5 results from the mux5_sel=0, mux4_sel=1, r11_clr = 1 which causes the output of Fig. 122 adder4 to equal the value in register rl which is currently the output of integrator 1 I3n in Fig. 121. The output of adder4 is reduced by 1/2 and added to Qn*C2 from mux2_sel =0. The output of Fig. 122 adder5 is the output of Fig. 121 a8. This value is then stored in register r5.
In cycle 1, the output of Fig. 122 adder2 is the new output of Fig.
121 integrator 1 I1n+1. The input c5 and mux1_sel=0 selects the coef decode block 2032 to output coefficient C5 or -C5 depending on Qn 2034 where it is added to the input value. The input sh3= 1 causes shifter 3 to shift the output of adderl by 3 for a factor of 1/8. The input mux6_sel=0. The output of shifter 3 is added to register r4, which contains the current output of Fig. 121 integrator 1 I1n. The output of Fig. 122 adder2 is the new output of Fig. 121 integrator 1 I1n+1. This value is then stored in register rl. Also in cycle 1, the output of Fig. 122 shifter2 is the feedback into Fig. 121 a9 from integrator 5 I5n. The input C6_7= 1 which causes the value I5n currently in Fig. 122 register r3 to be multiplied by coefficient C7 using the terms shown in Table C19. The one's compliment of C7 * I5n is stored in register r11. When this term is used in cycle 2, the two's compliment is obtained by using the input signal r11_ck as the carry in to adder4 of Fig. 122. In cycle 1, the output of Fig. 122 adder5 is not used.
In cycle 2, the output of Fig. 122 adder2 is the new output of Fig. 121 integrator 5 I5n+1. The input C1, and mux3_sel = 1 and muxl_sel=0, selects the coef decode block 2032 to output coefficient Cl or -Cl depending on Qn 2034 where it is added to the value of Fig. 121 integrator 4 I4n located in Fig. 122 register r8. The input sh3=0 causes shifter 3 to shift the output of adderl by 2 for a factor of 1/4. The input mux6_sel=0. The output of shifter 3 is added to register r4, which contains the current output of Fig. 121 integrator 5 I5n. The output of Fig. 122 adder2 is the new output of Fig. 121 integrator 5 I5n+1. This value is then stored in register rl. Also in cycle 2, the output of Fig. 122 adder5 is the new output of Fig. 121 integrator 4 I4n+1. The inputs mux4_sel=0, from r6, and mux2_sel=1, from r8, select the previously stored Fig. 121 adder a8 output from Fig. 122 register r6 to be added to the previously stored feedback into Fig. 121 a9 from Fig. 122 register r11. The output of adder4 is shifted by 1 for a factor of 1/2 and added to Fig. 121 integrator 4 I4n located in Fig. 122 register r8. This new value of Fig. 121 integrator 4 I4n+1 is then stored in register r5.
Also during cycle 2, the input C6_7 = 0 causes the Fig. 121 integrator 3 value 13. currently in Fig. 122 register r3 to be multiplied by coefficient C6 using the terms shown in Table C19. The one's compliment of C6 * I3n is stored in register r11. When this term is used in cycle 3, the two's compliment is obtained by using the input signal r11_ck as the carry in to adder4 of Fig. 122. Since a new Fig. 121 integrator 5 I5n+1 output is calculated, on the next cycle the input r9_10_ck transitions from 0 to 1 to clock the value Qn into register r10 and Qn+1 into register r9.
In cycle 3, the output of Fig. 122 adder2 is the new output of Fig.
121 integrator 3 I3n+1. The input c3 and muxl_sel= 1 selects the coef decode block 2032 to output coefficient C3 or -C3 depending on Qn 2034 where it is added to the value of Fig. 121 integrator 2 I2n located in Fig.
122 register r8. The input sh3=0 causes shifter 3 to shift the output of adderl by 2 for a factor of 1/4. The input mux6_sel=0. The output of shifter 3 is added to register r4, which contains the current output of Fig.
121 integrator 3 I3n. The output of Fig. 122 adder2 is the new output of
Fig. 121 integrator 3 I3n+1. This value is then stored in register rl.
Also in cycle 3, the output of Fig. 122 adder5 is the new output of
Fig. 121 integrator 2 I2n+1. The inputs mux4_sel=1, mux5_sel=1, mux2_sel= 1 select the previously stored Fig. 121 adder a3 output from
Fig. 122 register r3 to be added to the previously stored feedback into Fig.
121 a4 from Fig. 122 register r11. The output of adder4 is shifted by 1 for a factor of 1/2 and added to Fig. 121 integrator 2 I2n located in Fig. 122 register r8. This new value of Fig. 121 integrator 2 I2n+1 is then stored in register r5.
Figure imgf000158_0001
Figure imgf000159_0001
As can be observed from a close reading of Table C21, each operation in noise shaper block 2010 of Fig. 121 is implemented by the calculations in Table C21.
D. Playback Semi-Digital Filter (SDF).
The semi-digital FIR filter 804, the last stage of CODEC playback DAC 514, filters the 1-bit signal 842 at 64 times the frequency of the sample rate for the 16-bit input signal 806 which is input to the Interpolator filter block 800 (Fig. 51), and converts the 1-bit signal 842 to an analog signal output signal 808. Semi-digital FIR filter 804 coefficients are preferably positive and preferably have a ratio of maximum value to minimum value of less than 40. Figure 77 shows the impulse response and Fig. 78 shows the frequency response of this semi-digital filter 804. Semi-digital FIR filter 804 performs the functions of: 1) converting the 1-bit digital signal to an analog signal; and 2) filtering out high frequency noise created by noise shaper 802. Semi-digital FIR filter 804 combines the D/A converter function with the analog low pass filter function in such a way that the high frequency noise is removed without adding substantial distortion at lower frequencies.
Semi-digital FIR filter 804 includes a shift register 850 (Fig. 79). Data taps 853 are present at the input to each successive flip-flop 852 in shift register 850. The logic state of each data tap 853 is used to control the switching of a current sink 855 which is connected to the respective data tap 853. The value of the respective current sink 855 represents a coefficient used to produce the desired impulse response for the filter. All current sinks 855 are summed together and converted to a voltage by means of an op amp 854 and resistor 856.
Shift register 850, which preferably is a 107 bit long shift register, forms a digital delay line whereby each flip flop 852 represents one unit of delay. Thus, if the input to shift register 850 is termed x(k), then the first data tap 853 would be termed x(k-1) since it has the same value as x(k) does, but is delayed by a single clock period. Likewise the next data tap 853 would be termed x(k-2) and so on. As mentioned before, each data tap 853 controls an individual current sink 855. Thus, the total current, IOUT 857, is equal to the scaled sum of each of the current sources 855. This can be represented with the following equation:
IOUT(k) = 10* (k) + I1* x(k-1) + 12* x(k-2) + . . . + IN* x(k-N)
The op amp 854 and resistor 856 convert the current IOUT 857 into a voltage output signal, VOUT 858. This can be represented by the following equation: VOUT = (K) = R * 10 * x(k) + R * I1 * x (k-1) + R * 12 * x (k-2) + ...+
R * IN * x (k-N)
The coefficients for semi-digital FIR filter 804 are determined by values of each of the individual currents. The value of each of the coefficients represented by the current sinks 855 is not a function of the 1-bit signal 842, which helps maintain the linearity of the structure.
In another embodiment shown in Figs. 80 and 81, two differential currents, IOUT 857 and IOUT* 859, are used. The 1-bit signal 842 output from noise shaper 802 can take on only 2 values: logic 1 and logic 0. For each bit in the shift register 850, if a logic 1 exists, the current sink 855 associated with the bit is connected to the IOUT line. If a logic 0 exists, the current sink 855 associated the bit is connected to the IOUT* line. The following is an example of a semi-digital filter having two taps. In this example there are four possibilities, as shown in table C14.
Figure imgf000161_0001
There are two things to note about the table C14. First, since there are only current sinks available and since the data taps can only take on the values of 0 or 1, currents IOUT 857 and IOUT* 859 can only take on positive values, or zero. Thus, semi-digital FIR filter 804 has a built-in
DC offset which must be removed. In the preceding example, IOUT 857 and IOUT* 859 take on values from 0 to 10+I1. Thus an inherent DC offset exists in IOUT 857 and IOUT* 859 which in this two bit example has a value of (IO+I1)/2. This DC offset in this example can be effectively removed by subtracting a fixed amount of current (IO+I1)/2, from the
IOUT 857 and IOUT* 859 lines. Once this DC offset is removed, the net effective IOUT 857 and IOUT* 859 currents are as described in table C15.
Figure imgf000161_0002
Referring to Figs. 80 and 81, two offset current sources, 880 and 882 are used to achieve reduction of the inherent DC offset. Current source lOFFSET* 880 is connected to the current summing node 884 of ampl 860. Current source lOFFSET 882 is connected to the current summing node 886 of amp2 861. The value of current sources lOFFSET* 880 and lOFFSET 882 is (10 + I1 +... + IN)/2.
For each shift register data tap combination, IOUT* 859 has the same magnitude and opposite sign as IOUT 857. As a differential structure, even ordered distortion product terms and common mode noise are reduced. The differential currents are then converted to voltages by a pair of op amps, op ampl 860 and op amp2 861, each with resistive feedback 862 and capacitor 865 as shown in Fig. 81, which results in voltage signals DACOUTA 863 and DACOUTB 864. High frequencies are removed by capacitor 865 which is in parallel with each of the resistors 862 associated with ampl 860 and amp2 861. The differential voltage DACOUTA-DACOUTB is converted to a single ended voltage output signal VOUT 858 by a conventional differential-to-single-ended converter circuit which includes resistors 872, 874, 876 and 878 and op amp3 870. The positive input to op amp3 870 is connected through resistor 878 to a reference voltage, VREF, which is preferably ground, but may be a mid-range voltage between VCC and ground.
E. Architecture for the CODEC Record ADC.
The CODEC record ADC 516 (Fig. 82) functions to preserve a high signal to distortion ratio (STD) compatible with CD quality (higher than 90 dB) audio while reducing the sampling rate of the incoming analog signal from a value of 64 × fs, to fs, where fs is the output sampling rate. The record ADC 516 performs a decimation on the oversampled audio signal such that decimation filter block 902 down-samples the 64 x over-sampled signal by 64. The decimation process, explained below, is performed in three stages within decimation filter block 902, by factors of 16, 2 and 2, respectively, to minimize decimation circuit complexity.
Referring to Figs. 82 and 83, the record ADC 516 receives as input an analog audio signal 906, which is converted by a fourth order Σ-Δ A/D 900 into a 7-bit signal 908 at a sampling rate of 64 × fs (64 × oversampling). The decimation filter block 902 receives this 7-bit input signal 908 and produces a 16-bit output signal 910 at a sampling rate fs.
The spectrum of the sampled analog input signal 906 contains components of frequencies up to fs/2 and their images centered about integer multiples of 64 × fs, where the input signal 908 is assumed to be band-limited (high frequencies filtered out) by an anti-aliasing filter of adequate attenuation located in the record path before the Σ-Δ A/D 900 (not shown). The anti-aliasing filter may be user installed or may be in
Mixer 606, or elsewhere prior to the Σ-Δ A/D 900.
The record ADC 516 output spectrum is shown in Fig. 84 out to 64 x fs/2, and a detail of the passband (in this case, 4 KHz) appears in Fig. 85. To carry out the first decimation in Decim.1 914 to fs' = 4 × fs (a decimation factor of 16), a sinc6 filter is employed. The spectrum of the output of Decim. 1 914 is shown in Fig. 86.
The next decimation stage, Decim.2916, changes the sampling rate from fs' = 4fs, to fs" = l/2fs' = 2fs. A half-band filter is used, with stopband attenuation of about 100 dB. The spectrum of the output is shown in Fig. 87. The last decimation stage Decim.3 918, is a linear phase filter which changes the sampling rate by a factor of 2, to fs" = fs. This stage consists of an equiripple FIR filter, with a passband extending to about 0.45 fs and a stopband beginning at about O.55 fs. The stopband attenuation of the Decim.3 filter 918 is greater than or equal to about 100 dB, and the passband ripple is less than +/- 0.1 dB. This guarantees that aliasing will not occur at frequencies lower than 0.45 fs.
F. Additional Description of the Processing Blocks.
1. Decim.1 Stage.
This decimator is a sinc6 integrator-comb filter, implemented as shown in Fig. 89. The registers 920 shown in Fig. 89 all have the same MSB weight, which depends on the word length of the input signal 908, the decimation factor (16) and the order of the decimator (6). This embodiment is chosen so Decim. 1 914 can correctly represent all possible input signal levels at the output signal 915, where saturation will be performed to a value approximating the full scale analog input. Truncation of LSB's can be performed using known methods. The bit lengths shown preserve about 120 dB STD. If the registers 920 are implemented as a RAM, not shown, then all will have the same length.
Each integrator 921 includes a summing node 922 and a delay block
920. The integrators 921 operate at the high rate 64 × fs. Each differentiator 924 includes a difference node 923 and a delay block 920. The differentiators 924 operate at the lower rate of 4 × fs, operating on one out of every 16 samples generated by the integrators 921. The transfer function performed by this block is:
Figure imgf000164_0001
The frequency response is shown in Fig. 90.
The response is not flat in the passband. A detail of the rolloff is shown in Fig. 91.
2. Decim.2 Stage.
The second decimator, Decim.2 916, is a half-band linear phase FIR filter. This filter has a stopband of equal size as the passband, and equal ripple in the passband and the stopband. Since the stopband ripple is very low to obtain an attenuation of about 100 dB or more, the filter is essentially flat in the passband. A special property of this filter is that every other coefficient in its impulse response is equal to zero, except the middle coefficient, which is equal to 1.
When configured as a decimate by two filter, Decim.2 916 can be embodied in two basic forms. The first is a modified "direct" form, which results in the structure shown in Fig. 92. The second is a transposed form obtained reversing the signal flow graph of the first, and is shown in Fig. 93. Referring to Fig. 93, C1-C5 are the coefficients and the coefficient for xnml is equal to one. Each multiplier 925 multiplies the same input signal sample by a respective filter coefficient C1-C5. Delay blocks 926 and summing nodes 927, 928 are connected as shown in Fig. 93. The output of each multiplier 925 for coefficients C2-C5 is provided to a summing node 927 and to a summing node 928. The output of multiplier 925 for coefficient C1 is provided to a delay block 926 and to a summing node 928, as shown.
The transposed structure in Fig. 93 has several advantages over the direct one of Fig. 92, whereby:
● A minimum number of delays
● All processing performed at the lower rate
The frequency response performed by the Decim.2 916 filter is shown in Figs. 94 and 95. Coefficients for Decim.2 filter 916 are as follows:
Figure imgf000165_0001
3. Decim.3 Stage.
This decimator, Decim.3 916, is a symmetric (linear phase) FIR filter. It is designed to have an attenuation of about 100 dB in the stopband, and a +/-0.1 dB or less ripple in the passband. It is designed as a flat passband response half-band filter followed by a compensation filter. The frequency response of the half-band Decim.3 filter 918 is shown in Figs. 97 and 98. When used as decimator, the Decim.3 filter 918 computes one sample for every two samples of input. Referring to Fig. 93, the transposed half-band structure is employed, since the entire filter operates at the lower sampling rate including the data tap updates.
The Decim.3 filter 918 has a linear phase characteristic which ensures the impulse response is symmetric, where the symmetry condition is:
Figure imgf000166_0001
Figure imgf000166_0002
(N odd) with hk being the filter coefficients. Preferably, N is odd, but N may be even with a different symmetry condition.
The symmetry condition with N odd is reflected in the structure of the Decim.3 filter 918, similar to that shown in Fig. 93. With this structure it is not possible to use block-floating point methods, as can be done with the direct form shown in Fig. 92.
The first 30 coefficients for Decim. 3 918 are listed. The response of the half-band filter is obtained by using the coefficients listed in Table
C17 and after inserting zeros in between each coefficient listed in Table
C17, similar to the format shown in Table C17, making the center coefficient equal to one.
Figure imgf000167_0001
4. Compensation Filter.
A Nyquist rate FIR compensator filter 904 (Fig. 53) is connected to the output of Decim.3 918 and is utilized to compensate for the rolloff introduced by the sinc6 decimator filter, Decim.1 914, to give a flat response, and to provide gain compensation. FIR filter 904 includes a series of multipliers 930, denoted M1-4, which multiply the compensation input signal 910, which is the signal output from Decim.3 filter 918 (Fig. 83), by a compensator filter coefficient C1-4, respectively. The product of each respective multiplier 930, P1-4, is input to a summing node 934.
The compensator audio output signal 912 (Fig. 96) is provided to format conversion block 536 (Fig. 44) and to overrange detect circuit 913 (Fig. 82) as a 16-bit signed digital audio signal. Overrange detect circuit 913 detects where the amplitude of compensator output signal 912 is with respect to full scale and sets output bits B0 and B1. These bits are utilized by the user, using known methods, to adjust the gain of the audio signal being detected. The appropriate attenuation/gain control circuit in Mixer 606 (Fig. 45) can be programmed to increase or decrease the signal amplitude, as needed.
The compensation filter 904 operates at the Nyquist rate and is also linear phase, with only 7 data taps, which means 4 coefficients are needed. The frequency response for the decimator after compensation filter 904 is shown in Fig. 99. The total frequency response for the decimator in the passband is shown in Fig. 100 (before compensation) and in Fig. 101 (after compensation).
Compensation filter 914 performs the following transfer function:
Figure imgf000168_0001
where "freq." is the normalized frequency.
The impulse response coefficients for compensation filter 914 are as follows:
Figure imgf000168_0002
V. SYNTHESIZER MODULE
A. General Overview of Synthesizer Module.
This subsection provides a general overview of the synthesizer module. Subsequent subsections discuss in more detail the various aspects of the synthesizer module introduced in this subsection. The synthesizer module is a wavetable synthesizer which can generate up to 32 high-quality audio digital signals or voices, including up to eight delay-based effects. The synthesizer module can also add tremolo and vibrato effects to any voice. This synthesizer module provides several improvements to prior art wavetable synthesizers and also provides enhanced capabilities heretofore unavailable.
Figure 102 illustrates the synthesizer module's interfaces to the local memory control module 8, the system bus interface 14 of the system control module 2, the CODEC module 4, and synthesizer DAC 512. It also shows the internal signal flow of logic contained within the synthesizer module 6.
During each frame, which is a period of approximately 22.7 microseconds, the synthesizer module 6 produces one left and one right digital output. In each frame there are 32 slots, in which a data sample (S) of each of a possible 32 voices is individually processed through the signal paths shown in Figure 102.
For each voice processed during a frame, an address generator 1000 generates an address of the next data sample (S) to be read from wavetable data 1002. The wavetable address for data sample S contains an integer and a fractional portion. The integer portion is the address for data sample, S1, and is incremented by 1 to address data sample, S2. The fractional portion indicates the distance from S1 towards S2 for interpolating the data sample, S. Based on this address, interpolation logic 1004 causes the two data samples, S1 and S2, to be read from wavetable data 1002. The wavetable data is stored in local dynamic random access memory (DRAM) and/or read only memory (ROM). From this data, the interpolation logic 1004 derives data sample, S. This interpolation process is discussed in more detail below. Wavetable data can be μ-Law compressed. In the case of μ-Law compression, S1 and S2 will be expanded before interpolation under the control of the synthesizer module's signal path, discussed below.
After each data sample S is generated, a volume generator 1012 causes the data sample to be multiplied by three volume components that add envelope, low frequency oscillator (LFO) variation, right offset, left offset and effects volume. The left and right offsets provide stereo field positioning, the effects volume is used when generating an echo effect, and LFO variation in the volume adds tremolo to the voice. An LFO generator 1021 generates the LFO variation. As is discussed in more detail below, LFO generator 1021 is also used to generate LFO variation in the wavetable addressing rate to add vibrato to a voice. LOUT 1006,
ROUT 1008, and EOUT 1010 are the outputs resulting from data sample S being multiplied by the three volume components.
LOUT 1006 and ROUT 1008 connect to left and right accumulators 1014 and 1016. If effects processing is occurring, EOUT 1010 sums into one of eight effects accumulators 1018. After all the voices in a frame are processed, the left 16-bit wide and right 16-bit wide (32-bit wide total) accumulator data is converted from a parallel format to a serial format by convertor 1019.
After conversion to a serial format, the left accumulator data and the right accumulator data can be output serially to synthesizer DAC interface circuitry 1025. Synthesizer DAC interface circuitry 1025 interfaces synthesizer DAC 5l2 to the synthesizer module 6. The interface circuitry comprises: (i) clock divider circuitry and control logic which controls the clock divider (not shown); (ii) clock generation circuitry for clocking synthesizer DAC 512 operations (not shown); and (iii) a serial to parallel convertor (not shown). See also Fig. 118. The clock divider circuitry is described in U.S. patent application Serial No.
Figure imgf000170_0001
, by
David Suggs, entitled "Hazard-Free Divider Circuit," which was filed concurrently herewith and is incorporated herein by reference.
The serial to parallel convertor in the interface circuitry 1025 converts the accumulator data to parallel format and sends this parallel data to the synthesizer DAC 512 for conversion into analog signals. Synthesizer DAC 512 preferably comprises the same circuitry as CODEC playback DAC 514. The output of synthesizer DAC 512 is provided as an analog left input to left synth DAC MUX 649 (and as an analog right input to right synth DAC MUX, not shown) in the analog mixer 606 (Fig. 45) of the CODEC module 4. The resulting analog signals may then be applied to an audio amplifier and speaker for playing the generated sound. See section IV. CODEC MODULE for more details.
Each of the effects accumulators 1018 can accumulate any, all, or none of the effects data generated during a frame. The data stored in the effects accumulators is written back as wavetable data to be read at a later time period. The effects accumulators 1018 store values for longer than one voice processing time allowing signal flow from one voice to another voice.
The left 16-bit wide and right 16-bit wide accumulator data can also be output, in serial format, through serial output line 1020 to the serial transfer control block 540 in CODEC module 4. The accumulator data can be output through the serial transfer control block 540 on line 1023 to an external serial port 798. See IV. CODEC MODULE for more details.
Test equipment, an external DAC, or a digital signal processor can be connected to external serial port 798. Serial data may also be input through external serial port 798, sent on line 1047 to the synthesizer DAC interface circuitry 1025, converted into parallel format by the serial to parallel convertor in the interface circuitry, and then sent to synthesizer
DAC 512.
The synthesizer registers 1022 contain programmed parameters governing the processing of each voice. These various registers are referred to throughout this section on the synthesizer module, but these registers are discussed in more detail below in section N. Ν. Registers. The voice parameters are programmed into the registers 1022 through register data bus 1024 by a programmed input/output (PIO) operation.
Figure 103 illustrates signal flow during voice generation and effects processing. When bit EPE of register SMSI is set to zero (SMSI[EPE]=0), the synthesizer module 6 acts as a signal generator and either generates a tone or plays back recorded data from wavetable data 1002 contained in local ROM or DRAM. Wavetable data is written into the local DRAM through a system direct memory access (DMA) transfer through DMA bus 1026. Local memory is discussed in more detail in section VI. LOCAL MEMORY CONTROL MODULE. The addressing rate of the wavetable data 1002 controls the pitch or frequency of the generated voice's output signal. Address generator 1000 controls this addressing rate, but this rate is also dependent on any LFO variation. In Figure 103, the reference FC(LFO) signifies frequency control (i.e., the wavetable addressing rate which affects a voices' pitch or frequency) which is dependent on any LFO variation. LFO variations add vibrato to a voice.
After the wavetable data 1002 is addressed and a data sample, S, is interpolated, the data sample is passed through three volume multiplying paths, as illustrated in Figure 103. As a data sample passes through any of the three volume multiplying paths, it is multiplied by three individual volume components.
The first volume component is VOL(L). (L) indicates that this volume component can be looped and ramped under register control. The second volume component, VOL(LFO), adds volume LFO variations. LFO variations in volume add a tremolo to a tone. As illustrated, after the VOL(L) and VOL(LFO) components are multiplied, the voice's signal path splits three ways into each of the three volume multiplying paths. The top two paths generate stereo right and left data outputs for the voice.
The stereo positioning of a voice can be controlled in one of two ways: (i) a single pan value can be programmed, placing the signal in one of sixteen pan positions from left to right; or (ii) separate left and right offset values, ROFF and LOFF, can be programmed to place the voice anywhere in the stereo field. ROFF and LOFF can also be used to affect the total volume output. Right and left volume outputs for this voice are then summed with all other voices' right and left outputs generated during the same frame. The accumulated right and left outputs for the frame are then output to the Synthesizer DAC 512 in CODEC module 4.
EVOL (effects volume) controls the third signal path's volume. This third signal path is for effects processing. Effects data can go to any, all, or none of the effects accumulators 1018. Each of the eight effects accumulators 1018 will sum all voice outputs assigned to it.
When bit EPE of register SMSI is set to one, the synthesizer module 6 acts as an effects processor. During this effects processing mode, the synthesizer module 6 generates delay-based effects such as echo, reverb, chorus and flange to voices. When a voice is designated for effects processing, its data is stored in one of the eight effects accumulators 1018, and then the synthesizer module 6 writes the data to wavetable data 1002. The current write address for this data is set in the Synthesizer Effects Address register. The current read address, as for all voices to be generated, is the value in the Synthesizer Address register. The difference between write and read addresses provides a delay for echo and reverb effects. The write address will always increment by one. The read address will increment by an average of one, but can have variations in time added by an LFO. These LFO variations create chorus and flange effects.
After delayed data is read, the data is multiplied by the volume components in the left and right path and this determines how much of the delayed data is heard and the stereo position of the output. The voices' signal path through EVOL to the effects accumulators 1018, is selected by setting bit AEP in register SMSI. When SMSI[AEP] is not set, synthesizer module 6 is in the voice generating mode, and the interpolated data sample S does not travel through the effects processing path before being output to the synthesizer DAC 512.
After the synthesizer module 6 writes the data samples from one of the effects accumulators 1018 to wavetable data 1002 and then later reads one of these data samples, if SMSI[AEP] is set, the data sample may then be fed back to the effects accumulators 1018. When a data sample is fed back to the effects accumulators 1018, its volume may be attenuated only by EVOL. If the data sample is fed back to the same accumulator, EVOL can be used to provide decay in the data sample's volume to create an echo effect.
B. Voice Generation.
When its in an enhanced mode (controlled by bit ENH in the Synthesizer Global Mode register), the synthesizer module 6 can generate any number of voices up to 32 at a constant 44.1 KHz sample rate. Bit DAV of register SMSI controls whether or not a particular voice will be processed. A particular voice will not be processed when bit DAV is set to one. When a voice is not processed, the synthesizer module 6 will not update any of its register values and will not request memory cycles from the local memory control module 8. Unused voices are not processed in order to save power and free up memory cycles for other local memory control memory operations.
When not in enhanced mode, a 44.1 KHz sample rate will only be maintained for up to 14 active voices. If a 15th voice is added, approximately 1.6 microseconds will be added to the sample period resulting in a sample rate of 41.2 KHz. See section VI. LOCAL MEMORY CONTROL MODULE for further explanation of frame expansion. This same process continues as each voice is added, up to a maximum of 32 voices at a sample rate of 19.4 KHz. The following equation can be used to determine the sample rate when voice generation is not in the enhanced mode:
Sample period≈ AV. 1.6 μsec
where AV is equal to the number of active voices, as controlled by the Synthesizer Active Voices register. AV can range in value from 14 to 32.
When the sample rate changes, all voice frequency control values must be adjusted to maintain the true pitch of a tone. Slower sample rates also degrade the audio quality. However, the option to have this mode enables synthesizer module 6 to be backwards compatible with Ultrasound's wavetable synthesizer. See U.S. patent application Serial No. 072,838, entitled "Wave Table Synthesizer," by Travers, et al., which is incorporated herein by reference.
C. Address Control.
Voice generation starts with the address generator 1000 addressing the wavetable data 1002 at the location programmed in the Synthesizer
Address registers. Computation of the next value stored in the Synthesizer Address registers is controlled by four-bits: ENPCM (enable pulse code modulated), LEN (loop enable), BLEN (bi-directional loop enable) and DIR (direction). ENPCM is stored in the Synthesizer Volume Control register. LEN, BLEN and DIR are stored in the Synthesizer
Address Control register. Essentially, the setting of one or a combination of these bits determines if the synthesizer module will address through a block of wavetable data and then stop, if the synthesizer module will loop through a block of data, and if the synthesizer module will address through the data in a forward or reverse direction. Figures 104a-104f illustrate six addressing control options: (i) forward single pass; (ii) reverse single pass; (iii) forward looping; (iv) reverse looping; (v) bidirectional looping; and (vi) PCM play back. As illustrated, an interrupt, if enabled, is generated each time an address boundary is crossed. Address boundaries are held in the Synthesizer Address Start and End registers.
ENPCM in the Synthesizer Volume Control register can be used to play back an arbitrarily long piece of digitally recorded sound using a small, fixed amount of memory. ENPCM allows the address control logic to cause an interrupt at an address boundary, but to continue moving the address in the same direction unaffected by the address boundary.
The standard way to play back digitally recorded sound with synthesizer module 6 is as follows:
1. Using DMA or PIO, store the first block of recorded data in local memory from address START to END1.
2. Set START and END1 as address boundaries with ENPCM= 1, LEN=0, BLEN=0 and DIR=0 and start processing the voice.
3. Using DMA or PIO, store the next block of recorded data in local memory from address END1 to END2.
4. When the voice causes an interrupt for crossing END1, change the address boundary from END1 to END2 and set LEN=1.
5. Using DMA or PIO, store the next block of recorded data in local memory from address START to END1.
6. When the voice causes an interrupt for crossing END2, change the address boundary from END2 to END1 and set LEN=0.
7. Repeat steps 3 through 6 until the recorded data has completed playing.
The above steps can be repeated for the playback of multiple digital sounds using synthesizer module 6 as a digital mixer.
The address generator 1000 also controls the write address for effects processing. When a voice is programmed for effects processing, the write address will loop between the same START and END address boundaries as the read address. The current write address will be held in the Synthesizer Effects Address register. The effective mode of looping for write addressing will be LEN=1, BLEN=0 and DIR=0 with FC=1. The mode of looping for read addressing must be set to LEN=1, BLEN=0, ENPCM=1 and DIR=0 with FC=1. The difference between the current write address held in the Synthesizer Effects Address register and the current read address held in the Synthesizer Address register will set the amount of delay of the effect. The distance between the START and END address boundaries will set the maximum delay available.
FC(LFO) controls the rate the Synthesizer Address register is incremented or decremented. FC(LFO) is made up of the components FC and FLFO. FC is a value programmed into the Synthesizer Frequency Control register. FLFO is a value which is modified by an LFO and this value is stored in the Synthesizer Frequency LFO register. FLFO will be added to FC before the address calculations are done. FLFO is a signed value, and if FLFO is negative, the pitch of the voice will decrease, while if FLFO is positive, the pitch of the voice will increase.
The table below shows how all combinations of wavetable addressing, and the internal flag BC (boundary crossed), affect the next wavetable address. BC becomes a one when (END-(ADD+FC(LFO))) is negative and DIR=0 or when ((ADD-FC(LFO))-START) is negative and DIR=1. The condition BC=1 generates an interrupt if enabled by the wavetable interrupt request (IRQ) enable in the Synthesizer Address Control register. The Next ADD column indicates the equations used to compute the next address using ADD, FC(LFO), START and END. ADD is the value contained in the Synthesizer Address registers. START and END are the address boundaries for address looping contained in the Synthesizer Start Address registers and the Synthesizer End Address registers.
Figure imgf000178_0001
Discontinuities in a voice's signal can be caused when bit ENH of register SGMI equals zero, LEN=1 and BLEN=0, if the data at the END and START addresses is not the same. The discontinuity occurs because there is no way to interpolate between data addressed by the END address and data addressed by the START address. The combination of SGMI[ENH]= 1, SACI[LEN]=1, SACI[BLEN]=0, SACI[DIR]=0 and SVCI[ENPCM]=1 enables the Synthesizer module to interpolate between END and START addressed data. This novel mode of interpolation is used during digital audio playback and effects processing. With this novel mode of interpolation, the interrupt normally generated when the END address is crossed will not be generated until the END addressed data is no longer needed for interpolation.
When SMSI[ROM]=0, the synthesizer module 6 can use 8-bit wide DRAM to obtain both 8-bit and 16-bit data samples. For voices that use 8-bit data, all the addresses in the address registers represent real address space. Real address space refers to contiguous DRAM address space. For voices that use 16-bit data, a translation is done from the addresses in the address registers to the real address space. The translation allows the synthesizer module 6 to generate addresses for 8-bit and 16-bit data in the same way, and for the local memory control module 8 to use DRAM fast page mode to access two 8-bit values to provide a 16-bit sample. Address translation is explained in section VI. LOCAL MEMORY CONTROL MODULE.
When SMSI[ROM]=1, the synthesizer module 6 can also use 16-bit wide ROM to obtain both 8-bit and 16-bit data samples. For voices that use 8-bit data, the least significant bit (LSB) of the address is kept internally to determine which byte of the 16-bit wide ROM word will be used. If the LSB=0, the lower byte of the word is used as sample data, and if the LSB= 1, the upper byte of the word is used. For voices comprising 16-bit data, the address generator 1000 directly addresses the ROM.
D. u-LAW Expansion.
To save local memory space, wavetable data can be μ-Law compressed. The synthesizer module 6 expands 8-bit μ-Law data to 16-bit linear data before the data is interpolated. The ULAW bit in the Synthesizer Mode Select register is set to one to expand the μ-Law data. μ-Law expansion is controlled by the synthesizer signal path, discussed below. The algorithm used to convert the μ-Law data to 16-bit linear data is specified by the IMA Compatibility Project. See IMA Compatibility Project, Proposal for Standardized Audio Interchange Formats, Version 2.12 (April 24, 1992), which is incorporated herein by reference.
E. Interpolation.
During voice generation, interpolation logic 1004 in the synthesizer module signal path (discussed below) fetches sample S1 from wavetable data 1002 at the address specified by the integer portion of the Synthesizer Address registers. The integer portion is then incremented by one and sample S2 is fetched from wavetable data 1002. The interpolation logic 1004 uses samples S1 and S2, along with the fraction portion of the Synthesizer Address registers (ADDfr), to obtain the interpolated sample, S. The following equation is used to derive S.
Figure imgf000179_0001
The interpolation process is a 10-bit interpolation. The 1024 divisor is needed to correctly multiply by a 10-bit fractional number. Thus, between samples S1 and S2, a possible 1023 additional data samples may be interpolated.
F. Volume Control.
Under the control of volume controller 1012 and the synthesizer module signal path (discussed below), three volume multiplying signal paths are used to add envelope, LFO variation, right offset, left offset and effects volume to each voice. See Figs. 102 and 103. The three paths are left, right, and effects. In each path, three volume components are multiplied to each voice. After the three components are calculated, they are summed and used to control the volume of the three signal paths. The three volume equations for each of the three signal paths are set forth below. The equations' terms are defined below.
Figure imgf000180_0001
The exact equation for volume multiplication is:
Figure imgf000180_0002
where O is the output data, V is the value of volume and S is the interpolated data sample value. An increment of one to V causes about 0.0235 dB of change in output O. This equation is difficult to implement directly in digital logic because of the exponential term, but a piece wise linear approximation is relatively easy to implement. The sum of each volume is a 12-bit value. The 12-bit values are split into 2 bit-fields,
V[11:8] and V[7:0]. The V[11:8] and V[7:0] bit-fields are used to provide the following volume multiplication approximation:
Figure imgf000181_0001
This equation is used three times to get a right voice output, a left voice output, and an effects output. The error introduced by the approximation, for 0≤V≤4095, ranges from 0 dB to 0.52 dB with an average of 0.34 dB. Differences in power of less than one dB are not perceptible to the human ear, so there is no perceived error if the output power is implemented by the approximation. After all the volume components are generated, they are summed for each multipling signal path volume.
The VOL(L) component of volume can be forward, reverse, or bi-directionally looped between volume boundaries, or just ramped up or down to volume boundaries. The VOL(L) component is intended to add the envelope to a voice. Computation of the next value stored in the Synthesizer Volume Level register is controlled by three bits: LEN (loop enable), BLEN (bi-directional loop enable) and DIR (direction). LEN, BLEN and DIR are stored in the Synthesizer Volume Control register. Figures 105a-105e illustrate five volume control options. If enabled, an interrupt will be generated each time a volume boundary is crossed. See Figs. 105a-105e. Volume boundaries are held in the Synthesizer Volume
Start and End registers.
The table below illustrates how all combinations of volume control, along with the UVOL (update volume) and internal flag BC (boundary crossed), affect the equation for the next volume level of VOL(L). UVOL is an internal flag that controls the rate at which VOL(L) will be modified.
Volume rate bits in the Synthesizer Volume Rate register set the rate of VOL(L) modification. UVOL will remain a zero until the voice has been processed the number of times set by the volume rate bits. When UVOL becomes a one, VOL(L) increments under the control of LEN, BLEN and DIR. BC becomes a one whenever a volume boundary is crossed. BC will generate an interrupt if enabled by Volume IRQ enable in the Synthesizer Volume Control register. The "Next VOL(L)" column indicates the equations used to compute the next volume level of VOL(L) using VOL(L), VINC (volume increment), START and END. VINC is held in the Synthesizer Volume rate register. START and END are the volume boundaries for volume looping contained in the Synthesizer Start Volume register and the Synthesizer End Volume register, respectively.
Figure imgf000182_0002
In the bit definition section of the Synthesizer Volume Rate register discussed below, the effect of volume rate bits on volume increment is defined, but for the purpose of programming the registers, the following equation best explains the rate of volume change:
Figure imgf000182_0001
In this equation, I[5:0] and R[1:0] are fields in the SVRI register. The change in volume caused by an increase of one in VOL(L) is 0.0235 dB. The base rate for updating VOL(L) is 44100 Hz. This implementation differs from that used by the Ultrasound wavetable synthesizer, but the calculation is compatible.
The present invention's method of volume increment (decrement) has the advantage of eliminating zipper noise for slower rate bit values. The Ultrasound wavetable synthesizer might generate zipper noise when it is incrementing the volume of a generated voice at a slow rate and the value of the volume increment is large. When R[1:0] = 1, 2, or 3, volume generator 1012 of the present invention divides the increment value (I[5:0]) by eight, by shifting right I[5:0] of register SVRI. This bit shifting leaves only three bit positions for I[5:0] which can be used to set volume incrementing thereby making it impossible to get an increment step greater than seven at slower rates of volume increment. Of course, the present invention can be easily modified to provide for different maximum increment steps at slower rates of volume increment. The three bits shifted out of l[5:0] are added to bit positions F[2:0] of register SVLI. The data in bit positions F[2:0] of register SVLI contain additional data that is used to represent the value of looping volume, VOL(L), with higher resolution. See section V. N. Registers.
G. LFO Volume VOL(LFO).
An LFO generator 1021 generates LFO variation (VOL(LFO)) which can be used to continuously modify a voice's volume. Continuously modifying a voice's volume creates a tremolo effect. The value of VOL(LFO) is in the Synthesizer Volume LFO register. VOL(LFO) is the final result of LFO calculations performed by LFO generator 1021. LFO generator 1021 and the LFO operations are discussed in more detail below.
H. Volume Offset/Pan ROFF, LOFF.
Volume generator 1012 controls stereo positioning of a generated voice in two ways: (i) a voice can be placed in one of sixteen pan positions; or (ii) left and right offsets can be programmed to place the voice anywhere in the stereo field. OFFEN in the Synthesizer Mode Select register controls the two different modes of stereo positioning. The table below illustrates the sixteen pan positions and the corresponding left and right offsets. It should be noted that both methods of stereo positioning can be used to place a voice in one of sixteen evenly spaced stereo positions. The values set forth in the table were derived so as to keep total power constant in all pan positions.
Figure imgf000184_0004
The equations below determine left and right offsets in order to give finer positions of Pan with constant total power. The equations are implemented by system software.
Figure imgf000184_0002
Figure imgf000184_0001
The following equation determines the attenuation resulting from a calculated offset:
Figure imgf000184_0003
PanMax+ 1 is the total number of pan positions desired. Pan is the stereo position desired between zero and PanMax.
Controlling the offsets allows the user to directly and very accurately control the stereo position. It also allows the user to turn off left and right volume outputs or control the overall volume output with a volume control which is separate from all the other volume components. Programming the left or right offset to all ones turns off the respective output since once the volume sum becomes negative, the volume multiplier will be set to maximum attenuation for that path. The user can control the overall volume of a voice by considering left and right offsets to be made up of two components. One component controls stereo position and is unique to the left or the right offsets and the other component is common to the left and right offsets and controls the overall volume of a voice. The user combines the two components in system software and programs the Synthesizer Offset registers to control both the overall volume and the stereo position.
When bit OFFEN of register SMSI=1, two registers are used to control the value of each offset. Registers SROI and SLOI contain the current values of the left offset (LOFF) and the right offset (ROFF).
Registers SROFI and SLOFI contain the final values of SROI and SLOI. The current values in SROI and SLOI are incremented or decremented by one LSB per sample frame until they reach the final values contained in registers SROFI and SLOFI. This allows a smooth offset change with only one write. A smooth offset change prevents the occurrance of zipper noise. An instantaneous offset change can be made by writing the same value to both the current value register and the final value register. When bit OFFEN=0, the incrementing or decrementing of the current values is disabled. This mode is used for compatibility with the Ultrasound wavetable synthesizer.
I. Effects Volume EVOL.
EVOL affects the output volume of the effects signal path. As illustrated in Figure 103, the signal path for effects is different from the signal path for voice generation. Bit [AEP] of register SMSI controls this difference. In the case of voice generation, SMSI[AEP] is zero and the effects path split comes after VOL(L) and VOL(LFO). It is important to place the effects path split after VOL(L) and VOL(LFO) because VOL(L) and VOL(LFO) add the envelope and any tremolo to the voice. Effects processing should operate on the entire voice including envelope and any tremolo. EVOL is a subtraction and therefore provides volume attenuation.
In the case of effects processing, SMSI[AEP] is one and the effects path splits after interpolation. In this mode, after the effects delay is created, EVOL can be used to adjust the signal's volume before it is fed back to the effects accumulators 1018. EVOL will not be summed with any other volume component, but will act alone to control the effects path volume.
Two registers are used to control the value EVOL. Register SEVI contains the current value of EVOL. SEVFI contains the final value of SEVI. The current value in register SEVI is incremented or decremented by one LSB per sample frame until it reaches the final value contained in register SEVFI. This allows a smooth change with only one write. A smooth change prevents the occurrence of zipper noise. An instantaneous change can be made by writing the same value to both the SEVI register and SEVFI register.
J. Voice Accumulation.
After generating the left and right outputs for a data sample of a voice, accumulation logic in the synthesizer module 6 sums the left and right outputs with any other left and right outputs already generated during the same frame. See Fig. 118. The left and right outputs are accumulated in left and right accumulators 1014 and 1016. The synthesizer module 6 continues this process until it has summed all the outputs of voices processed during the frame. The sums in the left and right accumulators 1014 and 1016 are then sent to the Synthesizer DAC 512 in the CODEC module 4 to be converted into analog right and left outputs, and for possible mixing functions. See section TV. CODEC MODULE. Voice accumulation logic guarantees that when the sum exceeds a maximum value it will clip instead of rolling over and changing sign.
K. Effects Accumulation.
During delay-based effects processing, a voice can be directed to any, all or none of the eight effects accumulators 1018. The Synthesizer Effects Output Accumulator Select register controls this process. During effects processing, one of the eight effects accumulators 1018 is linked to a voice. The table below illustrates which effects accumulators are linked to which effects voices and how to direct a voice's effects path to an effects accumulator. For example, if voice 12 is programmed to do effects processing, it will be linked to effects accumulator 4. Any voice can direct its effects path to be processed by voice 12 by setting its Synth Effects Output Accumulator Select register to 10 hex. This directs its effects path to effects accumulator 4.
Figure imgf000187_0001
If more than one voice is to have the same delay-based effect, each of these voices can be summed together into one of the eight effects accumulators 1018. For example, if several of the voices are piano notes, they can be summed together into the first effects accumulator so that a chorus effect can be generated to the sum. Furthermore, if two other voices are flute notes, they can be summed together in the second effects accumulator so that a reverb effect can be generated to this sum. During a frame, the local memory control module 8 permits up to eight accesses to wavetable DRAM for effects processing. Thus, in this embodiment a maximum of eight delay-based effects may be generated during a frame. As discussed above, several of the voices may be summed together into one of the eight accumulators 1018 and one of the eight possible effects may be generated for these voices summed together.
One skilled in the art will readily appreciate that, alternatively, after any of the accumulators 1018 has finished accumulating data from a voice or multiple voices, a voice can be used to write the accumulated data from the accumulator to local memory and to then clear the accumulator. Once an accumulator is cleared, it can be reused for accumulating data from another voice or multiple voices. Thus, the fact that there are eight accumulators does not necessarily limit the number of delay-based effects available during a frame to eight. The limit on the number of delay-based effects available during a frame is based on the number of accesses to local memory permitted in a given time frame.
As discussed, during a frame up to 32 voices and up to eight effects can be generated. However, since the frame is a set time period with 32 slots, there is a trade-off between the number of voices generated and the effects generated. For example, if the maximum eight effects are generated during a frame, up to 24 voices may also be generated during a frame. This trade-off between voices and effects generated should not cause unreasonable constraints on high quality sound generation.
L. Low Frequency Oscillators (LFOs).
When SGMI[GLFOE]= 1, all LFOs are enabled. Two triangular-wave LFOs are assigned to each of the 32 possible voices. One LFO is dedicated to vibrato (frequency modulation) and the other to tremolo (amplitude modulation). All parameters for the LFO generator's 1021 operations are first written to local memory by system software. Then during operation, the parameters are read and written by the LFO generator 1021. It is possible to ramp the depth of each LFO from its present value to any value within the depth range. The following is a summary of each LFO's capabilities:
Figure imgf000189_0001
Various parameters for each LFO are programmed and stored in local memory at the following address:
Figure imgf000189_0002
The base address is a 14-bit programmable register, SLFOBI. VOICE is the voice number associated with the two LFOs. V/T selects between the LFOs; vibrato is high and tremolo is low. DATA SEL is decoded as follows:
Figure imgf000189_0003
There are two values for DEPTH and TWAVE per LFO. Which values an LFO uses is controlled by the WS bit in the CONTROL word. This feature allows the LFOs to be modified during their operation. For example, while an LFO is using TWAVE[0] and DEPTH[0], a fixed copy of TWAVE[1] and DEPTH[1] can be modified without concern for the LFO overwriting the new programmed value. After the modified value is written, the WS bit in the CONTROL word can be changed to switch to the modified value.
The CONTROL bytes contain the following data:
Figure imgf000190_0001
Frames. LFO Frames, and Ramp Frames. One LFO is updated every frame. Every 64 frames is called an LFO frame (the time required to update all the LFOs). The current position for the depth of one LFO is updated every 8 frames. The depth for all the LFOs is updated every 8 LFO frames or every 5l2 (64 × 8) frames. Eight LFO frames make-up a ramp frame. Processing each LFO usually requires four accesses to local memory. However, during ramp-update cycles, an LFO requires 6 accesses. Normally the first three accesses read CONTROL, DEPTH, and TWAVE; the fourth access writes back TWAVE after the new value has been calculated. During ramp update cycles, another read cycle is required to obtain DEPTHFINAL and DEPTHINC, and another write cycle is used to store the new value of DEPTH.
Ramping. Once every ramp frame, DEPTH is compared to DEPTHFINAL● 32. If they are equal, no ramping occurs. If DEPTH is smaller, the sum DEPTH + DEPTHINC is calculated; otherwise, DEPTH is larger, and the difference DEPTH - DEPTHINC is calculated. If the sum/difference is greater/less than DEPTHFINAL● 32, then the new value written to DEPTH is DEPTHFINAL● 32; otherwise, the value written is the sum/difference. The time needed for the ramp is:
Figure imgf000191_0001
LFO Math. The creation of the final LFO value, which modifies either the frequency or the volume and is stored in the registers SFLFOI or SVLFOI, follows these steps:
Figure imgf000191_0002
Figure imgf000192_0002
TWAVEINC is added to the TWAVE every LFO frame. The magnitude of the LFO waveform is multiplied by the depth to become the final LFO. Figs. 106a and 106b are graphs of the four waveforms available. Waveform selection is controlled by programming INV and SH bits in the LFO's CONTROL bytes.
The final LFO is an 8-bit twos-complement value. The synthesizer register array stores the LFO amplitude/variation value used to modify the frequency and volume of a voice. This value is added to FC, for vibrato, and volume, for tremolo, as follows:
FC: Vibrato
Figure imgf000192_0001
If the final LFO is positive, then the sign extension is all zeros; if the final LFO is negative, then the sign extension is all ones. This provides a maximum vibrato depth of 12.4 percent (if FC is 1) and tremolo depth of 12 dB.
Each LFO will add and then subtract the same LFO amplitude/variation to a voice's frequency and volume over a set period of time. Thus, at the end of this set period of time, the voice's frequency and volume is the same as if LFO amplitude/variation was never added.
One skilled in the art will readily appreciate that low frequency waves other than low frequency triangular waves may be suitable for providing LFO variation to the frequency and amplitude of the generated voices. For example, it may be suitable to designate one of the possible 32 generated voices as a wave used solely to provide LFO variation, provided it is a low frequency wave.
M. Interrupt Handling.
Synthesizer module 6 can generate address and volume boundary interrupts for each active voice being processed. Address and volume interrupts are handled the same in terms of reporting and clearing. There are three levels of reporting for these two types of interrupts. When a boundary is crossed during voice processing, depending on the boundary, either voice specific register bit WTIRQ of register SACI or voice specific register bit VIRQ of register SVCI will indicate the type of interrupt, and either global register bit WTIRQ# or VIRQ# of register SVII will be set. Register SVII also contains the number of the voice that caused the interrupt. Bits WTIRQ# and VIRQ# are mirrored in bits LOOIRQ and VOLIRQ of register UISR in system control module 2. An interrupt service routine can read register UISR to determine the source of the interrupt. Then, when such an interrupt service routine writes a value of 8Fh to register IGIDXR (located in system control module 2) to index register SVII, this serves as acknowledgement that the interrupt has been serviced, and the contents of SVII will be latched and and the process of clearing all three levels of reporting can begin. UISR[LOOIRQ,VOLIRO] bits are cleared shortly after a write to IGIDXR with a value of 8Fh. When the voice that caused the interrupt is next processed, SACI[WTIRQ] and SVCI[VIRQ] will be cleared and all three levels of reporting are cleared.
Multiple voice interrupts can be stacked in particular registers in synthesizer module 6. If a voice reaches a boundary during processing and register SVII already contains an active interrupt, either voice specific register bit WTIRQ or VIRQ of register SVCI holds the new interrupt until the active interrupt has been cleared from register SVII. Register SVII is updated with the new interrupt during the new interrupting voice's processing.
SVII[WTIRQ#,VIRQ#] and the number of the voice that caused an interrupt can also be observed by reading register SVIRI. Reading register SVIRI does not clear any stored interrupt reporting bits. Thus, an interrupt service routine can check the interrupt reporting bits and change the boundary condition which caused the interrupt before clearing the interrupt reporting bits. If only SVII is read, it is possible to obtain multiple interrupts reported for the same boundary condition.
N. Registers.
Unless specifically noted, all RES (reserve) bits in the synthesizer module registers 1022 must be written with zeros. Reads of RES bits return indeterminate values. A read-modify-write operation of RES bits can write back the read value.
1. Direct Registers.
Synthesizer Voice Select Register (SVSR). The Synthesizer Voice Select register is used to select voice-specific indirect registers to read or write data. The Synthesizer Voice Select register can be written with 0 through 31 (Oh to lFh) to select one of 32 voices to program. Also, bit AI can be set to 1 to allow register IGIDXR to auto-increment with every write to I8DP or I16DP. AI will be held to 0 when SGMI[ENH]=0
Figure imgf000194_0001
2. Indirect Registers.
There are two types of indirect registers within synthesizer module 6: global and voice-specific. Global registers affect the operation of all voices, and voice-specific registers affect the operation of only one voice. Access to global registers is identical to access to other indirect registers. To gain access to voice-specific registers, a voice number must also be specified by writing to the Synth Voice Select register (SVSR). A read of a voice specific register is triggered by writing a read address to IGIDXR. A write to a voice's specific register is triggered by writing to the General 16-bit or 8-bit I/O data ports, I16DP and I8DP, after IGIDXR and SVSR have been written. Also, to ease the number of accesses needed to program a voice, SVSR[AI] can be set to one to allow the value in register IGIDXR to auto-increment with every write to I8DP or I16DP. These features lead to several different ways of accessing voices specific registers as set forth in the following table.
Figure imgf000195_0001
Voice-specific register values within synthesizer module 6 are contained in a dual-port RAM called the register array 1032. One side of the register array is accessible from the system bus interface 14 of system control module 2 for voice programming, and the other side is accessible by the synthesizer module's core blocks 1000, 1012, 1028 and 1032. See section V. O. Synthesizer Module Architecture.
As a voice is generated, the synthesizer module core blocks read the voice's programmed values from the register array. By the end of a voice's generation, the core blocks write back the self-modifying register values to the register array 1032. The system bus interface 14 reads of the register array must wait until the core blocks are not reading or writing to the register array. To speed the read access of the register array, the read indexes of the synthesizer module's indirect registers are different from the write indexes. This allows the read data to be prefetched. In the case of fast bus accesses, the IOCHRDY pin is used during the read of the data byte registers to hold system bus interface 14 until the register array 1032 can respond.
In the case of a system bus interface 14 write to the register array, the write must wait until: (i) the synthesizer module's core blocks are not reading or writing any voice; and (ii) the voice which is being modified by the write is not being processed by the synthesizer module 6. The second condition insures that data written by system bus interface 14 to a selfmodifying register is not changed by the core blocks' writes to the register array 1032 at the end of the voice's processing.
System bus interface 14 writes to the register array 1032 are buffered. The IOCHRDY pin is also used to hold the system bus interface
14 if the register array 1032 has not taken the buffered data before the next system bus interface write to the Index or Synthesizer Voice Select registers.
The present invention is designed such that it avoids the undesirable method in the prior art of having the system interface write data twice to a self-modifying register to avoid having that data overwritten. In comparison to this method in the prior art, the present invention is believed to be more reliable at ensuring that the data is written and at reducing the period of time that the synthesizer is reading or writing to particular self-modifying registers.
Special attention must be taken when writing to an active voice's registers. If the synthesizer module core blocks read the register array 1032 between writes of pairs of voice-specific registers, an unwanted action may be taken by the generators. Voice specific registers having pairs of registers include: Synthesizer Address Start, Synthesizer Address End, Synthesizer Address, Synthesizer Effects Address, and Synthesizer Offset.
Synthesizer registers are initialized by PCARST#. See III. System
Control Module for more discussion of PCARST#. The global registers are initialized when PCARST# is active and the register array that contains the voice-specific registers is initialized following the inactive edge of PCARST# with a 128 clock sequence. During the clock sequence, every four 16 MHz clocks, a write from the synthesizer module core blocks side of the register array 1032 will initialize every voice specific register bit of a particular voice.
URSTI[RGF1]=0 also initializes the registers SVII, SVIRI, SGMI and SLFOBI. In general, URSTI[RGF1]=0 stops all synthesizer module 6 operations. URSTI[RGF1] must equal one in order for the synthesizer module 6 to operate and to read and write registers within the synthesizer module. The synthesizer module registers are initialized to values compatible with the Ultrasound wavetable synthesizer after PCARST# has been inactive for 128 16 MHz clocks. At this point, URSTI[RGF1] will reset Ultrasound compatible functions just as occurs in the
Ultrasound wavetable synthesizer. SGMI[ENH] has been set to one and new registers and new register bits have been accessed, only another PCARST# or an initialization routine which writes registers to their default conditions can return the synthesizer module 6 to a compatible state. This condition exists because URSTI[RGF1]=0 does not initialize the voice specific registers in the register array.
3. Global Registers.
a. Synthesizer Active Voices Register (SAVI). The Synthesizer Active Voices register is only needed to remain compatible with Ultrasound's wavetable synthesizer. In an enhanced mode, controlled by setting ENH in the Synthesizer Global Mode register to one, the Synthesizer Active Voices register's outputs do not affect operation. When ENH=0, this register is used to control which voices will produce an output and affect the output sample rate. The number of active voices can range from 14 to 32. With 14 active voices, the output sample rate is 44.1 KHz or a sample period of approximately 22.7 microseconds. Each additional voice above 14 adds approximately 1.6 microseconds to the sample period. When ENH=0, the frequency control values must be adjusted to compensate for the slower output sample rates when more than 14 voices are active. The programmed value equals the number of active voices minus 1. The programmed values of this register can range from 13 (CDh) to 31 (DFh).
Figure imgf000198_0001
b. Synthesizer Voices IRQ Register (SVII).
The Synthesizer Voices IRQ register indicates which voice needs interrupt service and what type of interrupt service is needed. Indexing this register with register IGIDXR=8Fh clears the IRQ bits in the voice- specific Synthesizer Volume Control and/or Synthesizer Address Control registers which caused the interrupt and also clears VOLIRQ and
LOOIRQ in the IRQ Status register.
Figure imgf000198_0002
Figure imgf000199_0002
All bits except RES bits are self-modifying.
c. Svnth Voices IRQ Read Register (SVIRI). The synthesizer voices IRQ read register contains the same bits as the SVII register but can be read without clearing any internally stored interrupt conditions.
Figure imgf000199_0001
All bits except RES bits are self-modifying. d. Synthesizer Global Mode Register (SGMI). The Synthesizer Global Mode register controls modes of operation that affect all voices.
Figure imgf000200_0001
e. Synthesizer LFO Base Address Register (SLFOBI).
The Synthesizer LFO Base Address register holds the base address for the locations of voice LFO parameters.
Figure imgf000200_0002
Figure imgf000201_0002
4. Voice-Specific Registers.
a. Synthesizer Upper Address Register (SUAI). The Synthesizer Upper Address register contains the upper bits of the wavetable address for a voice. The upper address bits of the wavetable address are added to the Synthesizer Address Start, Synthesizer Address End and the Synthesizer Address for each voice. The upper address bits fix a voice in one of four 4 megabyte memory spaces. With the upper address bits a total of 16 megabytes of memory can be accessed by synthesizer module 6. When SGMI[ENH]=0, SUAI is held to the default value.
Figure imgf000201_0001
b. Synthesizer Address State Registers.
The Synthesizer Address Start registers' integer portion specifies a boundary address when a voice is moving through wavetable data 1022.
The Synthesizer Address Start registers' value is less than the Synthesizer
Address End registers' value. AI[21:20] have been added to allow a voice to access 4 megabytes of wavetable memory. When SGMI[ENH]=0,
AI[21:20] will be held to a 0.
(i) Synthesizer Address State High Register (SASHI).
Figure imgf000201_0003
Figure imgf000202_0001
Figure imgf000202_0002
c. Synthesizer Address End Registers.
The Synthesizer Address End registers' integer portion specifies a boundary address in wavetable data 1002. The Synthesizer Address End registers' value is greater than the Synthesizer Address Start registers' value. AI[21:20] have been added to allow a voice to access 4 megabytes of wavetable memory. When SGMI[ENH]=0, AI[21:20] will be held to a
0.
(i) Synthesizer Address End High Register (SAEHI).
Figure imgf000202_0003
Figure imgf000203_0002
Figure imgf000203_0001
d. Synthesizer Address Registers.
The Synthesizer Address registers' integer portion is the current location in the wavetable data 1002 from which the synthesizer module 6 is fetching sample data. The fractional portion is used to interpolate between the sample in the location addressed by AI[21:0] and the sample in the location addressed by AI[21:0] + 1. This register is self modifying and changes values as a voice moves through wavetable memory.
AI[21:20] have been added to allow a voice to access 4 megabytes of wavetable memory. When SGMI[ENH]=0, AI[21:20] will be held to a 0.
An additional address fraction bit, AF[0] is used in interpolation but is not normally accessible for programming. A reset and a write to SALI clears
AF[0]. AF[0] can be accessed through bit 15 of SAHI if RAMTEST=1 in the Synth Global Mode register.
(i) Synthesizer Address High Register (SAHI).
Figure imgf000203_0003
Figure imgf000204_0003
Figure imgf000204_0001
e. Synthesizer Effects Address Registers.
During effects processing, the Synthesizer Effects Address registers indicate the current address where data is being written in wavetable data
1002. The data written is from the effects accumulators 1018. The effects address is integer only, because the data is being written. Local
DRAM serves as wavetable data 1002.
(i) Synthesizer Effects Address High Register (SEAHI).
Figure imgf000204_0002
(ii) Synthesizer Effects Address Low
Register (SEALI).
Figure imgf000205_0002
f. Synthesizer Frequency Control Register (SFCI).
The Synthesizer Frequency Control register controls the rate at which address generator 1000 moves through wavetable addresses. This sets the pitch of the generated voices. The default value of decimal 1.0 represents the Synthesizer Frequency Control register value that will play back the wavetable data 1002 at the same rate as it was recorded. F0 has been added in order to increase the fractional frequency resolution to 10-bits. F0 will be held to a 0 when SGMI[ENH]=0.
Figure imgf000205_0001
g. Synthesizer Frequency LFO Register (SFLFOI).
The Synthesizer Frequency LFO register contains the value generated by the LFO generator 1021 which is used to modify the frequency of a voice. When SGMI[ENH]=0, SFLFOI is held to the default value.
Figure imgf000206_0002
h. Synthesizer Address Control Register (SACI).
The Synthesizer Address Control register controls how the synthesizer module will address the wavetable data 1002, and the data width of wavetable data.
Figure imgf000206_0001
Figure imgf000207_0001
Figure imgf000208_0004
i. Synthesizer Volume Start Register (SVSI).
Figure imgf000208_0001
j. Synthesizer Volume End (SVEI).
The Synthesizer Volume End register contains the high point of a volume ramp.
Figure imgf000208_0002
k. Synthesizer Volume Level Register (SVLI). The Synthesizer Volume register contains the current value of the looping component of volume. Volume has three fractional bits (F[2:0]) that are used for more resolution when choosing a slow rate of increment. These three bits do not affect the volume multiply until an increment causes them to rollover into the LSB of V[11:0].
Figure imgf000208_0003
Figure imgf000209_0001
1. Synthesizer Volume Rate Register (SVRI).
The Synthesizer Volume Rate register controls the rate at which the looping volume for a voice is incremented and the amount of the increment.
Figure imgf000209_0002
m. Synthesizer Volume Control Register (SVCI). The Synthesizer Volume control register controls how the looping component of a voice's volume will move from volume start to volume end. This register also contains ENPCM that controls wavetable addressing to allow a voice to continuously play blocks of pulse code modulated (PCM) data. VIRQ, DIR and STPO are self modifying bits.
Figure imgf000209_0003
Figure imgf000210_0001
Figure imgf000211_0001
n. Synthesizer Volume LFO Register (SVLFOI). The Synthesizer Volume LFO register contains a value generated by the LFO generator 1021 used to modify the volume of a voice.
Figure imgf000211_0002
o. Synthesizer Offset Registers.
The Synthesizer Offset registers control the placement of a generated voice in the stereo field. The Synthesizer Offset registers have two modes of operation depending on OFFEN in the Synthesizer Mode Select register. When OFFEN is 0, SROI[11:8] are used to control both right and left offsets. In this mode, sixteen positions of pan are available. A decimal value of 0 will place the voice full left and a value of l5 will place the voice full right. This mode is compatible with Ultrasound's wavetable synthesizer. When OFFEN is 1, SROI[15:4] and SLOI[15:4] contain the current right and left offset values that separately affect the right and left channel outputs of a voice. The final values for the right and left offsets are contained in the SROFI and SLOFI registers. During a voice's processing, the values RO[11:0] and LO[11:0] are incremented or decremented by one LSB closer to the values ROF[11:0] and LOF[11:0]. The Synthesizer Left Offset register will only affect operation when OFFEN is set.
(i) Synthesizer Right Offset Register (SROI).
Figure imgf000212_0001
(ii) Svthesizer Right Offset Final Value Register (SROFI).
Figure imgf000212_0002
Figure imgf000213_0004
(iii) Synthesizer Left Offset Register (SLOI).
Figure imgf000213_0001
(iv) Synthesizer Left Offset Final Value Register (SLOFI).
Figure imgf000213_0002
p. Synthesizer Effects Volume Register (SEVI). The Synthesizer Effects Volume register contains the current value of volume that controls the effects of a voice. During a voice's processing, the value EV[11:0] is incremented or decremented by one LSB closer to the value EVF[11:0] contained in SEVFI.
Figure imgf000213_0003
All bits except RES bits are self-modifying.
q. Synthesizer Effects Volume Final Value Register
Figure imgf000214_0001
r. Synthesizer Effects Output Accumulator Select Register (SEASI).
The Synthesizer Effects Output Accumulator Select register controls which of the effects accumulators 1018 will receive the effects output. Any, all, or none of the effects accumulators can be chosen. There are 8 effects accumulators numbered 0 to 7. When SGMI[ENH]=0, SEASI is held to the default value.
Figure imgf000214_0002
s. Synthesizer Mode Select Register (SMSI).
The Synthesizer Mode Select register controls the enabling of various features within a voice. It also controls whether a voice will go through voice generation processing, effects processing, or no processing. Programming a voice for no processing results in no accesses to the wavetable data 1002 when that voice would be processed, allowing more accesses to the local memory for other functions. When SGMI[ENH]=0, SMSI is held to the default value.
Figure imgf000215_0001
O. Synthesizer Module Architecture.
This subsection describes the architecture of the following core blocks of synthesizer module 6: address generator 1000 (Fig. 107); volume generator 1012 (Fig. 109); signal path 1028 (Fig. 116); and accumulation logic 1030 (Fig. 118). The synthesizer module also includes a synthesizer register array 1032 (see Fig. 111) and LFO generator 1021 (Fig. 115), a clocking controller (not shown), and a start generator (not shown).
1. Address Generator.
Figure 107 illustrates address generator 1000 and its connections to synthesizer register array 1032, accumulation logic 1030, local memory control module 8, LFO generator 1021, and signal path 1028. The local memory control module 8 is discussed in section VI. LOCAL MEMORY CONTROL MODULE. Address generator 1000 includes: an address generation controller 1034; a result bus 1036; a register array bus 1038; sign extend logic 1040; an adder/subtracter 1042; temporary registers 1044, 1047, and 1055; number generators 1048 and 1049; pull down transistors 1050; loadable address incrementor 1035; effects address and data FIFO buffers 1037 and 1039; address fraction buffer 1041; LFO variation register 1043; a clocking line PHI1; and a start address generation line 1045.
As illustrated, sign extend logic 1040, adder/subtracter 1042, and temporary registers 1044 are connected to both the result bus 1036 and the register array bus 1038, as well as to the address generation controller 1034. Temporary register 1047 and number generator 1048 are connected to the result bus 1036 and address generation controller 1034, while pull down transistors 1050, number generator 1049, and temporary register 1055 are connected to the register array bus 1038 and the address generation controller 1034. Loadable address incrementor 1035, effects address and data buffers 1037 and 1039, address fraction buffer 1041, and
LFO variation register 1043 are also connected to the register array bus 1038 and the address generation controller 1034.
Loadable address incrementor 1034 is also connected to synthesizer register SUAI, through line 1051, and local memory control block 8. Effects address buffer 1037 is connected to register SUAI, through line 1053, as well as to effects address and data buffer 1039. Effects address and data 1039 is connected to a register in accumulation logic 1030, to accumulation logic control line LDED, and to the local memory control block 8 through control lines LADDIN and LDATB.
Address fraction buffer 1041 also has connections to a register and control lines DRADDFR and LDBUF of signal path 1028. The address generation controller 1034 is directly connected to signal path 1028 through the Start Signal Path control line. LFO variation register 1043 has additional connections to a register and control line LDNFLFO of LFO generator 1021. LFO generator control line LFO Voice Match connects to the address generation controller 1034.
Through various control lines, discussed below, address generation controller 1034 controls all of the circuit elements of address generator 1000 connected to it. Through the Start Signal Path and LFO Voice Match control lines, address generation controller 1034 is directly connected to the signal path 1028 and LFO generator 1021 logic elements outside of the address generator 1000. The function of these other control lines is also discussed below.
Address generation controller 1034 is connected to the following synthesizer registers in register array 1032: SACI, SVCI, SGMI, SMSI,
Synth Address Start Registers, Synth Address End Registers, Synth Address Registers, Synth Effects Address Registers, SFCI and SFLFOI. The following bits of some of these synthesizer registers are connected to address generation controller 1034 through load control lines (LDCTRL): SACI[WTIEN, BLEN, LEN, STP1], SVCI[ENPCM], SGMI[ENH], and
SMSI[1,0]. These bits set the address generation controller's mode of address generation. On the other hand, the following bits of some of these registers can be modified by address generation controller 1034, through the LDCTRL lines, to set an interrupt condition, set the direction of wavetable addressing, and stop voice generation when a boundary is crossed: SACI[WTIRQ], and SACI[DIR,STPO].
The following of these synthesizer registers store specific parameters of address generation:
Figure imgf000218_0001
The address parameters stored in these registers are driven to the register array bus 1038 by load and drive register signals lines (DR REG SIGNALS, LD REG SIGNALS).
Sign extend logic 1040 is used to sign extend a signed binary number so that it can be added or subtracted to another signed binary number of different bit-size. The LDSE control line controls the loading of a signed number into sign extend logic 1040 from register array bus 1038. The DRSE line drives the sign extended number to the result bus 1036.
Adder/subtracter 1042 adds or subtracts a binary number on the register array bus 1038 with a binary number on the result bus 1036. When enabled, the INVRES and INVRA control lines cause the data loaded into adder/subtracter 1042 from the result bus 1036 and register array bus 1038 to become negative. These control lines cannot be enabled at the same time. The LDADDER line latches the result of the addition/substraction from adder/subtracter 1042, and the DRADDERRES line will drive the result to the result bus 1036 while the DRADDERRA line drives the result to the register array bus 1038. The SIGN line provides address generation controller 1034 the sign of the result.
SIGN=1 is a negative result, while SIGN=0 is a positive result. As reflected on the timing diagrams in Figs. 108a and 108b, discussed below, the value on the SIGN line indicates certain conditions. The temporary registers 1044 and 1047 are used to temporarily store data used in address generation operations. Data is loaded from the result bus 1036 to registers 1044 by the LDTEMP1 and LDTEMP2 lines, and is driven from these registers to the result bus by the DRTEMP1 and DRTEMP2 lines. Data is loaded from the result bus 1036 to register 1047 by the LDTEMP3 line, and is driven from this register to the result bus by the DRTEMP3 line.
When activated by the DR1 line, number generator 1048 drives a one to the result bus 1036, while when activated by the DRO line, a zero is driven to the result bus 1036. On the other hand, number generator
1049 drives a negative one to the register array bus 1038 when activated by the DRN1 control line.
Pull down transistors 1050 are used to drive zeros to particular bit locations in the 32-bit wide register array bus 1038. When data driven on the register array bus 1038 is not 32-bits wide, zeros are driven to the bit locations not containing data. The pull down transistors 1050 are selectively activated by the DRPD[5:0], DRPD[9:6], DRPD[15:8], DRPD[31:16] and DRPD[32] lines.
The PHI1 line supplies a clocking signal from the clocking controller (not shown) to the address generation controller 1034 for clocking its address generation operations. The start address generation line 1045 contains a start pulse from the register array 1032. This start pulse controls the start of the address generation controller 1034 operations. A start generator (not shown) generates the start pulse and sends it to the register array. A time period later the register array sends a pulse for starting the address generation controller 1034 and volume generation controller 1056 operations. See Fig. 109. Address generation controller 1034 then controls the start of the signal path's 1028 operations through the Start Signal Path control line. Next, the signal path 1028 controls the start of the accumulation logic 1034 through the Start Accumulation control line (see Fig. 116). In this manner, the sequence of all operations of syntheiszer module 6 are goverened.
Loadable address incrementor 1035 is loaded with address S1 from register array bus 1038, when activated by control line LDSA, and increments this address by one to obtain address S2 when activated by control line LDAINC. Addresses S1 and S2 are loaded into the local memory control block 8, by the LADDIN control line, for fetching data samples S1 and S2 from local memory. Line 1051 connects loadable address incrementor 1035 to the upper two address bits contained in register SUAI to increase the address field of S1 and S2 by two bits. By increasing the address field by two bits, the address generator 1000 can address a total of 16 megabytes of memory instead of 4 megabytes.
Effects address buffer 1037 is a FIFO buffer which can store up to three effects addresses. An effects address is loaded from register array 1038 into the top of buffer 1037 when control line LDEA is activated.
Line 1053 connects buffer 1037 to the upper two bits of register SUAI to increase the address field of the effects addresses by two bits.
Effects address and data buffer 1039 is also a FIFO buffer and stores up to five sets of an effects address and its associated effects data. Effects addresses are loaded into the top of the effects address and data buffer 1039 from the bottom of effects address buffer 1037, when the effects data associated with each effects address loaded in the effects address and data buffer 1039 is loaded from a register in the accumulation logic 1030 into the top of the buffer. Accumulation logic control line LDED controls the loading of the data. The effects addresses in effects data buffer 1039 are transferred from the bottom of this buffer into the local memory control block 8 when control line LADDIN is activated, while the effects data is transferred from the bottom of this buffer into the local memory control block when control line LDATIN is activated. The local memory control block 8 stores the effects data into local memory at the effects address.
The effects address and data buffers 1037 and 1039 permit eight delay-based effects to be generated consecutively. See U.S. Patent Nos. 4,805,139 and 5,095,462 by Norris, which are incorporated herein by reference, for disclosure of suitable effects address and data buffers.
An LFO variation value generated by LFO generator 1021 is transferred from a register in the LFO generator (see Fig. 115) to register 1043 when LFO generator control line LDNFLFO is activated. Data indicating which voice the LFO variation value is associated with is loaded into address generation controller 1034 by the LFO Voice Match control line. The DRNFLFO line drives the LFO variation value from register 1043 onto the register array bus 1038. The value is stored in register SFLFOI. The address generator 1000 uses the LFO variation value for adding vibrato to a voice.
The LDADDFR line controls the loading of the ADDfr value (data used during interpolation), stored in the SYNTH Address Registers, from the register array bus 1038 to buffer 1041. Signal path 1028 control line DRADDFR drives this value to the signal path. See also Fig. 117. Buffer 1041 can store up to two ADDfr values. When a particular voice is inactive, buffer 1041 will only store one ADDfr value. The LDBUF control line from signal path 1028 pushes this one value to the bottom of the buffer 1041 so that it can be driven to the signal path when the DRADDFR control line is activated.
Figs. 108a and 108b are timing diagrams for different modes of address generation operation. Fig. 108b is the timing diagram for the boundary mirror mode which occurs when bit ENH of register SGMI, bit ENPCM of register SVCI, and bit LPE of register SACI are all set to one, and bits BLEN and DIR of register SACI are set to zero. Fig. 108a is the timing diagram for all other modes of address generation. These timing diagrams set forth the operations performed by the address generator 1000 during each clock cycle, of its set of twelve clock cycles, in a particular mode. These timing diagrams are arranged in columns to indicate for each of the twelve clock cycles: (i) what data is on the result and register array buses; (ii) what, if any, arithmetic operations are being performed on the data; (iii) what other operations are being performed; and (iv) the equation for which the arithmetic operation is being performed. The "equation" and "comments" columns reflect the general operations performed by the address generator 1000 in connection with address generation. The "18s" and "34s" in the operations column indicate if the bit width of the result of the operation is an 18-bit or 34-bit signed number.
2. Volume Generator.
Figure 109 illustrates volume generator 1012, and its connections to synthesizer register array 1032, LFO generator 1021, and signal path 1028. Volume generator 1012 includes: a volume generation controller
1056; a result bus 1058; a register array bus 1060; sign extend logic 1062; an adder/subtracter 1064; bus driver logic 1066; a temporary register 1068; shift logic 1070; bus transfer logic 1072; a number generator 1074; pull down transistors 1076; a ROM 1078; right, left, and effects volume buffers 1059, 1061, and 1063; LFO variation register 1065; clocking lines
PHI1 and FR8, FR64; and a start volume generation line 1057.
As illustrated, sign extend logic 1062, adder/subtracter 1064, shift logic 1070, and bus transfer logic 1072 are connected to both the result bus 1058 and the register array bus 1060, as well as to the volume generation controller 1056. Temporary register 1068 and number generator 1074 are connected to the result bus 1058 and volume generation controller 1056, while pull down transistors 1076 and ROM 1078 are connected to register array bus 1060 and the volume generation controller. Shift logic 1070 is connected to result bus 1058 and right, left and effects volume buffers 1059, 1061, and 1063, as well as to volume generation controller 1056.
The LFO variation register 1065 is connected to the register array bus 1060 and to the volume generation controller 1056. The LFO variation register 1065 is also connected to a register and the LDNVLFO control line of LFO generator 1021. See Fig. 115. LFO generator control line LFO Voice Match connects to the volume generation controller 1056.
Besides being connected to bus driver logic 1066, right, left and effects buffers 1059, 1061 and 1063 are connected to multiplier 1102 of signal path 1028 (see Fig. 116), signal path control lines LDBUF, DRRVOL, DRLVOL, and DREVOL, and volume generation controller control lines LDRVOL, LDLVOL, and LDEVOL. Right volume buffer 1059 stores up to two right volume values, left volume buffer 1061 stores up to two left volume values, and effects volume buffer 1063 stores up to two effects volume values.
Through the various control lines, volume generation controller
1056 controls all of the circuit elements of volume generator 1012 connected to it. The function of these control lines is discussed below.
Volume generation controller 1056 is connected to the following synthesizer registers in register array 1032: SVCI, SVRI, SGMI, SMSI, SVSI, SVEI, SVRI, SVLFOI, SROI, SLOI, SEVI. The following bits of some of these synthesizer registers are connected to volume generation controller 1056 through load control lines (LDCTRL): SVRI [1:0], SGMI [ENH], SVCI [VIEN, BLEN, LEN, STP1], and SMSI [OFFEN, AEP, 0]. These bits set the volume generation controller's mode of volume generation. On the other hand, the following bits of some of these registers can be modified by volume generation controller 1056, through the LDCTRL lines, to set an interrupt condition, set the direction of the volume (increasing or decreasing), stop volume generation when a boundary is crossed, or stop volume looping: SVCIfVIRQ] and SVCI[DIR, STPO]. The following of these synthesizer registers store specific parameters of volume generation:
Figure imgf000224_0001
The volume parameters stored in these registers are driven to the register array bus 1060 by load and drive register signals lines (DR SIGNALS, LD SIGNALS).
Sign extend logic 1062 is used to sign extend a signed binary number so that it can be added or subtracted to another signed binary number of different bit-size. The LDSE control line controls the loading of a signed number into sign extend logic 1062 from register array bus 1060. The DRSE line drives the sign extended number to the result bus 1058.
Adder/subtracter 1064 adds or subtracts a binary number on the register array bus 1060 with a binary number on the result bus 1058. When enabled, INVRA and INVRES control lines respectively cause the data loaded into adder/subtracter 1064 from the register array bus 1060 and result bus 1058 to become negative. These control lines cannot be enabled at the same time. The LDADDER line latches the result of the addition/subtraction from adder/subtracter. The DRADDER line drives the result from bus driver logic 1066 on to the result bus 1058. The SIGN line provides volume generation controller 1056 the sign of the result. SIGN=1 is a negative result, while SIGN=0 is a positive result. As reflected on the timing diagram in Fig. 110, discussed below, the value on the SIGN line indicates certain conditions. The CLIP line controls the clipping of the volume value when it reaches a maximum value and a minimum value. If bit 16 of the result of the addition/subtraction is a one, then the result is less than the minimum permitted value and a zero is output from adder/subtracter 1064. If bit l5 of the result of the addition/subtraction is a one and bit 16 is a zero, then the result is more than the maximum value permitted and the binary equivalent of 32,767 is output from adder/subtracter 1064. If bits 15 and 16 are zero, then the result of the addition/subtraction is between the minimum and maximum, and the result is output from adder/subtracter 1064. The clipping of the volume value when it reaches zero ensures that result does not become negative.
The right, left and effects volumes are loaded into right, left and effects buffers 1059, 1061, and 1063, respectively, after their calculation, by control lines LDRVOL, LDLVOL, and LDEVOL. When a particular voice is inactive, buffers 1059, 1061, and 1063 will only store one value each. The LDBUF control line from signal path 1028 pushes the one value in each of the buffers 1059, 1061, and 1063 to the bottom of the buffers so that they can be driven to the signal path when signal path control lines DRRVOL, DRLVOL, and DREVOL are activated.
The temporary register 1068 is used to temporarily store data used in volume generation applications. Data is loaded from the result bus 1058 to register 1068 by the LDTEMP1 line, and is driven from the register to the result bus by the DRTEMP1 line.
Shift logic 1070 shifts data loaded into it three bits right, thereby in effect dividing the data by eight. Shift logic 1070 is used to prevent volume increment steps greater than seven at slower rates of volume increment. The LDSHFT and DRSHFT lines respectively load and drive data to and from shift logic 1070. The DIN8 line enables the bit shifting.
When enabled, bus transfer logic 1072 transfers data from the result bus 1058 to the register array bus 1060. This bus transfer is enabled by the DRXFER line.
When activated by the DR0 line, number generator 1074 drives a zero to the result bus 1058.
Pull down transistors 1076 serve the same purpose as pull down transistors 1050 in the address generator 1000. Pull down transistors 1076 are selectively activated by the DRPD0200, DRPD0603, DRPD08, and DRPD1409 lines.
Dynamic ROM 1078 stores left offset and right offset values for placing a voice in one of sixteen evenly spaced stereo positions. The LDPAN line loads into ROM 1078 4-bits of data from SROI [11:8] which represent the desired pan position. The DROFF line drives 2 × 12-bits of data, representing a left offset or right offset value, from ROM 1078 to the register array bus 1060. The INVPAN line controls whether ROM 1078 outputs a left offset value or a right offset value. The EVAL control line evaluates the ROM with the present data inputs.
As LFO variation value generated by LFO generator 1021 is transferred from a register in the LFO generator (see Fig. 115) to register
1065 when LFO generator control line LDNVLFO is activated. Data indicating which voice the LFO variation value is associated with is loaded into volume generation controller 1056 by the LFO Voice Match control line. The DRNVLFO line drives the LFO variation value from register 1065 onto register array bus 1060. This value is stored in register
SVLFOI. The volume generator 1012 uses the LFO variation value for adding tremolo to a voice. The PHI1 line supplies a clocking signal from the clocking controller (not shown) to the volume generation controller 1056 for clocking its volume generation operations. The FR8, FR64 lines also supply clocking signals from the clocking controller to the volume generation controller 1056, but these clocking signals provide the timing specifically for incrementing the volume every 8 frames and every 64 frames. The start volume generation line 1057 controls the start of the volume generation controller 1056 operations.
Fig. 110 is a timing diagram which sets forth the operations performed by the volume generator 1012 during each clock cycle of its set twelve clock cycles. Fig. 110 is arranged in columns to indicate for each of the twelve clock cycles: (i) what data is on the result and register array buses; (ii) what, if any, arithmetic operations are being performed; (iii) what other operations are being performed; and (iv) the equations for which the arithmetic operations are being performed. The "equation" and "comments" columns reflect the general operations performed by the volume generator 1012 in connection with volume generation. The "17s" and 15u" in the operations column indicate whether the result of the operation is a 17-bit signed number or a 15-bit unsigned number.
3. Register Array.
Figure 111 illustrates the architecture for register array 1032 and its connections to register data bus 1024, I/O channel ready 1180, address generator 1000, volume generator 1012, accumulation logic 1030, and signal path 1028. Register array 1032 includes: a dual port static RAM
1178; register data port 1182; register array I/O bus 1184; RAM I/O port 1186; I/O port bus 1187; voice select register 1188; row compare circuitry 1190; row select circuitry 1192; register select register 1194; I/O read write timing generator 1196; dual port RAM timing generator 1198; synthesizer core read/write timing generator 1200; core I/O port 1202; and core port bus 1204.
In order to process a voice, the four synthesizer core blocks, address generator 1000, accumulation logic 1030, volume generator 1012, and signal path 1028 need voice specific parameters programmed by the system microprocessor. At the beginning of processing of a voice, the full length of the dual port static RAM 1178 is read. The results of the read will be held during voice processing in read buffers in the core I/O port 1202. The core blocks 1000, 1030, 1012, and 1028 will access the read values during various stages of processing. Also, during stages of processing, the core blocks will place values in core I/O port 1202 write buffers. After voice processing is completed, the write buffer's data will be written back into the dual port static RAM 1178. The complete cycle from read to write takes longer than a voice's processing so RAM cycles for voices overlap. This means that the write buffers in the core I/O port 1202 contain values from the previous voice while the read buffers contain data for an upcoming voice.
A core read/write timing generator 1200 generates the overlapping timing needed to update the four synthesizer core blocks 1000, 1030, 1012, and 1028. It drives the dual port RAM timing generator 1198 that directly drives the dual port static RAM 1178. The row select circuitry
1192 uses the voice number as input for the read and the old voice number as input for the write.
During sound generation, the parameters of a voice need to be modified or examined to allow the system microprocessor to generate sounds. The system microprocessor can read and write the dual port
RAM 1178 over the register data bus 1024. From the register I/O side, the dual port RAM 1178 is organized as 32 voices (rows) of 26 voice specific registers. To access one of the 26 voice specific registers for a voice, the system microprocessor first writes to the voice select register 1188. This selects one of the 32 voice register rows. Then the system microprocessor will write to the register select register 1194. This selects one of the 26 voice specific registers to access. Lastly, the data is read from or written to a 16 bit register data port register 1182. Register select register 1194 includes a counter which enables it to auto-increment. When SVSR[AI] is set to one, register select register 1194 automatically increments the current value in the register whenever data is written to register data port register 1182. RAM I/O port 1186 serves as an interface between the system microprocessor and dual port RAM 1178. Register data is latched in RAM I/O port 1186 for system reads of dual port RAM 1178 but not for writes to the dual port RAM. In order not to disturb the operation of the four synthesizer core blocks 1000, 1030, 1012, and 1028, the system microprocessor's access time must fit into the idle time of the dual port RAM 1178. Also to keep a write from the system microprocessor from being over-written by synthesizer core writes which occur after voice processing, the system microprocessor writes to a voice must wait until after that voice's write has occurred. They cannot occur between the read of the voice and the write of the voice. The first criteria is met by gating the I/O read/write timing generator 1196 with an I/O gating signal 1197 from the core read/write timing generator 1200. This ensures that the system microprocessor accesses occur during idle time of the dual port RAM 1178. To keep the system microprocessor's writes from being over-written, the voice select register's output and the voice number are compared by row compare circuitry 1190. If they are equal, then the I/O read/write timing generator's 1196 outputs are gated. To force the system microprocessor to wait for access, the I/O channel ready signal on line 1180 is used. I/O channel ready is an ISA specification signal used in all PC systems to lengthen the I/O cycles of a system microprocessor.
In order to speed up the I/O cycles of the dual port RAM 1178, writes are buffered. This means that the system microprocessor can write once to the dual port RAM 1178 and the data will be held in the 16 bit register data port 1182 waiting for access to the dual port RAM. If a second write is attempted, then the I/O channel ready signal on line 1180 will be used to lengthen the I/O cycle. The write to the 16 bit register data port 1182 triggers the eventual write to the dual port RAM 1178. To quicken the read I/O cycle, different register select values are used for writes than for reads. This allows a write to the register select register 1194 to trigger a read cycle. I/O channel ready is only used if the dual port RAM 1178 can not get the data to the 16 bit register data port 1182 before the system microprocessor reads the 16 bit register data port. During a read of a register contained within the dual port RAM 1178, only the sense amplifiers associated with that register column are enabled. The rest of the columns in the dual port RAM 1178 go through a normal read cycle but will not get evaluated by a sense amplifier. This will save some power and possibly will result in less noise for the analog portions of the PC audio integrated circuit. During a write to a register contained within the dual port RAM 1178, only the column associated with the register is driven. Once again, the rest of the columns go through a normal read cycle. This allows only the column selected to be modified.
At start up, the values in the dual port RAM 1178 must be initialized. This is accomplished by going through all 32 voice selects while forcing the initial values on all columns from the core I/O port 1202.
When a voice is inactive, processing for that voice does not occur. This saves power and simplifies programming. If the bit which determines whether a particular voice is active is contained within the register array, the dual port RAM needs to be read to determine if that voice is active. To save the power used to read the dual port RAM, in the present invention the bit which determines if a voice is active is placed at the edge of the dual port RAM on line 1206. Each of the edge RAM cells of dual port RAM 1178 have an additional output which can be examined on line 1206, at the beginning of a voice cycle, to determine if a voice is active and if the dual port RAM should be read.
Figure 112 illustrates a timing chart for the register array 1032 operations. The operations/signals referenced in the left column of Fig.
112 are as follows:
Figure imgf000230_0001
Figure imgf000231_0001
As is illustrated in Fig. 113, core I/O port 1202 contains an incrementor 1208 and comparator 1210 connected to current value registers 1212 and final value registers 1214 in the dual port static RAM 1178, by paths 1216, 1218 and 1220 which are included in the core port bus (not shown). The synthesizer core blocks are also connected to the dual port RAM 1178 through path 1220. This architecture is used to control the incrementing/decrementing of the overall volume.
The current value in registers 1212 is the value that the volume generator will use to add volume to the synthesizer module's output. The final value in registers 1214 is the value the current value will be equal to after incrementing or decrementing over several sample frames.
In a first mode of operation, the current value is incremented or decremented by incrementor 1208 closer to the final value. In this mode, the system microprocessor will write the final value to the final value register 1214. When a voice is processed, the current value and the final value will be compared by comparator 1210 to determine if the current value is less than, greater than, or equal to the final value. The current value from register 1212 is loaded into incrementor 1208 by path 1218, into comparator 1210 by path 1220, and sent to the synthesizer core blocks also by path 1220. The final value from registers 1214 is loaded into comparator 1210 by path 1222.
The current value loaded into incrementor 1208 is incremented or decremented by one, or remains the same, depending on the comparison of the current value and final value made by comparator 1210. If the current value is less than the final value, the incrementor receives a one from comparator 1210 on control lines 1226 and 1224, and increments the current value by one. If the current value is greater than the final value, incrementor receives a zero on control line 1226 and a one on control line
1224, and decrements the current value by one. If the current value is the same as the final value, incrementor 1208 receives a zero on control line 1224 and does not increment or decrement the current value.
At the end of a voice's processing, the current value as updated by incrementor 1208 is written back, through path 1216, into the current value registers 1212 of dual port RAM 1178. The next time this voice is processed, the comparison will again by made and the current value will be moved one more increment or decrement closer to the final value.
In a second mode of operation, the current value needs to be changed immediately. This can be accomplished by writing the same value to both the current and the final value registers 1212 and 1214.
A third mode is needed for compatibility with Ultrasound's wavetable synthesizer so that the Ultrasound's PAN value held in the SROI register will not increment. In this mode, bit OFFEN of register SMSI will be used to disable the increment and decrement of the current value.
The current value registers are SROI, LROI and SEVI, while the final value registers are SROFI, SLGFI and SEVFI.
Fig. 114a is a logic diagram which illustrates the preferred layout of comparator 1210. Fig. 114b is a timing chart associated with the logic diagram of Fig. 114a. The comparator 1210 compares the current and final value to determine if one value is greater than, less than or equal to the other value. Comparator 1210 is a static type comparator.
Comparator 1210 first compares the MSB of the current and final values, V1 and V2, and then, if necessary to determine if the values are equal or if one value is greater than or less than the other value, continues to compare each bit position until the LSB is compared. The comparison of the MSB position is in the left stage (or cell) 1228 of the circuit illustrated in Fig. 114a, while the comparison of the MSB-1 position is in the middle stage 1230 of the illustrated circuit and the comparison of the LSB position is in the right stage 1232 of the illustrated circuit. Since the current and final values being compared are twelve-bits, comparator 1210 requires twelve comparison stages (or cells), but only three stages (or cells) are illustrated in Fig. 114a for simplicity purposes.
Starting with the MSB, the current and final values, V1 and V2, are compared to determined the most significant difference. The bit values for each bit position of the current and final values, V1 and V2, are input on lines 1236 and 1234, respectively, in each stage. The signal DIFF, on line 1238, is a one when a difference between the input bits occurs. DIFF equal to one will break the carry chain by turning off a CMOS transfer gate 1240 and pulling down the output with a single NMOS transistor 1242. The carry chain is formed by the CMOS transfer gates 1240 that allow voltage VCC (i.e., a value of one) to flow from left to right. The carry chain determines the most significant difference by detecting how far the one at the input to the carry chain has propagated. Each bit comparison stage has a NAND gate 1244 that has as its input the carry input for its cell (signal DIFF). EVAL is a timing signal that does not go high until the carry chain has settled. When EVAL goes high, a CMOS transfer gate 1246 in the stage with the most significant difference will drive a one onto line 1248, if the bit comparison has determined that V1 is less than V2, or a zero if V1 is greater than V2. If V1 and V2 are equal, the carry chain will propagate a one through its entire length.
The signal at the end of the carry chain, on line 1250, is ANDed with EVAL, by NAND gate 1252, to generate the signal on line EQ.
Signal NEQ, the compliment to the signal on line EQ, is an input to NAND gates 1254 and 1256. NAND gate 1254 also has as its inputs the EVAL timing signal and the signal on line 1248. NAND gate 1256 also has as its inputs the EVAL timing signal and the output from NAND gate 1254. NAND gates 1254 and 1256 respectively output the signals on lines
LT and GT. Signal NEQ keeps the NAND gates 1254 and 1256 from burning power when V2 and V1 are equal. When V1 and V2 are equal, line 1248 floats. LT equals a one when V1 is less than V2, GT equals a one when V1 is greater than V2, and EQ equals a one when V1 and V2 are equal.
Comparator 1210 is an improvement over prior art comparators which use adders. Since comparator 1210 does not use adders, it is smaller and uses less power than comparators that use adders. Comparator 1210 also makes determinations about the values being compared that are believed to be unattainable in one-circuit static type comparators. Comparator 1210 determines if the values are less than or greater than one another or are equal. It is believed that prior art static type comparators can only determine in one circuit either: (i) if the values are equal; or (ii) if one value is greater than the other value, or one value is less than or equal to the other value. 4. LFO Generator.
Fig. 115 illustrates the architecture for LFO generator 1021 and its connections LDATOUT and LDATIN to the local memory control module. LFO generator 1021 includes: LFO generator controller 1148; data buffer 1150; registers 1152, 1154 and 1156; number generator 1158; adder 1160; comparator 1162; and register 1166. LFO generator controller 1048 is connected to each of these circuit elements by various control lines. The function of these control lines is discussed below.
As illustrated, data lines LDATOUT and LDATIN from the local memory control module are connected to data buffer 1150. Data buffer
1150 also has connections to registers 1152, 1154 and 1156, as well as to accumulator 1164. Registers 1152, 1154 and 1156 are connected to data buffer 1150 and to adder 1160. Number generator 1158 is connected to adder 1160. Adder 1160 is connected to comparator 1162, register 1166, and to accumulator 1164 by paths 1168 and 1174. Comparator 1162 is connected to adder 1160. Accumulator 1164 is connected to adder 1160 by paths 1174 and 1168, to register 1166 by path 1170, and to data buffer 1150 by path 1172. Register 1166 is connected to accumulator 1164 by path 1170.
As discussed above, various parameters for each LFO are stored in local memory. These parameters are loaded into data buffer 1150 from local memory on line LDATOUT. The local memory control module (not shown) controls the loading of the data into data buffer 1150 by control line LLFORD_L. Data in data buffer 1150 is written to local memory by control line LLFOWR_L. The local memory control module controls the driving of data from data buffer 1150 onto line LDATIN by control line LLFOWR_L. Bits 14 and l5 from data buffer 1150 determine the quadrant of the LFO waveform and are sent to LFO generator controller 1148.
Data from data buffer 1150 is loaded into registers 1152 and 1154 by respective control lines LDCTRL and LDMC, and data is driven from these registers to adder 1160 by respective control lines DRCTRL and DRMC. Data from data buffer 1150 is loaded into register 1156 by control line LDMP. Data in register 1156 may be shifted right by simultaneously activating the DRMP and SHFTMP control lines. All the bits in register
1156 are driven to adder 1160 when control line DRMP is activated, while the 8 MSBs are driven when control line DRMPHI is activated and the 8 LSBs are driven when control line DRMPLO is activated.
Number generator 1158 drives a zero to adder 1160 when control line DRZEROB is enabled.
Adder 1160 adds a binary number from its A input with a binary number on its B input. The INVA control line will cause the A input to become negative while the INVB line will cause the B input to become negative. These control lines cannot be enabled at the same time. When control line ZEROA is enabled, the A input is zero. The A input is either a zero or the value from path 1168. The B input is the value on path 1176.
The output of adder 1160 can be sent to comparator 1162 and to accumulator 1164. The output data is loaded into the comparator 1162 when control line LDCMP is activated. Comparator 1162 determines whether the output value is negative or positive, and depending on this determination, sends a signal to LFO generator controller 1148 on the SLGM_ZERO or SLGM NEG line. Accumulator 1164 is loaded with the adder 1160 output data when control line LDACC is enabled. The data is shifted right by accumulator 1164 when control lines LDACC and
SHFTACC are simultaneously activated.
The data in accumulator 1164 can be sent along path 1172 to data buffer 1150. Control line LLRORD L controls the loading of this data into data buffer 1150. The data from accumulator 1164 can also be sent to register 1166. Control line LDOFF controls the loading of this data in register 1166. Register 1166 also contains data on lines SSGA_LN and SSGA_LT from the start generator which respectively indicate the LFO number being processed and whether the data is destined for the volume generator 1012 or the address generator 1000.
The data in register 1166 travels on line SLGM_DATA and is either loaded into register 1043 of address generator 1000 (see Fig. 107) or register 1065 of volume generator 1012 (see Fig. 109). Register 1166 sends data on lines SLGM_LNUM and SLGM_LTYPE to LFO generator controller 1148 which respectively indicate the number of the LFO being processed and whether the register data is destined for the volume generator 1012 or address generator 1000. Control lines LDNFLFO and LDNVLFO control whether the data is loaded into register 1043 or 1065. The LFO Voice Match control line indicates to the address generator 1000 (see Fig. 107) and the volume generator 1012 (see Fig. 109) the number of the voice associated with the LFO being processed.
The PHI line supplies a clocking signal from the clocking controller (not shown) to the LFO generation controller 1148 for clocking its operations. The SSGA_FSYNC line supplies a start pulse to start the LFO generation controller 1148 operations. The signal on line SGMI_GLFOE comes from register SGMI and indicates whether all the
LFOs are enabled.
5. Signal Path.
Fig. 116 illustrates signal path 1028 and its connections to local memory control module 8, volume generator 1012, address generator 1000, and accumulation logic 1030. Signal path 1028 includes: signal path controller 1080; A and B buses 1082 and 1084; number generator 1088; adder/subtracter 1090; S, S1, and latch registers 1092, 1096, and 1098; data buffer 1104; shift logic 1094; bus transfer logic 1100; multiplier and operand buses 1086 and 1087; multiplier 1102; temporary register 1112; and ROUT, LOUU, and EOUT registers 1114, 1116, and 1118. As illustrated, in the top half of Fig. 116: number generator 1088 is connected to adder/subtracter 1090 and B bus 1084; adder/subtractor 1090 is connected to number generator 1088, A and B buses 1082 and 1084, and shift logic 1094; S register 1092 has connections to A bus 1082 and a connection to shift logic 1094; shift logic 1094 is connected to adder/subtracter 1090, S register 1092, latch register 1098 and S1 register 1096; S1 register 1096 is connected to shift logic 1094 and B bus 1084; latch register 1098 is connected to shift logic 1094, S1 register 1096 and A bus 1082; and data buffer 1104 is connected to A bus 1082 and local memory control module 8. Number generator 1088; adder/subtracter
1090; S, S1, and latch registers 1092, 1096, and 1098; data buffer 1040; and shift logic 1094 are also connected to signal path controller 1084 through various control lines discussed below.
As illustrated in the bottom half of Fig. 116: multiplier 1102 is connected to multiplier bus 1086, volume generator 1012 and address generator 1000; temporary register 1112 is connected to the multiplier bus 1086; and the ROUT, LOUT, and EOUT registers 1114, 1116 and 1118 are connected to the multiplier bus 1086 and accumulation logic 1030. In addition, the ROUT, LOUT, and EOUT registers are connected together at line 1106. The multiplier 1102 and registers 1112, 1114, 1116 and 1118 are also connected to signal path controller 1080 through various control lines discussed below.
Through various control lines, discussed below, signal path controller 1080 controls all the circuit elements of signal path 1028 connected to it. Through various other control lines, signal path controller 1080 is also connected to circuit elements outside of signal path 1028. The function of these control lines is also discussed below.
Bus transfer logic 1110 transfers data from the A bus to the multiplier bus and vice versa. Transfers up to the A bus are enabled by the DRXFERUP control line, while transfers down to the multiplier bus are enabled by the DRXFERDN control line.
The PHI1 line supplies a clocking signal from the clocking controller (not shown) to the signal path controller 1028 for clocking its signal path operations. The Start Signal Path line from Address Generator 1000 controls the start of the signal path controller 1028 operations. The Start Accumulation line controls the start of the accumulation logic 1030 operations.
The SMSI [ULAW] line is connected to bit ULAW of register SMSI. The setting of this bit controls whether signal path 1028 expands 8-bit μ-Law data to 16-bit linear data before the data is interpolated.
Depending on whether control line DR0 or DR33 is activated, number generator 1088 drives a binary zero or a thirty-three to adder/subtracter 1090.
Adder/subtracter 1090 adds or subtracts a binary number on the A bus 1082 with either a binary number on the B bus 1084 or a binary thirty-three or zero from number generator 1088. The INVA and INVB control lines respectively cause data loaded into adder/subtracter 1090 from A bus 1082 and B bus 1084 to become negative. These control lines cannot be enabled at the same time. The output of adder/subtracter is stored in shift logic 1094.
S register 1092 temporarily stores data. Line LDS loads data from A bus 1082 into the S register, while line DRULAW drives the data to the A bus on line 1108 and to shift logic 1094 on line YYY.
Shift logic 1094 shifts data stored in it. The lines SHYYY and SH2 respectively determine whether the data is shifted by: (i) the three-bit binary number on line YYY; or (ii) two-bits, for multiplying the data by four.
S1 register 1096 temporarily stores data from shift logic 1094. Line LDS1 loads data from shift logic 1094 into the S1 register, and DRS1 line drives data from the SI register to the B bus 1084. Latch register 1098 also temporarily stores data. Line LDADDLAT loads data from shift logic 1094 into the latch register, and DRADDLAT line drives data from the latch register to the A bus 1082.
Control line DRDATA drives wavetable data from data buffer 1104 to the A bus 1082. This wavetable data is data the address generator
1000 addressed, and is loaded from the local memory control module 8 into data buffer 1104 by control line LDATOUT.
Multiplier 1102 multiplies data on the multiplier bus 1086 with data from volume generator 1012 or address generator 1000. The LDMULT line loads the data into the multiplier 1102, and the DRMULT line drives the result of the multiplication to the multiplier bus 1086. The volume generator data comes from the right, left and effects volume buffers 1059,
1061 and 1063, while the address generator data comes from the address fraction buffer 1041. The control lines DRRVOL, DRLVOL, DREVOL, and DRADDFR control which buffer's data is driven to multiplier 1102.
The LDBUF control line is connected to buffer 1041 in address generator
1000, and buffers 1059, 1061, and 1063 in volume generator 1012, and ensures that data in these buffers is available to be driven to the signal path.
Temporary register 1112 temporarily stores data. The LDTEMP1 line loads data from multiplier bus 1086 into this register, while the
DRTEMP1 line drives data from this register to the multiplier bus.
Registers ROUT 1114, LOUT 1116, and EOUT 1118 also temporarily store data. Data is loaded from the multiplier bus 1086 into these registers by the respective control lines LDROUT, LDLOUT and
LDEOUT. As discussed below, data is driven from these registers to accumulation logic 1030 by control lines DRROUT, DRLOUT, and DREOUT. See also Fig. 118.
Fig. 117 is a timing diagram which sets forth the operations performed by the signal path 1028 during each clock cycle of its set twelve clock cycles. Fig. 117 is arranged in columns to indicate for each of the twelve clock cycles: (i) what data is on the multiplier, A, and B buses; (ii) what buffer (address fraction, right, left or effects volume) the multiplier's data is coming from; (iii) what, if any, arithmetic operations are being performed on the data; (iv) what other operations are being performed; and (v) the equation(s) for which the arithmetic operations are being performed. The "MULT equation" and "ADD/SUB equation" columns reflect the general operations performed by signal path 1028.
6. Accumulation Logic.
Fig. 118 illustrates accumulation logic 1030 and its connections to address generator 1000, signal path 1028, and synthesizer DAC 512.
Accumulation logic 1030 includes: accumulation controller 1120, number generator 1122, adder/subtracter 1126, and accumulation registers 1124.
As illustrated: number generator 1122 is connected to adder/subtracter 1126 by path 1132 and is connected to accumulation controller 1120 by control line DR0; signal path 1028 is connected to adder/subtracter 1126 by path 1134; adder/subtracter 1126 is connected to number generator 1122 by path 1132, to signal path 1028 by path 1134, and to accumulation registers 1124 by paths 1136 and 1138; and accumulation registers 1124 are connected to adder/subtracter 1126 by paths 1136 and 1138, to address generator 1000 by path 1128, to synthesizer DAC 512 by path 1130. Accumulation registers 1124 are connected to accumulation controller 1120 by the following control lines:
LDSHFT DREACC7
DREACC6
DREACC5
DREACC4
DREACC3
DREACC2
DREACC1
DREACC0
Though its control lines, discussed in more detail below, accumulation controller 1120 controls all the circuit elements of accumulation logic 1030 connected to it. Through other control lines, accumulation controller 1120 is also connected to signal path 1028, register SEASI and address generator 1000. The function of these other control lines is also discussed below.
When enabled by the DR0 control line, number generator 1122 drives a zero on path 1132 to adder/subtracter 1126.
Data from the ROUT, LOUT, and EOUT registers 1114, 1116, and 1118 in signal path 1028 is driven on signal path 1134 to adder/subtracter 1126. Control lines DRROUT, DRLOUT, and DREOUT determine which of these registers drives its data to adder/subtracter 1126.
Adder/subtracter 1126 adds data from paths 1132 or 1134 with the data on path 1138. The result of this addition is sent from adder/subtracter 1126 to accumulation registers 1124 on path 1136. When the sums exceed a maximum value, adder/subtracter 1126 clips the data instead of rolloing over and changing sign.
Accumulation registers 1124 comprise ten 16-bit registers. Two of these registers accumulate the left and right output data. The remaining eight registers accumulate effects data. Enabling the LDSHFT control line causes two steps to occur: (i) data from path 1136 is loaded into the top register of accumulation registers 1124; and (ii) after this data is loaded, this data and the preexisting data in the other registers is shifted to the register below it, or in the case of the bottom register, the register is shifted to the top register. For example, if prior to shifting, the data is arranged as illustrated in Fig. 118, after shifting the data is arranged as follows:
top register→ R. ACC.
E. ACC. 7
E. ACC. 6
E. ACC. 5
E. ACC. 4
E. ACC. 3 E. ACC. 2
E. ACC. 1
E. ACC. 0
bottom register → L. ACC.
Thus, the accumulation registers together serve as a 16-bit wide shift register. The data shifting ensures that the proper data is accumulated together and that the data is stored in the correct location.
For delay-based effects processing, when control line LDED is activated, data is transported on path 1128 from one of the top eight accumulations registers to effects data buffer 1039 in address generator
1000. As discussed above, eventually the effects data is sent, under the control of the local memory control module 8, to the wavetable, where it is written at an address generated by address generator 1000.
Under the control of the start generator and control line DRACC, the synthesizer module left and right output data is output in parallel format from accumulator registers 1124 on path 1130 to parallel to serial convertor 1019. The data is then sent serially to serial transfer control block 540, or serial to parallel convertor 1144 of the interface circuitry 1025. Serial to parallel convertor 1144 sends the data in parallel format to synthesizer DAC 512. The start generator (not shown) initiates the output of this data by sending a signal on the DRACC control line after all the possible number of voices in a frame are processed.
The lower three bits of the number of the voice being processed are sent on line 1142 to accumulation controller 1120. The accumulator controller 1120 uses these three bits to control which of the accumulation registers 1124 data should be written into.
Bits [7:0] of register SEASI are connected to accumulation controller 1120 by control line 1140. Based on the setting of these bits, accumulation controller 1120 controls which of the accumulation registers 1124 will receive particular effects data.
The PHI1 line supplies a clocking signal from the clocking controller (not shown) to accumulation controller 1120 for clocking its accumulation operations. The signal on the Start Accumulation line, from signal path 1028, controls the start of the accumulation controller 1120 operations.
Fig. 119 is a timing diagram which sets forth the operations performed by the accumulation logic 1030 during each clock cycle of its set twelve clock cycles. Fig. 119 is arranged in columns to indicate for each of the twelve clock cycles: (i) what data is being operated on; (ii) what arithmetic operations are being performed on the data; and (iii) the equation for which the arithmetic operations are being performed. The
"equation" and "comments" columns reflect the general operations performed by accumulation logic 1030.
Fig. 120 is a timing diagram which sets forth the overall timing of the operations of the blocks in the synthesizer module, and the local memory control module. The timing diagram reflects, by column, the timing of the following synthesizer module blocks: start generator ("SSG"); register array ("SRG"); address generator ("SAG"); volume generator ("SVG"); signal path ("SSP"); and accumulation logic ("SAC"). The timing of the local memory control module ("LMC") is set forth in the last column.
The timing diagram illustrates the timing of the operations of the various blocks and the local memory control module starting from when the synthesizer module begins its operations at power-up, after reset, or after suspend. The operations in columns SRG and SSP marked with an asterisk (*) do not occur after reset or power up. In column SAC, the timing and operations have a different starting point depending on whether the synthesizer module is in the power-up/reset mode, indicated by line A, versus a restart after the suspend mode or a continuous operation mode, indicated by line B. The timing diagram reflects the timing for the synthesizer module's processing of a few voices. One skilled in the art will readily appreciate from Fig. 120 the timing that occurs for the processing of all voices.
The number after some of the operations in the timing diagram indicate which voice number is being processed. For example, "ADDfr(in)31" in column SSP indicates the address fractional value for voice 31. The notations "(in)" or "(out)" indicate whether the data is being transferred in or out of the particular block. For example, "ADDfr(in)31" indicates that the address fractional value for voice 31 is being transferred into the signal path.
In column SSG, "FSYNC" sets whether the synthesizer will operate in the enhanced mode or the frame expansion mode. "LFSYNC" indicates that the mode is set by the local memory control module. "AV" indicates whether a particular voice is active. "VN" indicates that the processing for a particular voice number has been completed.
In column SRG, there are two cycles to read ("RD") data from the register array for a particular voice and two cycles to write ("WR") data to the register array.
One skilled in the art will readily appreciate the operations set forth in columns SAG, SVG, SSP, SAC and LMC from the synthesizer module architecture drawings and timing diagrams discussed above and the discussion below in section VI. LOCAL MEMORY CONTROL MODULE.
The wavetable synthesizer of the present invention is described above as a module formed on a monolithic PC audio integrated circuit also containing a system control module, a CODEC module, a local memory control module, and a MIDI and game port module. However, alternatively, the wavetable synthesizer can be formed on a monolithic integrated circuit together with just a system control module, synthesizer DAC, and a local memory control module. In another alternative embodiment, the wavetable synthesizer can be formed on a monolithic circuit together with just a system control module and a local memory control module. The resulting alternative monolithic integrated circuits can be used in various applications. For example, either of these integrated circuits can be incorporated on an add-in card with other integrated circuits which support its operation, such as a commercially available CODEC, memory and/or DAC, to form a sound card used in a personal computer.
VI. LOCAL MEMORY CONTROL MODULE
Referring now to Fig. 1, the circuit C includes a local memory control module 8. Throughout this specification local memory control module 8 may be referred to as LMC 8. LMC 8 includes a LMC bus interface 250 and a collection of registers, latches and logic circuits schematically illustrated as block 252 in Fig. 1. LMC 8 transfers data between off-chip local memory devices and the synthesizer module 6, the system bus interface 14 and the CODEC module 4. Referring now to Fig.
6, local memory devices may include DRAM circuits 110, ROM circuits 86 and a serial EEPROM 78 to support the ISA Plug-n-Play specification.
A. Major Functional Blocks.
Referring now to Fig. 29, LMC 8 includes a master state machine 254, a register data bus control block 256, suspend mode refresh block
258, a refresh request block 260, a priority encoder block 262 and a memory interface block 264. In addition to these functional blocks, LMC 8 includes a plurality of registers as described below.
Master state machine 254 and priority encoder 262 determine which of the possible sources of memory cycles will be granted access and pass the decision to memory interface block 264 to generate the cycle. Plug-n-Play logic is also included within LMC 8 to provide interfacing with serial EEPROM 78 for Plug-n-Play accesses. Control of Plug-n-Play compatibility EEPROM 78 is carried out over PNP CON Pins 265 (Fig. 29) which correspond to PNPCS 76 and MD[2:0] 80 in Fig. 6.
Master state machine 254 receives input signals relating to voice generation via input 266. Voice input 266 includes the register value SAVI (see register description in synthesizer description) which specifies the number of voices being processed. Power Down input 268 is any one of several power down signals generated internally to effect shut-down in general or by module, or to enter suspend mode. These modes are described in detail in the system control module description. Specifically, power down input 268 includes I2LSUSRQ which is active when bit PWRL (power to local memory) transistions from high to low, disabling the 16.9 MHz clock to the local memory control, and I2LSUSPIP (suspend-in-progress) which is active following I2LSUSRQ (see Fig. 26) or in response to a circuit wide suspend # pin input which causes ISUSPRQ# to go active immediately (Fig. 27). ISUSPRQ# is logically ORed into I2LSUSPIP. System shut-down mode is entered by clearing
PPWRI[6:1] with a single write which causes I2LSUSRQ to be active, followed by I2LSUSPIP as described above.
A circuit activate signal provided on input 272 (Fig. 29) is generated in response to the status of PUACTI[0]. PUACT1[0] is an audio function activation bit (see system control register description) which, when low, disables decoding of all audio-function address spaces, interrupts and DMA channels.
Output 72 is the FRSYNC# signal generated at the beginning of each frame of voice processing which is passed to priority encoder 262 and output via terminal 72 on a multiplexed basis as described in the system control module description above. ACSYNC# output signal 73 is a one pulse synchronization signal to mark the start of each 4 clock cycle memory access as described below. Output 75 provides 2-bit MSM[1:0] one-of-four memory cycle type signal from state machine 254 to priority encoder 262. 1. The Master State Machine.
The master state machine 254 counts out frames which constitute the amount of time for each 44.1 KHz. sample. Each frame consists of 32 subframes, the time needed to process each voice. Each subframe includes three 4-clock accesses to local memory. There are four kinds of accesses possible: SYNTH, EVEN, ODD, and WAIT; each access-type represents a different method of prioritizing the memory cycle requests, as described in the priority encoder section below. The master state machine 254 generates MSM[1:0] which specifies the current access-type. The order in which the access-types are generated is as follows:
Figure imgf000248_0001
Fig. 30 is a state diagram showing the modes of MSM[1:0].
The master state machine passes MSM[1:0] to the priority encoder to determine which of the possible cycle types will be executed (e.g. synth patch access, codec, DMA, I/O cycle, refresh, etc.).
a. Initialization. Referring now to Fig. 30, while PCARST# is active at state 287, MSM[1:0] = WAIT at state 290. After PCARST# becomes inactive, before the circuit C is activated via PUACTI[0], MSM[1:0] = SYNTH at state 292 to allow refreshes to DRAM 110. After activation, the master state machine 254 starts the first
SYNTH access for subframe 0 at state 275 and continues from that point. State machine 254 transitions through eight clocks of synthesizer access type, (states 275, 294), followed by four even (state 296), eight synthesizer (states 298-300), and four odd clocks (state 302) for each subframe. This pattern is repeated via states 304 and 306 until all thirty-two subframes are completed.
b. Frame-expansion mode. This mode is included for Gravis Forte Ultrasound GF-1 compatibility. Frame-expansion mode is enabled by setting SGMI[ENH], as described in the synthesizer module description above. In this mode, a time delay of about 1.6197 microseconds times [SAVI minus 14] is added at the end of each frame. SAVI is the programmable register that specifies the number of active voices. The number of delay cycles is SAVI minus 14. The delay is approximated by alternating wait-counts of 27 clock cycles for the first delay cycle, and then 28 for the next. Referring to Fig. 30, frame expansion mode is entered at state 276 if a value for a delay cycle has been set, as determined by SAVI minus 14. State 278 provides four even, then four odd clocks in three successive iterations. These twenty-four clocks are then followed by a three clock wait at state 280 and a return to state 276 for even numbered delay cycles and an additional wait clock at state 284 for odd numbered delay cycles. Once all the delay cycles are complete at state 276, the subframe number is reset at state 308, and the process begins again unless ISUSPRQ# is active at state 286.
c. FRSYNC#, EFFECT# and ACSYNC#. Referring now to Fig. 29, master state machine 254 generates a 1-clock pulse over FRSYNC# at the beginning of each new frame and a 1-clock pulse over ACSYNC# to signal the start of each 4-clock cycle access time. EFFECT# is timed as appropriate, becoming active during memory cycles for effects write (4-clock cycles) and for read accesses (8-clock cycles).
d. Suspend and Shut-Down Modes. When ISUSPRQ# from the system control module becomes active, master state machine 254 completes the current frame and then enters WAIT mode at states 286 and 290 (Fig. 30). The LMC 8 does not leave any memory control signals in a state which will interfere with the suspend-mode refresh cycles.
Referring now to Fig. 31, when suspend mode in progress signal ISUSPIP# becomes active, suspend-mode refresh cycles are executed off the 32 KHz. clock. Once ISUSPIP# becomes inactive, the current suspend-mode refresh cycle is ended on the next edge of the 32 KHz. clock such that all RAS# and CAS# are inactive. After ISUSPRQ becomes inactive, the master state machine resumes with the next frame. Suspend-mode refresh cycles also occur when the circuit C is in shut-down mode as defined in the system control module description.
2. The Priority Encoder.
Referring now to Fig. 29, the priority encoder 262 receives requests for memory cycles via input 310 and outputs 312 and 314 from register data bus control 256 and refresh control 260 respectively. Based on the state of MSM[1:0], priority encoder 262 determines which cycle will be granted. Here is how the requests are prioritized:
Figure imgf000250_0001
There is a constraint that DMA or SBI I/O cycles be allowed at least once every other ODD cycle. Therefore it is not legal for the synthesizer module to assert the LFO access request two ODD cycles in a row. A local memory access mode output signal is provided at output 316, and input 318 to memory interface 264 to generate the specified cycle.
3. The Refresh Request Block.
The refresh request module 260 asserts RSHRQ# (refresh request) to the priority encoder 262 via output 314 when a DRAM refresh is needed. The interval between refreshes is set by the LMC Configuration Register (LMCFI) to be every 15, 62, or 125 microseconds. This value is input to refresh request module 260 via two-bit input 320. This block also contains a 3-bit counter called the refresh request counter (RSHRQCT[2:0]), which is initialized to 0. Whenever a refresh interval has elapsed RSHRQCT[2:0] is incremented and whenever a refresh cycle to DRAM is executed, RSHRQCT[2:0] is decremented. Execution of a refresh cycle is communicated from encoder 262 to refresh request module 260 via a ready signal provided at output 324 and input 326. If the counter is between 1 and 7, RSHRQ# is active. RSHRQCT[2:0] is preset to 7 during suspend mode (ISUSPIP# active).
4. Suspend Mode Refresh.
A power-down condition generates an input to suspend mode refresh block 258 at input 330. After ISUSPIP# from system control module 2 becomes active, the 32 KHz clock supplied by the C32KHZ pin 70 (Fig. 6) is used to operate suspend-mode refresh. The Local Memory Control Register (LMCI) provided via input 328 selects the refresh type to be 62 or 125 microseconds or to use the DRAM self-refresh mode. All DRAM banks are refreshed simultaneously. Suspend mode RAS and CAS outputs 332 and 334 are provided to Memory interface 264 which generates the cycle. Fig. 32 is a state diagram which schematically illustrates the refresh cycles. Fig. 33 is a timing diagram for suspend mode refresh cycles.
The C32KHZ clock signal must continue to oscillate after SUSPEND# becomes inactive to insure that the suspend-mode state machine will finish properly, without the possibility of glitching on RAS and CAS.
5. The Register-Data Bus Control Block.
Referring now to Fig. 29, register data control block 256 is a schematic illustration of the collection of local memory registers which are readable and writable via the system bus and necessary logic to provide status information and control of the system bus/register data bus interface. Details of the registers and control functions are provided elsewhere in this specification.
6. Plug-n-Play Interface.
After PCARST# becomes inactive, before the circuit C is activated by PUACTI[0], the LMC logic is in Plug-n-Play (PNP) mode. In this mode
MD[2:1] are outputs to the serial EEPROM 78 (MD[2] for SK; MD[1] for DI) from the system control module and MD[0] is an input from the serial EEPROM (DO) passed back to the system control module 2. These attributes are described in the system control module section and in Fig. 18.
7. Memory Interface.
Referring now to Fig. 29, memory interface bus 264 supports up to four banks of DRAM 110, four banks of EPROM 86, and the PNP serial
EEPROM 78 (Fig. 6). As described above, BKSEL[3:0] are multiplexed and used to select the bank for both RAM and ROM. RAS#, ROMCS#, and PNPCS are used to select between the memory types.
Figure imgf000252_0001
Local Memory Addresses. The addresses that are used to access DRAM and ROM are all based on byte addresses or real addresses (RLA[23:0]) that range linearly from zero to the end of memory. These 24 bits are referenced in Fig. 6 in part as either MA[10:0], or RA[21:11], depending on whether DRAM or ROM is being accessed. The following table shows how local memory addresses written to various registers (A[23:0]) are translated before becoming real addresses out of the circuit C. Several address registers in the circuit C are shifted per the table (e.g., all synthesizer address registers); others use real addresses. For synthesizer patch accesses, the access width is determined by SACI[2]; for DMA accesses, the width is determined by the DMA request-acknowledge number (8-bit for channels 0, 1 and 3; 16-bit for channels 5, 6 and 7).
Figure imgf000253_0001
16-bit accesses always assume an even byte alignment whereby RLA[0] low specifies the LSBs and RLA[0] high specifies the MSBs.
DRAM. There are several possible configurations of the four banks of DRAM 110 supported by the circuit C, specified by register LMCFI. Each DRAM bank is 8 bits wide. It is possible to use 16-bit DRAMs by treating the two halves of the data bus as two banks (e.g., BKSEL0# would drive the CAS line associated with bits[7:0] and BKSEL1# would drive bits[l5:8]). The number of rows and column address lines must be symmetrical.
The following table shows how real addresses (RLA[21:0]) are multiplexed over row and column (MA[10:0]):
Figure imgf000253_0002
In those systems which include enough DRAM space to require 24-bit addressing, the two most significant bits of DRAM real address RLA[23.22] are encoded and transferred out of circuit C via BKSEL[3:0].
EIGHT-BIT DRAM ACCESS. Fig. 34a is a timing diagram for 8-bit DRAM accesses. CLK in this timing diagram, and the ones below, is the 16.9344 MHz clock.
SIXTEEN-BIT DRAM ACCESS. Fig. 34b is a timing diagram for 16-bit DRAM accesses. Sixteen-bit data accesses utilize fast page mode.
DRAM REFRESH. Fig. 34c is a timing diagram for DRAM refresh cycles. DRAM refresh cycles utilize the CAS-before-RAS method. When not suspended or in shut down mode, refresh rates of 15, 62, 125 microseconds are supported (LMCFI).
ROM. Each of the four 16-bit-wide banks of ROM 86, if present, must be the same size. The ROM size is specified in the LMCFI register. The values range from 128Kxl6 (256 kilobytes per bank) to 2Mx16 (4 megabytes per bank). To implement ROM, 16-bits of external latches 108 must be supplied. The latches, ROMs and circuit C are to be connected as follows:
Figure imgf000254_0001
Figure imgf000254_0002
As described more fully above, ROM accesses multiplex the use of the address and data buses so that 16 bits can be brought in at a time. If there is an I/O write to ROM space, then the MWE# signal will become active during the cycle. The timing diagram in Fig. 35 shows how the real addresses (RA[23:0]) are provided from the circuit C. Note that RA[1] enters A[0] of the ROMs, and so fourth, due to the fact that the ROM banks are assumed to be 16 bits wide.
8. Local Memory Record/Play FIFOs.
The local memory record and play FIFOs (LMRF and LMPF) are FIFOs that are stored in local DRAM 110. These FIFO registers are discussed in the CODEC description. The LMPF is used to automatically transfer data from DRAM 110 to the CODEC playback FIFO 532 (Fig. 1). The LMRF is used to automatically transfer data from the CODEC record FIFO 538 to local DRAM 110.
Referring now to Fig. 36, local memory record and playback FIFOs are each implemented in a FIFO control circuit 321, which includes a programmable base-address counter 318, a 19-bit offset counter 320, and a programmable FIFO size select register 322. The FIFO size is controlled by selecting the bit from the offset counter that causes the offset address to reset back to zero. The FIFO sizes range from 8 bytes to 256K bytes.
The output of offset counter 320 is ORed at gate 324 with the base address output from register 318 to generate the real address for each access to DRAM 110. Register 318 is provided with local memory record and playback FIFO addresses from the LMRFAI and LMPFAI registers described below. Each byte that is transferred between DRAM 110 and the CODEC 4 causes the offset counter 320 to increment. The host CPU writes the LMPF data to DRAM 110 and reads the LMRF data from DRAM 110 via normal I/O accesses. See the description of the LMBDR and LMSBAI registers below. Local memory FIFO accesses are controlled by controlled driver circuit 326 which provides the real address bits out of the circuit C in response to a FIFO access signal provided at input 328.
Data transfer and control signals are provided to the local memory FIFO control circuit 321 via register data bus 12.
CODEC Sample Counters. Each sample that is transferred from the CODEC record FIFO 538 to the LMRF causes the CODEC record sample counter to decrement. Each sample that is transferred from the
LMPF to the CODEC playback FIFO 532 causes the CODEC playback sample counter to decrement. The point at which the data is transferred from-to the CODEC FIFOs and the sample counter decremented is described in detail in the CODEC portion of this specification.
9. DMA Data Transfers.
There are two kinds of DMA transfers possible between system and local memory. GF-1 compatible DMA is specified by LDMACI, for control, and LDSALI and LDSAHI for the DMA address. Interleaved DMA is specified by LDICI, for control and LDIBI for the base address. If both these types of DMA are attempted simultaneously, the results are unpredicable. The DMA request signal generated by the LMC module 8 goes to the DMA logic described in the system control module to become a DRQ signal out to the ISA bus. Similarly, the DAK# signal from the ISA bus is received by the DMA block and passed to the LMC module 8.
The local memory starting address must be even for all DMA.
TC Interrupts. The TC signal from the ISA bus is latched as soon as it becomes active so that it will stay active through the remainder of DMA acknowledge. That signal, LLATTC, is clocked into a flip-flop with the trailing edge of IOR# or IOW#. This bit, LTCIRQ, is the output that is read back in LDMACI[6]. It is also ANDed with the bit that is written to LDMACI[6], the TC interrupt enable, before being ORed with into the AdLib-Sound Blaster interrupts in the system control module. LTCIRQ is cleared by a read of LDMACI. The occurrence of TC is used to stop DMA transfers by clearing either LDMAC[5] or LDICI[9], depending on the type of DMA that is taking place.
10. Interleaved DMA Data Mode.
It is possible to transfer interleaved data from system memory into local DRAM 110, via DMA, such that the tracks are separated in local memory. For this, it is assumed that n tracks of interleaved audio data are stored in system memory, where n is programmable via register
LDICI[7:3] to be from 1 to 32. The size of each of the tracks is also programmable via LDICI[2:0], where the number of bytes in each track is 2 ^ (9+LDICI[2:0]) (ranging from 512 to 64K). The way in which data is transferred varies, based on the DMA channel width and the sample width as illustrated in the table of Fig. 38.
Referring now to Fig. 39, the local memory address for the interleaved DMA function is implemented by ORing the base register and an offset counter 335. The address generated is real; it points to a byte in local DRAM 110.
Still referring to Fig. 39, the offset counter is cleared with each write to LDIBI or upon PCA_RST signal on line 332, via ORGATE 337. The fields of LDIBI control the offset counter as shown in the diagram. LDICI[7:3] specifies the number of tracks of interleaved data, which is schematically illustrated as register 334. Track Size register 336 is controlled by LDICI[2:0]. The MSBs, starting at the bit defined by the size register, LDICI[2:0], are incremented with each sample transferred. After the number of samples specified by the tracks register, LDICI[7:3], have been transferred, the LSBs are incremented via track rollover output 368, and the MSBs are cleared by output 348 of decoder 350. If the tracks register is set to zero, then this DMA function operates like a single track transfer with a roll-over point specified by the size register. The 5-bit down counter in the above diagram that counts the track number is loaded with the number of tracks with each write to LDIBI (it is not loaded by writes to LDICI).
Five-bit track register 334 specifies a number from 0 to 31 which is output on five-bit bus line 340 and provided to down-counter 342. Counter 342 is decremented on each DMA cycle and reset on count zero via inputs 344 and 346, respectively. An enabling output signal from counter 342 to decoder 350 causes the MSB's of counter 335 to be cleared via R[16:9] outputs represented schematically on line 348. The limit on which outputs 348 are cleared is defined by input 352 from track size register 336, which defines the boundary bit between MSBs (track number) and LSBs (track size). The designated R inputs 348, when enabled, are provided to the clear inputs of corresponding flip-flops 331 via ORgates 358.
Similarly, size register 336 provides a three-bit track size signal on line 354 to decoder 356 which, in turn, provides a 3:8 bit decoded output S[16:9] on eight-bit bus 360. The output signal on line 360 increments the LSBs of counter 335 to address the next block of memory corresponding to the next group of tracks. The LSBs of counter 335 are incremented via lines 360 and corresponding multiplexers 362.
B. Local Memory Control PIN Summary.
Figure 7 provides a summary of the external pins and functions for local memory control module 8.
C. Local Memory Control Register Overview.
1. LMC Byte Data Register (LMBDR).
Address: P3XR+7 read, write
This is an 8-bit port into local memory that is indexed by the LMALI and LMAHI I/O address counter. If LMCI[0] is set to auto-increment mode, then the I/O address counter will increment by one with each access through this port.
2. DMA Control Register (LDMACI).
Index: P3XR+5 read, write; index IGIDXR = 41h
Default: 00h
This register is used to control GF-1 compatible DMA access to local memory.
Figure imgf000258_0001
Figure imgf000259_0001
Figure imgf000260_0002
.
3. LMC DMA Start Address Low Register (LDSALI).
Figure imgf000260_0003
This 16-bit register specifies the lower portion of the GF-1 compatible DMA address counter that points to local memory, A[19:4].
Writes to this register automatically clear A[3:0] of the DMA address counter. See the LMC module's MEMORY INTERFACE section for translations between real addresses and the addresses programmed into the DMA registers based on whether an 8- or 16-bit DMA channel is used.
4. LMC DMA Start Address High Register (LDSAHI).
Figure imgf000260_0001
This specifies the upper and low portions of the GF-1 compatible
DMA address counter that points to local memory 110 via A[23:20] and
A[3:0] for DMA cycles. A[3:0] are automatically cleared during writes to LDSALI for compatibility reasons. It is not legal to start DMA transfers from an odd byte address. See the LMC module's MEMORY INTERFACE section for translations between real addresses and the addresses programmed into the DMA registers based on whether an 8- or 16-bit DMA channel is used.
5. LMC Address Low (LMALI).
Figure imgf000261_0003
This specifies the lower portion of the I/O address counter that points to local memory 110 via, A[l5:0] for programmed I/O cycles. The rest of the address is located in LMAHI; The corresponding data ports are
LMBDR for byte accesses and LMSBAI for 16-bit accesses. The LSB of this register is ignored for 16-bit accesses; it is not possible to write 16-bit data starting at an odd address. If LMCI[0] is set to auto-increment mode, then the I/O address counter will increment by one with each access through LMBDR and by two with each access through LMSBAI.
6. LMC Address High (LMAHI).
Figure imgf000261_0001
This specifies the upper portion of the I/O address counter that points to local memory 110, via A[23:16] for programmed I/O cycles. The rest of the address is located in LMALI; The corresponding data ports are LMBDR for byte accesses and LMSBAI for 16-bit accesses. If LMCI[0] is set to auto-increment mode, then the I/O address counter will increment by one with each access through LMBDR and by two with each access through LMSBAI. If SGMI[ENH] is set to GF-1 compatibility mode, then A[23:20] are reserved.
7. LMC 16-Bit Access Register (LMSBAI).
Figure imgf000261_0002
This is a 16-bit port into local memory 110 that is indexed by the LMALI and LMAHI I/O address counter. If LMCI[0] is set to auto- increment mode, then the I/O address counter will increment by two with each access through this port. The LSB of LMALI is always treated as if it is zero during accesses through this port.
8. LMC Configuration Register (LMCFI).
Figure imgf000262_0002
Figure imgf000262_0001
Figure imgf000263_0001
9. LMC Control Register (LMCI).
Figure imgf000263_0002
10. Local MEM REC/PLAY FIFO Base Address (LMRFAl and LMPFAI).
Figure imgf000263_0003
These registers specify real (byte-oriented) address bits A[23:8] of the local memory record and play FIFOs' base address. Writes to LMRFAl cause the LMRF-offset counter to reset to 0. Writes to LMPFAI cause the LMPF-offset counter to reset to 0.
11. Local Memory FIFO Size (LMFSI).
Figure imgf000264_0001
12. LMC DMA Interleave Control Register (LDICI).
Figure imgf000264_0002
Figure imgf000265_0001
13. LMC DMA Interleave Base Register (LDIBI).
Figure imgf000265_0002
This 16-bit register specifies RLA[23:8] which is ORed with the offset controlled by LDICI. This register specifies real addresses, as described by the LMC module's MEMORY INTERFACE section, regardless of the width of the DMA channel. VII. MIDI AND GAME PORTS MODULE
A. Game Port Overview.
Regerring now to Figs. 1 and 40, the game port module 10 of the circuit C provides the functions found in standard game ports in PCs. These are typically used to interface to up to two joysticks 372 and 374. Each joystick contains potentiometers 376 and 378 for each of the X and
Y directions, respectively, and two function buttons 380 and 382. Input to the circuit C from joysticks 372 and 374 is via four element input lines 384 and 386 to the GAMIN[3:0] and GAMIO[3:0] pin groups. Software uses the game port to determine the X and Y position of each of the joysticks and to determine the state of each of the buttons.
1. The GAMIN Pins.
The four GAMIN pins are internally pulled up through a 6K ohms (nominal; + or - 2K ohms) resistor and their state is passed back to the sysstem control module via Register GGCR described below and schematically included in block 390 in Fig. 1.
2. The GAMIO Pins.
Referring now to Fig. 41, software uses the GAMIO pins to determine the joystick position by: (1) writing to the game port-setting the GAMIO pins 392 to the high-impedance state; and (2) polling the game port to determine the time used to charge the external capacitor 394 through the X and Y potentiometers in the joystick. Time to voltage measurement is made via differential amplifier 402 and flip-flop 404. The threshold voltage for the GAMIO bits is controlled by a DAC 396 called the joystick trim DAC based upon values stored in joystick trim DAC register 398.
The external potentiometers 376, 378 normally ranges from 2.2K to about 100K ohms. The external capacitor 394 is normally 5600 picofarads (pF).
The four GAMIO pins can be in three possible states: ground, high-impedance, and transition-to-ground. These states are illustrated in Fig. 41a.
The Ground State. Most of the time, the GAMIO pins are in the ground state; in this state circuit C drives out a logic level 0.
The High-Impedance State. The GAMIO pins transition to the high-impedance state when software writes to the Game Control Register 390. In this state, the pins are internally compared to the voltage level set by the joystick trim DAC via differential amplifier 402. There is digitally-synthesized hysteresis on the output of the comparator 402 to guarantee that glitches are not sent to the control registers that are driven by comparators 402 due to noisy inputs to the comparators.
The Transition-To-Ground State. This state starts, for a GAMIO pin, when that pin's voltage crosses the value of the joystick trim DAC 396. At this point, the GAMIO control flip-flops 404 are cleared and the voltage of the pin is brought down to ground. With a 5600 picofarad load, the current for each pin is limited to no more than 18 mA during this transition (i = C dv/dt). The transition time is no greater than 2 microseconds. At the conclusion of the transistion state, the digital value of the GAMIO bit is reported to the host CPU via game control register 390.
Suspend Mode. When in suspend mode (see power consumption modes in the system control module), the GAMIO pins 392 are forced into the high-impedance state so that no current is drawn from the joystick resistors. After exiting suspend mode, the pins will immediately be placed in the transition to ground mode until they reach the ground state to be ready for the next write to the game port.
3. The Joystick Trim DAC.
The joystick trim DAC 396 is a 5-bit DAC that ranges linearly. The digital input to the joystick trim DAC 396 is static; it is set by a register, controlled by the SBI 14, called the Joystick Trim DAC Register 398.
Suspend Mode. When in suspend mode, or if the ports module 10 has been disabled by PPWRI (see power consumption modes in the system control module), the conventional resistor ladder that is used in the DAC design is disabled from consuming current.
B. MIDI Port Overview.
MIDI (Musical Instrument Digital Interface) is a standard created by the music industry that includes a low-performance local area network (LAN) specification and a description of the data that is passed onto the LAN (this data is geared toward controlling musical instruments such as synthesizers). The MIDI port on the circuit C can receive and transmit serial data at digital levels; external circuitry is required to interface these to the MIDI LAN.
Referring now to Fig. 42, the MIDI port 10a includes a UART 412 for serial transfers and a receive FIFO 414. One embodiment of a UART/FIFO configuration is described in U.S. Pat. No. 4,949,333 by Gulick, et al., entitled Enhanced Universal Asynchronous Receiver-Transmitter, assigned to the common assignee of the present invention, which is incorporated herein for all purposes. To transmit MIDI data, software writes the to-be-transmitted byte to the MIDI Transmit Data Register 410 (GMTDR). To read MIDI data that was received by UART
412, it reads the MIDI Receive Data Register 416 (GMRDR). There is a 16-byte FIFO 414 between UART 412 and the MIDI Receive Data Register 416.
The circuit C can be programmed to generate interrupts to the SBI 14 as a result of either data entering the MIDI Receive Data Register 416 or data finishing the process of being transmitted.
1. The MIDI UART.
The MIDI interface 10a is based on a Motorola MC685O-compatible UART 412 that operates at 31.25KHz +/- 1%. The format for the data received and transmitted is illustrated in Fig. 43.
UART 412 operates asynchronously. The start bit is a logic 0; the stop bit is a logic 1. No other programmable options are supported.
2. The MIDI Receive FIFO and Register.
Referring again to Fig. 42, a 16-byte FIFO 414 interfaces between UART 412 and the MIDI Receive Data Register 416. When the MIDI
Receive Data Register 416 contains data, an interrupt is generated (if it is enabled). Interrupt generation is discussed in the system control module portion above. When register 416 is read by software, the interrupt is cleared. If more MIDI data is received before this byte is read, the new data is placed in FIFO 414. If, after the MIDI Receive Data
Register 416 is read, FIFO 414 contains more data, the next byte is transferred from FIFO 414 to register 416 and another interrupt is generated. Thus, the IRQ pin assigned the MIDI interrupt will transition from high to low when the data is read and then transition from low to high immediately after, as the data is passed from FIFO 414 to register 416. The inclusion of FIFO 414 increases the maximum allowable interrupt latency from about 320 microseconds to 5.44 milliseconds. Data can also be placed directly into the MIDI receive FIFO via software with GMRFAI.
3. MIDI Loop Back Logic.
Referring now to Fig. 42, MIDI Port 10a includes loop back logic 418 to provide the option to loop the data on MIDITX line 420 directly back into the MIDIRX line 422. This is controlled by a bit in the Mix Control Register (UMCR) described in the system control section above. When in loop-back mode, the MIDITX 424 pin still functions to transmit the looped data to external devices. However, the MIDIRX input 426 is disabled from receiving data.
C. MIDI and Game Ports PIN Summary.
Figure imgf000269_0001
D. MIDI and Game Ports Register Overview.
1. Game Control Register (GGCR).
Address: 201h write
A write of any value to this register causes all four of the GAMIO pins 392 to go into the high-impedance state so that the capacitor-charging cycle can begin and the joysticks' X-Y positions can be determined.
Figure imgf000269_0002
Figure imgf000270_0002
2. Joystick Trim DAC Register (GJTDI).
Figure imgf000270_0001
3. MIDI Control Register (GMCR).
Figure imgf000270_0004
Figure imgf000270_0003
Figure imgf000271_0002
The reset MIDI port command resets all the bits provided in GMSR, the receive FIFO 414, the GMTDR and the MIDI transmit-receive UART 412. It does not reset the GMRDR. This command stays active until another I/O write changes GMCR[1:0] to other than [1,1]. This field is implemented with only one flipflop with combinatorial logic in front to decode the state.
4. MIDI Status Register (GMSR).
Figure imgf000271_0001
Figure imgf000272_0001
5. MIDI Transmit Data Register (GMTDR).
Address: P3XR+ 1, write
Writing to this register causes the 8-bit value written to be serially transmitted via UART 412 to the MIDITX pin 424 in MIDI data format.
6. MIDI Receive Data Register (GMRDR).
Address: P3XR+ 1, read
Default: FFh
This register 416 contains the 8-bit value received in MIDI data format from the MIDIRX pin 426, into the UART 412. If there is no data in the MIDI Receive FIFO 414, the value will not change after being read. If there is unread data in MIDI Receive FIFO 414, then next byte in FIFO 414 is transferred to this register after the read cycle.
7. MIDI Receive FIFO Access Register (GMRFAI).
Figure imgf000272_0002
Figure imgf000273_0004
VIII. SPECIFICATIONS
A. Electrical Specification.
ABSOLUTE MAXIMUM RATINGS OPERATING RANGES
Figure imgf000273_0001
PIN GROUPS
Figure imgf000273_0002
1. 5 Volt Specifications.
DC CHARACTERISTICS, VCC = 5 VOLTS
Figure imgf000273_0003
Figure imgf000274_0001
MAXIMUM DRIVE TABLE FOR Vol, Voh SPECIFICATIONS, VCC = 5 VOLTS
Figure imgf000274_0002
2. Volt Specifications.
DC CHARACTERISTICS, VCC = 3.3 VOLTS
Figure imgf000274_0003
MAXIMUM DRIVE TABLE FOR Vol, Voh SPECIFICATIONS, VCC = 3.3 VOLTS
Figure imgf000275_0001
The foregoing disclosure and description of the invention are illustrative and explanatory thereof, and various changes in the circuit elements, specifications, connections and implementation details as well as operational methods may be made without departing from the spirit of the invention.

Claims

1. A monolithic integrated circuit for providing audio enhancement for a host personal computer system of the type including a central processor, system memory and a processor-accessible bus for transferring data, control and address signals within the system, said monolithic integrated circuit comprising:
a system control module for providing an interface to a bus accessible by the processor;
a coding and decoding module for providing analog-to-digital and digital-to-analog signal conversion; said coding and decoding module further comprising:
analog input and analog output circuits for receiving and transmitting analog signals from and to external sources and destinations respectively; and
a digital audio input and digital audio output circuit for receiving and transmitting digital audio data from and to said system control module; and
a digital audio signal synthesizer module for generating digital audio signals.
2. The integrated circuit of claim 1, wherein said system control module further comprises:
a register data bus for distributing data throughout said integrated circuit, said register data bus being in communication with each of said modules.
3. The integrated circuit of claim 2, wherein said register data bus further comprises an external bus interface circuit to provide data, control and address connection to the processor-accessible bus.
4. The integrated circuit of claim 1, wherein said system control module further comprises:
an interrupt circuit for generating and managing processor interrupt signals in response to circuit requirements. 5. The integrated circuit of claim 1, wherein said system control module further comprises:
a direct memory access circuit for generating and managing direct memory access request and acknowledge signals in response to circuit requirements.
6. The integrated circuit of claim 1, wherein said system control module further comprises:
a plurality of integrated circuit control registers for storing data, control and status bits which reflect or control the status of various circuit operations.
7. The integrated circuit of claim 1, wherein said system control module further comprises an internal clock circuit for receiving an external oscillator input signal and providing an output circuit clock signal.
8. The integrated circuit of claim 7, wherein said internal clock circuit further comprises a clock stabilization circuit, said stabilization circuit including a means for disabling said circuit clock signal during periods when the external oscillator signal is degraded.
9. The integrated circuit of claim 8, wherein said clock stabilization circuit comprises an oscillator stabilization circuit for detecting the condition of the external oscillator signal and generating a clock control signal representative of the state of the external oscillator signal; and
a clock control circuit adapted to respond to said clock control signal to enable or disable the circuit clock signal.
10. The integrated circuit of claim 1, wherein said synthesizer module further comprises:
a digital signal transfer circuit for transferring synthesized digital audio data to said coding and decoding module.
11. The integrated circuit of claim 1, wherein said synthesizer comprises:
means for generating digital audio data for a plurality of voices;
means for combining said digital data for said voices into a composite digital audio signal;
a plurality of programmable synthesizer voice control registers; and
means for varying the frequency of each voice in response to the state of said programmable registers.
12. The integrated circuit of claim 1, wherein said synthesizer module further comprises:
a data input circuit for acquiring audio signal data from an external source.
13. The integrated circuit of claim 12, wherein said synthesizer module further comprises a memory circuit for temporarily storing digital audio data.
14. The circuit of claim 1, further comprising:
a game port module, said game port module including: an analog input circuit for receiving game control signals from external devices;
an analog-to-digital conversion circuit for converting analog input signals to digital signals.
15. The circuit of claim 1, further comprising a musical instrument digital interface module for providing data communication between said circuit and external devices.
16. The circuit of claim 1, further comprising:
a local memory control module for interfacing said integrated circuit directly with external memory devices.
17. The circuit of claim 16, wherein said local memory control module includes a memory interface circuit for generating address and control signals for enabling data transfer between said integrated circuit and external memory devices.
18. The circuit of claim 17, wherein said memory interface circuit includes means for interfacing with external random access and read only memory devices.
19. The circuit of claim 18, wherein said local memory control module includes logic circuitry for defining independent memory cycles of random access or read only memory accesses, and a control circuit for multiplexing address, control and data communication between said integrated circuit and said external memory devices over common conductors.
20. The circuit of claim 17, wherein said memory interface circuit further comprises:
a serial data communication circuit for receiving serial data from an external memory device, and logic circuit for generating control signals for the external memory device.
21. The circuit of claim 17, wherein said local memory control module further comprises:
a state machine for defining and controlling time periods in which selected modules of said integrated circuit are permitted access to the external memory devices.
22. The circuit of claim 21, wherein said system control module includes a memory access mode control register and a mode control signal generation circuit for generating one or more memory mode control signals, and wherein said state machine includes logic circuitry for generating delay states to provide for expanded time periods of access to external memory devices in response to an expanded mode control signal.
23. The circuit of claim 17, wherein said memory interface circuit includes a circuit for generating refresh signals for external dynamic random access memory devices.
24. The circuit of claim 23, wherein said integrated circuit includes a register controlled power-down signal generation circuit to conserve energy, and said refresh circuit includes a logic circuit responsive to the power-down signal to provide refresh signals at a reduced rate.
25. The circuit of claim 17, wherein said memory interface circuit includes address definition registers for defining the begin and end addresses for a block of memory included in an external memory device, and an automatic address generation circuit to generate sequential address signals from the beginning to the end of the defined block.
26. The circuit of claim 17, wherein said local memory control module includes:
an interrupt circuit for generating interrupt request signals for the host system processor;
means for receiving data from the host memory; and means for transferring the received data to the external memory devices.
27. The circuit of claim 26, wherein said local memory control module includes:
direct memory access means for generating direct memory access request signals for the host system central processing unit; means for receiving data from the host system memory under direct memory access control; and
means for transferring the data from the host system memory to the external memory devices.
28. The circuit of claim 27, wherein said direct memory access means includes means for interleaving data received from the host system memory as it is stored in the external memory devices.
29. The circuit of claim 17, wherein said memory interface circuit includes means for enabling eight or sixteen bit accesses to external memory devices.
30. The circuit of claim 17, wherein said memory interface circuit includes means for generating address and control signals to define first-in/first-out registers in the external memory devices.
31. The circuit of claim 2, wherein said register data bus includes two eight-bit bus elements, and said system control module includes means for enabling eight or sixteen bit input/output accesses between said integrated circuit and the host system.
32. The circuit of claim 1, wherein the analog signal input and output terminals of said circuit are segregated from digital input and output terminals.
33. The circuit of claim 1, wherein a system power input terminal and a system ground input terminal are provided for each sensitive analog signal terminal of said integrated circuit.
34. The circuit of claim 7, wherein said internal clock circuit comprises a digital clock generation circuit for providing a first timing signal for digital circuit operations and an analog clock generation circuit for providing a second timing signal for analog circuit operation, wherein said second timing signal is independent of said first timing signal.
35. The circuit of claim 1, wherein said integrated circuit includes a plurality of addressable registers and said system control module includes means for enabling direct accesses to circuit registers by an external processor or control circuit.
36. The circuit of claim 1, wherein said system control module includes a buffering circuit for buffering input and output signals communicated between said integrated circuit and the processor-accessible bus.
37. The circuit of claim 36, wherein said buffering circuit includes means for delaying subsequent input/output operations between said integrated circuit and the processor-accessible bus until prior buffered input/output operations have been completed.
38. A stereo audio coder-decoder (CODEC) circuit, comprising:
(a) an analog mixer circuit having a plurality of inputs and outputs;
(b) a digital-to-analog conversion circuit, having at least one input and one output, and having a multi-stage interpolation filter circuit, a noise shaper circuit and a semi-digital FIR filter circuit, whereby said at least one output is connected to an input of said analog mixer circuit;
(c) an analog-to-digital conversion circuit, having at least one input and one output, and having a fourth order sigma-delta modulator circuit, a multi-stage digital decimation filter circuit and a digital compensation circuit, whereby said at least one input is connected to an output of said analog mixer circuit;
(d) data format conversion circuitry connected to said at least one input of said digital-to-analog conversion circuit and to said at least one output of said analog-to-digital conversion circuit;
(e) on-chip memory, for storing digital audio signals, whereby said data format conversion circuitry is connected to said on-chip memory and provides data compression/decompression operations on data being input or output to or from said on-chip memory; and wherein said digital-to-analog and said analog-to-digital conversion circuits are capable of operating at independently
programmable sample rates.
39. The CODEC of claim 38, further comprising a serial transfer control circuit connected to said on-chip memory.
40. The CODEC of claim 38, further comprising a clock generation circuit for selectably generating independent clock signals for controlling the sample rate at which said digital-to-analog circuit and said analog-to-digital circuit operate.
41. The CODEC of claim 38, further comprising an audio signal zero crossing detection circuit for controlling the amplitude of signals input to or output from said analog mixer circuit.
42. The CODEC of claim 38, further comprising a circuit for interleaving data being input to an external system memory from said on-chip memory, or interleaving being retrieved from said external system memory before said data is input to said on-chip memory.
43. The CODEC of claim 39, wherein said serial transfer control circuit provides bi-directional serial data between an external DSP and said on-chip memory.
44. The CODEC of claim 38, further comprising a synthesizer data digital-to-analog conversion circuit having an input and an output, where said output of said synthesizer data digital-to-analog conversion circuit is connected to an input to said analog mixer.
45. The CODEC of claim 38, further comprising off-chip local memory, wherein said local memory is connected to said on-chip memory.
46. The CODEC of claim 45, wherein a digital data path exists between said off-chip local memory and an external DSP.
47. The CODEC of claim 38, wherein said CODEC provides control signals for an external CD-ROM interface.
48. The CODEC of claim 38, further comprising a non-volatile serial memory interface for providing plug-and-play compatibility, where said non-volatile serial memory interface communicates with an external operating system.
49. The CODEC of claim 45, wherein said off-chip local memory is configured as a FIFO for providing data to and receiving data from said on-chip memory. 5O. The CODEC of claim 45, wherein said off-chip local memory is controlled by an on-chip data sample counter, wherein said data sample counter is capable of generating a system level interrupt.
51. The CODEC of claim 38, wherein an analog microphone signal input to said mixer is summed with a plurality of other analog signals input to said mixer.
52. The CODEC of claim 38, wherein an analog path through said mixer exists between an input from said digital-to-analog conversion circuit and said analog-to-digital conversion circuit.
53. The CODEC of claim 38, wherein said analog mixer circuit includes, as an input signal, an analog signal output from a synthesizer digital-to-analog converter circuit.
54. The CODEC of claim 38, wherein said on-chip memory comprises a playback path FIFO and a record path FIFO, wherein each said FIFO includes programmable I/O thresholds for generating a system level interrupt and/or DMA scheduling.
55. The CODEC of claim 38, wherein said analog mixer circuit includes a programmable master volume control circuit for controlling the attenuation/gain of at least one of said plurality of mixer outputs.
56. The CODEC of claim 41, wherein said zero crossing detection circuit further comprises at least one fixed timer for controlling the length of time a comparator circuit, included within said zero crossing detection circuit, remains powered up.
57. The CODEC of claim 40, wherein said clock generation circuit generates selectable clock signals of varying frequency within a first and/or a second frequency range.
58. The CODEC of claim 39, wherein said serial data transfer control circuit includes a first digital data loopback path between said off-chip local memory and said digital-to-analog converter circuit and a second digital data loopback path between said off-chip local memory and said analog-to-digital converter circuit.
59. The CODEC of claim 39, wherein said serial transfer control circuit includes a bi-directional digital data path to an external synthesizer DSP.
60. The CODEC of claim 38, whereby said analog-to-digital conversion circuit and/or said digital-to-analog conversion circuit have independently programmable sample rates, wherein said independently programmable sample rates are changed within one sample period and without disabling the operation of analog circuitry in said analog-to-digital conversion circuit and said digital-to-analog conversion circuit.
61. The CODEC of claim 59, whereby said independently programmable sample rate of said digital-to-analog conversion circuit is variable and programmable over about 256 steps.
62. The CODEC of claim 38, further comprising power management circuitry for selectably suspending power to at least a portion of said CODEC.
63. The CODEC of claim 45, further comprising a local memory control circuit for controlling the data transfer operations between said off-chip local memory and said on-chip memory.
64. The CODEC of claim 38, further comprising a 3.3/5.O volt detect circuit for providing an external system with status information regarding whether said CODEC is operating at 3.3 or 5.0 volts.
65. An audio control circuit of the type including a plurality of analog inputs and outputs, analog signal mixing capability, digital-to-analog conversion circuitry, and analog-to-digital conversion circuitry, comprising: a record signal path including a plurality of analog input signals and an analog-to-digital conversion circuit, a playback signal path including a digital input signal and a digital-to-analog conversion circuit, a circuit for transferring a converted analog signal from the output of said digital-to-analog circuit to an output terminal, and a logic control circuit for independently controlling the sampling rate of said playback signal path digital-to-analog conversion circuit and/or said record signal path analog-to-digital conversion circuit.
66. The CODEC of claim 59, whereby said independently programmable sample rate of said digital-to-analog conversion circuit is variable and programmable over a plurality of frequency steps.
67. An audio control circuit of the type including a plurality of analog inputs and outputs, analog signal mixing capability, digital-to-analog conversion circuitry, and analog-to-digital conversion circuitry, comprising: a record signal path including a plurality of analog input signals and an analog-to-digital conversion circuit, a playback signal path including a digital input signal and a digital-to-analog conversion circuit, on-chip FIFO memory and off-chip local memory for storing digital audio data samples to be input to said digital-to-analog conversion circuit, and a logic control circuit for independently controlling the sampling rate of said playback signal path digital-to-analog conversion circuit and said record signal path analog-to-digital conversion circuit.
68. The CODEC of claim 38, wherein said noise shaper circuit comprises a 5th order sigma-delta modulator.
69. A 1-bit noise shaper circuit, comprising: a fifth order delta-sigma modulator network having a plurality of feedback paths, whereby an n-bit digital signal input to said noise shaper circuit is converted to a 1-bit digital output signal, where n is greater than 1, and wherein the noise stopband for said noise shaper circuit extends beyond the signal band of said noise shaper circuit by at least 0.20 fs.
70. The 1-bit noise shaper circuit of claim 69, wherein said circuit has a signal transfer function of: where X(z) is the digital audio input signal,
whereby
Figure imgf000289_0003
Figure imgf000289_0004
Figure imgf000289_0001
Figure imgf000289_0002
Figure imgf000289_0005
W5=-A5K5, wherein A1-5 are pole positioning feedback coefficients, B1-2 are zero positioning feedback coefficients, and K1-5 are scaling factors.
71. The 1-bit noise shaper circuit of claim 69, wherein said circuit has a noise transfer function of:
Figure imgf000290_0004
whereby
Figure imgf000290_0005
Figure imgf000290_0001
Figure imgf000290_0002
Figure imgf000290_0003
Figure imgf000290_0006
W5=-A5K5, wherein A1-5 are pole positioning feedback coefficients, B1-2 are zero positioning feedback coefficients, and K1-5 are scaling factors.
72. The 1-bit noise shaper circuit of claim 69, wherein said 1-bit output signal includes a phase variation of no greater than about 0.05 degrees.
73. The 1-bit noise shaper circuit of claim 69, whereby said circuit includes a stopband noise edge of about 6 KHz when the sampling frequency of said n-bit digital input signal is about 8 KHz, and a stopband noise edge of about 36 KHz when the sampling frequency of said n-bit digital input signal is about 48 KHz.
74. The 1-bit noise shaper circuit of claim 69, whereby said circuit includes the following zeros and poles:
Figure imgf000291_0002
and
Figure imgf000291_0001
where
Figure imgf000291_0003
and
Figure imgf000292_0002
75. The 1-bit noise shaper circuit of claim 70, wherein scaling factors K1-5 and feedback coefficients B12 have the following values:
k1 = 0.25, k2 = 0.5, k3 = 0.25, k4 = 0.5 and k5 = 0.125; and
B1 = -0.039326867, B2 = -0.0149988.
76. The 1-bit noise shaper circuit of claim 71, wherein scaling factors K2, K4 have the following values:
Figure imgf000292_0001
77. The 1-bit noise shaper circuit of claim 69, wherein said fifth order delta-sigma modulator network has a noise gain factor (K) of less than about 1.85.
78. A noise shaping circuit of the type having an n-bit digital input signal and a 1-bit output signal, comprising:
(a) a first integrator, having an input and an output;
(b) a first summing node, having a plurality of inputs and an output, whereby one input of said first summing node is connected to said output of said first integrator and another input of said first summing node is connected to a first feedback signal path;
(c) a second summing node, having a plurality of inputs and an output, whereby said output of said first summing node is connected to one said input of said second summing node and a second feedback signal path is connected to another said input of said second summing node;
(d) a second integrator, having an input and an output, whereby said input is connected to said output of said second summing node;
(e) a third summing node, having a plurality of inputs and an output, whereby said output of said second integrator is connected to one of said inputs of said third summing node and another of said inputs of said third summing node is connected to a third feedback signal path;
(f) a third integrator, having an input and an output, whereby said input of said third integrator is connected to said output of said third summing node and said output of said third integrator is connected to said second feedback signal path;
(g) a fourth summing node, having a plurality of inputs and an output, whereby one input of said fourth summing node is connected to said output of said third integrator and another input of said fourth summing node is connected to a fourth feedback signal path; (h) a fifth summing node, having a plurality of inputs and an output, whereby one input of said fifth summing node is connected to said output of said fourth summing node and another input of said fifth summing node is connected to a fifth feedback signal path;
(i) a fourth integrator, having an input and an output, whereby said input of said fourth integrator is connected to said output of said fifth summing node;
(j) a sixth summing node, having a plurality of inputs and an output, whereby one input of said sixth summing node is connected to said output of said fourth integrator and another input of said sixth summing node is connected to a sixth feedback signal path;
(k) a fifth integrator, having an input and an output, whereby said input is connected to said output of said sixth summing node and said output of said fifth integrator is connected to said fifth feedback signal path and to a 1-bit signal output node; and
(l) an input summing node, having a plurality of inputs and an output, whereby one of said inputs of said input summing node is connected to said n-bit digital input signal and another input of said input summing node is connected to a seventh feedback signal path and said output of said input summing node is connected to said input of said first integrator.
79. The 1-bit noise shaper circuit of claim 69, wherein said noise stopband extends beyond said signal band of said noise shaper circuit by 0.25 fs.
80. A method of converting an n-bit digital input signal to a 1-bit digital output signal, where n is greater than 1, comprising the steps of:
(a) providing an n-bit digital input signal to the input of a fifth order sigma-delta modulator;
(b) extending the noise stopband of said sigma-delta network by at least 0.20 fs beyond the signal band of said network; and
(c) converting said n-bit digital input signal with said fifth order network to a 1-bit digital output signal.
81. A digital-to-analog conversion (DAC) circuit, comprising:
(a) an multi-stage interpolation filter circuit, having a multi-bit input and a multi-bit output;
(b) a noise shaper circuit, having a multi-bit input and a 1-bit output, said noise shaper input being connected to said multi- bit output from said multi-stage interpolation filter circuit; and
(c) a semi-digital FIR filter circuit, having a digital input and an analog output, with said FIR filter digital input being connected to said 1-bit output from said noise shaper circuit.
82. The DAC circuit of claim 81, wherein a first stage of said multi-stage interpolation filter comprises a linear phase FIR filter having an input, an output and 2N-1 taps, whereby said first stage oversamples the frequency of a digital audio signal input to said first stage to twice the sample rate of said digital audio input signal.
83. The DAC circuit of claim 82, wherein a second stage of said multi-stage interpolation filter comprises a two-phase sinc5 interpolation second stage having an input and an output where said second stage input is connected to said output of said first interpolation stage, and whereby said sinc5 stage oversamples said output of said first interpolation stage to four times the sample rate of said digital audio signal input to said first interpolation stage, wherein said input of said second stage is connected to a first multiplier and to a first delay block, and wherein the output of said first delay block is input to a second delay block and to a second multiplier and, wherein the output of said second delay block is input to a third multiplier, wherein said first multiplier is within a first processing path, said second multiplier is within a second processing path and said third multiplier is within a third processing path, wherein said first, second and third processing paths operate in parallel, and wherein the output of said first processing path is summed with the output of said second processing path in a first summing node, and wherein the output of said third processing path and the output of said second processing path are summed in a second summing node, wherein an oversampler at the output of said second stage selectively samples between the output of said first summing node and said second summing node and outputs the sample so selected to said output of said second stage.
84. The DAC circuit of claim 83, wherein a third stage of said multi-stage interpolation filter comprises a sinc2 interpolation third stage having an input and an output, where said third stage output is connected to said output of said sinc5 second stage, whereby said sinc2 third stage oversamples said output of said sinc5 stage to 64 times the sample rate of said digital audio signal input to said first interpolation stage, wherein said third stage input is input to a double delay block and input to a first summing node, wherein the output of said double delay block is input to said first summing node as a negative input, wherein an output of said first summing node is input to a first single delay block and input to a second summing node, wherein the output of said first single delay block is input to said second summing node, and wherein an output of said second summing node is connected to an oversampler, wherein said oversampler selectively samples the output of said second summing node and inputs each said sample selected to an input of a third summing node at 16 times the clock rate of said third summing node, wherein an output of said third summing node is input to a second single delay block, wherein the output of said second single delay block is fed back to an input of said third summing node and is also output from said third stage as a 64 times oversampled signal.
85. The DAC circuit of claim 82, wherein said linear phase FIR filter first stage further comprises a two-phase filter, wherein a first phase sub-filter generates odd signal samples by multiplying said digital audio input signal by odd coefficients and wherein a second phase sub-filter generates even signal samples by multiplying said digital audio input signal by even coefficients, whereby said sub-filters execute in parallel.
86. The DAC circuit of claim 81, wherein said noise shaper circuit comprises a 5th order sigma-delta modulator.
87. The DAC circuit of claim 86, wherein said 5th order sigma-delta modulator has a signal transfer function of:
, where X(z) is the digital audio input signal,
Figure imgf000297_0001
whereby where for Wk,
Figure imgf000297_0002
Figure imgf000297_0003
Figure imgf000297_0004
Figure imgf000298_0001
Figure imgf000298_0002
W5=-A5K5, wherein A1-5 are pole positioning feedback coefficients, B1-2 are zero positioning feedback coefficients, and K1-5 are scaling factors.
88. The DAC circuit of claim 81, wherein said noise shaper circuit extends the noise stop band of said circuit to at least about 0.7 f .
89. The DAC circuit of claim 81, wherein said noise shaper circuit extends the noise stop band to at least about 0.70 fs.
90. The DAC circuit of claim 81, wherein said noise shaper circuit extends the noise stop band of said noise shaper circuit to about 0.75 fs.
91. The DAC circuit of claim 86, wherein said 5th order sigma- delta modulator has a noise transfer function of:
Figure imgf000298_0003
whereby
Figure imgf000298_0004
Figure imgf000298_0005
Figure imgf000299_0002
Figure imgf000299_0001
Figure imgf000299_0003
W5=-A5K5, wherein A1-5 are pole positioning feedback coefficients, B1-2 are zero positioning feedback coefficients, and K1-5 are scaling factors.
92. The DAC circuit of claim 81, wherein said noise shaper circuit comprises a fifth order sigma-delta network having five integrators, whereby scaling coefficients for two of said integrators are the same value as scaling coefficients for two other of said integrators.
93. The DAC circuit of claim 81, wherein said noise shaper circuit includes a fifth order sigma-delta network having a noise gain factor (K) of less than about 1.85.
94. The DAC circuit of claim 81, wherein said semi-digital FIR filter comprises:
(a) a shift register having a clock input, a 1-bit digital audio signal input and a plurality of data output taps;
(b) a plurality of current sinks;
(c) a plurality of DC offset current sources;
(d) a first and a second current summing operational amplifier, wherein each said current summing operational amplifier has a voltage output node and a positive and a negative input node, wherein said negative input node for each said current summing operational amplifier is a current summing input node which is connected to a different one of said DC offset current sources and is selectively connected to either said current sinks, and said positive input node for each said current summing operational amplifier is connected to a reference voltage, and wherein a first resistor is connected between said current summing node and said voltage output node on said first current summing operational amplifier, and wherein a second resistor is connected between said current summing node and said voltage output node on said second current summing operational amplifier, and wherein the voltage on said voltage output node on each said current summing operational amplifier is related to the value of said current sinks selectively connected to said current summing node for each said current summing operational amplifier; and
(e) an operational amplifier, having a single ended voltage output node and a positive and a negative voltage input node, wherein said negative voltage input node is connected through a third resistor to the voltage output node of said first or second current summing operational amplifier and said positive voltage input node is connected through a fourth resistor to the voltage output node of said other current summing operational amplifier, and a fifth resistor is connected to a reference voltage, and wherein a sixth resistor is connected between said negative voltage input node and said single ended voltage output node, whereby the voltage on said single ended voltage output node is related to the value of said current sinks selectively connected to said current summing node for each said current summing operational amplifier.
95. A method of converting an n-bit digital signal to an analog signal, comprising the steps of:
(a) inputting said n-bit signal to a multi-stage interpolator filter circuit;
(b) interpolating said input n-bit digital signal to 64 times the sample rate of said n-bit signal;
(c) outputting said interpolated signal to a noise shaper circuit;
(d) converting said interpolated signal to a 1-bit output signal;
(e) inputting said 1-bit output signal to a semi-digital FIR filter circuit; and
(f) converting said 1-bit signal to an analog output signal.
96. A method of converting an n-bit digital audio signal to an analog audio signal, comprising the steps of:
(a) inputting said n-bit audio signal to a three-stage interpolator filter circuit;
(b) interpolating said input n-bit digital signal in a first stage interpolator circuit to twice the sample rate of said n-bit digital audio signal;
(c) outputting said first stage interpolated signal to a second stage interpolator circuit;
(d) interpolating said first stage interpolated signal to four times the sample rate of said n-bit digital audio signal;
(e) outputting said second stage interpolated signal to a third stage interpolator circuit;
(f) interpolating said second stage interpolated signal to 64 times the sample rate of said n-bit digital audio signal; (g) outputting said third stage interpolated signal to a 1- bit noise shaper circuit;
(h) converting said third stage interpolated signal to a 1- bit signal;
(i) outputting said 1-bit signal to a semi-digital FIR filter circuit; and
(j) converting said 1-bit signal to an analog audio output signal.
97. The method of claim 96, wherein said first stage interpolator circuit comprises a linear phase FIR filter.
98. The method of claim 96, wherein said second stage interpolator circuit comprises a sinc5 filter.
99. The method of claim 96, wherein said third stage interpolator circuit comprises a sinc2 filter.
100. The DAC circuit of claim 94, wherein a first capacitor is connected in parallel with said first resistor and a second capacitor is connected in parallel with said second resistor.
101. The method of claim 96, further comprising the step of:
(k) low pass filtering said analog audio output signal.
102. A sigma-delta modulator for a digital-to-analog converter (DAC) circuit, comprising:
(a) a multi-bit digital input signal; (b) a first multiplexer, having a plurality of inputs and an output, wherein said digital input signal is connected to one of said inputs of said first multiplexer;
(c) first adder, having a plurality of inputs and an output, wherein said first multiplexer output is connected to one of said plurality of first adder inputs;
(d) a shift register, having an input and an output, wherein said output of said first adder is connected to said shift register input;
(e) a second adder, having a plurality of inputs and an output, wherein said shift register output is connected to one of said plurality of second adder inputs; and
wherein said second adder output is provided to a quantizer for output as a 1-bit digital output signal.
103. A digital sigma-delta modulator for converting a multi-bit digital input signal to a 1-bit digital output signal, comprising:
(a) a first device for selecting between said digital input signal and a signal output from a first serial configuration of data registers, wherein said selected signal is provided to a first adder;
(b) a feedback signal and a selected coefficient value being provided to said first adder to be summed with said selected signal;
(c) an output of said first adder being scaled before being provided to a second adder; and
(d) a second selecting device which selects between one of two signals output from a second serial configuration of data registers, wherein said selected one of two signals is provided to said second adder to be summed with said scaled first adder output signal; wherein a 1-bit digital output signal is output from said second adder.
104. The modulator of claim 103, wherein said second adder output is provided to a quantizer.
105. The modulator of claim 104, wherein said quantizer comprises a flip-flop.
106. An oversampling digital sigma-delta modulator for a digital-to-analog converter circuit, comprising:
(a) a multi-bit digital input signal;
(b) a first group of serially connected data registers;
(c) a second group of serially connected data registers;
(d) a first multiplexer which selects between said multi-bit digital input signal and an output signal from a last register in said first group of serially connected data registers, wherein said signal selected by said first multiplexer is provided to an input of a first adder; and
(e) a second multiplexer which selects between an output signal from a last register in said second group of serially connected data registers and an output signal from an intermediate register within said second group of serially connected data registers, wherein said signal selected by said second multiplexer is provided to an input of a second adder;
wherein an output of said first adder is scaled and then provided to another input of said second adder; and
wherein an output of said second adder is provided to a quantizer for output as a 1-bit digital output signal.
107. The sigma-delta modulator of claim 106, wherein said quantizer comprises a flip-flop.
108. The sigma-delta modulator of claim 106, further comprising a coefficient decode circuit, having an input selectively connected to a first or a second data register, and having an output connected to another input of said first adder.
109. The sigma-delta modulator of claim 106, wherein said output of said second adder is also provided to a first register in said second group of serially connected data registers.
110. The sigma-delta modulator of claim 106, wherein said 1-bit digital output signal is provided to a first multiplexer which multiplies said 1-bit signal by a first coefficient and then provides the product of said multiplication as an input to a third multiplexer.
111. The sigma-delta modulator of claim 110, wherein said output signal from said last register in said first group of serially connected data registers is provided also as another input to said third multiplexer.
112. The sigma-delta modulator of claim 111, wherein an output of said third multiplexer is provided as an input to a third adder.
113. The sigma-delta modulator of claim 106, wherein said first and said second group of serially connected data registers each includes at least three data registers.
114. A method of converting a multi-bit digital input signal to a 1-bit digital output signal, using a digital filter, comprising the steps of: (a) providing a set of cascaded integration stages;
(b) providing said set of integration stages with a multi- bit digital input signal and a 1-bit digital output signal;
(c) quantizing said 1-bit digital output signal;
(d) multiplying said quantized 1-bit output signal by a plurality of filter coefficients;
(e) providing said multiplied plurality of coefficients to nodes disposed between individual integration stages within said set of integration stages. 115. The method of claim 114, wherein said step of multiplying is accomplished by 1-bit multiplication.
116. A method of converting a multi-bit digital input signal to a 1-bit digital output signal, comprising the steps of:
(a) providing a sigma-delta modulator filter having a multi-bit digital input signal, a 1-bit digital output signal and a plurality of sets of adders, wherein each set of adders calculates a sum of two data terms;
(b) scaling said sum of two data terms calculated by each said set of adders; and
(c) adding a third data term to said scaled sum of two data terms for each said set of adders.
117. The method of claim 116, wherein said step of scaling for at least one said set of adders is accomplished by shifting said sum of two data terms.
118. The method of claim 116, further comprising the steps of quantizing said 1-bit digital output signal.
119. The method of claim 118, further comprising the step of multiplying said quantized 1-bit digital output signal by at least one filter coefficient to generate at least one filter product.
120. The method of claim 119, wherein at least one of said data terms being summed in at least one of said sets of adders comprises at least one said filter product.
121. The method of claim 116, further comprising the steps of:
(d) providing at least one additional single adder; and
(e) calculating a filter product with said at least one additional single adder by multiplying a feedback filter coefficient by a data feedback term output from an integration stage included in said sigma-delta modulator filter.
122. A method of converting a multi-bit digital input signal to a 1-bit digital output signal, using a digital sigma-delta modulator, comprising the steps of:
(a) inputting said multi-bit digital input signal;
(b) selecting between said input signal and a signal output from a first group of serially connected data registers;
(c) summing said selected signal with a feedback signal;
(d) scaling said added signal;
(e) summing said scaled signal with a first selected signal output from a second group of serially connected data registers;
(f) outputting said sum of said scaled and first selected signals from said sigma-delta modulator as a 1-bit digital output signal.
123. The method of claim 114, further comprising the steps of selecting between a signal output from said second group of serially connected data registers and a signal output from an intermediate register in said second group of data registers, and providing said selected signal as said signal output from said second group of serially connected data registers to be summed with said scaled signal.
124. The method of claim 115, further comprising the step of summing a selected coefficient value with said selected signal and said feedback signal.
125. The method of claim 115, wherein said step of scaling is accomplished by shifting said summed selected signal a minimum of two bit places.
126. A digital sigma-delta modulator filter, comprising:
(a) a plurality of integration stages, including a filter output;
(b) a multi-bit digital input signal input to a first integration stage in said plurality of integration stages;
wherein said filter output is input to a quantizer, said quantizer including an output;
wherein said quantizer output comprises a 1-bit digital output signal; and
wherein said 1-bit output signal is multiplied by a filter coefficient and then fedback to each of said plurality of integration stages.
127. A method of using a digital wavetable audio synthesizer to create digital delay-based audio effects, comprising the steps of:
(a) generating a first digital audio signal from data stored in external wavetable memory;
(b) storing said first digital audio signal in said synthesizer;
(c) writing said first digital audio signal from said synthesizer to said wavetable memory;
(d) reading said first digital audio signal from said wavetable memory a select time after step (c); and
(e) generating a second digital audio signal, representing a delayed version of said first digital audio signal, from said first digital audio signal read from said wavetable memory.
128. The method of claim 127, further comprising the step of: multiplying said first digital audio signal, said second digital audio signal, or both of said first and second digital audio signals by a volume component.
129. The method of claim 127, further comprising the step of: repeating steps (a)-(e), as desired.
130. The method of claim 129, further comprising the step of: varying said select time of step (d), using LFO generation means, each time steps (a)-(e) are repeated.
131. A method of using a digital wavetable audio synthesizer to create delay-based audio effects, comprising the steps of:
(a) generating a first digital audio signal from data stored in external wavetable memory; (b) storing said first digital audio signal in said synthesizer;
(c) writing said first digital audio signal from said synthesizer to said wavetable memory;
(d) reading said first digital audio signal from said wavetable memory a select time after step (c);
(e) generating a first delay-based digital audio signal from said first digital audio signal read from said wavetable memory;
(f) storing said first delay-based digital audio signal in said synthesizer;
(g) writing said first delay-based digital audio signal from said synthesizer to said wavetable memory;
(h) reading said first delay-based audio signal from said wavetable memory a select time after step (g); and
(i) generating a second delay-based audio signal from said first delay-based digital audio signal read from said wavetable memory.
132. The method of claim 131, wherein before said first delay-based audio signal is written to said wavetable memory, said first delay-based audio signal is multiplied by a volume component.
133. A method of using a digital wavetable synthesizer to create delay-based audio effects, comprising the steps of:
(a) generating a first digital audio signal from data stored in external wavetable memory;
(b) storing said first digital audio signal in said synthesizer;
(c) writing said first digital audio signal from said synthesizer to said wavetable memory; (d) reading said first digital audio signal from said wavetable memory a select time after step (c);
(e) generating a first delay-based digital audio signal from said first digital audio signal read from said wavetable memory;
(f) if the last step was step (e), then storing said first delay-based audio signal in said synthesizer, or if steps (f)-(i) are being repeated, then storing said subsequent delay-based audio signal last generated in step (i) in said synthesizer;
(g) writing said delay-based digital audio signal stored in said synthesizer in step (f) from said synthesizer to said wavetable memory;
(h) reading said delay-based audio signal stored in said wavetable memory in step (g) from said wavetable memory, a select time after step (g);
(i) generating a subsequent delay-based audio signal from said delay-based audio signal read from said external memory in step (h); and
(j) repeating steps (f)-(i), as desired.
134. The method of claim 133, wherein before step (f), said delay-based audio signal to be stored in said synthesizer in step (f) is multiplied by a volume component.
135. The method of claim 133, further comprising the step of: varying said select time of step (h), using LFO generation means, each time steps (f)-(i) are repeated.
136. A digital wavetable audio synthesizer capable of creating delay-based effects, comprising: (a) a storage device for storing digital audio signals generated by said synthesizer;
(b) means for writing said digital audio signals stored in said storage device to an external wavetable; and
(c) means for reading said digital audio signals from said external wavetable a select time after said signals are written to said external memory by said means for writing.
137. The synthesizer of claim 136, wherein said storage device comprises one or more accumulators and said means for writing writes digital audio signals from an accumulator to said external memory.
138. The synthesizer of claim 136, further comprising a FIFO buffer which interfaces between said storage device and said external wavetable, and temporarily stores said digital audio signals from said storage device for said means for writing to write to said external device.
139. The synthesizer of claim 138, wherein said storage device comprises one or more accumulators.
140. The synthesizer of claim 136, wherein said means for writing is further capable of clearing said storage device.
141. The synthesizer of claim 137, wherein said means for writing is further capable of clearing each of said one or more accumulators.
142. The synthesizer of claim 138, wherein said means for writing is further capable of clearing said storage device.
143. The synthesizer of claim 139, wherein said means for writing is further capable of clearing each of said one or more accumulators.
144. A digital wavetable audio synthesizer capable of creating delay-based effects, comprising:
(a) one or more accumulators for accumulating digital audio signals generated by said synthesizer;
(b) a temporary storage device for storing digital audio signals accumulated by said one or more accumulators;
(c) means for writing said digital audio signals stored in said temporary storage device to an external wavetable; and
(d) means for reading said digital audio signals from said external wavetable a select time after said signals are written to said external memory by said means for writing.
145. The synthesizer of claim 144, wherein said temporary storage device is a FIFO buffer.
146. The synthesizer of claim 144, wherein said means for writing is further capable of clearing each of said one or more accumulators.
147. The synthesizer of claim 145, wherein said means for writing is further capable of clearing each of said one or more accumulators.
148. A digital wavetable audio synthesizer capable of creating delay-based effects, comprising:
(a) a plurality of accumulators for accumulating digital audio signals generated by said synthesizer;
(b) a temporary storage device for storing digital audio signals accumulated by said plurality of accumulators; (c) means for writing said digital audio signals stored in said temporary storage device to an external wavetable; and
(d) means for reading said digital audio signals from said external wavetable a select time after said signals are written to said external memory by said means for writing.
149. The synthesizer of claim 140, further comprising:
means for selecting which of said plurality of accumulators is to accumulate particular digital audio signals generated by said synthesizer.
150. The synthesizer of claim 148, wherein said temporary storage device is a FIFO buffer.
151. The synthesizer of claim 148, wherein said means for writing is further capable of clearing each of said plurality of accumulators.
152. The synthesizer of claim 149, wherein said means for writing is further capable of clearing each of said plurality of accumulators.
153. The synthesizer of claim 150, wherein said means for writing is further capable of clearing each of said plurality of accumulators.
154. A low frequency oscillator (LFO) generator for a digital wavetable audio synthesizer, wherein said synthesizer: (i) is at least capable of generating a plurality of digital audio signals during a frame time period, each of said plurality of digital audio signals being generated from wavetable data addressed by said synthesizer; and (ii) includes an address generator which establishes a wavetable data addressing rate for each of said digital audio signals being generated; said LFO generator comprising:
(a) means for calculating a LFO variation value used by said address generator to modulate said wavetable addressing rate for at least one of said digital audio signals being generated;
(b) means for providing said LFO variation value to said address generator; and
(c) means for periodically updating said LFO variation value.
155. The LFO generator of claim 154, wherein said calculating and updating of said LFO variation value depend upon depth, ramp update rate, frequency, LFO update rate, current position, and final position parameters.
156. The LFO generator of claim 155, wherein said parameters are stored in external memory.
157. A low frequency oscillator (LFO) generator for a digital wavetable audio synthesizer, wherein said synthesizer: (i) is at least capable of generating a plurality of digital audio signals during a frame time period; and (ii) includes a volume generator which provides a volume component to each of said digital audio signals being generated; said LFO generator comprising:
(a) means for calculating a LFO variation value used by said volume generator to modulate said volume component for at least one of said digital audio signals being generated;
(b) means for providing said LFO variation value to said volume generator; and (c) means for periodically updating said LFO variation value.
158. The LFO generator of claim 157, wherein said calculating and updating of said LFO variation value depend upon depth, ramp update rate, frequency, LFO update rate, current position, and final position parameters.
159. The LFO generator of claim 158, wherein said parameters are stored in external memory.
160. A low frequency oscillator (LFO) generator for a digital wavetable audio synthesizer, wherein said synthesizer: (i) is at least capable of generating a plurality of digital audio signals during a frame time period, each of said plurality of digital audio signals being generated from wavetable data addressed by said synthesizer; (ii) includes an address generator which establishes a wavetable data addressing rate for each of said digital audio signals being generated; and (iii) includes a volume generator which provides a volume component to each of said digital audio signals being generated; said LFO generator comprising:
(a) means for calculating a vibrato LFO variation value, used by said address generator to modulate said wavetable addressing rate for at least one of said digital audio signals being generated, and a tremolo LFO variation value, used by said volume generator to modulate said volume component for at least one of said digital audio signals being generated;
(b) means for providing vibrato LFO variation values, calculated by said means for calculating, to said address generator and providing tremolo LFO variation values, calculated by said means for calculating, to said volume generator; and (c) means for periodically updating vibrato and tremolo LFO variation values calculated by said means for calculating.
161. The LFO generator of claim 160, wherein said calculating and updating of said vibrato and tremolo LFO variation values depend upon depth, ramp update rate, frequency, LFO update rate, current position, and fined position parameters.
162. The LFO generator of claim 161, wherein said parameters are stored in external memory.
163. A low frequency oscillator (LFO) generator for a digital wavetable audio synthesizer, wherein said synthesizer: (i) is at least capable of generating a plurality of digital audio signals during a frame time period, each of said plurality of digital audio signals being generated from wavetable data addressed by said synthesizer; and (ii) includes an address generator which establishes a wavetable data addressing rate for each of said digital audio signals being generated; said LFO generator comprising:
(a) means for calculating during each said time frame a LFO variation value used by said address generator to modulate said wavetable addressing rate for a select one of said digital audio signals being generated;
(b) means for providing said LFO variation value to said address generator; and
(c) means for periodically updating said LFO variation value.
164. The LFO generator of claim 163, wherein said calculating and updating of said LFO variation value depend upon depth, ramp update rate, frequency, LFO update rate, current position, and final position parameters.
165. The LFO generator of claim 164, wherein said parameters are stored in external memory.
166. A low frequency oscillator (LFO) generator for a digital wavetable audio synthesizer, wherein said synthesizer: (i) is at least capable of generating a plurality of digital audio signals during a frame time period; and (ii) includes a volume generator which provides a volume component to each of said digital audio signals being generated; said LFO generator comprising:
(a) means for calculating during each said time frame a LFO variation value used by said volume generator to modulate said volume component for a select one of said digital audio signals being generated;
(b) means for providing said LFO variation value to said volume generator; and
(c) means for periodically updating said LFO variation value.
167. The LFO generator of claim 166, wherein said calculating and updating of said LFO variation value depend upon depth, ramp update rate, frequency, LFO update rate, current position, and final position parameters.
168. The LFO generator of claim 167, wherein said parameters are stored in external memory.
169. A low frequency oscillator (LFO) generator for a digital wavetable audio synthesizer, wherein said synthesizer: (i) is at least capable of generating a plurality of digital audio signals during a frame time period, each of said plurality of digital audio signals being generated from wavetable data addressed by said synthesizer; (ii) includes an address generator which establishes a wavetable data addressing rate for each of said digital audio signals being generated; and (iii) includes a volume generator which provides a volume component to each of said digital audio signals being generated; said LFO generator comprising:
(a) means for calculating during a given frame time period either a vibrato LFO variation value, used by said address generator to modulate said wavetable addressing rate for a select one of said digital audio signals being generated, or a tremolo LFO variation value, used by said volume generator to modulate said volume component for a select one of said digital audio signals being generated;
(b) means for providing vibrato LFO variation values, calculated by said means for calculating, to said address generator and providing tremolo LFO variation values, calculated by said means for calculating, to said volume generator; and
(c) means for periodically updating vibrato and tremolo LFO variation values calculated by said means for calculating.
170. The LFO generator of claim 169, wherein said calculating and updating of said vibrato and tremolo LFO variation values depend upon depth, ramp update rate, frequency, LFO update rate, current position, and final position parameters.
171. The LFO generator of claim 170, wherein said parameters are stored in external memory.
172. A method of adding vibrato effects to digital audio signals generated by a digital wavetable audio synthesizer, wherein said synthesizer is at least capable of: (i) generating a plurality of digital audio signals during a frame time period, each of said plurality of digital audio signals being generated from wavetable data addressed by said synthesizer; and (ii) for each digital audio signal being generated, addressing wavetable data at a certain rate; comprising the steps of:
(a) generating a low frequency oscillator (LFO) variation value;
(b) modulating said wavetable addressing rate of at least one of said digital audio signals being generated with said LFO variation value; and
(c) periodically updating said LFO variation value used to modulate said wavetable addressing rate.
173. The method of claim 172, wherein said LFO variation value is generated from depth, ramp update rate, frequency, LFO update rate, current position and final position parameters.
174. The method of claim 173, further comprising the step of: retrieving said parameters from external memory before step (a).
175. A method of adding tremolo effects to digital audio signals generated by a digital wavetable audio synthesizer, wherein said synthesizer is at least capable of: (i) generating a plurality of digital audio signals during a frame time period; and (i) providing a volume component to each of said digital audio signals being generated; comprising the steps of: (a) generating a low frequency oscillator (LFO) variation value;
(b) modulating said volume component of at least one of said digital audio signals being generated with said LFO variation value; and
(c) periodically updating said LFO variation value used to modulate said volume component.
176. The method of claim 175, wherein said LFO variation value is generated from depth, ramp update rate, frequency, LFO update rate, current position and final position parameters.
177. The method of claim 176, further comprising the step of: retrieving said parameters from external memory before step (a).
178. A method of adding vibrato and tremolo effects to digital audio signals generated by a digital wavetable audio synthesizer, wherein said synthesizer is at least capable of: (i) generating a plurality of digital audio signals during a given frame time period, each of said plurality of digital audio signals being generated from wavetable data addressed by said synthesizer; (ii) for each digital audio signal being generated, addressing wavetable data at a certain rate; and (iii) providing a volume component to each of said digital audio signals being generated; comprising the steps of:
(a) generating a vibrato low frequency oscillator (LFO) variation value and a tremolo LFO variation value;
(b) modulating said wavetable addressing rate, of at least one of said digital audio signals, with said vibrato LFO variation value, and said volume component, of at least one of said digital audio signals, with said tremolo LFO variation value; and
(c) periodically updating said vibrato LFO variation value used to modulate said wavetable addressing rate and said tremolo LFO variation value used to modulate said volume component.
179. The method of claim 178, wherein said vibrato and tremolo LFO variation values are each generated from depth, ramp update rate, frequency, LFO update rate, current position and final position parameters.
180. The method of claim 179, further comprising the step of: retrieving said parameters from external memory before step (a).
181. A method of adding vibrato and tremolo effects to digital audio signals generated by a digital wavetable audio synthesizer, wherein said synthesizer is at least capable of: (i) generating a plurality of digital audio signals during a given frame time period, each of said plurality of digital audio signals being generated from wavetable data addressed by said synthesizer; (ii) for each digital audio signal being generated, addressing wavetable data at a certain rate; and (iii) providing a volume component to each of said digital audio signals being generated; comprising the steps of:
(a) in a given time frame period, generating a low frequency oscillator (LFO) variation value;
(b) modulating either said wavetable addressing rate or said volume component of a digital audio signal being generated with said LFO variation value; and (c) periodically updating said LFO variation value used to modulate said wavetable addressing rate or said volume component.
182. The method of claim 181, wherein said LFO variation value is generated from depth, ramp update rate, frequency, LFO update rate, current position and final position parameters.
183. The method of claim 182, further comprising the step of: retrieving said parameters from external memory before step (a).
184. A monolithic integrated circuit for providing audio enhancement for a host personal computer of the type including a central processor, system memory and a system bus for transferring data, control and address signals within the system, said monolithic integrated circuit comprising:
a system control module for providing an interface to the system bus, said control module further including:
a register data bus for distributing data throughout said integrated circuit and in communication with system bus decoding circuitry;
interrupt signal control;
a plurality of integrated circuit control registers; and internal clock generation and control circuits; a digital output terminal for transmitting digital signals to external devices;
a digital wavetable audio synthesizer module for generating digital audio signals; said synthesizer module further including:
a digital signal transfer circuit for transferring synthesized digital audio signals to said output terminal; and a data input circuit for acquiring audio signal data from one or more external memory devices; and a local memory control module for interfacing said integrated circuit with external memory devices; said memory control module being in communication with said register data bus for transferring data between said synthesizer module, or said system bus interface, and external memory devices.
185. The circuit of claim 184, further comprising:
a game port module, said game port module including: an analog input circuit for receiving game control signals from external devices;
an analog-to-digital conversion circuit for converting analog input signals to digital signals; and
an interface circuit for providing communication between said register data bus and said analog input circuit and said conversion circuit.
186. The circuit of claim 184, further comprising a musical instrument digital interface module for providing data communication between said register data bus and external devices.
187. The circuit of claim 184, wherein said local memory control module includes a memory interface circuit for generating address and control signals for enabling data transfer between said integrated circuit and external memory devices.
188. The circuit of claim 187, wherein said memory interface circuit includes means for interfacing with external random access and read only memory devices.
189. A monolithic integrated circuit for providing audio enhancement for a host personal computer of the type including a central processor, system memory and a system bus for transferring data, control and address signals within the system, said monolithic integrated circuit comprising:
a system control module for providing an interface to the system bus, said control module further including:
a register data bus for distributing data throughout said integrated circuit and in communication with system bus decoding circuitry;
interrupt signal control;
a plurality of integrated circuit control registers; and internal clock generation and control circuits; synthesizer digital-to-analog conversion circuitry for providing digital-to-analog signal conversion; said synthesizer digital-to-analog conversion circuitry further including:
an analog output terminal for transmitting analog signals to external devices; and
a digital audio signal input circuit for receiving digital audio signals;
a digital wavetable audio synthesizer module for generating digital audio signals; said synthesizer module further including:
a digital signal transfer circuit for transferring synthesized digital audio signals to said synthesizer digital- to-analog signal conversion circuitry; and
a data input circuit for acquiring audio signal data from one or more external memory devices; and a local memory control module for interfacing said integrated circuit with external memory devices; said memory control module being in communication with said register data bus for transferring data between said synthesizer module, said synthesizer digital-to- analog conversion circuitry or said system bus interface, and external memory devices.
190. The circuit of claim 189, further comprising:
a game port module, said game port module including: an analog input circuit for receiving game control signals from external devices;
an analog-to-digital conversion circuit for converting analog input signals to digital signals; and
an interface circuit for providing communication between said register data bus and said analog input circuit and said conversion circuit.
191. The circuit of claim 189, further comprising a musical instrument digital interface module for providing data communication between said register data bus and external devices.
192. The circuit of claim 189, wherein said local memory control module includes a memory interface circuit for generating address and control signals for enabling data transfer between said integrated circuit and external memory devices.
193. The circuit of claim 192, wherein said memory interface circuit includes means for interfacing with external random access and read only memory devices.
194. A digital wavetable audio synthesizer, comprising:
(a) a register array which supplies control parameters for synthesizer operations; (b) wavetable addressing means;
(c) volume generation means; and
(d) signal path means connected to said address generation means and said volume generation means.
195. The digital wavetable audio synthesizer of claim 194, further comprising:
accumulation means connected to said signal path means.
196. The digital wavetable audio synthesizer of claim 194, further comprising:
low frequency oscillator generation means connected to said address generation means and said volume generation means.
197. The digital wavetable audio synthesizer of claim 195, further comprising:
low frequency oscillator generation means connected to said address generation means and said volume generation means.
198. The digital wavetable audio synthesizer of claim 194, further comprising circuitry for interfacing said digital wavetable audio synthesizer to a synthesizer DAC.
199. A digital wavetable audio synthesizer, comprising:
(a) a register array which supplies control parameters for synthesizer operations;;
(b) wavetable addressing means;
(c) volume generation means;
(d) signal path means connected to said address generation means and said volume generation means; and (e) accumulation means connected to said signal path means, including at least one first accumulator for accumulating data to be output from said synthesizer and at least one second accumulator for accumulating data to be written to a wavetable.
200. The digital wavetable audio synthesizer of claim 199, further comprising:
low frequency oscillator generation means connected to said address generation means and said volume generation means.
201. The digital wavetable audio synthesizer of claim 199, further comprising circuitry for interfacing said digital wavetable audio synthesizer to a synthesizer DAC.
202. Accumulation logic for a digital wavetable audio synthesizer, comprising:
(a) a first accumulator for accumulating data to be output from said synthesizer;
(b) a second accumulator for accumulating data to be written to a wavetable; and
(c) means for selectively accumulating data in said first and second accumulators.
203. The accumulation logic of claim 202, wherein said means for selectively accumulating data has the capability of clipping accumulated data when the sum of said data is outside a range of values.
204. Accumulation logic for a digital wavetable audio synthesizer, comprising: (a) first accumulators for accumulating data to be output from said synthesizer;
(b) a second accumulator for accumulating data to be written to a wavetable; and
(c) means for selectively accumulating data in said first and second accumulators.
205. The accumulation logic of claim 204, wherein said first accumulators comprise a left accumulator for accumulating stereo left output data, and a right accumulator for accumulating stereo right output data.
206. The accumulation logic of claim 204, wherein said means for selectively accumulating data has the capability of clipping accumulated data when the sum of said data is outside a range of values.
207. Accumulation logic for a digital wavetable audio synthesizer, comprising:
(a) first accumulators for accumulating data to be output from said synthesizer;
(b) second accumulators for accumulating data to be written to a wavetable; and
(c) means for selectively accumulating data in said first and second accumulators.
208. The accumulation logic of claim 207, wherein said first accumulators comprise a left accumulator for accumulating stereo left output data, and a right accumulator for accumulating stereo right output data.
209. The accumulation logic of claim 207, wherein said means for selectively accumulating data has the capability of clipping accumulated data when the sum of said data is outside a range of values.
210. The accumulation logic of claim 208, wherein said means for selectively accumulating data has the capability of clipping accumulated data when the sum of said data is outside a range of values.
211. Accumulation logic for a digital wavetable audio synthesizer, comprising:
(a) first accumulation means for accumulating data to be output from said synthesizer;
(b) second accumulation means for accumulating data to be written to a wavetable; and
(c) means for selectively accumulating data in said first and second accumulation means.
212. The accumulation logic of claim 211, wherein said means for selectively accumulating data has the capability of clipping accumulated data when the sum of said data is outside a range of values.
PCT/US1995/014254 1994-11-02 1995-11-02 Monolithic pc audio circuit WO1996015484A2 (en)

Priority Applications (2)

Application Number Priority Date Filing Date Title
EP95942395A EP0789868A2 (en) 1994-11-02 1995-11-02 Monolithic pc audio circuit
JP8516131A JPH10509544A (en) 1994-11-02 1995-11-02 Monolithic PC audio circuit

Applications Claiming Priority (18)

Application Number Priority Date Filing Date Title
US33345194A 1994-11-02 1994-11-02
US33446194A 1994-11-02 1994-11-02
US08/334,462 US6047073A (en) 1994-11-02 1994-11-02 Digital wavetable audio synthesizer with delay-based effects processing
US08/333,460 US5585802A (en) 1994-11-02 1994-11-02 Multi-stage digital to analog conversion circuit and method
US08/333,536 US5659466A (en) 1994-11-02 1994-11-02 Monolithic PC audio circuit with enhanced digital wavetable audio synthesizer
US08/333,467 US5589830A (en) 1994-11-02 1994-11-02 Stereo audio codec
US08/333,386 US5598158A (en) 1994-11-02 1994-11-02 Digital noise shaper circuit
US08/333,564 US5668338A (en) 1994-11-02 1994-11-02 Wavetable audio synthesizer with low frequency oscillators for tremolo and vibrato effects
US08/510,139 US5581253A (en) 1995-08-03 1995-08-03 Implementation and method for a digital sigma-delta modulator
US08/333,386 1995-08-03
US08/334,461 1995-08-03
US08/510,139 1995-08-03
US08/334,462 1995-08-03
US08/333,460 1995-08-03
US08/333,564 1995-08-03
US08/333,451 1995-08-03
US08/333,467 1995-08-03
US08/333,536 1995-08-03

Publications (3)

Publication Number Publication Date
WO1996015484A2 WO1996015484A2 (en) 1996-05-23
WO1996015484A9 true WO1996015484A9 (en) 1996-08-22
WO1996015484A3 WO1996015484A3 (en) 1997-02-06

Family

ID=27578814

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/US1995/014254 WO1996015484A2 (en) 1994-11-02 1995-11-02 Monolithic pc audio circuit

Country Status (3)

Country Link
EP (1) EP0789868A2 (en)
JP (1) JPH10509544A (en)
WO (1) WO1996015484A2 (en)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1997049189A1 (en) * 1996-06-20 1997-12-24 Advanced Micro Devices, Inc. Fourth order digital noise shaper circuit
US5928342A (en) * 1997-07-02 1999-07-27 Creative Technology Ltd. Audio effects processor integrated on a single chip with a multiport memory onto which multiple asynchronous digital sound samples can be concurrently loaded
WO1999020006A2 (en) * 1997-10-14 1999-04-22 Crystal Semiconductor Corp. Single-chip audio circuits, methods, and systems using the same
US6373954B1 (en) 1997-10-14 2002-04-16 Cirrus Logic, Inc. Single-chip audio circuitry, method, and systems using the same
JP4363721B2 (en) * 1999-11-12 2009-11-11 オリンパス株式会社 Electronic device manufacturing method and electronic device
WO2019087809A1 (en) * 2017-10-31 2019-05-09 株式会社村田製作所 A/d converter
RU200448U1 (en) * 2020-07-20 2020-10-26 Открытое акционерное общество Омское производственное объединение "Радиозавод имени А.С. Попова" (РЕЛЕРО) DEVICE FOR FORMATION OF DIGITAL COMPLEX STEREO PHONIC SIGNAL
US11522555B1 (en) * 2021-06-14 2022-12-06 Tetramem Inc. Multistage analog-to-digital converters for crossbar-based circuits
US11659329B2 (en) * 2021-08-05 2023-05-23 Infineon Technologies Ag Efficient seamless switching of sigma-delta modulators
CN114553616B (en) * 2022-01-12 2023-11-24 广州市迪士普音响科技有限公司 Audio transmission method, device and system of conference unit and terminal equipment
US11804814B1 (en) 2022-04-13 2023-10-31 Stmicroelectronics S.R.L. Noise shaper fader

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4389915A (en) * 1980-12-18 1983-06-28 Marmon Company Musical instrument including electronic sound reverberation
US4570523A (en) * 1981-07-30 1986-02-18 Nippon Gakki Seizo Kabushiki Kaisha Reverberation tone generating apparatus
US4731835A (en) * 1984-11-19 1988-03-15 Nippon Gakki Seizo Kabushiki Kaisha Reverberation tone generating apparatus
US4706291A (en) * 1985-06-25 1987-11-10 Nippon Gakki Seizo Kabushiki Kaisha Reverberation imparting device
US5000074A (en) * 1988-06-23 1991-03-19 Yamaha Corporation Effect imparting device for an electronic musical instrument or the like apparatus
JP2915452B2 (en) * 1989-11-28 1999-07-05 ヤマハ株式会社 Tone generator
EP0586021B1 (en) * 1990-01-31 1996-11-27 Analog Devices, Inc. Digital noise shaper circuit
US5061925A (en) * 1990-08-22 1991-10-29 Crystal Semiconductor Corporation Phase equalization system for a digital-to-analog converter utilizing separate digital and analog sections
US5166464A (en) * 1990-11-28 1992-11-24 Casio Computer Co., Ltd. Electronic musical instrument having a reverberation
JPH04329714A (en) * 1991-04-30 1992-11-18 Nec Ic Microcomput Syst Ltd Noise shaver
US5243124A (en) * 1992-03-19 1993-09-07 Sierra Semiconductor, Canada, Inc. Electronic musical instrument using FM sound generation with delayed modulation effect
US5297231A (en) * 1992-03-31 1994-03-22 Compaq Computer Corporation Digital signal processor interface for computer system

Similar Documents

Publication Publication Date Title
US5659466A (en) Monolithic PC audio circuit with enhanced digital wavetable audio synthesizer
US6272465B1 (en) Monolithic PC audio circuit
US6047073A (en) Digital wavetable audio synthesizer with delay-based effects processing
US5668338A (en) Wavetable audio synthesizer with low frequency oscillators for tremolo and vibrato effects
US5675808A (en) Power control of circuit modules within an integrated circuit
US5589830A (en) Stereo audio codec
US6246774B1 (en) Wavetable audio synthesizer with multiple volume components and two modes of stereo positioning
US5598158A (en) Digital noise shaper circuit
US5646621A (en) Delta-sigma ADC with multi-stage decimation filter and gain compensation filter
US5585802A (en) Multi-stage digital to analog conversion circuit and method
US5621675A (en) Digital decimation and compensation filter system
US5579004A (en) Digital interpolation circuit for a digital-to-analog converter circuit
US6064743A (en) Wavetable audio synthesizer with waveform volume control for eliminating zipper noise
US6301366B1 (en) Single-chip audio system mixing circuitry and methods
WO1996015484A9 (en) Monolithic pc audio circuit
WO1996015484A2 (en) Monolithic pc audio circuit
US5809466A (en) Audio processing chip with external serial port
US5742532A (en) System and method for generating fractional length delay lines in a digital signal processing system
US7358884B1 (en) Methods and systems for implementing a Digital-to-Analog Converter
CN109547028B (en) Digital-to-analog conversion apparatus, electronic musical instrument, information processing apparatus, and digital-to-analog conversion method
US6710725B1 (en) Acoustic noise suppressing circuit by selective enablement of an interpolator
Brandt Temporal type constructors for computer music programming
WO1999020006A2 (en) Single-chip audio circuits, methods, and systems using the same
JPH06168575A (en) Digital mixer
Kahrs Digital audio system architecture