8位减法器的设计.docx

上传人:b****3 文档编号:5518768 上传时间:2022-12-18 格式:DOCX 页数:11 大小:61.21KB
下载 相关 举报
8位减法器的设计.docx_第1页
第1页 / 共11页
8位减法器的设计.docx_第2页
第2页 / 共11页
8位减法器的设计.docx_第3页
第3页 / 共11页
8位减法器的设计.docx_第4页
第4页 / 共11页
8位减法器的设计.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

8位减法器的设计.docx

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

8位减法器的设计.docx

8位减法器的设计

课题名称

8位减法器的设计

设计内容及要求

试设计一个8位二进制并行减法器,它由两个4位二进制并行减法器级联而成。

要求被减数与减数之差在数码管上以十进制数显示出来,LED1显示借位输出,当被减数大于减数时,LED1熄灭表示没在借位,当被减数小于减数时,LED1亮表示有借位,其它7位LED平时在熄灭状态。

系统提供50MHZ频率的时钟源。

完成该系统的硬件和软件的设计,并制作出实物装置,调试好后并能实际运用(指导教师提供制作所需的器件),最后就课程设计本身提交一篇课程设计说明书。

设计工作量

1、VHDL语言程序设计;

2、波形仿真;

3、在实验装置上进行硬件测试,并进行演示;

4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、硬件测试、调试过程,参考文献、设计总结等。

进度安排

起止日期(或时间量)

设计内容(或预期目标)

备注

第1天

课题介绍,答疑,收集材料

第2天

设计方案论证

第3天

进一步讨论方案,对设计方案进行必要的修正,方案确定后开始进行VHDL语言程序设计

第4天

设计VHDL语言程序

第5天

在实验装置上进行硬件测试,编写设计说明书

编写设计说明书

教研室

意见

 

年月日

系(部)主管领导意见

 

年月日

一、课程设计目的

系统提供一个50MHz的时钟,要求输入一个8位的二进制数作为被减数并锁定,然后再输入一个8位二进制数并锁定,进行相减后的结果用十进制在数码管上显示出来,并用一个led灯来显示借位情况。

二、课程设计要求

试设计一个8位二进制并行减法器,它由两个4位二进制并行减法器级联而成。

要求被减数与减数之差在数码管上以十进制数显示出来,LED1显示借位输出,当被减数大于减数时,LED1熄灭表示没在借位,当被减数小于减数时,LED1亮表示有借位,其它7位LED平时在熄灭状态。

系统提供50MHZ频率的时钟源。

完成该系统的硬件和软件的设计,并制作出实物装置,调试好后并能实际运用(指导教师提供制作所需的器件),最后就课程设计本身提交一篇课程设计说明书。

三、设计内容

1、设计思路

方法一:

由于要设计的是一个8位的二进制减法器,可采用4位减法器并联的例化语句的方法来实现。

在是用例化语句的过程中需要的就是输入的是8位二进制编码,输出的结果也是二进制编码的形式,所以在输出结果的同时还需要将结果进行转化后才能在数码管显示出来,否则只能用16进制来显示。

其中的是否发生借位的部分,完全可以用一个输出指向led的亮灭来表示。

在此过程中数码管的显示还需要设计好动态扫描。

方法二;

8位二进制减法器的设计,我们在设置减法器前就先将数据转化,然后再进行减法器的设置,在这里是否要借位可以用if语句来判定后直接输出一个值送入到led显示结果,并把结果直接送入数码管显示。

2、设计步骤

1)先设计减数和被减数值的锁定并判定借位的输出值

程序如下:

PROCESS(AB,K1,K2)

VARIABLES1,S2:

STD_LOGIC_VECTOR(7DOWNTO0);

BEGIN

IFK1'EVENTANDK1='1'THEN

S1:

=AB;

ENDIF;

IFK2'EVENTANDK2='1'THEN

S2:

=AB;

ENDIF;

TMP1<=CONV_INTEGER(S1);

TMP2<=CONV_INTEGER(S2);

IFTMP1>TMP2THEN

TMP<=TMP1-TMP2;

