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

  1. module unictr2
  2. title 'Universal counter / Shift register
  3. Bjorn Benson   Data I/O Corp   9 Mar 1984'
  4.  
  5.     IFL2    device 'F82S105';
  6.  
  7. " Assign pin and node names
  8.  
  9.     Clk    pin  1;
  10.     I3    pin  6;     " Clear
  11.     I2    pin  7;     " Down/Left
  12.     I1    pin  8;     " Up/Right
  13.     I0    pin  9;     " Count
  14.     OE    pin  19; " Output Enable
  15.  
  16.     F0    pin  18; RF0 node 29;    
  17.     F1    pin  17; RF1 node 30;
  18.     F2    pin  16; RF2 node 31;
  19.     F3    pin  15; RF3 node 32;
  20.  
  21. " Internal state counter
  22.     P0    node 37; RP0 node 43;
  23.     P1    node 38; RP1 node 44;
  24.     P2    node 39; RP2 node 45;
  25.     P3    node 40; RP3 node 46;
  26.     
  27. " Define special constants
  28.     H,L,X,Z,Ck    = 1, 0, .X., .Z., .C.;
  29.     HiZ        = [Z,Z,Z,Z];
  30. " Define counter/shift modes
  31.     mode    = [I3,I2,I1,I0];        " [I3,I2,I1,I0]
  32.     Down    = [ 0, 1, 0, 1];    Left    = [ 0, 1, 0, 0];
  33.     Up    = [ 0, 0, 1, 1];      Right    = [ 0, 0, 1, 0]; 
  34.     Clear    = [ 1, X, X, X];
  35.  
  36. " Group register outputs into sets
  37.     count        = [P3,P2,P1,P0];
  38.     output        = [F3,F2,F1,F0];
  39.  
  40. @page 
  41. equations
  42.      ENABLE    output = !OE;
  43.  
  44. " Count Down
  45.     [ F0, P0]  := !I3 &  I2 & !I1 &  I0 &                   !P0;
  46.     [RF0,RP0]  := !I3 &  I2 & !I1 &  I0 &                    P0;
  47.     [ F1, P1]  := !I3 &  I2 & !I1 &  I0 &             !P1 & !P0;
  48.     [RF1,RP1]  := !I3 &  I2 & !I1 &  I0 &              P1 & !P0;
  49.     [ F2, P2]  := !I3 &  I2 & !I1 &  I0 &       !P2 & !P1 & !P0;
  50.     [RF2,RP2]  := !I3 &  I2 & !I1 &  I0 &        P2 & !P1 & !P0;
  51.     [ F3, P3]  := !I3 &  I2 & !I1 &  I0 & !P3 & !P2 & !P1 & !P0;
  52.     [RF3,RP3]  := !I3 &  I2 & !I1 &  I0 &  P3 & !P2 & !P1 & !P0;
  53.  
  54. " Count Up
  55.     [ F0, P0]  := !I3 & !I2 &  I1 &  I0 &                   !P0;
  56.     [RF0,RP0]  := !I3 & !I2 &  I1 &  I0 &                    P0;
  57.     [ F1, P1]  := !I3 & !I2 &  I1 &  I0 &             !P1 &  P0;
  58.     [RF1,RP1]  := !I3 & !I2 &  I1 &  I0 &              P1 &  P0;
  59.     [ F2, P2]  := !I3 & !I2 &  I1 &  I0 &       !P2 &  P1 &  P0;
  60.     [RF2,RP2]  := !I3 & !I2 &  I1 &  I0 &        P2 &  P1 &  P0;
  61.     [ F3, P3]  := !I3 & !I2 &  I1 &  I0 & !P3 &  P2 &  P1 &  P0;
  62.     [RF3,RP3]  := !I3 & !I2 &  I1 &  I0 &  P3 &  P2 &  P1 &  P0;
  63.  
  64. " Shift Left 
  65.     [ F0, P0]  := !I3 &  I2 & !I1 & !I0 &  P3;
  66.     [RF0,RP0]  := !I3 &  I2 & !I1 & !I0 & !P3;
  67.     [ F1, P1]  := !I3 &  I2 & !I1 & !I0 &                    P0;
  68.     [RF1,RP1]  := !I3 &  I2 & !I1 & !I0 &                   !P0;
  69.     [ F2, P2]  := !I3 &  I2 & !I1 & !I0 &              P1;
  70.     [RF2,RP2]  := !I3 &  I2 & !I1 & !I0 &             !P1;
  71.     [ F3, P3]  := !I3 &  I2 & !I1 & !I0 &        P2;
  72.     [RF3,RP3]  := !I3 &  I2 & !I1 & !I0 &       !P2;
  73.  
  74. " Shift Right
  75.     [ F0, P0]  := !I3 & !I2 &  I1 & !I0 &               P1;
  76.     [RF0,RP0]  := !I3 & !I2 &  I1 & !I0 &              !P1;
  77.     [ F1, P1]  := !I3 & !I2 &  I1 & !I0 &        P2;
  78.     [RF1,RP1]  := !I3 & !I2 &  I1 & !I0 &       !P2;
  79.     [ F2, P2]  := !I3 & !I2 &  I1 & !I0 &  P3;
  80.     [RF2,RP2]  := !I3 & !I2 &  I1 & !I0 & !P3;
  81.     [ F3, P3]  := !I3 & !I2 &  I1 & !I0 &                    P0;
  82.     [RF3,RP3]  := !I3 & !I2 &  I1 & !I0 &                   !P0;
  83.  
  84. " Clear
  85.     [RF3,RF2,RF1,RF0, RP3,RP2,RP1,RP0] :=  I3;
  86.     
  87. @page 
  88. test_vectors 
  89.        ([Clk,OE,mode ]    ->  [count ,output])
  90.     [ Ck, H,Clear]    ->  [   0  ,  HiZ ]; "Power on clock
  91.     [ Ck, L,Clear]    ->  [    0  ,    0 ];
  92.     [ Ck, L,Up   ]    ->  [    1  ,    1 ];
  93.     [ Ck, L,Up   ]    ->  [    2  ,    2 ];
  94.     [ Ck, L,Left ]    ->  [    4  ,    4 ];
  95.  
  96. test_vectors  'test shift right'
  97.        ([Clk,OE,mode ]    ->  [count ,output])
  98.     [ Ck, L,Clear]  ->  [   0  ,    0 ];
  99.     [ Ck, L,Clear]    ->  [     0  ,    0 ];
  100.     [ Ck, L,Down ]    ->  [  15  ,   15 ];
  101.     [ Ck, L,Down ]  ->  [  14  ,   14 ];
  102.     [ Ck, L,Right]    ->  [^b0111,^b0111];
  103.     [ Ck, L,Right]    ->  [^b1011,^b1011];
  104.     [ Ck, L,Right]    ->  [^b1101,^b1101];
  105.     [ Ck, L,Right]    ->  [^b1110,^b1110];
  106.  
  107. test_vectors  'test shift left'
  108.        ([Clk,OE,mode ]    ->  [count ,output])
  109.     [ Ck, L,Clear]  ->  [^b0000,^b0000];
  110.     [ Ck, L,Up   ]  ->  [^b0001,^b0001];
  111.     [ Ck, L,Left ]  ->  [^b0010,^b0010];
  112.     [ Ck, L,Left ]  ->  [^b0100,^b0100];
  113.     [ Ck, L,Left ]  ->  [^b1000,^b1000];
  114.     [ Ck, L,Left ]  ->  [^b0001,^b0001];
  115.  
  116. test_vectors  'test up counter'
  117.        ([Clk,OE,mode ]    ->  [count ,output])
  118.     [ Ck, L,Clear]  ->  [    0 ,    0 ];
  119.     [ Ck, L,Up   ]  ->  [    1 ,    1 ];
  120.     [ Ck, L,Up   ]  ->  [    2 ,    2 ];
  121.     [ Ck, L,Up   ]  ->  [    3 ,    3 ];
  122.     [ Ck, H,Up   ]  ->  [    4 ,  HiZ ];
  123.     [ Ck, H,Up   ]  ->  [    5 ,  HiZ ];
  124.     [ Ck, H,Up   ]  ->  [    6 ,  HiZ ];
  125.     [ Ck, L,Up   ]  ->  [    7 ,    7 ];
  126.     [ Ck, L,Up   ]  ->  [    8 ,    8 ];
  127.     [ Ck, L,Up   ]  ->  [    9 ,    9 ];
  128.     [ Ck, L,Up   ]  ->  [   10 ,   10 ];
  129.     [ Ck, L,Up   ]  ->  [   11 ,   11 ];
  130.     [ Ck, L,Up   ]  ->  [   12 ,   12 ];
  131.     [ Ck, L,Up   ]  ->  [   13 ,   13 ];
  132.     [ Ck, L,Up   ]  ->  [   14 ,   14 ];
  133.     [ Ck, L,Up   ]  ->  [   15 ,   15 ];
  134.     [ Ck, L,Up   ]  ->  [    0 ,    0 ];
  135. end unictr2  
  136.  
  137.