原码一位乘法器的设计

  • 格式:doc
  • 大小:212.00 KB
  • 文档页数:20

`

Word文档 第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为部分积右移一位后数

`

Word文档 据输出端。

图1.2实现原码一位乘法的逻辑电路框图

计数器模块中CLR为清零端,CLKI为输入脉冲,CLKO为脉冲输出。

二选一选择电路中IN为被乘数输入端口,CTR为控制信号输入。OUT为数据输出。

二选一选择电路模块用原理图输入方式,被乘数寄存器,乘数寄存器,部分积极寄存器和计数器模块采用verilog HDL语言设计输入方式。

首先,单独调试仿真每个模块,确定在没有错误以后,再对整个运算器模块进行仿真。在没有错误的前提下,生成furui.bit文件下载到XCV200可编程逻辑芯片中经硬件测试验证运算结果。

1.3 设计环境

·硬件环境:伟福COP2000型计算机组成原理实验仪、XCV200实验板、微机。

·EDA环境:Foundation 3.1设计软件。

… ALU/2-〉BFJ

Cd Y/2->Y

X->ALU BFJ->ALU 移位电路

ALU 加法器 Y 乘数

BFJ 部分积 计数器

X 被乘数

`

Word文档

第二章详细设计方案

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

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

2.1.1创建顶层图形设计文件

顶层图形文件主要由两个数据输入端,一个脉冲输入端,一个启停控制端,一个数据输出端组成。定点原码一位乘乘法器的顶层原理图见图2.1。

2.1.2器件的选择与引脚锁定

(1)器件的选择

硬件设计环境基于伟福COP2000型计算机组成原理实验仪和XCV200实验板,采用目标芯片为Xlinx XCV200可编程逻辑芯片。

(2)引脚锁定

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

原理图信号 芯片管脚 原理图信号 芯片管脚

X7 P94 OUTHIGH7 P236

X6 P95 OUTHIGH6 P237

X5 P96 OUTHIGH5 P238

X4 P97 OUTHIGH4 P3

X3 P100 OUTHIGH3 P4

X2 P101 OUTHIGH2 P5

X1 P102 OUTHIGH1 P6

`

Word文档 X0 P103 OUTHIGH0 P7

Y7 P79 OUTLOW7 P215

Y6 P80 OUTLOW6 P216

Y5 P81 OUTLOW5 P217

Y4 P82 OUTLOW4 P218

Y3 P84 OUTLOW3 P220

Y2 P85 OUTLOW2 P221

Y1 P86 OUTLOW1 P222

Y0 P87 OUTLOW0 P223

CLR P73 CLK P213

2.2第二层方案图的设计与实现

第二层图形文件主要由两个数据输入端,一个脉冲输入端,一个启停控制端,一个数据输出端以及相对应的被乘数寄存器模块,乘数寄存器模块,部分积寄存器模块,加法器模块,计数器模块,数据选择电路模块以及移位电路模块组成。第二层原理图见图2.2。

计数器模块起控制整个运算过程的作用。实现控制器的功能,其它所有需要脉冲的模块均受计数器即控制器的控制。当控制器的输入端(清零端)为低电平的时候,控制器才启动整个运算过程,只有当控制器的输出出现脉冲的时候,其它需要脉冲的模块才开始工作,当达到需要运算次数后,控制器封锁脉冲。各寄存器保持值不变。

被乘数寄存器模块的功能是实现被乘数寄存,接收来自外部输入数据,提供选择器模块的输入。

乘数寄存器模块的功能是实现乘数的寄存,接收来自外部输入数据,还具有向右移位的功能,将从部分积寄存器传来的数据保存在最高位,同时将乘数的最低位输出作为数据选择器的控制端。也作为最后乘积的低位部分寄存器。

数据选择器模块的功能是实现数据的选择,当从乘数寄存器传来的控制信号为高电平时,输出为被乘数,作为加法器的一个输入,当从乘数寄存器传来的控制信号位低电平时,输出为零,作为加法器的输入。

`

Word文档 部分积寄存器模块的功能是寄存从移位电路传过来的数据,作为加法器的输入。

移位电路模块起将部分积移位的作用,同时达到了让所有模块在同一个脉冲下工作脉冲同步的作用,由于用组合逻辑电路形成的移位电路不需要脉冲的打入就能工作,当加法器的输出改变时,移位电路就将移位后的部分积送给了部分积

寄存器,而不需要让部分积先将未移位的部分积打如寄存器,再移位的过程。

`

Word文档

图2.1 定点原码一位乘乘法器的顶层原理图

`

Word文档

图2.2 定点原码一位乘乘法器的第二层原理图

`

Word文档 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

`

Word文档 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 ;

`

Word文档 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被打入最高位。