FLAG<=10;

CO<='0';

ELSE

TMP<=TMP2-TMP1;

FLAG<=11;

CO<='1';

ENDIF;

ENDPROCESS;

2)设计减法器的基本功能

程序如下:

PROCESS(TMP,CLK)

VARIABLEA,B,C:

INTEGERRANGE0TO9;

BEGIN

IFCLK'EVENTANDCLK='1'THEN

C:

=TMPREM10;

B:

=(TMP-C)REM100/10;

A:

=(TMP-B*10-C)REM1000/100;

A1<=A;

B1<=B;

C1<=C;

ENDIF;

ENDPROCESS;

3)设计计数器的分频操作降低输出频率是结果显示清楚

程序如下:

PROCESS(CLK)

VARIABLENUM:

INTEGERRANGE0TO50000000;

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFNUM<100THEN

NUM:

=NUM+1;

ELSE

NUM:

=0;

CLK1<=NOTCLK1;

ENDIF;

ENDIF;

ENDPROCESS;

3)设计数码管的片选

程序如下:

PROCESS(CLK1)

BEGIN

IFCLK1'EVENTANDCLK1='1'THEN

SEL7S<=SEL7S+"01";

ENDIF;

ENDPROCESS;

PROCESS(SEL7S)

BEGIN

CASESEL7SIS

WHEN"00"=>SEL<="00000001";DISP<=C1;

WHEN"01"=>SEL<="00000010";DISP<=B1;

WHEN"10"=>SEL<="00000100";DISP<=A1;

WHEN"11"=>SEL<="00001000";DISP<=FLAG;

WHENOTHERS=>SEL<="00000000";DISP<=C1;

ENDCASE;

ENDPROCESS;

4)数码管的段选设计

程序如下:

PROCESS(DISP)BEGIN

CASEDISPIS

WHEN0=>LED7S<="0000001";

WHEN1=>LED7S<="1001111";

WHEN2=>LED7S<="0010010";

WHEN3=>LED7S<="0000110";

WHEN4=>LED7S<="1001100";

WHEN5=>LED7S<="0100100";

WHEN7=>LED7S<="0001111";

WHEN8=>LED7S<="0000000";

WHEN9=>LED7S<="0000100";

WHEN10=>LED7S<="1111111";

WHEN11=>LED7S<="1111110";

WHENOTHERS=>NULL;

ENDCASE;

ENDPROCESS;

END;

四、设计仿真波形

1)减数被减数值的锁定

图4-1值的锁定仿真图

2)数码管片选及段选

图4-2结果的显示仿真图

五、程序中各个引脚的分配如下

引脚名称

引脚编号

连接网络

引脚名称

引脚编号

连接网络

AB[0]

M3

FPGA_M1

SEL[0]

G4

E_7SEG-A1

AB[1]

M4

FPGA_M2

SEL[1]

G3

E_7SEG-A2

AB[2]

N1

FPGA_M3

SEL[2]

E2

E_7SEG-A3

AB[3]

N2

FPGA_M4

SEL[3]

F2

E_7SEG-A4

AB[4]

N3

FPGA_M5

LED7S[0]

K4

E_7SEG-G

AB[5]

N4

FPGA_M6

LED7S[1]

L2

E_7SEG-F

AB[6]

R1

FPGA_M7

LED7S[2]

H1

E_7SEG-E

AB[7]

P3

FPGA_M8

LED7S[3]

H4

E_7SEG-D

K1

T10

KEY1

LED7S[4]

H3

E_7SEG-C

K2

N14

KEY2

LED7S[5]

L4

E_7SEG-B

CO

R10

LED1

LED7S[6]

L3

E_7SEG-A

CLK

J3

50MHZ

六、设计总程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYa8jfqIS

PORT(

CLK,K1,K2:

INSTD_LOGIC;

AB:

INSTD_LOGIC_VECTOR(7DOWNTO0);

SEL:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

LED7S:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

CO:

OUTSTD_LOGIC

);

END;

ARCHITECTUREONEOFa8jfqIS

SIGNALA1,B1,C1:

