logo资料库

基于FPGA的电风扇的自动定时开关控制器设计.doc

第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
资料共12页,剩余部分请下载后查看
基于 FPGA 的电风扇的自动定时开关控制 器设计 2012-06-25
基于 FPGA 的电风扇的自动定时开关控制 器设计 一. 功能描述 1. 本设计通过一个二选一选择器,可以让使用者选择电风扇的工作状态,普 通工作状态还是定时工作状态。 2. 通过计数器的运用完成倒计时功能,实现电风扇的定时功能。 3. 通过计数器完成对主时钟的分频,为电路提供其各自的时钟。 4. 通过 D 触发器和与门电路完成对定时信号的处理,提供倒计时是否结束的 信号。 5. 通过门电路的控制实现总开关控制电扇是否工作,即总开关开,电扇工作; 总开关关,电扇停止工作,不论定时是否完成。 二.输入输出信号描述 DDS OUT DATA[2:0] CLK 信号名 CLK DATA[2:0] OUT_q 输入/输出 目标/源 Input Pin Input Output Pin Pin 功能描述 主时钟频率,50M ,占空 比 1:1。 3 位的输入数据 波形输出
三 顶层划分 图 1 系统框图
顶层模块说明: 1.状态选择器:二选一选择器,选择电扇工作状态; 2.定时数据输入: D 触发器和计数器的组合,实现数据的输入,使用 bcd 码 计数; 3.倒计时: 计数器,实现倒计数,完成定时功能; 4.信号反馈:D 触发器,控制倒计时是否停止; 5.分频器:计数器,提供电路各自所需要的时钟; 6.输出端:门电路,实现总开关控制电扇是否工作; 7.D:D 触发器输入端,接收加法器输出数据; 8.Q:D 触发器输出端,并将输出数据反馈回加法器输入端,实现数据累加; 9.OUT:接收 D 触发器输出数据的高 8 位,作为波形存储器的地址线; 设计思想说明: 1、DDS 主要用来实现产生各种频率的正弦波,为了使波形更加准确,必须产 生较多的“点”,本设计中共产生 28 个“点”。 2、由于要产生各种频率的波形,所以本设计中采用加法器和数据锁存器的 组合来实现频率的切换。如下图: 通过改变 DATA 的数值可以控制地址线输出的速度。具体波形输出频率可用下 面的公式计算: 四、子模块描述 4.1 地址加法器 D 触发器 1、功能描述 运用加法器和数据锁存器实现地址线输出的频率变换。 2、管脚描述
信号名称 Data Q_out Add_out D Fclk 输入 / 输出 输入 输入|输出 输出 输入 输入 源 PIN PIN PIN PIN PIN 目标 功能描述 加法器 3 位数据输入 数据锁存器 11 位反馈值, 同时也是 D 触发器 11 位 输出端 加法器 11 位输出 D 触发器 11 位输入端 主时钟十分频后时钟 3、实现说明:  在主时钟上升沿的时候判断清零端是否为 0,为 0 则将 D 触发器的输入 输出清零;不为 0 则 D 触发器 Q=D,并将 Q 反馈给输入端,和 DATA 进行 下一次加法,实现累加功能。 4、验证方案  正常的加法功能;  是否实现累加; 4.2 波形存储器 1、功能描述 2、管脚描述 8 位地址线的存储器,用来存储波形数据; 信号名称 Address Fclk Mem_out 输入 / 输出 输入 输入 输出 源 PIN PIN PIN 目标 功能描述 8 位地址线 主时钟十分频后的时钟 8 位存储器输出值 3、实现说明 通过 matalab 软件生成一个正弦(余弦)波数据的.Mif 文件,并加入 quartus 软件的 rom 块中,然后直接调用生成的.v 文件。此文件就是存储器的源代码。 在 Fclk 的上升沿,将 Q 的高 8 位给到地址线 Address,由于上个模块实现的 累加功能,所以地址线实现累加,并且读取速度受上个模块控制。 4、测试 略; 4.3 分频器 1、功能描述 将主时钟实现十分频
2、管脚描述 信号名称 CLK 输入/输出 输入 FCLK 输出 PIN PIN 源 目标 功能描述 主时钟,50M, 占空比 50% 分 频 后 的 时 钟,5M,占空 比 50%。 3、实现说明 通过计数器、比较器、D 触发器,实现分频。当计数从 0 到 4 时 FCLK 翻转一次,即十分频。 4、测试 用 modelsim 仿真,观察波形是否为十分频; 4.4 D/A 转换器 略 五、验证方案: 正常情况下,输入一个 DATA 的值,查看波形输出是否正常。改变 DATA 的值, 再次查看波形输出是否正常,并且其频率是否满足上述的公式计算出的值。 六、程序代码 1.主程序 module dds(clk,clr,data,out); input clk,clr; input data; wire [2:0] data; output out; wire [7:0] out; reg fclk; wire [10:0] add_out; reg [10:0] d; reg [10:0] q_out; reg [10:0] count;
reg [7:0] mem_in sa mem(.address(mem_in),.clock(clk),.q(out)); //实例化 mem assign add_out=(clr==0)?0:data+q_out; always @ (posedge fclk) begin if(!clr) begin d=0; q_out=0; end else begin d=add_out; q_out=d; end end always @ (posedge fclk) if(!clr) else mem_in=0; mem_in=q_out[10:3]; //十分频 always @ (posedge clk) begin if(!clr) fclk=0; else if(count==4) begin fclk=!fclk; count=0; else count=count+1; end end endmodule
2.mem 块程序 // megafunction wizard: %ROM: 1-PORT% // GENERATION: STANDARD // VERSION: WM1.0 // MODULE: altsyncram altsyncram // ============================================================ // File Name: sa.v // Megafunction Name(s): // // // Simulation Library Files(s): // // ============================================================ // ************************************************************ // THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! // // 9.0 Build 132 02/25/2009 SJ Full Version // ************************************************************ altera_mf //Copyright (C) 1991-2009 Altera Corporation //Your use of Altera Corporation's design tools, logic functions //and other software and tools, and its AMPP partner logic //functions, and any output files from any of the foregoing //(including device programming or simulation files), and any //associated documentation or information are expressly subject //to the terms and conditions of the Altera Program License //Subscription Agreement, Altera MegaCore Function License //Agreement, or other applicable license agreement, including, //without limitation, that your use is for the sole purpose of //programming logic devices manufactured by Altera and sold by //Altera or its authorized distributors. Please refer to the //applicable agreement for further details.
分享到:
收藏