脉冲检测计数应用也是蛮重要的,原理也是挺简单的,直接上代码
`
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
加载代码缩进怎么跟我写程序不一样啊。这里面~signal_in是signal的取反。signal_in_d比signal_in滞后一个时钟周期
这里是上升沿检测的原理说明:下降沿跟上升沿检测稍微有点区别。
一周热门 更多>