移位相加8位硬件乘法器电路电子课程设计.docx

上传人:b****5 文档编号:29572984 上传时间:2023-07-24 格式:DOCX 页数:17 大小:53.40KB
下载 相关 举报
移位相加8位硬件乘法器电路电子课程设计.docx_第1页
第1页 / 共17页
移位相加8位硬件乘法器电路电子课程设计.docx_第2页
第2页 / 共17页
移位相加8位硬件乘法器电路电子课程设计.docx_第3页
第3页 / 共17页
移位相加8位硬件乘法器电路电子课程设计.docx_第4页
第4页 / 共17页
移位相加8位硬件乘法器电路电子课程设计.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

移位相加8位硬件乘法器电路电子课程设计.docx

《移位相加8位硬件乘法器电路电子课程设计.docx》由会员分享,可在线阅读,更多相关《移位相加8位硬件乘法器电路电子课程设计.docx(17页珍藏版)》请在冰豆网上搜索。

移位相加8位硬件乘法器电路电子课程设计.docx

移位相加8位硬件乘法器电路电子课程设计

移位相加8位硬件乘法器电路电子课程设计

电子课程设计

---移位相加8位硬件乘法器电路设计

 

学院:

电子信息工程学院

班级:

通信071501

姓名:

许瀛

指导老师:

高文华

2009年12月

 

一.设计任务与要求…………………………………………………………2

 

二.总体框图……………………………………………………3

 

三.选择器件……………………………………………………4

 

四.功能模块…………………………………………………………………5

 

五.总体设计电路图………………………………………………………………15

 

六.心得体会…………………………………………………………………17

 

移位相加8位硬件乘法起

一、设计任务与要求

设计一个乘法器的控制模块,接受实验系统上的连续脉冲,当给定启动/清零信号后,能自动发出CLK信号驱动乘法运算,当8个脉冲后自动停止。

设计一个纯组合电路的8X8等于16位的乘法器(选择不同的流水线方式),具体说明并比较这几种乘法器的逻辑资源占用情况和运行速度情况。

二、总体框图

控制模块

16位锁存器/右移寄存器

分段模块

8位右移寄存器

1位乘法器

8位加法器

7段数码显示译码器

1、模块功能

A、运算控制模块:

控制电路的起始和终止。

B、8位右移寄存器:

在时钟脉冲的作用下,高位寄存器的数码送给低位寄存器,作为低位寄存器的次态输出;每输入一个时钟脉冲,寄存器的数据就顺序向右移动一位。

C、1位乘法器:

D、8位加法器:

E、16位锁存器/右移寄存器:

此设计是由八位加法器构成的以时序逻辑方式设计的八位乘法器,它的核心器件是八位加法器,所以关键是设计好八位加法器。

 

方案:

由两个四位加法器组合八位加法器,其中四位加法器是四位二进制并行加法器,它的原理简单,资源利用率和进位速度方面都比较好。

综合各方面的考虑,决定采用方案二。

2、设计思路:

纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器,由八位加法器构成的以时序逻辑方式设计的八位乘法器,具有一定的实用价值,而且由FPGA构成实验系统后,可以很容易的用ASIC大型集成芯片来完成,性价比高,可操作性强。

其乘法原理是:

乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。

三、选择器件

1、配有QuartusII软件的计算机一台;

2、选用FPGA芯片,如:

FLEX10K系列的EPF10K10LC84-4;

(1)、FPGA适配器板:

标准配置是EPF10K10接口板;

(2)、下载接口是数字芯片的下载接口(JTAG),主要用于FPGA芯片的数据下载;

(3)、拨码开关、按键开关和LED灯;

(4)、时钟源。

四、功能模块

1、乘法器等层设计模块

VHDL程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

Useieee.std_logic_unsigned.all;

ENTITYMULTI8X8IS--8位乘法器顶层设计

