当前位置:文档之家› 基于FPGA的单脉冲发生器

基于FPGA的单脉冲发生器

西安邮电大学FPGA课程设计报告题目:可编程单脉冲发生器院系:通信与信息工程学院专业班级:电子信息科学与技术学生姓名:韩萌导师姓名:张丽果起止时间:2012-9-10至2012-9-222012年09月20日FPGA课程设计报告提纲1.任务根据输入的8位的脉宽参数,输出255种宽度的单次脉冲。

可编程单脉冲发生器是一种脉冲宽度可编程的信号发生器,在输入按键的控制下,产生单次的脉冲,脉冲的宽度由8位的输入数据控制。

由于是8位的脉宽参数,故可以产生255种宽度的单次脉冲。

2.目的产生一个脉冲宽度可根据8位输入数据(data)可变的脉冲发生器。

可变的脉冲信号可以通过把输入的data赋值给一个count,通过对count信号做减1操作控制输出的脉冲宽度。

把data赋给count后,在key键启动的情况下,输出脉冲pulse信号开始输出低电平,count同时在每来一个时钟信号的时候做减1操作,而且pulse信号一直保持高电平,当count减为0时,把pulse信号拉低。

这样就输出了一个脉冲宽度可以根据data输入信号可变的脉冲信号。

3.使用环境(软件/硬件环境,设备等)布局布线使用的环境是Quartus II。

仿真测试使用的环境是ModelSim SE。

4.FPGA课程设计详细内容4.1 技术规范(一)、功能定义如下:本设计实现一个可编程单脉冲发生器,具体功能如下:1.异步信号复位,复位后信号输出可以重新开始。

2.把8为脉冲宽度data赋给计数信号count。

3.当有key按键使能时,输出脉冲信号,并做count减1操作,重复再按使能键无效。

4.使能按键后产生的单脉冲的上升沿与时钟取得同步。

5.当count减为0时,脉冲信号拉低。

高电平持续的宽度,即所需的脉冲宽度。

6.产生的脉冲信号的最大宽度为255。

(二)、引脚定义4.2 设计方案(1)系统功能描述(1)分频模块:输入为总的时钟50M,经过分频以后变为100HZ。

分频模块主要是根据系统时钟,对a做加1操作,没来一个系统时钟的上升沿就对a 加1,然后与16进行比较,如果相等,则把a清0,然后分频时钟clk_1翻转,a又重新计数,接着又与16比较,相等则clk_1翻转,不等则继续加1。

如此循环,最后生成分频时钟clk_1。

(2)计数模块:脉宽参数端data接收8位的数据,经数据预置端clr装载脉宽参数,在计数允许端有效后便开始计数。

该计数器设计成为减法计数的模式,当其计数到0时,输出端pulse由高电平变为低电平。

便可得到单脉冲的输出。

②系统功能描述时序关系可编程单脉冲发生器的操作过程是:(1) 预置脉宽参数。

(2) 按下复位键,初始化系统。

(3) 按下启动键,发出单脉冲。

4.3 功能验证方案1:验证对象及目的:本验证方案将描述对“可编程单脉冲发生器”的验证。

2:在本验证过程中将验证一下内容:1>验证环境和工具:a:使用ModelSim仿真工具;b:使用Quartus II工具;2>仿真确认:a:分频模块:由于系统提供的频率为50MHz,通过控制计数a使输出频率为100HZ。

编写完成后,可通过查看仿真波形查看验证的正确性。

分析:通过对a计数输出分频后的时钟信号clk_1。

b: 计数模块:计数模块主要把输入的8位脉冲宽度data传给count,通过对count的计数与0比较判断是否相等来翻转输出的脉冲信号。

通过key键时能后,把输入信号data传给count,并输出脉冲信号pulse高电平,此后count做减1操作,当count减到0时,脉冲信号pulse输出低电平。

通过给data不同的值,会得到不同的脉冲宽度的信号。

编写好测试激励后,通过查看仿真图形可以查看验证的正确性。

分析:key为按键启动信号,当key为低电平时,把8位脉冲宽度给计数信号count并开始计数,同时输出脉冲信号高电平,当count计数为0时,脉冲pulse信号变为低电平。

