基于FPGA的单脉冲发生器
基于FPGA的脉冲控制发生器设计与研究
fr nf m p l si m n , i c dgt e u nysnhs D S loi m w sao tdt d s nte o i r us as n e t dr t ii l q e c y tei u o e g e af r s( D )agrh a d pe o ei t g h
p le g n r tri u s e e ao n FPGA i rl g HDL. Th s p s e e ao s v lc t n o i o o r l mo e, usng Ve io i ule g n r t rha e o i a d p st n c nto d y i
数 字 量 ,转 换 为相 应 频率 的脉 冲发 送给 驱 动器 ¨ 。
K e o ds:S e o to ;FPGA ;DDS ag rt m ; P le g n rt yW r tp c nrl l o ih us e eae
0 引 言
数 字运 动 控 制 系统 中 可 能采 用 步 进 电机 ,或 者 需 要伺 服 电 机 工 作 在 步 进 模 式 。 在 这 些 情 况 下 ,运
b si n d u io ml h to o r lc r s d o n u eo iy Afe o a i g wi n ag rt m e a sg e nf r y by t e mo in c nto a d ba e n i p tv l ct . t rc mp rn t a lo i h h
中用 V ro D ei gH L语 言完成 了脉 冲发 生器的设计 。该脉 冲发生 器具 有速度 与位 置两种 控制模 式 ,并 可 以根 据 电机 驱 l 动器的工作模式 输出 4种不同的脉 冲。测试 表 明该发生 器 的输 出脉 冲均 匀稳定 ,分辨 率高 ,频 率范 围完全覆 盖宽 ,
FPGA实现可编程单脉冲发生器设计
可编程单脉冲发生器设计可编程单脉冲发生器是一种脉冲宽度可编程的信号发生器,其输出为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的再次输入,直到系统复位。
这是本设计的一个关键所在。
脉冲信号发生器设计
摘要:本实验是采用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单脉冲产生器
可编程单脉冲发生器的设计一.功能描述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、功能描述本设计中要产生一个预置位宽的计数寄存器。
基于FPGA的单脉冲发生器
一、设计报告: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的可编程单脉冲发生器设计规范
可编程单脉冲发生器设计一、功能描述:本设计实现一个可编程单脉冲发生器,具体功能如下: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的不同而得到不同宽度的脉冲。
信号名称输入/ 输出源目标功能描述clk Input Pin 时钟信号50MHzrst Input Pin 复位信号,低电平有效data_in[7:0] Input Pin 脉冲宽度参数Q_in Input Pin 按键使能标志out Output Pin 脉冲输出复位后输出out为0。
当Q_in按键使能标志有效时,cnt[7:0]从零开始计数,当cnt<data_in时,输出out=1;其余输出为0。
基于FPGA的脉冲信号发生器设计
a d j u s t a b l e p u l s e , l O O Hz t h e p u l s e r e s o l u t i o n,2 .5 n s r i s i n g a n d f a l l i n g e d g e , p u l s e wi d t h a d j u s t a b l e
s t a n d a r d p u l s e s i g n a l g e n e r a t o r a c h i e v e s t h e h i g h p e r f o r ma n c e i n d e x . I t c a n p r o d u c e 1 k 一 1 0 0 kHz l i n e a r
而诞 生 , 但 由于早 期 的信 号 发 生 器 机 械结 构 比较 复杂 , 功 率 比较大 , 电路 比较 简单 , 因此 发展 速 度
比较慢 。6 0年代 时 出现 了采 用模 拟 电子技 术 , 由
动 集成 芯 片 , 在 雷达 、 计算 机硬 件 系统 和通信 系统
等领 域 的设计 和 调试 中 , 同样需 要 大量 的精度 高 、 速度 快 的脉 冲信 号和 数字 序列作 为 激励 。在 其他 领域 例 如 : 激 光 器供 电 、 电火花 加工 、 静 电除 尘 、 脉 冲电镀 等方 面 , 脉 冲源也得 到 了广 泛 的应 用 , 因而 脉 冲信 号发 生器 的设计 和研 制具 有很 大 的价 值 。
i nt e g r a t e d c i r c u i t s .
Ke y wo r d s : F PGA ; p u l s e s i g n a l g e n e r a t o r ; DDS
基于FPGA的脉冲信号发生器的设计
摘要:r O绍了一种基于 FG P A的脉冲 信号发生器的设计方法与电路。该仪器可以产生周期在 1 s m 秒到 1 0 之 O s
间的方波信号 , 并且信号的占空 比可 以以千分之一周 期 的步进 进行调 节 , 出模式 可 以分成 连续模式 和单 次手动 触 输
sr e ecr u t.Co a e i h i u t c n t c e y c mmo e ie , h e u s e e ao a a u e u h a s o o e t , t th i i u t c s mp rd w t t ec r i o sr td b o h c s u n d vc s t en w p le g n r tr sf t r ss c s l s c mp n n s h e e
aet omo e ee tbefro tu uss ig lrp s up ta d rp t iep leo tu ,w ih c n b e ya t o— p s in s i h r w d sslca l o up t l e ,sn ua u eo tu n e eiv us up t hc a estb p l t w oio wt . t c
tenlO sadl. adte u yl o te u eC eajs df ml 10 yl t 9 9 10 yl s pe y11 0cce. h r w e O n s , t cc fh l a b dut o / 00cc 9/ 0 0cc ep db / O yl T ee n n hd y e ps n e r eo et
基于FPGA的脉冲信号发生器设计
基于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 引言在集成电路应用中经常需要使用脉冲源来驱动集成芯片,在雷达、计算机硬件系统和通信系统等领域的设计和调试中,同样需要大量的精度高、速度快的脉冲信号和数字序列作为激励。
在其他领域例如:激光器供电、电火花加工、静电除尘、脉冲电镀等方面,脉冲源也得到了广泛的应用,因而脉冲信号发生器的设计和研制具有很大的价值。
基于FPGA的单脉冲发生器
可编程单脉冲发生器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时,脉冲信号拉低。
高电平持续的宽度,即所需的脉冲宽度。
(二)、引脚定义信号名输入/输出功能描述clk Input 时钟频率50M占空比1:1。
rst_n Input 低电平有效,程序重新执行,计数器清零。
data[7:0] Input 8位控制脉冲信号的宽度。
key Input 按键控制pulse输出。
pulse Output 输出信号。
4.2 设计方案(1)系统功能描述(1)分频模块:输入为总的时钟50M,经过分频以后变为100HZ。
基于FPGA的PWM发生器的研究与设计汇总
基于FPGA的PWM发生器的研究与设计摘要PWM(脉冲宽度调制)是一种利用数字信号来控制模拟电路的控制技术,广泛应用于电源、电机、伺服系统、通信系统等电力电子设备。
PWM技术在逆变电路中的应用最为广泛,也是变频技术的核心,同时在机床,液压位置控制系统等机械装置中也发挥着重要的作用。
PWM技术已经成为控制领域的一个热点,因此研究PWM发生器有十分重要的意义。
论文研究的主要内容是用任意波形作为调制信号通过特定的方法来产生所需要的PWM波形,任意波形的合成和PWM波形的生成是两个主要任务。
波形合成采用直接数字频率合成(DDS)技术来实现。
DDS技术以相位为地址,通过查找离散幅度数据进行波形合成,具有输出波形相位变化连续、分辨率高、频率转换速率快的优点,而且通过设置控制字可灵活方便地改变输出频率,是目前波形合成的主流方法。
实现PWM发生器的设计方法有多种,本文采用现场可编程门阵列(FPGA)来实现PWM波的产生。
FPGA的设计是以Altera公司的Quartus II软件为开发平台,采用VHDL语言为来完成内部各功能模块的设计输入、编译、仿真等调试工作,目标载体选用Altera公司的CycloneIII系列器件。
关键词:脉冲宽度调制;直接数字频率合成;现场可编程门阵列1.PWM发生器的现状及发展从信号的产生方法来说,工程上常见的PWM波产生方法有:1.三角波比较法三角波比较法根据三角载波与正弦调制波的交点来确定逆变器功率开关器件的开关时刻,可以由模拟电子电路、数字电子电路或专用大规模集成电路芯片等硬件实现,也可以用微型计算机通过软件生成SPWM。
2.滞环比较法该方法较多应用于电流跟踪控制。
此法的优点是硬件电路简单,属于实时控制方式,反应快,不用载波,输出中不含特定频率谐波分量。
其不足之处是检测信号的传感器必须是具有宽频带的高性能传感器3.空间电压矢量法空间电压矢量法(SVPWM)也叫磁通正弦PWM法。
它以三相对称正弦波电压供电时交流电动机的理想磁通圆为基准,用逆变器不同的开关模式所产生实际磁通去逼近基准圆磁通,由它们的比较结果决定逆变器的开关,形成PWM波形。
一种基于FPGA的脉冲信号发生器的设计
一种基于FPGA的脉冲信号发生器的设计
崔旭涛;何友;周宪英
【期刊名称】《海军航空工程学院学报》
【年(卷),期】2004(019)004
【摘要】介绍了使用FPGA产生脉冲信号的方法,文中对脉冲信号的频率、脉宽、周期的控制方法、软件设计、仿真结果、硬件设计等进行了简要介绍.所设计的脉冲信号发生器经实际使用,得到了理想效果.
【总页数】4页(P435-438)
【作者】崔旭涛;何友;周宪英
【作者单位】海军航空工程学院信息融合技术研究所,烟台,264001;海军航空工程学院信息融合技术研究所,烟台,264001;92941部队,辽宁葫芦岛,125000
【正文语种】中文
【中图分类】TN761
【相关文献】
1.基于FPGA的雷达脉冲信号发生器的设计 [J], 伊志勇;刘雨
2.基于 FPGA的电磁超声脉冲信号发生器的设计 [J], 马赵;任尚坤;杨梅芳
3.基于FPGA的脉冲信号发生器设计 [J], 章欣
4.基于FPGA的高分辨率数字脉冲信号发生器的设计与实现 [J], 田宇; 施赛烽; 郑子贤; 徐南阳
5.基于FPGA的PSWF脉冲信号发生器设计 [J], 张晨亮;王红星;张榛;康家方
因版权原因,仅展示原文概要,查看原文内容请购买。
基于FPGA的脉冲信号发生器与数字频率计设计
基于FPGA 的脉冲信号发生器与数字频率计设计摘要:简单介绍了基于FPGA 的脉冲信号发生器的设计。
通过对系统进行结构分析,采用层次化的设计方法,给出了脉冲信号发生器与数字频率计的VHDL 代码,利用Quartus II 对其进行了仿真,并在硬件电路上得以实现其逻辑功能。
关键词:FPGA ;Quartus II ;脉冲信号发生器Design of pulse generator and cymometer based on FPGAGaoyuanli 、Cenjianfeng 、Wanghonggang(Department of electronic and information engineering,NCIAE,langfang,hebei )Abstract :This paper introduces the design of the pulse generator and cymometer based on FPGA.By analyzing the system structuer,provides the program of signal generator with VHDL using the hierarchical design method and gives the simulation results of Quartus II. Key words : FPGA ;Quartus II ;pulse generator引言:信号发生器是一种常用的信号源,广泛应用于通信、雷达、测控、电子对抗以及现代化仪器仪表等领域,是一种为电子测量工作提供符合严格技术要求的电信号设备。
它与示波器、万用表、频谱分析仪等仪器一样是最普通、最基本也是应用最广泛的电子仪器之一,几乎所有电参量的测量都要用到信号发生器。
随着EDA 技术的高速发展,电子系统设计技术和工具发生了深刻的变化,大规模可编程逻辑器件FPGA 的出现,给设计人员带来了诸多的方便。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、设计报告: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清零。
clk=~clk; // 输出脉冲取反end// 结束。
else a<=a+1;// 计数器没有记到了500000自加。
end//结束always块。
endmodule//结束分频模块。
分频模块的仿真结果:在验证的时候设计了一个8分频。
有波形图可以看出clk_50M经过8个周期后clk取反,实现了8分频,验证了自己的设计。
②延时模块的设计:延时模块的代码:module dely(clk,clr,load); //模块名及端口的定义,endmodule。
input clk,clr; //输入端口的定义。
output load; //输出端口的定义。
reg [2:0] counta; //延时计数器。
reg load;//输出。
always@(posedge clk or negedge clr)beginif(!clr) // 当clr为低电平时begincounta<=5;//清零。
load<=0;end//结束清零。
else // 当clr为高电平时计数器减一。
begincounta<=counta-8'd1;if(counta==8'd0)//计数器减到零时,进行复位输出load为高 begincounta<=8'd0;load<=1;// 输出load为高。
endendendendmodule //结束延时模块。
延时模块的仿真结果:从波形图可以看出当clr为高电平,且时钟的上升沿到来的时候,延时5个时钟周期后输出load为高电平。
③计数模块的设计:计数模块代码:module count(clk,data,clr,load,pulse,key);//模块名定义。
input clk,clr,load,key;//输入端口的定义。
input[7:0] data;// mai kuan de ding yioutput pulse;//输出的定义。
reg pulse;//输出定义为reg类型。
reg [7:0] count;// 计数器的定义。
always@(posedge clk or negedge clr)beginif(!clr)//低电平复位。
begincount<=data;//置入脉宽。
pulse<=0;//输出为零。
endelse if(load==1)//load有效的时候。
beginif(key==0)//当有按键按下的时候。
begincount<=count-8'd1;//计数器减一。
pulse<=1;//输出为高电平。
if(count==8'd0)//当计数器减到零的时候。
begincount<=8'd0;pulse<=0;//输出为低电平。
end// end beginend//end beginend//end beginend//end alwaysendmodule//结束计数模块。
上图为可编程单脉冲发生器的逻辑仿真结果。
由仿真结果可以看出,单脉冲输出的持续时间(脉冲宽度)由输入的脉宽参数data决定。
2.仿真激励源代码:`timescale 1ns/100psmodule confirmpulse_tb;//仿真模块名字的定义。
,reg [7:0] data;// 输入的脉宽。
reg clk_50M,key,clr;//输入的时钟,按键,清零。
wire pulse;//输出。
always #10 clk_50M=~clk_50M;//时钟周期。
initialbeginclk_50M=0;clr=0;key=1;data=8'd10; //赋初值。
#10 clr=1;key=0;#10000 $finish;//结束仿真。
endinitial// 监控。
begin$monitor($time,,,"clk_50M=%d,clr=%d,data=%d,key=%d,pulse= %d\n" ,clk_50M,clr,data,key,pulse);endconfirmpulse //实例化。
wsm(.key(key),.clk_50M(clk_50M),.data(data),.clr(clr),.pulse(pulse));endmodule//激励模块结束。
五、电路设计源代码:/*顶层模块*/module confirmpulse(clk_50M,data,clr,key,pulse);input [7:0] data;//脉宽的定义。
input clk_50M,key,clr;// key是发脉冲的信号,clr为清零信号。
output pulse;//脉宽的输出。
wire load;//中间变量的定义。
wire clk;div div(.clk_50M(clk_50M),.clk(clk));//实例化。
dely u1(.clk(clk),.clr(clr),.load(load));// 实例化。
countu2(.clk(clk),.data(data),.clr(clr),.load(load),.pulse(pul se),.key(key));// 实例化。
Endmodule//结束顶层模块。
/*分频模块*/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清零。
clk=~clk; // 输出脉冲取反end// 结束。
else a<=a+1;// 计数器没有记到了500000自加。
end//结束always块。
endmodule//结束分频模块。
/*延时模块*/module dely(clk,clr,load); //模块名及端口的定义,endmodule。
input clk,clr; //输入端口的定义。
output load; //输出端口的定义。
reg [2:0] counta; //延时计数器。
reg load;//输出。
always@(posedge clk or negedge clr)beginif(!clr) // 当clr为低电平时begincounta<=5;//清零。
load<=0;end//结束清零。
else // 当clr为高电平时计数器减一。
begincounta<=counta-8'd1;if(counta==8'd0)//计数器减到零时,进行复位输出load为高 begincounta<=8'd0;load<=1;// 输出load为高。
endendendendmodule //结束延时模块。
/*计数模块*/module count(clk,data,clr,load,pulse,key);//模块名定义。
input clk,clr,load,key;//输入端口的定义。
input[7:0] data;// mai kuan de ding yioutput pulse;//输出的定义。
reg pulse;//输出定义为reg类型。
reg [7:0] count;// 计数器的定义。
always@(posedge clk or negedge clr)beginif(!clr)//低电平复位。
begincount<=data;//置入脉宽。
pulse<=0;//输出为零。
endelse if(load==1)//load有效的时候。
beginif(key==0)//当有按键按下的时候。
begincount<=count-8'd1;//计数器减一。
pulse<=1;//输出为高电平。
if(count==8'd0)//当计数器减到零的时候。
begincount<=8'd0;pulse<=0;//输出为低电平。
end// end beginend//end beginend//end beginend//end alwaysendmodule//结束计数模块。