verilog 检测上升沿和下降沿的一种方法
时间:10-02
整理:3721RD
点击:
各位好,有个问题像大家请教一下,检测上升沿和下降沿的 ,当检测到上升沿时
out 输出1,检测到下降沿时out 输出0,用的以下的代码,
但是用逻辑分析仪查看波形如下,out 输出1延迟了两个时钟周期20ns,请问下有
没有好的代码方法让这个延迟时间短一点,测量了别人的延迟只有5ns
out 输出1,检测到下降沿时out 输出0,用的以下的代码,
但是用逻辑分析仪查看波形如下,out 输出1延迟了两个时钟周期20ns,请问下有
没有好的代码方法让这个延迟时间短一点,测量了别人的延迟只有5ns
- reg sig_in0;
- reg sig_in1;
- wire rising_edge;
- wire falling_edge;
- assign rising_edge = ~sig_in0 & sig_in1;
- assign falling_edge = sig_in0 & ~sig_in1;
- always@(posedge clk) begin
- sig_in0 <= sig_in1;
- sig_in1 <= mcu_sig_3 ;
- end
- always @(posedge clk) begin
- if( falling_edge_3)
- out <= 0;
- else if(rising_edge_3)
- out <= 1;
- end
你的比较方法不对,这种边沿检测法,用的是时序电路,最小时间当然是1个时钟周期,你说的5ns,估计是组合逻辑的延时吧,这是不能比较的。
比如
always @(posedge mcu_sig_3 or negedge rst_n)
begin
if(!rst_n)
out <= 0;
else
out <= 1;
end
这个从判断mcu_sig_3上升沿,到out输出,就快, 几ns而已,就是一个选择器的输出延时而已。但这种方法没有意思,FPGA设计的边沿判断,都是采用2级寄存器打拍的方法,只要系统设计合理,不在乎那两个时钟周期。
如果想使用边沿检测法做你如上所述的输出,并且想减小输出延时,只能提高检测时钟频率!
你的延时肯定是两个时钟周期啊,产生rising_edge或者falling_edge需要一个时钟周期,检测它们然后产生输出由需要一个周期。
posedge 和 negedge 本身就是类似边沿检测的功能
规范设计时,还得用时钟采样打拍
学习学习
受教育了。
常用的方法,哈哈