定点原码一位乘法器沈阳航空工业学院课程设计报告课程设计名称:计算机组成原理课程设计课程设计题目:定点原码一位乘法器的设计院(系):计算机学院专业:计算机科学与技术班级:学号:姓名:指导教师:完成日期:目录第1章总体设计方案 (1)1.1设计原理 (1)1.2设计环境 (2)第2章详细设计方案 (4)2.1顶层方案图的设计与实现 (4)2.1.1创建顶层图形设计文件 (4)2.1.2器件的选择与引脚锁定 (5)2.2第二层模块的设计与实现 (7)2.3功能模块的设计与实现 (7)2.3.1移位模块的设计与实现 (7)2.3.2 乘数移位模块的设计与实现 (10)2.3.3选择模块的设计与实现 (12)2.3.4 控制模块的设计与实现 (13)2.3.5 其他模块的设计与实现 (15)2.4仿真调试 (16)第3章编程下载与硬件测试 (19)3.1编程下载 (19)3.2硬件测试及结果分析 (19)参考文献 (20)附录(电路原理图) (21)第1章总体设计方案1.1 设计原理原码一位乘,两个原码数相乘,其乘积的符号为相乘两数符号的异或值,数值则为两数绝对值之积。
例:X=0.1100,Y=0.1110,计算乘积X*Y。
0.1100* 0.111000001100110011000.10101000在计算时,逐次按乘数每1位上的值是1还是0,决定相加数取被乘数的值还是取零值,而且相加数逐次向左偏移1位,最后一起求积。
由于在计算机内多个数据一般不能同时相加,一次加法操作只能求出两数之和,因此每求得一个相加数,就与上次部分积相加每次计算时,相加数逐次向左偏移一位,由于最后的乘积位数是乘数(被乘数)的两倍,因此加法器也需增到两倍。
部分积右移时,乘数寄存器同时右移一位,所以用乘数寄存器的最低位来控制相加数取被乘数或零,同时乘数寄存器接收部分积右移出来的一位,完成运算后,部分积寄存器保存乘积的高位部分,乘数寄存器中保存乘积的低位部分。
根据人工算法可以知道,原码一位乘法的整体设计应包括乘数寄存器,被乘数寄存器,移位电路,控制器,部分积五大模块,包含一个输入、输出、控制器模块,并作为顶层设计,以上五大模块作为底层设计,采用硬件器件设计实现。
因此,可以得出以下原理框图设计如图1.1所示:图1.1 原码一位乘的逻辑电路框图如上逻辑框图1.1中所示,其中B为被乘数寄存器,用来存放被乘数,C为乘数寄存器,用来存放乘数并且移位,A为部分积寄存器,存放每次相加并移位后的数据,ALU加法器实现加法操作,移位电路用来对相加后的数据作移位处理,计数器控制移位次数和输出结果。
1.2 设计环境·硬件环境:伟福COP2000型计算机组成原理实验仪、XCV200实验板、微机;·EDA环境:Foundation f3.1设计软件。
该设计由设计入口工具,设计实现工具,验证工具三大部分组成.入口工具包括原理图设计,有限状态编辑器,硬件描述语言编辑器等。
第2章详细设计方案2.1 顶层方案图的设计与实现顶层方案图实现原码一位乘的逻辑功能,采用原理图设计输入方式完成,电路实现基于XCV200可编程逻辑芯片。
在完成原理图的功能设计后,把输入/输出信号安排到XCV200指定的引脚上去,实现芯片的引脚锁定。
2.1.1创建顶层图形设计文件顶层图形文件由一个运算器模块组成,乘数X[7:0],被乘数Y[7:0],符号位XA,YA,脉冲CLK,清零端CLR,打入端LOAD,结果OUT[16:0],顶层图设计如下:图2.1 原码一位乘顶层图形文件结构2.1.2器件的选择与引脚锁定(1)器件的选择由于硬件设计环境是基于伟福COP2000型计算机组成原理实验仪和XCV200实验板,故采用的目标芯片为Xlinx XCV200可编程逻辑芯片。
另外,在这次的设计中还有的涉及Verilog语言编程。
(2)引脚锁定把顶层图形文件中的输入/输出信号安排到Xlinx XCV200芯片指定的引脚上去,实现芯片的引脚锁定,各信号及Xlinx XCV200芯片引脚对应关系如表2.1所示。
表2.1 信号和芯片引脚对应关系2.2第二层模块的设计与实现根据以上原理设计分析与大概框图,可得出以下的第二层模块的设计,其中各大模块实现各部分功能。
图2.2 第二层模块框图2.3 功能模块的设计与实现根据第二层模块设计可知,整体设计由乘数寄存器,被乘数寄存器,移位电路,控制器,部分积五大模块,以下介绍各个模块的具体实现。
2.3.1移位模块的设计与实现为了简化设计,采用了Verilog语言设计,用语言实现移位功能,XX[7:0]表示输入,CO表示加法器的进位,CE表示使能端,CLR表示清零端,YY[7:0]表示移位后的输出,CI标记移出去的那一位,其设计过程如下。
(1)创建Verilog源文件module YIWEIDIANLU (YY, XX, CE, CO,CI,CLR) ;output [7:0]YY ;reg[7:0]YY ;input [7:0]XX ;input CE ;input CLR ;input CO;output CI;reg CI;always@(CLR)beginif(CLR) YY<=0;elsebeginYY[7]<=CO;YY[6]<=XX[7];YY[5]<=XX[6];YY[4]<=XX[5];YY[3]<=XX[4];YY[2]<=XX[3];YY[1]<=XX[2];YY[0]<=XX[1];CI<=XX[0];endendendmodule(2)创建元件图形符号图形符号如下:(3)功能仿真对创建的移位器件YIWEIDIANLU进行功能仿真,验证其功能的正确性。
可用Xilinx Foundation f3.1编译器的Simulator模块实现。
功能仿真图如下:表2.3.1 移位器件功能表描述XX[7:0]YY[7:0]CI CO CE CLR0F 07 1 0 1 00F 87 1 1 1 00F 00 0 0 1 1 从以上表中数据可以看出,当CLR为1时,该器件清零,输出YY[7:0]为零,为零时,有移位功能,CO为移位后高位的补充值。
CI标记移出的那一位,用来送往乘数寄存器中移位的高位补充,CE为此器件的使能端,保证该器件工作,该器件成功创建。
2.3.2 乘数移位模块的设计与实现为了标记乘数移位前的最低位,设计CHENG寄存器,输入分别用DIN[7:0]表示,移位后结果用Q[7:0]表示,高位补充用SIN表示,移出的一位用KIN 表示,其设计过程如下。
(1)创建Verilog源文件module CHENG (LOAD, SIN, DIN, CLK, CLR, Q, KIN) ;input LOAD ;input SIN ;input [7:0] DIN ;input CLK ;input CLR ;output [7:0] Q ;reg [7:0] Q ;output KIN ;reg KIN ;always@(posedge CLK or posedge CLR)beginif(CLR) Q <=0;else if(LOAD) Q<=DIN;elsebeginKIN<=Q[0];Q <= Q>>1;Q[7]<=SIN;endendendmodule(2)创建元件图形符号元件符号如下:(3)功能仿真对创建的乘数移位寄存器(CHENG)进行功能仿真,验证其功能的正确性,可用Xilinx Foundation f3.1编译器的Simulator模块实现。
功能仿真图如下:表2.3.2 乘数移位寄存器功能表描述DIN SIN LOAD CLK CLR KIN Q709 0 1 上升沿 1 1 0009 1 1 上升沿0 1 0909 0 0 上升沿0 1 0409 1 0 上升沿0 1 84从以上表中数据可以看出,当CLR为1时,该器件清零,输出Q[7:0]为零,CLR为零时,有移位功能,SIN为移位后高位的补充值。
KIN标记移出的那一位,用来判断下次加法加零还是被乘数,CLK上升沿有效,保证该器件工作,该器件成功创建。
2.3.3选择模块的设计与实现选择器XUAN2的输入分别用0,B[7:0]表示,选择后结果输出用QOUT[7:0]表示,选择信号用SO表示,其设计过程如下。
(1)创建Verilog源文件module XUAN2 (B, SO, QOUT) ;input [7:0] B ;input SO ;output [7:0] QOUT ;reg [7:0] QOUT ;always@(SO )beginif(SO) QOUT<=B;else QOUT<=0;endendmodule(2)创建元件图形符号元件图形符号:(3)功能仿真对创建的选择器元件(XUAN2)进行功能仿真,验证其功能的正确性,可用Xilinx Foundation f3.1编译器的Simulator模块实现。
功能仿真图如下:表2.3.3 选择器功能表描述B[7:0] SO QOUT[7:0]0E 1 0E0E 0 00 从以上表中数据可以看出,当选择信号为1时,该器件输出QOUT[7:0]为输入值B[7:0],当选择信号为0时,该器件输出00,由功能表知,该器件成功创建。
2.3.4 控制模块的设计与实现设计为6位原码一位乘,计数器为模9计数器,上升沿计数,有清零功能,其设计过程如下。
(1)创建Verilog源文件module JISHU (CLK, CLR, QOUT, CO) ;input CLK ;input CLR ;output [3:0] QOUT ;reg [3:0] QOUT ;output CO ;reg CO ;always @ (posedge CLK or posedge CLR) beginif(CLR)beginQOUT<=0;CO<=1;endelse if(QOUT==9)beginQOUT<=0;CO<=1;endelsebeginQOUT<=QOUT+1;CO<=0;endendendmodule(2)创建元件图形符号元件图形符号如下:(3)功能仿真对创建的计数器元件(JISHU)进行功能仿真,验证其功能的正确性,可用Xilinx Foundation f3.1编译器的Simulator模块实现。
功能仿真图如下:表2.3.4 计数器功能表描述CLK CLR CO QOUT(次数)上升沿有效 1 0 0~8上升沿有效0 1 9 从以上表中数据可以看出,当脉冲信号为上升沿时,该器件输出QOUT[7:0]记录次数从0到9,当记满9次时,该器件CO输出1,其余CO输出都为0,由功能表知,该器件是一个模9的计数器,成功创建。