FPGA之上升沿检测

2019-07-15 22:56发布

脉冲检测计数应用也是蛮重要的,原理也是挺简单的,直接上代码
`timescale 1ns / 1ps
module PD_up(
               
                clk                        ,                        //系统时钟 50MHz        ;
                rest_n                ,                        //系统复位信号        低电平有效        ;
                signal_in        ,                        //待检测信号输入        ;
                rising_flag                                //上升沿标        ;
               
    );

input         clk                        ;
input          signal_in        ;
input         rest_n                ;
output        rising_flag        ;                       

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

signal_in   0 0 0 1 1 0
~signal_in         1 1 1 0 0 1
signal_in_d    0 0 0 1 1 0
-----------------------------
rising_flag    0 0 0 0 1          signal_in_d & ~signal_in  下降沿检测
                           1 1 0 1 1   
                           0 0 1 0 0  ~[signal_in_d | ~signal_in] 上升沿检测       

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

reg                signal                ;                        //待检测信号输入寄存器;
reg                rising_flag        ;                        //上升沿标寄存器,值为 1 被检信号上升沿到来;
reg                signal_in_d        ;                        //signal_in_d 比 signal_in延迟一个时钟周期;

always@(posedge clk or negedge rest_n)begin
        if(!rest_n)begin
                signal <= 0;
        end
                else begin
                        signal <= signal_in;
                end
end


always@(posedge clk or negedge rest_n)begin
        if(!rest_n)begin
                signal_in_d <= 0;
        end
                else begin
                        signal_in_d <= signal;
                end
end

always@(*)begin                                        //上升沿检测;
        rising_flag = ~((~signal) | signal_in_d);
end

endmodule


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
根号2
2019-07-16 11:39
下降沿检测verilog代码
  1. `timescale 1ns / 1ps
  2. /************************************************
  3. 下降沿检测verilog代码

  4. 原理:signal = signal_in
  5. signal        0 0 0 1 1 0
  6. ~signal        1 1 1 0 0 1
  7. signal_d        0 0 0 1 1 0
  8. ----------------------------
  9. falling_flag    0 0 0 0 1

  10. falling_flag = (~signal) & signal_d
  11. ************************************************/
  12. module PD_dn(

  13.                 clk              ,                        //系统时钟 50MHz;
  14.                 rest_n           ,                        //系统复位信号,低电平有效;
  15.                 signal_in        ,                        //被检信号输入;
  16.                 falling_flag                                //下降沿检测输出标志;

  17.     );

  18. input         clk              ;
  19. input         rest_n           ;
  20. input         signal_in        ;
  21. output  falling_flag           ;

  22. reg         signal           ;
  23. reg         signal_d         ;
  24. reg         falling_flag     ;

  25. always@(*)begin
  26.         signal <= signal_in;
  27. end

  28. /********得到滞后signal一个时钟周期的signal_d********/
  29. always@(posedge clk or negedge rest_n)begin
  30.         if(!rest_n)begin
  31.                 signal_d <= 0;
  32.         end
  33.                 else begin
  34.                         signal_d <=signal;
  35.                 end
  36. end
  37. /*******************下降沿标志***********************/
  38. always@(*)begin
  39.         if(!rest_n)begin
  40.                 falling_flag <= 0;
  41.         end
  42.                 else begin
  43.                         falling_flag <= (~signal) & signal_d;
  44.                 end
  45. end
  46.        
  47. endmodule
复制代码

一周热门 更多>