单脉冲发生电路

单脉冲发生电路_第1张图片

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

需求分析

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

实现方法

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

状态图
单脉冲发生电路_第2张图片
模块引脚
单脉冲发生电路_第3张图片
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

仿真结果

功能仿真


单脉冲发生电路_第4张图片
功能仿真

时序仿真


单脉冲发生电路_第5张图片
时序仿真

你可能感兴趣的:(单脉冲发生电路)