IOBRIDGE IMPLEMENTATION DESCRIPTION
IOBRIDGE IMPLEMENTATION DESCRIPTION
IOBRIDGE IMPLEMENTATION DESCRIPTION
DRAGON PROJECT — FOR INTERNAL XEROX USE ONLY
DRAGON PROJECT — FOR INTERNAL XEROX USE ONLY
DRAGON PROJECT — FOR INTERNAL XEROX USE ONLY
IOBridge: Implementation Description
A companion document to the IOBridge design file
Jean-Marc Frailong
Dragon-86-xx Written September 4, 1986 Revised Month, Year
© Copyright 1986 Xerox Corporation. All rights reserved.
Abstract: This document describes in detail the internal implementation of the IOBridge chip for the June87 machine. It is intended as a companion document for the full design description file.
Keywords: IOBridge, Implementation, DynaBus, June87
FileName: [Indigo]<Dragon>IOBridge>IOBImplementationDoc.tioga, .interpress
XEROX  Xerox Corporation
   Palo Alto Research Center
   3333 Coyote Hill Road
   Palo Alto, California 94304



Dragon Project - For Internal Xerox Use Only
Contents
1. Design decisions
2. Block diagram
3. DynaBus reception
4. DynaBus I/O manager
6. IOBus master interface
7. IOBus slave interface
8. IOBus to Cache & PBus interface
9. IOBus to internal peripherals interface
10. DynaBus output and control
11. Internal peripherals overview
12. Timing peripherals
13. Interrupt management
14. DBus master
15. Other peripherals
16. Odds and ends
Appendix A. Appendix A Title
Appendix B. Appendix B Title
References
ChangeLog
1. Design decisions
The reader is referred to section 1 of the functional description of the IOBridge [1] for all details on the IOBridge functional specifications as seen from the outside world, including all signals and timing specifications. The remainder of this section is devoted to explaining and justifying the design choices that were made.
In the remainder of this document, we will refer to halfwords as 16-bit quantities and words as 32-bit quantities. Unless otherwise specified, bit ordering will follow Dragon conventions: bit 0 is MSb, byte 0 is MSB (the order will be different in a few places due to the fact that the Intel conventions, used on the SloBridge, use the reverse bit numbering and byte order).
1.1 IOBus interface and protocol
The IOBridge works on the IOBus both as a master device, to allow DynaBus devices to access IOBus devices, and as a slave device to allow IOBus devices to access DynaBus memory, DynaBus IO devices and internal IOBridge registers.
The IOBus control signals allow the IOBus to be used as a memory bus and as an IO bus with two separate address spaces. Following Intel conventions, only the low 16 bits of the address bus are used in the IO space. IOBus cycles occur in two modes: "slow" cycles are initiated by the RD/WR lines (following the PC/AT signal conventions) whereas "fast" cycles are initiated by S0/S1. Fast cycles allow the IOB to emulate zero wait-state memory.
The IOBridge behaves on the IOBus as a slave device regarding arbitration, i.e. it requests the bus from an external arbiter.
1.2 Handling IOBus requests
IOBus requests may refer either to IOBridge internal registers or to DynaBus memory or I/O space. The first type of request uses IOBus IO space and is straightforward to implement. The second type of request is handled through a cache that follows the DynaBus consistency scheme. This cache is the Dragon processor small cache chip. DynaBus I/O requests are also handled through the cache, which then acts only as a DynaBus master controller. Since the IOBus does not provide enough address and data bits for DynaBus IO, the technique used consists in having an address and a data register describing the request. The DynaBus IO request is started through access to a special location. The same trick is used to access DynaBus memory locations beyond the 16 MB range supported by the processor sitting on the IOBus.
There are multiple reasons justifying a cache as the IOBus to DynaBus mechanism. First, IOBus access quantum is a byte, whereas DynaBus access quantum is a block (32 bytes). Hence, some buffering mechanism is necessary. Since DynaBus does not support byte atomic read-modify-write transactions, this buffer needs to support the DynaBus consistency scheme. As most of the IOBus accesses to DynaBus memory will be made through DMA-type devices, it could be expected that a simple silo mechanism would be sufficient. A major problem with that solution is that the I/O board is expected to use intelligent device controllers that behave as full bus masters and do not only work through standard sequential DMA channels (a good example of such a behaviour is the Intel 82586 Ethernet controller). Having a cache allows the IOBus to DynaBus interface to work without any knowledge of the behaviour of IOBus devices. Even for intelligent device controllers, most of the memory accesses will be made to sequential buffers. The benefits of using the cache will not be in reusing randomly blocks that are in the cache, but in the buffering provided by the cache. Reusing all of the work on the Dragon processor small cache chip is obviously a time and trouble saving solution, since the cache is a complex piece of hardware, due in part to the consistency protocol.
IOBus addresses are physical DynaBus memory addresses. Supporting a translation mechanism similar to the one performed in the Dragon small cache is not feasible because there is no page/mapping fault support on the IOBus. The mapping used in the cache chip is forced to be the idnetity map by using a dedicated address spece known to the map-cache as the identity map. Thus, mapping will never fail. I/O board implementors may want to provide an external full map mechanism, but it will be rather costly.
1.2 Handling DynaBus requests
The IOBridge supports DynaBus requests for three purposes, managing the cache, accessing IOBridge registers and IOBus memory and devices, and debugging. The first type of accesses is completely handled by the cache. The second type of request is handled differently when the reference is to IOBridge internal registers and to IOBus. The third mechanism (Exerciser) is intended to be used only during the debugging of the machine, for testing purposes and possibly as part of the bootstrap code.
IOBus references are basically asynchronous since the latency of the IOBus is unknown. Requests are queued in a FIFO and processed one at a time, then the reply packet is sent back to the originating device. The specifications of the IOBridge indicate that DynaBus devices may access the IOBus memory space with only 24 bits of byte address. This restriction comes from the fact that although the DynaBus supports 48 bit addresses, Dragon processors only emit 32 bit addresses, thus restricting the whole IO address space to 232. As this DynaBus IO address space need to be shared among all the devices on the DynaBus, the largest reasonable subaddress field available for a given device is only 24 bits. This is not expected to be a serious problem, since most devices on the IOBus (including the IOBus debug processor) will only handle 24 address bits. Following Intel conventions, this address is restricted to 16 bits for the IOBus IO address space. Should this restriction prove to be a problem, extending to 24 bits would require only minor modifications.
The specifications also allow for byte and halfword access to the IOBus. Word access is not supported. Halfword access offers a choice regarding byte swapping.
2. Block diagram
To be written.
3. DynaBus reception
The DynaBus reception detects DynaBus I/O requests that are directed to the IOP by checking the transaction type and the address. The requests are queued for later processing into an internal FIFO. The only DynaBus transactions recognized by this schematic are IOReadRequest, IOWriteRequest, BIOWriteRequest. All other DynaBus transactions (including request/reply pairs) are handled through the cache.
3.1 Interface signals
The DynaBus reception interface on one side with the standard DynaBus interface, using the input and control ports, and on the other side with the DynaBus I/O manager. It also has a few general control wires.
The interface with the request FIFO is:
Request: (O) the assembled request to be queued . It contains 81 wires organized as follows:
Cmd: requested command (will be IOWRqst, IORRqst, BIOWRqst). 5 bits
Kernel: 1 if requestor priviledged (kernel mode). 1 bit
IORange: 1 if request is for IOBus IO or internal registers. 1 bit
DeviceID: requestor device ID, to build the reply. 10 bits
Address: 32 low bits of address (top 15 bits always zero)
Data: 32 bits of data
NewRqst: (O) a new entry is to be written into FIFO
FifoFull: (I) Fifo full signal (cancels NewRqst)
The DynaBus interface used is:
Clock: (I) the DynaBus reference clock
HeaderCycleIn: (I) a header has been received and should be processed.
DataIn: (I) DynaBus input bus
The following signals are also public:
Reset: (I) Chip reset, provided by the DBus interface
DevNum: (I) 4 bit device number to decode IOP number in the DynaBus IO address space. This will be connected to the low-order bits of the DynaBus device ID of the IOBridge.
3.2 Data path
The data path contains only a pipelined header register. The header register stores all incoming headers. Its input is decoded to check for header validity and prepare the generation of the request.
3.3 Control
The control consists of the header decoder and two control pipelines for regular request reception and exerciser reception.
3.3.1 Header decoder
The header decoder decodes the command field and the address field of the header to produce the signals that will be stored in the FIFO (all, except ID, Address, Data and Kernel), and also decodes for Exerciser replies (reply packet carrying a specific DeviceID). It is a purely boolean function. It also provides a signal that indicate if the current header is an I/O request to the IOBridge. The implementation is further divided between address decoder, command decoder and Exerciser decoder:
- the address decoder checks that the top 15 address bits are 0, decodes which of the IOBus memory or IOBus IO space is accessed (including the device number verification and broadcast support) and generates the Accept signal if the address presented may be accepted by the IOBridge. The other signals are valid only if Accept is asserted.
- the command decoder decodes the DynaBus command to check if it may concern the IOBridge (Accept) and generates the other useful control signals to be set in the IO request FIFO.
- the Exerciser decoder checks that the current header carries a reply command and an externally specified DynaBus DeviceID.
Finally, the acceptance of address and command decoders are merged into a single signal that indicates if the header should be further procesed.
3.3.2 Regular command pipeline control
The command pipeline control only consists in delaying HeaderCycleIn once to generate signals sampling the data cycle and indicating to the FIFO that a valid request has been received. If the command FIFO is full, any new incoming valid command is just ignored. The requestor will end up in timeout and process the error.
3.3.2 Exerciser pipeline control
The Exerciser pipeline control generates a signal to push 5 consecutive words (1 header, 4 data) into the Exerciser queue when a valid Exerciser reply is detected and the Exerciser reception is enabled. It also generates the Exerciser disable signal.
4. DynaBus I/O manager
The DynaBus I/O manager pulls IO requests from the DynaBus reception FIFO and dispatches them either to the IOBus master interface or to internal peripherals. When the request is completed, it assembles the reply packet to be sent to the DynaBus output and control section. Replying and performing an IO request are pipelined to improve throughput. The DynaBus I/O manager also contains internally all the internal peripherals visible from the DynaBus.
4.1. Interface signals
The DynaBus IO manager interfaces with the IOBus master interface as consumer, and with the DynaBus reception as producer.
The interface with the DynaBus I/O manager is:
RqstOut: (I) the output of the IO request FIFO. It contains 72 bits (refer to 3.1 for description)
ReadRqst: (O) get the next entry from the FIFO
RqstAvail: (I) the FIFO contains a request to be executed. ReadRqst should be asserted only when RqstAvail is asserted.
The interface with the IOBus master and the internal peripherals is:
Address: (O) 24 bits of IOBus address (a byte address, except that when Byte is not asserted, the LSB of the address is 1 for full-word address, 0 for half-word address)
Data: (I/O) 32 bits of data (only the LSBs are used for byte and half-word transfers)
Byte: (O) 1 for byte operation, 1 for half or full word
Kernel: (O) 1 if requestor was in Kernel mode
IO: (O) 1 if request is for IO space, 0 if for memory space
ReadnWrite: (O) 1 for a read operation, 0 for a write operation
Protected: (I) 1 if the access has been deemed invalid (Kernel was not set for a protected location)
Ignored: (I) 1 if address is not implemented
The interface with the IOBus master interface is:
IOBusStart: (O) initiate IOBus cycle
IOBusDone: (I) end of IOBus cycle. IOBusStart and IOBusDone are a simple handshake request/reply.
The interface with the internal peripherals is:
PeripheralsStart: (O) initiate peripherals access cycle
PeripheralsDone: (I) end of peripherals access cycle cycle. PeripheralsStart and PeripheralsDone are a simple handshake request/reply.
The interface with the DynaBus output is:
ReplyHeader: (O) 64 bits of reply header information to be sent
ReplyData: (O) 32 bits of reply data. The top 32 bits (MSB) will be padded with zeroes.
SendReply: (O) initiate DynaBus reply
ReplyBusy: (I) DynaBus output is currently busy, try later
A single data bus links to DynaBus I/O manager to the IOBus master interface and the internal peripherals. This bus is output for a write, input for a read. During a read, either IOBus master or peripherals will drive according to the state of IOBusDone/PeripheralsDone. The value shouldd be used only while one of the Done signals is asserted.
4.2 Data path
The data path consists of a request buffer (if the FIFO does not have stable outputs) and a reply data buffer. The latter is not strictly necessary, but it slightly improves the availability of the internal peripherals since they do not need to maintain their data output while the DynaBus is still processing the previous reply (this is quite negligible, and the design might be better off without this extra pipeline).
4.3 Control
The control is a finite state machine. The FSA is started from the idle state when the request FIFO contains valid data. The data is read into the request buffer, and a IOBus or internal peripheral cycle is initiated depending on the state of the Internal request bit. Either way, the automaton first waits for availability of the interface, initiates the cycle and waits for the reply handshake. When the latter occurs, the reply data, ignored bit and protected bit are stored in the reply data buffer and the cycle is terminated. If the request was ignored or was a broadcast write, the FSA returns to the idle state. If the request was accepted, the FSA polls the DynaBus output for availability and initiates the reply, then returns to the idle state. If reply data is not stored, the FSA must be modified to end the cycle only when the DynaBus output has been initiated, since data are guaranteed during acknowledge time. This alternate solution may result in longer wait time when IOBus accesses internal peripherals. This might be helped by making IOBus cycles higher priority when accessing the internal peripherals. There is no risk of DynaBus thrashing with this solution, since IOBus requests will always find their way between IOBus requests.
5. IOBus master interface
The IOBus master interface manages IOBus requests coming from the DynaBus IO queue. Its basic function is to generate IOBus cycles from internal IOBridge requests (those requests are made by the DynaBus IO manager).
5.1 Signals & interface protocol
The IOBus master interface contains the following wires connected to the requestor:
AddrIn, nBHEIn: address for IOBus (I)
WRData: data to IOBus (I)
RDData: data from IOBus (O) - valid only at end of read cycle
WnR, IO: cycle descriptor (I)
Lock: provides back-to-back cycle capability (keeps HOLD high)
StartIOBusCycle, IOBusCycleDone: handshake signals (I, O)
All those signals are synchronous with CLOCK.
The following signals are shared with the IOBus:
AddrOut, nBHEOut: address for IOBus (O or float)
Data: IOBus data (I/O or float)
nRD,nWR,nIOR,nIOW, nDEN, DTnR: control signals (O of float)
HOLD, HLDA: arbitration control (O, I)
READY: used to lengthen cycle for slow devices (I)
Control of the IOBus master interface is achieved through a handshake protocol using StartIOBusCycle and IOBusCycleDone. The requestor must assert StartIOBusCycle and wait for IOBusCycleDone to be asserted to indicate cycle completion. At that point, the requestor must rescind StartIOBusCycle and wait for IOBusCycleDone to be rescinded in reply before starting a new cycle. This last part of the handshake may be pipelined on following requests by waiting for IOBusCycleDone to be rescinded before asserting StartIOBusCycle.
Input data signals (AddrIn, nBHEIn, WRData, WnR, IO, Lock) must be stable during all the time StartIOBusCycle is asserted. Data read from the IOBus (for read cycles) is stable from assertion of IOBusCycleDone to assertion of StartIOBusCycle for the next cycle (it is actually still valid for some time after that, but the delay is not known outside the IOBus master interface).
5.2 Data path
All input signals are assumed to be latched on the requestor's side. They are not latched inside the IOBus master interface.
Control signals (WnR, IO) are decoded into the demultiplexed IOBus controls with an enable provided by the internal automaton (CEN) to ensure timing of read/write signals. All signals are connected to the output ports through tristate buffers controlled by HLDA.
3.4 IOBus master automaton
This automaton controls the generation of the IOBus master cycles. It has the following state diagram.
7. IOBus slave interface
To be written
8. IOBus to Cache & PBus interface
To be written
9. IOBus to internal peripherals interface
To be written
10. DynaBus output and control
10.1 Overview
The DynaBus output and control section receives packets to be sent on the DynaBus and manages output queueing, DynaBus allocation and output. There are two types of packets sent: IOReadReply packets are created by the DynaBus IO manager as a result of an IOReadRequest transaction, Exerciser packets are produced explicitely by the debug microprocessor on the IOBus.
Each type of packet has its own buffer. IOReadReply packets are always 2 64-bit words long, whereas Exerciser packets are always 5 64-bit words long. The IOB uses the high-priority arbiter port for IOReadReply packets (length = 2 cycles) and the low-priority arbiter port for Exerciser packets (length = 5 cycles).
Due to the pipelining stage in the on-chip DynaBus interface, the 1st and 2nd word of each buffer must be accessible in parallel (refer to timing diagrams for more details).
10.2 Control section
The control section is a finite state automaton implemented using discrete logic and decoded state. The structure of the FSA is obscured by the pipelining of the Grant signal and the DataOut bus (refer to the timing diagram for more details). The automaton has the following states (FFs) and outputs:
NameMeaning
 Idle no active bus cycle, or header word being emitted
 NxtIdle next bus cycle will be Idle
 RIdle no active bus cycle (header word NOT being emitted)
 Rp1 Header (1st word) of an IOReadReply packet being emitted
 Rp2 Data (2nd word) of an IOReadReply packet being emitted
 Ex1 Header (1st word) of an Exerciser packet being emitted
 Ex2 2nd word of an Exerciser packet being emitted
 Ex3 3rd word of an Exerciser packet being emitted
 Ex4 4th word of an Exerciser packet being emitted
 Ex5 5th word of an Exerciser packet being emitted
 HdrCycleOut Header word being emitted
 SelRpHdr Select IOReadReply header for output (OutputSel[0])
 SelRpData Select IOReadReply data (2nd word) for output (OutputSel[1])
 SelExHdr Select Exerciser header for output (OutputSel[2])
 SelExData Select Exerciser data (2nd to 5th word) for output OutputSel[3])
 OutputSel decoded control of output multiplexor (c.f. Selxxx above)
 RpBusy 1 when the IOReadReply buffer is loaded and not yet sent
 RpBAP1 the IOReadReply buffer is being sent
 ExBusy 1 when the Exerciser buffer is loaded and not yet sent
 ExBAP1 the Exerciser buffer is being sent
 AdvExQ 1 to pop out top value from Exerciser buffer
