基于FPGA的乘法器设计

更新时间:2024-05-15 21:11:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

信息科学与技术学院 课 程 题电子EDA技术 课程设计

基于FPGA的乘法器设计

目:

目 录

中文摘要………………………………………………………………2 外文摘要…………………………………………………………………………2 1.绪论…………………………………………………………………………3 1.1概述………………………………………………………………3 1. 2 VHDL简介……………………………………………………… ………………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.1 8位加法器仿真…………………………………………………………13 4.2 乘1模块仿真………………………………………………………13 4.3 锁存器模块仿真…………………………………………………………14 4.4 8位乘法器仿真……………………………………………………………14 4.5 总仿真图 …………………………………………………………………15 参考文献…………………………………………………………………………16

1

摘要

在微处理器芯片中,乘法器是进行数字信号处理的核心,同时也是微处理器中进行数据处理的关键部件,它已经是现代计算机必不可少的一部分。本文主要是在于如何运用标准硬件描述语言(VHDL)完成十六位乘法器,以及如何做二进制位相乘的运算过程。该乘法器是由十六位加法器构成的以时序方式设计十六位乘法器,通过逐项移位相加来实现乘法功能,并以Quartus_II9.1软件工具进行模拟,仿真并予以显示。

关键字:乘法器;标准硬件描述语言(VHDL);移位相加;Quartus_II9.1

Abstract

In the microprocessor chip, the multiplier is a digital signal processing core microprocessor is also a key component of data processing, it is already an essential part of the modern computer. This article is on how to use standard hardware description language (VHDL) to complete eight multipliers, as well as how to make the process of a binary bit multiplication operation. The multiplier is composed of eight adder to timing approach in designing eight multiplier, achieved by adding the multiplication-by-shift function, and in Quartus_II9.1 software tools for simulation, emulation and be displayed.

Keywords: multiplier; standard hardware description language (VHDL); shift sum; Quartus_II9.1

2

1.绪论

1.1概述

本课题的设计来源是基于标准硬件描述语言(Very High Speed Integrated Circuit Hardware Description Language,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位乘法器

3

3)利用Quartus_II9.1软件工具完成16位乘法器的仿真。 1.2 VHDL简介

VHDL(Very High Speed Integrated Circuit Hardware Description

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

4

2.乘法器初步设计

2.1设计思想

本设计首先要了解乘法器的基本原理 ,我所设计的16位乘法器采用移位

和加法来实现,主要用到原码一位乘运算规则。然后对乘法器的进行顶层设计,把乘法器的设计分成几个功能模块,并逐步细化,因此需要了解各个模块的引脚含义以及它们的内部构造,并对各个模块的实现功能进行分析,通过标准硬件描述语言对它们模块进行编程,调试。最后在Quartus_II9.0应用软件进行模拟仿真,得出正确的运行结果。 2.2乘法器原理

16位乘法器可用移位和加法来实现,两个16位数相乘,总共需要执行16次加法运算和16次移位运算,由乘数的末位值确定被乘数是否与原部分积相加,从乘数的最低位开始,若乘数为1,加被乘数,然后右移一位,形成新的部分积,乘数同时右移一位;若乘数为0,加上零值,然后右移一位,形成新的部分积,乘数同时右移一位,直到乘数的最高位为止,从而得出最终的乘积结果。

实现原码一位乘法的硬件逻辑结构图如下图所示。用寄存器R0存放部分积;R1存放乘数Y,并且最低位Yn作判断为;R0和R1都具有右移功能并且是连通的;寄存器R2存放被乘数X,加法器完成部分积与位积求和,计数器记录相加移位的操作次数。 R0 部分积 R1 乘数Y Yn 计数加法器 器 移位控制 控制门

R2 X0 被乘数X 5

控制电路

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次移位操作,最终得出乘积结果。其设计流程图所如下所示:

6

开始 乘数 0=1 检查乘数将被乘数寄存器与乘积寄存器的左半部分相加,并将结果写回乘积寄存器的左半部分 乘数 0=0 少于16将乘积寄存器右移1位 次 将乘数寄存器右移1是否已循环执行了16次? 是 已循环16次 完成 7

3.乘法器设计模块 3.1右移寄存器的设计

16位右移寄存器是当时钟信号CLK处于上升沿时,当LOAD=‘1’时,将16位被乘送达分数加载进去;而当LOAD=‘0’时,数据进行移位操作;同时定义一个信号REG8用来装载新数据及移位后的操作数,在完成这些操作后,寄存器的最低位REG8(0)传送给QB输出。该模块的VHDL程序设计如下所示。

LIBRARY IEEE; -- 16位右移寄存器 USE IEEE.STD_LOGIC_1164.ALL;

ENTITY SREG16B IS PORT ( CLK ,LOAD : IN STD_LOGIC;

DIN : IN STD_LOGIC_VECTOR(15 DOWNTO 0); QB : OUT STD_LOGIC ); END SREG16B;

ARCHITECTURE behav OF SREG16B IS

SIGNAL REG16 : STD_LOGIC_VECTOR(15 DOWNTO 0); BEGIN

PROCESS (CLK, LOAD) BEGIN

IF LOAD = '1' THEN REG16 <= DIN; ELSIF CLK'EVENT AND CLK = '1' THEN

REG16(14 DOWNTO 0) <= REG16(15 DOWNTO 1); END IF;

8

END PROCESS;

QB <= REG16(0); -- 输出最低位

END behav;

3.2 加法器模块的设计(ADDER16B)

定义实体ADDER16 ,,A,B端口都为输入16位数的输入端口,S为存储两个8位数相加结果的输出端口VHDL定义如下:

LIBRARY IEEE; --16位加法器 USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ADDER16 IS

PORT(B, A : IN STD_LOGIC_VECTOR(15 DOWNTO 0); S : OUT STD_LOGIC_VECTOR(16 DOWNTO 0) ); END ADDER16;

ARCHITECTURE behav OF ADDER16 IS BEGIN

S <= '0'&A + B ;

END behav;

3.3.乘1模块设计(ANDARITH)

乘1模块即1位乘法器,可通过选通与门逻辑,利用FOR_LOOP循环语句完成16位二进制数与1位二进制数的乘法运算,即16位二进制DIN从最低位到最高位与1位二进制数ABIN分别做与运算,最后将结果依次传送到DOUT的最低位到最高位输出,即当ABIN为1时,DOUT直接输出DIN, 位0时,DOUT输出全零。1位乘法器的元件引脚图如下所示:

9

本文来源:https://www.bwwdw.com/article/ogs7.html

Top