EDA实习之8位乘法器设计.docx

上传人:b****5 文档编号:12390225 上传时间:2023-04-18 格式:DOCX 页数:19 大小:160.71KB
下载 相关 举报
EDA实习之8位乘法器设计.docx_第1页
第1页 / 共19页
EDA实习之8位乘法器设计.docx_第2页
第2页 / 共19页
EDA实习之8位乘法器设计.docx_第3页
第3页 / 共19页
EDA实习之8位乘法器设计.docx_第4页
第4页 / 共19页
EDA实习之8位乘法器设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

EDA实习之8位乘法器设计.docx

《EDA实习之8位乘法器设计.docx》由会员分享,可在线阅读,更多相关《EDA实习之8位乘法器设计.docx(19页珍藏版)》请在冰豆网上搜索。

EDA实习之8位乘法器设计.docx

EDA实习之8位乘法器设计

学号:

常州大学

EDA技术

课程设计报告

题目:

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

学生:

朱京

学院係):

信息科学与工程学院专业班级:

电子102

指导教师:

李文杰

一、设计题目移位相加8位硬件乘法器设计

二、设计背景

纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器。

基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。

由8位加法器构成的以时序逻辑方式设汁的8位乘法器,具有一定的实用价值。

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

三、设计内容及要求

设计内容:

设计移位相加8位硬件乘法器,完成8位被乘数AE7..0]和8位乘数B[7..0]的乘法运算,得到16位的乘法运算输出D0UT[15..0]。

(1)设汁8位移位寄存器SREG8B,当被乘数加载于SREG8B后,随时钟节拍,最低位在前,由低位至高位逐位移出。

(2)设讣与门,根据移位寄存器输出是否为1,决定输入加法器的是8位乘数还是全零。

(3)设计8位加法器,将8位乘数或全零与16位锁存器的高8位进行相加。

(4)设计16位锁存器REG16B,在时钟到来时,锁存来自加法器的输岀至高8位,并右移低8位。

要求:

1)根据系统设计要求,釆用自顶向下的方法,划分系统主要模块,画出整体设计原理框图。

2)根据工作原理、用硬件描述语言对设计内容实现,列出设计程序清单,给出仿真波形图和调试中存在问题及解决方法。

3)设计内容下载至口标芯片,在EDA的GW48型实验箱进行功能验证。

4)谈谈该课题的课程设计中遇到的问题,获得哪些技能和体会,以及建设性意见。

四、设计步骤和安排:

(1)题LI安排;图书馆查相关资料;

(2)设计原理研究,总体设计;

(3)各主要模块的VHDL设计。

各模块的设计仿真分析。

(4)完成系统顶层文件设计,系统总体功能的仿真分析。

(5)将设计内容进行硬件配置,在GW48实验箱上进行调试。

(6)撰写课程设计报告、答辩并提交报告。

1产品设计介绍1

概念:

1

意义:

1

主要功能:

1

设计平台:

1

硬件平台:

1

软件平台:

1

2方案设计及实现2

系统实现原理2

设计步骤2

系统介绍:

2

原理框图:

2

主要模块之8位右移寄存器模块的设计4

源代码:

4

仿真图:

5

仿真分析:

5

主要模块之8位加法寄存器模块的设计6

源代码:

6

仿真图:

6

主要模块之选通与门模块的设计7

源代码:

7

仿真图:

8

仿真分析:

8

主要模块之16位锁存器的设计9

仿真图:

10

仿真分析:

10

系统总体仿真11

仿真图:

11

仿真分析:

11

3硬件调试11

调试方法:

11

调试步骤:

11

调试结果及分析:

12

4心得体会及总结12

5参考文献12

6附录13

引脚锁定13

功能扩展13

1产品设计介绍

概念:

该乘法器是由8位加法器构成的以时序方式设计的8位乘法器。

意义:

纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器°基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。

由8位加法器构成的以时序逻借方式设汁的8位乘法器,具有一左的实用价值。

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

主要功能:

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

设计平台:

硬件平台:

GW48EDA实验系统

软件平台:

MAX+plusII;Windows?

2方案设计及实现

系统实现原理

在下图中,START信号的上跳沿及其高电平有两个功能,即16位寄存器清零和被乘数A17..0]向移位寄存器SREG8B加载;它的低电平则作为乘法使能信号。

CLK为乘法时钟信号。

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

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

而当被乘数的移出位为0时,与门全零输出。

如此往复,直至8个时钟脉冲后,乘法运算过程中止。

此时SREG16B的输出值即为最后的乘积。

此乘法器的优点是节省芯片资源,它的核心元件只是一个8位加法器,其运算速度取决于输入的时钟频率。

本设计釆用层次描述方式,且用原理图输入和文本输入混合方式建立描述文件。

