《ASIC系统设计实验报告八位乘法器.pdf》由会员分享,可在线阅读,更多相关《ASIC系统设计实验报告八位乘法器.pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1/7 八位乘法器的设计 汪明 2080130204 信号与信息处理 乘法是算术运算中经常用到的一个运算单元,所以在算法实现中会经常用到乘法。由于乘法器具有一定的复杂性,考虑到面积等因素,很多传统的处理器中都不包含乘法器单元,乘法则是通过算法换算成加法和移位在处理器中进行实现,针对这些处理器编写程序的时候应尽量少的应用乘法运算。随着 DSP 技术的逐步发展,目前大多数高性能的处理器中都包含了乘法器运算单元,但仍有很多小型的控制型处理器不包含这一单元,所以设计面积小、速度快、性能稳定的乘法器模块仍然很有意义。本实验的目的是选用一种设计方案设计一个八位乘法器,利用 XINLINX ISE 软件进行
2、 VHDL 程序的编写,然后对程序进行仿真验证,并对所设计的乘法器进行评价。1 原理分析与方案选择 乘法器的设计有多种方案,有模拟乘法器、数字乘法器两种类型,前者主要是利用模拟器件对模拟信号进行乘法的设计,复杂度较高,后者则是通过数字器件来实现数字信号的乘法。本实验利用 FPGA 设计数字乘法器件,根据数字信号的乘法运算准则,又有串行和并行两种设计方法,串行设计时被乘数从低位到高位串行输入,乘法结果从低位到高位串行输出,其常用的结构(四位乘法器)如下图(1)所示;并行乘法器的输入/输出采用并行的方式,通常情况下计算性能比串行的好。图 1 四位串行乘法器结构 本文采用并行输入/输出方式来进行乘法
3、器的设计。下面以 4 位二进制数的乘法为例,对二进制乘法运算的过程(图 2 示)进行说明。由图 2 可知,如果对中间部分一行一行的处理,则乘法部分由一个个的 2 输入与门与二输入全加器组成,将这些结构联合在一起组成如图 3 所示的结构。)0()1()2()3()4()5()6()7(0313233302122232011121310010203001230123proproproproproproproprobabababababababababababababababaaaaabbbb 图 2 四位二进制乘法过程 2/7 图 3 四位二进制乘法结构图 从图 3 可以看出,上述结构中顶层、底层
4、、中间层分别采用不同的结构,而且中间层的三个层结构完全相同。在设计的时候,首先设计二位与门与二位全加器,然后构成组成上述结构的三种不同的模块,进而构造三种层的结构,用模块设计的方法完成乘法器的设计。上图指的是 4 位乘法器的结构模型,根据乘法运算规则,很容易推广到八位的情况。本实验将采用这种方法来进行八位乘法器的设计。2 模块分析与 VHDL 程序的编写 本设计采用元件(component)的设计方法,将二输入与门、二输入全加器、图 3 中三种不同的方框结构以及三种不同的层结构设计为元件,存储在元件库中,然后在设计乘法器的过程中直接调用这些模块实现乘法的功能。2.1 二输入与门与二输入全加器
5、从上面的结构图中可以看出,二输入的与门是该结构中用的最频繁的一个元件之一,二输入与门的 VHDL 语言非常简单,其源代码如图 4 示。二输入全加器 full_adder 即以带进位的加法器,通过全加的准则,也很容易写出全加器的 VHDL 代码,代码如图 5 示。设置适当的波形,对这两个模块进行仿真验证,很容易证明元件设计的正确性,由于这两个元件都很简单,故不再描述仿真结果。在完成仿真后,将这两个元件添加进元件库 my_compopnents中,以便以后其它结构进行调用。3/7 图 4 二输入与门的 VHDL 代码 图 5 二输入全加器的 VHDL 代码 2.2 元件包 此次乘法器的设计采用的是
6、 component 的方法,故像上面的两个元件等要添加到元件包中,所以需要一个存放元件的元件包。在这里,我们通过设计 package 文件的方法将所有可能用到的元件放入元件包 my_components 中,其源代码如图 6 所示。从图中可以看出,其包含二输入与门、二输入全加器、top_row、mid_row、low_row 共 5 个元件。图 6 元件包 my_components 2.3 顶层、中间层及底层模块 从结构图中可以看出,乘法器的结构中包含三个大的模块,即顶层结构(top_row)、中间层结构(mid_row)和底层结构(low_row)。在上一节的元件包中,已将这三种模块的接
7、口写进了元件包 my_components。这三种模块的结构都不一样,顶层图中主要包含的是二输入与门、中间层中则二输入与门和二输入全加器、底层则只有全加器,对这三种结构分4/7 别进行 VHDL 程序的编写(注意程序中需用到二输入与门与二输入全加器,故在头文件库中应该添加语句:use work.my_components.ALL;),代码如图 7、8、9 示。同样,每完成一种结构后,应进行仿真验证,由于这一部分的描述方法很固定,只要综合没有问题基本上不会出错,所以在这里,也不给出仿真所设置的波形。经仿真验证这三种结构的设计都是正确性,可以实现预定的功能,放入元件包中后同样可以被其他的程序所引用
8、。图 7 顶层模块的 VHDL 程序 图 8 底层模块的 VHDL 程序 5/7 图 9 中间层模块的 VHDL 程序 2.4 乘法器的顶层设计 设计好上面所有的元件后,便可以利用元件库中的这些元件来进行乘法器的设计了,按照图 3 所示的结构来编写乘法器的 VHDL 语言。同样,由于利用到了自己设计的元件库,故在程序的 library 区,应添加代码:use work.my_components.ALL。编写好的 VHDL 如下图 10 所示。图 10 乘法器的顶层 VHDL 设计 6/7 3 仿真实现 在上一节,完成了各元件的 VHDL 设计与仿真验证,并最终完成了乘法器的顶层 VHDL设计
9、。现设计适当的波形文件,对完成的乘法器进行仿真验证,波形文件 mac_88.tbw 如图11 所示,以及其仿真结果则为图 12。图 11 仿真波形设置图 图 12 仿真结果波形图 从仿真的结果来看,第一组相乘的数据为 4、7,结果因为 28(111000)(括号中均为 2进制),从图 12 中可以看出,prob 的结果正确,同理可以验证 1444=576(10,01000000)、24128=3072(1100,00000000)、15220=3040(1011,11100000)这几组数据的仿真结果均正确,这样,我们可以证明设计的正确性。通过综合与仿真,可以得到乘法器的封装图与顶层电路图,如
10、图 13 示。图 13 乘法器的顶层电路图与封装图 7/7 4 总结 通过了解乘法器的设计方案与设计流程,比较了串行、并行输入/输出两种不同的设计方案,并最终选择并行方式来进行设计 8 位数字乘法器。通过二进制乘法运算的准则,画出实现四位二进制乘法的功能结构图(图 3),并最终推广至 8 位。利用元件 component 的设计理念,对图 3 所示的结构进行 VHDL 硬件描述语言的实现。并最终完成 8 位数字乘法器的设计,对设计的综合仿真表明,设计结果正确。通过这一设计,使我掌握了 VHDL 语言元件设计的方法。总的来说,有以下两点收获。1)乘法器的设计有多种方案可供选择,从模拟乘法器到数字
11、乘法器,不同的方案选择将对应着不同的设计方案。掌握了串行、并行数字乘法器的结构与流程,并通过 VHDL 描述语言实现了乘法器。2)对 XILINX ISE 软件的使用更加熟练,掌握了元件 component 的设计方法,在本次设计中,首次将所有模块设计为元件,存储在元件库 my_components 中。在设计乘法器的过程中利用头文件调用语句 use work.my_components.ALL 来实现对元件的包含。通过元件的设计方法,可以将经常用到的模块封装起来,存放在 ISE 库中,供以后所有的工程调用。所以,作为 FPGA 设计的一个元件的积累,设计一个好的元件有着非常重要的意义,大量的优化的、可用的元件库可以简化 FPGA 的设计周期,提高设计人员的工作效率。