[整理]FPGA课程设计-电风扇的自动定时开关控制器._第1页
[整理]FPGA课程设计-电风扇的自动定时开关控制器._第2页
[整理]FPGA课程设计-电风扇的自动定时开关控制器._第3页
[整理]FPGA课程设计-电风扇的自动定时开关控制器._第4页
[整理]FPGA课程设计-电风扇的自动定时开关控制器._第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、西安邮电学院 FPGA课程设计报告 题 目:电风扇的自动定时开关控制器 院 系:电子工程学院 专业班级:微电子0901 学生姓名: 导师姓名: 起止时间: 2012618至 2012629 FPGA课程设计报告提纲 1 任务 运用 FPGA 用 FPGA 开发板的按键作为输入控制键,用数码管显示当前电风扇自动定时 状态(包括:自动开 /关,工作定时等)。 2 目的 运用 verilog hdl 描述设计,在开发板上实现要求。 3 使用环境 (软件 /硬件环境,设备等 ) Ep2c35f672c6 开发板 4 FPGA 课程设计详细内容 4.1 技术规范 4.1.1 功能定义 (1),根据用户需

2、求,通过按键切换来实现风扇定时和普通工作模 式。 ( 2) 普通工作模式时,由手动开关控制电风扇的开关,即当开关 打开时,风扇工作; 开关关闭时,风扇停止工作。 ( 3) 定时模式时,根据设定定时时间来选择电风扇工作时间,比 如 10 分钟、 20 分钟、 30 分钟等,并且同步显示剩余工作时间,但是 此时用户仍可以通过开关控制提前关掉电扇。 ( 4) LED 上显示当前工作状态:风扇工作亮,停止工作灭。数码 管显示总的设定的时间(小时,分钟)和剩余工作时间。 4.1.2 系统结构框图 Clk 总体设计可以分为以上几个模块,各模块的功能简要介绍: (1) 分频模块:模块的功能是把50MHz的系

3、统时钟转换为1Hz的 时钟,和2Hz的时钟。1Hz的时钟供计数模块的使用。2Hz的时钟供输入定 时数值的使用。 (2)模式选择控制模块:选择需要的工作模式。包括两个模式:定时、 普通。 (3)自动定时倒计时模块:选择定时模式后,根据键盘的输入值来设 定工作时间,在定时时间以内则风扇工作,倒计时结束或开关关闭时风扇自 动关闭。 (4)显示模块:LED上显示当前工作状态:风扇工作亮,停止工作 灭。数码管显示总的设定的时间和剩余工作时间。 4.1.3应用范围 可以用于控制电扇手动控制电风扇工作或停止,也可以按照设定的时 间自动工作或停止。 4.1.4引脚描述 顶层模块管脚描述 (1)输入开关管脚 信

4、号名称 功能描述 输入输出 位宽 Clk 系统时钟,频率为50MHz in put 1 Op 模式选择信号,为1时为定时模 式;为0时为普通模式。 in put 1 In 输入设定时间信号 in put 4 Key 设疋时间后开始计时信号 In put 1 Clr 清零信号 in put 1 Fz 复制信号 In put 1 En 开始计时信号 In put 1 (2)输出显示管脚 信号名称 功能描述 输入输出 位宽 Out 风扇工作信号,为1是风扇工作, 为0时风扇停止工作 Output 1 Out_3 时间高位数码管输出端,为时钟 的十位 output 7 Out_2 时间低位数码管输出端

5、,为时钟 的个位 output 7 Out_1 时间高位数码管输出端,为分钟 的十位 output 7 Out_0 时间高位数码管输出端,为分钟 的十位 output 7 4.2设计方案 4.2.1概述 此自动定时控制器,可以实现定时模式和普通模式的切换,一共有六个模块。 (1)分频模块:模块的功能是把50MHz的系统时钟转换为1Hz的 时钟,和2Hz的时钟。1Hz的时钟供计数模块的使用。2Hz的时钟供输入定 时数值的使用。 (2)模式选择控制模块:模式选择控制模块:选择需要的工作模式。 包括两个模式:定时、普通。 (3)自动定时倒计时模块:选择定时模式后,根据键盘的输入值来设 定工作时间,在

6、定时时间以内则风扇工作,倒计时结束或开关关闭时风扇自 动关闭。 (4)显示模块:LED上显示当前工作状态:风扇工作亮,停止工作 灭。数码管显示总的设定的时间和剩余工作时间。 (5)信号处理模块:该模块的主要作用是在定时没有结束的时候用火 仍可以通过开关来控制电扇的关闭。 (6)数据输入模块:当赋值信号(fz )有效后可以通过键盘输入定时 的时间,确定输入无误后按下启动键(en),风扇开始倒计时。 4.2.2顶层模块划分 (1)分频模块 这个模块的功能是把频率为 50MHz的时钟转换为1Hz的时钟,供计时 模块的使用。 引脚分配: 信号名称 功能描述 方向 宽度 Clk 输入50MHz的 时钟信

7、号 in put 1 In clk 输出经过分频 以后的1Hz的 时钟信号 output 1 Nclk 输出经过分频 后的2hz的时钟 信号 Output 1 电路设计: (2)模式选择控制模块:选择需要的工作模式。包括两个模式:自动、 手动,op为1时是定时模式,opl为0时是普通模式。若为定时模式风在设 定的时间内自动工作,当计时结束时风扇自动停止工作,即计时反馈信号out 为0时,风扇自动关闭。若选为手动模式,则在有手动开关key来控制风扇 的开关,key为1时风扇工作,为0时停止工作。 引脚分配 信号名称 功能描述 方向 宽度 op 模式选择信号,为1时为自动开 关模式;为0时为手动开

8、关模式。 in put 1 key 开关信号 in put 1 out 风扇工作状态信号 output 1 clk 主时钟 In put 1 Clr 清零信号 In put 1 A_1 Op为1时a_1为1 Output 1 A_0 Op为0时a_0为1 Output 1 Key_1 Key和a_0都为1时可key_1为1, 否则为0。 Output 1 电路设计 Oft:OptKM OD a_O*regO (3)自动定时倒计时模块:选择定时模式后,根据键盘的输入值来设 定工作时间,在定时时间以内则风扇工作,倒计时结束时风扇自动关闭。 管脚分配 信号名称 功能描述 输入输出 位宽 Clk 主时

9、钟 In put 1 n elk 计时时钟,频率为1Hz in put 1 en 开始倒计时信号 in put 1 H 小时数据输入 in put 8 m 分钟数据输入 In put 8 Sig n 时间计数为零反馈信号 output 1 电路设计 (4)显示模块:LED上显示当前工作状态:风扇工作亮,停止工作 灭。数码管显示总的设定的时间和剩余工作时间。 管脚分配 信号名称 功能描述 输入输出 位宽 Data_3 时间咼位输出端,为小时的十位 in put 4 Data_2 时间低位输出端,为小时的个位 in put 4 Data_1 时间咼位输出端,为分钟的十位 in put 4 Data

10、_0 时间低位输出端,为分钟的个位 in put 4 Out_3 时间咼位数码管输出端,为小时 的十位 output 7 Out_2 时间低位数码管输出端,为小时 output 7 的个位 Out_1 时间高位数码管输出端,为分钟 的十位 Output 7 Out_0 时间低位数码管输出端,为分钟 的个位 Output 7 Clk 主时钟 In put 1 clr 清零信号 In put 1 sign 计时信号 In put 1 电路设计 (5)信号处理模块 该模块主要是用来在定时还没有结束时,用户仍可以通过开关关闭电扇。 信号名称 功能描述 输入输出 位宽 Key 电扇开关 In put 1

11、 Key_1 电扇在普通模式下产生的工作信 号 In put 1 Sig n 倒计时信号 In put 1 Out 电扇工作信号 Output 1 (6)数据输入模块 该模块用于用户输入定时时间。 信号名称 功能描述 输入输出 位宽 Clk 2hz时钟,用于防抖 In put 1 clr 清零信号 In put 1 Fz 赋值信号 In put 1 H_0 小时低位输入端 In put 1 H_1 小时高位输入端 In put 1 M_0 分钟低位输入端 In put 1 M_1 分钟高位输入端 In put 1 H 小时输入数值 Output 8 M 分钟输入数值 Output 8 二吕 U

12、 -3V 1 P 4.3功能验证方案 4.3功能验证方案可变模值计数器模块项目信号名预期结果实际结果结果比较时钟 输入clk_50M 20ns时钟信号同左复位检测rst初始化高电平,等待同左 V200ns后变 为低电平分频器脉冲进位Clk rst为低电平后,每5同左 V个时钟脉冲(为测试 方便选 用模5分频器)后产生一个高脉 冲秒time_sec当clk为高时,加1,同左V从0加 至U 60 分 time_min 当 time_sec 为高时,同左 V time_min . 4.4电路设计源代码,功能仿真激励源代码及功能仿真结果报告 /顶层模块 module fan (op,clr,clk,k

13、ey,fz,e n,h_1,h_0,m_1,m_0,out,out_3,out_2,out_1,out_0, nclk); in put op,clr,clk,key,fz,e n; in put h_1,h_0,m_1,m_0; output out, nclk; wire out ,n clk; output 6:0 out_3,out_2,out_1,out_0; wire 7:0 h,m; wire b_m,b_h; wire 3:0 h_bcd_h,h_bcd_l,m_bcd_h,m_bcd_l; wire a_1,a_0; wire key_1; wire sign; wire i

14、nclk; display play(.fz(fz),.h_1(h_1),.h_0(h_0),.m_1(m_1),.m_0(m_0),.clk(inclk),.clr(clr),.h(h),. m(m); fenpin fen(.inclk(inclk),.nclk(nclk),.clk(clk),.clr(clr); clock min(.a_1(a_1),.sign(sign),.sclk(nclk),.en(en),.data(m),.clk(clk),.b_m(b_m),.bcd_h( m_bcd_h),.bcd_l(m_bcd_l); hour ho(.sign(sign),.en(

15、en),.a(b_m),.data(h),.clk(clk),.b_h(b_h),.bcd_h(h_bcd_h),.bcd_l (h_bcd_l); opt option(.op(op),.a_1(a_1),.a_0(a_0),.key(key),.clk(clk),.clr(clr),.key_1(key_1); last la(.key(key),.key_1(key_1),.sign(sign),.out(out); sg sos(.b_m(b_m),.b_h(b_h),.clk(clk),.clr(clr),.sign(sign); led_display l_play(.sign(o

16、ut),.out_3(out_3),.out_2(out_2),.out_1(out_1),.out_0(out_0),.clk(clk ),.clr(clr),.data_3(h_bcd_h),.data_2(h_bcd_l),.data_1(m_bcd_h),.data_0(m_bcd_l) ); endmodule 分频模块 module fenpin(clk,clr,nclk,inclk); input clk,clr; output nclk,inclk; reg nclk,inclk; reg 50:0 nadd,inadd; always (posedge clk) begin

17、if(!clr) begin nclk=0; nadd=0; end else begin if(nadd=24999999) begin nclk=!nclk; nadd=0; end else nadd=nadd+1; end end if(!clr) begin inclk=0; inadd=0; end else begin if(inadd=12999999) begin inclk=!inclk; inadd=0; end else inadd=inadd+1; end end endmodule 倒计时模块 module hour(a,en,sign,data,clk,b_h,b

18、cd_h,bcd_l); input a,clk,en,sign; input 7:0 data; wire 7:0 data; output b_h; reg b_h; output 3:0 bcd_h,bcd_l; reg 3:0 bcd_h,bcd_l; reg 7:0 count; reg e; always (posedge clk) begin if(!en) e=1; end always (posedge a or negedge en) if(!en) begin count=data; b_h=0; end else begin if(a) begin if(count3:

19、0=0) begin if(count7:4=0) begin b_h=1; end else begin count7:4=count7:4-1; count3:0=4b1001; b_h=0; end end else begin count3:0=count3:0-1; b_h=0; end end end if(e) begin bcd_h=count7:4; bcd_l=count3:0; end end endmodule module clock(en,a_1,sign,data,sclk,clk,b_m,bcd_h,bcd_l); input en,sign,clk,sclk,

20、a_1; input 7:0 data; wire 7:0 data; output b_m; reg b_m; output 3:0 bcd_h,bcd_l; reg 3:0 bcd_h,bcd_l; reg 7:0 count; wire as; reg e; assign as=e always (posedge clk) begin if(!en) e=1; end always (posedge sclk or negedge en) if(!en) begin count=data; b_m=0; end else begin if(as) begin if(count3:0=0)

21、 begin if(count7:4=0) begin count7:4=4b0101; count3:0=4b1001; b_m=1; end else begin count7:4=count7:4-1; count3:0=4b1001; b_m=0; end end else begin count3:0=count3:0-1; b_m=0; end end end always (posedge clk or posedge e) begin if(e) begin bcd_h=count7:4; bcd_l=count3:0; end end endmodule module sg(

22、b_m,b_h,clk,sign,clr); input b_m,b_h,clk,clr; output sign; reg sign; always (posedge clk or negedge clr) begin if(!clr) begin sign=1; end else begin if(b_h) begin if(b_m) begin sign=0; end else begin sign=1; end end else begin sign=1; end end end endmodule 信号处理模块 module last(key,sign,key_1,out); inp

23、ut key,sign,key_1; output out; wire out; wire ks; assign ks=key assign out=ks|key_1; endmodule 数据输入模块 module display(h_1,h_0,m_1,m_0,fz,clk,clr,h,m); input h_1,h_0,m_1,m_0; input clk,clr,fz; output 7:0 h,m; reg 7:0 h,m; reg 3:0 add_m_0,add_m_1,add_h_0,add_h_1; always (posedge clk or negedge clr) beg

24、in if(!clr) begin add_m_0=0; add_m_1=0; end else begin if(fz) begin if(!m_0) begin if(add_m_0=4b1001) begin add_m_0=1b0; end else begin add_m_0=add_m_0+1b1; end end if(!m_1) begin if(add_m_1=4b0101) begin add_m_1=1b0; end else begin add_m_1=add_m_1+1b1; end end end end end if(!clr) begin add_h_0=0;

25、add_h_1=0; end else begin if(fz) begin if(!h_0) begin if(add_h_0=4b1001) begin add_h_0=0; end else begin add_h_0=add_h_0+1; end end if(!h_1) begin if(add_h_1=4b0101) begin add_h_1=0; end else begin add_h_1=add_h_1+1; end end end end end always (posedge clk or negedge clr) begin if(!clr) begin h=0; m

26、=0; end else begin h=add_h_1,add_h_0; m=add_m_1,add_m_0; end end Endmodule 模式切换模块 module opt(op,a_1,a_0,key_1,key,clk,clr); input op,key,clk,clr; output a_1,a_0,key_1; reg a_1,a_0; assign key_1=key always (posedge clk or negedge clr) begin if(!clr) begin a_0=0; a_1=0; end else begin if(op) begin a_1

27、=1; a_0=0; end else begin a_0=1; a_1=0; end end end endmodule led 数码管显示模块 module led_display(out_3,out_2,out_1,out_0,clk,clr,data_3,data_2,data_1,data_0,sign); input clk,clr,sign; input 3:0 data_3,data_2,data_1,data_0; output 6:0 out_3,out_2,out_1,out_0; wire 6:0 out_3,out_2,out_1,out_0; led h_1(.cl

28、k(clk),.clr(clr),.d(data_3),.out(out_3),.sign(sign); led h_0(.clk(clk),.clr(clr),.d(data_2),.out(out_2),.sign(sign); led m_1(.clk(clk),.clr(clr),.d(data_1),.out(out_1),.sign(sign); led m_0(.clk(clk),.clr(clr),.d(data_0),.out(out_0),.sign(sign); endmodule module led(d,clk,clr,out,sign); input 3:0 d;

29、wire 3:0 d; input clk,clr,sign; output 6:0 out; reg 6:0 out; always (posedge clk or negedge clr) begin if(!clr) out=0; else begin if(!sign) out=0; else case(d) 4b0000:out=7b0000_001; 4b0001:out=7b1001_111; 4b0010:out=7b0010_010; 4b0011:out=7b0000_110; 4b0100:out=7b1001_100; 4b0101:out=7b0100_100; 4b0110:out=7b0100_000; 4b0111:out=7b0001_111;

温馨提示

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

评论

0/150

提交评论