




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 西安邮电学院FPGA课程设计报告题 目:电子表微控器设计 院 系: 电子工程学院 专业班级: 微电子0901 学生姓名: 邢青青 导师姓名: 黄海生 起止时间:2012/6/18至2012/6/29年 月 日 基于FPGA的电子表微控器设计一 实验目的:设计一个简单的电子表微控器。用FPGA开发板的按键作为电子表的时间初值设置控制信号,数码管当前时间值输出。用按键选择分别输出:分、秒、1/10秒。二 功能描述:1 用开发板的拨码开关作为电子表时间初值设置控制信号,首先设置初始时间,并用数码管显示出当前时间 ,共用5个数码管,分别显示分,秒,和1/10秒,其中,分和秒均用两个数码管表示高低位,
2、1/10秒用一个数码管表示。2 当复位信号有效时(复位信号低有效),系统清零,并且将所有时间都清零,不管是显示状态还是调整状态。3 拨码开关是总控制开关,为低时才可以修改即设置新时间,为高是显示当前时间,包括修改后的时间。4 按键1是1/10秒的初值设置和修改控制键。5按键2是秒的初值设置和修改控制键。6按键3是分的初值设置和修改控制键。7 用数码管显示开始和修改后的时间。8 结构框图:三 输入输出信号描述: 其中:Clk:输入信号,系统时钟,为50MHZ。Reset:异步复位信号,当下降沿来临时有效,此时系统清零,所有输出均为0。Key:模式选择键,用拨码开关实现。当为低电平时,修改当前时间
3、;当为高电平时,输出并用数码管显示当前时间。此操作在复位端无效时进行,若复位端有效,则输出和显示均为0。Button1: 输入信号,按键1是1/10秒的初值设置和修改控制键,当满10后进一。Button2: 输入信号,按键2是秒的初值设置和修改控制键,当满60后进一。Button3: 输入信号,按键3是分的初值设置和修改控制键,当满60后进一。Clk1,2:内部输出信号,为分频后的输出时钟,clk1控制按键消抖模块,clk2控制时钟显示模块。Fen:内部变量,分的输出。Miao:内部变量,秒的输出。1/10miao:,内部变量,用于1/10秒的输出。Count:用于计数。LED:是八位输出,用
4、于显示时间。其中分和秒的显示均用两个数码管,一个显示高位,一个显示低位,当低位显示到9时,向高位进一,直到高位为6时清零。而1/10秒特用两个数码管分别输出,同样低位为9时向秒位进一, 1/10秒的数码管清零。四 功能模块描述:1根据设计思想,大体要分以下几个模块,顶层结构框图如图:2 顶层模块划分:(1) 时钟模块: a在这个模块中有1/10秒,秒,分,通过这几个时间来反映做出来的电子表,用板子里面的50MHZ产生出10HZ的分频(即0.1秒)作为1/10秒,从而进行计时。 b初值设置开关 (总开关):总开关用拨码开关控制,当拨到低电平(0)时,1/10秒,秒,分都停止,开始修改时间;当拨到
5、高电平(1)时,说明时间设置完毕,时钟开始正常显示和计时。按键1(修改1/10秒):按一次,1/10秒加1,加到10清零。按键2(修改秒):按一次,秒加1,加到60清零。按键3(修改分):按一次,分加1,加到60清零。(2) 按键消抖模块: 这个模块完成的是按键的消抖,使用系统自带50MHZ时钟分频得到的25MHZ,再进行按键采样,人一般的反应时间在50ms左右,所以采样的计数设置为25MHZ*50ms。(3) LED显示模块:将计时模块所计数,输出到LED的输入端,从而来控制LED灯的显示,即对应的哪一段该亮那一段该灭,以此来显示时间。(4) 时钟分频模块: 将板子的50MHZ时钟经过分频,
6、从而得到10HZ时钟,用于电子表计时,分频得到25MHZ,用于按键消抖模块时对按键采样的频率。3 子模块详细设计: (1) 键盘模块设计: Key:用它作为时钟的总开关,拨码开关,当它低电平(0)有效时,开始设置电子表的初值,否则,显示当前时间。当按键1为1时显示1/10秒,当按键2为1时显示秒,当按键3为1时显示分。 Reset:作为电子表的复位,当它为低电平时,把电子表的1/10秒,秒,分清零。 Button1:作为1/10秒的初值设置控制键(每按键一次,1/10秒加1,到9时在返回到0并且向秒进位1)。 Button2:作为秒的初值设置和修改控制键(每按键一次,秒加1,累加到59时,返回
7、到0并且向分进位1)。 Button3:作为分的初值设置和修改控制键(每按键一次,分加1,累加到59时返回到0)。(2) 时钟模块设计:1. 利用板子中晶振产生的50MHZ频率,把它分频成0.1秒即10HZ。2. 上面分频得到的0.1秒就是电子表的最小时间单位,当1/10秒从0开始走到9时,向秒进位1的同时,从9跳转到0,重新开始从零计时。3. 秒从0开始计数,当从1/10秒得到进位时,秒加1,直到计数计到59时,向分进位1的同时,从59跳转到0,重新开始从零计时。4. 分从0开始计数,当从秒得到进位时,分加1,直到计数计到59时,跳转到0,从零开始重新计时。 (3) LED数码管显示模块:
8、首先显示初值1/10秒,秒,分,如果有修改,那么LED液晶显示当前的时间值。数码管编码: 输入 输出 0 1000000 1 1111001 2 0100100 3 0110000 4 0011011 5 0010010 6 0000010 7 1111000 8 0000000 9 0010000 其他 xxxxxxx五 程序清单:1分频器:(1)源代码:module fenpinqi(clk,clk1,clk2,reset); input clk,reset; output clk1,clk2; reg clk1,clk2;reg22:0count1;Reg1:0count2; alway
9、s(posedge clk or negedge reset)/clk1 begin if(!reset) begin count1<=0; clk1<=0; end else begin if(count122:0=23'd2499999) begin count1<=0; clk1<=clk1; end else begin count122:0<=count122:0+1'b1; end end Endalways(posedge clk or negedge reset)/clk2 begin if(!reset) begin Count2
10、<=0; Clk2<=0; end else begin if(count21:0=2'd2) begin Count2<=0; Clk2<=clk2; end else begin Count21:0<=count21:0+1'b1; end end end endmodule(2)分频时钟:Clk12 时钟显示:代码:module clock(reset,clk1,key,button1,button2,button3,fen,miao,one_miao);input clk1,reset;input button1,button2,butto
11、n3,key;output7:0 fen,miao;output3:0 one_miao;reg 7:0 fen,miao;reg3:0 one_miao;always(posedge clk1 or negedge reset )/reset?begin if(!reset) begin one_miao<=0; fen<=0; miao<=0; end else /reset? /reset=1 begin if(key) /key=1 begin one_miao3:0<=one_miao3:0+1'b1; if(one_miao3:0=4'd9)
12、 begin one_miao3:0<=0; miao3:0<=miao3:0+1'b1; if(miao3:0=4'd9) begin miao3:0<=0; miao7:4<=miao7:4+1'b1; if(miao7:4=7'd5) begin miao6:0<=0; fen3:0<=fen3:0+1'b1; if(fen3:0=4'd9) begin fen3:0<=0; fen7:4<=fen7:4+1'b1; if(fen7:4=4'd5) begin fen7:4&l
13、t;=0; miao<=0; one_miao<=0; end end end end end end/ else/?else key,tiaozheng begin if(!button1)/ begin one_miao3:0<=one_miao3:0+1'b1; if(one_miao3:0=4'd9) begin one_miao3:0<=0; miao3:0<=miao3:0+1'b1; end end if(!button2) begin miao3:0<=miao3:0+1'b1; if(miao3:0=4
14、9;d9) begin miao3:0<=0; miao7:4<=miao7:4+1'b1; if(miao7:4=4'd5) begin miao7:0<=0; fen3:0<=fen3:0+1'b1; end end end if(!button3) begin fen3:0<=fen3:0+1'b1; if(fen3:0=4'd9) begin fen3:0<=0; fen7:4<=fen7:4+1'b1; if(fen7:4=4'd5) begin fen7:4<=0; miao&l
15、t;=0; one_miao<=0; end end end end end/end keyendendmodule3 数码管显示:代码:module shumaguan1(dec_in1,dec_out1); input3:0dec_in1; output6:0dec_out1; reg6:0dec_out1; always(dec_in13:0) begin case(dec_in13:0) 4'd0:dec_out1<=7'b1000000; 4'd1:dec_out1<=7'b1111001; 4'd2:dec_out1<
16、=7'b0100100; 4'd3:dec_out1<=7'b0110000; 4'd4:dec_out1<=7'b0011001; 4'd5:dec_out1<=7'b0010010; 4'd6:dec_out1<=7'b0000010; 4'd7:dec_out1<=7'b1111000; 4'd8:dec_out1<=7'b0000000; 4'd9:dec_out1<=7'b0010000; default:dec_out1&
17、lt;=7'bx; endcase endendmodule共用5个同样的数码管,显示分,秒,和1/10秒。数码管波形:4 按键消抖模块:module key(clk2,key_in,key_out);input clk2; /50MHz clock ininput key_in;output key_out;reg 22:0 count_high;reg 22:0 count_low;reg key_reg;assign key_out = key_reg;always( posedge clk2 )/if( key_in = 1'b0 ) count_low <= c
18、ount_low + 1;else count_low <= 23'h 00_0000; always( posedge clk2 )/if( key_in = 1'b1 ) count_high <= count_high +1;else count_high <= 23'h 00_0000;always( posedge clk2 )/begin if( count_high = 23'h 25_0000 ) key_reg <= 1'b1; else if( count_low = 23'h 25_0000 ) ke
19、y_reg <= 1'b0; else key_reg <= key_reg;endendmodule5 顶层模块:module top(reset,clk,key,button1,button2,button3,dec_out1,dec_out2,dec_out3,dec_out4,dec_out5); input clk,key,reset,button1,button2,button3; output7:0dec_out1,dec_out2,dec_out3,dec_out4,dec_out5; wire3:0one_miao; wire7:0miao,fen; fe
20、npinqi u1(.clk(clk),.reset(reset),.clk1(clk1); clock u2(.reset(reset),.clk1(clk1),.key(key), .button1(button1),.button2(button2), .button3(button3),.fen(fen),.miao(miao),.one_miao(one_miao);key u3(.clk2(clk2),.key_in(key_in),.key_out(key_out); shumaguan1 u4(.dec_in1(one_miao),.dec_out1(dec_out1); sh
21、umaguan2 u5(.dec_in2(miao3:0),.dec_out2(dec_out2); shumaguan3 u6(.dec_in3(miao7:4),.dec_out3(dec_out3); shumaguan4 u7(.dec_in4(fen3:0),.dec_out4(dec_out4); shumaguan5 u8(.dec_in5(fen7:4),.dec_out5(dec_out5);endmodule激励:module top_test; reg clk,key,reset,button1,button2,button3; wire7:0dec_out1,dec_o
22、ut2,dec_out3,dec_out4,dec_out5; top top_test(reset,clk,key,button1,button2,button3,dec_out1,dec_out2,dec_out3,dec_out4,dec_out5); initial begin reset<=0; clk<=0; button1<=1; button2<=1; button3<=1; #10 reset<=1; #10 key<=1; #20 key<=0; button1<=0; #20 button2<=0; #20 bu
23、tton3<=0; end always#5 clk<=clk;endmodule六 仿真结果:1 总体波形显示:2 综合及布局布线报告和引脚分布报告:七 实验心得体会:我觉得这次的课程设计是我上大学以来最有收获的一次课程设计。首先,通过这次课程设计,我对更加的了解了,不像以前,写好程序,不会下载到板子,还要找同学帮忙。而且,对所使用的这个板子有了进一步的了解,因为这次课程设计,我使用到了它的按键、拨动开关、LED显示。其次,我这次做的是电子表,虽然说难度不是很大,但当把按键加到程序中时,我碰到了难题。每次按下按键调整秒和1/10秒时,分也在发生变化,后来才发现是因为没有butto
24、n3的有效语句,我把它全写在case情况下,所以会出现那种情况。一开始自己思路很清楚,但是就是写不出来正确的代码,不是这有问题就是那有问题每次加入按键,改变的时间不是老师所要求的,经过老师的提醒和同学的讨论,我才发现存在的问题,一个是按键消抖时采样的时间不够,一个是通过按键改变时钟的时间时,要把clock首先置成低电平,这样没有上升沿后,电子表的1/10秒就不会走了。而且按键消抖模块必须得有,有时候因为按得时间长了,他就会连续跳过好几个,加上按键消抖,这种现象就不会产生。通过解决这些问题,使我的FPGA的功底更加的牢固了,这将会对我未来找工作有很大的帮助。我们的指导老师是促成我这次能成功的尽早的完成课程设计最大帮助。以前因为自己动手的比较少,对软件很陌生,不周到怎么装驱动,不知道怎么下载,老师检查让我自己从头操作一遍,感觉很难,害怕自己不会弄,结果发现还可以,就是管脚分配有点问题,由于不知道怎么全部复制,只会一个一个输入,显得很慢,后来才知道可以一起输进去,但是要注意,一起复制过去要在管脚顺序相同的条件下,要不然显示的就是与本身完全相反的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新庄镇履行教育工作职责情况汇报
- 2025年度长途自驾游包车服务含司机与全程导航协议
- 2025年学校电工安全技能培训与职业素养提升服务协议
- 2025年环保技术企业研发部门员工劳动合同规范文本
- 2025年智能家居产品承包合同:智能安防与节能控制系统应用
- 2025年度健康饮食特色调料独家代理销售合同
- 2025年字画古董装裱与古建筑修缮保护工程合同
- 2025年环保产业园区建设投资合作协议范本正本
- 2025年绿色升级型餐饮连锁门店整体改造项目质量保证合同
- 2025年新型飞行器研发项目工程师专项聘用合同
- 港口和码头基本知识培训课件
- 美容外科安全应急预案范文(3篇)
- 新学期+心动力+课件-2025-2026学年高二上学期开学第一课主题班会
- 应急第一响应人理论考试试卷(含答案)
- 儿童气管插管医学课件
- 建筑工程从数字化建造到智慧
- 文化创意产品设计及案例PPT完整全套教学课件
- 五年级上册英语课件-Unit1 Goldilocks and the three bears第四课时|译林版(三起) (共18张PPT)
- 水利工程安全防洪度汛专项方案-版
- 先天性复拇畸形虎口形态特点及治疗策略-PPT幻灯片
- 询价小组签到表
评论
0/150
提交评论