Verilog实现补码一位乘法课程设计

Verilog实现补码一位乘法课程设计
Verilog实现补码一位乘法课程设计

计算机科学与工程学院

课程设计报告

题目全称: Verilog实现补码一位乘法

课程名称:计算机组成原理

指导老师:文泉职称:

序号学生姓名学号班号成绩

1 王清2806306025 28063060

2 林昕2806306028 28063060

3 陈琦凯2806306013 28063060

4 彭程2806306024 28063060

5 陈云川2806306012 28063060

6 闫科2806306008 28063060

指导老师评语:

指导签字:

课程设计成绩:

设计过程表现设计报告质量总分

目录

第 1 章序言 (1)

1.1 课程设计目的 (1)

1.2 课程设计作用 (2)

1.3 课程设计需求 (2)

1.3.1Xilinx设计软件 (2)

1.3.2 在xilinx ISE集成开发环境下,使用Verilog HDL (2)

第 2 章正文 (4)

2.1 实现补码一位乘法的原理 (4)

2.2 比较补码一位乘法方法 (6)

2.2.1 分步乘法 (6)

2.2.2 运算规则 (7)

2.2.3 运算实例 (7)

2.2.4算法流程图 (8)

2.2.5 比较法(Booth算法) (8)

2.3课程设计实验代码(概要设计) (10)

2.4课程设计详细设计方案 (12)

2.4.1顶层方案图的设计与实现 (13)

2.4.2 功能模块的设计与实现 (14)

2.4.3 仿真调试 (13)

第 3 章结论 (16)

3.1课程设计总结 (16)

摘要

本定点补码一位乘法器,具有良好的可移植性。本文介绍了定点补码一位乘法的概念已及定点补码一位乘法的的原理和方法,分析了定点补码一位乘法器的设计,并详细介绍了使用EDA环境,Xilinx设计软件,在XCV200实验板的XCV200可编程逻辑芯片中上进行定点补码一位乘法器的移植。通过测试,系统移植成功。

关键词:定点补码;EDA;一位乘法器;设计

第1 章序言

当今时代是一个信息的时代,我们的生活与信息紧密相连。伴随着计算机的生活化,我们更近一步接触到信息技术的发展。如今,计算机技术迅猛发展,它的发展不仅仅表现在软件领域取得辉煌的成就,同时也在硬件方面也取得了长足的发展。

因此,很多功能已经可以通过硬件来实现。但是通常对嵌入式软件的基本要求是体积小、指令速度快、具有较好的裁减性和可移植性,目前这方面的设计已经很多也很优异,但是基于补码一位乘法器的实现,克服了定点补码乘法器的缺点,实现更加方便有效。

硬件描述语言Verilog提供了强大的电路设计手段,使由硬件模块直接实现补码一位乘法器提供了可能。

1.1 课程设计目的

通过此次课程设计,应达到以下目的:

(1)熟悉

(2)的编程方法;。

(2) 熟悉X ilinx设计软件的开发环境。

(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

2)实现(Implementation)

实现是根据所选的芯片的型号将综合输出的逻辑网表适配到具体器件上。Xilinx ISE的实现过程分为:翻译(Translate)、映射(Map)、布局布线(Place & Route)等3个步骤。

ISE集成的实现工具主要有约束编辑器(Constraints Editor)、引脚与区域约束编辑器(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中对应的工具是iMPACT[1]。

3

第2 章正文

2.1实现补码一位乘法的原理

(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)]补

(4)

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次部分积,并且不对最后一次部分积执行右移操作。此时的加法器最好采用双符号位方案。

(2)Booth乘法规则

假设X、Y都是用补码形式表示的机器数,[X]补和[Y]补=Ys.Y1Y2…Yn,都是任意符号表示的数。比较法求新的部分积,取决于两个比较位的数位,即Yi+1Yi的状态。

布斯乘法规则归纳如下:

首先设置附加位Yn+1=0,部分积初值[Z0]补=0。

当n≠0时,判YnYn+1,若YnYn+1=00或11,即相邻位相同时,上次部分积右移一位,直接得部分积。

若YnYn+1=01,上次部分积加[X]补,然后右移一位得新部分积。

若YnYn+1=10,上次部分积加[-X]补,然后右移一位得新部分积。

当n=0时,判YnYn+1(对应于Y0Y1),运算规则同(1)只是不移位。即在运算的最后一步,乘积不再右移[2]。

5

图2-1 补码一位乘法粗框 2.2比较补码一位乘法方法

2.2.1 分步乘法:

每次将一位乘数所对应的部分积与原部分积的累加和相加,并移位。 设置寄存器:A :存放部分积累加和、乘积高位 B :存放被乘数

C :存放乘数、乘积低位 Cn 存放乘积最低位

2.2.2 运算规则:

(1)操作数、结果用补码表示; (2)绝对值运算,符号单独处理; (3)被乘数(B)、累加和(A)取双符号位;

(4)乘数末位(Cn)为判断位,其状态决定下步操作; (5)作n 次循环(累加、右移)。

A f1 A f2 A A n C f C C n C n +1

ALU ≥1

& C T

&

CR

&

时钟脉冲

启动

Q Q 移位脉冲

B f1 B f2 B B n

C n &

C n C n +1

+1

B B

C n +1

结束

S R

6

2.2.3 运算实例:

X =0.1101,Y=-0.1011,求(XY)补。

A = 00.0000

B = X = 00.1101

C = Y = .1011

步数 条件 操作 A C Cn

00.0000 .101 1 1 Cn=1 +B + 00.1101 00.1101

——

> 00.0110 1.10 1

2 Cn=1 +B + 00.1101 01.0011

——> 00.1001 11.1 0

3 Cn=0 +0 + 00.0000

00.1001

——> 00.0100 111. 1

4 Cn=1 +B + 00.1101 01.0001 ——> 00.1000 111 1

X 原×Y 原 = 1.10001111

2.2.4流程图算法:

图2-2-4补码分步乘法流程图

0.1101 [X]

X 0.1011 [Y] 1101 1101 0000

1101 0.10001111

7

2.2.5 比较法(Booth算法):

1.算法分析

X补 = X0.X1X2……Xn

(1)Y为正:Y补 = 0.Y1Y2……Yn (XY)补 = X补(0.Y1Y2……Yn) (2)Y为负:Y补 = 1.Y1Y2……Yn (XY)补 = X补(0.Y1Y2……Yn)+ (-X)补

(3)Y符号任意: (XY)补 = X补(0.Y1Y2……Yn)+(-X)补Y0

(4)展开为部分积的累加和形式:

(XY)补= X补(0.Y1Y2……Yn)+(-X)补Y0

= X补(0.Y1Y2……Yn)-X补Y0

= X补(-Y0+2^-1Y1+2^-2Y2+……+2^-nYn)

= X补-Y0+(Y1-2^-1Y1)+(2^-1Y2-2^-2Y2)+…+(2^-(n-1)Yn-2^-nY n)