PORT(CLKk,hkey,START:

INSTD_LOGIC;

A,B:

INSTD_LOGIC_VECTOR(7DOWNTO0);

Mmax:

outSTD_LOGIC_VECTOR(3DOWNTO0);

ARIEND:

OUTSTD_LOGIC;

DOUT:

OUTSTD_LOGIC_VECTOR(15DOWNTO0));

ENDMULTI8X8;

ARCHITECTUREstrucOFMULTI8X8IS

COMPONENTARICTL

PORT(CLK:

INSTD_LOGIC;START:

INSTD_LOGIC;

CLKOUT:

OUTSTD_LOGIC;RSTALL:

OUTSTD_LOGIC;

ARIEND:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTANDARITH

PORT(ABIN:

INSTD_LOGIC;

DIN:

INSTD_LOGIC_VECTOR(7DOWNTO0);

DOUT:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDCOMPONENT;

COMPONENTADDER8B

PORT(CIN:

INSTD_LOGIC;

A,B:

INSTD_LOGIC_VECTOR(7DOWNTO0);

S:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

COUT:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTSREG8B

PORT(CLK:

INSTD_LOGIC;LOAD:

INSTD_LOGIC;

DIN:

INSTD_LOGIC_VECTOR(7DOWNTO0);

QB:

OUTSTD_LOGIC);

ENDCOMPONENT;

COMPONENTREG16B

PORT(CLK:

INSTD_LOGIC;CLR:

INSTD_LOGIC;

D:

INSTD_LOGIC_VECTOR(8DOWNTO0);

Q:

OUTSTD_LOGIC_VECTOR(15DOWNTO0));

ENDCOMPONENT;

SIGNALGNDINT,INTCLK,RSTALL,NEWSTART,QB,clk:

STD_LOGIC;

SIGNALANDSD:

STD_LOGIC_VECTOR(7DOWNTO0);

SIGNALcount,maxx:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALDTBIN:

STD_LOGIC_VECTOR(8DOWNTO0);

SIGNALDTBOUT:

STD_LOGIC_VECTOR(15DOWNTO0);

BEGIN

DOUT<=DTBOUT;GNDINT<='0';

PROCESS(CLK,START)

BEGIN

IFSTART='1'THENNEWSTART<='1';

ELSIFCLK='0'THENNEWSTART<='0';ENDIF;

ENDPROCESS;

Process(hkey)

Begin

If(hkey'eventandhkey='1')thenmaxx<=maxx+'1';

Endif;

Endprocess;

Mmax<=maxx;

Process(clkk)

Begin

Ifclkk'eventandclkk='1'then

If(count

Elsecount<="0000";clk<=notclk;

Endif;

Endif;

Endprocess;

U1:

ARICTLPORTMAP(CLK=>CLK,START=>NEWSTART,--FORTHEBETTER

CLKOUT=>INTCLK,RSTALL=>RSTALL,ARIEND=>ARIEND);

U2:

SREG8BPORTMAP(CLK=>INTCLK,LOAD=>RSTALL,DIN=>B,QB=>QB);

U3:

ANDARITHPORTMAP(ABIN=>QB,DIN=>A,DOUT=>ANDSD);

U4:

ADDER8BPORTMAP(CIN=>GNDINT,A=>DTBOUT(15DOWNTO8),B=>ANDSD,

S=>DTBIN(7DOWNTO0),COUT=>DTBIN(8));

U5:

REG16BPORTMAP(CLK=>INTCLK,CLR=>RSTALL,D=>DTBIN,Q=>DTBOUT);

ENDstruc;

 

2、8位右移寄存器

(1)模块图形符号及其逻辑功能描述

图1

(2)VHDL程序

LIBRARYIEEE;--8位右移寄存器

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYSREG8BIS

PORT(CLK,LOAD:

INSTD_LOGIC;

DIN:

INSTD_LOGIC_VECTOR(7DOWNTO0);

QB:

OUTSTD_LOGIC);

ENDSREG8B;

ARCHITECTUREbehavOFSREG8BIS

SIGNALREG8:

STD_LOGIC_VECTOR(7DOWNTO0);

BEGIN

PROCESS(CLK,LOAD)

BEGIN

IFCLK’EVENTANDCLK=’1’THEN

IFLOAD=’1’THENREG8<=DIN;

ELSEREG8(6DOWNTO0)<=REG8(7DOWNTO1);

ENDIF;

ENDIF;

ENDPROCESS;

QB<=REG8(0);--输出最低位

ENDbehav;

(3)仿真结果及其分析

图2

仿真分析:

在时钟脉冲的作用下,高位寄存器的数码送给低位寄存器,作为低位寄存器的次态输出;每输入一个时钟脉冲,寄存器的数据就顺序向右移动一位。

3、8位加法器

(1)模块图形符号及其逻辑功能描述

图3

(2)VHDL程序

LIBRARYIEEE;--8位加法器

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYADDER8BIS

PORT(CIN:

INSTD_LOGIC;

A,B:

INSTD_LOGIC_VECTOR(7DOWNTO0);

S:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

COUT:

OUTSTD_LOGIC);

ENDADDER8B;

ARCHITECTUREbehavOFADDER8BIS

SIGNALSINT,AA,BB:

STD_LOGIC_VECTOR(8DOWNTO0);

BEGIN

AA<='0'&A;BB<='0'&B;SINT<=AA+BB+CIN;S<=SINT(7DOWNTO0);

COUT<=SINT(8);

ENDbehav;

(3)仿真结果及其分析

图5

仿真分析:

输入10000000与00000001相加得到10000001仿真正确

4、1位乘法器

(1)模块图形符号及其逻辑功能描述

图6

(2)VHDL程序

LIBRARYIEEE;--1位乘法器

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYANDARITHIS

PORT(ABIN:

INSTD_LOGIC;

DIN:

INSTD_LOGIC_VECTOR(7DOWNTO0);

DOUT:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDANDARITH;

ARCHITECTUREbehavOFANDARITHIS

BEGIN

PROCESS(ABIN,DIN)

BEGIN

FORIIN0TO7LOOP--循环,完成8位与1位运算

DOUT(I)<=DIN(I)ANDABIN;

ENDLOOP;

ENDPROCESS;

ENDbehav;

(3)仿真结果及其分析

 

图7

仿真分析:

当ABIN为高电平时输出计算结果,当它为低电平时清零。

仿真分析正确。

5、16位锁存器/右移寄存器

(1)模块图形符号及其逻辑功能描述

图8

(2)VHDL程序

LIBRARYIEEE;--16位锁存器/右移寄存器

USEIEEE.STD_LOGIC_1164.ALL;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYREG16BIS

PORT(CLK,CLR:

INSTD_LOGIC;

D:

INSTD_LOGIC_VECTOR(8DOWNTO0);

Q:

OUTSTD_LOGIC_VECTOR(15DOWNTO0));

ENDREG16B;

ARCHITECTUREbehavOFREG16BIS

SIGNALR16S:

STD_LOGIC_VECTOR(15DOWNTO0);

BEGIN

PROCESS(CLK,CLR)

BEGIN

IFCLR='1'THENR16S<="0000000000000000"

;--时钟到来时,锁存输入值,并右移低8位

ELSIFCLK'EVENTANDCLK='1'THEN

R16S(6DOWNTO0)<=R16S(7DOWNTO1);--右移低8位

R16S(15DOWNTO7)<=D;--将输入锁存到高8位

ENDIF;

ENDPROCESS;

Q<=R16S;

ENDbehav;

(3)仿真结果及其分析

图9

仿真分析:

输入110010101移位后得到110010*********仿真正确

6、运算控制模块

(1)模块图形符号及其逻辑描述

图10

(2)VHDL程序

LIBRARYIEEE;--运算控制模块

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYARICTLIS

PORT(CLK,START:

INSTD_LOGIC;

CLKOUT,RSTALL,ARIEND:

OUTSTD_LOGIC);

ENDARICTL;

ARCHITECTUREbehaveOFARICTLIS

SIGNALCNT4B:

STD_LOGIC_VECTOR(3DOWNTO0);

BEGIN

RSTALL<=START;

PROCESS(CLK,START)

BEGIN

IFSTART='1'THENCNT4B<="0000";

ELSIFCLK'EVENTANDCLK='1'THEN

IFCNT4B<8THENCNT4B<=CNT4B+1;ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(CLK,CNT4B,START)

BEGIN

IFSTART='0'THEN

IFCNT4B<8THENCLKOUT<=CLK;ARIEND<='0';

ELSECLKOUT<='0';ARIEND<='1';ENDIF;

ELSECLKOUT<=CLK;ARIEND<='0';

ENDIF;

ENDPROCESS;

ENDbehave;

(3)仿真结果及其分析

 

图11

仿真分析:

当开始START信号发出后,RSTALL重置,CLKOUT才原样输出CLK信号,起到控制器件工作的作用!

仿真正确!

五、总体设计电路图

图12

1、工作原理:

本乘法器由五个模块组成,其中ARICTL是乘法运算控制电路,它的START信号上的上跳沿与高电平有2个功能,即16位寄存器清零和被乘数A[7...0]]向移位寄存器SREG8B加载;它的低电平则作为乘法使能信号,乘法时钟信号从ARICTL的CLK输入。

当被乘数被加载于8位右移寄存器SREG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。

当为1时,一位乘法器ANDARITH打开,8位乘数B[7..0]在同一节拍进入8位加法器,与上一次锁存在16位锁存器REG16B中的高8位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。

而当被乘数的移出位为0时,一位乘法器全零输出。

如此往复,直至8个时钟脉冲后,由ARICTL的控制,乘法运算过程自动中止,ARIEND输出高电平,乘法结束。

此时REG16B的输出即为最后的乘积

2、仿真结果及其分析

图13

仿真分析:

两个十六进制数FD和9F相乘,当开始脉冲加进时,乘法器开始工作,经过八个时钟信号的上升沿,计算出结果!

理论上应等于9D23,实验结果也等于9D23,与理论吻合,仿真正确!

3、管脚分配图

图14

4、硬件验证

(1)试验箱电路板上的连线

(2)设计验证情况

K0~K7分别控制A0~A7,A0为低位;K8~K15分别控制B0~B8,B0为低位。

L0~L15分别为S70~S715的输出,S70为低位;CLK为时钟信号由CLK0提供;START为开始信号由S0控制;ARIEND为运算结束信号,由LED0显示。

验证:

编译,综合后向目标苡片下载适配后的逻辑设计文件,操作步骤省略。

下载适配后,

1>令K0~K15全部置零,即“0x0”,结果显示“0000000000000000”,理论结果也为“0000000000000000”,验证正确;

2>令K0~K15全部置1,即“FFxFF”,结果显示“1111111000000001”,理论结果也为“1111111000000001”,验证正确;

3>令K7~K0置数“10101010”,K15~K8置数“11011011”,即“AAxDB”,结果显示“1001000101101110”,理论结果也为“1001000101101110”,验证正确。

综上所述,硬件验证正确。

六、心得体会

通过电子设计的数字部分EDA设计,我们掌握了系统的数字电子设计的方法,也知道了实验调试适配的具体操作方法。

在设计过程中,我们遇到了各种问题,在李老师的指导下和我们自己的努力,克服了各种问题,最后得到了成功。

但是我也发现了一些问题,我们无法解决。

如:

在ARICTL控制器模块中有一个警告,还有在适配后得到频率高的执行速度还要慢一些等等。

总之,这次设计使我掌握了很多有用的经验,也学到了很多在书本上学不到知识,为以后的学习和工作打下坚实的基础。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1