FPGA-阵列乘法器的设计(利用全加器 基于CRA阵列乘法器)

简介: FPGA-阵列乘法器的设计(利用全加器 基于CRA阵列乘法器)

在计算机中,乘法是数字信号处理中的重要角色。

      四位无符号数相乘的手算运算可以提炼出最简单的乘法器的计算算法,利用手算乘法的思想,算出每次的部分积然后求和。这样的方法思想较为容易理解前面的(FPGA-定点乘法器)已经给出具体的代码的设计,代码中设计的是4位,则需要4个时钟周期,如果是N位则会需要N个时钟周期进行运行,这样运行的乘法器运行效率不高(也可以看做是串行的),所以为了提高效率采用硬件的叠加和流水线设计

image.png

附代码:

全加器


module adder(dina,dinb,c,ci,dout
    );
  input dina;
  input dinb;
  input c;
  output reg ci;
  output reg dout;
  always@(*)begin
    {ci,dout}=dina+dinb+c;
  end
endmodule

累加器module


module add_demo(dina,xi,yi,dinb,out_1,out_2,out_3,out_4
    );
  input  dina ;//部分积输入
  input  xi ;//Xi
  input  yi ;//Yi
  input  dinb ;//进位输入
  output reg out_1;//Xi
  output out_2;//进位输出
  output reg out_3;//Yi
  output out_4;//部分积输出
  wire din1=xi&yi;
  always@(*)begin
    out_1=yi;
    out_3=xi;
   end
  adder u_adder(
  .dina(dina),
  .dinb(din1),
  .c(dinb),
  .ci(out_2),
  .dout(out_4)
    );
endmodule

阵列乘法器:


