基于FPGA的单脉冲发生器Word文件下载.docx
《基于FPGA的单脉冲发生器Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于FPGA的单脉冲发生器Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
(二)、引脚定义
信号名
输入/输出
功能描述
clk
Input
时钟频率50M占空比1:
1。
rst_n
低电平有效,程序重新执行,计数器清零。
data[7:
0]
8位控制脉冲信号的宽度。
key
按键控制pulse输出。
pulse
Output
输出信号。
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:
使用QuartusII工具;
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>
源代码:
modulehm(clk,rst_n,data,pulse,key/*,load*/);
inputclk,rst_n,key;
input[7:
0]data;
outputpulse/*,load*/;
reg[7:
0]count;
regpulse;
regclk_1;
reg[4:
0]a;
always@(posedgeclkornegedgerst_n)
begin
if(~rst_n)
begin
clk_1=0;
a<
=5'
d0;
end
else
if(a==5'
d16)
clk_1=~clk_1;
else
=a+5'
d1;
end
always@(posedgeclk_1ornegedgerst_n)
begin
if(~rst_n)
count<
=0;
pulse<
end
=data;
if(key==0)
=1;
=count-8'
if(count==8'
d0)
=8'
if(pulse==0)
count<
end
endmodule
测试激励:
moduletest;
regclk;
regrst_n;
regkey;
reg[7:
wirepulse;
always#1clk=~clk;
hmhm(.clk(clk),.rst_n(rst_n),.data(data),.pulse(pulse),.key(key)/*,.load(load)*/);
initial
clk<
rst_n<
key<
data<
#1rst_n<
#1data<
#1key<
#200key<
d2;
d3;
#400key<
d4;
d5;
#100key<
d6;
endmodule
3>
仿真结果:
详细仿真图如下:
从图中可以详细的看出输入data为1个脉冲宽度的情况。
全局的仿真图:
从这个图中可以看出脉冲宽度为1、2、3、4、5、6的6个脉冲宽度。
4.5综合及布局布线报告和引脚分布报告
1>
:
综合,利用QuartusII软件综合后的结果如下图:
布局布线:
电路结构:
4>
:
引脚定义:
4.6后仿真结果报告
加入网表文件的后仿真的结果如图:
后仿真所得到的信号图:
4.7硬件测试结果报告
因为设备有限,所以,未能完成对硬件的测试。
4.8对结果和结论的问题讨论
自己所做的这个题目相对是比较简单的,刚开始做的时候只用到了一个计数的模块,并没有加入分频模块,但是最后做完之后感觉这样的话会不会太简单,所以在此基础上又加入了分频模块。
从仿真图中可以看出会有几点问题:
如果想要根据输入的脉冲宽度data输出特定的脉冲宽度的信号,就必须在输入data数
据后,用key按键启动输出信号,其中key键必须全程都按下,否则对输出的脉冲宽度会产生影响。
2>
如果想要往开发板上下载的话,程序还要进行改进:
因为按键的按下和松开都会有不稳定的状态,所以要加入按键去抖;
针对第一个问题,要做出一定的改进,我的想法是加入一个状态变量,记录key键按下时的状态,用这个状态变量驱动脉冲的输出。
3>
data数据的读入会有一定的延时,所以要加入模块用来等待data信号全部读入。
5.课程设计的心得体会
通过本次为时两周的FPGA课程设计,让我更深的认识到了基于FPGA的开发流程。
从最开始的技术规范开始,到最后的下载到板子上测试,每一步都十分的重要。
这次课设,自己做的题目是“可编程单脉冲发生器”,对于这个题目,刚开始脑子里的想法就是,这个可变的脉冲信号可以通过把输入的data赋值给一个count,通过对count信号做减1操作控制输出的脉冲宽度。
基于这个想法,我开始了我这次课设的旅程。
这个想法在课设开始第二天的时候就实现了,那基于对自己的严格要求,自己对这个题目在原先只有技术模块的基础上又加入了分频模块。
其实分频模块的原理和最开始实现脉冲的原理有异曲同工之处。
所以这个模块也很快就实现了。
接下来的时间,我又相继的做了其它的一些题目,包括:
“简易的LED流水灯”、“CRC校验”、“出租车计价器”等几个题目,也逐步的实现了题目的要求。
通过这次课程设计,我从中学习到了很多基于书本上的理论知识加以实践的经验,也在其中遇到问题的同时对问题的解决加深了对某些问题的理解。
总之,每次的课程设计都受益颇深。
6.参考资料等
《基于Verilog的FPGA设计基础》
——杜慧敏、李宥谋、赵全良编著
西安电子科技大学出版社
《VerilogHDL数字电路设计与综合》
——(美)SamirPalnitkar著
——夏宇闻、胡燕祥等译
电子工业出版社
西安邮电学院电子工程学院FPGA课程设计过程考核表
学生姓名
韩萌
班级/序号
电科0901/14
承担任务实验室(单位)
微电子学系
所在部门
电子工程学院
实施时间
2012年9月10日至2011年9月21日
具体内容
第一周
第一周主要完成题目的分析及技术规范的制订,根据技术规范设计模块,并对各个模块进行功能仿真,以验证其正确性.
第二周
第二周主要完成综合及后仿真,对中间出现的各种问题进行调试,最后完成设计报告.
指导教师(师傅)姓名
张丽果
职务或职称
讲师
指导教师(师傅)
对学生的评价
学习态度
□认真□一般□不认真
学习纪律
□全勤□偶尔缺勤□经常缺勤
实践能力
□很强□一般□较差
指导教师(师傅)对学生专业知识或社会实践能力等情况的意见
指导教师(师傅)签字
年月日
西安邮电学院电子工程学院FPGA课程设计成绩鉴定表
韩萌
进行时间
2011年9月10日至2011年9月21日
成绩鉴定
学习内容(20分)
与教学任务计划结合程度(10分)
与专业培养结合程度(6分)
其它(4分)
评价
(20分)
实践能力(10分)
学习态度(6分)
学习纪律(4分)
报告鉴定
(60分)
报告内容与实践过程紧密结合(15分)
报告内容与教学计划内容紧密结合(15分)
报告质量(主题、结构、观点、逻辑、资料、字数30分)
评阅教师姓名
职称
成绩
评语
评阅教师签字