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

  1. module unictr3
  2. title 'Universal counter / Shift register
  3. Bjorn Benson   Data I/O Corp    9 Mar 1984'
  4.  
  5.     IFL3    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.     SET0 = [F0,P0];    RESET0 = [RF0,RP0];
  41.     SET1 = [F1,P1];    RESET1 = [RF1,RP1];
  42.     SET2 = [F2,P2];    RESET2 = [RF2,RP2];
  43.     SET3 = [F3,P3];    RESET3 = [RF3,RP3];
  44.  
  45. @page 
  46. equations
  47.     ENABLE    output = !OE;
  48.  
  49. " Count Down
  50.     SET0    := (mode == Down ) &                    !P0;
  51.     RESET0     = (mode == Down ) &                     P0;
  52.     SET1    := (mode == Down ) &              !P1 & !P0;
  53.     RESET1     = (mode == Down ) &               P1 & !P0;
  54.     SET2    := (mode == Down ) &        !P2 & !P1 & !P0;
  55.     RESET2     = (mode == Down ) &         P2 & !P1 & !P0;
  56.     SET3    := (mode == Down ) &  !P3 & !P2 & !P1 & !P0;
  57.     RESET3     = (mode == Down ) &   P3 & !P2 & !P1 & !P0;
  58.  
  59. " Count Up
  60.     SET0    := (mode == Up   ) &                    !P0;
  61.     RESET0     = (mode == Up   ) &                     P0;
  62.     SET1    := (mode == Up   ) &              !P1 &  P0;
  63.     RESET1     = (mode == Up   ) &               P1 &  P0;
  64.     SET2    := (mode == Up   ) &        !P2 &  P1 &  P0;
  65.     RESET2     = (mode == Up   ) &         P2 &  P1 &  P0;
  66.     SET3    := (mode == Up   ) &  !P3 &  P2 &  P1 &  P0;
  67.     RESET3     = (mode == Up   ) &   P3 &  P2 &  P1 &  P0;
  68.  
  69. " Shift Left
  70.     SET0    := (mode == Left ) &   P3;
  71.     RESET0     = (mode == Left ) &  !P3;
  72.     SET1    := (mode == Left ) &                     P0;
  73.     RESET1     = (mode == Left ) &                    !P0;
  74.     SET2    := (mode == Left ) &               P1;
  75.     RESET2     = (mode == Left ) &              !P1;
  76.     SET3    := (mode == Left ) &         P2;
  77.     RESET3     = (mode == Left ) &        !P2;
  78.  
  79. " Shift Right
  80.     SET0    := (mode == Right) &               P1;
  81.     RESET0     = (mode == Right) &              !P1;
  82.     SET1    := (mode == Right) &         P2;
  83.     RESET1     = (mode == Right) &        !P2;
  84.     SET2    := (mode == Right) &   P3;
  85.     RESET2     = (mode == Right) &  !P3;
  86.     SET3    := (mode == Right) &                     P0;
  87.     RESET3     = (mode == Right) &                    !P0;
  88.  
  89. " Clear
  90.     RESET0     = (mode == Clear);
  91.     RESET1     = (mode == Clear);
  92.     RESET2     = (mode == Clear);
  93.     RESET3     = (mode == Clear);
  94.     
  95. @page 
  96. test_vectors 
  97.        ([Clk,OE,mode ]    ->  [count ,output])
  98.     [ Ck, H,Clear]    ->  [   0  ,  HiZ ]; "Power on clock
  99.     [ Ck, L,Clear]    ->  [    0  ,    0 ];
  100.     [ Ck, L,Up   ]    ->  [    1  ,    1 ];
  101.     [ Ck, L,Up   ]    ->  [    2  ,    2 ];
  102.     [ Ck, L,Left ]    ->  [    4  ,    4 ];
  103.  
  104. test_vectors  'test shift right'
  105.        ([Clk,OE,mode ]    ->  [count ,output])
  106.     [ Ck, L,Clear]  ->  [   0  ,    0 ];
  107.     [ Ck, L,Clear]    ->  [     0  ,    0 ];
  108.     [ Ck, L,Down ]    ->  [  15  ,   15 ];
  109.     [ Ck, L,Down ]  ->  [  14  ,   14 ];
  110.     [ Ck, L,Right]    ->  [^b0111,^b0111];
  111.     [ Ck, L,Right]    ->  [^b1011,^b1011];
  112.     [ Ck, L,Right]    ->  [^b1101,^b1101];
  113.     [ Ck, L,Right]    ->  [^b1110,^b1110];
  114.  
  115. test_vectors  'test shift left'
  116.        ([Clk,OE,mode ]    ->  [count ,output])
  117.     [ Ck, L,Clear]  ->  [^b0000,^b0000];
  118.     [ Ck, L,Up   ]  ->  [^b0001,^b0001];
  119.     [ Ck, L,Left ]  ->  [^b0010,^b0010];
  120.     [ Ck, L,Left ]  ->  [^b0100,^b0100];
  121.     [ Ck, L,Left ]  ->  [^b1000,^b1000];
  122.     [ Ck, L,Left ]  ->  [^b0001,^b0001];
  123.  
  124. test_vectors  'test up counter'
  125.        ([Clk,OE,mode ]    ->  [count ,output])
  126.     [ Ck, L,Clear]  ->  [    0 ,    0 ];
  127.     [ Ck, L,Up   ]  ->  [    1 ,    1 ];
  128.     [ Ck, L,Up   ]  ->  [    2 ,    2 ];
  129.     [ Ck, L,Up   ]  ->  [    3 ,    3 ];
  130.     [ Ck, H,Up   ]  ->  [    4 ,  HiZ ];
  131.     [ Ck, H,Up   ]  ->  [    5 ,  HiZ ];
  132.     [ Ck, H,Up   ]  ->  [    6 ,  HiZ ];
  133.     [ Ck, L,Up   ]  ->  [    7 ,    7 ];
  134.     [ Ck, L,Up   ]  ->  [    8 ,    8 ];
  135.     [ Ck, L,Up   ]  ->  [    9 ,    9 ];
  136.     [ Ck, L,Up   ]  ->  [   10 ,   10 ];
  137.     [ Ck, L,Up   ]  ->  [   11 ,   11 ];
  138.     [ Ck, L,Up   ]  ->  [   12 ,   12 ];
  139.     [ Ck, L,Up   ]  ->  [   13 ,   13 ];
  140.     [ Ck, L,Up   ]  ->  [   14 ,   14 ];
  141.     [ Ck, L,Up   ]  ->  [   15 ,   15 ];
  142.     [ Ck, L,Up   ]  ->  [    0 ,    0 ];
  143. end unictr3 
  144.