ASIC系统设计实验报告八位乘法器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

八位乘法器的设计

汪明 2080130204 信号与信息处理 乘法是算术运算中经常用到的一个运算单元,所以在算法实现中会经常用到乘法。由于乘法器具有一定的复杂性,考虑到面积等因素,很多传统的处理器中都不包含乘法器单元,乘法则是通过算法换算成加法和移位在处理器中进行实现,针对这些处理器编写程序的时候应尽量少的应用乘法运算。随着DSP 技术的逐步发展,目前大多数高性能的处理器中都包含了乘法器运算单元,但仍有很多小型的控制型处理器不包含这一单元,所以设计面积小、速度快、性能稳定的乘法器模块仍然很有意义。本实验的目的是选用一种设计方案设计一个八位乘法器,利用XINLINX ISE 软件进行VHDL 程序的编写,然后对程序进行仿真验证,并对所设计的乘法器进行评价。

1 原理分析与方案选择

乘法器的设计有多种方案,有模拟乘法器、数字乘法器两种类型,前者主要是利用模拟器件对模拟信号进行乘法的设计,复杂度较高,后者则是通过数字器件来实现数字信号的乘法。本实验利用FPGA 设计数字乘法器件,根据数字信号的乘法运算准则,又有串行和并行两种设计方法,串行设计时被乘数从低位到高位串行输入,乘法结果从低位到高位串行输出,其常用的结构(四位乘法器)如下图(1)所示;并行乘法器的输入/输出采用并行的方式,通常情况下计算性能比串行的好。

图1 四位串行乘法器结构

本文采用并行输入/输出方式来进行乘法器的设计。下面以4位二进制数的乘法为例,对二进制乘法运算的过程(图2示)进行说明。由图2可知,如果对中间部分一行一行的处理,则乘法部分由一个个的2输入与门与二输入全加器组成,将这些结构联合在一起组成如图3所示的结构。

)

0()1()2()3()4()5()6()7(0313233302122232011121310010203001230123pro pro pro pro pro pro pro pro b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a a a a a b b b b ----------------------------------------+••••+••••+••••••••⨯K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K 图2 四位二进制乘法过程

图3 四位二进制乘法结构图

从图3可以看出,上述结构中顶层、底层、中间层分别采用不同的结构,而且中间层的三个层结构完全相同。在设计的时候,首先设计二位与门与二位全加器,然后构成组成上述结构的三种不同的模块,进而构造三种层的结构,用模块设计的方法完成乘法器的设计。上图指的是4位乘法器的结构模型,根据乘法运算规则,很容易推广到八位的情况。本实验将采用这种方法来进行八位乘法器的设计。

2 模块分析与VHDL程序的编写

本设计采用元件(component)的设计方法,将二输入与门、二输入全加器、图3中三种不同的方框结构以及三种不同的层结构设计为元件,存储在元件库中,然后在设计乘法器的过程中直接调用这些模块实现乘法的功能。

2.1 二输入与门与二输入全加器

从上面的结构图中可以看出,二输入的与门是该结构中用的最频繁的一个元件之一,二输入与门的VHDL语言非常简单,其源代码如图4示。二输入全加器full_adder即以带进位的加法器,通过全加的准则,也很容易写出全加器的VHDL代码,代码如图5示。设置适当的波形,对这两个模块进行仿真验证,很容易证明元件设计的正确性,由于这两个元件都很简单,故不再描述仿真结果。在完成仿真后,将这两个元件添加进元件库my_compopnents 中,以便以后其它结构进行调用。

图4 二输入与门的VHDL代码图5 二输入全加器的VHDL代码

2.2 元件包

此次乘法器的设计采用的是component的方法,故像上面的两个元件等要添加到元件包中,所以需要一个存放元件的元件包。在这里,我们通过设计package文件的方法将所有可能用到的元件放入元件包my_components中,其源代码如图6所示。从图中可以看出,其包含二输入与门、二输入全加器、top_row、mid_row、low_row共5个元件。

图6 元件包my_components

2.3 顶层、中间层及底层模块

从结构图中可以看出,乘法器的结构中包含三个大的模块,即顶层结构(top_row)、中间层结构(mid_row)和底层结构(low_row)。在上一节的元件包中,已将这三种模块的接口写进了元件包my_components。这三种模块的结构都不一样,顶层图中主要包含的是二输入与门、中间层中则二输入与门和二输入全加器、底层则只有全加器,对这三种结构分

别进行VHDL程序的编写(注意程序中需用到二输入与门与二输入全加器,故在头文件库中应该添加语句:use work.my_components.ALL;),代码如图7、8、9示。同样,每完成一种结构后,应进行仿真验证,由于这一部分的描述方法很固定,只要综合没有问题基本上不会出错,所以在这里,也不给出仿真所设置的波形。经仿真验证这三种结构的设计都是正确性,可以实现预定的功能,放入元件包中后同样可以被其他的程序所引用。

图7 顶层模块的VHDL程序

图8 底层模块的VHDL程序

图9 中间层模块的VHDL程序

2.4 乘法器的顶层设计

设计好上面所有的元件后,便可以利用元件库中的这些元件来进行乘法器的设计了,按照图3所示的结构来编写乘法器的VHDL语言。同样,由于利用到了自己设计的元件库,故在程序的library区,应添加代码:use work.my_components.ALL。编写好的VHDL如下图10所示。

图10 乘法器的顶层VHDL设计

3 仿真实现

在上一节,完成了各元件的VHDL设计与仿真验证,并最终完成了乘法器的顶层VHDL 设计。现设计适当的波形文件,对完成的乘法器进行仿真验证,波形文件mac_88.tbw如图11所示,以及其仿真结果则为图12。

图11 仿真波形设置图

图12 仿真结果波形图

从仿真的结果来看,第一组相乘的数据为4、7,结果因为28(111000)(括号中均为2进制),从图12中可以看出,prob的结果正确,同理可以验证144×4=576(10,01000000)、24×128=3072(1100,00000000)、152×20=3040(1011,11100000)这几组数据的仿真结果均正确,这样,我们可以证明设计的正确性。通过综合与仿真,可以得到乘法器的封装图与顶层电路图,如图13示。

图13 乘法器的顶层电路图与封装图

相关文档
最新文档