单脉冲发生电路

姓名:刘强
【嵌牛导读】
在设计电路时我们可能遇到需要根据用户输入产生一个时钟同步的单脉冲信号的需求,本文给出了一种实现方案。
【嵌牛鼻子】
Verilog 单脉冲 状态机
【嵌牛提问】
如何用Verilog硬件描述语言编写一个单脉冲发生器?
【嵌牛正文】

需求分析

用户按键,每次按的时间有长有短,有些时候会有这样一个需求:
当用户按下按键时,会产生一个沿,通过这个沿产生一个脉冲信号,脉冲宽度为一个(或N个)时钟周期。

实现方法

用户按键产生一个复位信号reset;
一个Mealy型的状态机在时钟驱动下发生状态转移,由复位信号选择将要进入的状态

状态图
模块引脚
Verilog代码
//单脉冲产生电路
module single_impulse(clk,key_signal,out);
   input clk;
   input key_signal;
   output out;
   reg    out;
   
   reg    reset;
   reg [3:0] state;

   initial
     state <= 1;
   

   always @(posedge clk or posedge key_signal)
     if(key_signal)
       reset <= 1;
     else
       reset <= 0;
   always @(posedge clk)
     case(state)
       4'd1:
     if(reset)
       begin
          out <= 1;
          state <= 2;
       end
       4'd2:
     if(reset)
       begin
          out <= 0;
          state <= 2;
       end
     else
       begin
          out <= 0;
          state <= 1;
       end
     endcase
endmodule

仿真结果

功能仿真


功能仿真

时序仿真


时序仿真
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容