FPGA减法器论文.docx
- 文档编号:9014693
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:13
- 大小:149.40KB
FPGA减法器论文.docx
《FPGA减法器论文.docx》由会员分享,可在线阅读,更多相关《FPGA减法器论文.docx(13页珍藏版)》请在冰点文库上搜索。
FPGA减法器论文
桂林电子科技大学
FPGA报告
减法器
学院(系):
电子信息工程系
专业:
电子信息工程技术
学号:
学生姓名:
指导教师:
目录
摘要2
1绪论4
2课题背景4
2.1设计任务与要求4
2.2设计目的4
3总体设计方案及硬件介绍4
3.1XC3S200AN_FT256N主要功能4
3.2方案论证6
3.2设计思想6
3.4电路框架图6
3.5程序流程图7
4调试心得8
5实训经过8
6结论8
7个人想法9
致谢10
参考文献11
附件12
摘要
随着基于FPGA技术的发展和应用领域的扩大与深入,FPGA技术在电子信息、通信、自动控制用计算机等领域的重要性日益突出。
作为一名电子信息专业的学生,我们必须不断地了解更多的新产品信息,这就更加要求我们对FPGA有个全面的认识。
本次设计的是基于VerilogHDL的矩阵键盘扫描通过数码管显示键值,并且能够实现减法器的基本功能。
采用XilinxISE11作为开发工具,VerilogHDL语言作为硬件描述语言,所开发的程序经过调试运行,初步实现了设计目标。
关键词:
FPGA;减法器;
Abstract
WithFPGA-baseddevelopmentandapplicationoftechnologytoexpandthefieldandin-depth,FPGAtechnologyintheelectronicinformation,communications,automaticcontrolwithcomputerandotherareasofgrowingimportance.AsastudentofElectronicInformation,wemustcontinuetounderstandmorenewproductinformation,whichfurtherrequiresustohaveacomprehensiveunderstandingofFPGA.
ThedesignisbasedonVerilogHDLmatrixkeyboardscanthroughthedigitalpipedisplaykeyvalue,andcanrealizeminusthebasicfunctionofskulls.TheISEandXilinxasdevelopmenttools,VerilogHDLlanguageasahardwaredescriptionlanguage,thedevelopmentoftheprogramaftertestandoperation,andthenrealizedthedesigngoal.
Keywords:
FPGA;Skullsreduction;
1绪论
随着大规模集成电路技术和EDA技术的迅速发展,使得数字系统的硬件设计如同软件设计那样方便快捷,而VerilogHDL是当前应用最广泛的并成为IEEE标准的一种硬件描述语言。
VerilogHDL是在C语言的基础上演化而来,具有结构清晰、文法简明、功能强大、高速模拟和多库支持等优点。
减法器是一种非常方便的算数工具,它大大的提高了运算效率,使得计算减法的时候能够快速准确的得到答案。
2课题背景
在高新技术日新月异的今天,科学技术已经成为整个社会发展的源动力,电子领域的发展更是令人目不暇接,在其推动下,现代电子产品几乎渗透了社会的各个领域,遍迹了千家万户,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
2.1设计任务与要求
本设计主要能够通过4位共阴数码管显示矩阵键盘扫描返回的键值,然后通过程序构成减法器。
通过这个基础能够发展成为一个完整的计算器。
2.2设计目的
通过该设计对FPGA系统及VerilogHDL语言要有一个全面的了解、掌握HDL语言的使用方法、掌握简FPGA应用系统软硬件的设计方法,进一步锻炼在FPGA应用方面的实际动手能力。
3总体设计方案及硬件介绍
3.1XC3S200AN_FT256N主要功能
XC3S200AN_FT256N板包含了以下主要组件:
●20万逻辑闸的XilinxSpartan-3ANXC3S200ANFPGA包装为FT256只脚位(XC3S200AN-4-FT256-C)
.内含16个18K-bit的BlockRAMs(共216Kbits)
.内含16个18x18硬件乘法器
.内含4个DigitalClockManagers(DCMs)
.内含195个可用脚位
●RS-232界面x2
●PROMXCF02S-VO20
●40MHz的振荡晶体.
●一个使用者振荡晶体的Socket(HalfSize)
●50点UserIO,可连接使用者设计的板子.
●4个DIPswitch
●16个LED输出界面
●8个按键输入
●8x8矩阵式LED
●7x4七节灯管
●16x2液晶显示器
●4x3按键输入
●PS2输入接口
●VGA输出接口(8色).
●128kx8bits静态内存(StaticRandomAccessMemory)
●单一电源输入(+5V/3A)
.提供板子上两组电源使用(1.2V,3.3V)
3.2方案论证
硬件设计中做出减法器的时候有两种方案可供选择:
方案一:
使用独立按键,一个按键占用单独的一个I/O口,连接比较简单,程序的写法比较简单容易实现。
但是比较浪费I/O口,而且键位和现代计算器不一样,比较难以运用。
方案二:
使用矩阵键盘,节省I/O口,通常将按键排列成矩阵形式,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
键位和现代计算器大致相同。
经过比较,方案二更符合本次实训所做减法器的要求,因此采用方案二。
3.3设计思路
通过XS3S200AN_FT256展示板上的扫描式键盘的架构图得知矩阵键盘一共为7位的IO端(PIN1),把PIN1分为4个input和3个output或是3个input和4个output皆可.当一边输入端其中一只脚位输入为低电位’0’时,另一端输出端侦测到其中一只脚位为低电位’0’,表示相对应之按键被按下.如按键1按下时,得到”0111011”,利用此关系建出键盘译码表出来.就可以将数据显示到七段数码管上。
然后通过程序中的运算过程达到减法的效果。
输入数值为被减数,按下按键*则为减法效果,再次输入数值即为减数,然后得到结果。
3.4电路框架图
3.5程序流程
矩阵键盘的程序流程
减法器的程序流程
4调试心得
在这次实训中,我用的是矩阵键盘来作为输入。
矩阵键盘的输入并不是特别的困难,主要注意的是管脚的配置还有程序中对于矩阵键盘函数的放置位置。
虽然自己对于FPGA的操作已经比较熟练了,但是还是不能做得太快,因为End的输入不能多不能少,多或者少都会影响程序的正常工作。
在编写程序的时候,要尽量的注意自己的格式,一个好的格式能够很好的帮助自己编写出更好的程序,而且格式好也能够方便自己的检查和修改,提高自己的编程效率。
5实训经过
在这次实训中,我选择的是用FPGA做减法器。
实训中遇到了很多的问题,做减法器首先是矩阵键盘模块,这个模块做的不能说是顺利,但是也没有遇到太大的问题,主要的问题是管脚的绑定,和同学一起就能够解决了。
其次是运算模块,运算是要求1-200之间的输入的运算,这个就比较困难了。
因为输入一个数比较好弄,但是需要输入大于九的两位数甚至三位数就没有弄懂,因为需要第一个数的移动,第二个数的补充。
而且这里还涉及了正负号的说法,让减法器更加的困难对于我来说。
所以我至今还是没有能够做出来这个减法器。
第三就是显示模块,这个没有什么难度,只是要用数码管显示出正号,这个我还没有想通是如何做的。
6结论
在这次实训中,总的来说是不成功的。
当时选择题目的时候我个人认为减法器这个题目还是比较简单的。
但是经过多次的调试,反复的修改,还是一点都不得入门。
所以,这次实训我的不到太多的结果,但是过程还是相当有意义的。
因为在做此次实训时,对FPGA也有了更深入的了解。
减法器虽然没有做出来,但是我做出了矩阵键盘的程序,这是减法器的一半,但是却不是减法器的核心。
减法器的核心我认为就是那一个负号。
其次就是数字的位移,输入第一个数,当再输入第二个数的时候,第一个数需要往右边移动一位显示,原来第一个数的位子由输入的第二个数字代替。
所以本次实训不能算是失败,但是也不能算是成功。
7个人想法
经过了这次实训,我觉得我的FPGA还是没有达到入门的级别,只能说我略懂皮毛,一个简简单单的减法器我却没有能够完成,这个我自己还是相当失望的。
就这次我错的程序来看,我有一些自己的心得和自己的想法,只是自己不能够实现,所以说出来让各位品鉴一下,看我的想法是否靠谱。
虽然没有做出减法器,但是在做程序时,有以下几点我这样想了,但是没有完成的:
1.在输入多位数的时候,用流水灯的方法,将第一个数左移至第二位,然后第二个数字补充至第一个数原来占据的位置,当然输入三位数的时候也是一样的。
这个想法我没有能够实现,只是说出来希望老师能够解答。
2.也就是当答案是负数的时候,我是没有办法让他显示负号的,但是我是这样想的。
输入的两个数分别为A、B的时候,A是被减数,B是减数。
若A大于B,则为A减B得到答案,答案为正。
若A小于B,则B减A得到答案,这个答案依然是正的,但是A小于B时,答案前面加上一杠,视为减号!
这样应该能够在FPGA没有负数的情况下显示负数。
不知道以上的两个方法能不能行得通,
致谢
感谢老师为我们争取的这次实训机会,让我们有了锻炼自己和提高自己的机会。
熊老师对我的帮助也是很大的,平时的学习,还有这次实训老师的帮助。
我很感谢熊老师给我的这个机会让我们完成这次实训,虽然实训没有很成功的完成,但是从中也学习到了很多。
老师还尽心尽力的辅导我们如何写论文,这次的实训和论文都是在熊老师的指导下完成的。
2011年6月16日
参考文献
[1]叶俊明,熊彬.FPGA实验指导书.
[2]夏宇闻.数字系统设计.北京航空航天大学出版社.2008.6
[3]王金明.数字系统设计与verilogHDL.北京电子工业出版社.2008
[4]王金明,冷自.EDA技术与Verilog设计.北京科技出版社.2008
附件
实训程序:
`timescale1ns/1ps
modulekey(dataout,en,clk,reset,row,col,key_value);
inputclk,reset;
input[3:
0]row;//行
output[2:
0]col;//列
output[3:
0]key_value;
outputreg[6:
0]dataout;//数码管显示数据
outputreg[3:
0]en;//数码管显示使能
reg[3:
0]col;
reg[3:
0]key_value;//键值
reg[5:
0]count;
reg[2:
0]state;
regkey_flag;//按键标志位
regclk_500khz;
reg[2:
0]col_reg;//寄存扫描的列值
reg[3:
0]row_reg;//寄存扫描的行值
always@(posedgeclkornegedgereset)
if(!
reset)beginclk_500khz<=0;count<=0;end
else
begin
if(count>=50)beginclk_500khz<=~clk_500khz;count<=0;end
elsecount<=count+1;
end
always@(posedgeclk_500khzornegedgereset)//扫描模块
if(!
reset)begincol<=3'b000;state<=0;end
else
begin
case(state)
0:
begin
col[2:
0]<=3'b000;
key_flag<=1'b0;
if(row[3:
0]!
=4'b1111)beginstate<=1;col[2:
0]<=3'b011;end
elsestate<=0;
end
1:
begin
if(row[3:
0]!
=4'b1111)beginstate<=5;end//判断是否是第一行
elsebeginstate<=2;col[2:
0]<=3'b101;end//扫描第二行
end
2:
begin
if(row[3:
0]!
=4'b1111)beginstate<=5;end//判断是否是第二行
elsebeginstate<=3;col[2:
0]<=3'b110;end//扫描第三行
end
3:
begin
if(row[3:
0]!
=4'b1111)beginstate<=5;end//判断是否是第三行
elsebeginstate<=4;end//扫描第四行
end
4:
begin
if(row[3:
0]!
=4'b1111)beginstate<=5;end//判断是否是第一行
elsestate<=0;
end
5:
begin
if(row[3:
0]!
=4'b1111)
begin
col_reg<=col;//保存扫描列值
row_reg<=row;//保存扫描行值
state<=5;
key_flag<=1'b1;//有键按下的标志位
end
else
beginstate<=0;end
end
endcase
end
always@(clk_500khzorcol_regorrow_reg)
begin
if(key_flag==1'b1)
begin
case({row_reg,col_reg})
7'b1110_011:
key_value<=1;
7'b1110_101:
key_value<=2;
7'b1110_110:
key_value<=3;
7'b1101_011:
key_value<=4;
7'b1101_101:
key_value<=5;
7'b1101_110:
key_value<=6;
7'b1011_011:
key_value<=7;
7'b1011_101:
key_value<=8;
7'b1011_110:
key_value<=9;
7'b0111_101:
key_value<=0;
7'b0111_011:
key_value<=10;
7'b0111_110:
key_value<=11;
endcase
end
end
always@(key_value)//显示模块
begin
case(key_value)
0:
begindataout<=7'b1000000;en=4'b0111;end
1:
begindataout<=7'b1111001;en=4'b0111;end
2:
begindataout<=7'b0100100;en=4'b0111;end
3:
begindataout<=7'b0110000;en=4'b0111;end
4:
begindataout<=7'b0011001;en=4'b0111;end
5:
begindataout<=7'b0010010;en=4'b0111;end
6:
begindataout<=7'b0000010;en=4'b0111;end
7:
begindataout<=7'b1111000;en=4'b0111;end
8:
begindataout<=7'b0000000;en=4'b0111;end
9:
begindataout<=7'b0010000;en=4'b0111;end
10:
begindataout<=7'b0001000;en=4'b0111;end
11:
begindataout<=7'b0000011;en=4'b0111;end
default:
dataout<=7'bz;
endcase
end
endmodule
管脚配置:
NET"clk"LOC=P8;
NET"reset"LOC=H10;
NET"dataout[0]"LOC=T11;
NET"dataout[1]"LOC=T10;
NET"dataout[2]"LOC=P10;
NET"dataout[3]"LOC=N10;
NET"dataout[4]"LOC=M10;
NET"dataout[5]"LOC=R9;
NET"dataout[6]"LOC=T9;
NET"en[0]"LOC=R13;
NET"en[1]"LOC=P11;
NET"en[2]"LOC=P12;
NET"en[3]"LOC=N11;
NET"row[0]"LOC=L7;
NET"row[1]"LOC=L8;
NET"row[2]"LOC=L9;
NET"row[3]"LOC=L10;
NET"col[0]"LOC=T13;
NET"col[1]"LOC=P13;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 减法 论文