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

  1. module count4  
  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.     P7022     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
  22.     !Q0    := (Mode==Hold ) & !Q0
  23.          # (Mode==LoadA) & !A0
  24.          # (Mode==LoadB) & !B0
  25.          # (Mode==Incr ) & !CI & !Q0        "Hold if no carry
  26.          # (Mode==Incr ) &  CI &  Q0 ;
  27.  
  28.     !Q1     := (Mode==Hold ) & !Q1 
  29.          # (Mode==LoadA) & !A1 
  30.          # (Mode==LoadB) & !B1 
  31.          # (Mode==Incr ) & !CI & !Q1        "Hold if no carry
  32.          # (Mode==Incr ) & !Q0 & !Q1        "Hold if Q0=L
  33.          # (Mode==Incr ) &  CI &  Q0 &  Q1 ;
  34.  
  35.     !Q2     := (Mode==Hold ) & !Q2 
  36.          # (Mode==LoadA) & !A2 
  37.          # (Mode==LoadB) & !B2 
  38.          # (Mode==Incr ) & !CI & !Q2        "Hold if no carry
  39.          # (Mode==Incr ) & !Q0 & !Q2        "Hold if Q0=L
  40.          # (Mode==Incr ) & !Q1 & !Q2        "Hold if Q1=L
  41.          # (Mode==Incr ) &  CI &  Q0 &  Q1 &  Q2 ;
  42.  
  43.     !Q3     := (Mode==Hold ) & !Q3 
  44.          # (Mode==LoadA) & !A3 
  45.          # (Mode==LoadB) & !B3 
  46.          # (Mode==Incr ) & !CI & !Q3        "Hold if no carry
  47.          # (Mode==Incr ) & !Q0 & !Q3        "Hold if Q0=L
  48.          # (Mode==Incr ) & !Q1 & !Q3        "Hold if Q1=L
  49.          # (Mode==Incr ) & !Q2 & !Q3        "Hold if Q2=L
  50.          # (Mode==Incr ) &  CI &  Q0 &  Q1 &  Q2 &  Q3 ;
  51.  
  52.     !CO     = !CI # !Q0 # !Q1 # !Q2 # !Q3 ;
  53.  
  54. @page
  55. test_vectors   ' test Load A and B'
  56.        ([Clk,OC, Mode, InputA, InputB,CI ] -> Output)
  57.     [ C, L, LoadA,  ^h0  ,  ^hF  ,X  ] -> ^h0;
  58.     [ C, L, LoadB,  ^h0  ,  ^hF  ,L  ] -> ^hF;
  59.     [ C, L, LoadA,  ^h1  ,  ^h7  ,X  ] -> ^h1;
  60.     [ C, L, LoadB,  ^h1  ,  ^h7  ,X  ] -> ^h7;
  61.     [ C, L, LoadA,  ^h2  ,  ^hB  ,X  ] -> ^h2;
  62.     [ C, L, LoadB,  ^h2  ,  ^hB  ,X  ] -> ^hB;
  63.     [ C, L, LoadA,  ^h4  ,  ^hD  ,X  ] -> ^h4;
  64.     [ C, L, LoadB,  ^h4  ,  ^hD  ,X  ] -> ^hD;
  65.     [ C, L, LoadA,  ^h8  ,  ^hE  ,X  ] -> ^h8;
  66.     [ C, L, LoadB,  ^h8  ,  ^hE  ,X  ] -> ^hE;
  67.     [ C, L, LoadA,  ^h0  ,  ^hF  ,X  ] -> ^h0;
  68.     [ C, L, LoadB,  ^h0  ,  ^hF  ,L  ] -> ^hF;
  69.  
  70. test_vectors   ' test increment'
  71.        ([Clk,OC, Mode, InputA, InputB,CI ] -> Output)
  72.     [ C, L, LoadB,   X   ,  ^h1  ,X  ] -> ^h1;
  73.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^h2;
  74.     [ C, L, LoadB,   X   ,  ^h3  ,X  ] -> ^h3;
  75.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^h4;
  76.     [ C, L, LoadA,  ^h7  ,   X   ,X  ] -> ^h7;
  77.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^h8;
  78.     [ C, L, LoadA,  ^hF  ,   X   ,L  ] -> ^hF;
  79.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^h0;    "roll over
  80.     [ C, L, LoadB,   X   ,  ^hC  ,X  ] -> ^hC;
  81.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^hD;
  82.     [ C, L, Hold ,   X   ,   X   ,H  ] -> ^hD;
  83.  
  84. test_vectors   ' test carry'
  85.        ([Clk,OC, Mode, InputA, InputB,CI ] -> Output)
  86.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^hE;
  87.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^h1F;    "carry out
  88.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^h0;    "roll over
  89.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^h1;
  90.     [ C, L, Incr ,   X   ,   X   ,L  ] -> ^h1;    "no carry in
  91.     [ C, L, Incr ,   X   ,   X   ,H  ] -> ^h2;
  92.     [ L, H, Hold ,   X   ,   X   ,X  ] -> [X,Z,Z,Z,Z];
  93. end count4  
  94.  
  95.