第1章 总体设计方案
1.1 设计原理
原码一位乘乘法器中用三个寄存器X,Y和BFJ分别存放被乘数,乘数和部分积。乘法运算开始时, BFJ寄存器被清零,作为初始部分积。被乘数放在X寄存器中,乘数放在Y寄存器中。实现部分积和被乘数相加是通过X送加法器和Y送加法器,在加法器中完成的。加法器的输出经过移位电路向右移一位送入BFJ寄存器中。Y寄存器是用移位寄存器实现的,其最低位用作Y送加法器的控制命令。因为原码一位乘是通过乘数的最低位是1还是0来确定加数的,当乘数的最后一位为1的时候,部分积加上被乘数,当乘数的最后一位为0的时候,部分积加上0。加法器最低一位的值,在右移的过程中将被移入Y寄存器的最高数值位,这样就使积的低位部分被保存在Y寄存器中,最开始的乘数在逐位右移的过程中不断丢失,直到移位结束。乘法运算完成以后BFJ寄存器中保存的数值是乘积的高位部分, Y寄存器即乘数寄存器中保存乘积的低位部分。
1.2设计思路
实现原码一位乘乘法的逻辑框图如图1.2所示, BFJ存放部分积, X存放被乘数,Y存放乘数。
一个实现一位原码乘法运算的运算器可以由一个被乘数寄存器,一个乘数寄存器,一个部分积寄存器,一个加法器,一个计数器,二选一选择电路以及移位电路七个模块构成。顶层的乘法器模块采用原理图设计输入方式。
被乘数寄存器模块中X为被乘数输入端,LOAD为数据打入电平,CLK为输入脉冲,XOUT为数据输出端口。
乘数寄存器模块中Y为乘数输入端,LOAD为数据打入电平,CLK位输入脉冲,INPUT为部分积最低位输入端,YOUT为数据输出端口,LOWBIT为数乘数最低位输出端。
部分积寄存器中IN为部分积右移一位以后的数据输入端,CLR为清零电平,CLK为输入脉冲,HIGH为加法器的进位输入端,OUT为部分积右移一位后数据输
出端。
移位电路 … ALU/2-〉BFJ Y 乘数 ALU 加法器 Y/2->Y BFJ->ALU X->ALU BFJ 部分积 X 被乘数 计数器 Cd
图1.2实现原码一位乘法的逻辑电路框图
计数器模块中CLR为清零端,CLKI为输入脉冲,CLKO为脉冲输出。 二选一选择电路中IN为被乘数输入端口,CTR为控制信号输入。OUT为数据输出。
二选一选择电路模块用原理图输入方式,被乘数寄存器,乘数寄存器,部分积极寄存器和计数器模块采用verilog HDL语言设计输入方式。
首先,单独调试仿真每个模块,确定在没有错误以后,再对整个运算器模块进行仿真。在没有错误的前提下,生成furui.bit文件下载到XCV200可编程逻辑芯片中经硬件测试验证运算结果。 1.3 设计环境
·硬件环境:伟福COP2000型计算机组成原理实验仪、XCV200实验板、微机。
·EDA环境:Foundation 3.1设计软件。
第二章详细设计方案
2.1 顶层方案图的设计与实现
顶层方案图实现原码一位乘法运算的逻辑功能,采用原理图设计输入方式完成,电路实现基于XCV200可编程逻辑芯片。完成原理图的功能设计后,把输入/输出信号安排到XCV200指定的引脚上去,实现芯片的引脚锁定。 2.1.1创建顶层图形设计文件
顶层图形文件主要由两个数据输入端,一个脉冲输入端,一个启停控制端,一个数据输出端组成。定点原码一位乘乘法器的顶层原理图见图2.1。 2.1.2器件的选择与引脚锁定 (1)器件的选择
硬件设计环境基于伟福COP2000型计算机组成原理实验仪和XCV200实验板,采用目标芯片为Xlinx XCV200可编程逻辑芯片。 (2)引脚锁定
把顶层图形文件中的输入/输出信号安排到Xlinx XCV200芯片指定的引脚上去,实现芯片的引脚锁定,原理图中各信号及Xlinx XCV200芯片引脚对应关系如下表:
原理图信号 X7 X6 X5 X4 X3 X2 X1 芯片管脚 P94 P95 P96 P97 P100 P101 P102 原理图信号 OUTHIGH7 OUTHIGH6 OUTHIGH5 OUTHIGH4 OUTHIGH3 OUTHIGH2 OUTHIGH1
芯片管脚 P236 P237 P238 P3 P4 P5 P6
X0 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0 CLR P103 P79 P80 P81 P82 P84 P85 P86 P87 P73 OUTHIGH0 OUTLOW7 OUTLOW6 OUTLOW5 OUTLOW4 OUTLOW3 OUTLOW2 OUTLOW1 OUTLOW0 CLK P7 P215 P216 P217 P218 P220 P221 P222 P223 P213 2.2第二层方案图的设计与实现
第二层图形文件主要由两个数据输入端,一个脉冲输入端,一个启停控制端,一个数据输出端以及相对应的被乘数寄存器模块,乘数寄存器模块,部分积寄存器模块,加法器模块,计数器模块,数据选择电路模块以及移位电路模块组成。第二层原理图见图2.2。
计数器模块起控制整个运算过程的作用。实现控制器的功能,其它所有需要脉冲的模块均受计数器即控制器的控制。当控制器的输入端(清零端)为低电平的时候,控制器才启动整个运算过程,只有当控制器的输出出现脉冲的时候,其它需要脉冲的模块才开始工作,当达到需要运算次数后,控制器封锁脉冲。各寄存器保持值不变。
被乘数寄存器模块的功能是实现被乘数寄存,接收来自外部输入数据,提供选择器模块的输入。
乘数寄存器模块的功能是实现乘数的寄存,接收来自外部输入数据,还具有向右移位的功能,将从部分积寄存器传来的数据保存在最高位,同时将乘数的最低位输出作为数据选择器的控制端。也作为最后乘积的低位部分寄存器。
数据选择器模块的功能是实现数据的选择,当从乘数寄存器传来的控制信号为高电平时,输出为被乘数,作为加法器的一个输入,当从乘数寄存器传来的控制信号位低电平时,输出为零,作为加法器的输入。
部分积寄存器模块的功能是寄存从移位电路传过来的数据,作为加法器的输入。
移位电路模块起将部分积移位的作用,同时达到了让所有模块在同一个脉冲下工作脉冲同步的作用,由于用组合逻辑电路形成的移位电路不需要脉冲的打入就能工作,当加法器的输出改变时,移位电路就将移位后的部分积送给了部分积 寄存器,而不需要让部分积先将未移位的部分积打如寄存器,再移位的过程。
图2.1 定点原码一位乘乘法器的顶层原理图
图2.2 定点原码一位乘乘法器的第二层原理图
2.3功能模块的设计与实现
被乘数寄存器模块,乘数寄存器模块,计数器模块,部分积寄存器模块用verilog HDL语言设计输入方式实现。数据选择器模块用原理图设计输入方式实现。
2.3.1被乘数寄存器模块的设计与实现
此模块用Verilog HDL语言输入方式设计,运算位数为8位,实现被乘数的接收及寄存,提供选择器模块的输入。用X总线输入,XOUT总线输出。当输入端LOAD为高电平的时候,被乘数寄存器把总线X的数据打入,当LOAD为低电平的时候,被乘数寄存器保持数据不变。该模块的符号如图2.31。
图2.311 被乘数寄存器的符号 Verilog代码如下:
module JICUNQIX (CLK, X, LOAD, XOUT) ;
input CLK ; input [7:0] X ; input LOAD ; output [7:0] XOUT ; reg [7:0]XOUT;
// add your declarations here always @(posedge CLK) begin
if(LOAD)XOUT=X; end // add your code here
endmodule
被乘数寄存器模块功能仿真见图2.312
图2.312被乘数寄存器模块功能仿真
当脉冲的上升沿到来的时,数据被打入寄存器,符合要求。 2.3.2乘数寄存器模块的设计与实现
此模块用Verilog HDL语言输入方式设计,运算位数为8位,实现乘数的接收及寄存,还具有向右移位的功能。Y总线做为输入,YOUT总线作为输出。当LOAD为高电平的时候,总线Y上的数据被打入乘数寄存器中。当LOAD为低电平的时候,每到来一个脉冲,乘数寄存器向右移动一位,并将从INPUT进入的数据打入最高位,同时将最低位的值赋给输出端LOWBIT。实现乘数寄存和移位。该模块的符号如图2.321。
图2.321乘数寄存器的符号 Verilog代码如下:
module JICUNQIY (LOAD, INPUT, Y, CLK, LOWBIT, YOUT) ;
input LOAD ; input INPUT ; input [7:0] Y ; input CLK ; output LOWBIT ; output [7:0] YOUT ;
reg LOWBIT; reg [7:0]YOUT;
// add your declarations here always @(posedge CLK) begin if(LOAD) begin YOUT=Y; LOWBIT=YOUT[0]; end else begin
YOUT =YOUT>>1; YOUT[7]=INPUT; LOWBIT=YOUT[0]; end end
// add your code here endmodule
乘数寄存器模块功能仿真见图2.322
图2.322乘数寄存器模块功能仿真
LOAD为高电平的时候,数据被打入。以后每个脉冲的上升沿到来是INPUT被打入最高位。
2.3.3部分积寄存器模块的设计与实现
此模块用Verilog HDL语言输入方式设计,运算位数为8位,功能是寄存从移位电路传过来的数据,作为加法器的输入。总线IN作为输入,总线OUT作为输出。当CLR为高电平的时候,部分积寄存器的输出被清零。当CLR为低电平的时候,每到来一个脉冲,就将通过移位电路送过来的值赋给输出端OUT。 该模块的符号如图2.331。
图2.331部分积寄存器的符号 Verilog代码如下:
module JCQBFJ (CLK, CLR, IN, HIGH, OUT) ;
input CLK ; input CLR ; input [7:0] IN ; input HIGH ; output [7:0] OUT ; reg[7:0]OUT;
// add your declarations here always @(posedge CLK) begin
OUT[7:0]=IN[7:0]; OUT[7]=HIGH; end
// add your code here
endmodule
部分积寄存器模块功能仿真见图2.332
图2.332部分积寄存器模块功能仿真
输出数据即为输入数据,符合设计要求。 2.3.4计数器模块的设计与实现
此模块用Verilog HDL语言输入方式设计,起控制整个运算过程的作用。当CLR为高电平的时候,计数器被清零,同时CLKO为高电平。以后每进来一个脉冲,计数器加1,直到加到7,也就是乘数移位次数达到8次的时候,CLKO输出为低电平。该模块的符号如图2.341。
图2.341计数器模块的符号 Verilog代码如下:
module JiShuQi (CLKI, CLR, CLKO) ;
input CLKI ; input CLR ; output CLKO ; reg CLKO; reg [3:0]temp;
// add your declarations here
always @(posedge CLKI or posedge CLR)
begin if(CLR) begin; temp=0; CLKO=1; end else begin
if(temp==7) CLKO=0; else
temp=temp+1; end
end // add your code here
endmodule
计数器模块功能仿真见图2.342
图2.342 计数器模块功能仿真
当计数脉冲达到8的时候,脉冲输出恒为低电平脉冲,符合设计要求,能达到控制作用。
2.3.5二选一选择器模块
此模块用原理图输入方式设计,运算位数为8位,功能是实现数据的选择。总线IN作为输入,总线OUT作为输出。当输入端CTR为高电平的时候,输出OUT为乘数寄存器传进值,当CTR为低电平的时候,输出OUT为0。电路原理图见图2.351。
二选一选择器模块功能仿真见图2.352和图2.353
图2.352 二选一选择器模块功能仿真
当CTR为高电平时,输出为乘数 ,符合要求。
图2.352 二选一选择器模块功能仿真
当CTR为低电平时,输出为0,符合要求。
图2.351 二选一选择电路的原理图
2.4 仿真调试
仿真调试主要验证设计电路逻辑功能、时序的正确性,本设计中主要采用功能仿真方法对设计的电路进行仿真。
(1)建立仿真波形文件及仿真信号选择
功能仿真时,首先选定需要仿真的模块,建立仿真波形文件,选择仿真信号,对选定的输入信号设置参数,实验中为了让运算没有错误,需要对每一个非元件库中提供的模块进行功能仿真。选定的仿真信号和设置的参数图所示。
(2)功能仿真结果与分析
定点原码一位乘乘法器的整体功能仿真见图2.41和2.42。
图2.41
输入被乘数3H,乘数4H,输出为0C,结果正确。
图2.42
输入被乘数5H,乘数4H,输出为14(16进制数),结果正确。
第3章编程下载与硬件测试
3.1 编程下载
利用XilinxFoudation3.1的编程下载功能,将得到的furui.bit文件下载到XCV200实验板的XCV200可编程逻辑芯片中。
3.2 硬件测试及结果分析
由于本人能力有限,该步骤未能完成。
参考文献
[1] 曹昕燕. EDA技术实验与课程设计[M].北京:清华大学出版社,2006 [2] 范延滨.微型计算机系统原理、接口与EDA设计技术[M].北京:北京邮电大学出版社,2006
[3] 王爱英.计算机组成与结构(第4版)[M].北京:清华大学出版社,2006
[4]王金明 杨吉斌.数字系统设计与verilog HDL 北京:电子工业出版社 [5]侯建军.数字逻辑与系统解题指导和Foundation操作指南 北京 2001 中国铁道出版社
[6]王冠 黄熙 王鹰.Verilog HDL与数字电路设计 机械工业出版社。
[7]范延滨.微型计算机系统原理、接口与EDA设计技术[M].北京:北京邮电大学出版社,2006
课程设计总结: 主要从以下几方面总结: 1.设计过程中出现的问题及采用的解决方法; 2.设计达到的目的; 3.感受。 这次设计题目的原理难度不大,但对于基础不是很好的我来说,还是有一定难度的。所以在实现的过程中还是出现了很多问题。最初做二选一选择器模块时用的是VerilogDHL语言,但是由于刚刚接触该语言,掌握的不是很到位,所以并没有成功的实现预想的功能。后来在老师的指导下,改用了组合逻辑电路,完成了实验的仿真调试。但是由于本人的基础知识掌握的并不深刻,能力有限,最终并未完成编程下载和硬件测试,这也是本次设计的最大遗憾。 通过本次实验,我学到了很多重要的东西。首先是学到了EDA设计的基本方法及其思想;其次,培养了我查阅资料的能力;最后,在实验的整个过程中,我的动手能力得到了一定程度的提高。 指导教师评语: 指导教师(签字): 年 月 日 课程设计成绩
因篇幅问题不能全部显示,请点此查看更多更全内容