INTEGERRANGE0TO9;

SIGNALFLAG,DISP:

INTEGERRANGE0TO15;

SIGNALTMP1,TMP2,TMP:

INTEGERRANGE0TO255;

SIGNALCLK1:

STD_LOGIC;

SIGNALSEL7S:

STD_LOGIC_VECTOR(1DOWNTO0):

="00";

BEGIN

PROCESS(AB,K1,K2)

VARIABLES1,S2:

STD_LOGIC_VECTOR(7DOWNTO0);

BEGIN

IFK1'EVENTANDK1='1'THEN

S1:

=AB;

ENDIF;

IFK2'EVENTANDK2='1'THEN

S2:

=AB;

ENDIF;

TMP1<=CONV_INTEGER(S1);

TMP2<=CONV_INTEGER(S2);

IFTMP1>TMP2THEN

TMP<=TMP1-TMP2;

FLAG<=10;

CO<='0';

ELSE

TMP<=TMP2-TMP1;

FLAG<=11;

CO<='1';

ENDIF;

ENDPROCESS;

PROCESS(TMP,CLK)

VARIABLEA,B,C:

INTEGERRANGE0TO9;

BEGIN

IFCLK'EVENTANDCLK='1'THEN

C:

=TMPREM10;

B:

=(TMP-C)REM100/10;

A:

=(TMP-B*10-C)REM1000/100;

A1<=A;

B1<=B;

C1<=C;

ENDIF;

ENDPROCESS;

PROCESS(CLK)

VARIABLENUM:

INTEGERRANGE0TO50000000;

BEGIN

IFCLK'EVENTANDCLK='1'THEN

IFNUM<100THEN

NUM:

=NUM+1;

ELSE

NUM:

=0;

CLK1<=NOTCLK1;

ENDIF;

ENDIF;

ENDPROCESS;

PROCESS(CLK)

BEGIN

IFCLK'EVENTANDCLK='1'THEN

SEL7S<=SEL7S+"01";

ENDIF;

ENDPROCESS;

PROCESS(SEL7S)

BEGIN

CASESEL7SIS

WHEN"00"=>SEL<="00000001";DISP<=C1;

WHEN"01"=>SEL<="00000010";DISP<=B1;

WHEN"10"=>SEL<="00000100";DISP<=A1;

WHEN"11"=>SEL<="00001000";DISP<=FLAG;

WHENOTHERS=>SEL<="00000000";DISP<=C1;

ENDCASE;

ENDPROCESS;

PROCESS(DISP)BEGIN

CASEDISPIS

WHEN0=>LED7S<="0000001";

WHEN1=>LED7S<="1001111";

WHEN2=>LED7S<="0010010";

WHEN3=>LED7S<="0000110";

WHEN4=>LED7S<="1001100";

WHEN5=>LED7S<="0100100";

WHEN7=>LED7S<="0001111";

WHEN8=>LED7S<="0000000";

WHEN9=>LED7S<="0000100";

WHEN10=>LED7S<="1111111";

WHEN11=>LED7S<="1111110";

WHENOTHERS=>NULL;

ENDCASE;

 

ENDPROCESS;

END;

七、设计仿真图

八、设计心得及体会

经过本次课程设计通过本次设计对FPGA有了进一步的了解,在这次课程设计的过程中设计的2套方案只是先了一套有点遗憾,第一条方案在之前的过程的设计过程中都是正常的而且仿真也是没有问题,就是在进行实物显示是一致是乱码,也没有在课程设计结束前解决。

只能是另外想办法,通过别的思路和设计来实现该功能。

在谢老师的帮助下通过自己网上找资料终于实现了预期的功能,本次课程设计学到了许多东西。

期待下次能实现更多的功能。

参考文献

【1】潘松,王国栋.VHDL使用教程.成都:

电子科技大学出版社,2000

【2】潘松,王国栋EDA技术实用教程—VHDL版(第五版)北京:

科技出版社,2013

【3】蒋国强.EDA技术与应用.北京:

电子工业出版社,2007

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

当前位置:首页 > 经管营销

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

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