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