www.latticesemi.com
1
ip1011_02
Multi-Channel DMA Controller
April 2003 IP Data Sheet
© 2003 Lattice Semiconductor Corp. All Lattice trademarks, registered trademarks, patents, and disclaimers are as listed at www.latticesemi.com/legal. All other brand
or product names are trademarks or registered trademarks of their respective holders. The specifications and information herein are subject to change without notice.
The product described herein is subject to continuing development, and applicable specifications and information are subject to change without notice. Such specifica-
tions and information are provided in good faith; actual performance is not guaranteed, as it is dependent on many f actors , including the user's system design.
Features
■
Selectable 8237 Mode
■
Configurable up to 16 Independent DMA
Channels for Non-8237 Mode
■
Configurable Data Width of 8, 16, 32 or 64
Bits for Non-8237 Mode
■
Configurable Address Width of 16, 24 or 32
Bits for Non-8237 Mode
■
Configurable W ord Count Register Width for
Non-8237 Mode
■
Independent Auto-Initialization of All
Channels
■
Memory-to-Memory Transfers on Single,
Block, and Demand Transfer Mode
■
Memory Block Initialization
■
Software DMA Requests
General Description
The Multi-Channel Direct Memory Access (MCDMA)
Controller is designed to improve microprocessor sys-
tem performance by allowing external devices to trans-
fer information directly from the system memory.
Memory-to-memory transfer capability is also sup-
ported.
The MCDMA Controller core supports two modes: 8237
and non-8237. When the 8237 mode is selected, the
core is compatible with the Intel 8237A DMA Controller
with a few variations. These variations are listed in the
Compatibility Differences with the 8237 Intel Device
section of this document. The 8237 mode supports four
independent channels while the non-8237 mode sup-
ports up to 16 independent channels.
Block Diagram
Figure 1. DMA Controller Core Diagram
CPU Interface
AND
DMA State
Machine
hlda
ready
iowin_n
iorin_n
clk
reset
eopin_n
cs_n hreq
aen
iorout_n
iowout_n
memr_n
memw_n
eopout_n
Priority
Request
Encoder
aout[ADDR_BUS_WIDTH-1:0]
dbout[DATA_BUS_WIDTH -1:0]
dack[N-1:0]
ain[AIN_BUS_WIDTH-1:0]
dreq[N-1:0]
N = Number of channels
Register
Block
dbin[DATA_BUS_WIDTH -1:0]