基于FPGA的单脉冲发生器

西安邮电大学

FPGA 课程设计报告

题 目:可编程单脉冲发生器

院 系:通信与信息工程学院 专业班级:电子信息科学与技术 学生姓名: 韩 萌 导师姓名: 张丽果 起止时间:2012-9-10至2012-9-22

2012年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) begin if(~rst_n) begin clk_1=0; a

if(a==5'd16)

a

a

alw ays @(posedge clk_1 or negedge rst_n)

begin if(~rst_n) begin count

count

count

if(count==8'd0) begin pulse

count

end endmodule 2>测试激励:

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)*/); initial begin clk

#1 key仿真结果:

详细仿真图如下:从图中可以详细的看出输入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 课程设计报告

题 目:可编程单脉冲发生器

院 系:通信与信息工程学院 专业班级:电子信息科学与技术 学生姓名: 韩 萌 导师姓名: 张丽果 起止时间:2012-9-10至2012-9-22

2012年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) begin if(~rst_n) begin clk_1=0; a

if(a==5'd16)

a

a

alw ays @(posedge clk_1 or negedge rst_n)

begin if(~rst_n) begin count

count

count

if(count==8'd0) begin pulse

count

end endmodule 2>测试激励:

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)*/); initial begin clk

#1 key仿真结果:

详细仿真图如下:从图中可以详细的看出输入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的出租车计费器论文
  • 长春工程学院毕业设计(论文)1 引言最近几年出租车行业发展迅速,在全国有几千家出租车公司,因此出租车计费器的市场 是庞大的.由于受到油价影响,各大城市都推出了运价油价联动机制,所以出租车计费器计 价标准的灵活设定成为未来计费器不可缺少的一部分.而出租车运价是 1993 年制定的,1998 年做过微调 ...

  • 基于FPGA的汽车尾灯控制器的设计
  • 基于FPGA的汽车尾灯控制器的设计 摘要 随着社会的不断进步,现代化技术已经深入到人们生活的各个角落,而汽车作为较为方便的代步工具,已经成为我们生活中不可或缺的一部分,人们对于它的研究已经进入技术非常发达的阶段,为了使其更为完美,能被人们更方便.更简单的利用,人们从没停止对它的各方面的研究. 对于汽 ...

  • 基于测频原理的频率计
  • 课程设计任务书 学生姓名:王耀辉专业班级:通信1304 指导教师:陈适 工作单位:信息工程学院 题 目: 采用测频原理的数字频率计 初始条件:VHDL硬件描述语言,ISE Design Suite开发环境,Modelsim SE仿真环境 要求完成的主要任务: 1. 采用测频法,设计一个4位十进制数字 ...

  • 铁路信号电源屏
  • 浅谈铁路信号电源屏UPS的选配方案 宋福顺 吉林吉林132001)(吉林铁道职业技术学院, 英文缩写为UPS摘要:不间断供电系统又称不间断电源或不停电电源,(UnintrruptablePowerSystem),是一种现代化电源设备. 现场对如何选择合适的UPS没有明确提出,铁路电源屏上广泛的应用该 ...

  • 多路信号发生器的设计
  • 多路信号发生器的设计制作 摘要:提出了一种基于FPGA 的DDS 多路信号源的原理方案和实现方法.该信号源以altera 公司生产的FPGA 芯片为核心,通过D /A 转换器转换,经FIR 滤波器滤波之后输出波形,使用按键控制可实现多路信号输出切换.此信号源可同时输出两路波形信号,可为正弦波.锯齿波 ...

  • 基于EDA的出租车计费系统的设计
  • 摘 要 近年来随着各领域消费电子类的层出不穷,使得数字系统设计的节奏进一步的加快发展.数字系统快速发展最明显的一个标志是超大规模集成电路(VLSI)的迅速发展,使得各领域诸如消费类电子产品市场的研发与设计也进入到一个新的时代.上述技术的主要特点有:(1)各领域电子产品以及相关的工艺及设计技术的快速发 ...

  • 矢量控制高性能异步电机速度控制器设计_林立
  • DOI:10. 15934/j.cn k i . m icrom otors. 2005. 06. 015 矢量控制高性能异步电机速度控制器设计 林立 黄声华 矢量控制高性能异步电机速度控制器设计 林 立1, 黄声华2 (1. 邵阳学院, 邵阳, 422004; 2. 华中科技大学, 武汉, 430 ...

  • 电子综合课程设计题目
  • 电子综合课程设计题目汇总 1. 水温控制系统设计 任务:设计并制作一个水温自动控制系统,控制对象为1升净水,容器为搪瓷器皿.水温可以在一定范围内由人工设定,并能在环境温度降低时实现自动控制,以保持设定的温度基本不变. 要求: 1)基本要求 (1)温度设定范围为40-90℃,最小区分度为1℃,标定温度 ...

  • 通信工程专业毕业设计题目大全
  • 卷积编码和维特比译码的FPGA实现 2 CVSD音频编译码算法研究与FPGA实现 3 DQPSK调制解调技术研究及FPGA仿真实现 4 基于FPGA的高斯白噪声发生器设计与实现 5 无线通信系统选择分集技术研究 6 MIMO系统空时分组编码的性能研究 7 基于量子烟花算法的认知无线电频谱分配技术研究 ...