home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s199 / 1.img / LIMIT.ABL < prev    next >
Encoding:
Text File  |  1986-02-04  |  3.8 KB  |  101 lines

  1. module limit    flag '-r0','-f'
  2. title 'between limits comparator from MMI PAL handbook
  3. Michael Holley   FutureNet - Data I/O  11 Jan 1986'
  4.  
  5.     L1    device 'P16X4';
  6.  
  7.     Clk,OC2,OC1        pin 1,9,11;
  8.     Load,Clear        pin 2,3;
  9.     NE,EQ,LT,GT        pin 12,13,18,19;
  10.     B0,B1,B2,B3        pin 4,5,6,7;
  11.     A3,A2,A1,A0        pin 14,15,16,17;
  12.  
  13.     No,Yes,X,C,Z           = 1, 0, .X., .C., .Z.;
  14.     Bus            = [B3,B2,B1,B0];
  15.     Reg            = [A3,A2,A1,A0];
  16.  
  17.     "These macros are used to create a JEDEC file for the
  18.     "arithmetic PALs such as the 16X4 and 16A4. Valid test
  19.     "vectors can be generated for the device programmer 
  20.     "but ABEL can not simulate these equations.
  21.  
  22.     "Reduction level -r0 must always be used.
  23.  
  24.     "Fixed symbol macros
  25.     A          macro (n) { A?n & !A?n};        " (A)
  26.     NA         macro (n) { B?n & !B?n};        " (/A)
  27.     B          macro (n) { B?n &  A?n};        " (B)
  28.     NB         macro (n) {!B?n & !A?n};        " (/B)
  29.  
  30.     A_OR_B     macro (n) { A?n};            " (A+B)
  31.     NA_OR_B    macro (n) { B?n};            " (/A+B)
  32.     N_OR_NB    macro (n) {!A?n};            " (A+/B)
  33.     NA_OR_NB   macro (n) {!B?n};            " (/A+/B)
  34.  
  35.     A_AND_B    macro (n) { B?n &  A?n & !A?n};    " (A*B)
  36.     NA_AND_B   macro (n) { B?n & !B?n &  A?n};    " (/A*B)
  37.     A_AND_NB   macro (n) {!B?n &  A?n & !A?n};    " (A*/B)
  38.     NA_AND_NB  macro (n) { B?n & !B?n & !A?n};    " (/A*/B)
  39.  
  40.     A_XNOR_B   macro (n) { B?n & !A?n};         " (A:*:B)
  41.     A_XOR_B    macro (n) {!B?n &  A?n};        " (A:+:B)
  42.     
  43. @page 
  44. equations
  45.     enable [LT,GT,EQ,NE] = !OC2;
  46.  
  47.     !LT    = A_AND_NB(3)
  48.         # A_XNOR_B(3) & A_AND_NB(2)
  49.         # A_XNOR_B(3) & A_XNOR_B(2) & A_AND_NB(1)
  50.         # A_XNOR_B(3) & A_XNOR_B(2) & A_XNOR_B(1) & A_AND_NB(0);
  51.  
  52.     !GT    = NA_AND_B(3)
  53.         # A_XNOR_B(3) & NA_AND_B(2)
  54.         # A_XNOR_B(3) & A_XNOR_B(2) & NA_AND_B(1)
  55.         # A_XNOR_B(3) & A_XNOR_B(2) & A_XNOR_B(1) & NA_AND_B(0);
  56.  
  57.     !EQ     = A_XNOR_B(3) & A_XNOR_B(2) & A_XNOR_B(1) & A_XNOR_B(0); 
  58.  
  59.     !NE    = A_XOR_B(3)  # A_XOR_B(2)  # A_XOR_B(1)  # A_XOR_B(0); 
  60.  
  61.     !A3    := NA(3) * !Load  #  NB(3) * Load  #  Clear;
  62.  
  63.     !A2    := NA(2) * !Load  #  NB(2) * Load  #  Clear;
  64.  
  65.     !A1    := NA(1) * !Load  #  NB(1) * Load  #  Clear;
  66.  
  67.     !A0    := NA(0) * !Load  #  NB(0) * Load  #  Clear;
  68.  
  69. test_vectors 'These are for the programmer only'
  70.     ([Clk,OC1,OC2,Load,Clear, Bus] -> [ Reg, LT, EQ, NE, GT])
  71.      [ C , 0 , 0 ,  0 ,  1  ,  X ] -> [ ^h0,  X,  X,  X,  X];" Clear
  72.      [ C , 0 , 0 ,  1 ,  0  , ^h0] -> [ ^h0,  X,  X,  X,  X];" Load
  73.      [ 0 , 0 , 0 ,  0 ,  0  , ^h0] -> [ ^h0, No,Yes, No, No];" 0 = 0
  74.      [ 0 , 0 , 0 ,  0 ,  0  , ^h1] -> [ ^h0, No, No,Yes,Yes];" 1 > 0
  75.      [ 0 , 0 , 0 ,  0 ,  0  ,  X ] -> [ ^h0,  X,  X,  X,  X];" Read
  76.  
  77.      [ C , 0 , 0 ,  0 ,  1  ,  X ] -> [ ^h0,  X,  X,  X,  X];" Clear
  78.      [ C , 0 , 0 ,  1 ,  0  , ^h5] -> [ ^h5,  X,  X,  X,  X];" Load
  79.      [ 0 , 0 , 0 ,  0 ,  0  , ^h0] -> [ ^h5,Yes, No,Yes, No];" 0 = 5
  80.      [ 0 , 0 , 0 ,  0 ,  0  , ^h5] -> [ ^h5, No,Yes, No, No];" 5 = 5
  81.      [ 0 , 0 , 0 ,  0 ,  0  , ^hF] -> [ ^h5, No, No,Yes,Yes];" F > 5
  82.      [ 0 , 0 , 0 ,  0 ,  0  ,  X ] -> [ ^h5,  X,  X,  X,  X];" Read
  83.  
  84.      [ C , 0 , 0 ,  0 ,  1  ,  X ] -> [ ^h0,  X,  X,  X,  X];" Clear
  85.      [ C , 0 , 0 ,  1 ,  0  , ^hA] -> [ ^hA,  X,  X,  X,  X];" Load
  86.      [ 0 , 0 , 0 ,  0 ,  0  , ^h4] -> [ ^hA,Yes, No,Yes, No];" 4 < A
  87.      [ 0 , 0 , 0 ,  0 ,  0  , ^hA] -> [ ^hA, No,Yes, No, No];" A = A
  88.      [ 0 , 0 , 0 ,  0 ,  0  , ^hB] -> [ ^hA, No, No,Yes,Yes];" B > A
  89.      [ 0 , 0 , 0 ,  0 ,  0  ,  X ] -> [ ^hA,  X,  X,  X,  X];" Read
  90.  
  91.      [ C , 0 , 0 ,  0 ,  1  ,  X ] -> [ ^h0,  X,  X,  X,  X];" Clear
  92.      [ C , 0 , 0 ,  1 ,  0  , ^hF] -> [ ^hF,  X,  X,  X,  X];" Load
  93.      [ 0 , 0 , 0 ,  0 ,  0  , ^hE] -> [ ^hF,Yes, No,Yes, No];" E < F
  94.      [ 0 , 0 , 0 ,  0 ,  0  , ^hF] -> [ ^hF, No,Yes, No, No];" F = F
  95.      [ 0 , 0 , 0 ,  0 ,  0  ,  X ] -> [ ^hF,  X,  X,  X,  X];" Read
  96.  
  97.      [ C , 0 , 0 ,  0 ,  0  ,  X ] -> [ ^hF,  X,  X,  X,  X];" Hold
  98.      [ 0 , 1 , 0 ,  0 ,  0  ,  X ] -> [  Z ,  X,  X,  X,  X];" Hi Z
  99.      [ 0 , 0 , 1 ,  0 ,  0  ,  X ] -> [  X ,  Z,  Z,  Z,  Z];" Hi Z
  100. end
  101.