module addrcomp
title 'Bullwinkle IO Port Address Comparator S. Harrington Fall 94'
addrcomp device 'P22V10';
"Inputs
BCLK pin 1; "only needed for synching SRQ
IOR pin 2;
IOW pin 3;
AEN pin 4;
SA4 pin 5; "PC Bus address lines
SA5 pin 6;
SA6 pin 7;
SA7 pin 8;
SA8 pin 9;
SA9 pin 10;
SW5 pin 23; "from DIP switch
SW6 pin 22;
SW7 pin 21;
SW8 pin 20;
AlmostFull pin 13; "active low from FPGAs
"Outputs
PortSel pin 18;
STAT_EN pin 17; "active low enable for 244 to PC bus
PortWrite pin 16; "IOW with A9:A4 = 0b1SSSS0XXXX (S=SW3:0 inputs)
SRQ pin 14;
"Macros
SA = [SA9,SA8,SA7,SA6,SA5,SA4];
SW = [SW8,SW7,SW6,SW5];
Equations "!=NOT &=AND #=Or $=XOR !$=XNOR
"IO Port Read or Write detected (combinational)
PortSel = SA9 & (SA8!$SW8) & (SA7!$SW7) & (SA6!$SW6) & (SA5!$SW5) & !SA4;
STAT_EN = !(PortSel & !IOR & !AEN);
PortWrite = PortSel & !IOW & !AEN;
"Stall negotiation logic (clocked)
SRQ := !AlmostFull;
SRQ.C = BCLK;
test_vectors (
[IOR,IOW,AEN,SA,SW] -> [PortSel,STAT_EN,PortWrite]
)
"IOR IOW AEN SA SW -> Sel !Rd Wr
[ 1, 1, 1, ^b101000, ^b0100 ] -> [ 1, 1, 0 ];
[ 0, 1, 0, ^b101000, ^b0100 ] -> [ 1, 0, 0 ];
[ 1, 0, 0, ^b101000, ^b0100 ] -> [ 1, 1, 1 ];
[ 1, 0, 0, ^b111000, ^b0100 ] -> [ 0, 1, 0 ];
[ 1, 0, 0, ^b111000, ^b1100 ] -> [ 1, 1, 1 ];
[ 1, 0, 1, ^b111000, ^b1100 ] -> [ 1, 1, 0 ];
test_vectors (
[BCLK,AlmostFull] -> [SRQ]
)
[.C., 1] -> [0];
[.C., 0] -> [1];
end addrcomp