可控脉冲发生器.docx
- 文档编号:26236023
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:33
- 大小:845.10KB
可控脉冲发生器.docx
《可控脉冲发生器.docx》由会员分享,可在线阅读,更多相关《可控脉冲发生器.docx(33页珍藏版)》请在冰豆网上搜索。
可控脉冲发生器
成绩评定表
学生姓名
刘金佳
班级学号
1103040110
专业
电子科学与技术
课程设计题目
可控脉冲发生器
设计
评
语
组长签字:
成绩
日期
20年月日
课程设计任务书
学院
信息科学与工程学院
专业
电子科学与技术
学生姓名
刘金佳
班级学号
1103040110
课程设计题目
可控脉冲发生器设计
实践教学要求与任务:
实现周期、占空比均可调的脉冲发生器。
(1)采用1khz的工作时钟;
(2)脉冲周期0.5s~6s,占空比10%~90%;
(3)可初始化:
周期2.5s,占空比50%;
(4)自行设计设计下载后的验证方案;
(5)完成全部流程:
设计文档、模块设计、代码输入、功能仿真、约束与综合、布局布线、下载验证等。
工作计划与进度安排:
本设计持续两周,其中最后一天为答辩时间。
第1-2天:
讲解题目,准备参考资料,检查、调试实验软硬件,进入设计环境,开始设计方案和验证方案的准备;
第3-5天:
完成设计与验证方案,经指导老师验收后进入模块电路设计(验收设计文档);
第6-7天:
完成模块电路设计,进行代码输入,并完成代码的仿真(验收代码与仿真结果);
第8-9天:
约束设计、实现、下载验证(验收验证实现);
第10天:
修正设计、整理设计资料,验收合格后进行答辩。
指导教师:
201年月日
专业负责人:
201年月日
学院教学副院长:
201年月日
摘要
可控脉冲发生器是产生脉冲波形信号的电路,本次课设要求除了控制周期和占空比外,还需要具有初始化生成周期为2.5秒占空比为1:
1的脉冲信号功能。
本文介绍了依据可控脉冲发生器功能要求进行内部电路方案设计的过程,并在此基础上将输入、输出以及各个控制端口的逻辑关系细化,制成flowchart,然后按照流程图的逻辑顺序用VerilogHDL语言描述出来,再用ModelSim进行功能仿真、分析仿真波形得出结果。
在QuartusII下进行逻辑综合和适配下载,最后在Xilinx公司的Cyclone的芯片EP1C6Q240C8中绑定管脚,进行硬件仿真,完整地建立了测试平台,完成了功能和时序仿真,从而保证了设计的功能与时序的正确性。
关键词占空比;周期;可控脉冲;仿真;QUARTUSII
引言
VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguageVerilog作为IEEE的工业标准硬件描述语言,在电子工程领域,已成为事实上的通用硬件描述语言。
CPLD(ComplexProgrammableLogicDevice)复杂可编程逻辑器件,是从PAL和GAL器件发展出来的器件,相对而言规模大,结构复杂,属于大规模集成电路范围。
是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。
其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。
本设计要实现可控脉冲发生器电路。
采用FPGA/CPLD的方案,使用Cyclone芯片,开发过程中采用Xilinx的集成工具QuartusII。
设计过程是这样的:
先根据设计任务要求进行方案的设计,包括引脚确定、功能框图与控制方法等;然后依据电路手册以及真值表写HDL代码的输入与功能仿真,功能仿真采用HDL仿真工具Modelsim;完成功能仿真后再QuartusII平台下进行电路的约束与综合;综合结果无误后进行布局与布线,生成配置文件;最后下载、测试,从而完成设计。
1总体电路结构设计
1.1电路功能与性能
脉冲发生器就是要产生一个脉冲波形,而可控脉冲发生器则是要产生一个周期和占空比可变的脉冲波形。
可控脉冲发生器的实现原理比较简单,可以简单的理解为一个计数器对输入的时钟信号进行分频的过程。
通过改变计数器的上限值来达到改变周期的目的,通过改变电平翻转的阈值来达到改变占空比的目的。
可控脉冲发生器电路的功能主要集中在三方面。
一是对周期的调控和采取,范围为周期0.5s~6s,占空比10%~90%;二是对占空比的调控和采取,范围为占空比10%~90%;三是接收到置位信号时产生周期2.5s占空比1:
1的脉冲信号。
电路的具体功能细节罗列如下:
1)周期的调控和采取。
通过开关datainT和开关EN1来控制信号,当datainT产生的高电平被时钟上升沿采中后,进行判断信号EN1是高电平还是低电平,若为高则产生等级+1信号,计数器+0.5s,上升一等级。
(总共为12等0.5s、1s、1.5s、2s、2.5s、3s、3.5s、4s、4.5s、5s、5.5s、6s)低电平则产生等级-1信号计数器-0.5s,下降一等级。
当锁存器收到EN2高电平新时录入新的等级和数据,此时的周期为当前信号将产生的周期。
当锁存器收到EN2低电平时则不改变。
当锁存器收到置位信号时,优先产生周期为2.5s的信号。
2)占空比的调控和采取。
通过开关datainM和开关EN1来控制信号,当datainM产生的高电平被时钟上升沿采中后,进行判断信号EN1是高电平还是低电平,若为高则产生等级+1信号,计数器+10%,上升一等级。
(总共为9等10%、20%、30%、40%、50%、60%、70%、80%、90%)低电平则产生等级-1信号计数器-10%,下降一等级。
当锁存器收到EN2高电平新时录入新的等级和数据,此时的占空比为当前信号将产生的占空比。
当锁存器收到EN2低电平时则不改变。
当锁存器收到置位信号时,优先产生占控比为50%的信号。
3)置位信号。
按键preset将产生一个1bit的信号给锁存器,如上所说,当收到置位信号后当优先给予产生模块一个产生周期为2.5s、占空比为1:
1的信号。
1.2主要算法和实现难点
本电路设计的主要算法是占空比预定值s的计算。
占空比预定值=周期*占空比=cutQ*cutM/100
实现难点一方面在于如何使脉冲发生器信号产生模块F中的信号翻转条件稳定下来,不会随着输入的改变而导致周期无限延长。
这经过多加一个锁存模块锁定周期和占空比从而解决问题。
另一方面是验证方面,需要对比实验进行对比数据是否不符,比如周期不等于给予的条件,或给了信号后周期是否改变。
这些需要多次试验解决。
1.3电路接口
可控脉冲发生器电路分为输入信号,输出信号。
具体接口如下表1.2所示。
表1.1接口信号表
名称
IO属性
描述
备注
datainT
in
周期输入信号,1bit
高电平有效
datainM
in
占空比输入信号,1bit
高电平有效
clk
in
输入时钟,频率1KHz
rstn
in
输入信号,1bit,低电平复位
高电平有效
preset
in
输入信号,1bit,置数端,低电平置数
低电平有效
en1
in
输入信号,1bit,控制+/-
高、低电平有效
en2
in
输入信号,1bit,高电平取值
高电平有效
out
out
输出信号,产生的目的信号
out2
out
输出信号,为了与目的信号对比产生的固定周期、占空比信号
out3
out
用于显示占空比情况,接灯
out4
out
用于显示占空比情况,接灯
out5
out
用于显示占空比情况,接灯
out6
out
用于显示占空比情况,接灯
out7
out
用于显示周期情况,接灯
out8
out
用于显示周期情况,接灯
out9
out
用于显示周期情况,接灯
out10
out
用于显示周期情况,接灯
1.4电路功能框图
依照功能,电路的功能框图如下所示。
图1.1电路功能框图
1.5验证方案
仿真部分验证:
赋值予各输入信号,查看不同情况下输出是否和预测的相同。
找出不同点进行程序修改,赋值:
initial
begin
preset=0;
#20000preset=1;
#1000preset=0;
end
initial
begin
en1=0;
#1200en1=1;
#20000en1=0;
end
initial
begin
en2=0;
#1000en2=1;
#1700en2=0;
#180000en2=1;
#1000en2=0;
end
initial
begin
datainT=0;
#500datainT=1;
#250000datainT=0;
end
initial
begin
datainM=0;
#500datainM=1;
#250000datainM=0;
End
硬件验证方法:
开发板上如图1.2,5个输入分别连接三个拨挡开关和两个按键(datainT接K8、datainM接K7、en1接K6、en2接S1、preset接S2),输出接十盏灯(D1_1到D1_4为占空比等级显示、D1_5到D1_8为周期等级显示、D2_1为目标输出信号、D2_2为对比输出信号)
K6K7K8
图1.2
若产生的目标信号为周期为1s占空比为30%的目标信号的时候,D1_1到D1_4中D1_3和D1_4亮,D1_5到D1_8中D1_7亮,D2_1循环式亮0.3s灭0.7s。
2模块设计
设计共有5个功能模块,周期输入T模块、占空比输入M模块、锁存器模块、计算占空比对应周期产生的占空比预定值S模块、信号产生F模块。
1)
周期输入T模块。
按键T1信号通过开关EN1的处理后给予计数器一个信号加或减0.5s。
开关EN1控制输入信号产生的效果(高电平+0.5s,低电平-0.5s),开关T1输入信号datainT(高电平有效),计数器cutT计算对应此时的输入T值并发送给锁存模块。
流程图如图2.1,仿真信号预期如图2.2。
图2.1
图2.2
2)占空比输入M模块。
按键M1信号通过开关EN1的处理后给予计数器一个信号加或减0.5s。
开关EN1控制输入信号产生的效果(高电平+10%,低电平-10%),开关M1输入信号datainM(高电平有效),计数器cutM计算对应此时的输入T值并发送给S模块。
流程图如图2.3,仿真信号预期如图2.4。
Y
Y
Y
Y
Y
Y
Y
Y
图2.3
图2.4
3)锁存器模块。
接收到周期或占空比信号后判断开关EN2信号,是否刷新锁存器里面得值。
接收到初始化信号后,刷新周期锁存器值为2.5s,占空比预定值锁存器为0.5。
开关EN2控制输入信号产生的效果(高电平刷新锁存器值,低电平不刷新)。
计算器cutQ和cutW分别计算锁存器中的周期值和占空比预定值并发送给信号产生模块。
流程图如图2.5、2.6,仿真信号预期如图2.7。
图2.5
图2.6
图2.7
4)计算占空比对应周期产生的占空比预定值S模块。
接收cutQ和cutM的信号并计算出对应的占空比预定值并给予计数器s。
计数器s计算占空比预定值并发送给锁存器模块。
5)信号产生F模块。
收到锁存器传来的信号作为比较值,计数器cut1计算时间,当cut1值不大于占空比预定值cutW时,输出高电平;当cut1值大于占空比预定值s时,输出低电平;当cut1值等于周期值cutQ时,计数器cut1清零,输出高电平。
流程图如图2.9、2.10。
图2.8
图2.9
3设计仿真与测试
功能验证分为两部分,一部分是电路功能与时序的软件仿真,采用Moldsim完成;另一部分是将配置文件下载后在开发板上对设计进行测试,通过对datainT、datainM、out、out2、out3、out4、out5、out6、out7、out8、out9、out10、en1、en2、preset、rstn、clk信号的管脚绑定及在置数、清零、周期输入、占空比输入、取值状态下的输入输出结果分析进行。
3.1仿真与测试的功能列表
功能仿真与测试要针对每一条设计需要实现的功能进行。
设计中要求实现的、需要仿真与测试功能列表如下:
1)复位功能——当复位信号低有效时,电路应处于复位状态:
运行控制信号处于无效(低电平)、任何输入没有响应、目标输出灯D2_1常亮、等级显示灯全灭;当复位信号变为高电平时,电路正常工作。
2)置位信号——当有置位信号的时候,并且复位信号为高电平时,无视其他输入,直接刷新锁存器值并产生周期为2.5s占空比为1:
1的目标信号。
3)在rstn=1且EN1=1的状态下,输入datainT为高电平时候,则计数器cutTs随着输入时钟上升沿不断+500;
4)在rstn=1且EN1=0的状态下,输入datainT为高电平时候,则计数器cutT随着输入时钟上升沿不断-500。
5)在rstn=1且EN1=1的状态下,输入datainM为高电平时候,则计数器cutM随着输入时钟上升沿不断+500。
6)在rstn=1且EN1=0的状态下,输入datainM为高电平时候,则计数器cutM随着输入时钟上升沿不断-500。
7)在rstn=1且EN2=1的状态下,输入preset为低电平时候,则计数器cutQ随着输入时钟上升沿不断刷新值为cutT。
8)在rstn=1且EN2=0的状态下,输入preset为低电平时候,则计数器cutQ随着输入时钟上升沿不断刷新值为cutQ(既不变)。
9)在rstn=1且EN2=1的状态下,输入preset为低电平时候,则计数器cutW随着输入时钟上升沿不断刷新值为s。
10)在rstn=1且EN2=0的状态下,输入preset为低电平时候,则计数器cutW随着输入时钟上升沿不断刷新值为cutW(既不变)。
3.2仿真平台构建和仿真结果
3.2.1顶层仿真平台与激励
仿真激励的构造是针对需要验证的功能的,测试文件为aa_tb.v,将aa.v中的激励信号引入,加载到例化的功能模块中,这里采用查看波形的方式确认输出是否正确。
需要查看的波形的功能有以下内容:
输入波形是否符合激励设定的值;输出是否符合各个状态下的期待功能。
3.2.2电路功能仿真结果
仿真后的波形图如下页图3.1,图3.2。
图3.1整体视图
图3.2
图3.3
3.2.3电路后仿真结果
电路的后仿真是要在布线完成之后,生成电路网表的仿真模型和标准延时文件,再在仿真器中进行仿真的方法,主要为了查看时序是否满足要求。
这部分工作只简单进行了一下:
将功能仿真的激励施加到网表中,加载延时文件,得到的结果同上面的功能仿真时一样的。
3.3测试环境的搭建与测试结果
3.3.1测试环境模拟
图3.4
输出接十盏灯(D1_1到D1_4为占空比等级显示、D1_5到D1_8为周期等级显示、D2_1为目标输出信号、D2_2为对比输出信号,若输出为占空比为1:
1周期为3S的目标信号时,则D1_2、D1_4、D1_7、D1_8亮,D2_1循环亮1.5s灭1.5s;输入datainT接K8、datainM接K7、en1接K6、en2接S1、preset接S2,若要输入datainT为高电平时,则开关K8往上打,若要输入preset信号为1时,按下S2键。
3.3.2电路测试结果
忘记在现场拍照,功能如预期。
4电路约束与综合实现
FPGA/CPLD设计中的约束主要可以分为两个方面,一是时序约束,另一个是管脚约束,而一般不考虑面积约束、设计规则约束和工作环境约束。
综合工具直接采用ISE的XST进行。
4.1时序约束
时序约束主要分为输入/输出延时约束、时钟约束以及异步时钟数据间的约束等内容。
本设计中只有一个时序,即为输入时钟1KHZ的时钟。
图4.1
4.2引脚锁定约束
图4.2
管脚约束所要完成的只要锁定输入输出的led灯管脚、开关的管脚和按键的管脚。
4.3电路综合报告
图4.3
4.4设计实现与下载
1.启动编程器后,首先进行硬件设置,点击HardwareSetup按钮,选择USB-Blaster;
2.分别点击AddFile和AddDevice添加对应的芯片和配置文件;
3.选定配置文件,点击start按钮即可开始编程。
结论
忙了很多天设计和仿真,一开始真的什么头绪都没有,一直翻着网页想找成品敷衍了事。
后来发现很多都需要金钱买,比如知网的报告。
想想估计这样的成品估计过不了关,于是开始正式的自己做。
从一开始我就选择了可控脉冲发生器这个课设,是因为脉冲发生器在课堂上见得挺多的,而且别人还不选。
做这个课设我就想,按步骤一步一步走吧。
从资料收集,到逻辑分析,再到编写程序,时序仿真到最后的上板子实现。
一步一步自己慢慢摸索,有时候看到别人做的比我快,就比较烦躁(当时还有考试),想问一下别人吧,同寝室的还忙这自己的,而且他们业没详细的看过我的程序,半桶水业不好给我建议。
到最后还是我自己解决,于是我明白了有些事靠别人不靠谱。
这次实验我做的很慢,不过还是做出来了,成就感还是有的,毕竟这是大学第一次最正式的挑战。
总的来说,这次课设是比较难,也比较有收获的一次。
它让我明白了做事必须持之以恒。
参考文献
[1]彭介华.电子技术课程设计指导.北京高等教育出版社,1997
[2]Micheal.D.Ciletti.AdvancedDigitalwiththeVerilogHDL[M].
电子工业出版社,2004
[3]王金明,杨吉斌.数字系统设计与VerilogHDL.京电子工业出版社,2002
[4]刘明业等译.硬件描述语言Verilog.清华大学出版社,2001
[5]李士忠.高功率带绕式脉冲变压器的研究[D].国防科学技术大学,2005年
附录A设计源代码
moduleaa(datainT,datainM,clk,rstn,preset,en1,en2,out,out2,out3,out4,out5,out6,out7,out8,out9,out10);
inputdatainT,datainM;
inputclk,rstn,preset,en1,en2;
outputout,out2,out3,out4,out5,out6,out7,out8,out9,out10;
wiredatainT,datainM,clk,rstn,preset,en1,en2;
regout,out2,out3,out4,out5,out6,out7,out8,out9,out10;
reg[12:
0]cutT;
always@(posedgeclkornegedgerstn)//输入周期模块T//
if(~rstn)cutT<=500;
elseif(en1==1)if(cutT==6500)cutT<=500;//minT0.5S//
elseif(datainT)cutT<=cutT+500;//T+0.5s//
elsecutT<=cutT;
elseif(cutT==0)cutT<=6000;//maxT6.0S//
elseif(datainT)cutT<=cutT-500;//T-0.5s//
elsecutT<=cutT;
reg[12:
0]cutM;
always@(posedgeclkornegedgerstn)//输入占空比模块M//
if(~rstn)cutM<=10;
elseif(en1==1)if(cutM==100)cutM<=10;//minM10%//
elseif(datainM==0)cutM<=cutM+1;//M+10%//
elsecutM<=cutM;
elseif(cutM==0)cutM<=90;//maxM90%//
elseif(datainM==0)cutM<=cutM-10;//M-10%//
elsecutM<=cutM;
reg[12:
0]cutQ;//周期锁存器模块//
always@(posedgeclk)
if(preset==0)cutQ<=2500;
elseif(en2==1)cutQ<=cutT;
elsecutQ<=cutQ;
wire[12:
0]s;
assigns=cutQ*cutM/100;//占空比对应周期的预定值的计算模块//
always@(posedgeclk)//实现等级显示//
if(cutQ==500)beginout7<=0;out8<=0;out9<=0;out10<=1;
if(s==(cutQ*10/100))beginout3<=0;out4<=0;out5<=0;out6<=1;end
elseif(s==(cutQ*20/100))beginout3<=0;out4<=0;out5<=1;out6<=0;end
elseif(s==(cutQ*30/100))beginout3<=0;out4<=0;out5<=1;out6<=1;end
elseif(s==(cutQ*40/100))beginout3<=0;out4<=1;out5<=0;out6<=0;end
elseif(s==(cutQ*50/100))beginout3<=0;out4<=1;out5<=0;out6<=1;end
elseif(s==(cutQ*60/100))beginout3<=0;out4<=1;out5<=1;out6<=0;end
elseif(s==(cutQ*70/100))beginout3<=0;out4<=1;out5<=1;out6<=1;end
elseif(s==(cutQ*80/100))beginout3<=1;out4<=0;out5<=0;out6<=0;end
elseif(s==(cutQ*90/100))beginout3<=1;out4<=0;out5<=0;out6<=1;end
elsebeginout3<=out3;out4<=out4;out5<=out5;out6<=out6;endend
elseif(cutQ==1000)beginout7<=0;out8<=0;out9<=1;out10<=0;
if(s==(cutQ*10/100))beginout3<=0;out4<=0;out5<=0;out6<=1;end
elseif(s==(cutQ*20/100))beginout3<=0;out4<=0;out5<=1;out6<=0;end
elseif(s==(cutQ*30/100))beginout3<=0;out4<=0;out5<=1;out6<=1;end
elseif(s==(cutQ*40/100))beginout3<=0;out4<=1;out5<=0;out6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可控 脉冲 发生器