Difference between revisions of "UNIBUS and QBUS termination"

From Computer History Wiki
Jump to: navigation, search
(Write up 'SACK turnaround' issues in detail)
(SACK turnaround: Noise can cause an unused grant)
Line 21: Line 21:
 
So SACK turnaround is therefore ''required'' by ''some'' UNIBUS CPUs, which do not have that circuit; this includes the [[KD11-D CPU]] of the [[PDP-11/04]] and the [[KD11-E CPU]] of the [[PDP-11/34]] (although the optional [[M8264 No-SACK Timeout Module]] can be used on both of these to add that functionality). However, most PDP-11 CPUs (including all QBUS CPUs, such as the [[KDF11 CPUs]]) have it, and will time out unused grants. (This takes somewhat longer than the SACK turnaround mechanism, which is why that is preferred.)
 
So SACK turnaround is therefore ''required'' by ''some'' UNIBUS CPUs, which do not have that circuit; this includes the [[KD11-D CPU]] of the [[PDP-11/04]] and the [[KD11-E CPU]] of the [[PDP-11/34]] (although the optional [[M8264 No-SACK Timeout Module]] can be used on both of these to add that functionality). However, most PDP-11 CPUs (including all QBUS CPUs, such as the [[KDF11 CPUs]]) have it, and will time out unused grants. (This takes somewhat longer than the SACK turnaround mechanism, which is why that is preferred.)
  
How can a device not accept the grant of an interrupt that it requested? For example, if, having requested an interrupt, the device is reset ''just'' as the CPU is granting that interrupt, by the time the grant arrives at the device, it will have 'forgotten' that it was ever requesting an interrupt, and pass the grant on through. If no downstream (on the bus) device is requesting an interrupt, the grant will go unused - hanging a CPU which does not have a grant timeout circuit.
+
How can a device not accept the grant of an interrupt that it requested? There are several possible causes for an unused grant. One possibility is that [[noise]] on a request line will look to the arbitrator (in the CPU) like a valid request. Another possible cause is that if, having requested an interrupt, the device is reset ''just'' as the CPU is granting that interrupt, by the time the grant arrives at the device, it will have 'forgotten' that it was ever requesting an interrupt, and pass the grant on through. If no downstream (on the bus) device is requesting an interrupt, the grant will go unused - hanging a CPU which does not have a grant timeout circuit.
  
 
Machines which do not have a grant timeout circuit will function correctly ''most'' of the time without a terminator with SACK turnaround functionality; they are potentially vulnerable to the 'un-claimed grant' bug described above, though.
 
Machines which do not have a grant timeout circuit will function correctly ''most'' of the time without a terminator with SACK turnaround functionality; they are potentially vulnerable to the 'un-claimed grant' bug described above, though.

Revision as of 16:44, 20 April 2022

UNIBUS and QBUS termination are very similar, since in analog terms the two buses are very similar (e.g. their use of the same transceiver chips, such as DS8641's).

Their terminators do a number of things:

  • provide pullups (so those wired-OR broadcast transmission lines normally float at roughly 3 volts, unless actively driven low by one of the boards plugged into the bus);
  • in some cases, (such as the M9302 UNIBUS terminator‎), they do 'SACK turnaround' (an 'unused' bus grant from the CPU is 'turned around' by the terminator, and returned to the CPU as the SACK signal); this is discussed at greater length below.

The first is not absolutely necessary; this can be seen in small QBUS systems which can get away without it in small configurations. Whether it's needed on particular system is hard to predict, theoretically; the easiest thing is to just try it and see. Note: it may 'work' without it, but not be as reliable as with it.

The second is necessary, but can be provided anywhere on the bus; most UNIBUS/QBUS CPUs do so, with the notable exception of the KD11-D of the PDP-11/04, and the KD11-E/-EA of the PDP-11/34-34A. (In the PDP-11/40, there's an oddball exception: the M981 UNIBUS jumper does it - but that's 'sort of' part of the CPU.)

(Note that the first and second are usually both done by a single set of components.)

SACK turnaround

The full story of the third function, 'SACK turnaround', is somewhat complex. The need for it is, as mentioned, that an 'unused' bus grant, theoretically for a device's interrupt, can, if not 'turned around' by the terminator, can cause the CPU to freeze up. This because if the CPU does not have an 'interrupt grant timeout' circuit, then after such an 'un-needed' grant has been sent out, the CPU can potentially freeze up, waiting for the interrupt bus cycle to come in.

So SACK turnaround is therefore required by some UNIBUS CPUs, which do not have that circuit; this includes the KD11-D CPU of the PDP-11/04 and the KD11-E CPU of the PDP-11/34 (although the optional M8264 No-SACK Timeout Module can be used on both of these to add that functionality). However, most PDP-11 CPUs (including all QBUS CPUs, such as the KDF11 CPUs) have it, and will time out unused grants. (This takes somewhat longer than the SACK turnaround mechanism, which is why that is preferred.)

How can a device not accept the grant of an interrupt that it requested? There are several possible causes for an unused grant. One possibility is that noise on a request line will look to the arbitrator (in the CPU) like a valid request. Another possible cause is that if, having requested an interrupt, the device is reset just as the CPU is granting that interrupt, by the time the grant arrives at the device, it will have 'forgotten' that it was ever requesting an interrupt, and pass the grant on through. If no downstream (on the bus) device is requesting an interrupt, the grant will go unused - hanging a CPU which does not have a grant timeout circuit.

Machines which do not have a grant timeout circuit will function correctly most of the time without a terminator with SACK turnaround functionality; they are potentially vulnerable to the 'un-claimed grant' bug described above, though.

SACK turnaround and CPU hangs

On machines which use the KY11-L to CPU interface (the KD11-D CPU of the PDP-11/04, the KD11-E CPU of the PDP-11/34, and the KD11-EA CPU of the PDP-11/34A), SACK turnaround terminators can hang the CPU if the machine is powered on with a break in the bus grant lines somewhere between the CPU and the terminator - e.g. by someone forgetting to plug in a grant continuity card.

That is because the KY11-L to CPU interface uses SACK for the front panel to signal to the CPU that it should remain halted; if there is a break in a grant line, the resulting 'open' input to the TTL gate monitoring the grant line in the device immediately down-stream from the break will float high, thereby looking like a permanent incoming grant. The device will pass it on, and the SACK turnaround circuit in the terminator will turn it into a permanent assertion of SACK - which will cause the CPU to hang forever once it halts.

(SACK turnaround could potentially be used for a start-up 'safety check' for grant line continuity, where an un-requested - and thus 'un-grabbed' by any device - bus grant from the CPU on start-up is turned around by the terminator; this would verify that the grant line is continuous between the CPU and the terminator. Apparently no CPU does this, though.)