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

  1. module shiftcnt   flag '-t1'
  2. title 'universial counter / shift register
  3. Bjorn Benson   Data I/O Corp   9 Mar 1984'
  4.  
  5.     IFL4    device 'F82S159';
  6.  
  7.     Clk,JKD,I1,I2,I3,OE    pin 1,2,3,4,5,11;
  8.     F0,F1,F2,F3        pin 12,13,14,15;
  9.     FC,RA            node 21,25;
  10.  
  11.     H,L,X,Z,Ck    = 1,0,.X.,.Z.,.C.;
  12.     INTACT,OPEN    = ^hFF,0;
  13.  
  14. " Define counter/shift modes
  15.     mode    = [I3,I2,I1,JKD];        " [I3,I2,I1,JKD]
  16.     Down    = [ 0, 1, 0, 1 ];    Left    = [ 0, 1, 0, 0 ];
  17.     Up    = [ 0, 0, 1, 1 ];      Right    = [ 0, 0, 1, 0 ]; 
  18.     Clear    = [ 1, X, X, X ];
  19.  
  20. " Group register outputs into sets
  21.     count        = [F3,F2,F1,F0];
  22.  
  23. equations
  24.      ENABLE    count = !OE;
  25.  
  26.      [F3.M,F2.M,F1.M,F0.M] = INTACT;    
  27.     FC = JKD;        "JK when High, D when Low
  28.  
  29. " Count Down    JK (T) Flip/Flop
  30.     !F0    := (mode == Down)  ;
  31.      F0.K     = (mode == Down)  ;
  32.     !F1    := (mode == Down)  &                    F0;
  33.      F1.K     = (mode == Down)  &                    F0;
  34.     !F2    := (mode == Down)  &              F1 &  F0;
  35.      F2.K     = (mode == Down)  &              F1 &  F0;
  36.     !F3    := (mode == Down)  &        F2 &  F1 &  F0;
  37.      F3.K     = (mode == Down)  &        F2 &  F1 &  F0;
  38.  
  39. " Count Up    JK (T) Flip/Flop
  40.     [!F0,F0.K]    := (mode == Up)    ;
  41.     [!F1,F1.K]    := (mode == Up)    &                   !F0;
  42.     [!F2,F2.K]    := (mode == Up)    &             !F1 & !F0;
  43.     [!F3,F3.K]    := (mode == Up)    &       !F2 & !F1 & !F0;
  44.  
  45. " Shift Left    D Flip/Flop
  46.     !F0        := (mode == Left)  & !F3;
  47.     !F1        := (mode == Left)  &                   !F0; 
  48.     !F2        := (mode == Left)  &             !F1;
  49.     !F3        := (mode == Left)  &       !F2;
  50.  
  51. " Shift Right    D Flip/Flop
  52.     !F0        := (mode == Right) &             !F1;
  53.     !F1        := (mode == Right) &       !F2;
  54.     !F2        := (mode == Right) & !F3;
  55.     !F3        := (mode == Right) &                   !F0;
  56.  
  57. " Clear
  58.     RA     = (mode == Clear);
  59.     
  60. @page 
  61. test_vectors  'Count Up and Shift Left'
  62.        ([Clk,OE,mode ]    ->  count) 
  63.     [ Ck, L,Clear]    ->    !0  ;
  64.     [ Ck, L,Up   ]    ->    !1  ;
  65.     [ Ck, L,Up   ]    ->    !2  ;
  66.     [ Ck, L,Up   ]    ->    !3  ;
  67.     [ Ck, L,Left ]    ->    !6  ;
  68.     [ Ck, L,Left ]    ->    !12 ;
  69.  
  70. test_vectors  'Shift right'
  71.        ([Clk,OE,mode ]    ->  count )
  72.     [ Ck, L,Clear]    ->  ^b1111;
  73.     [ Ck, L,Down ]    ->  ^b0000;
  74.     [ Ck, L,Down ]    ->  ^b0001;
  75.     [ Ck, L,Right]    ->  ^b1000;
  76.     [ Ck, L,Right]    ->  ^b0100;
  77.     [ Ck, L,Right]    ->  ^b0010;
  78.     [ Ck, L,Right]    ->  ^b0001;
  79.  
  80. test_vectors   'Shift left'
  81.        ([Clk,OE,mode ]    ->  count )
  82.     [ Ck, L,Clear]    ->  ^b1111;
  83.     [ Ck, L,Up   ]    ->  ^b1110;
  84.     [ Ck, L,Left ]    ->  ^b1101;
  85.     [ Ck, L,Left ]    ->  ^b1011;
  86.     [ Ck, L,Left ]    ->  ^b0111;
  87.     [ Ck, L,Left ]    ->  ^b1110;
  88.  
  89. test_vectors   'Count up'
  90.        ([Clk,OE,mode ]    ->  count )
  91.     [ Ck, L,Clear]    ->    !0 ;
  92.     [ Ck, L,Up   ]    ->    !1 ;
  93.     [ Ck, L,Up   ]    ->    !2 ;
  94.     [ Ck, L,Up   ]    ->    !3 ;
  95.     [ Ck, L,Up   ]    ->    !4 ;
  96.     [ Ck, L,Up   ]    ->    !5 ;
  97.     [ Ck, L,Up   ]    ->    !6 ;
  98.     [ Ck, L,Up   ]    ->    !7 ;
  99.     [ Ck, L,Up   ]    ->    !8 ;
  100.     [ Ck, L,Up   ]    ->    !9 ;
  101.     [ Ck, L,Up   ]    ->   !10 ;
  102.     [ Ck, L,Up   ]    ->   !11 ;
  103.     [ Ck, L,Up   ]    ->   !12 ;
  104.     [ Ck, L,Up   ]    ->   !13 ;
  105.     [ Ck, L,Up   ]    ->   !14 ;
  106.     [ Ck, L,Up   ]    ->   !15 ;
  107.     [ Ck, L,Up   ]    ->    !0 ;
  108. end 
  109.