IBV11

Every MINC system came with an IBV11 controller card to connect the IEEE488 (GPIB/HPIB) bus. Unlike the MNCxx modules, the IBV11 was a generic controller – you could also get it in a non-MINC system, and there was a manual documenting how to program it, as well as a maintenance print set including schematics. And even better, all of those are on Bitsavers – no need for reverse engineering! Find the manuals here: https://bitsavers.org/pdf/dec/qbus/IBV11/

In the MINC, the CSR and vectors are here:

IBV11   CSR 171420      VEC 420/424    BR 4

Note that these CSR addresses are different than the IBV11 UG mentions (16015x). The vectors are the same though.

Information sources
Besides the manuals linked above, we also used the XXDP VIBB listing and many text books on GPIB.

Missing information
None identified at the moment.

Implementation status
The latest implementation works well with MINC BASIC and the bus commands implemented by it. It has been used to interface several instruments, ranging from early-80s HP equipment using the R2D2 style, to 90s Philips/Fluke using the pre-SCPI style, to 00s Agilent using the standard SCPI style.

One open question is if parallel polling works; we have been unable so far to test because none of our test instruments supports it.

Interface hardware
It is possible to interface the FPGA directly to the bus, using only some resistors for signal conditioning and limiting the impact of transients on the FPGA. Something like a 100 ohms series resistor on each pin, a 2.2K pullup to 5V, and a 4.7K pulldown to ground. From experience with several test setups, we’ve learned that this will probably work for small setups – like, max two instruments on the bus and limited cable lengths. The interface is out of spec for the FPGA, but it will likely work even so, although we cannot rule out damage to the FPGA I/O circuits.

It is of course far better to use proper driver circuits, and the most obvious choice are the SN75160 and SN75161 ICs from TI. For a long time however those were not in stock with any of the usual suppliers, and TI listed the status as obsolete. But apparently that decision was reversed or at least postponed somewhat after considerable feedback from the marketplace, since TI’s website now shows the parts as being in production, and the usual places have ample stock. So I designed a PCB to interface between the Terasic-style 2×20 pin IO header and GPIB. Here it is:

Probably the most useless, unreadable schematic ever. Here’s the PCB itself:

The 40-pin connector at the top (J6) connects to the FPGA. From there, the signals go to the R1 and R2 100 Ohm DIL resistor networks – with a set of pins for connecting a logic analyzer on J4 and J5, and U1 – a 40-pin footprint for an AVR4809 with its infrastructure (C1, C2, C3, U1JTAG, RSDA, RSCI, TWI, BP1, BP2), but please ignore all that, because at the moment there’s nothing more than a vague outline of a plan for the AVR, and it might never happen.

To the right of the R1 and R2 DIL resistor arrays, there are the RN3 and RN4 2.2k pullup resnets, and the RN1 and RN2 4k7 pulldown resnets. Right of those, you’ll see another pair of logic analyzer connections J1 and J3. Then the real business about the board: IC1 and IC2, the SN75160 and SN75161.

At the edge of the board, you’ll see a 2×13 pin header, and the outline of a GPIB connector. You could install the GPIB connector there, but my current recommendation is that you install the 2×13, and use a 2×13 flatcable to connect to the ‘mincplug’ bulkhead connector PCB I designed – even if you don’t have a bulkhead in mind, it’ll help to keep the FPGA and interface boards from being dragged around by the heavy GPIB cables. And also, if you don’t have real GPIB cables handy, you can use the flat cable to reach your instrument, and also you can probably get away with linking the ‘plug’ boards with 2×13 flatcable to connect more than one – that’s why there are 2 2×13 header footprints on the plug PCB.

Back to the mincgpib board, in the top left corner between the 2×3 U1JTAG and the 2×20 J6, you’ll see a T-shaped connector labelled J7 (and J17). Sorry, the print is small, I’m still learning PCB design. That header is for the power supply to the GPIB components – the pullups and the driver ICs IC1 and IC2. You can choose to use the 5V from the FPGA connector; in that case, connect the pins labeled BUS and J6. Or you can use an external (lab) power supply; connect that to BUS and GND, or J17. The BP2 pin is for future plans – please don’t use that until I’m finished with the MINC backplane design.

Finally on the left edge you’ll see a row of 1×6 pin headers J9 through J15. Those bring out the FPGA I/O pins on the 2×20 that are not used for the GPIB interface. J9 and J10 are laid out for the PMOD SPI standard – note that the pins 4, carrying the PIN1 and PIN2 signals might be input-only depending on your FPGA board. J11 through J15 are laid out for the PMOD I2C standard, so there are only 2 data signals for each connector.

The topmost 1×6, J16, pin 40 is used for the TE talk enable signal towards the SN7516x drivers, and pin 38 is reserved for logic analyzer connection.

The following table gives the mapping between the pins on the 2×20 header, the signal names in the schematic and the corresponding GPIB signal names, and the pins that they map to on the FPGA. For these boards you can also find those already defined in the appropriate board directory QSF file.

Pin #Name in schematicGPIB signalDE10-Lite pinDE0-Nano pin
1PIN1PIN_V10
2P2PIN_W11
3PIN3PIN_V9
4P4PIN_W9
5PD6ATNPIN_V8
6P6PIN_W8
7PD5SRQPIN_V7
8P8PIN_W7
9PD7RENPIN_W6
10P10PIN_V5
11VCC5
12GND
13PA0DIO1PIN_W5
14P14PIN_AA15
15PA1DIO2PIN_AA14
16P16PIN_W13
17PA2DIO3PIN_W12
18P18PIN_AB13
19PA3DIO4PIN_AB12
20P20PIN_Y11
21PA4DIO5PIN_AB11
22P22PIN_W11
23PA5DIO6PIN_AB10
24P24PIN_AA10
25PA6DIO7PIN_AA9
26P26PIN_Y8
27PA7DIO8PIN_AA8
28P28PIN_Y7
29VCC33
30GND
31PD0EOIPIN_AA7
32P32PIN_Y6
33PD1DAVPIN_AA6
34P34PIN_Y5
35PD2NRFDPIN_AA5
36P36PIN_Y4
37PD3NDACPIN_AB3
38P38PIN_Y3
39PD4IFCPIN_AB2
40TETALK ENABLEPIN_AA2

Bill of Material
The following components are needed for the mincgpib and mincplug PCBs:

Ref designationComponentDesc
IC1TI SN75160BNDriver, DIO1:8
IC2TI SN75161BNDriver, GPIB Control
R1, R2BOURNS 4116R-1-101LFRES ARRAY 8RES 100Ohm 16DIP
RN1, RN2BOURNS 4609X-AP1-472LFRESNET 8RES 4k7 9SIP
RN3, RN4BOURNS 4609X-AP1-222LFRESNET 8RES 2k2 9SIP
J2NORCOMP 112-024-113R001SCSI PLUG 24POS R/A SOLDER 
J62×20
J82×13(or 2 for a mincplug setup)
J72×3pull out 2 pins, or use 1×2 for j6-bus
J9-J161×6optional
J1,J31×8optional, logic analyzer
J4,J51×10optional, logic analyzer

This is what a finished board would look like – note that I’ve added the optional J4 and J5, and that the board is set up for using the gpibplug bulkhead connector. Also note J7 with a jumper on the top right two pins (hardly visible in the photo), to select power from the FPGA 5V pin: