欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOC文档下载  

    基于某FPGA的单脉冲发生器.doc

    • 资源ID:7012       资源大小:233.50KB        全文页数:13页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于某FPGA的单脉冲发生器.doc

    word一、设计报告:1.技术规:在clr的控制下置入脉宽data,在输入按键key的控制下,产生单次的脉冲pulse,脉冲的宽度由data 8位的输入数据控制以下称之为脉宽参数。clk_50M为系统的时钟。2.总体设计方案:系统功能描述:(1)分频模块:输入为总的时钟50M,经过分频以后变为100HZ。(2)延时模块:当clk为高电平且在复位脉冲clr有效时置入延时脉宽,延时5个始终周期后输出一个高电平load 。(3)计数模块:脉宽参数端data承受8位的数据,经数据预置端clr装载脉宽参数,在计数允许端有效后便开始计数。该计数器设计成为减法计数的模式,当其计数到0时,输出端pulse由高电平变为低电平。便可得到单脉冲的输出。系统功能描述时序关系:可编程单脉冲发生器的操作过程是:(1) 预置脉宽参数。(2) 按下复位键,初始化系统。(3) 按下启动键,发出单脉冲。以上三步可用三个按键来完成。但是,由于目标板已确定,故考虑在复位键按下后,经过延时自动产生预置脉宽参数的动作。输出的信号加到灯上,输如的脉宽有开发版上的拨码开关决定,当输入脉宽后,按下复位键置入脉宽,然后按下启动键,发出单脉冲,延时一段时间后灯开始亮,亮一段时间后灯熄灭。延时模块的时序图如下:clkclrload 3.流程图的设计:根据时序关系,可以做出图所示的流程图。在系统复位后,经一定的延时产生一个预置脉冲load,用来预置脉宽参数。当按键key有效后产生脉冲pulse。开始系统复位延时启动计数器预置脉宽计数器完毕?产生单脉冲完毕计数器减一二、验证方案:1.验证方案的设计: 分频模块的设计:分频模块的代码:module div(clk_50M,clk);/模块名与端口的定义,到endmodule。 input clk_50M;/输入端口的定义。 output clk;/输出端口的定义。 reg 31:0 a=32d0;/定义部存放器并赋初值。 reg clk=0;/给输出赋初值。 always(posedge clk_50M) begin if(a=32'd500000)/判断计数器是不是记到了500000 begin a<=32'd0;/ 计数器记到了500000清零。 clk=clk; / 输出脉冲取反end/ 完毕。else a<=a+1;/ 计数器没有记到了500000自加。end/完毕always块。endmodule/完毕分频模块。分频模块的仿真结果:在验证的时候设计了一个8分频。 有波形图可以看出clk_50M经过8个周期后clk取反,实现了8分频,验证了自己的设计。延时模块的设计:延时模块的代码:module dely(clk,clr,load);/模块名与端口的定义,endmodule。input clk,clr;/输入端口的定义。output load;/输出端口的定义。reg 2:0 counta; /延时计数器。reg load;/输出。always(posedge clk or negedge clr)begin if(!clr) / 当clr为低电平时 begin counta<=5;/清零。 load<=0; end/完毕清零。else / 当clr为高电平时计数器减一。begin counta<=counta-8'd1;if(counta=8'd0)/计数器减到零时,进展复位输出load为高 begin counta<=8'd0; load<=1;/输出load为高。 endendendendmodule /完毕延时模块。延时模块的仿真结果: 从波形图可以看出当clr为高电平,且时钟的上升沿到来的时候,延时5个时钟周期后输出load为高电平。计数模块的设计: 计数模块代码:module count(clk,data,clr,load,pulse,key);/模块名定义。input clk,clr,load,key;/输入端口的定义。input7:0 data;/ mai kuan de ding yioutput pulse;/输出的定义。reg pulse;/输出定义为reg类型。reg 7:0 count;/ 计数器的定义。always(posedge clk or negedge clr)begin if(!clr)/低电平复位。 begin count<=data;/置入脉宽。 pulse<=0;/输出为零。endelse if(load=1)/load有效的时候。beginif(key=0)/当有按键按下的时候。begin count<=count-8'd1;/计数器减一。 pulse<=1;/输出为高电平。 if(count=8'd0)/当计数器减到零的时候。 begin count<=8'd0; pulse<=0;/输出为低电平。end/ end beginend/end beginend/end beginend/end alwaysendmodule/完毕计数模块。上图为可编程单脉冲发生器的逻辑仿真结果。由仿真结果可以看出,单脉冲输出的持续时间脉冲宽度由输入的脉宽参数data决定。2.仿真激励源代码:timescale 1ns/100ps module confirmpulse_tb;/仿真模块名字的定义。,reg 7:0 data;/ 输入的脉宽。reg clk_50M,key,clr;/输入的时钟,按键,清零。wire pulse;/输出。always #10 clk_50M=clk_50M;/时钟周期。initialbegin clk_50M=0;clr=0;key=1;data=8'd10; /赋初值。 #10 clr=1;key=0; #10000 $finish;/完毕仿真。endinitial/ 监控。begin$monitor($time,"clk_50M=%d,clr=%d,data=%d,key=%d,pulse=%dn" ,clk_50M,clr,data,key,pulse);endconfirmpulse /实例化。wsm(.key(key),.clk_50M(clk_50M),.data(data),.clr(clr),.pulse(pulse);endmodule/激励模块完毕。五、电路设计源代码:/*顶层模块*/module confirmpulse(clk_50M,data,clr,key,pulse);input 7:0 data;/脉宽的定义。input clk_50M,key,clr;/key是发脉冲的信号,clr为清零信号。output pulse;/脉宽的输出。 wire load;/中间变量的定义。 wire clk; div div(.clk_50M(clk_50M),.clk(clk);/实例化。 dely u1(.clk(clk),.clr(clr),.load(load);/实例化。 countu2(.clk(clk),.data(data),.clr(clr),.load(load),.pulse(pulse),.key(key);/实例化。Endmodule/完毕顶层模块。/*分频模块*/module div(clk_50M,clk);/模块名与端口的定义,到endmodule。 input clk_50M;/输入端口的定义。 output clk;/输出端口的定义。 reg 31:0 a=32d0;/定义部存放器并赋初值。 reg clk=0;/给输出赋初值。 always(posedge clk_50M) begin if(a=32'd500000)/判断计数器是不是记到了500000 begin a<=32'd0;/ 计数器记到了500000清零。 clk=clk; / 输出脉冲取反end/ 完毕。else a<=a+1;/ 计数器没有记到了500000自加。end/完毕always块。endmodule/完毕分频模块。/*延时模块*/module dely(clk,clr,load);/模块名与端口的定义,endmodule。input clk,clr;/输入端口的定义。output load;/输出端口的定义。reg 2:0 counta; /延时计数器。reg load;/输出。always(posedge clk or negedge clr)begin if(!clr) / 当clr为低电平时 begin counta<=5;/清零。 load<=0; end/完毕清零。else / 当clr为高电平时计数器减一。begin counta<=counta-8'd1;if(counta=8'd0)/计数器减到零时,进展复位输出load为高 begin counta<=8'd0; load<=1;/输出load为高。 endendendendmodule /完毕延时模块。/*计数模块*/module count(clk,data,clr,load,pulse,key);/模块名定义。input clk,clr,load,key;/输入端口的定义。input7:0 data;/ mai kuan de ding yioutput pulse;/输出的定义。reg pulse;/输出定义为reg类型。reg 7:0 count;/ 计数器的定义。always(posedge clk or negedge clr)begin if(!clr)/低电平复位。 begin count<=data;/置入脉宽。 pulse<=0;/输出为零。endelse if(load=1)/load有效的时候。beginif(key=0)/当有按键按下的时候。begin count<=count-8'd1;/计数器减一。 pulse<=1;/输出为高电平。 if(count=8'd0)/当计数器减到零的时候。 begin count<=8'd0; pulse<=0;/输出为低电平。end/ end beginend/end beginend/end beginend/end alwaysendmodule/完毕计数模块。六、综合与布局布线报告1.综合的结果:综合工具采用的是Altera公司的。综合的结果如下:九、结论与讨论:在设计过程中,经过验证与思考,在设计的时候需要加上一个延时模块,延时模块起了消抖的作用,如果不加延时模块输出的结果和不稳定。13 / 13

    注意事项

    本文(基于某FPGA的单脉冲发生器.doc)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开