下图是乘法器顶层图形输入文件,它表明了系统山8位右移寄存器(SREG8B)、8位加法器(ADDER8)、选通与门模块(ANDER)和16位锁存器(SREG16B)所组成,它们之间的连接关系如下图所示。

设计步骤

系统介绍:

此移位相加8位硬件乘法器分为四大部分。

第一部分:

8位寄存器设计

第二部分:

选通与门设计

第三部分:

8位带进位加法器

第四部分:

16位锁存器

原理框图:

移位相加硬件乘法器电路原理图

主要模块之8位右移寄存器模块的设计

模块说明:

输入为elk、load和din,输出为q;模块功能:

模块的主要功能是数据右移。

8位右移寄存器工作流程图

开始

装载新数据数据右移

输出最低位

结束

源代码:

libraryieee;

useSREG8Bis

port(elk,load:

instd_logic;

din:

instd_logic_vector(7downto0);q:

outstd_logic):

endSREG8B;

architecturebehaveofSREG8Bis

signalreg8:

std_logic_vector(7downto0):

begin

process(load,elk)

begin

if(elk5eventandelk二T‘)then辻(load=,O')then

reg8<=din;

else

reg8(6downto0)<=reg8(7downto1);endif:

endif;

endprocess;

q<=reg8(0);

endbehave;

仿真图:

仿真分析:

在上升沿脉冲到来且load为0的时候,装载新数据,并输出din(0);在load为1的时候,进行数据右移,并输出din(0)。

主要模块之8位加法寄存器模块的设计

模块说明:

输入为d、b,输岀为q:

模块功能:

模块的主要功能是实现两个8位数的加法运算

8位加法寄存器的工作流程图

 

源代码:

libraryieee;

useADDER8is

port(a:

instd_logic_vector(7downto0):

b:

instd_logic_vector(7downto0);q:

outstd_logic_vector(8downto0));

endADDER8:

architecturebehaveofADDER8is

begin

q<=a+b;

endbehave:

仿真图:

Name.^Value.f

100.0n$

£

1V

10001111

-

11110000

-

101111111

erOWalaa[7..0]

-

10001111

0/de(0|gcp[2.2]

B0

0

$oddcrB-scfWaveformxdi:

or

Ref:

|O.Ons11』创Time:

710nsInterval:

卩1.阮

仿真分析:

这是一个8位带进位加法器,输出q为输入a与输入b的和,最高位q(8)是进位位

主要模块之选通与门模块的设计

模块说明:

输入为dbin和din,输出为q:

模块功能:

模块的主要功能是完成8位与1位运算。

源代码:

libraryieee;

useANDERis

port(abin:

instd_logic;

din:

instd_logic_vector(7downto0):

q:

outstd_logic_vector(7downto0)):

endANDER;

architecturebehaveofANDERis

begin

process

begin

if(abin二i)thenq<=din;

else

qU'00000000";

endif:

endprocess;

endbehave:

仿真图:

.A

^arder.scf-W^efcrmEditor

Ref.StO.Ons

♦hlTime:

Interal:

•ISI.fe

4

Name:

Value:

80Uiis

i

nrabin

0

衫血

-

mmw

帚q

-

mm

mmw

"3

I

仿真分析:

在abin为T的时候,输出q二din;在abin为©的时候,输出q二“00000000”。

主要模块之16位锁存器的设计

模块说明:

输入为elk、clr和din,输出为q:

模块功能:

模块的主要功能是将数据锁存。

16位锁存器工作流程图

源代码:

libraryieee;

useSREG16Bis

port(elk,clr:

instd_logic;

din:

instd_logic_vector(8downto0);q:

outstd_logic_vector(15downto0));

endSREG16B;

architecturebehaveofSREG16Bissignalregl6:

std_logic_vector(15downto0);

begin

process(clr,elk)

begin

辻(clr二'O')then

regl6〈二"0000000000000000";

elsif(clk^eventandelk二T‘)thenregl6(15downto7)<=din;

regl6(6downto0)〈二regl6(7downto1);endif:

endprocess;

q<=regl6;

endbehave:

仿真图:

 

仿真分析:

当clr为'0'的时候,输出清零;在clr为'1'且上升沿脉冲到来的时候,输入din锁存至输出的高9位且将低8位右移一位。

系统总体仿真

仿真图:

仿真分析:

将输入A设定为21,输入B设定为32,按下START(键8),连续来8个脉冲后,输出为0672,与理论计算结果相同。

3硬件调试

调试方法:

在GW48EDA实验箱上选择电路模式1,8位输入A、B分别锁定键1、2、3、4,START信号锁定键&16位输出锁定数码管5、6、7、8,CLK信号选择2KHz。

调试步骤:

1.输入A设定为21,输入B设定为32;

选择2KHz,按下START(键8);

3•观察数码管5、6、7、8o

调试结果及分析:

结果:

在第8个脉冲到来时,数码管上显示0672;

分析:

与仿真波形的结果相同,更改输入A,B的数据,数码管的输出结果与仿真波形都相同,达到设计要求。

4心得体会及总结

总结

在长达十天的课程设计当中,我更加熟悉了MAX+plusII软件的使用,比如说实体、结构体的作用、保存的时候不能还有中文及文件名要和实体名相同等。

加深了对VHDL编程语言的理解,尤其是本课题中锁存器的设计让我更清楚进程、变量.信号的使用及它们之间的区别。

EDA这门课程还是非常重要的。

通过这次EDA课程设计,意识到了其重要性。

当然,团队合作也很重要,非常感谢其他组员的配合,才能让这次的EDA课程设计快速的完成。

遇到的问题

10

在调试过程中,其输出结果与仿真波形总是不一致,但是一直找不到错误。

后来,想到了原因是因为引脚锁定时锁定错误。

一个非常低级的错误,让我多走了一些弯路。

提醒自己在做各种事情的时候要小心谨慎,不要粗心大意。

5参考文献

(1)朱正伟编着《EDA基础及应用》

[2]韩学超,张小鸣编着《EDA技术开发系统GW48实验指导书》

6附录

引脚锁定

选择器件FLEXEPF10K10-PLCC84-4

名称

引脚号

名称

引脚号

A(0)

5

B(0)

17

A(l)

6

B(l)

18

A

(2)

7

B

(2)

19

A(3)

8

B(3)

21

A(4)

9

B(40

22

A(5)

10

B(5)

23

A(6)

11

B(6)

24

A(7)

16

B(7)

25

START

81

CLK

43

DOUT(0)

27

DOUT(l)

28

DOUT

(2)

29

DOUT(3)

30

DOUT(4)

35

DOUT(5)

36

DOUT(6)

37

DOUT(7)

38

DOUT(8)

39

DOUT(9)

47

DOUT(10)

48

DOUT(11)

49

DOUT(12)

50

DOUT(13)

51

DOUT(14)

52

DOUT(15)

53

11

功能扩展以下内容是为了显示本次课程设讣的题l_T4:

MUTIPLYS采用verilog语言。

代码如下:

modulelcd(clk,rs,rw,en,dat);

inputelk;

output[7:

0]dat;

outputrs,rw,en;

rege;

reg[7:

0]dat;

regrs;

reg[15:

0]counter;

set0=4,hO;setl二4’hl;set2二4'h2;

set3=4'h3;

dat0=4Jh4;dat1二4'h5;

dat2=4,h6;dat3=4Jh7;

dat4=4'h8;

dat5=4?

h9;

dat6=4JhA;

dat7=4'hB;

dat8=4'hC;

dat9=4JhD;dat10二4'hE;datll二5'hlO

parameternul=4,hF;always@(posedgeelk)begincounter=counter+l;if(counter==16,hOOOf)clkr二、clkr;

end

always@(posedgeclkr)begin

current二next;

case(current)

setO:

beginrs<=0;dat〈二8'h30;next<=setl;end

setl:

beginrs<=0;dat〈二8'hOc;next<=set2;end

12

set2:

begin

rs<=0

dat<

set3:

begin

rs<=0

dat<

datO:

begin

rs<=l

dat<

datl:

begin

rs<=l

dat<

dat2:

begin

rs<=l

dat<

dat3:

begin

rs<=l

dat<

dat4:

begin

rs<=l

dat<

dat5:

begin

rs<=l

dat<

dat6:

begin

rs<=l

dat<

dat7:

begin

rs<=l

dat<

dat8:

begin

rs<=l

dat<

dat9:

begin

rs<=l

dat<

"IT

"L"

〃〃

next〈二set3;

end

next<=datO;

end

next〈二datl;

end

next<=dat2;

end

next〈二dat3;

end

next〈二dat4;

end

next〈二dat5;

end

next〈二dat6;

end

next<=dat7;

end

next〈二dat8;

end

next〈二dat9;

end

next<=datlO;

end

8'h6;

8'hl;

"4—

datlO:

datll:

nul:

rs<=l:

dat<="“;nex二datll;endrs<=l;dat<=,z“;next〈二nul;enddat<=8,h00;

default:

endcase

begin

begin

beginrs<=0;

if(ent!

二2'h2)

begin

e<=0;next〈二setO;ent<=cnt+l;

end

else

beginnext〈二nul;e<=l:

end

end

next=setO;

end

assignen=clkre;assignrw=0;

endmodule

13

 

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

当前位置:首页 > 工程科技 > 机械仪表

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

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