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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程名称电子设计自动化

题目十六位硬件乘法器电路

院系班级信息学院11电子信息工程A班姓名

学号

指导老师凌朝东

2013 年 12 月 5 日

题目名称:

十六位硬件乘法器电路

摘要:

设计一个16位硬件乘法器电路.要求2位十进制乘法,能用LED数码管同时显示乘数,被乘数和积的值.本设计利用Quartus II软件为设计平台,通过移位相加的乘法原理:即从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。经软件仿真和硬件测试验证后,以达到实验要求。

目录

1.题目名称 (2)

2.摘要 (2)

3.目录 (3)

4.正文 (4)

4.1. 系统设计 (4)

4.1 设计要求 (4)

4.2 系统设计方案 (4)

4.2 单元电路设计 (4)

4.2.1十进制计算模块 (5)

4.2.2 BCD码转二进制模块 (5)

4.2.3 8位右移寄存器模块 (6)

4.2.4 8位加法器模块 (7)

4.2.5 1乘法器multi_1模块 (7)

4.2.6 16位移位寄存器reg_16模块 (8)

4.2.7 16位二进制转BCD码B_BCD模块 (9)

4.2.8 8位乘法器multi_8x8顶层设计 (10)

4.3 软件设计 (12)

4.3.1设计平台和开发工具 (12)

4.3.2程序流程方框图 (13)

4.4 系统测试 (14)

4.1仿真分析 (14)

4.2硬件验证 (15)

5. 结论 (15)

6. 参考文献 (15)

7. 附录 (15)

4.正文

4.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.使得减少了无用码的输入.

两数相乘的方法很多,可以用移位相加的方法,也可以将乘法器看成计数器,乘积的初始值为零,每一个时钟周期将乘数的值加到积上,同时乘数减一,这样反复执行,直到乘数为零.本设计利用移位相加的方法使得程序大大简化.

系统总体电路组成原理图如下图所示:

4.2单元电路设计

下面分解8位乘法器的层次结构,分为以下7个模块:

1. 十进制计算模块:使用4个十进制计数模块,输入乘数的十位个位,被乘数的十位个位。

2. BCD码转二进制模块:实现将输入的8位BCD码转化成二进制

3. 右移寄存器模块:这是一个8位右移寄存器,可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。

4. 加法器模块:这是一个8位加法器,进行操作数的加法运算。

5. 1位乘法器模块:完成8位与1位的乘法运算。

6. 锁存器模块:这是一个16位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成输入数值的锁存与移位。

7. 二进制转BCD码模块:将16位寄存器的值(积)转化成BCD码,配合数码管显示

4.2.1 十进制加计数器设计

十进制计数器在每个时钟来临时计数,clk=1时清零,用于输入乘数,被乘数的个位,十位

Library ieee; --0到9计数器

Use ieee.std_logic_unsigned.all;

Use ieee.std_logic_1164.all;

Entity cnt10 is

Port (clk,clr: in std_logic;

q: out std_logic_vector(3 downto 0));

end cnt10;

architecture behav of cnt10 is

begin

process(clk,clr)

variable cqi: std_logic_vector(3 downto 0);

begin

if clr='1' then cqi:="0000";

elsif clk'event and clk='1' then

if cqi=9 then cqi:="0000";

else cqi:=cqi+1;

end if;

end if;

q<=cqi;

end process;

end behav;

4.2.2 BCD码转二进制码BCD_B的设计

将十进制计数器产生的十位和个位合并后,为BCD码,而计算时使用二进制码计算,所以采用该模块来转

相关文档
最新文档