
Intelligent Eight-Channel Communications Controller
—
CD1865
Datasheet
29
NOTE:
The (
) denotes the point at which, if there is no match, the CD1865 determines
not
to pass the ACK
down the daisy chain. It does this for two reasons: first, it is unacceptable to have the ACKOUT*
‘
glitch
’
low; and second, the state machine should be as fast as possible. When the state machine senses an
ACKIN* and match is not valid, it cannot conclude that it should assert ACKOUT*; the ACKIN* may be
for one of the other two service requests levels. It could wait for the results of the other two MATCH
comparators; however, this complicates, and therefore slows down, the response of the state machine.
The reason this complication causes delay is (to implement the logical function
‘
assert ACKOUT* if no
match
’
) it must determine how long to wait before declaring a no-match condition. To implement this
delay function, a synchronous state machine is required, which at a 15-MHz clock, means a delay of
several hundred nanoseconds from ACKIN* to ACKOUT*, instead of the 65 ns currently specified.
Table 3. State Machine Logic
State Name
Output Condition
Comments
IDLE
IF (INTERNAL_REQUEST = 1)
ELSE IF (ACKIN* = 1 & MATCH =1)
ELSE
all outputs inactive
GoTo REQ_ACTIVE
GoTo PASS_
ACK
Stay at IDLE
; normal
‘
resting
’
state
; pass this acknowledge
; wait here
REQ_ACTIVE
IF (ACKIN* = 1 & MATCH =1)
IF (ACKIN* = 1 & MATCH =0)
ELSE
GoTo KEEP_ACK
Stay at REQ_ACTIVE
Stay at REQ_ACTIVE
request asserted
; keep this acknowledge
; wait here, ACK is for some other level (
)
; wait here
PASS_ACK
IF (ACKIN* = 0)
ELSE
GoTo IDLE
Stay at PASS_ACK
ACKOUT* asserted
; return when ACKIN* is gone
; wait here while ACKIN* active
KEEP_ACK
IF (ACKIN* = 0)
ELSE
GoTo IDLE
Stay at KEEP_ACK
INTERNAL_GRANT asserted
; return when ACKIN* is gone
; wait here while ACKIN* active