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

 上次提出了一个处于异步时钟域的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等等。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Bluespec支持加速器功能的RISC-V处理器将Achronix的FPGA转化为可编程SoC

关键字: RISC-V处理器 FPGA SoC

为无处不在的端侧设备插上AI的翅膀,AMD发布第二代Versal™ 自适应 SoC

关键字: AMD FPGA 自适应SoC AI 边缘计算

在电子设计和信号处理领域中,信号毛刺是一个常见而又不容忽视的现象。毛刺是指在原本预期的连续或稳定的信号中出现的短暂而异常的电压或电流波动,表现为瞬态尖峰或窄脉冲。它们通常是由于电路设计、制造缺陷、噪声耦合、信号切换速度过...

关键字: 信号毛刺 信号处理

在科技领域中,信号处理、滤波以及控制系统设计都是至关重要的环节。在这些环节中,二阶广义积分器以其独特的性质和广泛的应用领域,受到了广大科研工作者和工程师的青睐。本文将深入探讨二阶广义积分器的原理,分析其工作原理、应用以及...

关键字: 二阶广义积分器 信号处理

Pmod接口可以说是数字电路板的连接革命。随着科技的飞速发展,数字电路板间的通信与连接技术也在不断创新和进步。Pmod接口,作为一种新兴的数字接口标准,正逐渐成为数字电路板间通信的桥梁,为电子设备的连接和通信带来了革命性...

关键字: pmod接口 FPGA 数字电路板

语音芯片里语音识别系统被应用在更多需要代替人工服务或者识别指令的机器人中,实现更多的人机交互,在生活中带来更多的便利。语音识别系统的分类和结构跟otp语音芯片系统比起来也有所不同。

关键字: 语音识别 信号处理 语音

信号处理:这是语音识别的基础,涉及将原始语音信号转换成可用于分析和识别的形式。模式识别:通过建立语音模式库,将输入的语音与已知的模式进行匹配,以实现语音识别。

关键字: 语音识别 信号处理 语音

需要将人类语音通过麦克风等设备转换成数字信号。这一步通常涉及信号处理技术,如滤波和分帧,以去除背景噪声和提高信号质量。

关键字: 语音识别 数字信号 信号处理

近日举办的GTC大会把人工智能/机器学习(AI/ML)领域中的算力比拼又带到了一个新的高度,这不只是说明了通用图形处理器(GPGPU)时代的来临,而是包括GPU、FPGA和NPU等一众数据处理加速器时代的来临,就像GPU...

关键字: FPGA AI 图形处理器

虽然频谱直接减法在某些情况下可以作为一种简单的噪声抑制方法,但由于其固有的问题,如噪声估计的不准确、频谱失真和计算复杂度等,其应用受到一定的限制。因此,在实际应用中,需要综合考虑各种因素,选择更合适的噪声抑制方法。

关键字: 频谱失真 噪声抑制 信号处理
关闭
关闭