FPGA单脉冲产生器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

可编程单脉冲发生器的设计

一.功能描述

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、功能描述

本设计中要产生一个预置位宽的计数寄存器。

2、管脚描述

信号名称输入/ 输出源功能描述

count[7:0]输入PIN 地址寄存器

CLK 输入PIN 时钟信号

RST 输入PIN 复位信号

3、实现说明:

当RST有效时,计数信号count初始值为‘d0,当RST无效时,每当CLK上升沿来临时,count自加1,当到达预置脉冲信号width时,计数器清零。

4.3 信号产生模块

1、功能描述

本设计中产生一个脉冲为width的脉冲信号。

2、管脚描述

信号名称输入/ 输出源功能描述

pluse_out输出PIN 脉冲信号

CLK 输入PIN 时钟信号

start输入PIN 开始信号

RST 输入PIN 复位信号

3、实现说明:

当RST有效时,pluse_out=‘d0,当RST无效且start信号有效时,pluse_out='d1,当count信号到达指定位宽时,pluse_out='d0。

源程序:

module single_pluse(pluse_out,width,CLK,RST,start);

output pluse_out;

input CLK,RST,start;

input [7:0] width;

reg pluse_out;

reg [7:0] count;

reg load;

reg [2:0] cnt;

always@(posedge CLK or negedge RST)

begin

if(!RST)

begin

cnt<=5;

load<=0;

end

else

begin

cnt<=cnt-'d1;

if(cnt=='d0)

begin

cnt<='d0;

load<=1;

end

end

end

always@(posedge CLK or negedge RST)

begin

if(!RST)

begin

count <= width;

pluse_out<= 'd0;

end

else if(load == 'd1)

begin

if(start == 'd1)

begin

count <= count-8'd1;

pluse_out <= 'd1;

if(count == 8'd0)

begin

count <= 8'd0;

pluse_out <= 'd0;

end

end

end

end

endmodule

相关文档
最新文档