加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSSRSS-巴斯仪表网
您当前的位置:首页 > 电子发烧 > EDA技术

FPGA设计经验之边沿检测

时间:2013-08-27  来源:123485.com  作者:9stone

    在同步电路设计中,边沿检测是必不可少的!
    例如:在一个时钟频率16MHz的同步串行总线接收电路里,串行总线波特率为1Mbps。在串行总线的发送端是在同步时钟(1MHz)的上升沿输出数据,在接收端在同步时钟的下降沿对输入数据进行接收采样。在这个接收电路里检测同步时钟的下降沿是必不可少的。假设主时钟-clk,同步时钟-rck,同步数据-data。
  有些人在边沿检测的时候就喜欢这样做:

代码
  1. signal rck_dly: std_logic;   --定义一个触发器   
  2. signal data_buf: std_logic;  --数据缓冲器   
  3. RCK_Delay:process(clk,rst_n)   
  4. begin   
  5.     if rst_n='0' then   
  6.        rck_dly <= '0';   
  7.     elsif rising_edge(clk) then   
  8.        rck_dly <= rck;   
  9.     end if;   
  10. end process;   
  11.   
  12. Data_Receivee:process(clk,rst_n)   
  13. begin   
  14.   if rst_n='0' then   
  15.      data_buf <= '0';   
  16.   elsif rising_edge(clk) then   
  17.      if (rck_dly='1' and rck='0') then   --RCK下降沿(但这个条件是否总会出现?)   
  18.          data_buf <= data;   
  19.      end if;   
  20.   end if;   
  21. end process;  

   但是大家忽略了一种情况,就是clk与rck之间比没有必然的同步关系,当rck的下降沿刚好略滞后于clk的上升沿(大概几个ns),这样就会使高电平 保持时间不足,就会发现在本时钟上升沿时还是rck_dly='1' and rck='1',而在下一个时钟的上升沿来的时候,就会出现rck_dly='0' and rck='0',所以就不会有rck_dly='1' and rck='0'的情况出现!! 从而导致丢失数据。
  如果用下面的方法就可以避免上面的情况,并且可以做到正确无误地接收数据:

代码
  1. signal rck_dly: std_logic_vector(1 downto 0);   
  2. signal data_buf: std_logic;   
  3. RCK_Delay:process(clk,rst_n)   
  4. begin   
  5.   if rst_n='0' then   
  6.      rck_dly <= (others=>'0');   
  7.   elsif rising_edge(clk) then   
  8.      rck_dly <= rck_dly(0) & rck;   
  9.   end if;   
  10. end process;   
  11.   
  12. Data_Receiver:process(clk,rst_n)   
  13. begin   
  14.   if rst_n='0' then   
  15.      data_buf <= '0';   
  16.   elsif rising_edge(clk) then   
  17.      if rck_dly="10" then   
  18.         data_buf <= data;   
  19.      edn if;   
  20.   end if;   
  21. end process;  

  至于以上电路为什么就可以克服上面出现的情况,就留给大家分析了。
  不得不承认后一种方法所耗的资源要比前一种方法多(一个触发器),但是就可以大大提高可靠性,这绝对是物有所值!!


分享到:
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
栏目导航->EDA技术
  • 电子应用基础
  • 电源技术
  • 无线传输技术
  • 信号处理
  • PCB设计
  • EDA技术
  • 单片机学习
  • 电子工具设备
  • 技术文章
  • 精彩拆解欣赏
  • 推荐资讯
    使用普通运放的仪表放大器
    使用普通运放的仪表放
    3V与5V混合系统中逻辑器接口问题
    3V与5V混合系统中逻辑
    数字PID控制及其改进算法的应用
    数字PID控制及其改进
    恶劣环境下的高性价比AD信号处理数据采集系统
    恶劣环境下的高性价比
    栏目更新
    栏目热门