8位乘法器的设计.docx
《8位乘法器的设计.docx》由会员分享,可在线阅读,更多相关《8位乘法器的设计.docx(21页珍藏版)》请在冰豆网上搜索。
8位乘法器的设计
本科生毕业论文(设计)
8位乘法器的设计
姓名:
指导教师:
院系:
信息工程学院
专业:
计算机科学与技术
提交日期:
2010/4/30
中文摘要………………………………………………………………………………2
外文摘要………………………………………………………………………………3
1.绪论………………………………………………………………………………4
1.1概述……………………………………………………………………………4
1.2VHDL和MAX+PIUS简介………………………………………………………5
1.3实验平台……………………………………………………………………6
2.乘法器初步设计…………………………………………………………………7
2.1设计思想……………………………………………………………………7
2.2乘法器原理……………………………………………………………………7
2.3乘法器设计流程……………………………………………………………8
3.乘法器具体设计………………………………………………………………9
3.1右移寄存器的设计…………………………………………………………9
3.2加法器模块的设计………………………………………………………10
3.2.14位加法器的设计…………………………………………………10
3.2.28位加法器的设计…………………………………………………11
3.3乘1模块设计………………………………………………………………13
3.4锁存器模块设计……………………………………………………………14
4.乘法器仿真……………………………………………………………………17
4.18位加法器仿真…………………………………………………………17
4.2乘1模块仿真……………………………………………………………17
4.3锁存器模块仿真…………………………………………………………18
4.48位乘法器仿真…………………………………………………………18
结束语……………………………………………………………………………19
参考文献…………………………………………………………………………20
致谢…………………………………………………………………………………21
8位乘法器的设计
摘要:
在微处理器芯片中,乘法器是进行数字信号处理的核心,同时也是微处理器中进行数据处理的关键部件,它已经是现代计算机必不可少的一部分。
本文主要是在于如何运用标准硬件描述语言(VHDL)完成八位乘法器,以及如何做二进制位相乘的运算过程。
该乘法器是由八位加法器构成的以时序方式设计八位乘法器,通过逐项移位相加来实现乘法功能,并以MAX+PlusII软件工具进行模拟,仿真并予以显示。
关键字:
乘法器;标准硬件描述语言(VHDL);移位相加;MAX+PlusII
8-bitmultiplierdesign
Abstract:
Inthemicroprocessorchip,themultiplierisadigitalsignalprocessingcoremicroprocessorisalsoakeycomponentofdataprocessing,itisalreadyanessentialpartofthemoderncomputer.Thisarticleisonhowtousestandardhardwaredescriptionlanguage(VHDL)tocompleteeightmultipliers,aswellashowtomaketheprocessofabinarybitmultiplicationoperation.Themultiplieriscomposedofeightaddertotimingapproachindesigningeightmultiplier,achievedbyaddingthemultiplication-by-shiftfunction,andinMAX+PlusIIsoftwaretoolsforsimulation,emulationandbedisplayed.
Keywords:
multiplier;standardhardwaredescriptionlanguage(VHDL);shiftsum;MAX+PlusII
1.绪论
1.1概述
本课题的设计来源是基于标准硬件描述语言(VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage,VHDL)及MAX+PlusII(MultipleArrayMatrixProgrammableLogicUserSystem)软件开发工具的进行模拟仿真的8位乘法器,用于实现8位移位相加乘法器的乘法运算功能。
本课题的研究现状是基于乘法器是定点处理器的主要组成部分,其速度是影响CPU速度的关键因素。
乘法器也是数字信号处理(DSP)、系统级芯片(SOC)的关键部件。
在最新的处理器中乘法器除了直接作为运算部件外,还用于加速地址转换、数组寻址和其他整数操作。
随着科研生产地运算速度要求的提高,对乘法器性能的要求也在不断地提升。
BOOTH算法、WALLACE树、CLA等技术的出现也使得乘法器设计的技术日益成熟。
而不同的应用背景又要求在不同的算法和实现之间进行选择,权衡电路性能,达到特定条件下的最优设计。
本次设计的目的就是在掌握移位相加八位乘法器的工作原理,了解并学习掌握VHDL硬件描述语言的设计方法和思想,通过自己学习的VHDL语言结合以前电子电路的设计知识理论联系实际,掌握所学的课程知识,学习VHDL基本单元电路的综合设计应用。
通过对八位二进制乘法器的设计,巩固和综合运用所学课程,加深对数字电路和VHDL基本单元的理解,并借助MAX+PlusII软件开发工具这个平台进行仿真,理论联系实际,提高设计能力,提高分析、解决计算机技术实际问题的独立工作能力。
通过课程设计深入理解VHDL语言的精髓,达到课程设计的目标,加法器的设计可以加深对门电路的理解,乘法器的设计可以使对计算机怎样工作有了更深了解。
本设计的主要难点包括:
1)了解乘法器的工作原理和乘法器的各个子模块的功能实现,并分析其内部构造。
2)根据设计的功能要求,使用标准硬件描述语言(VHDL)设计出移位相加8位乘法器
3)利用MAX+PlusII软件工具完成8位乘法器的仿真。
1.2VHDL和MAX+PlusII简介
VHDL是超高速集成电路硬件描述语言的中文缩写,它是电子系统硬件行为描述、结构描述、数据流描述的高级语言。
它在20世纪80年代的后期出现。
最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言,并于1987年成为IEEE的一种标准语言,1993年VHDL重新修订,变得更加完备,形成新的标准。
该语言设计技术齐全、方法灵活、功能强大、与制作工艺无关、编程易于共享,所以成为硬件描述语言的主流,成为标准硬件描述语言。
VHDL作为EDA的重要组成部分,提供了借助计算机进行数字系统设计的一种很好的手段。
用VHDL进行有很多优点,VHDL的硬件描述很强,可以用于从门级、电路级直至系统级的描述、仿真、综合和调试。
利用VHDL丰富的仿真语句和库函数,对大系统的早期设计,可在远离门级的高层次上进行模拟,以利于设计者确定整个设计结构和功能的可行性。
VHDL强大的描述能力和程序结构,使其具有支持多大规模设计进行分解,以及对已有的设计进行再利用的功能。
VHDL标准、规范、语法较为严格、便于重复利用和交流。
它所具有的类属描述语句和子程序调用等功能,使设计者对完成的设计不必改变程序,只需改变类属于参数或函数,就可改变设计的规模和结构。
从ASIC的设计到PCB系统的设计,VHDL语言都能派上用场,都能够轻易地达成设计供者的要求。
目前,VHDL语言已经成为FPGD/CPLD编程最常用的工具。
MAX+plusII是美国Altera公司自行开发的,一种针对其公司生产的系列CPLD和FPGA器件的设计、仿真、编程的工具软件。
MAX+PlusII是CPLD/FPGA应用软件中比较典型的一种工具,目前已发行到10.2版本。
它所提供的灵活性和高效性事无可比拟的,其丰富的图形界面,辅之以完整的、可即时访问的在线文档,使设计人员能够轻松愉快的使用它。
使用MAX+PlusII的设计者不需精通器件内部的复杂结构。
设计者可以用自己熟悉的设计工具(如原理图输入或硬件描述语言)建立设计,MAX+PLUSII把这些设计转自动换成最终所需的格式。
其设计速度非常快。
对于一般几千门的电路设计,使用MAX+PlusII,从设计输入到器件编程完毕,用户拿到设计好的逻辑电路,大约只需几小时。
设计处理一般在数分钟内内完成。
特别是在原理图输入等方面,MaxplusII被公认为是最易使用,人机界面最友善的PLD开发软件,特别适合初学者使用。
在Max+plusII上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供了一种与结构无关的设计环境,具有多平台、全集中化、模块组合式工具软件、硬件描述语言、开放的界面等特点,是设计者能方便地进行设计输入、快速处理和器件编程。
1.3实验平台
软件环境:
1.操作系统:
Windows7
2.仿真软件:
MAX+PLUSII
硬件环境:
1.CPUIntel
2.内存DDR32G
3.硬盘250GB
2.乘法器初步设计
2.1设计思想
本设计首先要了解乘法器的基本原理,我所设计的8位乘法器采用移位和加法来实现,主要用到原码一位乘运算规则。
然后对乘法器的进行顶层设计,把乘法器的设计分成几个功能模块,并逐步细化,因此需要了解各个模块的引脚含义以及它们的内部构造,并对各个模块的实现功能进行分析,通过标准硬件描述语言对它们模块进行编程,调试。
最后在MAX+PlusII应用软件进行模拟仿真,得出正确的运行结果。
2.2乘法器原理
8位乘法器可用移位和加法来实现,两个8位数相乘,总共需要执行8次加法运算和8次移位运算。
由乘数的末位值确定被乘数是否与原部分积相加,从乘数的最低位开始,若乘数为1,加被乘数,然后右移一位,形成新的部分积,乘数同时右移一位;若乘数为0,加上零值,然后右移一位,形成新的部分积,乘数同时右移一位,直到乘数的最高位为止,从而得出最终的乘积结果。
实现原码一位乘法的硬件逻辑结构图如图2-1所示。
用寄存器R0存放部分积,R1存放乘数Y,并且最低位Yn作判断位。
R0和R1都具有右移功能并且是连通的,寄存器R2存放被乘数X,加法器完成部分积与位积求和,计数器记录相加移位的操作次数。
图2-1硬件逻辑结构图
8位乘法器的顶层设计主要分成四大功能模块,并可根据分解的层次进行设计,各个功能模块作用介绍如下:
1)右移寄存器模块:
是指寄存器中所存的代码能够在移位脉冲的作用下依次左移或右移。
本设计采用的一个8位寄存器,能存放8位二进制代码,需用8个触发器来构成,它可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。
2)加法器:
本设计用到一个8位加法器,主要进行操作数的加法运算。
3)乘1模块:
主要实现8位与1位的乘法运算。
4)锁存器:
它所实现的功能是把当前的状态锁存起来,使CPU送出的数据在接口电路的输出端保持一段时间锁存后状态不再发生变化,直到解除锁定。
本次设计采用16位锁存器,同时也是一个右移寄存器,在时钟信号作用下,进行输入值的移位与锁存。
2.3乘法器设计流程
本设计采用移位和加法来实现两个8位二进制数相乘。
由乘数的末尾值来确定被乘数是否与原部分积相加,然后右移一位,形成新的部分积,同时,乘数也右移一位,由次低位作新的末位,空出最高位放部分积的最高位。
例如被乘数为00000101,乘数为01101111,初始条件下,部分积为0,乘数最低位为1,加被乘数,和为00000101,使其右移一位,形成新的部分积为00000010,乘数同时右移一位,原和最低位1被放到乘数的最高位,此时,乘数最低位为1,加00000101,和为00000111,使其右移一位,形成新的部分积为0000011,依次类推,循环8次,总共需要进行8次相加和8次移位操作,最终得出乘积结果。
其设计流程图如2-2所示:
图2-2乘法器设计流程图
3.乘法器设计模块
3.1右移寄存器的设计
8位右移寄存器是当时钟信号CLK处于上升沿时,当LOAD=‘1’时,将8位被乘数加载进去;而当LOAD=‘0’时,数据进行移位操作。
同时定义一个信号REG8用来装载新数据及移位后的操作数,在完成这些操作后,寄存器的最低位REG8(0)传送给QB输出。
该模块的元件符号图如3-1所示:
图3-1右移寄存器元件符号图
如上图所示,8位右移寄存器包括4个引脚分别为:
CLK、LOAD、DIN[7…0]、DOUT[7…0]。
在定义8位右移寄存器实体时,定义CLK为输入时钟信号,LOAD为输入加载信号,DIN为8位数据输入,DOUT为8位数据输出。
以下是8位右移寄存器构造体行为的定义描述:
ARCHITECTUREbehavOFSREG8BIS
SIGNALREG8:
STD_LOGIC_VECTOR(7DOWNTO0);--定义信号量REG8
BEGIN
PROCESS(CLK,LOAD)
BEGIN
IFCLK’EVENTANDCLK=‘1’THEN--当CLK上升沿到来时
IFLOAD=‘1’THEN--装载新数据到REG8中
REG8<=DIN;
ELSE
REG8(6DOWNTO0)<=REG8(7DOWNTO1);--数据右移
ENDIF;
ENDIF
ENDPRECESS;
QB<=REG8(0);--输出最低位到电路输出端
ENDbehave;
3.2加法器模块的设计(ADDER8B)
加法器模块是由两个4位二进制加法器U1和U2组成的8位加法器逻辑电路,其中U1用来装载8位加法器中两个加数的低四位,而U2则用来装载高4位。
3.2.14位二进制加法器设计
在设计4位加法器时,定义信号量SITN、AA及BB,将加数A与0并置后赋给BB,形成5位二进制数,这是为了在做加法时发生溢出所做的处理,然后将加数AA与BB以及进位位CIN相加赋给SINT,并将SINT的低四位赋给加数和S输出,同时将SINT最高位传送给COUT输出。
4位加法器的元件符号图如3-2所示:
图3-24位加法器元件符号图
在定义实体ADDER4B端口中,定义CIN为进位输入信号,A、B端口为4位数的输入端口,S为存储两个4位数相加结果的输出端口,COUT引脚主要用于将存储SINT的最高位的输出端口。
在定义ADDER4B构造体行为时,定义三个信号量:
REG8、AA、BB,都是5位,主要是在做加法时发生溢出时所做的处理。
下面是定义ADDER4B构造体行为的描述:
ARCHITECTUREbehavOFADDER4BIS
SIGNALREG8:
STD_LOGIC_VECTOR(4DOWNTO0);
SIGNALAA,BB:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
AA<=‘0’&A;
BB<=‘0’&B;
SINT<=AA+BB+CIN;
S<=SINT(3DOWNTO0);
COUT<=SINT(4);
ENDbehave;
3.2.28位加法器的设计
8位加法器的设计是由两个4位加法器U1,U2所形成的,在下面程序中定义一个信号量CARRY_OUT,将4位加法器U1的COUT赋给CARRY_OUT,再将CARRY_OUT的值赋给4位加法器U2的进位CIN,8位加法器的高四位和低四位分别来自于4位加法器U2和U1。
8位加法器的元件引脚图如3-3所示:
图3-38位加法器元件符号图
如上图所示,8位加法器有三个输入引脚和两个输出引脚。
在定义ADDER8B实体时,定义A,B为8位输入数据信号,用于被加数和加数的输入,S为8位输出数据信号,用于和的输出,定义输入进位CIN,输出COUT。
在前面已经描述了ADDER4B的功能实现,而ADDER8B是由两个ADDER4B实现的,所以在定义ADDER8B构造体行为时用COMP0NENT语句直接调用ADDER4B的逻辑描述模块,程序描述如下:
COMPONENTADDER4B
PORT(CIN:
INSTD_LOGIC;
A,B:
INSTD_LOGIC_VECTOR(3DOWNTO0);
S:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCOMPONENT;
SIGNALCARRY_OUT:
STD_LOGIC;
BEGINU1:
ADDER4B--例化(安装)1个4位二进制加法器U1
PORTMAP(CIN>=CINA=>A(3DOWNTOO),
B=>B(3DOWNTO0),S=>S(3DOWNTO0),
COUT=>CARRY_OUT);
U2:
ADDER4B--例化(安装)1个4位二进制加法器U2
PORTMAP(CIN=>CARRY_OUT,A>=A(7DOWNTO4),
B=>B(7DOWNTO4),S=>S(7DOWNTO4),COUT>=COUT);
3.3.乘1模块设计(ANDARITH)
乘1模块即1位乘法器,可通过选通与门逻辑,利用FOR_LOOP循环语句完成8位二进制数与1位二进制数的乘法运算,即8位二进制DIN从最低位到最高位与1位二进制数ABIN分别做与运算,最后将结果依次传送到DOUT的最低位到最高位输出,即当ABIN为1时,DOUT直接输出DIN,
位0时,DOUT输出全零。
1位乘法器的元件引脚图如3-4所示:
图3-4乘1模块元件符号图
在定义一个实体ANDARITH端口中,ABIN、DIN[7…0]作为输入端口,DOUT[7…0]作为输出端口。
1位乘法器构造体程序代码如下:
ARCHITECTUREbehavOFANDARITHIS--定义ANDRITH构造体行为
BEGIN
PROCESS(ABIN,DIN)
BEGIN
FORIIN0TO7LOOP--循环8次,完成8位与1位的乘法运算
DOUT(I)<=DIN(I)ANDABIN;--当ABIN为1时,DOUT直接输出DIN,当ABIN=0时,DOUT输出全零
ENDLOOP;
ENDPROCESS;
ENDbehav
3.4锁存器模块设计(REG16B)
此处锁存器模块即16位右移寄存器,可利用IF语句来完成其输入值的锁存,当清零(CLR=‘1’)信号到来时,定义的信号量R16S锁存输入值,即R16S清零;否则在时钟信号CLK上升沿作用下,将R16S的低8位进行移位操作,同时将8位输入数据D锁存到R16S的高8位,最后传送给Q输出。
在乘法器的顶层设计中,乘数与被乘数的乘积也将出现在REG16B端口。
16位锁存器的元件符号图如3-5所示:
图3-5锁存器元件符号图
如上图所示:
16位右移寄存器包括3个输入引脚,一个输出引脚。
在定义REG16B实体端口中,定义D为8位输入数据,CLK为输入时钟信号,CLR为输入清零信号,Q为16位输出数据。
下面是REG16B的构造体行为描述:
ARCHITECTUREbehavOFREG16IS
SIGNALR16S:
STD_LOGIC_VECTOR(15DOWNTO0);
BEGIN
PROCESS(CLK,CLR)
BEGIN
IFCLR=‘1’THEN--当有效时,全部清零
R16S<=“0000000000000000”;--锁存输入值,并右移低8位
ELSEIFCLKEVENTANDCLK=‘1’THEN
R16S(6DOWNTO0)<=R16S(7DOWNTO1);
R16S(15DOWNTO7)<=D;--将输入锁到高8位
ENDIF;
ENDPROCESS;
Q<=R16S;
ENDbehave;
3.58位乘法器的顶层设计
8位移位相加乘法器的原理图如3-6所示。
在图中,START信号的上升沿及其高电平有两个功能,即16位寄存器清零和被乘数A[7……0]向移位寄存器SREG8B加载,它的低电平则作为乘法使能信号。
CLK位乘法时钟信号。
当被乘数被加载于8位右移寄存器SREG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。
当为1时,1位乘法器ANDARTIH打开,8位乘数B[7…0]在同一节拍进入8位加法器,与上一次锁存在16位锁存器中的高8位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。
而当被乘数的移出位为0时,与门全零输出。
如此反复,直至8个时钟脉冲后,最后乘积完整出现在REG16B端口。
移位相加乘法器的原理图如下:
图3-68位移位相加乘法器原理图
8位乘法器元件符号图如3-7所示:
图3-78位乘法器元件符号图
如上图所示,8位乘法器包括4个输入引脚和1个输出引脚。
在8位乘法器的顶层设计中,在定义8位乘法器实体端口中,定义CLKK为输入时钟信号,A、B为8位输入数据,START为输入信号,DOUT为16位输出数据。
由于在前面已经定义各个子模块的功能,所以在8位乘法器的顶层设计中直接用元件例化的方法直实现。
下面是CLKK和START两个信号作用下的8位乘法器功能实现的VHDL描述:
SIGNALGNDINT,NEWSTART,QB:
STD_LOGIC;
SIGNALANDSD:
STD_LOGIC_VECTOR((7DOWNTO0);
SIGNALDTBIN:
STD_LOGIC_VECTOR((8DOWNTO0);
SIGNALDTBOUT:
STD_LOGIC_VECTOR((15DOWNTO0);
BEGIN
DOUT<=DTBOUT;GNDINT<=‘0’;
PROCESS(CLKK,START)
BEGIN
IFSTART=‘1’TNENNEWSTART<=‘1’;
ELSIFCLKK=‘0’THENNEWSTART<=‘0’;
ENDIF;
ENDPROCESS;
4.乘法器仿真
4.18位加法器仿真
CIN作为输入信号,赋值时钟周期初值为0,以50ns为一个时钟周期,当CIN=0时,说明A、B两个加数所得出的和S不需要加1,反之就要加上进位CIN。
COUT作为输出信号,它表示的当两个加数最高位有进位时,输出为1。
例如将两个加数A、B赋值十六进制数分别为16、18,运行波形后,和S在CIN=0