yuedx的个人空间 https://blog.eetop.cn/317611 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Verilog 脉冲发生器程序

已有 2588 次阅读| 2009-3-17 12:12

/***************************************************************************************
实现功能简述
本模块主要功能是产生一个确定时钟周期长度(最长为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


点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 15

    粉丝
  • 1

    好友
  • 36

    获赞
  • 158

    评论
  • 4704

    访问数
关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-7-12 03:33 , Processed in 0.016580 second(s), 6 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部