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:
Name Meaning
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