文号
951356
阅读
226
回复
4
收藏
0
本文包含AI生成内容,并经过作者严格考据审查,作者对AI生成内容的品质和可靠性负责。
关于4位除法器的纯nand门实现(已优化
2026/07/28
IP:山东
摘要:本文章涉及一款基于纯nand门的4位除法器,带掩码功能,同时最大延迟不超过60个门
关键词:4bit 纯逻辑门

对于4位无符号整数除法,除数 B 的取值范围为 [0, 15]。根据 B 的最高两位 B[3:2],可将有效除数划分为三个不相交的区间:


区间 I (8 ≥ B ≥ 15):此时 B ≥ 8,而被除数 A ≥ 15,故商 Q ∈{0, 1}。判定条件简化为单次比较运算 Q = (A ≥ B)。


区间 II (4 ≥ B ≥ 7):此时 B≥ 4,商 Q ≤ 15/4 = 3,即 Q 仅需2位有效表示。该区间内的除法可转化为对阈值 2B 和 3B 的比较运算,无需执行通用减法。


区间 III (1 ≥ B ≥ 3):此时商 Q \le 15,需要完整的4位精度。该区间采用恢复余数法,但由于 B 的取值仅有3种可能(1、2、3),每一级试商对应的减数(8B, 4B, 2B, B)均为已知常量的小倍数,因此减法运算可针对特定移位量进行逻辑化简,避免使用通用全加器。

全局反相 (8)


```text

1. nA0=A0↑A0 2. nA1=A1↑A1 3. nA2=A2↑A2 4. nA3=A3↑A3

5. nB0=B0↑B0 6. nB1=B1↑B1 7. nB2=B2↑B2 8. nB3=B3↑B3

```


除零 (5)


```text

9. t01=nB0↑nB1 10. t23=nB2↑nB3 11. t01n=t01↑t01 12. t23n=t23↑t23 13. B_nz=t01n↑t23n

```


4 位比较器 A≥B (22)


```text

14. LowGE0=nA0↑B0 15. T10=A1↑nB1 16. N10=A1↑B1 17. N20=A1↑N10 18. N30=B1↑N10

19. D0=N20↑N30 20. nD0=D0↑D0 21. T20=nD0↑LowGE0 22. GE_lo=T10↑T20

23. LowGE1=nA2↑B2 24. T11=A3↑nB3 25. N11=A3↑B3 26. N21=A3↑N11 27. N31=B3↑N11

28. D1=N21↑N31 29. nD1=D1↑D1 30. T21=nD1↑LowGE1 31. GE_hi=T11↑T21

32. nGE_lo=GE_lo↑GE_lo 33. t_or=nD1↑nGE_lo 34. t_and=GE_hi↑t_or 35. GE=t_and↑t_and

```


分支 1 (0)


Q3_1=GND Q2_1=GND Q1_1=GND Q0_1=GE


分支 2 (39)


```text

36. t1_2B=A2↑B1 37. t2_2B=nA2↑nB1 38. eq_2B=t1_2B↑t2_2B 39. ge_lo_2B=nA1↑B0

40. t3_2B=eq_2B↑ge_lo_2B 41. t4_2B=A2↑nB1 42. GE_2B_l=t3_2B↑t4_2B

43. t_q1=A3↑GE_2B_l 44. q1_2=t_q1↑t_q1

45. L_B=nA0↑B0 46. N1_B=A1↑B1 47. N2_B=A1↑N1_B 48. N3_B=B1↑N1_B

49. D_B=N2_B↑N3_B 50. nD_B=D_B↑D_B 51. T_B=nD_B↑L_B 52. GT_B=A1↑nB1

53. GE_B_l=GT_B↑T_B 54. t_andA2=A2↑GE_B_l 55. ge_B=nA3↑t_andA2

56. t_y1a=B1↑B0 57. t_y1b=B1↑t_y1a 58. t_y1c=B0↑t_y1a 59. Y1=t_y1b↑t_y1c

60. t_y2=B1↑B0 61. Y2=t_y2↑t_y2

62. L_3B=nA0↑B0 63. N1_3B=A1↑Y1 64. N2_3B=A1↑N1_3B 65. N3_3B=Y1↑N1_3B

66. D_3B=N2_3B↑N3_3B 67. nD_3B=D_3B↑D_3B 68. T1_3B=nD_3B↑L_3B

69. GT_3B=A2↑t_y2 70. GE_3B_l=GT_3B↑T1_3B

71. t_en3B=GE_3B_l↑nB1 72. GE_3B_en=t_en3B↑t_en3B 73. t_ge3B=A3↑GE_3B_en 74. ge_3B=t_ge3B↑t_ge3B

75. t_mux1=q1_2↑ge_3B 76. t_mux0=t_q1↑ge_B 77. q0_2=t_mux0↑t_mux1

```


Q3_2=GND Q2_2=GND Q1_2=q1_2 Q0_2=q0_2


分支 3 (86)


```text

// Level 1 (6)

78. t1_3=nB1↑B0 79. B_eq1=t1_3↑t1_3 80. q3_r=B_eq1↑A3 81. q3_3=q3_r↑q3_r

82. R1_3r=A3↑q3_r 83. R1_3=R1_3r↑R1_3r


// Level 2 (27)

84. Low_GE2=nA2↑B0 85. Term1_2=R1_3↑nB1 86. N1_2=R1_3↑B1 87. N2_2=R1_3↑N1_2 88. N3_2=B1↑N1_2

89. Diff_2=N2_2↑N3_2 90. nDiff_2=Diff_2↑Diff_2 91. Term2_2=nDiff_2↑Low_GE2 92. q2_3=Term1_2↑Term2_2

93. nq2_3=q2_3↑q2_3 94. tY0_2=B0↑q2_3 95. Yp0_2=tY0_2↑tY0_2

96. u1_2=A2↑Yp0_2 97. u2_2=nA2↑tY0_2 98. R2_2=u1_2↑u2_2

99. Cin_r2=nA2↑Yp0_2 100. Cin_2=Cin_r2↑Cin_r2 101. tY1_2=B1↑q2_3 102. Yp1_2=tY1_2↑tY1_2

103. v1_2=R1_3↑Yp1_2 104. nR1_3=R1_3↑R1_3 105. v2_2=nR1_3↑tY1_2

106. X1xor_2=v1_2↑v2_2 107. nX1xor2=X1xor_2↑X1xor_2 108. w1_2=X1xor_2↑Cin_2 109. w2_2=nX1xor2↑Cin_r2 110. R2_3=w1_2↑w2_2


// Level 3 (23)

111. Low_GE3=nA1↑B0 112. Term1_3=R2_2↑nB1 113. N1_3=R2_2↑B1 114. N2_3=R2_2↑N1_3 115. N3_3=B1↑N1_3

116. Diff_3=N2_3↑N3_3 117. nDiff_3=Diff_3↑Diff_3 118. Term2_3=nDiff_3↑Low_GE3 119. GE_low3=Term1_3↑Term2_3

120. nR2_3=R2_3↑R2_3 121. nGE_l3=GE_low3↑GE_low3 122. q1_3=nR2_3↑nGE_l3

123. nq1_3=q1_3↑q1_3 124. tY0_3=B0↑q1_3 125. Yp0_3=tY0_3↑tY0_3

126. u1_3=A1↑Yp0_3 127. u2_3=nA1↑tY0_3 128. R3_1=u1_3↑u2_3

129. Cin_r3=nA1↑Yp0_3 130. Cin_3=Cin_r3↑Cin_r3 131. tY1_3=B1↑q1_3 132. Yp1_3=tY1_3↑tY1_3

133. v1_3=R2_2↑Yp1_3 134. nR2_2=R2_2↑R2_2 135. v2_3=nR2_2↑tY1_3

136. X1xor_3=v1_3↑v2_3 137. nX1xor3=X1xor_3↑X1xor_3 138. w1_3=X1xor_3↑Cin_3 139. w2_3=nX1xor3↑Cin_r3 140. R3_2=w1_3↑w2_3


// Level 4 (11)

141. Low_GE4=nA0↑B0 142. Term1_4=R3_1↑nB1 143. N1_4=R3_1↑B1 144. N2_4=R3_1↑N1_4 145. N3_4=B1↑N1_4

146. Diff_4=N2_4↑N3_4 147. nDiff_4=Diff_4↑Diff_4 148. Term2_4=nDiff_4↑Low_GE4 149. GE_low4=Term1_4↑Term2_4

150. nR3_2=R3_2↑R3_2 151. nGE_l4=GE_low4↑GE_low4 152. q0_3r=nR3_2↑nGE_l4


// 除零掩码 (8)

153. t_q3m=q3_3↑B_nz 154. q3_3m=t_q3m↑t_q3m 155. t_q2m=q2_3↑B_nz 156. q2_3m=t_q2m↑t_q2m

157. t_q1m=q1_3↑B_nz 158. q1_3m=t_q1m↑t_q1m 159. t_q0m=q0_3r↑B_nz 160. q0_3m=t_q0m↑t_q0m

```


Q3_3=q3_3m Q2_3=q2_3m Q1_3=q1_3m Q0_3=q0_3m


控制 (3)


```text

161. t_c2=nB3↑B2 162. c2=t_c2↑t_c2 163. t_c3=nB3↑nB2 164. c3=t_c3↑t_c3

```


选择器 (16)


```text

165. t1_3s=GND↑B3 166. t2_3s=GND↑c2 167. t3_3s=Q3_3↑c3 168. t12_3s=t1_3s↑t2_3s 169. Q3=t12_3s↑t3_3s

170. t1_2s=GND↑B3 171. t2_2s=GND↑c2 172. t3_2s=Q2_3↑c3 173. t12_2s=t1_2s↑t2_2s 174. Q2=t12_2s↑t3_2s

175. t1_1s=GND↑B3 176. t2_1s=q1_2↑c2 177. t3_1s=Q1_3↑c3 178. t12_1s=t1_1s↑t2_1s 179. Q1=t12_1s↑t3_1s

180. t1_0s=GE↑B3 181. t2_0s=q0_2↑c2 182. t3_0s=Q0_3↑c3 183. t12_0s=t1_0s↑t2_0s 184. Q0=t12_0s↑t3_0s

```


---


总门数:184 个二输入 NAND。

关键路径 57 门,5V 74HC 下约 600ns,~1.6MHz。



吴明cad作者
3个月4天前IP:山东
951358
1楼

这是本人分立元件实现4bit alu计划的一部分。计划采用74hc00实现,元件已经在路上了

引用
评论
3个月3天前IP:天津
951370
2楼

首先想到的方法是用AM27C128之类的并口存储芯片,地址线低8位做输入,8位数据线做输出。高位地址还可以选择算法,比如A9~A8 00加法,01减法,10乘法,11除法。45ns延时,频率能做到20MHz。

引用
评论
吴明cad作者
3个月2天前IP:山东
951385
3楼
引用fleefly发表于2楼的内容
首先想到的方法是用AM27C128之类的并口存储芯片,地址线低8位做输入,8位数据线做输出。高位地址还可以选择算法,比如A9~A8 00加法,01减法,10乘法,11除法。45ns延时,频率能做到20...

这当然是追求快速下最好的办法,但是研究纯组合逻辑下的优化还是有价值的

引用
评论
2个月20天前IP:上海
951626
4楼

这里我个人建议使用verilog+yosys进行开发,yosys可以将任意逻辑综合到全NAND设计,很方便开发也很高效
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的