Verilog实现的浮点补码一位乘法器设计

需积分: 16 5 下载量 87 浏览量 更新于2024-07-22 收藏 2.85MB DOC 举报
"这篇课程设计报告是关于浮点补码一位乘法器的,使用Verilog硬件描述语言进行编写,获得了98分的高分评价。该设计基于Booth补码乘法算法,用于16位浮点数的运算。报告详细介绍了设计过程,包括求补、加法和移位等关键模块的实现,并通过Xilinx仿真验证了设计的正确性。" 浮点补码一位乘法器是计算机科学与工程领域中的一个重要组成部分,特别是在数字信号处理技术日益普及的今天。它在现代计算机系统中起到核心作用,因为许多计算任务都需要高效的乘法操作。此课程设计的目标是设计一个16位的浮点数补码一位乘法器,利用Verilog HDL这一硬件描述语言,使得设计能够直接转化为实际的硬件电路。 Booth算法是一种优化的补码乘法算法,相比传统的移位相加法,它在处理某些特定模式的乘数时能减少移位次数,从而提高计算效率。尽管移位相加法在资源利用率上具有优势,但Booth算法更适合于课程设计的要求,因为它在某些情况下可以显著减少逻辑门的数量和延迟。 报告详细描述了设计的各个阶段,包括: 1. **求补模块**:处理输入的浮点数,将其转换为补码形式,这是二进制乘法的基础步骤。 2. **加法模块**:执行逐位加法操作,这是Booth算法的核心部分,根据乘数的每一位决定是否需要进行加法。 3. **移位模块**:根据乘数的值,对被乘数进行左移或右移,以实现乘法的效果。 在设计过程中,小组成员分工明确,从功能模块的编程到文档撰写,每个人都有特定的任务。报告还强调了测试用例的制定和仿真结果的分析,确保设计的正确性和可靠性。 最后,通过Xilinx仿真工具,设计者得到了RTL(Register Transfer Level)电路图,这是硬件实现前的关键一步,证明了设计的可行性。通过这种方式,学生不仅掌握了Verilog HDL编程,也深入理解了浮点补码乘法器的工作原理,这在提升他们的专业技能方面起到了重要作用。
2020-07-11 上传
(1)用[X]补×[Y]补直接求[X×Y]补 讨论当相乘的两个数中有一个或二个为负数的情况,在讨论补码乘法运算时,对被乘数或部分积的处理上与原码乘法有某些类似,差别仅表现在被乘数和部分积的符号位要和数值一起参加运算。 若[Y]补=Y0Y1Y2…Yn 当Y0为1时,则有Y=-1+Yi×2-i 故有 X×Y=X×Yi×2-1-X当Y为负值时,用补码乘计算[X×Y]补,是用[X]补乘上[Y]补的数值位,而不理[Y]补符号位上的1,乘完之后,在所得的乘积中再减X,即加-[X]补。实现补码乘法的另一个方案是比较法,是由BOOTH最早提出的,这一方法的出发点是避免区分乘数符号的正负,而且让乘数符号位也参加运算。技巧上表现在分解乘数的每一位上的1为高一位的一个+1和本位上的一个-1:X×Y=X×(-1+Yi×2i) (逐项展开则得)=X×[-Y0+Y1×2-1+Y2×2-2+…+Yn×2-n]=X×[-Y0+(Y1-Y1×2-1)+(Y2×2-1-Y2×2-2)+…+(Yn×2-(n-1)-Yn×2-n)](合并相同幂次项得) =X×[(Y1-Y0)+(Y2-Y1) ×2-1+…+(Yn-Yn-1) ×2-(n-1)+(0-Yn) ×2-n]=X×(Yi+1-Yi)×2-i(写成累加求和的形式,得到实现补码乘运算的算法)将上述公式展开,则每一次的部分积为: P1=[2-1(Yn+1-Yn) ×X]补 P2=[2-1(P1+(Yn-Yn-1) ×X)]补 … Pi=[2-1(Pn-i+(Yn-I+2-Yn-I+1) ×X)]补 … Pn=[2-1(Pn-1+(Y2-Y1) ×X)]补 Pn+1=[ (Pn+(Y1-Y0) ×X)]补 则最终补码乘积为[X*Y]补=[Pn+1]补 由上述公式可以看出,比较法是用乘数中每相邻的两位判断如何求得每次的相加数。每两位Yi和Yi+1的取值有00,01,10,11四种组合,则它们的差值分别为0,1,-1和0,非最后一次的部分积,分别为上一次部分积的1/2(右移一位)的值Rj,Rj+[X]补,Rj-[X]补(即Rj+[-X]补)和Rj,但一定要注意:最后一次求出的部分积即为最终乘积,不执行右移操作。用此法计算乘积,需要乘数寄存器的最低一位之后再补充一位Yn+1,并使其初值为0,再增加对Yn和Yn+1两位进行译码的线路,以区分出Yn+1-Yn 4种不同的差值。对N位的数(不含符号位)相乘,要计算N+1次部分积,并且不对最后一次部分积执行右移操作。此时的加法器最好采用双符号位方案。