= X补 (Y1-Y0)+ 2^-1 (Y2-Y1)+ 2^-2 (Y3-Y2)+……+2^-n (0-Yn) 比较法:用相邻两位乘数比较的结果决定+X补、-X补或+0[2]。

2.比较法算法

9

Yn(高位)Yn+1(低位)操作(A补为部分积累加和)

0 0 1/2A补

0 1 1/2(A补+X补)

1 0 1/2(A补-X补)

1 1 1/2A补

3.运算规则

(1)A、B取双符号位,符号参加运算;

(2)C取单符号位,符号参加移位,以决定最后是否修正;

(3)C末位设置附加位Cn+1,初值为0,CnCn+1组成判断位决定运算操作;

(4)作n步循环,若需作第n+1步,则不移位,仅修正。

4.运算实例1.0 : -B修正0.1 :+B修正

0.0 : 不修正

1.1 : 不修正

8

X=-0.1101,Y=-0.1011,求(XY)补。

初值:A=00.0000,B=X补=11.0011, -B=(-X)补=00.1101,C =Y补=1.0101 步数条件操作 A C CnCn+1 CnCn+1 00.0000 1.010 1 0

1 1 0 -B + 00.1101

00.1101

——> 00.0110 11.01 0 1

2 0 1 +B + 11.0011

11.1001

——> 11.1100 111.0 1 0

3 1 0 -B + 00.1101

00.1001

——> 00.0100 1111. 0 1

4 0 1 +B + 11.0011

11.0111

——> 11.1011 1111 1. 0

10

5 1 0 -B + 00.1101

修正 00.1000 1111

(XY)补 = 0.10001111

5.算法流程

9

图2-2-5 补码比较乘法流程图

2.3课程设计实验代码(概要设计)

module mul_4( clk, res_n, A, B, result);

parameter width=3'd4; //4位计算,最高两位为符号位,采用双符号位

input clk,res_n;

input [width-1:0]B,A;//乘数

output [2*width-1:0]out;//运算结果最多是两倍乘数位数

wire [2*width-1:0]out;

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)

begin

if(!res_n)

begin

R0<=0;

10

R1<=mul1;

R2<=mul2;

P<=1'b0;

ns<=0;

end

else

begin

if(!ns)

begin

case({B[0],P})

2'b01:

begin

R0<=(A+B);ns<=1;

end

2'b10:

begin

A<=(A-B);ns<=1;

end

default:

{A,B,P}<={A[width-1],R0,R1};

endcase

end

else

begin

{A,B,P}<={A[width-1],A,B};

ns<=0;

end

11

end

end

endmodule

2.4课程设计详细设计方案

2.4.1顶层方案图的设计与实现

顶层方案图实现一位补码乘法器的逻辑功能,采用原理图设计输入方式完成,电路实现基于XCV200可编程逻辑芯片。在完成原理图的功能设计后,把输入/输出信号安排到XCV200指定的引脚上去,实现芯片的引脚锁定。

(1)、创建顶层图形设计文件

顶层图形文件主要由一个两个16进制数和和一个封装模块组装而成的一个完整的设计实体。可利用Xilinx模块实现顶层图形文件的设计,顶层图形文件结构如图3.1所示。

图3.1 一位补码乘法器顶层图形文件结构

(2)、器件的选择与引脚锁定

12

(1)器件的选择

由于硬件设计环境是基于伟福COP2000型计算机组成原理实验仪和XCV200实验板,故采用的目标芯片为Xlinx XCV200可编程逻辑芯片。 (2)引脚锁定

把顶层图形文件中的输入/输出信号安排到Xlinx XCV200芯片指定的引脚上去,实现芯片的引脚锁定,各信号及Xlinx XCV200芯片引脚对应关系如表3.1所示。

3-1 信号和芯片引脚对应关系

2.4.2功能模块的设计与实现 (1)实现原理

一位补码乘法器是由ALU ,被乘数寄存器,乘数寄存器,部分积寄存器,门电路和移位电路为基础而实现的,设计时这两个模块用Verilog 设计输入方式实现。 (2)创建元件图形符号

为了能在图形编辑器(原理图设计输入方式)中调用此两输入,需要为ORM2创建一个元件图形符号,可用Xilinx foundation f3.1编译器的实现模块。 (3)功能仿真

对创建的两输入一输出的元件进行功能仿真,验证其功能的正确性,可用Xilinx foundation f3.1编译器的Simulator 模块实现。

2.4.3 仿真调试

仿真调试主要验证设计电路逻辑功能、时序的正确性,本设计中主要采用功能仿真方法对设计的电路进行仿真。 13

一位乘法

器内部信

号 图形文件中的输入/输出信

号 XCV200芯片引脚

A A 094,095,096,097,100,101,102,103

B B 079,030,081,082,084,085,086,087

C C 215,216,217,218,220,221,222,223

CLR CLR 157 CE CE

171

(1)建立仿真波形文件及仿真信号选择

功能仿真时,首先建立仿真波形文件,选择仿真信号,对选定的输入信号设置参数,选定的仿真信号和设置的参数如表3-2所示。

(2)功能仿真结果与分析

功能仿真波形结果如图3.2所示,仿真数据结果如表3.2所示。由仿真结果可以看出功能仿真结果是正确的,进而说明电路设计的正确性。

表3-2 输入信号和输出信号

输入信号输出信号U1.A7 U1.B7 U1.C7

CC 58 06

02 18 1B

01 85 04

81 85 17

14

图3.2 仿真波形图

由表和图所示信息对比可知,仿真完全正确,能实现补码一位乘法计算功能[3]。

15

第 3 章结论

3.1课程设计总结

我们小组围绕课题《用硬件描述语言设计补码一位乘法器》,先后查阅了相关资料,做出了课题背景的分析,课题需求分析,课题概要设计,课题的详细设计。

经过两周的设计,基本上完成了此次课程设计任务,成功将补码一位乘法器。

由于平时对硬件的接触较少所以学习起来困难重重。通过本次课程设计,才真正意识到所学知识的有限和动手能力的缺乏。从起初对课题的一知半解到最终完成设计,遇到了很多困难和挫折,但经过查阅书籍、搜索网页信息,并和同学讨论分析,请教指导老师,问题一一得到解决,还学到很多课堂上学不到的知识。通过本课题,本组成员对补码乘法有了一定深度的了解,加深了对补码一位乘法实现方法的认识,积累了补码一位乘法移植的丰富经验。但因为对专业知识没有很深的认识,加之课程设计时间较短,就本课题,本组成员觉得还有许多方面需要改进和加强。

参考文献:[1]夏宇闻《Verilog数字系统设计教程第二版》,北京航天航空大学出版社

[2]罗克露单立平刘辉俸志刚《计算机组成原理》,电子工业出版社

[3]https://www.360docs.net/doc/7618563453.html,/view/0554182e453610661ed9f473.html

其他参考:

https://www.360docs.net/doc/7618563453.html,/files/view_hylwk_new.php?H=&id=44898

16