module array_multiplier_1(X,Y,P
    );
  input  [3:0] X;
  input  [3:0] Y;
  output [7:0] P;
  wire out_1_00,out_2_00,out_3_00;
  add_demo ad_00(
  .dina(1'b0),.xi(X[0]),.yi(Y[0]),.dinb(1'b0),
  .out_1(out_1_00),.out_2(out_2_00),.out_3(out_3_00),.out_4(P[0])
    );
  wire out_1_01,out_2_01,out_3_01,out_4_01;
  add_demo ad_01(
  .dina(1'b0),.xi(X[1]),.yi(out_1_00),.dinb(out_2_00),
  .out_1(out_1_01),.out_2(out_2_01),.out_3(out_3_01),.out_4(out_4_01)
    );
  wire out_1_02,out_2_02,out_3_02,out_4_02;
  add_demo ad_02(
  .dina(1'b0),.xi(X[2]),.yi(out_1_01),.dinb(out_2_01),
  .out_1(out_1_02),.out_2(out_2_02),.out_3(out_3_02),.out_4(out_4_02)
    );
  wire out_2_03,out_3_03,out_4_03;
  add_demo ad_03(
  .dina(1'b0),.xi(X[3]),.yi(out_1_02),.dinb(out_2_02),
  .out_2(out_2_03),.out_3(out_3_03),.out_4(out_4_03)
    );
  wire out_1_10,out_2_10,out_3_10;
  add_demo ad_10(
  .dina(out_4_01),.xi(out_3_00),.yi(Y[1]),.dinb(1'b0),
  .out_1(out_1_10),.out_2(out_2_10),.out_3(out_3_10),.out_4(P[1])
    );
  wire out_1_11,out_2_11,out_3_11,out_4_11;
  add_demo ad_11(
  .dina(out_4_02),.xi(out_3_01),.yi(out_1_10),.dinb(out_2_10),
  .out_1(out_1_11),.out_2(out_2_11),.out_3(out_3_11),.out_4(out_4_11)
    );
  wire out_1_12,out_2_12,out_3_12,out_4_12;
  add_demo ad_12(
  .dina(out_4_03),.xi(out_3_02),.yi(out_1_11),.dinb(out_2_11),
  .out_1(out_1_12),.out_2(out_2_12),.out_3(out_3_12),.out_4(out_4_12)
    );
  wire out_2_13,out_3_13,out_4_13;
  add_demo ad_13(
  .dina(out_2_03),.xi(out_3_03),.yi(out_1_12),.dinb(out_2_12),
  .out_2(out_2_13),.out_3(out_3_13),.out_4(out_4_13)
    );
  wire out_1_20,out_2_20,out_3_20;
  add_demo ad_20(
  .dina(out_4_11),.xi(out_3_10),.yi(Y[2]),.dinb(1'b0),
  .out_1(out_1_20),.out_2(out_2_20),.out_3(out_3_20),.out_4(P[2])
    );
  wire out_1_21,out_2_21,out_3_21,out_4_21;
  add_demo ad_21(
  .dina(out_4_12),.xi(out_3_11),.yi(out_1_20),.dinb(out_2_20),
  .out_1(out_1_21),.out_2(out_2_21),.out_3(out_3_21),.out_4(out_4_21)
    );
  wire out_1_22,out_2_22,out_3_22,out_4_22;
  add_demo ad_22(
  .dina(out_4_13),.xi(out_3_12),.yi(out_1_21),.dinb(out_2_21),
  .out_1(out_1_22),.out_2(out_2_22),.out_3(out_3_22),.out_4(out_4_22)
    );
  wire out_2_23,out_3_23,out_4_23;
  add_demo ad_23(
  .dina(out_2_13),.xi(out_3_13),.yi(out_1_22),.dinb(out_2_22),
  .out_2(out_2_23),.out_3(out_3_23),.out_4(out_4_23)
    );
  wire out_1_30,out_2_30;
  add_demo ad_30(
  .dina(out_4_21),.xi(out_3_20),.yi(Y[3]),.dinb(1'b0),
  .out_1(out_1_30),.out_2(out_2_30),.out_4(P[3])
    );
  wire out_1_31,out_2_31;
  add_demo ad_31(
  .dina(out_4_22),.xi(out_3_21),.yi(out_1_30),.dinb(out_2_30),
  .out_1(out_1_31),.out_2(out_2_31),.out_4(P[4])
    );
  wire out_1_32,out_2_32;
  add_demo ad_32(
  .dina(out_4_23),.xi(out_3_22),.yi(out_1_31),.dinb(out_2_31),
  .out_1(out_1_32),.out_2(out_2_32),.out_4(P[5])
    );
  add_demo ad_33(
  .dina(out_2_23),.xi(out_3_23),.yi(out_1_32),.dinb(out_2_32),
  .out_2(P[7]),.out_4(P[6])
    );
endmodule
目录
相关文章
|
移动开发 算法 异构计算
m基于FPGA的半带滤波器verilog设计,对比普通结构以及乘法器复用结构
m基于FPGA的半带滤波器verilog设计,对比普通结构以及乘法器复用结构
306 0
m基于FPGA的半带滤波器verilog设计,对比普通结构以及乘法器复用结构
|
人工智能 编译器 异构计算
FPGA(3)--VHDL及原理图--4位全加器
FPGA(3)--VHDL及原理图--4位全加器
667 0
FPGA(3)--VHDL及原理图--4位全加器
|
异构计算
FPGA(2)--例化语句--1位全加器
FPGA(2)--例化语句--1位全加器
215 0
FPGA(2)--例化语句--1位全加器
|
存储 人工智能 BI
数字信号处理-05- FPGA常用运算模块-复数乘法器(二)
数字信号处理-05- FPGA常用运算模块-复数乘法器
749 0
数字信号处理-05- FPGA常用运算模块-复数乘法器(二)
|
异构计算
数字信号处理-05- FPGA常用运算模块-复数乘法器(一)
数字信号处理-05- FPGA常用运算模块-复数乘法器
1041 0
数字信号处理-05- FPGA常用运算模块-复数乘法器(一)
|
存储 IDE 开发工具
数字信号处理-02- FPGA常用运算模块-加减法器和乘法器
数字信号处理-02- FPGA常用运算模块-加减法器和乘法器
1088 0
数字信号处理-02- FPGA常用运算模块-加减法器和乘法器
|
算法
FPGA-设计一个定点乘法器(原码一位乘法器)
FPGA-设计一个定点乘法器(原码一位乘法器)
412 0
FPGA-设计一个定点乘法器(原码一位乘法器)
FPGA-基本知识 设计一个一位(四位)半加器和一位(四位)全加器
FPGA-基本知识 设计一个一位(四位)半加器和一位(四位)全加器
578 0
FPGA-基本知识 设计一个一位(四位)半加器和一位(四位)全加器
|
关系型数据库 项目管理 异构计算
FPGA设计超前进位与8421-BCD码全加器
本文介绍了FPGA设计超前进位与8421-BCD码全加器
626 0
FPGA设计超前进位与8421-BCD码全加器
|
异构计算
FPGA设计16位二进制全加器模块
本文主要采用FPGA设计16位二进制全加器模块
1074 0
FPGA设计16位二进制全加器模块

热门文章

最新文章