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

  1. module count4a  
  2. title '4-bit counter with 2 input mux
  3. based on an example by Birkner/Coli in the MMI PAL Handbook
  4. Dan Burrier    Data I/O  Redmond WA      16 Mar 1984'
  5.  
  6.     P7022A     device 'P16R4';
  7.  
  8.     Clk,OC                pin  1,11;
  9.     A0,A1,A2,A3,B0,B1,B2,B3        pin  2,3,4,5,6,7,8,9;
  10.     Q3,Q2,Q1,Q0            pin  14,15,16,17;
  11.     CO,I1,I0,CI            pin  12,13,18,19;
  12.  
  13.             H,L,X,Z,C    = 1,0, .X.,.Z.,.C.;
  14.             InputA        = [A3,A2,A1,A0];
  15.             InputB        = [B3,B2,B1,B0];
  16.             Output        = [CO,Q3,Q2,Q1,Q0];
  17.             Mode        = [I1,I0];
  18.  
  19.     Hold,LoadA,LoadB,Incr         = 0,1,2,3;    " define Modes
  20.  
  21. equations    " input multiplexer
  22.  
  23.     !Q0    := (Mode==Hold ) & !Q0
  24.          # (Mode==LoadA) & !A0
  25.          # (Mode==LoadB) & !B0;
  26.  
  27.     !Q1     := (Mode==Hold ) & !Q1 
  28.          # (Mode==LoadA) & !A1 
  29.          # (Mode==LoadB) & !B1;
  30.  
  31.     !Q2     := (Mode==Hold ) & !Q2 
  32.          # (Mode==LoadA) & !A2 
  33.          # (Mode==LoadB) & !B2;
  34.  
  35.     !Q3     := (Mode==Hold ) & !Q3 
  36.          # (Mode==LoadA) & !A3 
  37.          # (Mode==LoadB) & !B3;
  38.  
  39.     " 4 bit counter
  40.  
  41.     !Q0    := (Mode==Incr ) & !CI & !Q0        "Hold if no carry
  42.          # (Mode==Incr ) &  CI &  Q0 ;
  43.  
  44.     !Q1    := (Mode==Incr ) & !CI & !Q1        "Hold if no carry
  45.          # (Mode==Incr ) & !Q0 & !Q1        "Hold if Q0=L
  46.          # (Mode==Incr ) &  CI &  Q0 &  Q1 ;
  47.  
  48.     !Q2    := (Mode==Incr ) & !CI & !Q2        "Hold if no carry
  49.          # (Mode==Incr ) & !Q0 & !Q2        "Hold if Q0=L
  50.          # (Mode==Incr ) & !Q1 & !Q2        "Hold if Q1=L
  51.          # (Mode==Incr ) &  CI &  Q0 &  Q1 &  Q2 ;
  52.  
  53.     !Q3    := (Mode==Incr ) & !CI & !Q3        "Hold if no carry
  54.          # (Mode==Incr ) & !Q0 & !Q3        "Hold if Q0=L
  55.          # (Mode==Incr ) & !Q1 & !Q3        "Hold if Q1=L
  56.          # (Mode==Incr ) & !Q2 & !Q3        "Hold if Q2=L
  57.          # (Mode==Incr ) &  CI &  Q0 &  Q1 &  Q2 &  Q3 ;
  58.  
  59.     !CO     = !CI # !Q0 # !Q1 # !Q2 # !Q3 ;
  60.  
  61. @page
  62. test_vectors  ' test Load A and B'
  63.        ([Clk,OC, Mode, InputA, InputB,CI ] -> Output)
  64.     [ C, L, LoadA,  ^h0  ,  ^hF  ,X  ] -> ^h0;
  65.     [ C, L, LoadB,  ^h0  ,  ^hF  ,L  ] -> ^hF;
  66.     [ C, L, LoadA,  ^h1  ,  ^h7  ,X  ] -> ^h1;
  67.     [ C, L, LoadB,  ^h1  ,  ^h7  ,X  ] -> ^h7;
  68.     [ C, L, LoadA,  ^h2  ,  ^hB  ,X  ] -> ^h2;
  69.     [ C, L, LoadB,  ^h2  ,  ^hB  ,X  ] -> ^hB;
  70.     [ C, L, LoadA,  ^h4  ,  ^hD  ,X  ] -> ^h4;
  71.     [ C, L, LoadB,  ^h4  ,  ^hD  ,X  ] -> ^hD;
  72.     [ C, L, LoadA,  ^h8  ,  ^hE  ,X  ] -> ^h8;
  73.     [ C, L, LoadB,  ^h8  ,  ^hE  ,X  ] -> ^hE;
  74.     [ C, L, LoadA,  ^h0  ,  ^hF  ,X  ] -> ^h0;
  75.     [ C, L, LoadB,  ^h0  ,  ^hF  ,L  ] -> ^hF;
  76.  
  77. test_vectors  ' test increment'
  78.        ([Clk,OC, Mode, InputA, InputB,CI ] -> Output)
  79.     [ C, L, LoadB,   X   ,  ^h1  ,X  ] -> ^h1;
  80.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^h2;
  81.     [ C, L, LoadB,   X   ,  ^h3  ,X  ] -> ^h3;
  82.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^h4;
  83.     [ C, L, LoadA,  ^h7  ,   X   ,X  ] -> ^h7;
  84.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^h8;
  85.     [ C, L, LoadA,  ^hF  ,   X   ,L  ] -> ^hF;
  86.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^h0;    "roll over
  87.     [ C, L, LoadB,   X   ,  ^hC  ,X  ] -> ^hC;
  88.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^hD;
  89.     [ C, L, Hold ,   X   ,   X   ,H  ] -> ^hD;
  90.  
  91. test_vectors  ' test carry'
  92.        ([Clk,OC, Mode, InputA, InputB,CI ] -> Output)
  93.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^hE;
  94.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^h1F;    "carry out
  95.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^h0;    "roll over
  96.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^h1;
  97.     [ C, L, Incr ,   X   ,   X   ,L  ] -> ^h1;    "no carry in
  98.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^h2;
  99.     [ L, H, Hold ,   X   ,   X   ,X  ] -> [X,Z,Z,Z,Z];
  100. end count4a  
  101.  
  102.