基于FPGA的乘法器设计(2)

2019-04-13 21:43

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


基于FPGA的乘法器设计(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2013年初三一模化学---通州区

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: