第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为部分积右移一位后数据输出端。
图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芯片引脚对应关系如下表: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 herealways (posedge CLK)beginif(LOAD)XOUT=X;end// add your code hereendmodule被乘数寄存器模块功能仿真见图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 herealways (posedge CLK)beginif(LOAD)beginYOUT=Y;LOWBIT=YOUT[0];endelsebeginYOUT =YOUT>>1;YOUT[7]=INPUT;LOWBIT=YOUT[0];endend// add your code hereendmodule乘数寄存器模块功能仿真见图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 herealways (posedge CLK)beginOUT[7:0]=IN[7:0];OUT[7]=HIGH;end// add your code hereendmodule部分积寄存器模块功能仿真见图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 herealways (posedge CLKI or posedge CLR)beginif(CLR)begin;temp=0;CLKO=1;endelsebeginif(temp==7) CLKO=0;elsetemp=temp+1;endend// add your code hereendmodule计数器模块功能仿真见图2.342图2.342 计数器模块功能仿真当计数脉冲达到8的时候,脉冲输出恒为低电平脉冲,符合设计要求,能达到控制作用。