微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 上升沿监测电路

上升沿监测电路

时间:10-02 整理:3721RD 点击:
现在的项目中需要设计一个上升沿检测电路,被检测信号为异步信号,应该怎样设计才能规避毛刺、亚稳态等问题?如果用如下的方法:
                always@(posedge clk or negedge rst) begin
                     if(!negedge rst) begin
                           reg1 <= 1'b0;
                           reg2 <= 1'b0;
                     end
                     else begin
                           reg1 <= data_in;
                           reg2 <= reg1;
                      end
                  end
                 assign data_out = reg1 & ~reg2;
这种设计即经典的两级同步方法,在异步设计中常用 ,可以保证reg2处于非亚稳态,但reg1仍有可能处于亚稳态,因此是否需要在reg1前再增加一级DFF呢?

有必要,前面两级做同步,对同步后的信号做检测。

了解了解

两级必不可少!

因为是异步电路,所以再加一级DFF是必不可少的

看你的输入信号如果本身就带有抖动和毛刺的话,还得考虑去除抖动和毛刺。


额 如果要去毛刺 是否需要再加几级DFF 比如连续采到3个逻辑1才能认为是正常的高电平信号?

应该要再加一级,前面两级纯粹是为了消除亚稳态的,第三级才是作为延时一拍



   有专门去抖动和毛刺的代码,你可以搜一下。

一般情况下,前面两级,后面才做时序处理

这个只能用在快时钟采慢时钟的地方啊

kankan

兩級來做應該可以濾掉!

异步复位同步释放是类似应用,问个问题:
异步复位信号已经同步释放之后,那么在进程里面应该怎么写代码呢?是方式一呢,还是方式二呢?
方式一:
process(reset,clkin)
begin
    if reset='0' then
       dataout <= (others => '0');
    elsif clkin'event and clkin='1' then
。。

方式二:
process(reset,clkin)
begin
    if clkin'event and clkin='1' then
           if reset='0' then
              dataout <= (others => '0');

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top