当前位置:文档之家› 十六位硬件乘法器 设计报告

十六位硬件乘法器 设计报告

课程名称电子设计自动化
题目十六位乘法器
院系班级信息学院09电子信息工程1班姓名崔钦婉
学号**********
指导老师凌朝东
2011 年7 月6 日
题目名称:
十六位硬件乘法器电路
摘要:
设计一个16位硬件乘法器电路.要求2位十进制乘法,能用LED数码管同时显示乘数,被乘数和积的值.本设计利用Quartus II软件为设计平台,通过移位相加的乘法原理:即从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。

经软件仿真和硬件测试验证后,以达到实验要求。

目录
摘要 (2)
1. 系统设计 (3)
1.1设计要求 (3)
1.2系统设计方案 (3)
2. 单元电路设计 (5)
3. 软件设计 (8)
4. 系统测试 (9)
结论 (9)
参考文献 (9)
附录 (10)
1.系统设计
1.1设计要求
题目要求设计一个16位硬件乘法器电路.要求2位十进制乘法;能用LED数码管同时显示乘数,被乘数和积的信息.设置一个乘法使能端,控制乘法器的计算和输出.
1.2系统设计方案
此设计问题可分为乘数和被乘数输入控制模块,乘法模块和输出乘积显示模块基本分.
乘数和被乘数的输入模块使输入的十进制数转化为二进制数输入乘法模块,乘法模块利用移位相加的方法将输入的两组二进制数进行相乘,并将16位乘积输出到乘积输出显示模块.显示模块将输入的二进制数按千,百,十,个位分别转化为十进制数输出.
乘数和被乘数的输入可用数据开关K1~K10分别代表数字1,2,…,9,0,用编码器对数据开关K1~K10的电平信号进行编码后输入乘法器进行计算.但此方案所用硬件资源较多,输入繁琐,故不采取.
方案二是利用硬件箱自带16进制码发生器,由对应的键控制输出4位2进制构成的1位16进制码,数的范围是0000~1111,即0H~FH.每按键一次,输出递增1,输出进入目标芯片的4位2进制数将显示在该键对应的数码管.
乘数和被乘数的输入模块将16进制码的A~F码设计成输出为null.使得减少了无用码的输入.
两数相乘的方法很多,可以用移位相加的方法,也可以将乘法器看成计数器,乘积的初始值为零,每一个时钟周期将乘数的值加到积上,同时乘数减一,这样
反复执行,直到乘数为零.本设计利用移位相加的方法使得程序大大简化.
系统总体电路组成原理图如下图所示:
2.单元电路设计
(1)乘数和被乘数的输入模块:可分为两部分:十位输入和个位输入;十位输入的4位16进制码转换为8位2进制码后输入乘数和被乘数组成模块利用’&’与个位输入的4位16进制数组合而成.
模块图如下图所示:
此功能模块的仿真图如下图所示:
结果显示:当乘数十位(a1)输入4,个位(a0)输入7时,out1能输出4;
当被乘数十位(b1)输入8,个位(b0)输入5时,out2能输出85。

(2)两数相乘模块由一个程序组成,其乘法原理是:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为零0,左移后以全零相加,直至被乘数的最高位.
①VHDL程序为:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cf is
port ( clk : in std_logic;
a : in std_logic_vector(7 downto 0);
b : in std_logic_vector(7 downto 0);
outy : out std_logic_vector(15 downto 0));
end cf;
architecture art of cf is
signal qa : std_logic_vector(7 downto 0); signal qb : std_logic_vector(7 downto 0); begin
process(qa,qb,clk,a,b)
variable q0 : std_logic_vector(15 downto 0); variable q1 : std_logic_vector(15 downto 0); variable q2 : std_logic_vector(15 downto 0); variable q3 : std_logic_vector(15 downto 0); variable q4 : std_logic_vector(15 downto 0); variable y : std_logic_vector(15 downto 0); begin
qa<=a;
qb<=b;
q0:="0000000000000000";
q1:="00000000"&a;
if clk='1' then
if qb(0)='1' then y:=q1;
else y:=q0;
end if;
if qb(1)='1' then y:=y+(a&"0");
else y:=y+q0;
end if;
if qb(2)='1' then y:=y+(a&"00");
else y:=y+q0;
end if;
if qb(3)='1' then y:=y+(a&"000"); else y:=y+q0;
end if;
if qb(4)='1' then y:=y+(a&"0000"); else y:=y+q0;
end if;
if qb(5)='1' then y:=y+(a&"00000"); else y:=y+q0;
end if;
if qb(6)='1' then y:=y+(a&"000000"); else y:=y+q0;
end if;
if qb(7)='1' then y:=y+(a&"0000000"); else y:=y+q0;
end if;
end if;
outy<=y;
end process;
end art;
②模块图
③功能仿真图
结果显示:clk使能端为高电平有效,当输入的8位二进制数分别为7和14时,输出为98,改变a、b的输入值,同样得到正确的输出值,即实现了两数相乘的功能。

(3)乘积显示模块将输入的二进制数按千,百,十,个位分别转化为十进制数输出.其原理是,输入的乘积分别和8999,7999,…999做比较,千位显示输出分别显示9,8,…,1.其他位数原理相同.
模块图如图所示:
此功能模块的功能仿真图如下图所示:
结果显示:当模块输入的16位二进制数为8534时,输出也为8534.
3.软件设计
本设计是基于quartusII电路设计软件为平台,借用PC机和GW48EDA/SOPC实验箱为设计工具,运用VHDL硬件描述语言在Cyclone II系列的EP2C5T144C6芯片为设计对象实现的.
Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计
输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

VHDL是非常告诉集成电路硬件描述语言,是可以描述硬件电路的功能,信号连接关系及定时关系的语言,它能比电路原理图更有效地表示硬件电路的特性.使用VHDL语言,可以就系统的总体要求出发,自上至下地设计内容细化,最后完成系统硬件的整体设计.VHDL程序结构包括:实体,结构体,配置,包集合及库.主要特点是:a.功能强大,灵活性高;器件无关性;可移植性好;自顶向下的设计方法等.
利用quartusII软件设计的流程图3如图所示
4.系统测试
(1)经quartus软件综合,结果如图所示
(2)经quartus软件功能仿真,仿真结果如图所示:
(3)硬件验证:
目标芯片型号:EP2C5T144C8 电路模式:NO.1 (4)硬件引脚锁定方案:
结论:经过VHDL程序的设计到软件仿真,再到硬件测试成功,功能的实现,表明这次EDA课程设计非常成功,设计要求全部达成,达到了预期效果.
参考文献:<<EDA技术与VHDL>>第五版,清华大学出版社
附录
仪器设备清单: PC机
GW48EDA/SOPC实验箱。

相关主题