一. 简介
在上次优化中,针对部分积生成进行了一个优化,将一个部分积生成的门电路数从221减少到了119。虽然减少了很多,但不够。本次将提出另外一种新的编码与部分积生成方式,将门电路的个数大大减少。
二. 新的编码方式
基4 Booth编码生成部分积一共有5个选项:0,A,-A,2A,-2A;其中0选项可以不考虑。经过观察可以发现A和-A,以及2A和-2A对应位均是相反数(-A,-2A没有进行加一操作),这样就会产生一种新的编码方式:
A和-A一组编码值为C1,2A和-2A为一组编码值为C2,-A和-2A为一组编码值为C3。
例如:
- 当前现需要生成-2A的部分积,那么C1 = 0,C2 = 1,C3 = 1
- 当前现需要生成A的部分积, 那么C1 = 1,C2 = 0,C3 = 0
三. 部分积生成
部分积的生成,即对应为编码的解码,解码方式如下:
- 根据C1,C2的值选择出A和2A,如果C1和C2同时为0,那么选择结果为0
- 根据C3的值对C1,C2选择出的结果进行取反
两个与或非门即可解决,那么一个部分积的生成所消耗的门电路为2*17 = 34,而且与或非门的资源代价仅仅为8
//与或非门 选择A,2A
assign n = a & c1;
assign p = b & c2;
assign d_inv = n | p;
assign d = ~d_inv;
//-------
//与或非门 根据c3的值判断是否对选择的值进行取反
wire w;
wire q;
assign w = c3 & d_inv;
assign q = c3_inv & d;
assign e = ~(w | q); //最终结果
//--------
这部分的优化就到此为止了,对这部分优化有进一步的改进方案的小伙伴,可以交流交流(#.#)
qq交流群: 649098696