资源描述
计算机科学与工程学院课程设计报告题目全称:Verilog实现补码一位乘法课程名称:指导老师:文泉 职称:序号学生姓名学号班号1王清2806306025280630602林昕2806306028280630603陈琦凯2806306013280630604彭程2806306024280630605陈云川2806306012280630606闫科280630600828063060指导老师评语:指导签字:课程设计成绩设计过程表现设计报告质量总分第 1 章 序 言 11.1 课程设计目的11.2 课程设计作用21.3 课程设计需求21.3.1 Xilinx 设计软件21.3.2 在 xilinx ISE 集成开发环境下,使用 Verilog HDL 2第 2 章 正 文42.1 实现补码一位乘法的原理42.2 比较补码一位乘法方法62.2.1 分步乘法62.2.2 运算规则72.2.3 运算实例72.2.4 算法流程图82.2.5 比较法( Booth 算法)82.3 课程设计实验代码(概要设计) 102.4 课程设计详细设计方案122.4.1 顶层方案图的设计与实现132.4.2 功能模块的设计与实现142.4.3 仿真调试13第 3 章 结 论163.1 课程设计总结16摘要本定点补码一位乘法器,具有良好的可移植性。本文介绍了定点补码 一位乘法的概念已及定点补码一位乘法的的原理和方法,分析了定点补码一 位乘法器的设计,并详细介绍了使用EDA环境,Xilinx设计软件,在XCV200 实验板的 XCV200 可编程逻辑芯片中上进行定点补码一位乘法器的移植。通过 测试,系统移植成功。第1 章 序言当今时代是一个信息的时代,我们的生活与信息紧密相连。伴随着计算机的 生活化,我们更近一步接触到信息技术的发展。如今,计算机技术迅猛发展, 它的发展不仅仅表现在软件领域取得辉煌的成就,同时也在硬件方面也取得了长 足的发展。因此,很多功能已经可以通过硬件来实现。但是通常对嵌入式软件的基本要 求是体积小、指令速度快、具有较好的裁减性和可移植性,目前这方面的设计已 经很多也很优异,但是基于补码一位乘法器的实现,克服了定点补码乘法器的缺 点,实现更加方便有效。硬件描述语言 Verilog 提供了强大的电路设计手段,使由硬件模块直接实现 补码一位乘法器提供了可能。1.1 课程设计目的通过此次课程设计,应达到以下目的:(1) 熟悉(2) 的编程方法;。(2) 熟悉Xilinx设计软件的开发环境。(3) 掌握补码一位乘法器的工作原理。(4) 掌握用硬件描述语言设计补码一位乘法器的方法。1.2 课程设计作用(1) 通过该课程设计,设计出补码一位乘法器。(2) 通过该课程设计,将该成果能够应用于生活。1.3 课程设计需求1.3.1 Xilinx 设计软件Xilinx 是全球领先的可编程逻辑完整解决方案的供应商。 Xilinx 研发、1制造并销售范围广泛的高级集成电路、 软件设计工具以及作为预定义系 统级功能的 IP(Intellectual Property )核。客户使用 Xilinx 及其合作伙伴 的自动化软件工具和IP核对器件进行编程,从而完成特定的逻辑操作。 Xilinx公司成立于1984年,Xilinx首创了现场可编程逻辑阵列(FPGA )这 一创新性的技术,并于1985年首次推出商业化产品。目前Xilinx满足了 全世界对FPGA产品一半以上的需求。Xilinx产品线还包括复杂可编程逻辑 器件(CPLD)。在某些控制应用方面CPLD通常比FPGA速度快,但其提供的 逻辑资源较少。Xilinx可编程逻辑解决方案缩短了电子设备制造商开发产 品的时间并加快了产品面市的速度,从而减小了制造商的风险。与采用传 统方法如固定逻辑门阵列相比,利用 Xilinx 可编程器件,客户可以更快地 设计和验证他们的电路。而且,由于 Xilinx 器件是只需要进行编程的标准 部件,客户不需要象采用固定逻辑芯片时那样等待样品或者付出巨额成本。1.3.2在xilinx ISE集成开发环境下,使用利用Xilinx公司的ISE开发设计软件的工程设计流程,具体分为五个 步骤:即输入(Design Entry )、综合(Synthesis )、实现(Implementation )、 验证( Verification )、下载( Download )。图形或文本输入包括原理图、状态机、波形图、硬件描述语言(HDL), 是工程设计的第一步,ISE集成的设计工具主要包括HDL编辑器(HDL Editor )、状态机编辑器(StateCAD )、原理图编辑器(ECS )、IP核生成 器(CoreGenerator )和测试激励生成器(HDL Bencher )等。常用的设计输入方法是硬件描述语言(HDL )和原理图设计输入方 法。原理图输入是一种常用的基本的输入方法,其是利用元件库的图形符 号和连接线在ISE软件的图形编辑器中作出设计原理图,ISE中设置了具有 各种电路元件的元件库,包括各种门电路、触发器、锁存器、计数器、各 种中规模电路、各种功能较强的宏功能块等用户只要点击这些器件就能调 入图形编辑器中。这种方法的优点是直观、便于理解、元件库资源丰富。但是在大型设计中,这种方法的可维护性差,不利于模块建设与重用。更 主要的缺点是:当所选用芯片升级换代后,所有的原理图都要作相应的改 动。故在 ISE 软件中一般不利用此种方法。为了克服原理图输入方法的缺点,目前在大型工程设计中,在 ISE 软件中常用的设计方法是 HDL 设计输入法,其中影响最为广泛的 HDL 语言 是 VHDL 和 Verilog HDL 。它们的共同优点是利于由顶向下设计,利于模块 的划分与复用,可移植性好,通用性强,设计不因芯片的工艺和结构的变 化而变化,更利于向 ASIC 的移植,故在 ISE 软件中推荐使用 HDL 设计输入 法。波形输入及状态机输入方法是两种最常用的辅助设计输入方法, 使用波形输入法时,只要绘制出激励波形的输出波形, ISE 软件就能自动地 根据响应关系进行设计;而使用状态机输入时,只需设计者画出状态转移 图, ISE 软件就能生成相应的 HDL 代码或者原理图,使用十分方便。其中 ISE 工具包中的 StateCAD 就能完成状态机输入的功能。 但是需要指出的是, 后两种设计方法只能在某些特殊情况下缓解设计者的工作量,并不适合所 有的设计。1)综合( Synthesis ) 综合是将行为和功能层次表达的电子系统转化为低层次模块的组合。 一般来说,综合是针对 VHDL 来说的,即将 VHDL 描述的模型、算法、行为 和功能描述转换为 FPGA/CPLD 基本结构相对应的网表文件,即构成对应的 映射关系。在 Xilinx ISE 中,综合工具主要有 Synplicity 公司的 Synplify/Synplify Pro , Synopsys 公司的 FPGA Compiler II/ Express , Exemplar Logic 公司的 LeonardoSpectrum 和 Xilinx ISE 中的 XST 等,它们 是指将HDL语言、原理图等设计输入翻译成由与、或、非门,RAM,寄存器等基本逻辑单元组成的逻辑连接(网表),并根据目标与要求优化所形成 的逻辑连接,输出 edf 和 edn 等文件,供 CPLD/FPGA 厂家的布局布线器进 行实现。2) 实现(Implementation )实现是根据所选的芯片的型号将综合输出的逻辑网表适配到具体 器件上。 Xilinx ISE 的实现过程分为:翻译( Translate )、映射( Map)、 布局布线( Place & Route )等3个步骤。ISE集成的实现工具主要有约束编辑器(Cons train ts Edi tor )、 引脚与区域约束编辑器( PACE) 、时序分析器( Timing Analyzer ) 、FPGA 底层编辑器(FGPA Editor )、芯片观察窗(Chip Viewer )和布局规划器 (Floorplanner )等。4)验证(Verification ) 验证(Verification)包含综合后仿真 和功能仿真( Simulation )等。功能仿真就是对设计电路的逻辑功能进行 模拟测试,看其是否满足设计要求,通常是通过波形图直观地显示输入信 号与输出信号之间的关系。综合后仿真在针对目标器件进行适配之后进行,综合后仿真接近 真实器件的特性进行,能精确给出输入与输出之间的信号延时数据。ISE可结合第三方软件进行仿真,常用的工具如Model Tech公司的仿真工具 ModelSim 和测试激励生成器 HDL Bencher , Synopsys 公司的 VCS等。通过仿真能及时发现设计中的错误,加快设计中的错误,加快设计 进度,提高设计的可靠性。每个仿真步骤如果出现问题,就需要根据错误的定位返回到相应 的步骤更改或者重新设计。3) 下载( Download )下载(Download )即编程(Program )设计开发的最后步骤就是将已经 仿真实现的程序下载到开发板上,进行在线调试或者说将生成的配置文件 写入芯片中进行测试。在ISE中对应的工具是iMPACTl。第 2 章 正文2.1 实现补码一位乘法的原理(1) 用X补XY补直接求XXY补讨论当相乘的两个数中有一个或二个为负数的情况 在讨论补码乘法运算时,对被乘数或部分积的处理上与原码乘法有某些类似,差 别仅表现在被乘数和部分积的符号位要和数值一起参加运算。若Y补二YOY1Y2-Yn当Y0为1时,则有Y=l+YiX2-i故有 XXY=XXYiX2-1 X当Y为负值时,用补码乘计算XXY补,是用X补乘上Y补的数值位,而不理Y补符号位上的1,乘完之后,在所得的乘积中再减X,即加一X补。实现补码乘法的另一个方案是比较法,是由BOOTH最早提出的,这一方法的出 发点是避免区分乘数符号的正负,而且让乘数符号位也参加运算。技巧上表现在 分解乘数的每一位上的1为高一位的一个+1和本位上的一个-1:XXY=XX(1+YiX2i) (逐项展开则得)=XX Y0+Y1X2-1+Y2X2-2 YnX2-n=XX Y0+(Y1Y1X2-1) + (Y2X2-1Y2X2-2) +(YnX2-(n-1) YnX2-n)(合并相同幂次项得)=XX (Y1Y0) + (Y2 Y1) X2-1 (Yn Yn-1) X2-(n-1) + (0 Yn) X 2-n=XX(Yi+1Yi)X2-i(写成累加求和的形式,得到实现补码乘运算的算法)将上述公式展开,则每一次的部分积为:P1=2-1(Yn+1Yn) XX补P2=2-1(P1+(YnYn-1) XX)补Pi二2-l(Pn-i + (Yn-I+2Yn-I+l) XX)补 Pn二2-l(Pn-l+(Y2Yl) XX)#Pn+1= (Pn+(Y1Y0) XX)补则最终补码乘积为X*Y补二Pn+1补 由上述公式可以看出,比较法是用乘数中每相邻的两位判断如何求得每次的相加 数。每两位Yi和Yi+1的取值有00, 01, 10,11四种组合,则它们的差值分别 为0,1,-1和0,非最后一次的部分积,分别为上一次部分积的1/2(右移一位) 的值Rj, Rj+X补,RjX补(即Rj+ X补)和Rj,但一定要注意:最 后一次求出的部分积即为最终乘积,不执行右移操作。用此法计算乘积,需要乘数寄存器的最低一位之后再补充一位Yn+1,并使其 初值为0,再增加对Yn和Yn+1两位进行译码的线路,以区分出Yn+1Yn 4种 不同的差值。对N位的数(不含符号位)相乘,要计算N+1次部分积,并且不对 最后一次部分积执行右移操作。此时的加法器最好采用双符号位方案。(2) Boo th乘法规则假设X、Y都是用补码形式表示的机器数,X补和Y补二Ys.Y1Y2Yn,都 是任意符号表示的数。比较法求新的部分积,取决于两个比较位的数位,即 Yi+1Yi的状态。布斯乘法规则归纳如下:首先设置附加位Yn+1=0,部分积初值Z0补=0。当nH0时,判YnYn+1,若YnYn+1=00或11,即相邻位相同时,上次部分积右移 一位,直接得部分积。若YnYn+1=01,上次部分积加X补,然后右移一位得新部分积。若YnYn+1=10,上次部分积加-X补,然后右移一位得新部分积。当n=0时,判YnYn+1(对应于Y0Y1),运算规则同(1)只是不移位。即在运算 的最后一步,乘积不再右移2。2.2 比较补码一位乘法方法2.2.1 分步乘法: 每次将一位乘数所对应的部分积与原部分积的累加和相加,并移位 设置寄存器:A:存放部分积累加和、乘积高位B:存放被乘数C:存放乘数、乘积低位Cn存放乘积最低位2.2.2 运算规则:(1)操作数、结果用补码表示;(2)绝对值运算,符号单独处理;(3)被乘数(B)、累加和(A)取双符号位;(4)乘数末位(Cn)为判断位,其状态决定下步操作;(5)作n次循环(累加、右移)。62.2.3运算实例:X=0.1101,丫=0.1011,求(XY)补。A = 00.0000B = X = 00.1101C = Y =.1011步数条件操作AC Cn00.0000.10111Cn=1+B+ 00.110100.11010.1101 X00.01101.1012Cn=1+B+ 00.1101X 0.1011 Y01.001100.100111.1011013Cn=0+0+ 00.0000110100.100100.0100111100004Cn=1+B+ 00.110101.0001110100.1000111 :LX 原XY 原=1. 100011110.100011112.2.4流程图算法:NN?YCR =0 AB JY|S OCR1/2 (A+Q)一 A, 0*1/2 (A+B)A,忑*CR + 1 CRSx Sy SA图 2-2-4 补码分步乘法流程图2.2.5比较法(Booth算法):1. 算法分析X 补=X0.X1X2Xn(1) Y 为正:Y 补=0.Y1Y2Yn(XY)补=X 补(0.Y1Y2Yn)(2) Y 为负:Y 补=1.Y1Y2Yn(XY)补=X 补(0.Y1Y2Yn) +(-X)补(3) Y 符号任意:(XY)补=X 补(0.Y1Y2Yn) + (-X)补丫0(4) 展开为部分积的累加和形式:(XY)补二 X 补(0.Y1Y2Yn) + (-X)补 Y0=X 补(0.Y1Y2Yn)-X 补 Y0=X 补(-丫0+2八-1丫1+2=2丫2+2=nYn)=X #-Y0+(Y1-2-1Y1) + (2-1Y2-2-2Y2) + +(2-(n-1)Yn-2-nYn)=X 补(Y1-Y0)+ 2 = 1 (Y2-Y1)+ 2=2 (Y3-Y2)+2:n (0-Yn)比较法:用相邻两位乘数比较的结果决定+X补、-X补或+02。2. 比较法算法9Yn(高位)Yn+1(低位)操作(A补为部分积累加和)001/2A 补011/2(A 补+X 补)101/2(A 补-X 补)111/2A 补3.运算规则(1)A、B取双符号位,符号参加运算;(2)C取单符号位,符号参加移位,以决定最后是否修正;10 : -B修正 0.1 :+B修正 00 :不修正 11 :不修正(3) C末位设置附加位Cn+1,初值为0, CnCn+1组成判断位决定运算操作;(4) 作n步循环,若需作第n+1步,则不移位,仅修正。4. 运算实例X=0.1101,Y=0.1011,求(XY)补。初值:A=00.0000,B=X补= 11.0011, B=(X)补=00.1101,C =Y 补= 1.0101步数条件操作CnCn+1CnCn+100.0000 1.010-B + 00.110100.1101 00.011011.01+B + 11.001111.100111.1100111.0-B +00.110100.1001+B00.010011.00111111.11.011111.101111111. 0100 -B+ 00.1101修正00.10001111(XY)补=0.100011115. 算法流程图 2-2-5 补码比较乘法流程图2.3 课程设计实验代码(概要设计)module mul_4( clk,res_n,A, B, result);parameter width=3d4; /4 位计算,最高两位为符号位,采用双符号 input clk,res_n;input width-1:0B,A;/ 乘数 output 2*width-1:0out;/ 运算结果最多是两倍乘数位数 wire 2*width-1:0out;reg width-1:0 A,R1,R2; /result=R0,R1,multiplier=R2 reg P;reg ns;assign result=R0,R1;always(posedge clk or negedge res_n)beginif(!res_n)beginR0=0;R1=mul1;R2=mul2;P=1b0;ns=0;endelsebeginif(!ns)begincase(B0,P)2b01:beginR0=(A+B);ns=1;end2b10:beginA=(A-B);ns=1;enddefault:A,B,P=Awidth-1,R0,R1;endcaseendelsebeginA,B,P=Awidth-1,A,B;ns=0;endendendendmodule2.4 课程设计详细设计方案2.4.1 顶层方案图的设计与实现 顶层方案图实现一位补码乘法器的逻辑功能,采用原理图设计输入方式完成,电 路实现基于XCV200可编程逻辑芯片。在完成原理图的功能设计后,把输入/输出 信号安排到XCV200指定的引脚上去,实现芯片的引脚锁定。(1) 、创建顶层图形设计文件 顶层图形文件主要由一个两个16进制数和 和一个封装模块组装而成的一个完整的设计实体。可利用Xilinx模块实现顶层图形文件的设计,顶层图形文件 结构如图3.1所示。图3.1 一位补码乘法器顶层图形文件结构2)、器件的选择与引脚锁定(1)器件的选择由于硬件设计环境是基于伟福COP2OOO型计算机组成原理实验仪和XCV200 实验板,故采用的目标芯片为Xlinx XCV200可编程逻辑芯片。(2)引脚锁定把顶层图形文件中的输入/输出信号安排到Xlinx XCV200芯片指定的引脚上去, 实现芯片的引脚锁定,各信号及Xlinx XCV200芯片引脚对应关系如表3.1所示。3-1 信号和芯片引脚对应关系一位乘法 器内部信号图形文件中的 输入/输出信 号XCV200芯片引脚AA094,095,096,097,100,101,102,103BB079,030,081,082,084,085,086,087CC215,216,217,21 & 220,221,222,223CLRCLR157CECE1712.4.2功能模块的设计与实现(1)实现原理一位补码乘法器是由ALU,被乘数寄存器,乘数寄存器,部分积寄存器, 门电路和移位电路为基础而实现的,设计时这两个模块用 Verilog 设计输入 方式实现。(2)创建元件图形符号 为了能在图形编辑器(原理图设计输入方式)中调用此两输入,需要为ORM2创建一个元件图形符号,可用Xilinx foundation f3.1编译器的实现模 块。(3)功能仿真 对创建的两输入一输出的元件进行功能仿真,验证其功能的正确性,可用 Xilinx foundation f3.1 编译器的 Simulator 模块实现。2.4.3 仿真调试 仿真调试主要验证设计电路逻辑功能、时序的正确性,本设计中主要采 用功能仿真方法对设计的电路进行仿真。1)建立仿真波形文件及仿真信号选择功能仿真时,首先建立仿真波形文件,选择仿真信号,对选定的输入信号设置参数,选定的仿真信号和设置的参数如表3-2所示。(2)功能仿真结果与分析功能仿真波形结果如图3.2所示,仿真数据结果如表3.2所示。由仿真结果可以看出功能仿真结果是正确的,进而说明电路设计的正确性。表3-2 输入信号和输出信号输入信号输出信号U1.A7U1.B7U1.C7CC580602181B018504818517lii i 丨 11 iil uKf Cmuni由於川诃muFunctional T ft5加jJBreakjJ 禽卜-竹一j =Orail心皿11 II I II 1111 II I II 1111 II I II 11nil 111ii i J i ii iii i J i ii i2.5ns 3us i ii iIi i ii1. Sus 2us ii i il i ii i4. Sus |5us mill iioOOna lus3. Sus 4usiiii ii i0.0i ii i Ii i iiSinGLobalResUl.A7.(hBK)#l Ul.B?.(hEZ)#i Ul.CLR -. Ul.CE -. U1 C?.(hBK)#lIDCB13图 3.2 仿真波形图由表和图所示信息对比可知,仿真完全正确,能实现补码一位乘法计算功能3。3.1 课程设计总结我们小组围绕课题用硬件描述语言设计补码一位乘法器,先后查 阅了相关资料,做出了课题背景的分析,课题需求分析,课题概要设计, 课题的详细设计。经过两周的设计,基本上完成了此次课程设计任务,成功将补码一位 乘法器。由于平时对硬件的接触较少所以学习起来困难重重。通过本次课程设 计,才真正意识到所学知识的有限和动手能力的缺乏。从起初对课题的一 知半解到最终完成设计,遇到了很多困难和挫折,但经过查阅书籍、搜索 网页信息,并和同学讨论分析,请教指导老师,问题一一得到解决,还学 到很多课堂上学不到的知识。通过本课题,本组成员对补码乘法有了一定 深度的了解,加深了对补码一位乘法实现方法的认识,积累了补码一位乘 法移植的丰富经验。但因为对专业知识没有很深的认识,加之课程设计时 间较短,就本课题,本组成员觉得还有许多方面需要改进和加强。参考文献: 1夏宇闻 Verilog 数字系统设计教程第二版,北京航天航空大学出 版社2 罗克露 单立平 刘辉 俸志刚 计算机组成原理,电子工业出版社3 其他参考:http:/ hylwk new.php?H二&id=44898
展开阅读全文