FPGA设计实践课程设计报告---自动打铃系统设计.doc_第1页
FPGA设计实践课程设计报告---自动打铃系统设计.doc_第2页
FPGA设计实践课程设计报告---自动打铃系统设计.doc_第3页
FPGA设计实践课程设计报告---自动打铃系统设计.doc_第4页
FPGA设计实践课程设计报告---自动打铃系统设计.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告课程设计名称: fpga设计实践课程 设计课题名称: 自动打铃系统设计 班级: 指导老师: 姓名: 学号: 20072668 成绩: 设计时间: 7,5-7,9 设计地点: 计算机信息与工程学院自动打铃系统设计报告一、 设计目的:1 进一步熟悉fpga开发系统环境、c语言、调试方式。2 了解fpga中如何使用总线频率制作时钟。3 会使用各个模块的拼接与联系。二、 实验器材和工具软件: 1,alter de2实验板。 2,quartus ii 实验用程序。三、 设计内容:1. 基本计时和现实功能(用12小时制显示):包括上下午标志,时、分的数字显示,秒信号显示。2. 可以自由设置当前时间(包含上、下午,时、分)。3. 可以实现基本的打铃功能,规定: 上午06:00起床铃,打铃5s,停2s,再打铃5s; 下午10:30熄灯铃,打铃5s,停2s,再打铃5s。 铃声可以用led灯光显示,如果实验装置没有led发光管,那么可以用七段显示管的小数点显示,也可以用显示小时的十位数码管的多余段显示。凡是用到铃声功能的均可以如此处理。 4. 增加整点报时功能,整点时响铃5s。要求有控制启动和关闭功能。5. 增加调整起床铃、熄灯铃时间的功能。 6. 增加调整打铃时间长短和间隙时间长短的功能。 7. 增设上午4节课的上、下课打铃功能,规定: 7:30上课,8:20下课 8:30上课,9:20下课 9:40上课,10:30下课 10:40上课,11:30下课。 每次铃响5s。四、 设计具体步骤:1,首先需要对整个系统做一个详细的认识,fpga中是没有定时器的所以我们需要通过计数器来达到计时的效果。为此,我们先从总线频率那分频得到50m分频的频率那么我们需要分频器“clk_1_gen”。程序如下:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;entity clk_1_gen isport(clkin :in std_logic; clkout:out std_logic);end clk_1_gen;architecture behave_clk_div8 of clk_1_gen isconstant n: integer:=24999999;signal counter:integer range 0 to n; signal clk: std_logic;begin process(clkin) begin if rising_edge(clkin) then if counter=n then counter=0; clk=not clk; else counter= counter+1; end if; end if; end process; clkout= clk; end behave_clk_div8; 2,在题目中我们看到这个程序的目的不光光是现实时间,同时也可以修改时间,同时具备闹铃、修改闹铃等功能。那么为了切换这些功能我们需要一个状态机,为了输出当前处于什么状态,同时有些什么操作。这个就是statemachine所要完成的任务。这里涉及两大重要参数,一个是“command”一个是“adjbotton和flash”前者是当前的状态一共有五个,每一位象征着一个状态,而后者则是修改时间用的变化与位选。我们的目的是按一个按键那么状态就改变,那么我们就可以把输入变量的变化与输出地变化相一致即可。module statemachine (clock, changemode, adjposition, adjval, command, adjbotton, flash);input clock;input changemode;input adjposition;input adjval;output 4:0 command;reg4:0 command;output2:0 adjbotton;reg2:0 adjbotton; output2:0 flash;reg2:0 flash;parameter2:0 timer = 0;parameter2:0 adj_timer = 1;parameter2:0 adj_morningtime = 2;parameter2:0 adj_eveningtime= 3;parameter2:0 adj_ringlength = 4;parameter2:0 adj_12or24 = 5;reg2:0 state;reg1:0 pos;always (posedge clock) /mo kuai 1 gong neng shi tong guo changemode de an xia lai gai bian zhuang taibegincase (state) /case state timer : /timer 0 shi beginif (changemode = 1b0) /beginstate = adj_timer ;endendadj_timer :beginif (changemode = 1b0)beginstate = adj_morningtime ;endendadj_morningtime :beginif (changemode = 1b0)beginstate = adj_eveningtime ;endendadj_eveningtime :beginif (changemode = 1b0)beginstate = adj_ringlength ;endendadj_ringlength :beginif (changemode = 1b0)beginstate = adj_12or24 ;endendadj_12or24 :beginif (changemode = 1b0)beginstate = timer ;endenddefault :beginstate = timer ;endendcaseendalways (posedge clock) /mo kuai 2begincase (state)timer : /zheng chang ji shi shibegin / command = 5b00000 ; /shu chu command wei 00000pos = 0 ; /pos wei 0endadj_timer : /tiao zheng shi jian shibeginif (command = 5b00000) /ru guo dang qian wei zheng chang ji shi zhuang taibegin/command=5b00001;pos = 1 ; / pos wei 1endelsebegin /ru guo bu shi zheng chang ji shi zhuang taiif (adjposition = 1b0) /erqie ci shi adiposition wei 1beginif (pos = 3) /erqie pos wei 3beginpos = 1 ; /pos wei 1endelsebegin /pos bu wei3 de hua pos =pos +1pos = pos + 1 ;endendendcommand = 5b00001 ; /zuo wan shang mian zhi hou command wei 00001endadj_morningtime : /tiao zheng qi chuang shi jian zhuang taibeginif (command = 5b00001) /ruguo dang qian wei tiao zheng shi jian zhuang taibeginpos = 1 ; /pos wei 1endelsebeginif (adjposition = 1b0) /fou zhe ru guo adjposition wei 1 beginif (pos = 1) /erqie pos wei 1beginpos = 2 ; /pos wei 2endelsebeginpos = 1 ; /fou ze pos bu wei 1 shi pos wei 1endendendcommand = 5b00010 ;/ zuo wan zhi hou command shu chu wei 00010 tiao zheng xi deng zhuang taiendadj_eveningtime :beginif (command = 5b00010) / tiao wan shang shi jian de zhuang tai dang command wei 00010 shibeginpos = 1 ; /pos wei 1endelsebeginif (adjposition = 1b0) /command bu wei 00010 shi adjposition wei 1 shibeginif (pos = 1) /ru guo pos wei 1beginpos = 2 ; /pos wei2endelsebeginpos = 1 ; /fou ze wei 1endendendcommand = 5b00100 ; /zhi hou command shu chu wei 00100endadj_ringlength : /tiao zheng xiang liang zhuang tai beginif (command = 5b00100) /ru guo command wei 00100beginpos = 1 ; /pos wei1endelsebeginif (adjposition = 1b0) /fou ze ru guo command bu shi 00100 qie adjposition wei 1beginif (pos = 1) /qie pos wei 1beginpos = 3 ; /pos wei 3endelsebeginpos = 1 ; /fou ze pos wei 1endendendcommand = 5b01000 ; /zui hou shu chu wei 01000endadj_12or24 : /ru guo dang qian zhuang tai weibeginpos = 2 ; /pos wei 2command = 5b10000 ; /command shu chu wei 10000enddefault :beginpos = 0 ; /fou ze zui hou pos wei 0command = 5b00000 ; /comman wei 00000endendcasecase (pos) /pos de case 0 :begin /pos wei 0 shiflash = 3b000 ; /flash wei 000adjbotton = 3b000 ; /adjbotton wei 000end1 : /pos wei 1beginflash = 3b100 ; /flash wei 100if (adjval = 1b0) /ru guo adjval wei 1beginadjbotton = 3b100 ; /adjbotton wei 100endelsebeginadjbotton = 3b000 ; /fou ze wei 000endend2 : /ru guo pos wei 2beginflash = 3b010 ; /flash wei 010if (adjval = 1b0) /ru guo adjval wei 1beginadjbotton = 3b010 ; /adjbotton wei 010endelsebeginadjbotton = 3b000 ; /fou ze wei 000endend3 :beginflash = 3b001 ; /pos wei 3 shi flash wei 001if (adjval = 1b0) /ru guo adjvalbeginadjbotton = 3b001 ; /adjbotton wei 001endelsebeginadjbotton = 3b000 ; /fou ze wei 000endenddefault :beginflash = 3b000 ; /fou ze zui hou flash wei 000adjbotton = 3b000 ; /adjbotton wei 000endendcaseendendmodule3,接下来我们要做的是整个时间的一个程序“clock”。这里对于时间的输出我们可以把之前的分频器的输出作为输入,同时计数器通过频率来进行加一,那么通过到60进位的方法我们就可以做到秒到分的行为,以此类推,那么整个时钟就完成了。这里要提到时钟的修改,这里有三个输入,分别是时分秒,相对于之前的adjbotton里的三个位,为了能在原理图中连线,那么我们需要一个分线的程序“fenxian”,这里不仅包括了adjbotton这组线的分线,同时还有command这一祖线的分线,因为我们要区分哪些功能是现在需要的,那么我们就要取其中的高电平为当前模块所需的使能,其余则被关闭。module clock (clock, en, adjusth, adjustm, adjusts, adjustpm, second, minute, hour);input clock;input en;input adjusth;input adjustm;input adjusts;input adjustpm;output4:0 hour;reg4:0 hour;output5:0 minute;reg5:0 minute;output5:0 second;reg5:0 second;always (posedge clock)beginif (en = 1b1) begin if (adjustpm = 1b0) begin if (hour 12) begin hour = hour + 12 ; end else begin hour = hour - 12 ; end end else if (adjusth = 1b1) begin if (hour = 23) begin hour = 0 ; end else begin hour = hour + 1 ; end end else if (adjustm = 1b1) begin if (minute = 59) begin minute = 0 ; end else begin minute = minute + 1 ; end end else if (adjusts = 1b1) begin second = 0 ; end endelse begin if (second = 59) begin second = 0 ; if (minute = 59) begin minute = 0 ; if (hour = 23) begin hour = 0 ; end else begin hour = hour + 1 ; end end else begin minute =minute + 1 ; end end else begin second = second + 1 ; end endendendmodule4,接下来就是这个程序的闹铃修改单元setringtime。这里我们的目的是修改早上起床与晚上睡觉的铃声。这里就如之前的时间模块中的修改时间一样,通过adjbotton的输出来改变时间,同时通过command的输出来判别是否要运行此模块即使能开启与否。module setringtime (clock, en1, en2, adjusth, adjustm, getuphour, getupminute, sleephour, sleepminute);input clock;input en1;input en2;input adjusth;input adjustm;output3:0 getuphour;reg3:0 getuphour;output5:0 getupminute;reg5:0 getupminute;output3:0 sleephour;reg3:0 sleephour;output5:0 sleepminute;reg5:0 sleepminute;always (posedge clock)begin : xhdl_1reg0:0 firsttime;if (firsttime = 0)begingetuphour = 6 ;getupminute = 0 ;sleephour = 22 ;sleepminute = 30 ;firsttime = 1;endelsebeginif (en1 = 1b1)beginif (adjusth = 1b1)beginif (getuphour = 11)begingetuphour = 0 ;endelsebegingetuphour = getuphour + 1;endendelse if (adjustm = 1b1)beginif (getupminute = 59)begingetupminute = 0 ;endelsebegingetupminute 11)beginsleephour = 0 ;endelsebeginsleephour = sleephour + 1 ;endendelse if (adjustm = 1b1)beginif (sleepminute = 59)beginsleepminute = 0 ;endelsebeginsleepminute = sleepminute +1 ;endendendendendendmodule5,再接下来就是我们的闹铃持续时间的修改setringlength。主要原理和之前的时间修改的方法是一样的,只是不同的在后者要把变好的变量输入控制器,而前者则是对当前的时间修改好后,直接发送。6,最后这些上述的变量要如何显示就要看最后的控制方面的程序了,这里通过对状态变量的收取来控制当前的7段译码管该输出是什么。当然这里要提到把六位的数据分成两个4位的bcd码,因为这样我们的bcd译码器才会识别输入从而输出。而这里我们就要用到一个分位的程序。五、 设计收获以及存在的问题:这次实验可以说是以前一个关于时钟的实验的一个拓展,当时我们只被要求做出一个可以显示时间的程序,那么当时电路图中我们细化到了计数器这类器件上,而这次实验可以说时钟的显示在这里只是一个必须的存在换而言之是基础时,上次的那

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论