home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s078 / 1.img / DATASEP.PLD < prev    next >
Encoding:
CUPL PLD Program format  |  1991-12-08  |  3.3 KB  |  97 lines

  1. Name      Datasep;
  2. Partno    CA0022;
  3. Date      10/1/86;
  4. Revision  01;
  5. Designer  Kahl;
  6. Company   Personal CAD Systems, Inc.;
  7. Assembly  Floppy Disk Interface;
  8. Location  U32;
  9. Device      EP600;
  10.  
  11. /************************************************************************/
  12. /*                                                                      */
  13. /* Single Density Floppy Disk Data Separator                            */
  14. /*                                                                      */
  15. /* This is a single chip inplementation of the data separator circuit   */
  16. /* which first appeared on the Tarbell S-100 Floppy Disk Interface.     */
  17. /* It receives raw FM data from the (single density) 8" disk drive and  */
  18. /* derives the floppy disk controller (Western Digital 1771B-01) clock  */
  19. /* and data.  The device also generates a 2 MHz square clock for the    */
  20. /* FDC timing.  A reset signal was added to improve initialization.     */
  21. /************************************************************************/
  22. /* Allowable Target Device Types: Altera EP600                          */
  23. /************************************************************************/
  24.  
  25. /** Inputs **/
  26.  
  27. Pin 1  = 4MHz1;                /* 4 MHz Clock Input            */
  28. Pin 13 = 4MHz2;                /* 4 MHz Clock Input            */
  29. Pin 2 = raw_data;            /* Raw Data From Floppy Disk    */
  30. Pin 11 = !reset;            /* Master reset                 */
  31.  
  32. /** Outputs **/
  33.  
  34. Pin 3 = 2MHz;                /* 2 MHz Clock Output for FDC   */
  35. Pin [4..10] = [q0..6];            /* Internal Counter Bits        */
  36. Pin 15 = fdclk;                /* FDC Clock            */
  37. Pin 16 = fddata;            /* FDC Data            */
  38. Pin 17 = load_lower;            /* Lower Counter Bits Load      */
  39. Pin 18 = load_upper;            /* Upper Counter Bits Load      */
  40. Pin 19 = data_sync_4;            /* Floppy Disk Data Synch by 4  */
  41. Pin 20 = data_sync_8;            /* Floppy Disk Data Synch by 8  */
  42. Pin 21 = data_sync_16;            /* Floppy Disk Data Synch by 16 */
  43. Pin 22 = data_div_2;            /* Floppy Disk Data Divide by 2 */
  44.  
  45. /** Intermediate Variables **/
  46.  
  47. rco = q3 & q2 & q1 & q0;        /* ripple carry out of lower    */
  48.  
  49. /** Logic Equations **/
  50.  
  51. data_div_2.d = !data_div_2 & 'b'1;    /* Force Active High Macrocell  */
  52. data_div_2.ck = raw_data;
  53. data_div_2.ar = reset;
  54.  
  55. 2MHz.d = !2MHz & 'b'1;            /* Force Active High Macrocell  */
  56. 2MHz.ar = reset;
  57.  
  58. load_q3 = !(!q3 & !(q4 & q6));
  59. load_lower = !(data_sync_4 $ !data_sync_8);
  60. load_upper = (data_sync_8 $ data_sync_16) & !(!q3 & !(q4 & q6));
  61.  
  62. data_sync_4.d = data_div_2;        /* Synchrononize Data Input     */
  63. data_sync_8.d = data_sync_4;
  64. data_sync_16.d = data_sync_4;
  65.  
  66. fdclk = (data_sync_8 $ data_sync_16) & q3;
  67.  
  68. fddata = (data_sync_8 $ data_sync_16) & !q3;
  69.  
  70. /* The following equations implement two cascaded 74LS161 counters */
  71.  
  72. q0.d =  load_lower & 'b'0
  73.      # !load_lower & !q0;
  74.  
  75. q1.d =  load_lower & 'b'0
  76.      # !load_lower & (q1 $ q0);
  77.  
  78. q2.d =  load_lower & 'b'1
  79.      # !load_lower & (q2 $ q1 & q0);
  80.  
  81. q3.d =  load_lower & load_q3
  82.      # !load_lower & (q3 $ q2 & q1 & q0);
  83.  
  84. q4.d =  load_upper & 'b'0
  85.      # !load_upper & !rco & q4 
  86.      # !load_upper &  rco & !q4;
  87.  
  88. q5.d =  load_upper & 'b'0
  89.      # !load_upper & !rco & q5
  90.      # !load_upper &  rco & (q5 $ q4);
  91.  
  92. q6.d =  load_upper & 'b'0
  93.      # !load_upper & !rco & q6
  94.      # !load_upper &  rco & (q6 $ q5 & q4);
  95.  
  96. [q6..0].ar = reset;
  97.