跨时钟域信号处理中同步通信的设计的重要性及解决方法

时间:2025-11-02  作者:Diven  阅读:0

上次提出了一个处于异步时钟域的MCU与FPGA直接通信的实现方式,其实在这之前,特权同学想列举一个异步时钟域中出现的很典型的问题。也就是要用一个反例来说明没有足够重视异步通信会给整个设计带来什么样的危害。

跨时钟域信号处理中同步通信的设计的重要性及解决方法

特权同学要举的这个反例是真真切切的在某个项目上发生过的,很具有代表性。不仅会涉及使用组合逻辑和时序逻辑在异步通信中的优劣、而且能把亚稳态的危害活生生的展现在你面前。

从这个模块要实现的功能说起吧,如图1所示,实现的功能其实很简单的,就是一个频率计,只不过FPGA除了脉冲采集进行计数外,还要响应CPU的控制。

图1 功能模块

CPU的控制总线是指一个片选信号和一个读选通信号,当二者都有效时,FPGA需要对CPU的地址总线进行译码,然后把采样脉冲值送到CPU的数据总线上。

图2 CPU读时序

对于这样“简单”的功能,不少人可能会给出类似下面的以组合逻辑为主的实现方式:

input clk;

input rst_n;

input pulse;

input cs_n;

input rd_n;

input[3:0] addr_bus;

output reg[15:0] data_bus;

reg[15:0] counter;

always @(posedge pulse or negedge rst_n)

if(!rst_n) counter 《= 16‘d0;

else if(pulse) counter 《= counter+1’b1;

wire dsp_cs = cs_n & rd_n;

always @(dsp_cs or addr_bus)

if(dsp_cs) data_bus 《= 16‘hzzzz;

else begin

case(addr_bus)

4’h0: data_bus 《= counter;

4‘h1: ……;

……

default: ;

endcase

end

咋一看,可能你会觉得这个代码也没什么问题,功能似乎都实现了。而且你会觉得这个代码简洁,也不需要耗费多少逻辑就能实现。但是,对于这种时钟满天飞的设计,存在着诸多亚稳态危害爆发的可能。脉冲信号和由CPU控制总线产生的选通信号是来自两个异步时钟域的信号。作为内部的时钟信号时,一个写寄存器counter,一个读寄存器counter。那么,很明显的,存在着发生冲突的可能。换句话说,如果寄存器正处于改变状态(被写)时被读取了,问题就随着而来,如图3所示。

图3 数据冲突

脉冲信号pulse和CPU读选通信号cpu_cs是异步信号,pulse什么时候出现上升沿和cpu_cs什么时候出现下降沿是不可控的。所以,如果很不幸的一起触发了,那么,结果可想而知。计数器counter[15:0]正在加一,这个自增的过程还在进行中,CPU数据总线data_bus[15:0]来读取counter[15:0],那么到底读取的值是自增之前的值还是自增之后的值呢?或者是其值呢?

所示,是一个计数器的近似模型。当计数器自增一的时候,如果最低位为0,那么自增的结果只会使最低位翻转;当最低位为1,那么自增一的后果除了使最低位翻转,还有可能使其任何位翻转,比如4’b1111自增一的后果会使4个位都翻转。由于每个位之间从发生翻转到翻转完成都需要经过一段逻辑延时和走线延时,对于一个16位的计数器,要想使这16位寄存器的翻转时间一致,那是不可能做到的。所以,对于之前的设计中出现了如图3的冲突时,被读取的脉冲值很可能是完全错误的。

图4 计数器模型

上面的代码是最典型的组合逻辑实现方式,是很不可行的。也许很多朋友会提出异议,也许还会提出很多类似的组合逻辑方案。但是,如果没有同步设计的思想,不把这两个异步时钟域的信号同步到一个时钟域里进行处理,冲突的问题在无法得到有效解决的。

那么,这个设计该如果同步呢?实现的方案其实上一次提到FPGA与MCU通信的文里已经给出了答案。设计思想可以如图5所示。图5先是使用脉冲检测法把脉冲信号与系统时钟信号clk同步,然后依然使用脉冲检测法得到一个系统时钟宽度的使能脉冲作为数据锁存信号,也将CPU的控制信号和系统时钟信号clk同步了。如此处理后,两个异步时钟域的信号就不存在任何读写冲突的情况了。

图5 同步处理

这里提出来的解决方案就是使用了脉冲检测法进行同步,还有一些其同步方式,譬如专用握手信号同步、异步FIFO等等。

猜您喜欢

保险丝作为保护电路安全的重要元件,有着着不可替代的作用。作为行业内知名品牌,Kacon 凯昆保险丝很好的性能和的应用赢得了市场的高度认可。本文将详细介绍Kaco...
2020-03-29 02:09:30

聚合物薄膜电容器是现代电子设备中重要的部件。使用,性能稳定。本文将介绍聚合物薄膜电容器的基本信息及其优缺点。什么是聚合物薄膜电容器?聚合物薄膜电容器是电容器,采...
2025-04-12 19:30:36

现代电子设备中,集成电路(IC)扮演着至关重要的角色,而封装形式则直接影响到IC的性能和应用。SOIC8_150MIL是一种常见的封装类型,广泛应用于各种电子产...
2025-02-24 10:03:58

振动分析仪的使用方法振动分析仪是一种用于测量和分析物体振动特征的工具。下面是一般的使用方法:1. 准备工作:确保振动分析仪的电源充足,并确保其连接正常。确保...
2023-07-27 15:41:00

采样电阻作为关键元件,有着着重要的作用。丽景电子作为国内知名的电子元器件制造商,其生产的采样电阻凭借优异的性能和可靠的质量,应用于各类电子设备中。本文将围绕丽景...
2018-01-30 13:38:01

贴片电阻上的5102并不是直接表示阻值大小的千欧数值。实际上是一种编码方式,代表着电阻的阻值。5102采用的是数字编码法,前三位数字510表示有效数字,最后一位...
2024-11-29 10:26:16

WIFI天线是无线网络中不可少的关键组件,性能直接影响到信号的强度和覆盖范围。WIFI天线的类型主要分为全向天线和定向天线。全向天线能够360度均匀发射信号,适...
2010-07-15 00:00:00

频谱分析仪是电子测试领域中不可少的工具,但市场上种类繁多,如何选择适合的型号呢?频谱分析仪主要分为网络分析型和实时分析型。网络分析型适合于频率特性测试,能够提供...
2017-08-09 00:00:00

贴片电阻102,指的是尺寸为1.0mm x 2.0mm的贴片电阻,而「102」本身代表的是阻值代码。 很多初学者容易混淆,误以为「102」就是指102欧姆。实际...
2025-04-14 15:03:29

贴片电阻200E是一种应用于电子电路中的小型化电阻器,其标称阻值为200欧姆。E代表5%的精度,这意味着实际阻值在190欧姆到210欧姆之间。这种电阻采用表面贴...
2024-11-29 10:26:05