沈阳航空航天大学
课 程 设 计 报 告
课程设计名称:计算机组成原理课程设计
课程设计题目:定点原码一位乘法器设计与实现
院(系):计算机学院
专 业:计算机科学与技术
班 级:
学 号:
姓 名:
指导教师:施国君
完成日期:2014年01月10日
原码一位乘,两个原码数相乘,其乘积的符号为相乘两数符号的异或值,数值则为两数绝对值之积。
列如:已知, ,求。
即:
乘积的符号位为
故
由于在计算机内多个数据一般不能同时相加,一次加法操作只能求出两数之和,因此每求得一个相加数,就与上次部分积相加每次计算时,相加数逐次向左偏移一位,由于最后的乘积位数是乘数(被乘数)的两倍,因此加法器也需增到两倍。部分积右移时,乘数寄存器同时右移一位,所以用乘数寄存器的最低位来控制相加数取被乘数或零,同时乘数寄存器接收部分积右移出来的一位,完成运算后,部分积寄存器保存乘积的高位部分,乘数寄存器中保存乘积的低位部分。
根据人工算法可以知道,原码一位乘法的整体设计应包括被乘数寄存器,乘数寄存器,部分积寄存器,加法器,控制器五大模块,包含一个输入、输出、控制器模块,并作为顶层设计,以上五大模块作为底层设计,采用硬件器件设计实现。
因此,可以得出以下原理框图设计如图1.1所示:
图1.1 原码一位乘法器的原理框图
如上原理框图1.1中所示,其中B为被乘数寄存器,用来存放被乘数;C为乘数寄存器,用来存放乘数并且移位;A为部分积寄存器,存放每次相加并移位后的数据;ALU加法器实现加法操作;移位电路用来对相加后的数据作移位处理,计数器控制移位次数和输出结果。
按照课设题目要求及原理图,先设计出电路的具体模块图,定点原码一位乘法器共有五大模块:被乘数寄存器、乘数寄存器、部分积寄存器、加法器、控制器。
在连接具体电路时配合相应脉冲和门电路以达到预期效果。定点原码一位乘法器的底层、顶层的设计都采用原理图设计输入方式,经编译、调试后形成*.bit文件并下载到XCV200可编程逻辑芯片中,经硬件测试验证设计的正确性。
•伟福COP2000型计算机组成原理实验仪
COP2000计算机组成原理实验系统由实验平台、开关电源、软件三大部分组成实验平台上有寄存器组R0-R3、运算单元、累加器A、暂存器B、直通/左移/右移单元、地址寄存器、程序计数器、堆栈、中断源、输入/输出单元、存储器单元、微地址寄存器、指令寄存器、微程序控制器、组合逻辑控制器、扩展座、总线插孔区、微动开关/指示灯、逻辑笔、脉冲源、20个按键、字符式LCD、RS232口。
COP2000计算机组成原理实验系统各单元部件都以计算机结构模型布局,清晰明了,系统在实验时即使不借助PC 机,也可实时监控数据流状态及正确与否, 实验系统的软硬件对用户的实验设计具有完全的开放特性,系统提供了微程序控制器和组合逻辑控制器两种控制器方式, 系统还支持手动方式、联机方式、模拟方式三种工作方式,系统具备完善的寻址方式、指令系统和强大的模拟调试功能。
•Xilinx foundation f3.1设计软件
Xilinx foundation f3.1是Xilinx公司的可编程期间开发工具,该平台(如图1.2所示)功能强大,主要用于百万逻辑门设计。该系统由设计入口工具、设计实现工具、设计验证工具三大部分组成。
设计入口工具包括原理图编辑器、有限状态机编辑器、硬件描述语言(HDL)编辑器、LogiBLOX模块生成器、Xilinx内核生成器等软件。其功能是:接收各种图形或文字的设计输入,并最终生成网络表文件。设计实现工具包括流程引擎、限制编辑器、基片规划器、FPGA编辑器、FPGA写入器等软件。设计实现工具用于将网络表转化为配置比特流,并下载到器件。设计验证工具包括功能和时序仿真器、静态时序分析器等,可用来对设计中的逻辑关系及输出结果进行检验,并详尽分析各个时序限制的满足情况。
图 1.2 Xilinx foundation f3.1设计平台
•COP2000集成调试软件
COP2000 集成开发环境是为COP2000 实验仪与PC 机相连进行高层次实验的配套软件,它通过实验仪的串行接口和PC 机的串行接口相连,提供汇编、反汇编、编辑、修改指令、文件传送、调试FPGA 实验等功能,该软件在Windows 下运行。
图 1.3 COP2000计算机组成原理集成调试软件
按照课设题目要求及逻辑电路图,先设计出电路的具体模块图,如图2.1所示,共有五大模块。1、被乘数:是用来存放被乘数的寄存器,不需要移位功能,用普通的寄存器即可;2、乘数:应和部分积模块有基本一样的功能,有并行输入输出和串行输入输出功能;3、部分积:按照原码一位乘原理,部分积要求是具有并行输入输出和串行输入输出及其带有异步清零端的移位寄存器;4、加法器:8位数据位,再加上2个符号位共10位,所以要求本加法器能实现对10位二进制数相加;5、控制器:实现电路的自动停止功能,可用计数器来完成,当经过8个脉冲后,计数器进位输出为1,然后将进位和总的CLK进行或运算来实现消除脉冲,进而实现电路停止工作。
图2.1 总体方案设计框图
顶层方案图实现原码一位乘的逻辑功能,采用原理图设计输入方式完成,电路实现基于XCV200可编程逻辑芯片。在完成原理图的功能设计后,把输入/输出信号安排到XCV200指定的引脚上去,实现芯片的引脚锁定。
顶层图形文件的设计实体主要由被乘数寄存器(U26)、乘数寄存器(U31)、部分积寄存器(U30)、加法器(U32)、控制器(U27、U28)等模块组装而成的一个完整的可编程逻辑芯片U1。而以上顶层图形文件的设计可利用Xilinx foundation f3.1中逻辑器件实现,顶层图形文件结构如图2.2所示。
图2.2 定点原码一位乘法器的设计图形文件结构
2.1.2.1器件的选择
由于硬件设计环境是基于伟福COP2000型计算机组成原理实验仪和XCV200实验板,故采用的目标芯片为Xilinx XCV200可编程逻辑芯片。
2.1.2.1引脚锁定
把顶层图形文件中的输入/输出信号安排到Xilinx XCV200芯片指定的引脚上去,实现芯片的引脚锁定,各信号及Xilinx XCV200芯片引脚对应关系如表2.1所示。
表2.1 信号和芯片引脚对应关系
图形文件中的输入/输出信号 | XCV200芯片引脚信号 |
CLK | P213 |
S | P41 |
A0 | P103 |
A1 | P102 |
A2 | P101 |
A3 | P100 |
A4 | P97 |
A5 | P96 |
A6 | P95 |
A7 | P94 |
A8 | P87 |
A9 | P86 |
B0 | P73 |
B1 | P72 |
B2 | P71 |
B3 | P70 |
B4 | P66 |
B5 | P65 |
B6 | P64 |
B7 | P63 |
B8 | P47 |
B9 | P48 |
C8 | P110 |
C7 | P224 |
C6 | P228 |
C5 | P229 |
C4 | P230 |
C3 | P231 |
C2 | P232 |
C1 | P234 |
C0 | P235 |
D7 | P215 |
D6 | P216 |
D5 | P217 |
D4 | P219 |
D3 | P220 |
D2 | P221 |
D1 | P222 |
D0 | P223 |
利用Xilinx foundation f3.1的原理图编辑器对顶层图形文件进行编译,并最终生成网络表文件,利用设计实现工具经综合、优化、适配,生成可供时序仿真的文件和器件下载编程文件。
定点原码一位乘法器的底层设计包括被乘数寄存器,乘数寄存器,部分积寄存器,加法器和控制器五大模块,其中被乘数和部分积寄存器是移位寄存器,除了以上五大模块以外,还有符号转化芯片以及符号运算部分,以下介绍各个模块的具体设计方案与实现。
被乘数寄存器部分将实现被乘数的并入,将其与乘数的最后一位分别相与,得到的即是要与部分积相加的X或0。从乘法设计的原理图可以看出被乘数并不需要移位功能,所以只需具用普通的寄存器的功能即可,选用上升沿的D触发器,在第一个上升沿将数据打入,并不在变化。
图2.3 被乘数寄存器芯片外观
2.3.1.3电路图
被乘数寄存器芯片内部电路显然用10个D触发器就可实现,每个触发器的CLK并联接在一起,输入端作为数据输入端,输入数据后会第一个上升沿到时把数据打入,因为被乘数的每一位要和乘数的最低一位进行与运算,所以可以在电路中加入10个与门其中每个与门的一端与被乘数的输出端相连,另一端接在一起并引出,作为和乘数最低位的连接端,其中寄存器部分具体实现如下:
图2.4 被乘数寄存器芯片内部电路图
图2.5 被乘数寄存器仿真
仿真图说明:
从以上波形中可看出,输入数据为0001111010,当第一个上升沿到达时,数据被打入,并且不随以后的波形而改变,输出数据为0001111010。所以该器件设计成功。
乘数寄存器部分将实现乘数的并入与右移。本乘数寄存器是在普通移位寄存器的基础上改造而来的,即在基本寄存器上面加入了用并行输入和串行输入的片选端S,当S=1时并行输入,把乘数输入到乘数寄存器里,并屏蔽串行移位功能;S=0时串行移位,将部分积低位移出的数据及乘数部分向右移位,并屏蔽并行输入功能;D9-D0为数据输入端,Q9-Q0为数据输出端,A0为串行输入端,来接受部分积低位移出的数据,以达到移位功能。
图2.6 乘数寄存器芯片外观
2.3.2.3电路图
按照整体模块设计时的思想,乘数寄存器具有并行输入输出和串行输入输出功能,我们可在被乘数寄存器上面加一部分电路来实现,它同样由10个D触发器组成,每个触发器的输入端不是直接接在数据输入端上,而是通过片选电路接入,同时每个D触发器的输出端也是通过片选电路接到下一个触发器的输入端,这样就可以通过片选段S的不同(0或1)来选择具体的操作,当S=1时并行输入,并屏蔽串行移位功能;S=0时串行移位,并屏蔽并行输入功能。具体电路图如下:
图2.7 乘数寄存器芯片内部电路图
图2.8 乘数寄存器仿真
仿真图说明:
从以上波形中数据可以看出,输入数据为1001110011该器件清零,当第一个上升沿到来时S=1,数据被打入,当第二个上升沿到来时S=0,A0始终为1,此时产生移位。所以该器件设计成功。
部分积寄存器部分的设计是乘法电路中比较重要的一块,它和乘数的功能基本一样,只是在D触发器的选择上稍有不同,部分积寄存器选用的是有异步清零端CLR的D触发器,并且为高电平清零,其余端和乘数一样,当S=1时并行输入,并屏蔽串行移位功能;S=0时串行移位(右移),并屏蔽并行输入功能。D9-D0为数据输入端,Q9-Q0为数据输出端,A将低位移出给乘数寄存器。
图2.9 部分积寄存器芯片外观
2.3.3.3电路图
通过和乘数寄存器比较可以发现,两者的不同点就是在D触发器的选择上,部分积是用具有异步清零的D触发器(高电平有效),并将其清零端CLR作为一个输入端。A为能起到保存最低一位数据功能的D触发器,防止乘数脉冲和部分积脉冲上升沿到来存在的时间差而引起的不能移入的情况,此D触发器的输出端接入乘数的高位串行输入端,并实现移位,又因为部分积不需要串行输入数据,所以串行输入端接地。当S=1时并行输入,并屏蔽串行移位功能;S=0时串行移位(右移),并屏蔽并行输入功能。具体电路实现如下图:
图2.10 部分积寄存器芯片内部电路图
2.3.3.4 功能仿真
图2.11 部分积寄存器仿真
仿真图说明:
从波形可以看出输入数据为1100011001,CLR在前两个上升沿为高电平,起清零作用,所以输出端均为0,到第三个上升沿到时CLR已是低电平,S=1,数据被打入,此后S=0,电路实现移位。A为能起到保存最低一位数据功能的D触发器,防止乘数脉冲和部分积脉冲上升沿到来存在的时间差而引起的不能移入的情况,此D触发器的输出端接入乘数的高位串行输入端,并实现移位,所以此电路设计成功。
该加法器模块实现的是两个八位二进制数的相加,采用两个原有的XCV200可编程逻辑芯片加法器件ADD4实现电路中的加法,由于要求是8位数据,加上两个符号位共10位数据,所以用两片ADD4加法器芯片实现前8位的数据相加,第三片AAD4加法器芯片的两个低位实现后2位的数据相加,高位分别接地,输出端也只取其低两位。
图2.12 加法器芯片外观
2.3.4.3电路图
采用两个原有的可编程逻辑芯片加法器件ADD4实现电路中的加法,由于要求是8位数据,加上两个符号位共10位数据,所以需要3片ADD4加法器芯片。在该电路中用两片ADD4加法器芯片实现前8位的数据相加,第三片AAD4加法器芯片的两个低位实现后2位的数据相加,高位分别接地,输出端也只取其低两位。
图2.13 加法器芯片内部电路图
2.3.4.4 功能仿真
图2.14 加法器仿真
仿真图说明:
A9-A0和B9-B0是输入数据,因为题目要求是原码一位乘,所以其加法器只参与两个数据的绝对值运算,即符号位均为0,输入数据分别为0011110011和1100100100,C9-C0为输出,输出数据为1111001111,可以看出结果正确无误,所以电路设计成功。
控制器由波形发生器和计数器组成,波形发生器实现用输入的CLK和S波形产生乘数寄存器S端其CLK波形,计数器实现当乘数寄存器到第九个上升沿到来时计数进位输出为1,并保持不变,其中其CLK和乘数S脉冲相同,将计数器的进位输出端CO和输入的CLK一同接入或门输出作为所有部件的CLK脉冲,当进位输出为1时,CO和CLK进行或运算,结果输出为1,即脉冲恒为1,电路停止工作,此时输出结果。
图2.15 总控制器芯片外观
2.3.5.3电路图
按照整体设计思路,需要输入两个脉冲:CLK和S,作为部分积的时钟信号和S片选端脉冲,同时也是被乘数的时钟脉冲,但乘数的时钟脉冲(CLKX)和S(SX)端脉冲却要通过这两个波形产生(具体形状见底下功能仿真中的波形发生器波形),然后通过这8个波形使总电路正常工作,其中乘数只在首次进行数据写入,之后只进行移位而不再写入数据,所以乘数的S片选端只在刚开始为高电平,之后应该全为低电平,所以其波形可通过一个D触发器来实现,其D输入端接高电平,并将输入波形作为器脉冲源,当地一个上升沿到时,其输出端变成高电平,并不在变化,而本电路中要得到相反的结果,可在其输出端加非门来实现,但要通过CLK和S产生CLKX波形,通过比较CLKX和CLK波形可以发现,CLKX刚好是CLK两倍波形,所以可把S取反之后加到一个D触发器的输入端,然后将S作为其脉冲源即可,具体电路如图2.16所示。
图2.16 波形发生器电路图
对计数器部分可直接用书上的计数器,如图2.17所示,其以S脉冲作为脉冲源,4个JK触发器最大可接成16进制计数器,但在本电路中只需8进制计数器即可,即当S走到第9个脉冲时进位输出为1并保持不变,所以当四个输出端输出数据为1001是进位输出为1,这可通过一个四输入的与门实现,其中两个输入端为低电平输入,为了保存进位输出可将其进位输出端作为一个D触发器的脉冲,D输入端接高电平,一旦进位输出为1D触发器被触发并输出1,具体电路如图2.17所示。
图2.17 计数器电路图
2.3.5.4 功能仿真
图2.18 波形发生器仿真
图2.19 计数器仿真
仿真图说明:
从上面的两个波形可以看出,在波形发生器部分,输入CLK和S,输出四个波形:BUFENJIS(部分积S端脉冲),SX(乘数S端的脉冲),BUFENJICLK(部分积CLK脉冲),CLKX(乘数CLK脉冲);在计数器部分当第九个上升沿到来时候其进位输出为一,并不在变化,电路设计成功。
除了上述的五大模块以外,整个电路也包含其他部件,具体有符号转化部件和符号位异或运算,符号位转换部分是把输入的数据转换成其绝对值,即无论两个符号位是11还是00,则通过符号转换部件后输出均为00。
图2.20 芯片外观
2.3.6.3电路图
图2.21 芯片内部电路图
2.3.6.4 功能仿真
图2.22 仿真
仿真图说明:
由该仿真图得输入数据为01,输出数据为00,输出结果正确,电路设计成功。
仿真测试试主要验证设计电路逻辑功能、时序的正确性,本次设计为定点原码一位乘法器,设计完成主要采用功能仿真方法对设计的电路进行仿真从而验证其电路功能的正确性。
(1)建立仿真波形文件及仿真信号选择
功能仿真时,首先建立仿真波形文件,输入仿真信号为CLK和S,数据输入A9-A0和B9-B0,符号位输入为A9A8和B9B8,结果输出C8-D0,C8为符号位。
(2)功能仿真结果与分析
图2.23 总电路仿真波形
图2.24 总电路输出结果
仿真图说明:
从波形可以清楚的看出输入和输出结果,在本次测试中输入的两个数为第一章乘法说明举例的两个数:0000110000和1111001000,从图2.23、2.24可以看到输出结果,C8为符号位,从上往下读运算结果为10010011100000000,经过对比正确无误,即说明总的电路设计成功,符合课设题目的基本要求。
利用COP2000仿真软件的编程下载功能,将得到.bit文件下载到XCV200实验板的XCV200可编程逻辑芯片中。
利用XCV200实验板进行硬件功能测试。定点原码一位乘法器的输入数据通过XCV200实验板的输入开关实现,输出数据通过XCV200实验板的LED指示灯实现,其对应关系如表3.1所示。
表3.1 XCV200实验板信号对应关系
XCV200芯片引脚信号 | XCV200实验板 |
P213 | CLK |
P41 | K4:0 |
P103 | K0:0 |
P102 | K0:1 |
P101 | K0:2 |
P100 | K0:3 |
P97 | K0:4 |
P96 | K0:5 |
P95 | K0:6 |
P94 | K0:7 |
P87 | K1:0 |
P86 | K1:1 |
P73 | K2:0 |
P72 | K2:1 |
P71 | K2:2 |
P70 | K2:3 |
P66 | K2:4 |
P65 | K2:5 |
P64 | K2:6 |
P63 | K2:7 |
P47 | K3:0 |
P48 | K3:1 |
P110 | A0 |
P224 | S1 |
P228 | S1 |
P229 | S1 |
P230 | S1 |
P231 | S1 |
P232 | S1 |
P234 | S1 |
P235 | S1 |
P215 | S0 |
P216 | S0 |
P217 | S0 |
P219 | S0 |
P220 | S0 |
P221 | S0 |
P222 | S0 |
P223 | S0 |
利用图2.23及2.24中的输入参数作为输入数据,逐个测试输出结果,即用XCV200实验板的开关K0、K1、K2、K3控制数据输入,K5控制移位,同时观察数码显示管和发光二极管显示结果,得到如图3.1的测试结果。
图3.1 硬件测试结果图
对图2.24与图3.1的内容进行对比,可以看出硬件测试结果是正确的,说明电路设计完全正确。
[1] 曹昕燕. EDA技术实验与课程设计[M].北京:清华大学出版社,2006
[2] 范延滨.微型计算机系统原理、接口与EDA设计技术[M].北京:北京邮电大学出版社,2006
[3] 唐朔飞.计算机组成原理(第二版)[M].北京:高等教育出版社,2008
[4]李景华. 可编程程逻辑器件与EDA技术[M].北京:东北大学出版社,2001
[5] 王爱英.计算机组成与结构(第4版)[M].北京:清华大学出版社,2006
[6] 王冠.Verilog HDL与数字电路设计[M].北京:机械工业出版社,2005
[7] 江国强.EAD技术习题与实验[M].北京:电子工业出版社,2005
[8] 杜建国.Verilog HDL硬件描述语言[M].北京:国防工业出版社,2004
课程设计总结: 通过此次组成原理课程设计,让我懂得了学习要理论联系实践,在实践中能学到很多书本上没有的东西。 这次课程设计,我遇到了很多问题,刚开始拿到题目的时候觉得很熟悉但是不知道从何下手,后来经过查资料和老师的帮助才有了思路。但很快又有了新的问题,在各个模块设计好了之后,在仿真过程中,有几个模块因为连线问题仿真结果出错,经过整改后整个仿真成功通过。在编译和芯片下载时又遇到了一些问题,先是D触发器使用出错,之后是控制端S很明显和输入的CLK脉冲不同,最后经过大量的尝试及老师的帮助解决了这个问题,虽然在过程中也有过艰辛,但最后能尝到成功的喜悦也觉得很值得! 通过这次实验设计,使我了解了许多计算机组成原理知识,加深了我对定点原码一位乘法器的理解,将理论知识很好的应用在实践中,同时通过本次实验也初步掌握了编程语言及原理图实现芯片生成的功能。在不断的研究复习中也掌握了Xilinx foundation f3.1设计软件和COP2000集成调试软件的使用及相关知识,能独立的制作和生成所需要的逻辑部件。在加深理论知识的同时,个人实践能力及动手能力得到提高。更重要的是知道了自己在设计方面的不足和所需要学习的知识,在这次设计中指导老师给予了我很大的帮助,在此表示感谢!并且在以后的学习和实验中会更加努力的学习,弥补自己的不足。 | |
指导教师评语: 指导教师(签字): 年 月 日 | |
课程设计成绩 | |
¥29.8
¥9.9
¥59.8