The inputs to the FSA are:
 Grant DynaBus Grant signal
 Len5 DynaBus Length (or PriorityIn) signal
 LdReply pulsed to indicate IOReadReply buffer should be sent
 ArmEx pulsed to indicate Exerciser buffer should be sent
The equations governing the FSA are (= denotes a boolean function, ← a flip-flop):
 Len2 = Len5
 Len5P1 ← Len5
 Len2P1 = Len5P1
 RIdle = Idle.Grant
 NxtIdle = RIdle+Rp2+Ex5
 Idle ← NxtIdle+Reset
 Rp1 = Idle.Len2P1.Grant.Reset
 Rp2 ← Rp1
 Ex1 = Idle.Len5P1.Grant.Reset
 Ex2 ← Ex1
 Ex3 ← Ex2.Reset
 Ex4 ← Ex3.Reset
 Ex5 ← Ex4.Reset
 SelRpHdr = Len2.NxtIdle
 SelRpData = Rp1
 SelExHdr = Len5.NxtIdle
 SelExData = Ex1+Ex2+Ex3+Ex4
 RpBusy ← Reset.(RpBusy.RpBAP1+LdReply)
 RpBAP1 ← RpBusy.SelRpHdr
 ExBusy ← Reset.(ExBusy+ArmEx).(Ex4+ExBAP1)
 ExBAP1 ← Reset.(ExBAP1+SelExHdr.ExBusy).Ex4
 AdvExQ = (Ex1+Ex2+Ex3).ExBAP1