定点补码一位乘法器方案

个人资料整理仅限学习使用 课程设计报告 课程设计名称:计算机组成原理课程设计 课程设计题目:定点补码一位乘法器的设计 院<系):计算机学院 专业:计算机科学与技术 班级: 学号: 姓名: 指导教师: 完成日期:2018年1月15日

目录第1章总体设计方案1 1.1设计原理1 1.2设计思路2 1.3设计环境4 第2章详细设计方案5 2.1顶层方案图的设计与实现5 2.1.1创建顶层图形设计文件5 2.1.2器件的选择与引脚锁定6 2.2功能模块的设计与实现7 2.2.1求补电路模块的设计与实现7 2.2.2 控制电路模块的设计与实现8 2.2.3选择器模块的设计与实现10 第3章编程下载与硬件测试12 3.1编程下载12 3.2硬件测试及结果分析12 参考文献14 附录<电路原理图)15

第1章总体设计方案 1.1设计原理 <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× ×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]补

定点补码一位乘法器的设计与实现

课程设计报告 课程设计名称:计算机组成原理课程设计 课程设计题目:定点补码一位乘法器的设计与实现 院(系):计算机学院 专业:计算机科学与技术 班级: 学号: 姓名: 指导教师: 完成日期:2012年1月13日

目录 第1章总体设计方案 (1) 1.1设计原理 (1) 1.2设计思路 (1) 1.3设计环境 (2) 第2章详细设计方案 (3) 2.1顶层方案图的设计与实现 (3) 2.1.1创建顶层图形设计文件 (3) 2.1.2器件的选择与引脚锁定 (4) 2.1.3编译、综合、适配 (5) 2.2功能模块的设计与实现 (5) 2.2.1 取补模块的设计与实现 (5) 2.2.2选择器模块的设计与实现 (7) 2.2.3 乘数补码移位寄存器模块的设计与实现 (11) 2.2.4 部分积移位寄存器模块的设计与实现 (13) 2.3仿真调试 (14) 第3章编程下载与硬件测试 (16) 参考文献 (17) 附录(电路原理图) (18)

第1章总体设计方案 1.1 设计原理 在计算两个补码相乘时,可以通过Booth算法来实现定点补码一位乘的功能。布斯(Booth)算法采用相加和相减的操作计算补码数据的乘积,Booth算法对乘数从低位开始判断,根据后两个数据位的情况决定进行加法、减法还是仅仅进行移位操作。讨论当相乘的两个数中有一个或二个为负数的情况,在讨论补码乘法运算时,对被乘数或部分积的处理上与原码乘法有某些类似,差别仅表现在被乘数和部分积的符号位要和数值一起参加运算。 Booth乘法规则如下: 假设X、Y都是用补码形式表示的机器数,[X]补和[Y]补=Ys.Y1Y2…Yn,都是任意符号表示的数。比较法求新的部分积,取决于两个比较位的数位,即Yi+1Yi 的状态。 首先设置附加位Yn+1=0,部分积初值[Z0]补=0。 当n≠0时,判断YnYn+1, 若YnYn+1=00或11,即相邻位相同时,上次部分积右移一位,直接得部分积。若YnYn+1=01,上次部分积加[X]补,然后右移一位得新部分积。 若YnYn+1=10,上次部分积加[-X]补,然后右移一位得新部分积。 当n=0时,判YnYn+1(对应于Y0Y1),运算规则同(1)只是不移位。即在运算的最后一步,乘积不再右移。 1.2 设计思路 首先要采用原码值输入,乘数和被乘数皆为8位。而且根据补码一位乘法运算规则:(1) 如果yn = yn+1,部分积[ zi ] 加0,再右移一位;(2) 如果yn yn+1 = 01,部分积加[ x ]补,再右移一位;(3) 如果yn yn+1 = 10,部分积加[ - x]补,再右移一位;这样重复进行n+1 步,但最后一步不移位。包括一位符号位,所得乘积为2n+1 位,其中n 为尾数位数。 设计一个二输入三选一选择器对可能的三种情况进行选择。当选择器中输入

补码一位乘法

计算机组成原理 第三章运算方法与运算器3.4 补码一位乘法

1补码一位乘法的基本方法 设[X]补= X0X1X2X3…X n[Y]补= Y0Y1Y2Y3…Y n 可证明: [X?Y]补= [X]补?( 0.Y1Y2Y3…Yn) –Y0? [X]补 进一步展开合并后可得: n [x?y]补=[x] 补?∑(y i+1-y i)2-i (符号位参加运算) i=0

1补码一位乘法的基本方法 [x?y] 补=[x] 补? (y i+1-y i)2-i (符号位参加运算) 补码一位乘法的运算规则如下: (1)如果y n+1=y n,部分积加0,部分积算术右移1位; (2)如果y n+1y n=10,部分积加[x]补,部分积算术右移1位; (3)如果y n+1y n=01,部分积加[-x]补,部分积算术右移1位. 重复进行n+1步,但最后一步不移位。 包括一位符号位,所得乘积为2n+1位,其中n为数据位位数.

1补码一位乘法的基本方法 几个特殊问题的处理 [x ?y] 补=[x] 补? (y i+1- y i )2-i (符号位参加运算) 设[X]补= X 0X 1X 2X 3…X n [Y]补= Y 0Y 1Y 2Y 3…Y n (1)i=n 时,y n+1=?(2)y n+1是哪个寄存器? (3)算术右移的对象有哪些?y n+1=0 在乘数寄存器Y 后增加的一位部分积和乘数寄存器均右移

2补码一位乘法的举例 例1 已知X= +1101 Y=+1011 用补码一位乘法求X?Y 解:[X]补=01101 [Y]补=01011 [–X]补=10011 部分积乘数说明 000000 010110Y n+1< Y n部分积+[–X]补 + 110011 110011 →111001101011结果右移一位,Y n+1= Y n部分积+0 + 000000 111001 →111100 110101结果右移一位, Y n+1> Y n部分积+[X]补 + 001101 001001

计算机组成原理第六章答案

1. 写出下列各数的原码、反码、补码、移码(用8位二进制表示),其中MSB是最高位(符号位),LSB是最低位。如果是小数,则小数点在MSB之后;如果是整数,则小数点在LSB之后。 (1)-59/64 (2)27/128 (3)-127/128 (4)用小数表示-1 (5)用整数表示-1 (6)-127 (7)35 (8)-128 2. 设[x]补=x0.x1x2x3x4,其中x i取0或1,若要使x>-0.5,则x0、x1、x2、x3、x4的取值应满足什么条件? 3. 若32位定点小数的最高位为符号位,用补码表示,则所能表示的最大正数为,最小正数为,最大负数为,最小负数为;若32位定点整数的最高位为符号位,用原码表示,则所能表示的最大正数为,最小正数为,最大负数为,最小负数为。 4. 若机器字长为32位,在浮点数据表示时阶符占1位,阶码值占7位,数符占1位,尾数值占23位,阶码用移码表示,尾数用原码表示,则该浮点数格式所能表示的最大正数为,最小正数为,最大负数为,最小负数为。 5. 某机浮点数字长为18位,格式如图2.35所示,已知阶码(含阶符)用补码表示,尾数(含数符)用原码表示。 (1)将(-1027)10表示成规格化浮点数; (2)浮点数(0EF43)16是否是规格化浮点数?它所表示的真值是多少? 图2.35 浮点数的表示格式 6. 有一个字长为32位的浮点数,格式如图2.36所示,已知数符占1位;阶码占8位,用移码表示;尾数值占23位,尾数用补码表示。 图2.36 浮点数的表示格式 请写出:

(1)所能表示的最大正数; (2)所能表示的最小负数; (3)规格化数所能表示的数的范围。 7. 若浮点数x的IEEE754标准的32位存储格式为(8FEFC000)16,求其浮点数的十进制数值。 8. 将数(-7.28125)10转换成IEEE754标准的32位浮点数的二进制存储格式。 9. 已知x=-0.x1x2…x n,求证:[x]补=+0.00…01。 10. 已知[x]补=1.x1x2x3x4x5x6,求证:[x]原=+0.000001。 11. 已知x和y,用变形补码计算x+y,同时指出运算结果是否发生溢出。 (1)x=0.11011 y=-0.10101 (2)x=-10110 y=-00011 12. 已知x和y,用变形补码计算x-y,同时指出运算结果是否发生溢出。 (1)x=0.10111 y=0.11011 (2)x=11011 y=-10011 13. 已知[x]补=1.1011000,[y]补=1.0100110,用变形补码计算2[x]补+1/2[y]补=?,同时指出结果是否发生溢出。 14. 已知x和y,用原码运算规则计算x+y,同时指出运算结果是否发生溢出。 (1)x=0.1011,y=-0.1110 (2)x=-1101,y=-1010 15. 已知x和y,用原码运算规则计算x-y,同时指出运算结果是否发生溢出。 (1)x=0.1101,y=0.0001 (2)x=0011,y=1110 16. 已知x和y,用移码运算方法计算x+y,同时指出运算结果是否发生溢出。 (1)x=-1001,y=1101 (2)x=1101,y=1011

补码一位乘法之较正法的公式推导

在定点乘法运算中,补码乘法分为补码一位乘法和补码两位乘法。而补码一位乘法又分为较正法和比较法(Booth算法)两种。其中,较正法是比较法的基础。因此,掌握较正法是学习补码一位乘法的关键。下面,我们就对较正法进行深入分析。 一、较正法公式 [XY]补= [X]补*(0.Y1,Y2, … ,Y n) + [-X]补*Y0 其中,X、Y是两个定点数的真值,[Y]补=Y0.Y1,Y2, … ,Y n,Y0是符号位。 为了推导出此公式,我们分情况来进一步分析。 1、Y=0 在这种情况下,[Y]补=Y=0.0,0, … ,0=0。 [XY]补=0 =[X]补*(0.0,0, … ,0)+[-X]补*0 =[X]补*(0.Y1,Y2, … ,Y n)+[-X]补*Y0 2、X>=0, Y>0 在这种情况下,[X]补=X,[Y]补=Y,且Y0=0。不难看出, [XY]补=XY =[X]补*Y =[X]补*(Y0.Y1,Y2, … ,Y n)+[-X]补*0 =[X]补*(0.Y1,Y2, … ,Y n)+[-X]补*Y0 到此为止,我们还有两种情况尚未讨论,一种情况是X<0, Y>0,一种情况是Y<0。前一种情况是本文讨论的重点。与很多教材上的推导方法不同,本文采用与原码一位乘法相对照来证明此种情况。此方法用到的知识点有原码一位乘法和补码移位规则。首先,我们先来回顾一下这两个知识点。 二、原码一位乘法 原码一位乘法基本上是从手算法则演变过来的。我们知道,两个数相乘的手算法则是“绝对值相乘;同号得正,异号得负”。原码一位乘法也采用这种方法。 设[X]原=X s.X1,X2, … ,X n [Y]原=Y s.Y1,Y2, … ,Y n 因为[X]原=X,[Y]原=Y,[XY]原=XY 所以[XY]原=[X]原*[Y]原

间接补码阵列乘法器的设计组成原理课程设计报告

沈阳航空航天大学 课程设计报告 课程设计名称:计算机组成原理课程设计课程设计题目:间接补码阵列乘法器的设计 院(系):计算机学院 专业:计算机科学与技术 班级: 学号: 姓名: 指导教师: 完成日期:2015年1月16日

沈阳航空工业学院课程设计报告 目录 第1章总体设计方案 (1) 1.1设计原理 (1) 1.2设计思路 (2) 1.3设计环境 (2) 第2章详细设计方案 (5) 2.1顶层方案图的设计与实现 (5) 2.1.1创建顶层图形设计文件 (5) 2.1.2器件的选择与引脚锁定 (5) 2.1.3编译、综合、适配 (6) 2.2功能模块的设计与实现 (6) 2.2.1 细胞模块的设计与实现 (6) 2.2.2 全加器模块的设计与实现 (7) 2.3仿真调试 (11) 第3章编程下载与硬件测试 (13) 3.1编程下载 (13) 3.2硬件测试及结果分析 (13) 参考文献 (15) 附录(电路原理图) (16)

第1章总体设计方案 1.1 设计原理 由于计算机采用补码做加减运算,所以设计阵列补码乘法器能避免码制转换,提高机器效率。可以利用原码阵列乘法器来设计补码阵列乘法器,这时需要在计算前先进行原码--补码的转换。乘法器的常规设计是适用“串行移位”和“并行加法”相结合的方法,这种方法并不需要很多器件。然而串行方法毕竟太慢,不能满足科学技术对高速乘法所提出的要求。自从大规模集成电路问世以来,高速的单元阵列乘法器应运而生,出现了各种形式的流水线阵列乘法器,它们属于并行乘法器。阵列乘法器采用类似于人工计算的方法进行乘法运算。人工计算方法是用乘数的每一位去乘被乘数,然后将每一位权值对应相加得出每一位的最终结果。如图1.1所示,用乘数的每一位直接去乘被乘数得到部分积并按位列为一行,每一行部分积末位与对应的乘数数位对齐,体现对应数位的权值。将各次部分积求和,即将各次部分积的对应数位求和即得到最终乘积的对应数位的权值。 011010 * 001001 ____________ 011010 000000 000000 011010 000000 000000 _______________ 00011101010 图1.1 人工计算乘法示例 阵列乘法器采用类似人工的计算方法来完成乘法计算。阵列的每一行送入乘

补码乘法

补码乘法因符号位参与运算,可以完成补码数的“直接”乘法,而不需要求补级。这种直接的 方法排除了较慢的对2求补操作,因而大大加速了乘法过程。 首先说明与直接的补码乘法相联系数学特征。对于计算补码数的数值来说,一种较好的表示 方法是使补码的位置数由一个带负权的符号和带正权的系数。今考虑一个定点补码整数 [N]补=a n-1a n-2…a1a0,这里a n-1是符号位。根据[N]补的符号,补码数[N]补和真值N 的关系 可以表示成: N= n-2 +∑a i2i当a n-1= 0([N]补为正)时i=0 n-2 -[1+∑(1-a i)2i] 当a n-1= 1([N]补为负)时i=0 如果我们把负权因数-2n-1强加到符号位a n-1上,那么就可以把上述方程组中的两个位置 表达式合并成下面的统一形式: (2.29) (2.30) [例19] 已知: [N]补= 01101,[-N]补=10011,求[N]补,[-N]补具有的数值。 [解:]

常规的一位全加器可假定它的3个输入和 2个输出都是正权。这种加法器通过把正权或 负权加到输入/输出端,可以归纳出四类加法 单元。如右表,0类全加器没有负权输入; 1类全加器有1个负权输入和2个正权输入;依次类推。 对0类、3类全加器而言有: S =XYZ +XYZ +XYZ +XYZ C =XY +YZ +ZX 对1类、2类全加器,则有 S =XYZ +XYZ +XYZ +XYZ C =XY +XZ +YZ 表2.3 四类一般化全加器的名称和逻辑符号 注意,0类和3类全加器是用同一对逻辑方程来表征的,它和普通的一位全加器(0类)是一致 的。这是因为3类全加器可以简单地把0类全加器的所有输入输出值全部反向来得到,反之亦然。 1类和2类全加器之间也能建立类似的关系。由于逻辑表达式具有两级与一或形式,可以用 “与或非”门来实现,延迟时间为2T 。 利用混合型的全加器就可以构成直接补码数阵列乘法器。设被乘数A 和乘数B 是两个5位的二 进制补码数,即 A =(a 4)a 3a 2a 1a 0

《计算机组成原理》课程设计_两个数的乘法运算

《计算机组成原理》课程设计报告课程设计题目:两个数的乘法运算 小组成员: …. 完成日期:第十一周

模型机设计实验 一、实验目的 综合运用所学计算机原理知识,设计并实现较为完整的模型计算机。其功能为: 输入两个数,进行两个正数(二进制4位)的乘法运算,输出结果。 二、实验内容 编写程序,运行程序,观察并记录运行结果。 三、实验仪器 1、ZY15CompSys12BB计算机组成原理及系统结构教学实验箱一台 2、排线若干 3、PC机一台 四、预备知识 1、数据格式 8位,其格式如下: 其中第7位为符号位,数值表示范围是:-1≤X<127。 2、指令格式 模型机设计四大类指令共十六条,其中包括算术逻辑指令、I/O指令、访问存储器、转移指令和停机指令。 (1)算术逻辑指令 规定: 算术逻辑指令的名称、功能和具体格式见表2—3。 (2)访存指令及转移指令 模型机设计2条访存指令,即存数(STA)、取数(LAD),2条转移指令,即无条件转移( 负均可)

本模型机规定变址寄存器RI指定为寄存器R2。 (3)I/O指令 其中,在IN 指令中,addr=01,选中“输入”中的开关组作为输入设备,在OUT指令中,addr=10时,表示选中“输出单元”中的数码块作为输出设备。 (4)停机指令 HALT指令,机器码为60H,用于实现停机操作。 3、指令系统 复杂模型机共有16条基本指令,其中算术逻辑指令7条,访问内存指令和程序控制指令4条,输入输出指令2条,其它指令1条。表2-3列出了各条指令的格式、汇编符号、指令功能。 我们依然采用复杂模型机指令系统中的部分指令。 五、实验的机器指令程序如下: 地址内容助记符说明 00 14 IN R0 ; 作计数器用,00000001→R0 01 15 IN R1 ; 输入X的值,0000xxxx→R1 02 05 STA R1 ; X→22H 03 22 04 15 IN R2 ; 输入Y→R2,0000xxxx→R2 05 06 STA R2 ; R2→23H 06 23

用原码一位乘

第六章 20.用原码一位乘、两位乘和补码一位乘( Booth算法)、两位乘计算x ? y。 (1)x= 0.110111, y= -0.101110; (2)x= -0.010111 , y= -0.010101 ; (3)x= 19 , y= 35 ; (4)x= 0.110 11 , y= -0.111 01。 解: (a)原码一位乘: (1) 凶原=0.110111 [y]原=1.101110 x*=0.110111 y*=0.101110 符号位:X 0 Y00 1 1 数值部分的计算: 部分积乘数y* 0.000000 + 0.000000 10111 0 开始部分积为0 乘数为0,加上0 0.000000 0.000000 010111 1 部分积右移一位,乘数右移一位+ 0.110111 乘数为1,加上X* 0.110111 0 0.011011 10 1011 1 部分积右移一位,乘数右移一位 + 0.110111 乘数为1,加上X* 1.010010 10 0.101001 010 101 1 部分积右移一位,乘数右移一位 + 0.110111 乘数为1,加上X* 1.100000 010 0.110000 0010 10 + 0.000000 0.110000 0010 0.011000 00010 1 部分积右移一位,乘数右移一位 + 0.110111 乘数为1,加上X* 1.001111 00010 右移一位 0.100111 100010

[x*y]原=1.100111100010 ⑵ 凶原=1.010111 [y]原=1.010101 x*=0.010111 y*=0.010101 符号位:X 0 Y 0 1 1 0 数值部分的计算: 部分积 乘数y* 0.000000 010101 开始部分积为0 乘数为1,加上X* + 0.010111 0.010111 0.001011 1 01010 1 部分积右移一位,乘数右移一位 + 0.000000 乘数为0,加上0 0.001011 1 0.000101 11 0101 1 部分积右移一位,乘数右移一位 + 0.010111 乘数为1,加上X* 0.011100 11 0.001110 011 010 部分积右移一位,乘数右移一位 + 0.000000 乘数为0,加上0 0.001110 011 0.000111 0011 01 部分积右移一位,乘数右移一位 + 0.010111 乘数为1,加上X* 0.011110 0011 0.001111 00011 0 部分积右移一位,乘数右移一位 + 0.000000 0.001111 00011 0.000111 100011 故,x ? y=0.000111100011 (3) [x]原=0, 0001 0011 [y]原=0, 0010 0011 x*=0001 0011 y*=0010 0011 符号位:X 0 Y 0 0 0 0 00000000 00100011 + 00010011 开始部分积为0 乘数为1,加上X* 数值部分的计算: 部分积 乘数y* 部分积右移一位,乘数右移一位 00010011 00001001 1 001000

补码一位乘的程序设计 计算机组成原理

沈阳 课程设计报告 课程设计名称:计算机组成原理课程设计课程设计题目:定点补码乘法器的程序设计 院(系): 专业: 班级: 学号: 姓名: 指导教师: 完成日期:

