FPGA单脉冲产生器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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