《16×16位移位相加乘法器设计毕业论文.doc》由会员分享,可在线阅读,更多相关《16×16位移位相加乘法器设计毕业论文.doc(40页珍藏版)》请在三一办公上搜索。
1、本科学生毕业论文论文题目:1616位移位相加乘法器设计学 院:电子工程学院年 级:2009级专 业:集成电路设计与集成系统姓 名:于昊学 号:20092141指导教师:曹贝 2012年 6 月 13日摘要随着集成电路设计技术的不断进步,乘法器的芯片设计实现的研究与应用越来越广泛,对乘法器进行ASIC芯片设计,具有设计实现过程简单、所用到的EDA工具完善而且成熟、硬件开销小、易于在VLSI电路或系统级芯片中集成。通常,数字电路设计的流程对于芯片的实现而言,需要RTL级的HDL描述,并要对各层次的设计进行功能仿真验证,在验证电路能按预期设计功能工作后,即可对RTL级的HDL描述进行综合、优化,形成
2、门级网表。整个设计流程可称为数字电路的前端设计。本课题基于移位相加算法的研究,设计16位移位相加乘法器,并在功能仿真通过后,将所设计的Verilog RTL级代码进行综合,采用Synopsys公司Design Compiler EDA工具进行电路综合,获得16位移位相加乘法器的门级网表与电路实现。关键词数字电路设计;移位相加乘法器;综合;Abstract Abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abst
3、ract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract abstract.(英文摘要内容必须与中文摘要完全对应。英文摘要采用Times New Roman小四号字书写,毕业论文、毕业设计行与行之间、段落和层次标题以及各段落之间均为1.5倍行距。)Key wordsKey words;key words; key word
4、s(英文关键词内容必须与中文关键词完全对应。英文关键词采用Times New Roman小四号字书写,毕业论文、毕业设计行与行之间、段落和层次标题以及各段落之间均为1.5倍行距。关键词与关键词之间用“;”隔开)目录摘要1Abstract2第一章 乘法器研究的背景与意义41.1乘法器的发展现状41.1.1国内乘法器现状51.1.2国外乘法器现状51.2乘法器概述61.3乘运算61.4乘法器结构71.5乘法器端口定义8第二章 移位相加乘法器设计的基本原理92.11 移位相加算法92.12 乘法器设计原理102.2移位相加乘法器原理11第三章 1616位移位相加乘法器设计与仿真123.1 16位移位
5、相加乘法器的设计123.2 16位移位相加乘法器Verilog文件设计123.3 1616位移位相加乘法器Modelsim仿真143.3.1 1616位移位相加乘法器经典数组运算结果153.3.2 1616位移位相加乘法器一般情况运算结果17第四章 1616位移位相加乘法器Verilog设计综合184.1 RTL级概念184.2 RTL级综合结果与分析204.3 16位移位相加乘法器电路图22结论26参考文献27附录一28致谢38第一章 乘法器研究的背景与意义数字信号处理中需要频繁进行大数据量的乘法运算。乘法器作为数字信号处理器的重要部件,它的速度直接决定了整个处理器的性能。本课题采用veri
6、log HDL设计了一个16位移位相加乘法器。首先介绍了移位相加乘法器的算法以及比较移位相加乘法器,Booth乘法器,Wallace Tree乘法器各自的特点。介绍了本课题在综合时需用到的Design Compiler(DC)综合工具。随后提出了自己的乘法器设计架构设计了一个16位移位相加乘法器。并用Design Compiler(DC)进行了优化。所设计的乘法器是1616位,基于Altera公司的Modelsim平台上用Verilog_HDL软件进行功能仿真,验证了功能正确,达到了预期的目标。微处理器的发展随着集成电路的迅猛发展而日新月异。在微处理器芯片中乘法器是进行数字信号处理的核心同时也
7、是微处理器中进行数据处理的关键部件,它已经是现代计算机必不可少的一部分。乘法器的算法也有很多种,例如移位相加算法、布斯(Booth)算法、华莱士树(Wallace Tree)算法等。其中移位相加算法是乘法器最基础的算法,其它的算法都是在它的基础上为了压缩和优化这种算法延伸出来的算法,目的是提高乘法器的运算速度以及实现更多的乘法器功能。虽然不断有关于32位、64位乘法器的研究出现, 但由于大量的媒体信号处理只需16位运算就能胜任, 因此对16位乘法器的研究仍有着相当的应用价值。1.1乘法器的发展现状过去的十年中,研究者扩展了Booth编码算法的空间,提高了乘法器的性能;改进了部分积压缩技术,使乘
8、法器结构更加规则;以传输管逻辑、多路选择器和动态技术为基础的各种电路实现方法也持续刷新高性能乘法器的实现记录;与此同时,与物理实现紧密相关的乘法器拓扑结构的研究也硕果累累。但不断提高的高性能运算需求使得高性能乘法器的设计和实现仍然是当前的热门话题。1.1.1国内乘法器现状以下研究现状怎么一篇参考文献也没有啊乘法器的设计与应用在国内研究领域也取得了很好的成绩,1993年中科院声学研究所应用于18位乘法器,实现工作频率38MHZ.。随着应用要求的领域与性能不断提高,1997年国防科技大学完成应用于数字神经处理的16位乘法器,频率30MHZ。2001年西安微电子技术中心于敦山实现了32位定/浮点乘法
9、器延时56/76ns。进入新世纪以来,集成电路工艺水平不断提升,2002年西安交通大学袁寿财实现了0.25um下延时40ns。2003年中科院计算研究所周旭采用0.18um的工艺实现54位浮点乘法器384MHZ。2004年复旦大学武新宇采用0.18um的工艺实现64位乘法器延时2.82ns。2005年上海大学王田采用0.18um的工艺实现32位乘法器延时3.15ns。2007年东南大学王定采用FPGA设计24位乘法器延时18.81ns。乘法器的设计一直是集成电路设计研究领域的一个热点,也有着广泛的应用。1.1.2国外乘法器现状理论方面乘法器研究上的里程碑应该从Booth AD在1951年提出的
10、Booth编码方法和Wallace的树型压缩开始。随后出现了Booth2算法、压缩器(进位保留加法)、延迟平衡树等各种算法结构。国外乘法器在电路方面的发展同样迅猛,1995年Ohkubo基于传输管逻辑实现了44ns 54位乘法器,同时提出了新的4:2压缩单元结构和进位选择加法器结构。1996年Hanawa实现了43nS的54位乘法器,同一年,Makino实现了88ns54位冗余二进制编码乘法器。1997年Inoue提出了符号选择Booth解码和改进的4:2压缩单元结构,实现了41ns的54位乘法器。1998年Hagihara基于动态技术和传输管逻辑实现了27 ns的54位乘法器。同年Carls
11、on介绍了60 ns的64位乘法器实现方法。2001年Itoh实现了一个600MHz的两级流水线的54位乘法器。2003年Cho基于标准单元库实现了一个325ns的54位乘法器,并提出了改进的进位选择加法器结构。1.2乘法器概述乘法器在当今数字信号处理以及其他诸多应用领域中起着十分重要的作用。随着科学技术的发展,许多研究人员已经开始试图设计一类拥有更高速率和低功耗,布局规律占用面积小,集成度高的乘法器。这样,就能让它们更加适用于高速率,低功耗的大规模集成电路的应用当中。通常的乘法计算方法是添加和位移的算法。在并行乘法器当中,相加的部分乘积的数量是主要的参数。它决定了乘法器的性能。为了减少相加的
12、部分乘积的数量,修正的Booth算法是最常用的一类算法。为了实现速度的提高Wallace树算法可以用来减少序列增加阶段的数量。我们进一步结合修正的booth算法和Wallace树算法,可以看到将它们集成到一块乘法器上的诸多优势。但是,随着并行化的增多,大量的部分乘积和中间求和的增加,会导致运行速度的下降。不规则的结构会增加硅板的面积,并且由于路由复杂而导致中间连接过程的增多继而导致功耗的增大。另一方面串并行乘法器牺牲了运行速度来获得更好的性能和功耗。因此,选择一款并行或串行乘法器实际上取决于它的应用性质。在本文中,我们将介绍乘法算法以及在应用结构方面的速度比较,占用面积,功率和这些情况的组合绩
13、效指标。1.3乘运算考虑两个没有符号的二进制数X和Y,分别为M位宽和N位宽。为了说明乘法运算,可以用二进制形式来表示X和Y:以下公式后面要有标号,如第一章的第一个公式 (1-1),依次 。于是乘法运算定义如下: 执行一个乘法运算最简单的方法是采用一个两输入的加法器。对于M和N位宽的输入,乘法采用一个N位加法器时需要M个周期。这个乘法的移位相加算法把M个部分积(partial product)加在一起。每一个部分积是通过将被乘数与乘数的一位相乘(这本质上是一个“与”操作),然后将结果移位到这个乘数的位置得到的。实现乘法的一个更快的办法是采用类似于手工计算乘法的方法。所有的部分积同时产生并组成一个
14、列阵。运用多操作数相加来计算最终的积。这一方法如图所示。这一组操作可以直接映射到硬件。所形成的结构称为阵列乘法器(array multiplier),它结合下面三个功能:产生部分积、累加部分积和最终相加。例如: 1101 被乘数1101 乘数1101 部分积00001101110110010101 结果 二进制乘法的例子1.4乘法器结构乘法器的结构种类很多,在此我只介绍一种乘法器结构供接下来设计移位相加乘法器结构的设计做参考。浮点数包括尾数和指数两部分,尾数部分进行的是乘法运算,指数部分进行的是加法运算,并依据尾数运算结果进行指数调整。图2-1 乘法器结构尾数处理部分主要进行尾数扩展和一些数据
15、正负的判断以及负数的生成,以备在进行Booth编码的时候使用。部分积的产生采用修正的Booth算法产生6个部分积,然后采用3:2和4:2压缩器将结构压缩为两个,高速相加得到结果。之后通过符号修正、尾数舍入、规格化等操作对指数进行调整即可完成乘法功能。1.5乘法器端口定义 通常,根据乘法器的功能计算要求定义乘法器的端口如下:mul_16_unsignedain15.0 startbin15.0 done clk youtrst_n ain :16位乘数输入bin :16位被乘数输入clk :工作时钟输入res_n :复位信号输入start:开始位done:结束位 yout:乘积输出 第二章 移位
16、相加乘法器设计的基本原理移位相加乘法器实现起来比较简单,它的设计思想就是根据乘数的每一位是否为1进行计算,若为1则将被乘数移位相加。一个乘法器只需要一个移位寄存器和一个加法器就能组成。2.1 移位相加乘法器设计基础2.11 移位相加算法移位相加算法是乘法器最基础的算法,下面以一个例子说明移位相加法实现MN。手动乘法运算举例:1 1 0 1 1 0 1 1 1 1 0 1 1 1 0 1 0 0 0 0 1 1 0 1 1 0 0 0 1 1 1 1计算机实现方案1:部分积左移: 1 1 0 1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 1 0 0 0 0 1 0 0
17、1 1 1 1 1 0 1 1 0 0 0 1 1 1 1计算机实现方案2:部分积之和右移: 1 1 0 1 1 0 1 1 1 1 0 1 第一次部分积 1 1 0 1 部分积之和右移1位 1 1 0 1 第二次部分积 1 0 0 1 1 1 部分积之和 1 0 0 1 1 1 部分积之和右移1位 0 0 0 0 第三次部分积 1 0 0 1 1 1 部分积之和 1 0 0 1 1 1 部分积之和右移1位 1 1 0 1 第四次部分积 1 0 0 0 1 1 1 1 部分积之和 1 0 0 0 1 1 1 1 部分积之和右移1位 2.12 乘法器设计原理乘法器基本工作原理大体分为三个步骤:(
18、 1) 先将二进制的被乘数与乘数的每一位分别相乘, 得到与乘数的位数相同个数的部分积; ( 2) 将得到的部分积按权值错位相加, 进行部分积压缩;( 3) 一级加法,通常采用一个超前进位加法器模块。对乘法器的设计自然集中在各模块的性能优化上,以达到速度快、面积小的目的。2.2移位相加乘法器原理从手算的经验可知执行一个乘法运算最简单的方法就是采用一个两输入的加法器,进行部分积的累加,得到最终结果。对于N位的乘数与N位的被乘数的输入,实现乘法运算需要N个加法器与2N个寄存器,乘法的移位和相加把N个部分积加在一起,部分积是通过被乘数与乘数移位后末位相与操作得到,然后将结果与存放在寄存器中的前次运算得
19、到的结果进行相加,并将结果仍然存放在寄存器中,如此反复。这样的操作在硬件实现上就是移位相加乘法器。移位相加乘法器的中间结果需要用寄存器保存的。其中时钟信号可以使用系统时钟信号。许多加法器结构都是应乘法器设计要求而生,如CPA(carry2propagateadder)、CSA(carry2saveadder)7和Wallacetree8等。移位相加乘法器优点是占用资源少。在第一个时钟来的时候,把乘数的最低位与被乘数相与,当第二个时钟到来时,仍然可以用刚才的与门来进行相与。这样,即使乘数有多少位,都是用相同的与门:缺点是运算速度慢,每次时钟乘数输入一位,假设乘数有4位,就需要4个时钟周期才可以把
20、结果输出。图3-1 移位相加乘法器第三章 1616位移位相加乘法器设计与仿真3.1 16位移位相加乘法器的设计位移和添加乘法器的一般结构如下图所示,对于32比特的数乘运算,根据乘数最低有效位的数值,被乘数的数值被相加并累积。在每一个时钟循环周期内,乘数被左移一个比特,并且它的位值被测试,如果位值是0,则只进行一次位移操作。如果位值是1,则被加数被放入累加器中,并且左移一位。当所有乘数的比特值被测试完之后,结果就在累加器当中。累加器最初是N位,相加之后变成2N位,最低有效位包涵了乘数。延迟是N个最大循环周期。3.2 16位移位相加乘法器Verilog文件设计完整的1616位移位相加乘法器的Ver
21、ilog文件设计和激励测试文件将会在附件中给出,下面我只对本乘法器的重要部分做下说明。module mux_16( clk,rst_n, start,ain,bin,yout,done);reg15:0 areg;reg15:0 breg;reg31:0 yreg;reg done_r;reg4:0 i;这部分是我定义了一个时钟clk,一个复位键rst_n,一个开始键start,输入乘数ain,输入被乘数bin,输出yout,和结束位done。以及定义了两个16位寄存器areg,breg,一个32位寄存器yerg,一个1位寄存器done_r,一个5位寄存器i。always(posedge cl
22、k or negedge rst_n) if(!rst_n) i=5d0; else if(start & i5d17) i = i+1b1; else if(!start) i = 5d0;always(posedge clk or negedge rst_n) if(!rst_n) done_r=1d0; else if(i=5d16) done_r = 1b1; else if(i=5d17) done_r = 1b0; assign done = done_r;这部分主要对开始位start和终止位done的约束。always(posedge clk or negedge rst_n)
23、begin if(!rst_n) begin areg = 16h0000; breg = 16h0000; yreg = 32h00000000; end else if(start) begin if(i=5d0) begin areg = ain; breg 5d0&i5d16) begin if(aregi-1) yreg =1b0,yout30:15+breg,yreg14:1; else yreg 1; end else if(i=5d16 & areg15) yreg = yreg31:16+breg; end 这部分是移位相加乘法器的运算方法。 3.3 1616位移位相加乘法器
24、Modelsim仿真Modelsim仿真工具是Model公司开发的,它支持Verilog、VHDL以及他们的混合仿真。它可以将整个程序分步执行,使设计者直接看到他的程序下一步要执行的语句,而且在程序执行的任何步骤任何时刻都可以查看任意变量的当前值,可以在Dataflow窗口查看某一单元或模块的输入输出的连续变化等。比Quartus自带的仿真器功能强大的多,是目前业界最通用的仿真器之一。在采用Modelsim开始仿真之前我们首先应该搭建一个仿真测试的平台,即为即将进行的测试文件编写一个测试激励(Testbench)。一个测试平台文件就是一个Verilog模型,可以用来验证所设计的硬件模型的正确性
25、。测试平台就是为所测试的元件提供一个测试激励,仿真结果可以以波形的方式显示或存储测试结果到文件中。激励信号可以直接集成在测试平台文件中,也可以外部文件加载,在这里我们采用集成在测试平台中如图5-1。?图3-2 仿真测试平台仿真模拟文件是采用软件方法模拟一个乘法器,在编写的时候并不考虑硬件情况所以是不可综合的。它仅仅用于仿真,在相同的测试激励下会产生和待测试文件一样的乘法结果。但由于它采用的是纯粹的软件的仿真并不关心实际硬件,所以我们可以采用直接使用乘法得出结果,从而大大减小它的编写难度同时能够保证结果的正确性。如果待测试文件和仿真模拟文件在相同的测试激励下输出相同的结果,那么我们就可以认为设计
26、是正确的。同时得益于软件仿真的高速性我们可以再完成一组仿真比较之后紧接着自动进入下一组,同时自动改变仿真的数据组合,逐步将16位浮点数据的全部组合进行测试,确保在所有情况下的结果都是正确的。仿真测试平台提供两个相同的测试激励分别将值给待测试文件和模拟测试文件,然后得到它们的结构进行比较,如果相同说明我们的设计在功能上是正确的,如果不同说明设计存在问题,验证测试马上终止,并给出错误位置和激励信号帮助改正,具体实现代码见附录测试代码部分。3.3.1 1616位移位相加乘法器经典数组运算结果在数字电路设计流程中,在进行电路综合前,必须要确保所设计的电路功能的正确性,本课题针对所设计的16*16位移位
27、相加乘法器的verilog设计进行功能仿真,采用的是Mentor公司的仿真器Modelsim,仿真结果如下。上图是16位的00的功能仿真结果,根据第二节中阐述的二进制乘法的基本原理,对于被乘数与乘数都是16位的运算,可获得32位二进制,由仿真结果,在运算结果正确的同时,位数也保持着正确。11013.3.2 1616位移位相加乘法器一般情况运算结果89332494532580第四章 1616位移位相加乘法器Verilog设计综合4.1 RTL级概念RTL的全称为寄存器传输级(Register Transfer Level),它是对芯片设计的一种层次的抽象描述。不同于行为级和门级描述,RTL级的重
28、点是寄存器和其间的逻辑。和行为级相比,RTL级的描述更加规范和严格,可以使用工具转换成门级电路;但比起门级电路,由于抽象层次高,RTL级的描述更清晰,容易理解。在RTL级,设计被抽象为一系列的寄存器,而信号随着时钟从一个寄存器传递到另一个寄存器,如图4-1所示。 寄存器 寄存器 寄存器组合逻辑组合逻辑这一模型反映了数字系统的几个要素、寄存器组成的时序逻辑、寄存器之间的组合逻辑以及关键的时钟信号。虽然还不是具体的电路,但RTL级设计作为描述电路的另一种方法,必须是物理的可实现的。所以,真正的芯片设计应该是从RTL代码的编写开始的。具体来说,RTL级设计应该考虑以下因素:1. 可综合性: RTL级
29、设计完成后的工作就是综合,因此RTL级设计必须是可综合的。 首先,编写代码使用的预言必须是可综合的。目前,编写RTL代码一般使用VHDL或Verilog HDL语言,这两种语言中,并不是所有的语言成分都是可综合的,可综合的子集取决于综合工具的能力。但IEEE为这两种语言的综合分别制定了相应的标准,规定了综合工具必须支持的最小集合,分别是针对VHDL的IEEE1076.6和针对Verilog的IEEE1364.1. 在此基础上,RTL级设计还应该是“面向综合”的。因为,即使完全使用可综合的语言成分,不同的代码产生的综合结果也会大不相同。更高的要求是编写代码时冲分考虑到综合的工作,通过靓号的编码使
30、综合以及此后的其它实现步骤可以顺利地进行,减少反复。2. 可测性: 由于测试在芯片设计中的重要性,现在必须在RTL级就开始考虑测试的问题。这虽然不是RTL所必须的,但如果不在RTL编码时就为测试作出努力,而是把测试完全交给后端,最后的结果可能是根本无法达到要求的故障覆盖率,而不得不在RTL级进行返工。3. 重用性: RTL级设计时应考虑到的另一个问题就是代码的可读性和可移植性,这在大型的设计中尤为重要。今天的百万门级的设计不可能是每个模块从头开始,甚至有可能全部使用IP或现有的模块,这样既缩短了设计的时间,也减少了风险。这就要求代码的编写者尽可能地完善代码的重要性。那种几个月后连自己也看不懂的
31、代码是绝对不可取的。 4.其它的考虑: 要实现高质量的RTL级设计还应该考虑到时序收敛、可验证性、可调试性、芯片面积和功耗等问题。 总之,RTL级设计虽然不是设计的最终结果,但它在很大程度上已经决定了设计的功能和性能。虽然可以通过此后的综合或者布局布线对设计进行一定程度的优化,但优化结果很依赖于RTL级设计。高质量的RTL设计可以使后端的工作轻松地达到设计目标:相反,质量差的RTL级设计,可能使后端设计困难重重,甚至无法完成,最终不得不回过头修改RTL级设计。毫不夸张地说。在RTL级设计中的一个改进所产生的作用,往往要比这综合或后端设计中的一个改进效果大得多。这就要求RTL级的设计者不应依赖于
32、后端的工具解决延时、面积、测试等问题,而是应该将注意力集中到RTL级设计中,从一开始就考虑到综合,考虑到最终生成的电路。4.2 RTL级综合结果与分析以下是在仿真中得到的对设计面积,运行时间,约束时间的报告。Report : constraint -verbose由上述报告能够看出在电路的约束时间上,要求的时间为0.17s,到达的时间为0.18s,时间裕量0.1s。此乘法器的对大传输时间为4.50s,一般的传输时间为2.01s,时间裕量为2.49s。最大电容0.16f。一般电容0.08f。电容裕量0.08f。Report : timing -path full -delay max -max_
33、paths 1由上述报告能够看出在电路的延时时间上要求延时时间为4.50s。实际到达时间为4.49s,时间裕量为0.01s,符合要求。Report : area由上述报告能够看出在电路的面积上有68个端口,分别是乘数输入16个端口,被乘数输入16个端口,乘积输出32个端口,开始端口,结束端口,工作时钟输入端口,复位信号输入端口。有290条连线和217个单元组成。组合区域面积为5794.588876立方微米,非组合区域面积为4896.460846立方微米。总共单元面积10691.049722立方微米。4.3 16位移位相加乘法器电路图所谓的DC即Design Compiler。它是十多年来工业界
34、标准的逻辑综合工具,也是Synopsys最核心的产品。它使IC设计者在最短的时间内最佳的利用硅片完成设计。它根据设计描述和约束条件并针对特定的工艺库自动综合出一个优化的门级电路。它可以接受多种输入格式,如硬件描述语言、原理图和网表等,并产生多种性能报告,在缩短设计时间的同时提高设计性能。所以Synopsys公司Design Compiler EDA工具在综合时用可以进行RTL级设计综合,得到门级网表。以下是我通过Synopsys公司Design Compiler EDA工具在综合时得到的结果。综合单元综合端口优化前的电路图最终得到的优化后的电路图结论本文采用自上而下的正向设计方法在仔细分析了移
35、位相加算法和乘法器结构的基础之上设计了一种1616位移位相加乘法器,可以实现16位和16位数的乘法运算。通过Verilog HDL语言进行了硬件电路的描述,通过对电路进进行RTL级的设计描述。然后编写测试激励程序,用Mentor公司的Modelsim仿真器进行功能仿真,完成了功能验证。并利用Synopsys公司的Design Compiler EDA工具,编写综合脚本文件,利用所编写的DC脚本文件把设计的Verilog HDL描述的乘法器综合成与标准单元库相关的门级设计,完成了电路的实现。而该电路的功能仿真和验证都已经正确通过,验证表明乘法器具有优良的性能。最后得到了电路的门级网表,完成了本课
36、题的设计目的,获得16位移位相加乘法器的电路。 参考文献1雷绍充,邵志标,梁峰.超大规模集成电路测试M.北京:电子工业出版社,2008:25-322 马慧艳.集成电路微控制器的扫描测试以及内建自测试的研究D.天津:天津大学,20073 E. J. McCluskey and S. Bozorgui-Nesbat. Design for Autonomous TestJ. IEEE Trans.Computer,Vol.C-30,No.11,1981,860-8754 A.Kraaasniweski and S.Pilarkski, Circular Self-Test Path:a Low C
37、ost BIST Technique for VLSI CircuitsJ.IEEE Trans.Computer-Aided Design,Vol,CAD-8,No.1 1989,46-555姚俊.基于BIST的嵌入式存储器可测试设计算法研究D.哈尔滨:哈尔滨工程大学,20076孟庆.SOC设计中IP核的测试方法与应用D,浙江:浙江大学,20047于敦山,沈绪榜.32位定/浮点乘法器设计J.半导体学报,2001,22(1):91-95.9王钿, 卓兴旺. 基于Verilong HDL的数字系统设计应用设计. 第二版. 北京: 国防工业出版社, 2007-810John F.Wakerly.
38、数字设计原理与实践(原书第四版). 北京: 机械工业出版社, 2007-511Clifford E Cummings. Synthesis and Scripting Techniques for Designing Multi-Asynchronous Clock Design. SUNG-2001 San Jose, CA Voted Best Paper 3rd Place,2001:2-4,16-2312夏宇闻. Verilog数字系统设计教程.北京:北京航空航天大学出版社,200313Michael D.Ciletti.Verilog HDL高级数字设计.北京:电子工业出版社,200
39、514Mark Balch.完整的数字设计.北京:清华大学出版社,2006:75-9415MichaelD Ciletti. Advanced DigitalDesign with the Verilog HDL M. 影印版.北京:电子工业出版社, 2004.115-11916唐杉,徐强,王莉薇.数字IC设计D.北京:机械工业出版社,2001附录一module mux_16( clk,rst_n, start,ain,bin,yout,done);input clk; input start;input rst_n;input 15:0ain;input 15:0bin;output 31:
40、0yout;output done;reg15:0 areg;reg15:0 breg;reg31:0 yreg;reg done_r;reg4:0 i;always(posedge clk or negedge rst_n) if(!rst_n) i=5d0; else if(start & i5d17) i = i+1b1; else if(!start) i = 5d0;always(posedge clk or negedge rst_n) if(!rst_n) done_r=1d0; else if(i=5d16) done_r = 1b1; else if(i=5d17) done
41、_r = 1b0; assign done = done_r;always(posedge clk or negedge rst_n) begin if(!rst_n) begin areg = 16h0000; breg = 16h0000; yreg = 32h00000000; end else if(start) begin if(i=5d0) begin areg = ain; breg 5d0&i5d16) begin if(aregi-1) yreg =1b0,yout30:15+breg,yreg14:1; else yreg 1; end else if(i=5d16 & areg15) yreg = yreg31:16+breg; end endassign yout = yreg;endmodule 。附录二timescale 1 ns/ 100psmodule mux_16_vlg_tst();reg eachvec;reg 15:0 ain;