沈阳航空航天大学课程设计报告 目录 第1章总体设计方案 (1) 1.1设计原理 (1) 1.2设计思路 (1) 1.3设计环境 (2) 第2章详细设计方案 (4) 2.1总体方案的设计与实现 (4) 2.1.1总体方案的具体描述 (4) 2.2流程图的设计与实现 (5) 2.2.1流程图具体分析 (5) 第3章程序调试与结果测试 (9) 3.1程序调试 (9) 3.2程序测试及结果分析 (9) 参考文献 (14) 附录 (15)

第1章总体设计方案 1.1设计原理 采用伟福COP2000试验箱,设计并实现定点补码一位乘(booth)。 要求:采用的算法为定点补码一位乘booth算法,乘数和被乘数规定为6位,其中首位为符号位。数据要求以原码的形式输入,采用补码方式进行运算。实验数据从试验箱的开关输入,运算的结果在OUT寄存器中显示。 设计原理:比较YnYn+1的状态执行相应的操作。如下图是补码一位乘的运算规则: 表1.1 Booth算法操作表说明 需要说明的是此操作表是在当n≠0时,当n=0时,判断YnYn+1,运算规则同此操作表只是不移位。即在运算的最后一步,乘积不再右移。 1.2设计思路 (1)构造补码一位乘的初始化所需要的数值 因为补码一位乘的算法需要先求出[X]补、[-X]补、[Q]补,所以先将[X]补、[-X]补、[Q]补分别存贮到0F0H到0F2H存储单元中。因为部分积和附加位的初始值都是0,所以在0E0H单元存入附加位初始值0,在R0中存入部分积初始值0。 其他数的处理:将输入的一个值Q求出补码作为乘数Y,并存入R2中;另一个值X存入R1中,根据它来求出[X]补、[-X]补; 本实验规定乘数和被乘数为6位,数据位为五位,所以要完成六次操作,但

计算机组成原理课设 定点补码一位乘法器的设计

沈阳航空工业学院 课程设计报告 课程设计名称:计算机组成原理课程设计课程设计题目:定点补码一位乘法器的设计 院(系):计算机学院 专业:计算机科学与技术 班级:***** 学号:***** 姓名:***** 指导教师:***** 完成日期:2006年12月31日

沈阳航空工业学院课程设计报告 目录 第1章总体设计方案 (2) 1.1补码乘法器设计原理 (2) 1.2设计思路 (4) 1.3设计环境 (5) 第2章详细设计方案 (5) 2.1补码乘法器电路图的设计与实现 (6) 2.1.1 补码乘法器设计 (6) 2.1.2 器件的选择与引脚锁定 (8) 2.1.3 编译、综合、适配 (8) 2.2功能模块的设计与实现 (9) 2.2.1 两输入三选一选择器模块的设计与实现 (9) 2.2.2 半加器模块的设计与实现 ........................................... 错误!未定义书签。 2.3仿真调试 (10) 第3章编程下载与硬件测试 (12) 3.1编程下载 (12) 3.2硬件测试及结果分析 (12) 参考文献 (14)

第1章总体设计方案 1.1 补码乘法器设计原理 原码乘法的主要问题是符号位不能参加运算,单独用一个异或门产生乘积 的符号位,故自然提出能否让符号数字化后也参加乘法运算,补码乘法就可以实现符号位直接参加运算。 布斯(Booth)算法,它采用相加和相减的操作计算补码数据的乘积,Booth算法对乘数从低位开始判断,根据两个数据位的情况决定进行加法、减法还是仅仅移位操作。 Booth算法操作表示 判断的两个数据位为当前位及其右边的位(初始时需要增加一个辅助位0),移位操作是向右移动。判断被乘数中的最低位以及右边的位(辅助位0),如果

数据结构课程设计(长整数四则运算)汇总

一、需求分析 1.本程序实现计算任意长的整数的四则运算. 以用户和计算机对话的方式,先后输入数字的最多位数,然后程序就计算并显示出这两个数的运算。 2. 利用双向循环链表现实长整数的存储,每个结点含一个整形变量。输入的形式以回车结束,可以直接输入正数或负数,程序会过滤掉无效的字符。按中国对于长整数的表示习惯,每四位一组,除数字和位于首位置的负号外,其它一切字符都将作为分隔符,连续多个分隔符当一个处理。但不使用分隔符也不影响结果。 3.测试数据(1)0; 0; 输出“0”; (2)-2345,6789; -7654,3211; 输出“-1,000,000”; (3)-9999,9999; 1,0000,0000,0000; 输出“9999,0000,0001”; (4)1,0001,0001; -1,0001,0001; 输出“0”; (5)1,0001,0001; -1,0001,0001; 输出“1”; (6)-9999,9999,9999; -9999,9999,9999; 输出“-1,9999,9999,9998”; (7)1,0000,9999,9999; 1; 输出"1,0001,0000,0000". 二、概要设计 为实现上述程序功能,应以双向循环链表表示长整数。为此,需要定义一个抽象数据类型。 1. 抽象数据类型定义为:

ADT OrderedList{ 数据对象:D={ai|ai∈int,i=1,2,...n, n≥0} 基本操作: init(&a,digit4) 操作结果:构造一个位数是digit4*4长整数。 pass(&a,&b,&c) 初始条件:a,b,c都已存在 操作结果:c等于a和b的和。nep(&a) 初始条件:a已存在。 操作结果:a变为输入参数的相反数。printlong(&a) 初始条件:a已存在。 操作结果:按四位一组,分隔符为","的格式,在屏幕上输出a。ston(&S,&a) 初始条件:a已存在。 操作结果:把字符串形式的长数字赋给a。}ADT OrderedList 2.本程序包含两个模块: 1)主程序模块:V oid main(){ 选择操作: 1:帮助。 2:加法。 3:减法。

补码运算加减乘除原理

首先我们来看为什么要使用补码运算法: 因为人脑可以知道第一位是符号位, 在计算的时候我们会根据符号位, 选择对真值区域的加减. (真值的概念在本文最开头). 但是对于计算机, 加减乘数已经是最基础的运算, 要设计的尽量简单. 计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂! 于是人们想出了将符号位也参与运算的方法. 我们知道, 根据运算法则减去一个正数等于加上一个负数, 即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法, 这样计算机运算的设计就更简单了. 于是人们开始探索将符号位参与运算, 并且只保留加法的方法. 首先来看原码: 计算十进制的表达式: 1-1=0 1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2 如果用原码表示, 让符号位也参与计算, 显然对于减法来说, 结果是不正确的.这也就是为何计算机内部不使用原码表示一个数. 为了解决原码做减法的问题, 出现了反码: 计算十进制的表达式: 1-1=0 1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0 发现用反码计算减法, 结果的真值部分是正确的. 而唯一的问题其实就出现在"0"这个特 殊的数值上.虽然人们理解上+0和-0是一样的, 但是0带符号是没有任何意义的. 而且会有[0000 0000]原和[1000 0000]原两个编码表示0. 于是补码的出现, 解决了0的符号以及两个编码的问题: 1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原 这样0用[0000 0000]表示, 而以前出现问题的-0则不存在了.而且可以用[1000 0000]表示-128: 接下来我们来看补码运算原理: 在计算机里,如果我们要计算5-3的值,我们既可以用5减去3,也可以用5 加上13。这是为什么呢? 这就像我们的钟表,它从1点走到12点之后,又回到了1点。我们的计算机 也是,从0走到15之后,再往下走就又回到了0,就像我们转了一个圈一样。 我们从5这个位置往回退3个格,就完成了5-3这个计算。我们也可以从5这 个位置往前走,一直走到15,这时我们走了10个格,然后我们继续往前走, 走到0,然后到1,然后就走到了2。这样,我们往前走了13个格之后,也到 了2这个位置。 所以说,在我们这个计算机中,减3和加13是一样的。而3+13=16,我们说在 模16的系统下,3和13是互补的。 这样,我们计算5-3就可以换成5+13。3的二进制表示为0011,5的二进制表 示为0101。这样,0101-0011就可以表示为0101+(-0011)。 我们在计算机中都是把负数用其补码表示,-0011的补码就是10000-0011(即 16-3,也就是13)。10000-0011=1+1111-0011=1+(1111-0011)=1+1100=1101。

课程设计报告 补码变换器

长沙学院课程设计说明书 题目补码变换器的设计 系(部) 电子与通信工程 专业(班级) 电气一班 姓名周鹏 学号 2010042113 指导教师谢明华、刘亮、瞿曌 起止日期 5.21—5.25

数字电子技术课程设计任务书(17) 系(部):电子与通信工程系专业:电气工程及其自动化指导教师:谢明华课题名称补码变换器的设计 设计内容及要求(1)课题内容: ①.设计一个4位的补码变换器,输入为4位的补码,采用2个数码管显示该补码的原码值。 ②.数码管高位显示该补码的符号,如果该补码大于等于0,该符号位数码管显示“0”,反之,显示“一”;数码管低位显示该补码的原码值。 (发挥部分:设计8位的补码变换器) (2)主要任务:完成该系统的硬件设计,调试好后并能通过仿真,最后就课程设计本身提交一篇课程设计说明书。 设计工作量1、系统整体设计; 2、系统设计及仿真 3、在Multisim或同类型电路设计软件中进行仿真并进行演示; 4、提交一份完整的课程设计说明书,包括设计原理、仿真分析、调试过程,参考文献、设计总结等。 进度安排起止日期(或时间量)设计内容(或预期目标)备注第1天课题介绍,答疑,收集材料,设计方案论证 第2天系统设计 第3天系统设计及仿真 第4天系统设计及仿真 第5天系统验收,编写设计说明书 教研室 意见 年月日系(部)主 管领导意见 年月日

长沙学院课程设计鉴定表 姓名周鹏学号2010042 113 专业电气工程及其自动 化 班级一 设计题目补码变换器的设计指导教师谢明华指导教师意见: 评定等级:教师签名:日期: 答辩小组意见: 评定等级:答辩小组长签名:日期: 教研室意见: 教研室主任签名:日期: 系(部)意见: 系主任签名:日期: 说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;

直接补码并行乘法

直接补码阵列乘法器的设计原理 * 李澄举 (嘉应学院计算机系,广东梅州514015) [摘要]直接补码阵列乘法器的工作原理是《计算机组成原理》课程的难点。本文从组成阵列乘法器的四类全加器的工作原理分析开始,结合补码和真值的转换关系,通过和手工计算方法的对比,深入浅出地揭示了直接补码阵列乘法器的工作原理。 [关键词] 直接补码阵列乘法器,负权值,一般化全加器 一、引言 直接补码阵列乘法器可以直接求出两个补码的相乘积,由于符号位也参加运算,运算速度比起原码阵列乘法器快得多。5位乘5位的直接补码并行阵列乘法器的逻辑结构如图1所示。 与原码阵列乘法器不同的是,直接补码阵列乘法器除了采用0类全加器之外,还采用了1类和2类全加器,以对应于输入补码符号位的负的位权值;图1左下角的虚框是行波进位加法器,为了缩短加法时间,可以用先行进位加法器代替。 设被乘数和乘数(均为补码)分别为A=(a4)a3a2a1a0,B=(b4)b3b2b1b0,其中a4和b4是符号位,用括号括起来是表示这一位具有负的位权值。根据补码和真值的转换可以知道,补码A的真值a=a4×(-24)+a3×23+a2×22+a1×21+a0×20; 补码B的真值b=b4×(-24)+b3×23+b2×22+b1×21+b0×20; 即在将补码直接转换成真值时,符号位取负权值,其余位取正权值。 如设A=01101(+13),B=11011(-5),计算符号位参加运算A×B的竖式乘法如下:*【作者简介】李澄举(1949—),男,广东梅县人, 嘉应学院计算机系副教授

在这个竖式中,带括位的位具有负的位权值,即(1)=-1,(0)=0。原乘积最高两位0(1) 是带有负位权值的二进制数,相当于0×21+1×(-20) =-1,因(1)1相当于1×(-21)+1 ×20 =-1,故0(1)可以写成(1)1,这扩充符号位(1)便是乘积的符号位。由此可见,在竖式乘法中,若乘积中间位有带负位权值的(1),可照此办法将(1)左移或消去,如果(1)能移到乘积最左边,则说明乘积为负,这(1)便是补码符号位;否则乘积为正,应在乘积最左边的1之左边加一个0作为补码符号位。 二、各类全加器的加法逻辑 要了解直接补码阵列乘法器的工作原理,首先要了解各类全加器的工作原理。 常规的一位全加器可假定它的3个输入和2个输出都是正权。这种加法器通过把正权 或负权加到 输入/输出端, 可以归纳出 四类加法单 元。如图2所 示各类全加 器的逻辑符 号,图中凡带有小圆圈的输入端都是负位权值的输 入端、带有小圆圈的输出端都是负位权值的输出 端。由图可见,0类全加器没有负权输入和负权输 出;1类全加器有1个负权输入和1个负权输出;2 类全加器有2个负权输入和1个负权输出;3类全 加器有3个负权输入和3个负权输出;各类全加器 就是按负权值输入的个数命名的。 1、0类全加器 由于0类全加器3个输入X 、Y 、Z 和2个输出 S (本位)和C (进位)都是正权,它的输出函数 表达式为我们所熟知: ZX YZ XY C XYZ Z Y X Z Y X Z Y X S 00++=+++=。 2、1类全加器 1类全加器只有1个负权输入和1个负权的本 位输出。对于负权输入,如竖式乘法可见,加法的 结果是正权的值的和与负权的值相减。但一位的减 法不同于做n 位定点整数的补码减法,1类全加器

Verilog实现补码一位乘法课程设计

计算机科学与工程学院 课程设计报告 题目全称: Verilog实现补码一位乘法 课程名称:计算机组成原理 指导老师:文泉职称: 序号学生姓名学号班号成绩 1 王清2806306025 28063060 2 林昕2806306028 28063060 3 陈琦凯2806306013 28063060 4 彭程2806306024 28063060 5 陈云川2806306012 28063060 6 闫科2806306008 28063060 指导老师评语: 指导签字: 课程设计成绩: 设计过程表现设计报告质量总分

目录 第 1 章序言 (1) 1.1 课程设计目的 (1) 1.2 课程设计作用 (2) 1.3 课程设计需求 (2) 1.3.1Xilinx设计软件 (2) 1.3.2 在xilinx ISE集成开发环境下,使用Verilog HDL (2) 第 2 章正文 (4) 2.1 实现补码一位乘法的原理 (4) 2.2 比较补码一位乘法方法 (6) 2.2.1 分步乘法 (6) 2.2.2 运算规则 (7) 2.2.3 运算实例 (7) 2.2.4算法流程图 (8) 2.2.5 比较法(Booth算法) (8) 2.3课程设计实验代码(概要设计) (10) 2.4课程设计详细设计方案 (12) 2.4.1顶层方案图的设计与实现 (13) 2.4.2 功能模块的设计与实现 (14) 2.4.3 仿真调试 (13) 第 3 章结论 (16) 3.1课程设计总结 (16)

摘要 本定点补码一位乘法器,具有良好的可移植性。本文介绍了定点补码一位乘法的概念已及定点补码一位乘法的的原理和方法,分析了定点补码一位乘法器的设计,并详细介绍了使用EDA环境,Xilinx设计软件,在XCV200实验板的XCV200可编程逻辑芯片中上进行定点补码一位乘法器的移植。通过测试,系统移植成功。 关键词:定点补码;EDA;一位乘法器;设计

定点补码一位除法的实现方案

定点补码一位除法的实现方案 类别:网文精粹阅读:1040 定点补码一位除法的实现方案 与补码乘法类似,也可以用补码直接完成除法运算,即用[X]补/[Y] 补直接求得[X/Y]补。补码除法的规则比原码除法的规则复杂一些。当除数和被除数用补表示时,判别是否够除,就不再是简单地用被除数(余数)减去除数,而是要比较它们的绝对值的大小。因此,若二数同符号,要用减法,若异号,则要用加法,请注意,这样求出来的商是反码形式的。 我们不准备对此进行更多地讨论,可以给出其运算规则如下: (1) 开始时,求第一位商,如果被除数与除数同号, 用被除数减去除数,若二数异号,则用被除数加上除数的办法处理。 (2) 运算过程中确定商的值,若余数与除数同号,上商1,左移一位后下次用余数减除数操作求商,若余数与除数异号,上商0,左移一位后下次用余数加除数操作求商。 (3) 商的符号,是在第一次求商试算时求出的,若定点除不溢出,得到的就是正确的 符号位的值。 (4) 商的修正问题。在对精度要求不高时,将商的最低一位恒置1。最大误差为| 2-n |。 若对商的精度要求较高,可对n位数求商n+1次,按得到的不同结果对商进行修正。当商为负时,要在商的最低一位加1,从反码的结果得到商的正确的补码值。 下面给出补码除法执行运算过程的一个实例。 假定[X]补=1 0111 , [Y]补= 0 1101, 则[-Y]补= 1 0011 再求下去,可得下一位商并舍入;也可以不执行最后一步求商操作,而直接用在最低位上商1来结束除运算过程。 除法运算也有快速除运算的各种方案,如一次求得1位或多位商的跳0跳1法,专用的高速除法装置,用快速乘法器完成快速除运算等。由于在程序中,除法指令的使用频度不高,因此一般机器中较少采用快速除法方案。

64位乘法器实验报告

64位乘法器实验报告 64位乘法器设计实验是我在科大的第一个课程设计,verilog程序的熟练掌握对于微电 子专业的学生来讲是非常必要的,对于此次设计我也花费了很长时间。 本设计分为3个部分,即控制和(1)状态选择部分,(2)乘法器部分,(3)加法器部 分。以下我将按此顺序进行说明。需要指出的是,在实际设计中的顺序恰好是颠倒的,这 与设计思路有关,在刚开始的时候由于对整体没有一个很好的把握就先选择最简单的一部分 几加法器开始入手,然后就是乘法器,最后作乐一个状态控制电路将两部分联系起来。 状态选择部分设计: 本电路状态选择部分设计比较简单,只有一个控制信号sel来控制电路的工作状态,我 选定的状态是:sel为00的时候做加法,sel为01时做减法,sel为10时做乘法。从节省功 耗的角度出发,当电路处于加法状态的时候,乘法器最好是能够不工作,反之也一样在乘法 器工作时要求加法器也处于不工作状态。我在设计中在两个电路块的输入上都加了一个二选 一开关,使不处于工作状态的电路块的输入始终为0,可是使电路减少由动态翻转产生的功 耗。 加法器的设计: 为了能更好地掌握加法器的设计过程,本部分采用门级描述语言,本加法器采用 流水线的设计方案。实际上该部分是不需要流水,因为乘法器是本电路的关键路径,即使乘 法器采用流水线的设计方案延迟也肯定比加法器要大。为了能够掌握流水线设计,加法器也 采用了流水线来实现。加法器的整体结构见附图(1),有超前进位产生电路,和超前进位电 路来实现。 超前进位产生电路是对两个64位输入按位进行异或和与从而产生超前进位电路的 输入信号P,Q。教材上在此处也产生了部分和结果S,但我认为在此处产生结果不妥,因 为要产生部分和结果必须有上一级的进位信号,对于本加法器进位信号将在下一步才产生。 所以我将作后结果的产生放在了最后一拍来完成将P与产生的进位信号按位异或即可得到 最后结果。但要注意P与进位信号CP产生的时间是不一致的,所以P信号要送到寄存器中 等待一拍。以与CP信号保持时序上的一致。 毋庸置疑64位加法器的设计肯定要采用超前进位电路来实现。考虑到一般的与门或或 门的扇入不大于4的原则,我对超前进位电路采取每4组一个超前进位块,同时分层超前进 位来实现。这样做的好处是能降低每个超前进位块的设计复杂程度,实现电路在性能和复杂 性之间的一个优化。电路超前进位部分的总体结构见附图(2)。超前进位按设计要求是产生 除最高进位之外的所有进位信号。同时最高位的进位信号是由一个额外的组合电路来实现。 CP[63]=G[63]|(P[63] & G[62])|(P[63] & P[62] & G[61])|(P[63]&P[62]&P[61]&G[60])|(P[63]&P[62]&P[61]&P[60]&G[59]); 在所有进位信号产生之后加法器的输出就是: sum[64:0]<={CP[63],(P_sec[63:0]^{CP[62:0],sel[0]})}; sel[0]下面将对此做出解释。我设定sel信号为01时做减法,sel为00时做加法。减法 电路设计比较简单只要在sel为0是将输入信号Y取反再加1即可。为了减法不增加额外的

相关文档
最新文档