8位十进制乘法器

  • 格式:doc
  • 大小:1.72 MB
  • 文档页数:31

下载文档原格式

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

XX 学院课程论文

(2012 -2013学年第一学期)

课程论文题目:8位乘法器的设计学生姓名:

EDA期末考试

设计报告

设计题目:8位乘法器的设计学校:XX学院

系别:电子信息工程系

班别:10电本2班

姓名:XXX

学号:

组员:

指导老师:

摘要:本设计通过对一个8×8的二进制乘法器的设计。在此次设计

中该乘法器是由十进制计数器、BCD码(输入)转二进制码、8位寄

存器、8位加法器、 16位寄存器、8x1乘法器、二进制码转BCD码

(输出显示)7个模块构成的以时序方式设计的8位乘法器,采用逐

项移位相加的方法来实现相乘。设计中乘数,被乘数的十位和个位

分别采用cnt10(十进制加法器)来输入,经拼接符“&”拼接成8

位BCD码,再由BCD_B(BCD码转二进制码)转化成二进制码后计算,

计算结果由B_BCD(二进制转BCD码)转化成BCD码输入到数码管中显

示。

关键词:VHDL语言、十进制计数器、BCD码转二进制码、8位寄

存器、8位加法器、16位寄存器、8x1乘法器、二进制转BCD码

一、设计功能要求

能设置输入两个乘数(十进制),按操作键后以十进制的方式显示乘积。二、设计原理

本设计中该乘法器是由十进制计数器,BCD码(输入)转二进制码,8位寄存器,8位加法器, 16位寄存器,8x1乘法器,二进制码转BCD码(输出显示)7个模块构成的以时序方式设计的8位乘法器,采用逐项移位相加的方法来实现相乘。设计中乘数,被乘数的十位和个位分别采用cnt10(十进制加法器)来输入,经拼接符“&”拼接成8位BCD码,再由BCD_B(BCD码转二进制码)

转化成二进制码后计算,计算结果由B_BCD(二进制转BCD码)转化成BCD码输入到数码管中显示。使用中只要输入乘数,被乘数,按下键3(脉冲)就可以直接得出结果,显示结果稳定。可以满足两位十进制乘法的计算。

三、整体结构图:输出高八位

四、设计步骤:

4.1 利用VHDL语言来实现各个结构模块,其实现的用途及功能如下:

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

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

3. 8位右移寄存器模块:将乘法运算中的被乘数加载于其中,同时进行乘法

运算的移位操作。

4. 8位加法器模块:进行操作数的加法运算。

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

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

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

4.2 利用VHDL语言来实现各个结构模块如下:

4.2.1十进制加计数器设计:

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

Library ieee; --使用ieee设计库--0到9计数器

Use ieee.std_logic_unsigned.all; - --允许用户对操作符重新定义

Use ieee.std_logic_1164.all; -- 使用std_logic_1164 程序包

Entity cnt10 is -- 实体名cnt10

Port (clk,clr: in std_logic; --clk时钟频率,rst清零

q: out std_logic_vector(3 downto 0)); --四位输出

end cnt10;

architecture behav of cnt10 is -- 结构体名behav

begin

process(clk,clr) –-时钟,清零为敏感信号

variable cqi: std_logic_vector(3 downto 0); --定义计数器

begin

if clr='1' then cqi:="0000"; --如果clr='1',则cqi:="0000"

elsif clk'event and clk='1' then----否则,若clk为上升沿,即上升沿触发if cqi=9 then cqi:="0000";--如果cqi=9,则cqi:="0000"

else cqi:=cqi+1; --否则cqi自加1

end if;

end if;

q<=cqi; 输出

end process;

end behav;

编译cnt10.vhd生成原理图文件,如下图:

图1 cnt10封装图

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

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

Library ieee; --使用ieee设计库--(0到99)BCD码转二进制码Use ieee.std_logic_unsigned.all;-- 允许用户对操作符重新定义

Use ieee.std_logic_1164.all; -- 使用std_logic_1164 程序包

Entity BCD_B is --实体名BCD_B

Port ( a: in std_logic_vector(7 downto 0); --输入8位

q: out std_logic_vector(7 downto 0)); --输出8位

end BCD_B;

architecture behav of BCD_B is --结构体名behav

signal a1,a2,a3,a4,cq: std_logic_vector(7 downto 0);--定义四个内部信号

begin