乘法器行的设计.ppt
文本预览下载声明
Copyright ? 2009 乘法器设计 版本管理 修改记录 审核记录 版本号. 作者 描述 修改日期 V01 陈和炯 创建 2012-12-07 版本号. 职务 签名 修改日期 内容组成 实验介绍 设计原理 注意事项 实验介绍 乘法器设计 直接使用“*”作为乘法,这种方法谈不上设计乘法器,其最终的硬件实现要根据综合工具综合的结果。 好的综合工具可以综合出想要的结果,但是通常得到的都是劣等的乘法运算 实现乘法器的方法很多,各有各的优缺点,常见的有移位相加法,加法树法,查表法,混合法等等。 内容组成 实验介绍 设计原理 注意事项 设计原理 电路设计中常采用移位相加的方式实现乘法的功能 移位相加法和加法树(二叉树)法都属于此类 当然如查表法等另辟蹊径,在某些条件下可能更有效 移位相加法 移位相加的原理 从被乘数的最低位开始判断,若为1,则乘数左移i(i=0,1...(WIDTH-1))位后,与上一次和相加;若为0,则乘数左移i位后,以0相加。直至被乘数的最高位。 乘法最终就是由加法和移位运算构成的,由此可以用高速度的加法和移位实现乘法操作。 移位相加法 移位相加关键代码实现 i = 0; r_dout = 0; ? … … ? if(iWIDTH) begin r_dout = r_dout + ((din_a[i]==1) ? (din_bi) : 0); i = i + 1; end 移位相加法 这种算法对被乘数的判断是从低到高按顺序执行的,即串行的方式 优点:占用的资源较少,在低速信号处理中有广泛的应用 缺点:串行乘法器的速度比较慢,一个结果输出需要花费多个时钟周期 在高位宽乘法运算中尤为明显 加法树法 加法树法的设计原理本质上依然是移位相加,不同的是采用了流水线的方法 将组合逻辑分割成一个一个小的组合逻辑,中间加上触发器用来锁存数据,这样可以大大提高效率 加法树法 加法树法关键代码实现 对被乘数各个位并行判断 begin : piple_line // level 1 output buf0 = din_a[0] ? (din_b0) : 0; buf1 = din_a[1] ? (din_b1) : 0; buf2 = din_a[2] ? (din_b2) : 0; buf3 = din_a[3] ? (din_b3) : 0; buf4 = din_a[4] ? (din_b4) : 0; buf5 = din_a[5] ? (din_b5) : 0; buf6 = din_a[6] ? (din_b6) : 0; buf7 = din_a[7] ? (din_b7) : 0; // level 2 output buf01 = buf0 + buf1; buf23 = buf2 + buf3; buf45 = buf4 + buf5; buf67 = buf6 + buf7; // level 3 output buf02 = buf01 + buf23; buf46 = buf45 + buf67; // level 4 output dout = buf02 + buf46; end 加法树法 加法树法采用多级流水线结构,是一种并行的方式,将相邻的两个部分的结果再加到最终的输出乘积上,即排列成一个二叉树形式的结构 流水线乘法器处理速度比串行加法器快很多 以8-bit输入为例,只需要4个时钟周期即可输出结果 其缺点是消耗的资源较多 其他方法 查表法 采用的是建立一个表,里面存放了所有的乘法结果,乘数和被乘数用来作为地址去查找里面的乘积。 可以大大提高乘法的速率,但是当乘法位数很大时会要求产生很大的表格 适合位数较小的乘法,特别适合有一个乘数为固定的乘法 混合法 根据多种方式设计出来的乘法器。 内容组成 实验介绍 设计原理 注意事项 注意事项 本设计需要注意以下事项: 两种方法的乘法器设计中,使用的中间(变量)寄存器(如r_dout,buf等)的位宽定义要满足要求,否则结果有误。 参考答案给出的串行乘法器使用的是状态机,用户需注意对输入赋值的时间,其结果可在仿真上看出。 Copyright ? 2009
显示全部