边沿检测电路漏检缘故原由分析
常用布局如下:
- module edge_detect1(
- input clk,
- input signal,
- output pe, //上升沿
- output ne, //下降沿
- output de //双边沿
- );
- reg reg1;
- always@(posedge clk) begin
- reg1 <= signal;
- end
- assign pe = (~reg1) & signal;
- assign ne = reg1 & (~signal);
- assign de = pe | ne; // 或 reg1 ^ signal
- endmodule
复制代码 对应的电路布局如下
该布局的边沿检测模块,仅使用到1个寄存器,其边沿输出通过信号 signal 与前一时刻的 signal 做逻辑运算得到,正因此,其一旦signal信号发生变动,其边沿信号也会随之改变,其优点是边沿信号相应敏捷,而缺点是边沿信号高电平时间小于一个 clk 周期,因此容易出现漏检。尤其是当信号和时钟边沿很靠近时,会出现高电平的时间非常短,从而出现误判
改进方法1:加入寄存器,2级缓存
- module edge_detect3(
- input clk,
- input signal,
- output pe, //上升沿
- output ne, //下降沿
- output de //双边沿
- );
- reg reg1,reg_2;
- always@(posedge clk) begin
- reg1 <= signal;
- reg2 <= reg1;
- end
- assign pe = reg1 & (~reg2);
- assign ne = (~reg1) & reg2;
- assign de = reg1 ^ reg2;
- endmodule
复制代码 用这种方式的缺点是会造成检测边沿信号延迟一个时钟周期。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |