定点乘法器优化(3)---华为杯

一. 简介

在上次优化中,针对部分积生成进行了一个优化,将一个部分积生成的门电路数从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

三. 部分积生成

部分积的生成,即对应为编码的解码,解码方式如下:

  1. 根据C1,C2的值选择出A和2A,如果C1和C2同时为0,那么选择结果为0
  2. 根据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
定点乘法器优化(3)---华为杯_第1张图片

你可能感兴趣的:(Booth算法,FPGA,fpga开发,booth,定点乘法器,华为杯)