8位减法器的设计.docx
《8位减法器的设计.docx》由会员分享,可在线阅读,更多相关《8位减法器的设计.docx(11页珍藏版)》请在冰豆网上搜索。
![8位减法器的设计.docx](https://file1.bdocx.com/fileroot1/2022-12/18/d73d7445-e97f-4808-a03c-1e51c9e64920/d73d7445-e97f-4808-a03c-1e51c9e649201.gif)
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