Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.69 KB | None | 0 0
  1.  
  2. `include "constants.vams"
  3. `include "disciplines.vams"
  4.  
  5. module encoder(input0, input1, input2, input3, input4, input5, input6, input7, d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, K, clk);
  6.  
  7. input input0, input1, input2, input3, input4, input5, input6, input7, clk, K;
  8. output d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;
  9. electrical d0, d1, d2, d3, d4, d5, d6, d7, d8, d9, input0, input1, input2, input3, input4, input5, input6, input7, clk, K;
  10. parameter real vtrans_clk = 0.4;
  11.  
  12. integer dispout, dispin;
  13. integer ai, bi, ci, di, ei, fi, gi, hi, ki, illegalk;
  14. integer aeqb, ceqd, l22, l40, l04, l13, l31, ao, bo, co, do, eo, io, pd1s6, nd1s6, ndos6, pdos6, alt7, fo, go, ho, jo, ndos4, pdos4, nd1s4, pd1s4, llegalk, compls6, disp6, compls4;
  15. real t_d0, t_d1, t_d2, t_d3, t_d4, t_d5, t_d6, t_d7, t_d8, t_d9;
  16.  
  17. parameter real vtrans = 0.4;
  18. parameter real vdd = 0.8;
  19.  
  20.  
  21. analog begin
  22. @ ( initial_step ) begin
  23. dispout = 1;
  24. end
  25. //Load data
  26. @ (cross( V(clk) - vtrans_clk, +1)) begin
  27. ai = V(input0) > vtrans;
  28. bi = V(input1) > vtrans;
  29. ci = V(input2) > vtrans;
  30. di = V(input3) > vtrans;
  31. ei = V(input4) > vtrans;
  32. fi = V(input5) > vtrans;
  33. gi = V(input6) > vtrans;
  34. hi = V(input7) > vtrans;
  35. ki = V(K) > vtrans;
  36. dispin = 0;
  37.  
  38. aeqb = (ai & bi) | (!ai & !bi) ;
  39. ceqd = (ci & di) | (!ci & !di) ;
  40. l22 = (ai & bi & !ci & !di) |
  41. (ci & di & !ai & !bi) |
  42. ( !aeqb & !ceqd) ;
  43. l40 = ai & bi & ci & di ;
  44. l04 = !ai & !bi & !ci & !di ;
  45. l13 = ( !aeqb & !ci & !di) |
  46. ( !ceqd & !ai & !bi) ;
  47. l31 = ( !aeqb & ci & di) |
  48. ( !ceqd & ai & bi) ;
  49.  
  50. // The 5B/6B encoding
  51.  
  52. ao = ai ;
  53. bo = (bi & !l40) | l04 ;
  54. co = l04 | ci | (ei & di & !ci & !bi & !ai) ;
  55. do = di & ! (ai & bi & ci) ;
  56. eo = (ei | l13) & ! (ei & di & !ci & !bi & !ai) ;
  57. io = (l22 & !ei) |
  58. (ei & !di & !ci & !(ai&bi)) | // D16, D17, D18
  59. (ei & l40) |
  60. (ki & ei & di & ci & !bi & !ai) | // K.28
  61. (ei & !di & ci & !bi & !ai) ;
  62.  
  63. // pds16 indicates cases where d-1 is assumed + to get our encoded value
  64. pd1s6 = (ei & di & !ci & !bi & !ai) | (!ei & !l22 & !l31) ;
  65. // nds16 indicates cases where d-1 is assumed - to get our encoded value
  66. nd1s6 = ki | (ei & !l22 & !l13) | (!ei & !di & ci & bi & ai) ;
  67.  
  68. // ndos6 is pds16 cases where d-1 is + yields - disp out - all of them
  69. ndos6 = pd1s6 ;
  70. // pdos6 is nds16 cases where d-1 is - yields + disp out - all but one
  71. pdos6 = ki | (ei & !l22 & !l13) ;
  72.  
  73.  
  74. // some Dx.7 and all Kx.7 cases result in run length of 5 case unless
  75. // an alternate coding is used (referred to as Dx.A7, normal is Dx.P7)
  76. // specifically, D11, D13, D14, D17, D18, D19.
  77. alt7 = fi & gi & hi & (ki |
  78. (dispin ? (!ei & di & l31) : (ei & !di & l13))) ;
  79.  
  80.  
  81. fo = fi & ! alt7 ;
  82. go = gi | (!fi & !gi & !hi) ;
  83. ho = hi ;
  84. jo = (!hi & (gi ^ fi)) | alt7 ;
  85.  
  86. // nd1s4 is cases where d-1 is assumed - to get our encoded value
  87. nd1s4 = fi & gi ;
  88. // pd1s4 is cases where d-1 is assumed + to get our encoded value
  89. pd1s4 = (!fi & !gi) | (ki & ((fi & !gi) | (!fi & gi))) ;
  90.  
  91. // ndos4 is pd1s4 cases where d-1 is + yields - disp out - just some
  92. ndos4 = (!fi & !gi) ;
  93. // pdos4 is nd1s4 cases where d-1 is - yields + disp out
  94. pdos4 = fi & gi & hi ;
  95.  
  96. // only legal K codes are K28.0->.7, K23/27/29/30.7
  97. // K28.0->7 is ei=di=ci=1,bi=ai=0
  98. // K23 is 10111
  99. // K27 is 11011
  100. // K29 is 11101
  101. // K30 is 11110 - so K23/27/29/30 are ei & l31
  102. illegalk = ki &
  103. (ai | bi | !ci | !di | !ei) & // not K28.0->7
  104. (!fi | !gi | !hi | !ei | !l31) ; // not K23/27/29/30.7
  105.  
  106. // now determine whether to do the complementing
  107. // complement if prev disp is - and pd1s6 is set, or + and nd1s6 is set
  108. compls6 = (pd1s6 & !dispin) | (nd1s6 & dispin) ;
  109.  
  110. // disparity out of 5b6b is disp in with pdso6 and ndso6
  111. // pds16 indicates cases where d-1 is assumed + to get our encoded value
  112. // ndos6 is cases where d-1 is + yields - disp out
  113. // nds16 indicates cases where d-1 is assumed - to get our encoded value
  114. // pdos6 is cases where d-1 is - yields + disp out
  115. // disp toggles in all ndis16 cases, and all but that 1 nds16 case
  116.  
  117. disp6 = dispin ^ (ndos6 | pdos6) ;
  118.  
  119. compls4 = (pd1s4 & !disp6) | (nd1s4 & disp6) ;
  120. dispout = disp6 ^ (ndos4 | pdos4) ;
  121.  
  122. t_d0 = (jo ^ compls4);
  123. t_d1 = (ho ^ compls4);
  124. t_d2 = (go ^ compls4);
  125. t_d3 = (fo ^ compls4);
  126. t_d4 = (io ^ compls6);
  127. t_d5 = (eo ^ compls6);
  128. t_d6 = (do ^ compls6);
  129. t_d7 = (co ^ compls6);
  130. t_d8 = (bo ^ compls6);
  131. t_d9 = (ao ^ compls6);
  132.  
  133. end
  134. V(d0) <+ t_d0*vdd;
  135. V(d1) <+ t_d1*vdd;
  136. V(d2) <+ t_d2*vdd;
  137. V(d3) <+ t_d3*vdd;
  138. V(d4) <+ t_d4*vdd;
  139. V(d5) <+ t_d5*vdd;
  140. V(d6) <+ t_d6*vdd;
  141. V(d7) <+ t_d7*vdd;
  142. V(d8) <+ t_d8*vdd;
  143. V(d9) <+ t_d9*vdd;
  144.  
  145. end
  146. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement