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

  1. module octal
  2. title' Octal counter     based on example from MMI PAL Handbook
  3. Ngoc Nicholas     Data I/O Corp.   28 Aug 1984'
  4.  
  5.     P7024 device 'P20X8';
  6.  
  7.     D0,D1,D2,D3,D4,D5,D6,D7        pin  3,4,5,6,7,8,9,10;
  8.     Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0         pin  15,16,17,18,19,20,21,22;
  9.     CLK,I0,I1,OC,CO,CI        pin  1,2,11,13,14,23;
  10.  
  11.     H,L,X,Z,C = 1, 0, .X., .Z., .C.;
  12.  
  13.     Data  = [D7,D6,D5,D4,D3,D2,D1,D0];
  14.     Count = [Q7,Q6,Q5,Q4,Q3,Q2,Q1,Q0];
  15.  
  16.     Mode  = [I1,I0];
  17.     Clear = [ 0, 0];
  18.     Hold  = [ 0, 1];
  19.     Load  = [ 1, 0];
  20.     Inc   = [ 1, 1];
  21.  
  22. equations
  23.     !Q0     := (!I1 & !I0        "Clear LSB 
  24.         #          I0 & !Q0)     "Count/Hold
  25.         $  ( I1 & !I0 & !D0     "Load
  26.         #    I1 &  I0 & !CI) ;
  27.  
  28.     !Q1     := (!I1 & !I0         "Clear
  29.            #       I0 & !Q1)     "Count/Hold
  30.         $  ( I1 & !I0 & !D1     "Load
  31.            # I1 &  I0 & !CI & Q0) ;
  32.  
  33.     !Q2     := (!I1 & !I0         "Clear
  34.            #       I0 & !Q2)     "Count/Hold
  35.         $  ( I1 & !I0 & !D2     "Load
  36.            # I1 &  I0 & !CI & Q0 & Q1) ;
  37.  
  38.     !Q3     := (!I1 & !I0         "Clear
  39.            #       I0 & !Q3)     "Count/Hold
  40.         $  ( I1 & !I0 & !D3     "Load
  41.            # I1 &  I0 & !CI & Q0 & Q1 & Q2) ;
  42.  
  43.     !Q4     := (!I1 & !I0         "Clear
  44.            #       I0 & !Q4)     "Count/Hold
  45.         $  ( I1 & !I0 & !D4     "Load
  46.            # I1 &  I0 & !CI & Q0 & Q1 & Q2 & Q3) ;
  47.  
  48.     !Q5     := (!I1 & !I0         "Clear
  49.            #       I0 & !Q5)     "Count/Hold
  50.         $  ( I1 & !I0 & !D5     "Load
  51.            # I1 &  I0 & !CI & Q0 & Q1 & Q2 & Q3 & Q4) ;
  52. @page   
  53.     !Q6     := (!I1 & !I0         "Clear
  54.            #       I0 & !Q6)     "Count/Hold
  55.         $  ( I1 & !I0 & !D6     "Load
  56.            # I1 &  I0 & !CI & Q0 & Q1 & Q2 & Q3 & Q4 & Q5) ;
  57.  
  58.     !Q7     := (!I1 & !I0         "Clear MSB
  59.            #       I0 & !Q7)     "Count/Hold
  60.         $  ( I1 & !I0 & !D7     "Load
  61.            # I1 &  I0 & !CI & Q0 & Q1 & Q2 & Q3 & Q4 & Q5 & Q6) ;
  62.  
  63.     !CO     = !CI & Q0 & Q1 & Q2 & Q3 & Q4 & Q5 & Q6 & Q7 ; "CARRY OUT
  64.  
  65. test_vectors 'test load and increment'
  66.          ([CLK,OC,Mode ,Data,CI] -> [CO,Count])
  67.           [ C ,L ,Load , 1  ,X ] -> [ H,  1  ];
  68.           [ C ,L ,Inc  , X  ,0 ] -> [ H,  2  ];
  69.           [ C ,L ,Load , 3  ,X ] -> [ H,  3  ];
  70.           [ C ,L ,Inc  , X  ,0 ] -> [ H,  4  ];
  71.           [ C ,L ,Load , 7  ,X ] -> [ H,  7  ];
  72.           [ C ,L ,Inc  , X  ,0 ] -> [ H,  8  ];
  73.           [ C ,L ,Load ,^h0F,X ] -> [ H,^h0F ];
  74.           [ C ,L ,Inc  , X  ,0 ] -> [ H,^h10 ];
  75.           [ C ,L ,Load ,^h1F,X ] -> [ H,^h1F ];
  76.           [ C ,L ,Inc  , X  ,0 ] -> [ H,^h20 ];
  77.           [ C ,L ,Load ,^h3F,X ] -> [ H,^h3F ];
  78.           [ C ,L ,Inc  , X  ,0 ] -> [ H,^h40 ];
  79.           [ C ,L ,Load ,^h7F,X ] -> [ H,^h7F ];
  80.           [ C ,L ,Inc  , X  ,0 ] -> [ H,^h80 ];
  81.           [ C ,L ,Load ,^hFF,0 ] -> [ L,^hFF ];
  82.           [ C ,L ,Inc  , X  ,0 ] -> [ H,^h00 ];
  83.  
  84. test_vectors 'test load'
  85.          ([CLK,OC,Mode ,Data,CI] -> [CO,Count])
  86.           [ C ,L ,Load ,^hFF,L ] -> [ L,^hFF ];
  87.           [ C ,L ,Load ,^hFE,X ] -> [ H,^hFE ];
  88.           [ C ,L ,Load ,^hFD,X ] -> [ H,^hFD ];
  89.           [ C ,L ,Load ,^hFB,X ] -> [ H,^hFB ];
  90.           [ C ,L ,Load ,^hF7,X ] -> [ H,^hF7 ];
  91.           [ C ,L ,Load ,^hEF,X ] -> [ H,^hEF ];
  92.           [ C ,L ,Load ,^hDF,X ] -> [ H,^hDF ];
  93.           [ C ,L ,Load ,^hBF,X ] -> [ H,^hBF ];
  94.           [ C ,L ,Load ,^h7F,X ] -> [ H,^h7F ];
  95.           [ C ,L ,Load ,^hFF,L ] -> [ L,^hFF ];
  96. @page    
  97. test_vectors 'test count'
  98.          ([CLK,OC,Mode ,Data,CI] -> [CO,Count])
  99.           [ C ,L ,Clear, X  ,X ] -> [ H,   0 ];
  100.           [ C ,L ,Inc  , X  ,L ] -> [ H,   1 ];
  101.           [ C ,L ,Inc  , X  ,L ] -> [ H,   2 ];
  102.           [ C ,L ,Inc  , X  ,L ] -> [ H,   3 ];
  103.           [ C ,L ,Inc  , X  ,L ] -> [ H,   4 ];
  104.           [ C ,L ,Inc  , X  ,L ] -> [ H,   5 ];
  105.           [ C ,L ,Inc  , X  ,L ] -> [ H,   6 ];
  106.           [ C ,L ,Inc  , X  ,L ] -> [ H,   7 ];
  107.           [ C ,L ,Inc  , X  ,L ] -> [ H,   8 ];
  108.           [ C ,L ,Inc  , X  ,L ] -> [ H,   9 ];
  109.           [ C ,L ,Inc  , X  ,L ] -> [ H, ^hA ];
  110.           [ C ,L ,Inc  , X  ,L ] -> [ H, ^hB ];
  111.           [ C ,L ,Inc  , X  ,L ] -> [ H, ^hC ];
  112.  
  113. test_vectors 'test hold and High Z'
  114.          ([CLK,OC,Mode ,Data,CI] -> [CO,Count])
  115.           [ C ,L ,Load ,^hFE,X ] -> [ H,^hFE ];
  116.           [ C ,L ,Inc  ,  X ,L ] -> [ L,^hFF ];
  117.           [ C ,L ,Inc  ,  X ,H ] -> [ H,^hFF ];
  118.           [ C ,L ,Hold ,  X ,L ] -> [ L,^hFF ];
  119.           [ C ,L ,Inc  ,  X ,L ] -> [ H,^h00 ];
  120.           [ X ,H , X   ,  X ,X ] -> [ X, Z   ];
  121.  
  122. "This is an 8-bit synchronous counter with parallel load, clear, and 
  123. "hold capability.  The load operation loads the inputs (D7-D0) into the
  124. "output register (Q7-Q0).  The clear operation resets the output register
  125. "to all lows.  The hold operation holds the previous value regardless of
  126. "clock transitions.  The increment operation adds one to the output 
  127. "register when the carry-in is true (!CI=L), otherwise the operation
  128. "is a hold.  The carry-out (!CO) is true (!CO=L) when the output register
  129. "(Q7-Q0) is all highs, otherwise false (/CO=H).
  130.  
  131. "These operations are exercised in the test vectors and summarized in the
  132. "Operations Table:
  133. "    !OC  CLK  I1  I0  !CI  D7-D0  Q7-Q0     Operation
  134. "    --------------------------------------------------
  135. "     H    X   X   X    X     X      Z       HI-Z
  136. "     L    C   L   L    X     X      L       Clear
  137. "     L    C   L   H    X     X      Q       Hold
  138. "     L    C   H   L    X     D      D       Load
  139. "     L    C   H   H    H     X      Q       Hold
  140. "     L    C   H   H    L     X   Q PLUS 1   Increment
  141. "    --------------------------------------------------
  142.  
  143. "Two or more octal counters may be cascaded to provide larger counters.
  144. "The operation codes were chosen such that when I1 is high, I0 may be
  145. "used to select between load and increment as in a program counter
  146. "(jump/increment).  Also, carry-out (!CO) and carry-in (!CI) are located
  147. "on pins 14 and 23 respectively, which provides for convenient
  148. "interconnections when two or more octal counters are cascaded to
  149. "implement larger counters.
  150.  
  151. end octal;
  152.