To be written
11. Internal peripherals overview
There are two classes of internal peripherals, synchronous (with CLOCK) and asynchronous. The asynchronous peripherals currently implemented are the permanent clock running at 1MHz and a time-of-day clock (TODC) running at 1Hz. All other peripherals are synchronous.
7.1. General organization of internal peripherals
All internal peripherals are organized around an internal bidirectionnal 32-bit data bus and a small control bus containing an 8-bit peripheral address and read, write and acknowledge signals. The bus is described exactly by the following signals (as seen by a peripheral):
PerData 32 bits, I/O data to and from the internal peripherals
PerAddr 8 bits, I peripheral address
PerAccess 1 bit, I Access (Read or Write) peripheral
PerWR 1 bit, I Write value into peripheral if 1, read if 0
PerAck 1 bit, O Action performed
PerAccess is asserted for exactly 1 CLOCK cycle. PerAck will be asserted for exactly 1 CLOCK cycle when the action has been completed. PerAccess should not be asserted again before PerAck has been asserted. Thus, it is a simple handshake protocol. The delay between PerAccess and PerAck depends on the peripheral addressed. PerData, PerAddr and PerWR are assumed to be correct from the time PerAccess is asserted to the time PerAck is asserted. Output data should be sampled by PerAck.
7.2 Asynchronous peripherals
The asynchronous peripherals support the time control operations. As the frequency of the DynaBus and the IOBus may vary, they use a separate 8 MHz reference clock to mesure elapsed time. Asynchronous peripherals are located at addresses in the range [0..15]. They share a common section that synchronizes PerAccess with the 8 MHz clock (CK8MHz) and generates PerAck and all the control signals needed by the asynchronous peripherals.
The overall schematic for asynchronous peripherals consists in the subschematics described in the next sections, plus elementary decoding logic on the peripheral address.
7.2.1 Assembly
The overall schematic for asynchronous peripherals consists in the subschematics described in the next sections, plus elementary decoding logic to select the correct peripheral.
7.2.2 Asynchronous control: AsyncPeriphCtl.sch
This block of logic synchronizes PerAccess with CK8MHz and generates PerAck and the control signals required by the other subsections. The same logic as in IOBus master interface is use to transform PerAccess into a CK8MHz-related signal that is further demultiplexed into RD and WR. PerAck is generated on the trailing edge of RqDone. The bidirectionnal CLOCK-synchronous PerData bus is converted into a CK8MHz-synchronous AsPerData bus. Output from AsPerData is latched by CK8MHz, then twice by CLOCK to remove possible metastable signals.
7.2.3 Permanent clock: PermanentClock.sch
It only consists of a 3-bit prescaler to get a 1 MHz reference, followed by a 32-bit wraparound counter. Both counters are initialized to 0 on reset. They are not loadable.
7.2.4 Time-of-day clock: TODC.sch
It consists of a 23 bit prescaler that counts up to 7999999 and then back to 0, to transform the 8 MHz clock into 1 1Hz reference. This 1 Hz input is used in a 32-bit seconds counter. Both counters are set to 0 on reset. When the seconds counter is written into, the prescaler is reset to 0.
7.3 Synchronous peripherals
12. Timing peripherals
This block contains all the timing-related peripherals. All those peripherals may be accessed from DynaBus and IOBus. The block contains a clock prescaler generating 1 MHz, 1 kHz and 10 Hz clocks, and 3 counters.
NOTE: The counters are 32-bits long. It is very possible that it will not be possible to run them at 40MHz. There are then two alternate techniques: have the whole timing block be completely asynchronous with DynaBus CLOCK, or introduce pipeline stages every 8 or 16 bits in the counters and block all shared peripherals operations when one of these pipeline FFs is pending.
12.1 Prescaler
The prescaler block synchronizes a reference 8 MHz signal with the DynaBus CLOCK and produces a 1-CLOCK pulse on its leading edge. This results in a synchronous 8 MHz signal, which is divided by 8, producing SCk1MHz, then by 1000 producing SCk1kHz, finally by 100 producing SCk10Hz. A pipeline stage is inserted between each of the dividers to ensure that propagation time does not exceed CLOCK frequency.
12.2 Permanent clock
The permanent clock (FastClock.sch) is simply a 32-bit up-counter with an overflow detection mechanism that raises an interrupt. The counter runs with 1 MHz ticks, synchronous with the DynaBus clock, provided by the prescaler logic. The overflow detection mechanism detects when the counter goes beyond 232-1 and sets an interrupt flip-flop. Writing any value in the permanent clock will erase the interrupt flip-flop. The value of the counter itself cannot be modified by software.
The Busy output allows to quiesce the peripherals automaton when an update is in progress.
The state of the interrupt flip-flop is 0 when no overflow is present. It is set to the Idle state by the Reset signal. Its equations are:
D ← Cout+ Q.~(Select.WRPulse)
NOTE: The initial value of this FF is obtained using a Preset input due to a strange quirk in the Logic library.
12.3 Time of Day clock
The time-of-day clock is simply a 32-bit counter (divided in 8-bit slices to allow IOBus access) that may be read from and written into from both IOBus and DynaBus. The counter counts up every 1/10 second. There is no overflow provision, since the overflow time is large (232/10 seconds is over 13 years). The time of day clock is not reset by the system Reset signal. It must be initialized by software.
Byte enables and TODC select provide S0/S1 for the counters by:
S0 = ~(WRPulse.Select.~ByteEn[i])
S1 = WRPulse.Select
12.4 Timer
13. Interrupt management
The interrupt management block redirects interrupts coming from IOBus devices or from internal sources onto DynaBus I/O writes to the Dragon caches. Whenever the interrupt situation changes, a new DynaBus interrupt packet is sent by simulating a IOBus cycle to the cache with the adequate parameters.
13.1 Signals and interface protocol
The interrupt manager receives 8 interrupt lines from the IOBus side (INTR0-INTR7). The interface to the IOBus to cache interface consists of a handshake SendInterrupt, InterruptSent pair following the standard protocol.
13.2 Internal structure
The external interrupts are sampled twice to synchronize them with the internal clock. The internal interrupts join them at this stage. All interrupt sources form a pseudo-register readable through DynaBus and IOBus. The interrupts are then masked, and a off-to-on edge detector is applied to each of them, producing interrupt pending transmission signals. As long as any of these is on, an interrupt sending cycle is required, and the highest priority interrupt is sent, then the interrupt pending transmission flip-flop is cleared.
To be written
14. DBus master
To be written
15. Other peripherals
To be written
16. Odds and ends
To be written
Appendix A. Appendix A Title
Body
Appendix B. Appendix B Title
Body
ChangeLog
Body