FPGA实现可编程单脉冲发生器设计
- 格式:doc
- 大小:395.50 KB
- 文档页数:11
摘要:本实验是采用fpga方式基于Alter Cyclone2 EP2C5T144C8的简易脉冲信号发生器,可以实现输出一路周期1us到10ms,脉冲宽度:0.1us到周期-0.1us,时间分辨率为0.1us的脉冲信号,并且还能输出一路正弦信号(与脉冲信号同时输出)。
输出模式可分为连续触发和单次手动可预置数(0~9)触发,具有周期、脉宽、触发数等显示功能。
采用fpga计数实现的电路简化了电路结构并提高了射击精度,降低了电路功耗和资源成本。
关键词:FPGA;脉冲信号发生器;矩形脉冲;正弦信号;引言(一)方案设计与比较脉冲信号产生方案:方案一、采用专用DDS芯片的技术方案:目前已有多种专用DDS集成芯片可用,采用专用芯片可大大简化系统硬件制作难度,内部数字信号抖动小,输出信号指标高;但专用芯片控制方式比较固定,最大的缺点是进行脉宽控制,测量困难,无法进行外同步,不满足设计要求。
方案二、单片机法:利用单片机实现矩形脉冲,可以较方案以更简化外围硬件,节约成本,并且也可以实现灵活控制、能产生任意波形的信号发生器。
但是单片机的内部时钟一般是小于25Mhz,速度上无法满足设计要求,通过单片机产生脉冲至少需要三条指令,所需时间大于所要求的精度要求,故不可取。
方案二:FPGA法:利用了可编程逻辑器件的灵活性且资源丰富的特点,通过Quartus软件的设计编写,实现脉冲信号的产生及数控,并下载到试验箱中,这种方案电路简单、响应速度快、精度高、稳定性好故采用此种方案。
(二)理论分析与计算脉冲信号产生原理:输入量周期和脉宽,结合时钟频率,转换成两个计数器的容量,用来对周期和高电平的计时,输出即可产生脉冲信号。
脉冲信号的精度保证:时间分辨率0.1us,周期精度:+0.1%+0.05us,宽度精度:+0.1%+0.05us,为满足精度要求,所以所选时钟频率至少1/0.05us=20MHZ,由于试验箱上大于10MHZ只有50MHZ,故选时钟信号50MHZ,此时精度1/50MHZ=0.02us<0.05us,满足精度要求。
fpga 脉冲电路
FPGA(Field-Programmable Gate Array)是一种可编程逻辑器件,常用于实现各种数字电路和系统。
在 FPGA 中,可以使用逻辑单元和时钟资源来设计和实现脉冲电路。
脉冲电路是一种产生脉冲信号的电路,通常包括时钟信号源、计数器、分频器、延迟线等组件。
以下是一个简单的 FPGA 脉冲电路的设计示例:
1. 时钟信号源:使用 FPGA 内部的时钟资源或外部时钟输入,生成一个基准时钟信号。
2. 计数器:使用计数器对时钟信号进行计数,以控制脉冲的频率和宽度。
3. 分频器(可选):如果需要生成不同频率的脉冲,可以使用分频器对计数器的输出进行分频。
4. 延迟线(可选):可以使用延迟线来调整脉冲的相位或延迟时间。
5. 输出模块:将计数器或分频器的输出连接到 FPGA 的输出引脚,以产生脉冲信号。
在设计脉冲电路时,需要根据具体的需求选择合适的时钟频率、计数器位数、分频比、延迟时间等参数。
同时,还需要注意时序约束和时钟管理,以确保电路的稳定性和可靠性。
这只是一个简单的示例,实际的 FPGA 脉冲电路可能会更加复杂,并且可能包括其他功能,如脉宽调制、脉冲序列生成、触发电路等。
具体的设计将取决于你的具体应用和需求。
如果你需要更详细或特定的信息,我将很愿意帮助你。
请提供更多的背景和具体问题,以便我能够更好地为你提供帮助。
1 引言要求改变脉冲周期和输出脉冲个数的脉冲输出电路模块在许多工业领域都有运用。
采用数字器件设计周期和输出个数可调节的脉冲发生模块是方便可行的。
为了使之具有高速、灵活的优点,本文采用Atelra公司的可编程芯片FPGA设计了一款周期和输出个数可变的脉冲发生器。
经过板级调试获得良好的运行效果。
2 总体设计思路脉冲的周期由高电平持续时间与低电平持续时间共同构成,为了改变周期,采用两个计数器来分别控制高电平持续时间和低电平持续时间。
计数器采用可并行加载初始值的N位减法计数器。
设定:当要求的高电平时间以初始值加载到第一个减法器中后,减法器开始减计数,计数到零时自动停止,同时启动第二个记录低电平持续时间的计数器计时。
当第二个减法计数器也减计到零时,计数器自动停止。
这样就完成一个脉冲的输出,而这个脉冲的周期控制完全可以在计数器的初始值中进行有效的设定.以达到脉冲周期可调的目的。
为了控制脉冲个数的输出,在脉冲输出通道上设计一个数量控制计数器,对脉冲个数进行计数,当计到要求输出的个数时.完成输出并给出一个done信号作为该模块工作完成的标志信号。
封装好的脉冲发生器设计框图如图l所示。
引脚信号说明:start信号:启动信号。
reset,信号:系统复位信号。
clock信号:系统时钟信号。
high信号:高电平持续时间初值。
low信号:低电平持续时间初值。
num信号:个数控制寄存器初始值。
output信号:脉冲输出信号。
初始化时为低。
done信号:脉冲输出完的标志信号。
3 高低电平计时器设计3.1 设计方法为了产生所需要时间的高电平,可以利用一个可预置数的减法计数器来达到目的,计数器设计分为两个部分,一部分是可预置数的自控制减法计数器:另一部分是减法计数器工作完成后的检测计数器工作完成后输出一个时钟周期宽的脉冲作为该计数器工作完成信号,并可作为下一个计数器工作的启动信号。
原理框图如图2所示。
3.2 工作原理首先.外部的复位信号reset给出一个时钟周期宽的脉冲,复位内部各个信号及触发器。
可编程单脉冲发生器的设计一.功能描述1. 可编程单脉冲发生器是一种脉冲宽度可编程的信号发生器,其输出为TTL电平。
2. 在输入按键的控制下,产生单次的脉冲,脉冲的宽度由8位的输入数据控制。
由于是8位的脉宽参数,故可以产生255种宽度的单次脉冲。
3. 按下复位键,初始化系统。
4. 按下启动键,产生单脉冲。
二.输入输出信号描述信号名输入/输出目标/源功能描述clk Input 时钟信号width Input Pin 脉冲宽度start Input Pin 开始输出信号命令RST Input Pin 复位信号pluse_out Output Pin 输出脉冲信号时钟分析顶层模块:设计思想说明:1、在系统复位后,经一定的延时产生一个预置脉冲load,用来预置width。
应该注意:复位脉冲不能用来同时预置,要在其之后再次产生一个脉冲来预置脉宽参数。
为了产生单次的脉冲,必须考虑到在按键start有效后,可能会保持较长的时间,也可能会产生多个尖脉冲。
因此,需要设计一种功能,使得当检测到start有效后就封锁start 的再次输入,直到系统复位。
这是本设计的一个关键所在。
2、start产生后,单脉冲pluse_out便输出。
在此,应注意到:start是与系统时钟clk 不同步的,不加处理将会影响单脉冲pluse_out的精度。
为此,在start产生后,等待cl k到达上升沿,当clk到达上升沿后,计数单元开始计数。
当达到预定时钟宽度后,再产生一个宽度为widyh的单脉冲。
四、子模块描述4.1,延时模块1、功能描述本设计中需要产生一个延时为5个时钟的延时信号。
2、管脚描述信号名称输入/ 输出源功能描述cnt[2:0]输入PIN 计数信号CLK 输入PIN 时钟信号load输出PIN 延迟标志信号RST输入PIN 复位信号3、实现说明:当RST无效时,由计数器计数5个时钟周期后输出一个时钟延时信号。
4.2 计数模块1、功能描述本设计中要产生一个预置位宽的计数寄存器。
一、设计报告: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) 按下启动键,发出单脉冲。
以上三步可用三个按键来完成。
但是,由于目标板已确定,故考虑在复位键按下后,经过延时自动产生预置脉宽参数的动作。
输出的信号加到灯上,输如的脉宽有开发版上的拨码开关决定,当输入脉宽后,按下复位键置入脉宽,然后按下启动键,发出单脉冲,延时一段时间后灯开始亮,亮一段时间后灯熄灭。
延时模块的时序图如下:clkclrload3.流程图的设计:根据时序关系,可以做出图所示的流程图。
在系统复位后,经一定的延时产生一个预置脉冲load,用来预置脉宽参数。
当按键key有效后产生脉冲pulse。
二、验证方案:1.验证方案的设计:①分频模块的设计:分频模块的代码:module div(clk_50M,clk);//模块名及端口的定义,到endmodule。
input clk_50M;//输入端口的定义。
output clk;//输出端口的定义。
reg [31:0] a=32‘d0;//定义内部寄存器并赋初值。
reg clk=0;//给输出赋初值。
always@(posedge clk_50M)beginif(a==32'd500000)//判断计数器是不是记到了500000begina<=32'd0;// 计数器记到了500000清零。
基于FPGA的脉冲信号发生器设计章欣【摘要】基于FPGA并运用DDS技术的相关理论,通过模块化设计,使标准脉冲信号发生器达到较高的性能指标,能够产生1~100 kHz 线性可调的脉冲,脉冲分辨率达100 Hz,上升沿及下降沿为2.5 ns,脉冲宽度从200 ns~5μs可调,脉宽分辨率50 ns,满足集成电路的脉冲驱动要求。
%Based on FPG and the theory of DDS technology,according to the design of each module,the standard pulse signal generator achieves the high performance index.It can produce 1 k-100 kHz linear adjustable pulse,100Hz the pulse resolution,2.5ns rising and falling edge,pulse width adjustable from 200ns-5μs and 50ns pulse width resolution,which meets the requirement of pulse drive in the integrated circuits.【期刊名称】《气象水文海洋仪器》【年(卷),期】2014(000)002【总页数】5页(P69-73)【关键词】FPGA;脉冲信号发生器;DDS【作者】章欣【作者单位】南京信息工程大学,气象灾害预报预警与评估协同创新中心,南京210044【正文语种】中文【中图分类】TP317.40 引言在集成电路应用中经常需要使用脉冲源来驱动集成芯片,在雷达、计算机硬件系统和通信系统等领域的设计和调试中,同样需要大量的精度高、速度快的脉冲信号和数字序列作为激励。
在其他领域例如:激光器供电、电火花加工、静电除尘、脉冲电镀等方面,脉冲源也得到了广泛的应用,因而脉冲信号发生器的设计和研制具有很大的价值。
可编程单脉冲发生器设计一、功能描述:本设计实现一个可编程单脉冲发生器,具体功能如下:1.异步信号复位,复位后信号输出重新开始。
2.复位后5个时钟周期时,产生一个脉冲,对输入的脉冲宽度参数读取。
3.当有按键使能时,输出脉冲信号,重复再按使能键,无效。
4.使能按键后产生的单脉冲的上升沿与时钟取得同步。
5.产生的脉冲信号的最大宽度为255。
二、输入输出信号描述:系统结构框图顶层模块说明:1、counter:计数比较,确保输出信号宽度为输入data值;2、sync:将按键产生的单脉冲的上升沿与时钟取得同步;3、T_trigger:T触发器模块,锁按键信号,使按键只能第一次有效;4、preset_parameter:预置脉冲参数;5、LED:将输入data用数码管输出显示。
设计说明:设计分为计数比较、按键同步、预置脉冲参数、T触发器模块、LED 显示五个模块。
计数比较模块:计数延时,由输入的宽度参数data的不同而得到不同宽度的脉冲。
按键同步模块:使按键产生的单脉冲的上升沿与时钟取得同步。
预置脉冲参数:在系统进行复位操作的5个时间单位后,将输入的脉冲参数data预置到flag_data中。
T触发器模块:T触发器模块,锁按键信号,使按键只能第一次有效。
LED显示模块:将脉冲宽度的预置值和计数模块的计数值转换为数码管输出显示。
四、子模块描述:4.1、counter:计数判断输出模块1、功能描述计数延时,由输入的宽度参数data的不同而得到不同宽度的脉冲。
复位后输出out为0。
当Q_in按键使能标志有效时,cnt[7:0]从零开始计数,当cnt<data_in时,输出out=1;其余输出为0。
4、模块验证1.正常运行观测其输出变化;复位观测。
2.将cnt接数码管显示,观测脉冲宽度。
4.2、sync:同步按键与时钟信号模块1、功能描述使按键产生的单脉冲的上升沿与时钟取得同步。
当按键被按下(即en_in=0)时,将Q1<=1,在clk为高电平时将Q2<=Q1,en_out<=Q2;clr=en_in&en_out,当clr有效时Q1<=0。
单位代码:10359学号:2015110906 密级:公开分类号:TN78Hefei University of Technology 硕士学位论文MASTER’S DISSERTATION(学术硕士)论文题目:基于FPGA的高速可编程的脉冲信号发生器的设计学科专业:微电子学与固体电子学作者姓名:田宇导师姓名:徐南阳教授完成时间:2018年3月合肥工业大学学历硕士学位论文基于FPGA的高速可编程的脉冲信号发生器的设计作者姓名:田宇指导教师:徐南阳教授学科专业:微电子学与固体电子学研究方向:量子信息与量子计算2018年03月A Dissertation Submitted for the Degree of MasterDesign of High Speed Programmable Pulse GeneratorBased on FPGAByTian YuHefei University of TechnologyHefei, Anhui, P.R.ChinaMarch,2018本论文是在导师徐南阳教授的指导下完成的。
时光飞逝,短暂的三年硕士研究生生活即将迎来尾声,内心十分感慨。
在这三年的光阴里,我得到了无数来自老师和实验室师弟妹的关心与帮助,在论文完成之际,我对实验室所有的师生表示感谢。
首先我要感谢我的导师徐南阳老师。
三年研究所学习生涯里,徐南阳老师幽默风趣的生活作风和严谨刻苦的科研态度,深深地影响了我。
徐老师对不同领域知识涉猎广泛,眼界开阔,使我深刻感觉到了学无止境、志存高远的精神。
徐老师平日里学术上的教导和生活中的教诲,教会了我待人处世的道理,使我受益终身。
其次,我要感谢实验室的陈老师与耿老师。
陈老师在科研教学繁忙之余,经常关心督促我的学业,并不厌其烦地为我解答学业上的疑惑;耿老师年龄与我相近,他刻苦钻研的科研精神和灵敏开阔的思维,使我不断充满旺盛的学习热情,感谢两位老师。
我还要感谢实验室的师弟妹们,宋雨萌,邢腾腾,郑子贤,施赛烽,周飞飞。
可编程单脉冲发生器设计可编程单脉冲发生器是一种脉冲宽度可编程的信号发生器,其输出为TTL 电平。
在输入按键的控制下,产生单次的脉冲,脉冲的宽度由8位的输入数据控制(以下称之为脉宽参数)。
由于是8位的脉宽参数,故可以产生255种宽度的单次脉冲。
在目标板上,I0~I7用作脉宽参数输入,PULSE_OUT用做可编程单脉冲输出,而KEY和/RB作为启动键和复位键。
图3示出了可编程单脉冲发生器的电路图。
图3 可编程单脉冲发生器的电路图8.3.1 由系统功能描述时序关系可编程单脉冲发生器的操作过程是:(1) 预置脉宽参数。
(2) 按下复位键,初始化系统。
(3) 按下启动键,发出单脉冲。
以上三步可用三个按键来完成。
但是,由于目标板已确定,故考虑在复位键按下后,经过延时自动产生预置脉宽参数的动作。
这一过程可用图4的时序来描述。
图4 可编程单脉冲发生器的时序图图中的/RB为系统复位脉冲,在其之后自动产生LOAD脉冲,装载脉宽参数N。
之后,等待按下/KEY键。
/KEY键按下后,单脉冲P_PULSE便输出。
在此,应注意到:/KEY的按下是与系统时钟CLK不同步的,不加处理将会影响单脉冲P_PULSE的精度。
为此,在/KEY按下期间,产生脉冲P1,它的上跳沿与时钟取得同步。
之后,在脉宽参数的控制下,使计数单元开始计数。
当达到预定时间后,再产生一个与时钟同步的脉冲P2。
由P1和P2就可以算出单脉冲的宽度Tw。
8.3.2 流程图的设计根据时序关系,可以做出图5所示的流程图。
在系统复位后,经一定的延时产生一个预置脉冲LOAD,用来预置脉宽参数。
应该注意:复位脉冲不能用来同时预置,要在其之后再次产生一个脉冲来预置脉宽参数。
为了产生单次的脉冲,必须考虑到在按键KEY有效后,可能会保持较长的时间,也可能会产生多个尖脉冲。
因此,需要设计一种功能,使得当检测到KE Y有效后就封锁KEY的再次输入,直到系统复位。
这是本设计的一个关键所在。
可编程单次脉冲发生器的教学实验
李桂林;苗长新
【期刊名称】《实验科学与技术》
【年(卷),期】2010(008)001
【摘要】介绍了一个数字系统综合设计实验:可编程单次脉冲发生器的设计与实现.该脉冲发生器可在输入按键的控制下,产生单次的脉冲,脉冲的宽度可由8位的输入数据控制.实验以FPGA为硬件基础,以MAX+plusII为软件工具开发完成.实验不仅体现了数字系统设计实验课程的综合训练目标,要求学生能综合、灵活应用Verilog HDL语言,掌握多层次结构系统设计方法、Top_down设计思想和FPGA开发方法等理论知识,并且与工程实际结合紧密.所开发的系统具有很大的实用价值,是一个值得推广的典型教学实验.
【总页数】4页(P12-14,25)
【作者】李桂林;苗长新
【作者单位】徐州师范大学电气工程及自动化学院,江苏,徐州,221116;中国矿业大学信息与电气学院,江苏,徐州,221008
【正文语种】中文
【中图分类】TN914.3;G642.0
【相关文献】
1.可编程器件在纳秒级多通道数字延迟/脉冲发生器中的应用 [J], 高辉;陈文通;王金祥;王卫兵;李为民;盛六四
2.数字式可编程脉冲发生器 [J], 纪越峰
3.可编程脉冲发生器的若干技术问题研究 [J], 蔡领;朱金刚
4.用于高功率激光脉冲整形的可编程任意波形电脉冲发生器 [J], 王琛;刘百玉;欧阳娴;白永林;李东;白晓红;杨文正;田进寿;黄蕾;侯洵
5.一种适合于听觉神经刺激的可编程双相恒流脉冲发生器 [J], 曾晓军;洪志良;任俊彦;晁英伟;陈康民
因版权原因,仅展示原文概要,查看原文内容请购买。
可编程单脉冲发生器设计可编程单脉冲发生器是一种脉冲宽度可编程的信号发生器,其输出为TTL 电平。
在输入按键的控制下,产生单次的脉冲,脉冲的宽度由8位的输入数据控制(以下称之为脉宽参数)。
由于是8位的脉宽参数,故可以产生255种宽度的单次脉冲。
在目标板上,I0~I7用作脉宽参数输入,PULSE_OUT用做可编程单脉冲输出,而KEY和/RB作为启动键和复位键。
图3示出了可编程单脉冲发生器的电路图。
图3 可编程单脉冲发生器的电路图8.3.1 由系统功能描述时序关系可编程单脉冲发生器的操作过程是:(1) 预置脉宽参数。
(2) 按下复位键,初始化系统。
(3) 按下启动键,发出单脉冲。
以上三步可用三个按键来完成。
但是,由于目标板已确定,故考虑在复位键按下后,经过延时自动产生预置脉宽参数的动作。
这一过程可用图4的时序来描述。
图4 可编程单脉冲发生器的时序图图中的/RB为系统复位脉冲,在其之后自动产生LOAD脉冲,装载脉宽参数N。
之后,等待按下/KEY键。
/KEY键按下后,单脉冲P_PULSE便输出。
在此,应注意到:/KEY的按下是与系统时钟CLK不同步的,不加处理将会影响单脉冲P_PULSE的精度。
为此,在/KEY按下期间,产生脉冲P1,它的上跳沿与时钟取得同步。
之后,在脉宽参数的控制下,使计数单元开始计数。
当达到预定时间后,再产生一个与时钟同步的脉冲P2。
由P1和P2就可以算出单脉冲的宽度Tw。
8.3.2 流程图的设计根据时序关系,可以做出图5所示的流程图。
在系统复位后,经一定的延时产生一个预置脉冲LOAD,用来预置脉宽参数。
应该注意:复位脉冲不能用来同时预置,要在其之后再次产生一个脉冲来预置脉宽参数。
为了产生单次的脉冲,必须考虑到在按键KEY有效后,可能会保持较长的时间,也可能会产生多个尖脉冲。
因此,需要设计一种功能,使得当检测到KE Y有效后就封锁KEY的再次输入,直到系统复位。
这是本设计的一个关键所在。
图5 可编程单脉冲发生器的流程图8.3.3 系统功能描述根据时序和流程图,可以进一步描述系统的功能。
图6给出了系统功能描述。
图6 可编程单脉冲发生器的系统功能与系统的时序相呼应,功能框图较详细地描述了系统应有的功能。
系统主要有以下三大模块组成:(1) 延时模块P_DLY。
(2) 输入检测模块P_DETECT。
(3) 计数模块LE_EN_DCNT。
在此阶段,应尽可能详细地描述系统,给出合理的逻辑关系,进行正确的功能模块分配。
例如:不要把计数模块LE_EN_DCNT与延时模块P_DLY混在一起,否则给后续的设计带来不必要的麻烦。
对每一个模块有了详细的功能描述,下一步就可以将其细化为具体的逻辑电路了。
8.3.4 逻辑框图将系统功能描述用逻辑框图来描述,可以用图7来说明。
图7 可编程单脉冲发生器的逻辑功能(1) 延时模块P_DLY。
CLK给延时单元提供计数时基,在复位脉冲/RB从有效变为无效时,启动延时单元。
延时时间到后便输出一个负有效的脉冲,其宽度为一个时钟周期。
(2) 输入检测模块P_DETECT。
/RB复位系统后,该模块等待/KEY的输入,一旦检测到有下跳,便一方面封锁输入,一方面产生并保持与时钟同步的一个上跳脉冲。
该脉冲用以开启计数模块LE_EN_DCNT的计数允许端EN。
(3) 计数模块LE_EN_DCNT。
脉宽参数端IN接受8位的数据,经数据预置端LOAD装载脉宽参数,在计数允许端有效后便开始计数。
该计数器设计成为减法计数的模式,当其计数到0时,输出端OUT由高电平变为低电平。
该输出与来自延时模块P_DETECT的输出进行"与"运算,便可得到单脉冲的输出。
但是,根据以上的逻辑功能,还不能方便地用Verilog-HDL来描述,需要进一步分析、细化各模块的功能。
另外,即使分析清楚了各模块,也应该将各模块分别进行仿真,正确无误后,再将所有的模块连接起来,进行系统级的仿真。
8.3.5 延时模块的详细描述及仿真如图8所示,/RB的下跳沿将U1复位,上跳沿将U1的输出端置"1"。
同时,/RB将U3复位,其输出端开启"三与门"。
在这种情况下,时钟CLK 通过"三与门"输入到U2的IN端,U2延时一定时间(本设计为5个时钟周期)后输出下跳的脉冲,该脉冲持续一个时钟周期后又上跳,上跳沿输入到T触发器,T触发器的输出端封锁"三与门"。
这一时序关系如图9所示。
图8 延时模块的逻辑功能描述图9 延时脉冲的时序关系图8中的延时单元DLY_UNIT可用图10的逻辑电路实现。
图10 延时模块中的计数器至此,延时模块P_DLY已可用Verilog-HDL来描述了。
/* 延时模块P_DLY的Verilog-HDL描述*/module pulse ( CLK, RB, DLY_OUT); // 模块名及端口定义,范围至en dmoduleinput CLK, RB; // 输入端口定义output DLY_OUT; // 输出端口定义wire Q, QB, CNT_CLK; // 中间变量定义DFF_R U1 ( CLK, Q, RB); // D触发器assign CNT_CLK = CLK & Q & QB; // 赋值语句,实现把三与门的输出赋给CNT_CLKDELAY U2 ( RB, CNT_CLK , DLY_OUT); // 延时单元T FF U3 ( DLY_OUT, QB, RB ); // T触发器endmodule/* 延时单元DELAY */module DELAY ( RESET_B, CLK, DIV_CLK ); // 模块名及端口定义,范围至endmoduleinput RESET_B, CLK; // 输入端口定义output DIV_CLK; // 输出端口定义reg [2:0] Q; // 中间变量定义always @ ( posedge CLK or negedge RESET_B )// always语句,表示每当CLK的上升沿或RESET_B的下降沿到来时,完成begin-end之间语句的操作if ( !RESET_B ) // 如果RESET_B=0Q <= 0; // 则Q = 0,即:计数器清0 else if ( Q == 5 ) // 否则,如果Q=5,即:计数器计数已满Q <= 0; // 则Q = 0,即:计数器清0elseQ <= Q + 1; // 否则,计数器加1assign DIV_CLK = ~(Q[2] & ~Q[1] & Q[0]);// 赋值语句,实现把三与门的输出反向后赋值给DIV_CLKendmodule由于D触发器和T触发器的设计比较简单,这里就不做描述了,具体描述见参考文献(3)。
图11为延时模块的仿真结果。
从仿真结果可以看出与设计是相吻合的。
图11 延时模块的仿真结果8.3.6 输入检测模块的详细描述及仿真图12为输入检测模块的逻辑电路。
工作原理简述如下:(1) 系统复位脉冲/RB使U1、U2复位。
(2) U2的输出端允许CLK进入U1的CLK端。
(3) U1的反相输出端开启与/KEY相关的与门,允许/KEY的第一次有效。
(4) /KEY无效(高电平),使U1的D端为低电平。
(5) P_DETECT的输出始终为低电平。
(6) /KEY有效(低电平)。
(7) U1的D端为高电平。
(8) 待时钟CLK的上跳沿到来时,将U1的D端高电平打至U1的输出端并保持。
此输出的上跳沿与时钟CLK同步。
(9) 此时,U1的反相输出端为低电平,该电平封锁与/KEY相关的与门,从而禁止/KEY的再次输入,直到复位脉冲/RB的到来。
图12 输入检测模块的逻辑功能描述/* 输入检测模块P_DETECT的Verilog-HDL描述*/module pulse ( CLK, RB, KEY , OUT); // 模块名及端口定义,范围至endm oduleinput CLK, RB, KEY; // 输入端口定义output OUT; // 输出端口定义wire CLK2, T_QB ;// 中间变量定义assign CLK2 = CLK & T_QB; // 赋值语句,实现把与门的输出赋给CLK2DFF_R U1 ( CLK2 , ~KEY & ~OUT, OUT, ~ OUT, RB ); // D触发器TFF U2 ( OUT, T_QB, RB ); // T触发器endmodule由于D触发器和T触发器的设计比较简单,这里就不做描述了,具体描述见参考文献(3)。
图13为输入检测模块的仿真结果。
可以看出,在复位脉冲之后,KEY的有效(低电平)使检测模块的输出为高电平,其一直保持到系统复位脉冲的到来。
还可以看出,KEY有效后,输出并不一定立刻出现高电平,而要等到时钟CLK 的上跳沿到来。
在输出为高电平的情况下,即使KEY再次有效,也不会影响输出。
这说明模块一旦接受到了输入,便立刻禁止在其之后的输入,除非接收到复位脉冲的到来。
在仿真时,应该给出尽可能多的信号组合来测试系统,否则会常常将人引入误区。
图13 输入检测模块的仿真结果8.3.7 计数模块的详细描述计数模块的逻辑电路如图14所示。
数据预置端IN的数据在LOAD有效(高电平)时被打入内部的寄存器。
在EN有效的情况下,计数器开始做减法计数。
当计数值减为0时,输出为低电平。
此模块描述较简单,故省略模块的仿真。
图14 计数模块的逻辑功能描述8.3.8 可编程单脉冲发生器的系统仿真以上,已经对各个模块进行了描述。
下面,就可以进行系统仿真了。
可编程单脉冲发生器的系统描述可见参考文献(3)。
图15为可编程单脉冲发生器的逻辑仿真结果。
由仿真结果可以看出,单脉冲输出的持续时间(脉冲宽度)由输入的脉宽参数DATA_IN决定。
图15 可编程单脉冲发生器的逻辑仿真结果8.3.9 可编程单脉冲发生器的硬件实现仿真工作结束后,按照第六讲介绍的方法,用WebPACK Project Navigat or软件,把源文件生成目标文件,并通过下载电缆将目标代码写入芯片。
这样,就可以实际检测该硬件电路的工作情况了。
图16为可编程单脉冲发生器的实测波形。
本例中,脉宽参数的设定值为1。
因此,应该产生宽度为一个时钟周期的单脉冲。
又由于时钟为10MHz,即周期为100ns。
所以图16的脉宽为100ns。
实测的数据显示了本设计的正确性。