您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单电梯微控器设计 FPGA课程设计报告
西安邮电学院FPGA课程设计报告题目:单电梯微控器设计院系:电子工程学院专业班级:微电子0901学生姓名:张宏伟导师姓名:黄海生起止时间:2012/6/18至2012/6/29年月日FPGA课程设计报告提纲1.任务设计一个单电梯微控器,用FPGA开发板的按键作为手动上下设置开关,led指示当前所在楼层,数码管显示当前电梯工作状态(上/下/停)。2.目的3.使用环境(软件/硬件环境,设备等)4.FPGA课程设计详细内容4.1技术规范4.1.1功能定义(1).异步复位,复位信号与时钟信号不同步(2).分频器把基准时钟(50HZ)分成10HZ,即0.1秒便于人眼观察,设计0.1-0.3秒钟电梯上升或下降一个楼层(3).用三个拨码开关设置选择楼层,三个开关可以实现7层楼的设计,拨001为楼层第1层,以后以此类推,最高可达111第7层(4).用led显示当前选中的楼层,选中某层时,当层的led亮,当电梯降至或升至所选楼层时led灯一直亮(采用独热码)(5).使用数码管显示电梯状态,上升状态显示“U”,下降状态显示“D”,显示“S”为停止状态,停止时间用第二次输入为准(6).手动设置电梯工作状态,key1为上升,key2为下降状态(7).上电复位时电梯初始状态调为第一层(8).当电梯到第1时下降按键key2无效,当电梯到第7层时上升按键key1无效(9).电梯运行时可以选择要去的中间楼层,当电梯没有选择所要去的楼层时,上升/下降按键无效34.1.2系统结构框图总体设计可以分为以上几个模块,各模块的功能简要介绍:1.div模块:把基准时钟(50MHZ)分成1HZ输出2.elevator_state模块:用于总的实现各种功能,各个模块的输入都有此模块进行分析输出3.display1模块:用于产生拨码开关的输入值,以方便知道所选择的楼层是多少4.display模块:实现电梯的工作状态,上升/下降/停止5.led模块:显示当前所在楼层,采用独热码,方便显示6.floor_time模块:用于改变楼层上升或下降到相邻楼层的时间,由于给的count给的为数较少,故只能实现0.1-0.3秒任意值,如果还想实现更长的时间则需要改变count的位数7.top模块:把所有的模块连在一起4.1.3应用范围用于控制电梯的运作,可实现上/下/停止等功能。4.1.4引脚描述输入输出信号描述信号名称输入/输出目标/源功能描述clkinputpin系统时钟(50MHZ)resetinputpin异步清零,低电平有效chose[2:0]inputpin楼层选择,000不用,001-111key1inputpin电梯上升按键key2inputpin电梯下降按键display[6:0]outputpin数码管显示工作状态,升/降/停display1[6:0]outputpin显示所要去的楼层led[6:0]outputpin发光二极管显示当前楼层4.2设计方案把基准时钟进行分频,即50MHZ分成1HZ以便于现实,否则频率太大就会由于人眼的视觉暂留效应而无法分辨,而只能看到所选择的楼层亮,而其他楼层则不亮,分成10HZ就会看见灯是一个一个亮的,led灯采用独热码便于观察,当电梯上电时进行复位,则电梯被复位至1层,此时1层灯一直亮着意味着此时电梯在一楼,当有上升按键按下同时选择所去楼层时电梯工作,电梯工作时,按按键无效,当电梯在第一层按下降按键无效,同理在第七层按上升按键无效,如果电梯上升数码管display显示U,下降时显示D,停止时显示S,当电梯到了所选楼层时,此楼层的灯一直亮着。独热码编码:楼层独热码一层0000001二层0000010三层0000100四层0001000五层0010000六层0100000七层1000000共阳极数码管显示管脚图:显示对应编码01000000111110012010010030110000400110015001001060000010711110008000000090010000A0001000B0000011C1000110D0100001E0000110F0001110U10000015.各个功能模块描述5.1。分频器模块:功能:把系统时钟(50MHZ)分成10HZ便于人眼观察代码:modulediv(clk,reset,fclk);inputclk,reset;outputfclk;regfclk;reg[25:0]count;always@(posedgeclkornegedgereset)beginif(!reset)begincount=0;fclk=0;endelsebeginif(count[25:0]==26'd2499999)begincount=0;fclk=~fclk;endelsebegincount[25:0]=count[25:0]+1'b1;endendendEndmodule模块功能仿真:5.2.display模块功能:用于显示电梯的工作状态,S代表停止,U代表上升,D代表下降代码:moduledecode(dec_in,display);input[1:0]dec_in;output[6:0]display;reg[6:0]display;always@(dec_in)begincase(dec_in)2'd0:display[6:0]=7'b0010000;2'd1:display[6:0]=7'b1000001;2'd2:display[6:0]=7'b0100001;default:display[6:0]=7'bx;endcaseendEndmodule模块功能仿真:5.3.display1模块功能:用于显示要去的楼层,从第一楼开始直到第七楼代码:moduledecode1(dec_in1,display1);input[2:0]dec_in1;output[6:0]display1;reg[6:0]display1;always@(dec_in1)begincase(dec_in1)3'd0:display1[6:0]=7'b1000000;3'd1:display1[6:0]=7'b1111001;3'd2:display1[6:0]=7'b0100100;3'd3:display1[6:0]=7'b0110000;3'd4:display1[6:0]=7'b0011001;3'd5:display1[6:0]=7'b0010010;3'd6:display1[6:0]=7'b0000010;3'd7:display1[6:0]=7'b1111000;default:display1[6:0]=7'bx;endcaseendendmodule模块仿真:5.3.led模块功能:用于显示当前楼层,电梯在哪层,哪层的灯亮代码:moduleled(floor,light);input[2:0]floor;output[6:0]light;reg[6:0]light;always@(floor)begincase(floor)3'd1:light[6:0]=7'b0000_001;3'd2:light[6:0]=7'b0000_010;3'd3:light[6:0]=7'b0000_100;3'd4:light[6:0]=7'b0001_000;3'd5:light[6:0]=7'b0010_000;3'd6:light[6:0]=7'b0100_000;3'd7:light[6:0]=7'b1000_000;default:light[6:0]=7'bx;endcaseendEndmodule功能仿真:5.5.elevator_state模块功能:总体控制模块,用于控制电梯的工作,同时向各个模块输出对应的数值,以用于在各个模块中显示。代码:moduleelevator_state(fclk,reset,key1,key2,chose,count,floor,dec_in,dec_in1);inputfclk,reset,key1,key2;input[2:0]chose;input[1:0]count;output[2:0]floor;output[1:0]dec_in;output[2:0]dec_in1;reg[1:0]dec_in;reg[2:0]dec_in1;reg[2:0]floor;reg[1:0]state;wire[1:0]count;parameterstop=2'd0,up=2'd1,down=2'd2;always@(posedgefclkornegedgereset)beginif(!reset)begindec_in1[2:0]=3'b001;endelsebegindec_in1[2:0]=chose[2:0];endendalways@(posedgefclkornegedgereset)beginif(!reset)beginstate=stop;floor[2:0]=3'b001;dec_in[1:0]=2'b00;endelsebegincase(state)stop:beginif(dec_in1floor)beginif(!key1)beginif(floor[2:0]==3'b111)beginstate=stop;dec_in[1:0]=2'b00;endelsebeginstate=up;dec_in[1:0]=2'b01;endendendelseif(dec_in1floor)beginif(!key2)beginif(floor[2:0]==3'b001)beginstate=stop;dec_in[1:0]=2'b00;endelsebeginstate=down;dec_in[1:0]=2'b10;endendendelsebeginstate=stop;dec_in[1:0]=2'b00;endendup:beginif(count[1:0]==2'd2)beginfloor[2:0]=floor[2:0]+1'b1;if(chose[2:0]==floor[2:0])beginstate=stop;dec_in[1:0]=2'b00;endendelsebeginstate=up;dec_in[1:0]=2'b01;endenddown:beginif(count[1:0]==2'd2)beginfloor[2:0]=floor[2:0]-1'b1;if(chose[2:0]==floor[2:0])beginstate=stop;dec_in[1:0]=2'b00;endendelsebeginstate=down;dec_in[1:0]=2'b10;endenddefault:beginstate=stop;dec_in[1:0]=2'b00;endendcaseendendEndmodule功能仿真:5.6.floor_time模块功能:用于控制电梯上升和下降相邻楼层的时间代码:modulefloor_time(fclk,reset,count);inputfclk,reset;output[1:0]count;reg[1:0]count;always@(posedgefclkornegedgereset)beginif(!reset)begincount[1:0]=0;endelsebeginif(count[1:0]==2'd2)begincount[1:0]=0;endelsecount[1:0]=count[1:0]+1'b1;endendEndmodule模块仿真:5.7.top顶层模块:功能:用于各个模块之间的连接以实现整体功能代码:moduletop(clk,reset,key1,key2,chose,display,display1,light);inputclk,reset,key1,key2;input[2:0
本文标题:单电梯微控器设计 FPGA课程设计报告
链接地址:https://www.777doc.com/doc-6496601 .html