信息科学与技术学院
电子EDA技术
课程设计
课程题目:基于FPGA的乘法器设计
1
目录
中文摘要………………………………………………………………2
外文摘要…………………………………………………………………………2
1.绪论…………………………………………………………………………3
1.1概述………………………………………………………………3
1.2VHDL简介………………………………………………………………………3
1.3实验平台…………………………………………………………5
2.乘法器初步设计…………………………………………………………………6
2.1设计思想………………………………………………………………6
2.2乘法器原理…………………………………………………………………6
2.3乘法器设计流程……………………………………………………………7
3.乘法器具体设计…………………………………………………………………9
3.1右移寄存器的设计……………………………………………………………9
3.2加法器模块的设计…………………………………………………………9
3.3乘1模块设计………………………………………………………………10
3.4锁存器模块设计……………………………………………………………11
4.乘法器仿真…………………………………………………………………13
4.18位加法器仿真…………………………………………………………13
4.2乘1模块仿真………………………………………………………13
4.3锁存器模块仿真…………………………………………………………14
4.48位乘法器仿真……………………………………………………………14
4.5总仿真图…………………………………………………………………15
参考文献…………………………………………………………………………16
2
摘要
在微处理器芯片中,乘法器是进行数字信号处理的核心,同时也是微处理器
中进行数据处理的关键部件,它已经是现代计算机必不可少的一部分。本文主要
是在于如何运用标准硬件描述语言(VHDL)完成十六位乘法器,以及如何做二进
制位相乘的运算过程。该乘法器是由十六位加法器构成的以时序方式设计十六位
乘法器,通过逐项移位相加来实现乘法功能,并以Quartus_II9.1软件工具进行
模拟,仿真并予以显示。
关键字:乘法器;标准硬件描述语言(VHDL);移位相加;Quartus_II9.1
Abstract
Inthemicroprocessorchip,themultiplierisadigitalsignal
processingcoremicroprocessorisalsoakeycomponentofdataprocessing,
ticleis
onhowtoustandardhardwaredescriptionlanguage(VHDL)tocomplete
eightmultipliers,aswellashowtomaketheprocessofabinarybit
tiplieriscompodofeightadderto
timingapproachindesigningeightmultiplier,achievedbyaddingthe
multiplication-by-shiftfunction,andinQuartus_II9.1softwaretools
forsimulation,emulationandbedisplayed.
Keywords:multiplier;standardhardwaredescriptionlanguage(VHDL);
shiftsum;Quartus_II9.1
3
1.绪论
1.1概述
本课题的设计来源是基于标准硬件描述语言(VeryHighSpeedIntegrated
CircuitHardwareDescriptionLanguage,VHDL)及Quartus_II9.1软件开发工
具的进行模拟仿真的16位乘法器,用于实现32位移位相加乘法器的乘法运算功
能。
本课题的研究现状:乘法器是定点处理器的主要组成部分,其速度是影响
CPU速度的关键因素。乘法器也是数字信号处理(DSP)、系统级芯片(SOC)的关
键部件。在最新的处理器中乘法器除了直接作为运算部件外,还用于加速地址转
换、数组寻址和其他整数操作。随着科研生产地运算速度要求的提高,对乘法器
性能的要求也在不断地提升。BOOTH算法、WALLACE树、CLA等技术的出现也使
得乘法器设计的技术日益成熟。而不同的应用背景又要求在不同的算法和实现之
间进行选择,权衡电路鬼名模和性能,达到特定条件下的最优设计。
本次设计的目的就是在掌握移位相加十六位乘法器的工作原理,了解并学
习掌握VHDL硬件描述语言的设计方法和思想,通过自己学习的VHDL语言结合
以前电子电路的设计知识理论联系实际,掌握所学的课程知识,学习VHDL基本
单元电路的综合设计应用。通过对十六位二进制乘法器的设计,巩固和综合运用
所学课程,加深对数字电路和VHDL基本单元的理解,并借助Quartus_电影人工智能 II9.1软
件开发工具这个平台进行仿真,理论联系实际,提高设计能力,提高分析、解决
计算机技术实际问题的独立工作能力。通过课程设计深入理解VHDL语言的精
髓,达到课程设计的目标,加法器的设计可以加深对门电路的理解,乘法器的设
计可以使对计算机怎样工作有了更深了解。
本设计的主要难点包括:
1)通过分析算术逻辑单元(ALU)的硬件结构工作过程的分析,深入理解
ALU的工作原理和设计方法,进而确定ALU的总体结构,以及各层次模块的功能
和结构,并了解。
2)根据设计的功能要求,使用标准硬件描述语言(VHDL)设计出移位相加
16位乘法器
4
3)利用Quartus_II9.1软件工具完成16位乘法器的仿真。
1.2VHDL简介
VHDL(VeryHighSpeedIntegratedCircuitHardwareDescription
Language)是超高速集成电路硬件描述猜成语 语言的中文缩写,它是电子系统硬件行为
描述、结构描述、数据流描述的高级语言。它是在20世纪80年代的后期出现。
最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的
一种使用范围较小的设计语言,并于1987年成为IEEE的一种标准语言,1993
年VHDL重新修订,变得更加完备,形成新的标准。
该语言设计技术齐全、方法灵活、功能强大、与制作工艺无关、编程易于共
享,所以成为硬件描述语言的主流,成为标准硬件描述语言。VHDL作为EDA的
重要组成部分,提供了借助计算机进行数字系统设计的一种很好的手段。用VHDL
进行有很多优点,VHDL的硬件描述很强,可以用于从门级、电路级直至系统级
的描述、仿真、综合和调试。利用VHDL丰富的仿真语句和库函数,对大系统的
早期设计,可在远离门级的高层次上进行模拟,以利于设计者确定整个设计结构
和功能的可行性。VHDL强大的描述能力和程序结构,使其具有支持多大规模设
计进行分解,以及对已有的设计进行再利用的功能。VHDL标准、规范、语法较
为严格,便于重复利用和交流,它所具有的类属描述语句和子程序调用等功能,
使设计者对完成的设计不必改变程序,只需改变类属于参数或函数,就可改变设
计的规模和结构。从ASIC的设计到PCB系统的设计,VHDL语言都能派上用场,
都能够轻易地达成设计供者的要求。目前,VHDL语言已经成为FPGD/CPLD编程
最常用的工具。
1.3实验平台
仿真软件:Quartus_II9.1
5
2.乘法器初步设计
2.1设计思想
本设计首先要了解乘法器的基本原理,我所设计的16位乘法器采用移位
和加法来实现,主要用到原码一位乘运算规则。然后对乘法器的进行顶层设计,
把乘法器的设计分成几个功能模块,并逐步细化,因此需要了解各个模块的引脚
含义以及它们的内部构造,并对各个模块的实现功能进行分析,通过标准硬件描
述语言对它们模块进行编程,调试。最后在Q帅的英语 uartus_II9.0应用软件进行模拟仿
真,得出正确的运行结果。
2.2乘法器原理
16位乘法器可用移位和加法来实现,两个16位数相乘,总共需要执行16
次加法运算和16次移位运算,由乘数的末位值确定被乘数印尼签证 是否与原部分积相加,
从乘数的最低位开始,若乘数为1,加被乘数,然后右移一位,形成新的部分积,
乘数同时右移一位;若乘数为0,加上零值,然后右移一位,形成新的部分积,
乘数同时右移一位,直到乘数的最高位为止,从而得出最终的乘积结果。
实现原码一位乘法的硬件逻辑结构图如下图所示。用寄存器R0存放部分积;
R1存放乘数Y,并且最低位Yn作判断为;R0和R1都具有右移功能并且是连通的;
寄存器R2存放被乘数X,加法器完成部分积与位积求和,计数器记录相加移位的
操作次数。
加法器
控制门
R2X0被乘数X
R0部分积R1乘数YYn
计
数
器
控制电路
移位控制
6
16位乘法器的顶层设计主要分成四大功能模块,并可根据分解的层次进行
设计,各个功能模块作用介绍如下:
1)右移寄存器模块:是指寄存器中所存的代码能够在移位脉冲的作用
下依次左移或右移,本设计采用的一个16位寄存器,能存放16位
二进制代码,需用16个触发器来构成,它可将乘法运算中的被乘数
加载于其中,同时进行乘法运算的移位操作。
2)加法器:本设计用到一个16位加法器,主要进行操作数的加法运算。
3)乘1模块:主要实现16位与1位的乘法运算。
4)锁存器:它所实现的功能是把当前的状态锁存起来,使CPU送出的数
据在接口电路的输出端保持一段时间锁存后状态不再发生变化,直
到解除锁定。本次设计采用32位锁存器,同时也是一个右移寄存器,
在时钟信号作用下,进行输入值的移位与锁存。
2.3乘法器设计流程
本设计采用移位和加法来实现两个16位二进制数相乘。由乘数的末尾值来
确定被乘数是否与原部分积相加,然后右移一位,形成新的部分积;同时,乘数
也右移一位,由次低位作新的末位,空出最高位放部分积的最高位。例如被乘数
为00000101,乘数为01101111,初始条件下,部分积为0,乘数最低位为1,加
被乘数,和为00000101,使其右移一位,形成新的部分积为00000010,乘数同
时右移一位,原和最低位1被放到乘数的最高位,此时,乘数最低位为1,加
00000101,和为00000111,使其右移一位,形成新的部分积为0000011,依次类
推,循环16次,总共需除老鼠 要进行16次相加和16次移位操作,最终得出乘积结果。
其设计流程图所如下所示:
7
开始
检查乘数
将乘积寄存器右移1位
将乘数寄存器右移1
是否已循环执
行了16次?
完成
将被乘数寄存器与乘积寄存器
的左半部分相加,并将结果写回
乘积寄存器的左半部分
乘数0=0
乘数0=1
少
于
16
次
是已循环16次
8
3.乘法器设计模块
3.1右移寄存器的设计
16位右移寄存器是当时钟信号CLK处于上升沿时,当LOAD=‘1’时,
将16位被乘送达分数加载进去;而当LOAD=‘0’时,数据进行移位操作;
同时定义一个信号REG8用来装载新数据及移位后的操作数,在完成这些操
作后,寄存器的最低位REG8(0)传送给QB输出。该模块的VHDL程序设计
如下所示。
LIBRARYIEEE;--16位右移寄存器
_LOGIC_;
ENTITYSREG16BIS
PORT(CLK,LOAD:INSTD_LOGIC;
DIN:INSTD_LOGIC_VECTOR(15DOWNTO0);
QB:OUTSTD_LOGIC);
ENDSREG16B;
ARCHITECTUREbehavOFSREG16BIS
SIGNALREG16:STD_LOGIC_VECTOR(15DOWNTO0);
BEGIN
PROCESS(CLK,LOAD)
BEGIN
IFLOAD='1'THENREG16<=DIN;
ELSIFCLK'EVENTANDCLK='1'THEN
REG16(14DOWNTO0)<=REG16(15DOWNTO1);
ENDIF;
9
ENDPROCESS;
QB<=REG16(0);--输出最低位
ENDbehav;
3.2加法器模块的设计(ADDER16B)
定义实体ADDER16,,A,B端口都为输入16位数的输入端口,S为存
储两个8位数相加结果的输出端口VHDL定义如下:
LIBRARYIEEE;--16位加法器
_LOGIC_;
_LOGIC_;
ENTITYADDER16IS
PORT(B,A:INSTD_LOGIC_VECTOR(15DOWNTO0);
S:OUTSTD_LOGIC_VECTOR(16DOWNTO0));
ENDADDER16;
ARCHITECTUREbehavOFADDER16IS
BEGIN
S<='0'&A+B;
ENDbehav;
3.3.乘1模块设计(ANDARITH)
乘1模块即1位乘法器,可通过选通与门逻辑,利用FOR_LOOP循环语
句完成16位二进制数与1位二进制数的乘法运算古代爱情 ,即16位二进制DIN从
最低位到最高位与1位二进制数ABIN分别做与运算,最后将结果依次传送
到DOUT的最低位到最高位输出,即当ABIN为1时,DOUT直接输出DIN,
位0时,DOUT输出全零。1位乘法器的元件引脚图如下所示:
10
定义一个实体ANDARITH,ABIN、DIN[15…0]作为输入端口,
DOUT[15…0]作为输出端口。1位乘法器VHDL程序代码如下:
LIBRARYIEEE;--1位乘法器
_LOGIC_;
ENTITYANDARITHIS--选通与门模块
PORT(ABIN:INSTD_LOGIC;
DIN:INSTD_LOGIC_VECTOR(15DOWNTO0);
DOUT:OUTSTD_LOGIC_VECTOR(15DOWNTO0));
ENDANDARITH;
ARCHITECTUREbehavOFANDARITHIS
BEGIN
PROCESS(ABIN,DIN)
BEGIN
FORIIN0TO15LOOP--循环,完成8位与1位运算
DOUT(I)<=DIN(I)ANDABIN;
ENDLOOP;
ENDPROCESS;
ENDbehav;
3.4锁存器模块设计(REG16B)
此处锁存器模块即16位右移寄存器,可利用IF语句来完成其输入值
的锁存,当清零(CLR=‘1’)信号到来时,定义的信号量R16S锁存输入
值,即R16S清零;否则在时钟信号CLK上升沿作用下,将R16S的低16位
进行移位操作,同时将16位输入数据D锁存到R16S的高16位,最后传送
11
给Q输出,在乘法器的顶层设计中,乘数与被乘数的乘积也将出现在REG16B
端口。16位锁存器的VHDL程序设计如下.
LIBRARYIEEE;--32位锁存器/右移寄存器
_LOGIC_;
ENTITYREG32BIS
PORT(CLK,CLR:INSTD_LOGIC;
D:INSTD_LOGIC_VECTOR(16DOWNTO0);
Q:OUTSTD_LOGIC_VECTOR(31DOWNTO0));
ENDREG32B;
ARCHITECTUREbehavOFREG32BIS
SIGNALR32S:STD_LOGIC_VECTOR(31DOWNTO0);
BEGIN
PROCESS(CLK,CLR)
BEGIN
IFCLR='1'THENR32S<=(OTHERS=>'0');--清零信号
ELSIFCLK'EVENTANDCLK='1'THEN--时钟到来时,锁存输入值,并右
移低8
R32S(14DOWNTO0)<=R32S(15DOWNTO1);--右移低8位
R32S(31DOWNTO15)<=D;--将输入锁到高8位
ENDIF;
ENDPROCESS;
Q<=R32S;
ENDbehav;
12
4.乘法器仿真
4.116位加法器仿真
CIN作为输入信号,赋值时钟周期初值为0,以50ns为一个时钟周期,当
CIN=0时,说明A,B两个加数所得出的和S经典儿童故事 不需要加1,反之就要加上进位
作为输出信号,它表示的当两个加数最高位有进位时,输出为1.例如
将两个加数A,B赋值十六进制数分别为16、18运行后,和S在CIN=0的时钟下
输出值为2E,在CIN=1的时钟下输出和为2F.由于没有最高进位,COUT=0;
4.2乘1模块仿真
乘1模块包括3个引脚分别为ABIN、DIN、DOUT.它主要是实现8位二
进制数DIN分别和1位二进制数ABIN做与运算,当输入信号ABIN=0时,
DOUT=0.当ABIN=1时,DOUT等于DIN.例如在运行波形图之前,将DIN赋
初值为56,运行后,当ABIN为0时,其DOUT输出值为00,当ABIN为1时,
其DOUT输出值为56。
4.3锁存器模块仿真
锁存器模块包括4个引脚,分别为:CLR、CLK、D、Q。CLR为清零信号,
当CLR=1时,Q输出值为0.当CLR=0时,仅当CLK有效在上升沿作用下且CLK=1
时,D输入数据右移低8位,并赋给输出信号Q。例如在下图中,给D赋初值十
进制1,在CLR=0的信号下,当CLR上升沿到来时,Q的值从0,128,192…….
逐步右移。
4.416位乘法器仿真
16位乘法器包括START,CLKK,A,B,DOUT五个引脚,当START=0时,被乘数A
向移位寄存器SREG8B加载数据,当START=1时,16位寄存器清为乘法时
钟信号,每当CLK上升沿到来时,A和B乘法进行移位相加运算,到第8个时钟
上升沿后,将得出输出结果。例如将A,B赋值为18H、14H,运行后最终相乘结
果为:01E0H.
13
4.5总仿真图
14
五.心得体会:
EDA实用教程一门很有些意义的课程。从最初的一步一步的学习,
让我学到更多,对计算机程序有了更深刻的了解和学习。
在做这个课程设计时,比想象的更加困难些,虽然通过许多途径找
到了相关的资料,但是实现着实不简单。对于我来说,写程序是一个
比较困难的事情,所以做这个课程设计确实对我来说很具有挑战性。
这门课程设计必须理论和实践相结合。整个的设计过程中,要充分利
用软件工程中的模块化设计思想,这样使设计减少了许多繁杂的问
题,使程序看起来更加明了,不易混乱。
通过课程实践,巩固加深对课堂教学内容的理解,提高我的VHDL设
计能力,对我来说,这次课程设计最重要的是,提高了我自主学习与
动手实践的能力。
六.参考文献
1.潘松,黄继业,EDA技术与VHDL(第四版),科学出版社,2007年01月
2.潘松,吃了虾不能吃什么 王国栋.VHDL实用教程[M].成都:电子科技大学出版社,2002
3.吴静,一种RISC结构8位微控制器的设计与实现[M],天津大学,2004年
08月
4.刘昌华.数字逻辑EDA设计与实践[M].北京:国防工业出版社,2006
5.杨刚,现代电子技术VHDL与数字系统设计[M](第1版),电子工业出版
社,2004年04月
本文发布于:2023-04-19 13:07:24,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/fan/82/504042.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |