Advertisement
Guest User

Untitled

a guest
Oct 14th, 2017
724
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.67 KB | None | 0 0
  1. # A partial DEMUX18 implementation.
  2. # Logic involving S<2:0> is done outside
  3. # in order to minimize redundant gates.
  4. DEF DEMUX18_ABST
  5. # The regular DEMUX18 ports
  6. PORT IN A
  7. PORT IN S2
  8. PORT IN S1
  9. PORT IN S0
  10. PORT OUT Z0
  11. PORT OUT Z1
  12. PORT OUT Z2
  13. PORT OUT Z3
  14. PORT OUT Z4
  15. PORT OUT Z5
  16. PORT OUT Z6
  17. PORT OUT Z7
  18. # ZP7 through ZP0 select the output.
  19. # In case you're wondering, P just means "prime" in my head.
  20. PORT IN ZP7
  21. PORT IN ZP6
  22. PORT IN ZP5
  23. PORT IN ZP4
  24. PORT IN ZP3
  25. PORT IN ZP2
  26. PORT IN ZP1
  27. PORT IN ZP0
  28. NET NOT_Z7
  29. NET NOT_Z6
  30. NET NOT_Z5
  31. NET NOT_Z4
  32. NET NOT_Z3
  33. NET NOT_Z2
  34. NET NOT_Z1
  35. NET NOT_Z0
  36.  
  37. # And each selector with the input, and that's it for this.
  38. INST NAND7 NAND ZP7 A NOT_Z7
  39. INST NOT7 NOT NOT_Z7 Z7
  40.  
  41. INST NAND8 NAND ZP6 A NOT_Z6
  42. INST NOT8 NOT NOT_Z6 Z6
  43.  
  44. INST NAND9 NAND ZP5 A NOT_Z5
  45. INST NOT9 NOT NOT_Z5 Z5
  46.  
  47. INST NAND10 NAND ZP4 A NOT_Z4
  48. INST NOT10 NOT NOT_Z4 Z4
  49.  
  50. INST NAND11 NAND ZP3 A NOT_Z3
  51. INST NOT11 NOT NOT_Z3 Z3
  52.  
  53. INST NAND12 NAND ZP2 A NOT_Z2
  54. INST NOT12 NOT NOT_Z2 Z2
  55.  
  56. INST NAND13 NAND ZP1 A NOT_Z1
  57. INST NOT13 NOT NOT_Z1 Z1
  58.  
  59. INST NAND14 NAND ZP0 A NOT_Z0
  60. INST NOT14 NOT NOT_Z0 Z0
  61. ENDDEF
  62.  
  63. # The gravy.
  64. DEF DEMUX18x8
  65. PORT IN A<7:0>
  66. PORT IN S<2:0>
  67. PORT OUT Z0<7:0>
  68. PORT OUT Z1<7:0>
  69. PORT OUT Z2<7:0>
  70. PORT OUT Z3<7:0>
  71. PORT OUT Z4<7:0>
  72. PORT OUT Z5<7:0>
  73. PORT OUT Z6<7:0>
  74. PORT OUT Z7<7:0>
  75. # A0-A3 have nothing to do with the input, A.
  76. # Those are just the labels I wrote on my whiteboard for the equations.
  77. # A0-A3 pertains to S<2:1>.
  78. # The following logic selects which output Z to use.
  79. # Equations are reused heavily in order to avoid redundant gates.
  80. NET A0
  81. NET A1
  82. NET A2
  83. NET A3
  84. NET NOT_A0
  85. NET NOT_A1
  86. NET NOT_A2
  87. NET NOT_A3
  88. NET NOT_S1
  89. NET ZP0_STAGE1
  90. NET ZP0
  91. NET ZP1_STAGE1
  92. NET ZP1
  93. NET ZP2_STAGE1
  94. NET ZP2
  95. NET ZP3_STAGE1
  96. NET ZP3
  97. NET ZP4_STAGE1
  98. NET ZP4
  99. NET ZP5_STAGE1
  100. NET ZP5
  101. NET ZP6_STAGE1
  102. NET ZP6
  103. NET ZP7_STAGE1
  104. NET ZP7
  105.  
  106. # A0' = S2 nand S1
  107. INST NAND1 NAND S<2> S<1> NOT_A0
  108. # A0 = not A0'
  109. INST NOT1 NOT NOT_A0 A0
  110. # A1' = S2 nand (not S1) = A0' nand S2
  111. INST NAND2 NAND NOT_A0 S<2> NOT_A1
  112. # A1 = not A1'
  113. INST NOT2 NOT NOT_A1 A1
  114. # A2' = (not S2) nand S1 = A0' nand S1
  115. INST NAND3 NAND NOT_A0 S<1> NOT_A2
  116. # A2 = not A2'
  117. INST NOT3 NOT NOT_A2 A2
  118. # A3' = (not S2) nand (not S1) = (not S1) nand A1'
  119. INST NOT4 NOT S<1> NOT_S1
  120. INST NAND4 NAND NOT_S1 NOT_A1 NOT_A3
  121. # A3 = not A3'
  122. INST NOT4_5 NOT NOT_A3 A3
  123.  
  124. # Now we handle S0.
  125. # ZP7' = (S2 and S1) nand S0 = A0 nand S0
  126. INST NAND5 NAND A0 S<0> ZP7_STAGE1
  127. # ZP7 = not ZP7'
  128. INST NOT5 NOT ZP7_STAGE1 ZP7
  129. # ZP6' = (S2 and S1) nand (not S0) = ZP7' nand A0
  130. INST NAND6 NAND ZP7_STAGE1 A0 ZP6_STAGE1
  131. # ZP6 = not ZP6'
  132. INST NOT6 NOT ZP6_STAGE1 ZP6
  133. # ZP5' = (S2 and not S1) nand S0 = A1 nand S0
  134. INST NAND7 NAND A1 S<0> ZP5_STAGE1
  135. # ZP5 = not ZP5'
  136. INST NOT7 NOT ZP5_STAGE1 ZP5
  137. # ZP4' = (S2 and not S1) nand (not S0) = A1 nand ZP5'
  138. INST NAND8 NAND ZP5_STAGE1 A1 ZP4_STAGE1
  139. # ZP4 = not ZP4'
  140. INST NOT8 NOT ZP4_STAGE1 ZP4
  141. # ZP3' = (not S2 and S1) nand S0 = A2 nand S0
  142. INST NAND9 NAND A2 S<0> ZP3_STAGE1
  143. # ZP3 = not ZP3'
  144. INST NOT9 NOT ZP3_STAGE1 ZP3
  145. # ZP2' = (not S2 and S1) nand (not S0) = A2 nand ZP3'
  146. INST NAND10 NAND ZP3_STAGE1 A2 ZP2_STAGE1
  147. # ZP2 = not ZP2'
  148. INST NOT10 NOT ZP2_STAGE1 ZP2
  149. # ZP1' = (not S2 and not S1) nand S1 = A3 nand S0
  150. INST NAND11 NAND A3 S<0> ZP1_STAGE1
  151. # ZP1 = not ZP1'
  152. INST NOT11 NOT ZP1_STAGE1 ZP1
  153. # ZP0' = (not S2 and not S1) nand (not S0) = A3 nand ZP1'
  154. INST NAND12 NAND ZP1_STAGE1 A3 ZP0_STAGE1
  155. # ZP0 = not ZP0'
  156. INST NOT12 NOT ZP0_STAGE1 ZP0
  157.  
  158. # I'm hungry.
  159. INST DM1 DEMUX18_ABST A<7> S<2:0> Z0<7> Z1<7> Z2<7> Z3<7> Z4<7> Z5<7> Z6<7> Z7<7> ZP7 ZP6 ZP5 ZP4 ZP3 ZP2 ZP1 ZP0
  160. INST DM2 DEMUX18_ABST A<6> S<2:0> Z0<6> Z1<6> Z2<6> Z3<6> Z4<6> Z5<6> Z6<6> Z7<6> ZP7 ZP6 ZP5 ZP4 ZP3 ZP2 ZP1 ZP0
  161. INST DM3 DEMUX18_ABST A<5> S<2:0> Z0<5> Z1<5> Z2<5> Z3<5> Z4<5> Z5<5> Z6<5> Z7<5> ZP7 ZP6 ZP5 ZP4 ZP3 ZP2 ZP1 ZP0
  162. INST DM4 DEMUX18_ABST A<4> S<2:0> Z0<4> Z1<4> Z2<4> Z3<4> Z4<4> Z5<4> Z6<4> Z7<4> ZP7 ZP6 ZP5 ZP4 ZP3 ZP2 ZP1 ZP0
  163. INST DM5 DEMUX18_ABST A<3> S<2:0> Z0<3> Z1<3> Z2<3> Z3<3> Z4<3> Z5<3> Z6<3> Z7<3> ZP7 ZP6 ZP5 ZP4 ZP3 ZP2 ZP1 ZP0
  164. INST DM6 DEMUX18_ABST A<2> S<2:0> Z0<2> Z1<2> Z2<2> Z3<2> Z4<2> Z5<2> Z6<2> Z7<2> ZP7 ZP6 ZP5 ZP4 ZP3 ZP2 ZP1 ZP0
  165. INST DM7 DEMUX18_ABST A<1> S<2:0> Z0<1> Z1<1> Z2<1> Z3<1> Z4<1> Z5<1> Z6<1> Z7<1> ZP7 ZP6 ZP5 ZP4 ZP3 ZP2 ZP1 ZP0
  166. INST DM8 DEMUX18_ABST A<0> S<2:0> Z0<0> Z1<0> Z2<0> Z3<0> Z4<0> Z5<0> Z6<0> Z7<0> ZP7 ZP6 ZP5 ZP4 ZP3 ZP2 ZP1 ZP0
  167. ENDDEF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement