Verilog脉冲发生器程序
2012-06-02
万雪松

/***************************************************************************************

实现功能简述

本模块主要功能是产生一个确定时钟周期长度(最长为256个时钟周期)的脉冲信号,可以自己设定脉冲长度,输出的脉冲信号与时钟上升沿同步

脉冲宽度 = pulsewide + 1 时钟周期;

输入一个启动信号后,可以产生一个固定时钟周期长度的脉冲信号,与启动信号的长短无关!脉冲宽度可调!

1、可以调整输出脉冲宽度

2、只要输入一个启动信号,不论启动信号宽度——需要能够触发设计,就输出脉冲

3、再输出一个完整的脉冲过程中,不论输入多少个启动信号,都只会输出一个脉冲

4、不论启动脉冲的宽度多大,输出的脉冲宽度恒定

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

***************************************************************************************/

module confirmpulse ( clk, reset, start, pulse, pulsewide );

input clk, reset, start;

input [7:0] pulsewide;

output pulse;

reg pulse;

reg counten;

reg [7:0] count;

//计数器启动标记,表示一次延时计数开始

always @ ( posedge clk )

begin

if ( reset == 'b0 )

counten <= 'b0;

else

begin

if ( start == 'b1 )

counten <= 'b1;

else if ( start == 'b0 && count > pulsewide )

counten <= 'b0;

end

end

//延时计数器,保证延时 pulsewide 个时钟周期

always @ ( posedge clk )

begin

if ( reset == 'b0 )

count <= 'b00000000;

else

begin

if ( counten == 'b0 )

count <= 'b00000000;

else if ( counten == 'b1 && count <= pulsewide )

count <= count + 1;

else if ( counten == 'b0 && start == 'b0 )

count <= 'b00000000;

end

end

//输出定宽脉冲

always @ ( negedge clk )

begin

if ( reset == 'b0 || count >= pulsewide )

pulse <= 'b0;

else if ( counten == 'b1 )

pulse <= 'b1;

end

endmodule

可能会用到的工具/仪表
相关文章
推荐文章
热门文章
章节目录
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号