首页 > 代码库 > 【设计开发】 典型异步电路设计-脉冲同步
【设计开发】 典型异步电路设计-脉冲同步
一、前言
在数字芯片设计中常常涉及不同的工作时钟域,在异步时钟域间控制交互、数据交互又涉及异步电路设计。良好、健壮的异步电路设计可提高系统的稳定性、可靠性、健壮性。本博文介绍异步电路中的脉冲同步设计方法。
二、应用
在设计开发过程中,经常会有如下的应用: 时钟域A的脉冲信号需同步到时钟B中使用,其中时钟A与时钟B在不同场景下有不确定的关系,如下图(1)、(2)所示。
(1) 慢时钟域到快时钟域的脉冲同步
(2) 快时钟域到慢时钟域的脉冲同步
三、简单的脉冲同步器
基于以上应用,设计一个简单的脉冲同步器如下图所示:
(1) 将src_clk时钟域的输入脉冲转换为src_clk时钟域的电平信号src_state;
(2) 对src_data电平信号进行打拍(一般可打2拍)同步到dst_clk时钟域;
(3) 对dst_clk时钟域的电平信号进行边沿检测,产生dst_clk时钟域的脉冲;
代码如下:
//--====================================================================================--// THIS FILE IS PROVIDED IN SOURCE FORM FOR FREE EVALUATION, FOR EDUCATIONAL USE OR FOR // PEACEFUL RESEARCH. DO NOT USE IT IN A COMMERCIAL PRODUCT . IF YOU PLAN ON USING THIS // CODE IN A COMMERCIAL PRODUCT, PLEASE CONTACT justforyou200@163.com TO PROPERLY LICENSE // ITS USE IN YOUR PRODUCT. // // Project : Verilog Common Module// File Name : pulse_sync.v// Creator(s) : justforyou200@163.com// Date : 2015/12/01// Description : A sample pulse sync //// Modification :// (1) Initial design 2015-12-01//////--====================================================================================--module PULSE_SYNC ( src_clk , //source clock src_rst_n , //source clock reset (0: reset) src_pulse , //source clock pulse in dst_clk , //destination clock dst_rst_n , //destination clock reset (0:reset) dst_pulse //destination pulse out ); //PARA DECLARATION//INPUT DECLARATIONinput src_clk ; //source clock input src_rst_n ; //source clock reset (0: reset)input src_pulse ; //source clock pulse ininput dst_clk ; //destination clock input dst_rst_n ; //destination clock reset (0:reset)//OUTPUT DECLARATIONoutput dst_pulse ; //destination pulse out//INTER DECLARATIONreg src_state ;reg state_dly1 ;reg state_dly2 ;reg src_state ;reg dst_state ;wire dst_pulse ;//--========================MODULE SOURCE CODE==========================--always @(posedge src_clk or negedge src_rst_n)begin if(src_rst_n = 1‘b0) src_state <= 1‘b0 ; else if (src_pulse) src_state <= ~src_state ;endalways @(posedge dst_clk or negedge dst_rst_n)begin if(dst_rst_n = 1‘b0) begin state_dly1 <= 1‘b0 ; state_dly2 <= 1‘b0 ; dst_state <= 1‘b0 ; end else begin state_dly1 <= src_state ; state_dly2 <= state_dly1; dst_state <= state_dly2; endendassign dst_pulse = dst_state ^ state_dly2 ;endmodule
由于该同步器使用单向同步机制,存在如下问题:
(1) 对src_clk域dst_clk关系较为敏感,当src_clk与dst_clk时钟频率差别很大时可能不适应;
(2) 由于没有完整的握手机制,当多个src_pulse之间间隔较短时,可能存在脉冲同步丢失情况。
(3) 当dst_clk时钟域出现无时钟或复位时,src_clk时钟域将丢失。
【设计开发】 典型异步电路设计-脉冲同步
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。