8位二进制乘法器设计报告

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

EDA课程设计报告

------8位二进制乘法器设计

班级:

学号:

姓名:

目录

一.八位乘法器的设计要求与设计思路••

2.1 设计目的••

2.2 设计要求••

二.八位乘法器的综合设计••

3.1 八位乘法器功能••

3.2 八位乘法器设计方案••

3.3 八位乘法器各功能模块VHDL描述及仿真图形••

3.4 八位乘法器顶层模块VHDL设计及下载验证••

心得体会••

参考文献••

一、八位乘法器的设计要求与设计思路

1.1实验目的

学习并掌握应用8位二进制乘法器的原理、设计、分析和测试方法

1.2实验内容

利用移位相加原理设计一个8位二进制乘法器。

1.3实验要求

用VHDL编写代码,下载验证,并用8段数码管显示乘数和乘积。

二、八位乘法器的综合设计

2.1 八位乘法器功能

通过调节实验板,输入8位二进制的A和B,八位乘法器能实现其乘积,并在数码管上面显示出来其结果。

2.2乘法器设计方案

该乘法器是有由8 位加法器构成的以时序方式设计的8 位乘法器,采用逐项移位相加的方法来实现相乘。用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。直到所有的部分积都被加过一次。例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为11010101和10010011,其计算过程如下图(a)下面分解8 位乘法器的层次结构,分为以下4 个模块:

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

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

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

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

按照上述算法,可以得到下图所示之框图和简单流程图。图中8 位移位寄存器reg_8 存放乘数a,从a 的最低位开始,每次从reg_8 中移出一位,送至1×8 位乘法器multi_1 中,同时将被乘数加至multi_1 中,进行乘法运算,运算的结果再送至8 位加法器adder_8 中,同时取出16 位移位寄存器reg_16 的高8 位与之进行相加,相加后结果即部分积存入reg_16 中,进行移位后并保存。这样经过8 次对乘数a 的移位操作,所以的部分积已全加至reg_16 中,此时锁存器reg_16 存放的值即所要求的积。

图(a )

简单流程图

(1)8位寄存器reg_8 的设计

8 位移位寄存器是在时钟(r8_clk'event and r8_clk='1')信号作用下,当r8_clr='1'时,将8 位乘数加载进入;而当r8_clr='0'时,对数据进行移位操作,同时定义一个信号reg8 用来装载新数据及移位后的操作数,完成这些操作后,寄存器的最低位r8_in(0)传送给r8_out 输出。

该模块元件的程序如下:

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity reg_8 is

port(r8_clk,r8_clr:in std_logic;

r8_in:in std_logic_vector(7 downto 0); r8_out:out std_logic);

end entity reg_8;

architecture reg8a of reg_8 is

signal r8:std_logic_vector(7 downto 0); begin

process(r8_clk,r8_clr) is

begin

if(r8_clk'event and r8_clk='1') then

if(r8_clr='1') then

r8<=r8_in;

else

r8(7)<=r8_in(0);

r8(6 downto 0)<=r8(7 downto 1);

end if;

end if;

end process;

r8_out<=r8(0);

end architecture reg8a;

(2)8 位加法器adder_8 的设计

1.该加法器由两个四位二进制加法器组成。其中设计四位二进制加法器时,为了避免加法运算时产生溢出,故定义了三个信号量ss,aa,bb,将加数a4,b4分别与0 连接后赋值给aa4,bb4,形成5 位二进制数,然后aa4,bb4 与进位位 cin4相加赋值给sel,最后将sel 的低四位赋值给和s4,同时将sel 的最高位送给cout4 输出。

该模块程序如下:

library ieee;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity adder_4 is

port(a4,b4:in std_logic_vector(3 downto 0);

cin4:in std_logic;

s4:out std_logic_vector(3 downto 0);

cout4:out std_logic);

end entity adder_4;

architecture adder4a of adder_4 is

signal aa4,bb4,s5:std_logic_vector(4 downto 0);

signal ccin4:std_logic_vector(4 downto 0);

begin

process(a4,b4,cin4) is

begin

aa4<='0' & a4;

bb4<='0' & b4;

ccin4<="0000" & cin4;

s5<=aa4+bb4+ccin4;

s4<=s5(3 downto 0);

cout4<=s5(4);

end process;

end architecture adder4a;

2.设计8 位加法器时,采用例化语句,定义信号量sel,将4位加法器U1的s4 赋

相关文档
最新文档