这个乘法器是先使用乘法表达试的相乘形式,然后把每一项表示出来。然后每一列就可以用全加器实现,分成多层来做,因为每个全加器只能有a,b,cin三个一位的输入。然后接着层层算,最后算到只有一位大小的时候就直接相加。Wallace在1964年提出采用树形结构减少多个数累加次数的方法,成为wallace树结构加法器。wallance树充分利用全加器3-2压缩的特性,随时将可利用的所有输入和中间结果及时并行计算,大大节省了计算延时。下图是wallance树型结构和CSA结构的对比。其结构的关键特性在于利用不规则的树形结构对所有的准备好输入数据的运算及时并行处理。

代码:

module signed_multi(a,b,result);//in this module,you can find that you can initial the value of wireinput   [7:0]  a,b;output  [15:0] result;wire    [7:0]  a,b;wire    [15:0] result;reg     [7:0]  p[7:0];integer i,j;always @(*) beginfor(i = 0;i <= 7;i = i + 1)for(j = 0;j <= 7;j = j + 1)p[i][j] = a[i]&b[j];endassign result[0] = p[0][0];//--------------------level 1----------------------wire [2:0] s1[12:1];wire [2:0] c1[13:2]; //index can be a to non-zero//index 14:  p[7][7]//index 13:  p[7][6],p[6][7]parameter zero = 1'b0;assign result[1] = s1[1][0];add fa1_01_0(p[1][0],p[0][1],zero,s1[1][0],c1[2][0]);     //s[1] is result[1]add fa1_02_0(p[2][0],p[0][2],p[1][1],s1[2][0],c1[3][0]);     add fa1_03_0(p[3][0],p[2][1],p[1][2],s1[3][0],c1[4][0]);  //p[0][3]    add fa1_04_0(p[4][0],p[3][1],p[2][2],s1[4][0],c1[5][0]);add fa1_04_1(p[1][3],p[0][4],zero,   s1[4][1],c1[5][1]);add fa1_05_0(p[5][0],p[4][1],p[3][2],s1[5][0],c1[6][0]);add fa1_05_1(p[2][3],p[1][4],p[0][5],s1[5][1],c1[6][1]);add fa1_06_0(p[6][0],p[5][1],p[4][2],s1[6][0],c1[7][0]);add fa1_06_1(p[3][3],p[2][4],p[1][5],s1[6][1],c1[7][1]);  //p[0][6]add fa1_07_0(p[7][0],p[6][1],p[5][2],s1[7][0],c1[8][0]);add fa1_07_1(p[4][3],p[3][4],p[2][5],s1[7][1],c1[8][1]);add fa1_07_2(p[1][6],p[0][7],zero,   s1[7][2],c1[8][2]);add fa1_08_0(p[7][1],p[6][2],p[5][3],s1[8][0],c1[9][0]);add fa1_08_1(p[4][4],p[3][5],p[2][6],s1[8][1],c1[9][1]);  //p[1][7]add fa1_09_0(p[7][2],p[6][3],p[5][4],s1[9][0],c1[10][0]);add fa1_09_1(p[4][5],p[3][6],p[2][7],s1[9][1],c1[10][1]); add fa1_10_0(p[7][3],p[6][4],p[5][5],s1[10][0],c1[11][0]);add fa1_10_1(p[4][6],p[3][7],zero,   s1[10][1],c1[11][1]);add fa1_11_0(p[7][4],p[6][5],p[5][6],s1[11][0],c1[12][0]);//p[4][7]add fa1_12_0(p[7][5],p[6][6],p[5][7],s1[12][0],c1[13][0]);//--------------------level 2----------------------wire [1:0] s2[13:2];wire [1:0] c2[14:3];assign result[2] = s2[2][0];add fa2_02_0(s1[2][0],c1[2][0],zero,    s2[2][0],c2[3][0]);add fa2_03_0(s1[3][0],p[0][3], c1[3][0],s2[3][0],c2[4][0]);add fa2_04_0(s1[4][0],s1[4][1],c1[4][0],s2[4][0],c2[5][0]); //c1[5][1]add fa2_05_0(s1[5][0],s1[5][1],c1[5][0],s2[5][0],c2[6][0]);add fa2_06_0(s1[6][0],s1[6][1],p[0][6], s2[6][0],c2[7][0]);add fa2_06_1(c1[6][0],c1[6][1],zero,    s2[6][1],c2[7][1]);add fa2_07_0(s1[7][0],s1[7][1],s1[7][2],s2[7][0],c2[8][0]);add fa2_07_1(c1[7][0],c1[7][1],zero,    s2[7][1],c2[8][1]);add fa2_08_0(s1[8][0],s1[8][1],p[1][7], s2[8][0],c2[9][0]);add fa2_08_1(c1[8][0],c1[8][1],c1[8][2],s2[8][1],c2[9][1]);add fa2_09_0(s1[9][0],s1[9][1],c1[9][0],s2[9][0],c2[10][0]);//c1[9][1]add fa2_10_0(s1[10][0],s1[10][1],c1[10][0],s2[10][0],c2[11][0]);//c1[10][1]add fa2_11_0(s1[11][0],p[4][7],c1[11][0],  s2[11][0],c2[12][0]);//c1[11][1]add fa2_12_0(s1[12][0],c1[12][0],zero,     s2[12][0],c2[13][0]);add fa2_13_0(c1[13][0],p[6][7],p[7][6],    s2[13][0],c2[14][0]);//--------------------level 3----------------------wire [11:3] s3;wire [12:4] c3;assign result[3] = s3[3];add fa3_03_0(zero,c2[3][0],s2[3][0],s3[3],c3[4]);add fa3_04_0(zero,c2[4][0],s2[4][0],s3[4],c3[5]);add fa3_05_0(s2[5][0],c1[5][1],c2[5][0],s3[5],c3[6]);add fa3_06_0(s2[6][0],s2[6][1],c2[6][0],s3[6],c3[7]);add fa3_07_0(s2[7][0],s2[7][1],c2[7][0],s3[7],c3[8]);//c2[7][1]add fa3_08_0(s2[8][0],s2[8][1],c2[8][0],s3[8],c3[9]);//c2[8][1]add fa3_09_0(s2[9][0],c1[9][1],c2[9][0],s3[9],c3[10]);//c2[9][1]add fa3_10_0(s2[10][0],c1[10][1],c2[10][0],s3[10],c3[11]);add fa3_11_0(s2[11][0],c1[11][1],c2[11][0],s3[11],c3[12]);//--------------------level 4----------------------wire [14:4] s4;wire [15:5] c4;assign result[4] = s4[4];add fa4_04_0(zero,s3[4],c3[4],s4[4],c4[5]);add fa4_05_0(zero,s3[5],c3[5],s4[5],c4[6]);add fa4_06_0(zero,s3[6],c3[6],s4[6],c4[7]);add fa4_07_0(c2[7][1],s3[7],c3[7],s4[7],c4[8]);add fa4_08_0(c2[8][1],s3[8],c3[8],s4[8],c4[9]);add fa4_09_0(c2[9][1],s3[9],c3[9],s4[9],c4[10]);add fa4_10_0(zero,s3[10],c3[10],s4[10],c4[11]);add fa4_11_0(zero,s3[11],c3[11],s4[11],c4[12]);add fa4_12_0(c2[12][0],s2[12][0],c3[12],s4[12],c4[13]);add fa4_13_0(zero,s2[13][0],c2[13][0],s4[13],c4[14]);add fa4_14_0(p[7][7],c2[14][0],zero,s4[14],c4[15]);assign result[15:5] = {zero,s4[14:5]} + c4[15:5];endmodule
module add(a,b,cin,s,cout);input wire a,b,cin;output wire s,cout;assign {cout,s} = a + b + cin;
endmodule

综合结果:

Tip:

以上的乘法器是无符号的,如果要是想计算有符号的乘法。那么就可以在原来的基础上加上16‘1000_0001_0000_0000(第一个1好加,只要最后加上即可。中间那个1就会使得第一级那里多一个加法器,整个的结构有点改变。)另外需要将一些p值取反,a或者b的index有7的就要再将a&b之后取反。

数字电路设计之Wallace树形乘法器相关推荐

  1. Wallace树形乘法器(Verilog),自动生成器(C/C++版)

    学过<数字逻辑>课程的同学,对于Wallace树形乘法器应该不陌生(手拙,灵魂画师--建议读者参考网上的图片). 总的来说,就是一个无符号数乘法器.特点是速度快,使用逻辑电路完成乘法,但是 ...

  2. verilog学习笔记之一--(简化)华莱士(Wallace)树形乘法器设计--(原代码出自用芯学项目)

    verilog学习笔记之一–(简化)华莱士(Wallace)树形乘法器设计–(原代码出自用芯学项目) 学习准备1: 树形乘法器原理:参考<数字集成电路-电路.系统与设计(第二版)>–P43 ...

  3. 电脑网络信号传输频率_高速数字电路设计中信号完整性

    信号完整性是许多设计人员在高速数字电路设计中涉及的主要主题之一.信号完整性涉及数字信号波形的质量下降和时序误差,因为信号从发射器传输到接收器会通过封装结构.PCB走线.通孔.柔性电缆和连接器等互连路径 ...

  4. 《FPGA入门教程》看书随笔——数字电路设计入门

    1.数字电路设计的核心是逻辑设计.数字电路的逻辑值只有'1'和'0',表征的是模拟 电压或电流的离散值,一般'1'代表高电平,'0'代表低电平. 2.当前的数字电路的电平标准常见的有:TTL.CMOS ...

  5. 流水线技术在高速数字电路设计中的应用

    流水线技术在高速数字电路设计中的应用 来源:电子开发网 作者:肖良军 时间:2007-09-04 发布人:谭欣 摘要:流水线技术是设计高速数字电路的一种最佳选择之一,对其实现原理作了较形象的阐述.针对 ...

  6. 交流信号叠加直流偏置_高速数字电路设计通关五部曲(二):接口信号匹配与对接...

    昨天分享了高速数字电路设计的基本概念和常见高速电路及特点(若需回顾,请戳下方链接).今天来看看高速数字电路的接口信号匹配与对接. 这是一个连接:  高速数字电路设计通关五部曲(一) 基本概念+常见高速 ...

  7. 数字电路设计--用3个开关控制一个电灯

    题目要求:用数据选择器设计一个用 3 个开关控制一个电灯的逻辑电路, 当改变任何一个开关的状态,都能控制电灯由亮变灭或由灭变亮. 最好用 74LS151. 题目链接:数字电路设计_百度知道 ----- ...

  8. 基于 Verilog 的经典数字电路设计(12)串并转换器

    基于 Verilog 的经典数字电路设计(12)串并转换器 版权所有,新芯设计,转载文章,请注来源 引言

  9. 基于 Verilog 的经典数字电路设计(13)并串转换器

    基于 Verilog 的经典数字电路设计(13)并串转换器 版权所有,新芯设计,转载文章,请注来源 引言

最新文章

  1. Math.round(11.5)等于多少? Math.round(-11.5)等于多少?
  2. 输入一颗二元查找树,将该树转换为它的镜像
  3. Zuul:智能路由和过滤(译)
  4. Django + Uwsgi + Nginx 的生产环境部署项目知识点
  5. Web开发框架–第1部分:选项和标准
  6. BootStrap table 传递搜索参数
  7. oracle11gr2克隆安装,克隆安装Oracle 11G HOME
  8. C程序设计--指针(用“ 函数 ”对“ 数组 ” 进行操作)
  9. 手机端app存取session问题(tp5框架)
  10. java-清楚明了的集合
  11. 【kafka】Kafka 可视化工具Kafka Eagle安装和使用
  12. Bitly野心彰显,发布实时热门链接引擎Realtime
  13. 在你朋友面前伪装黑客2(程序代码)
  14. 实例:【基于机器学习的NBA球员信息数据分析与可视化】
  15. python 实现双纵轴(y)轴图像的绘制(中文label),解决只显示一个折线label的问题
  16. W32Dasm CPU 占用率问题
  17. 【Java基础知识】 异常处理机制
  18. Android Studio中进行单元测试和UI测试
  19. 针对“使用U盘提示使用前需要将其格式化,无法访问U盘情况”的解决办法
  20. CTFSHOW网络迷踪-批挨了西

热门文章

  1. 化学气相沉积CVD工艺中MKS下游排气高速节流阀的国产化替代方案及产品
  2. Linux “用户不在 sudoers 文件中。此事将被报告“的解决方法
  3. 企业生产线改善毕业论文【Flexsim仿真实例】
  4. 【NISP一级】4.3 移动终端安全
  5. 可靠性form matlab 求解,含风电场电力系统的可靠性评估Matlab程序
  6. FLAC在Linux中安装-Please install ‘flac’ on ALL worker nodes
  7. 【图像分类】(DenseNet)Densely Connected Convolutional Networks
  8. [ 图像分类 ] 经典网络模型5——DenseNet 详解与复现
  9. ssdb java_hydrogen-ssdb
  10. 在C#中保存Bouncy Castle生成的密钥对