c:总的仿真波形:通过传送给data不同的1、2、3、4、5、6等6个值,会得到6种不同脉冲宽度的脉冲信号,如图:Clk:系统时钟;rst_n:复位信号;key:按键启动信号;Data:脉冲宽度信号;pulse:脉冲信号;count:中间变量,计数信号;Clk_1;分频后的频率信号;a:计数信号,用于分频;4.4 电路设计源代码,功能仿真激励源代码及功能仿真结果报告1>源代码:module hm(clk,rst_n,data,pulse,key/*,load*/);input clk,rst_n,key;input [7:0] data;output pulse/*,load*/;reg [7:0] count;reg pulse;reg clk_1;reg [4:0] a;alw ays @(posedge clk or negedge rst_n)beginif(~rst_n)beginclk_1=0;a<=5'd0;endelseif(a==5'd16)a<=5'd0;clk_1=~clk_1;endelsea<=a+5'd1;endalw ays @(posedge clk_1 or negedge rst_n)beginif(~rst_n)begincount<=0;pulse<=0;endelsecount<=data;if(key==0)beginpulse<=1;count<=count-8'd1;if(count==8'd0)beginpulse<=0;count<=8'd0;if(pulse==0)begincount<=data;endendendendmodule2>测试激励:module test;reg clk;reg rst_n;reg key;reg [7:0] data;wire pulse;always #1 clk=~clk;hm hm(.clk(clk),.rst_n(rst_n),.data(data),.pulse(pulse),.key(key)/*,.load(load)*/);initialbeginclk<=0;rst_n<=0;key<=1;data<=0;#1 rst_n<=1;#1 data<=8'd1;#1 key<=0;#200 key<=1;#1 key<=0;#1 data<=8'd2;#200 key<=1;#1 key<=0;#1 data<=8'd3;#400 key<=1;#1 key<=0;#1 data<=8'd4;#1 key<=0;#1 data<=8'd5;#100 key<=1;#1 key<=0;#1 data<=8'd6;endendmodule3>仿真结果:详细仿真图如下:从图中可以详细的看出输入data为1个脉冲宽度的情况。

全局的仿真图:从这个图中可以看出脉冲宽度为1、2、3、4、5、6的6个脉冲宽度。

4.5 综合及布局布线报告和引脚分布报告1>:综合,利用Quartus II软件综合后的结果如下图:2>:布局布线:3>:电路结构:4>:引脚定义:4.6 后仿真结果报告加入网表文件的后仿真的结果如图:后仿真所得到的信号图:4.7 硬件测试结果报告因为设备有限,所以,未能完成对硬件的测试。

4.8 对结果和结论的问题讨论自己所做的这个题目相对是比较简单的,刚开始做的时候只用到了一个计数的模块,并没有加入分频模块,但是最后做完之后感觉这样的话会不会太简单,所以在此基础上又加入了分频模块。

从仿真图中可以看出会有几点问题:1>:如果想要根据输入的脉冲宽度data输出特定的脉冲宽度的信号,就必须在输入data数据后,用key按键启动输出信号,其中key键必须全程都按下,否则对输出的脉冲宽度会产生影响。

2>:如果想要往开发板上下载的话,程序还要进行改进:a:因为按键的按下和松开都会有不稳定的状态,所以要加入按键去抖;b:针对第一个问题,要做出一定的改进,我的想法是加入一个状态变量,记录key键按下时的状态,用这个状态变量驱动脉冲的输出。

3>:data数据的读入会有一定的延时,所以要加入模块用来等待data信号全部读入。

5.课程设计的心得体会通过本次为时两周的FPGA课程设计,让我更深的认识到了基于FPGA的开发流程。

从最开始的技术规范开始,到最后的下载到板子上测试,每一步都十分的重要。

这次课设,自己做的题目是“可编程单脉冲发生器”,对于这个题目,刚开始脑子里的想法就是,这个可变的脉冲信号可以通过把输入的data赋值给一个count,通过对count信号做减1操作控制输出的脉冲宽度。

把data赋给count后,在key键启动的情况下,输出脉冲pulse信号开始输出低电平,count同时在每来一个时钟信号的时候做减1操作,而且pulse信号一直保持高电平,当count减为0时,把pulse信号拉低。

这样就输出了一个脉冲宽度可以根据data 输入信号可变的脉冲信号。

基于这个想法,我开始了我这次课设的旅程。

这个想法在课设开始第二天的时候就实现了,那基于对自己的严格要求,自己对这个题目在原先只有技术模块的基础上又加入了分频模块。

其实分频模块的原理和最开始实现脉冲的原理有异曲同工之处。

所以这个模块也很快就实现了。

接下来的时间,我又相继的做了其它的一些题目,包括:“简易的LED流水灯”、“CRC 校验”、“出租车计价器”等几个题目,也逐步的实现了题目的要求。

通过这次课程设计,我从中学习到了很多基于书本上的理论知识加以实践的经验,也在其中遇到问题的同时对问题的解决加深了对某些问题的理解。

总之,每次的课程设计都受益颇深。

6.参考资料等《基于V erilog的FPGA设计基础》——杜慧敏、李宥谋、赵全良编著西安电子科技大学出版社《V erilog HDL数字电路设计与综合》——(美)Samir Palnitkar著——夏宇闻、胡燕祥等译电子工业出版社西安邮电学院电子工程学院FPGA课程设计过程考核表西安邮电学院电子工程学院FPGA课程设计成绩鉴定表。

相关主题