Sample file for the 7C331   Use with the SMS PLDASM version 3.0e or later

this implements an asynchronous counter, with additional outputs to
test inversion and combinatorial logic

Device 7c331

 pin1    = 1
 pin2    = 2
 pin3    = 3
 pin4    = 4
 pin5    = 5
 pin6    = 6
 pin7    = 7
 pin9    = 9
 pin10   = 10
 pin11    = 11
 pin12    = 12
 pin13    = 13
 pin14    = 14
/pin15    = 15
/pin16    = 16
/pin17    = 17
/pin18    = 18
/pin19    = 19
/pin20    = 20
/pin23    = 23
/pin24    = 24
/pin25    = 25
/pin26    = 26
/pin27    = 27
/pin28    = 28
 iff15    = 29    ' represents the Q of input flip flops pins 15..28
 iff16    = 30
 iff17    = 31
 iff18    = 32
 iff19    = 33
 iff20    = 34
 iff23    = 35
 iff24    = 36
 iff25    = 37
 iff26    = 38
 iff27    = 39
 iff28    = 40

start

' store the set and reset lines on the neg clock of pin 5
iff15     := ;   ' preset, pin 15 as input clocked by pin 1
iff15.iclk = pin1;

iff16     := ;   ' reset
iff16.iclk = pin1;

'/pin15    /= pin7;  ' if both these lines are included,
/pin16    /= pin9;  ' then there will be an error reported,
                     ' the 7C331 shared mux allows 3 / 4 feedbacks

' three bit synchronous counter with pin4 as async preset and pin 2 as
' sync reset.  Pin 1 is the sync clock.

/pin28   /:= /pin2 *  pin28    ' hold
           +  pin2 * /pin28;   ' count
/pin28.clk =  pin1;
/pin28.set = /iff15;
/pin28.rst = /iff16;

/pin27   /:=  pin2 *  pin28     ' count
           ^  pin27;		' one method to use XOR
/pin27.clk =  pin1 ;
/pin27.set = /iff15;
/pin27.rst = /iff16;

/pin26   /:=  pin2 *  pin27 * pin28;
/pin26.xor =  pin26;		' another method to use XOR
/pin26.clk =  pin1 ;
/pin26.set = /iff15;
/pin26.rst = /iff16;

/pin20    /=  pin28* pin27* pin26;  'carry output

' three bit async ripple counter. Pin 3 is the clock. Pin 2 is async
' reset, pin 4 is async preset.  Output enable is pin 6.

/pin25   /:= /pin25;         ' D == Q
/pin25.clk =  pin3 ;
/pin25.rst = /pin2 ;
/pin25.set = /pin4 ;
/pin25.ena = /pin14;

/pin24   /:= /pin24;
/pin24.clk = /pin25;
/pin24.rst = /pin2 ;
/pin24.set = /pin4 ;
/pin24.ena = /pin14;

/pin23   /:= /pin23;
/pin23.clk = /pin24;
/pin23.rst = /pin2 ;
/pin23.set = /pin4 ;
/pin23.ena = /pin14;

/pin19    /= pin23 *pin24 *pin25;

end;
