阶段性总结:跨时钟域同步处理

对时序图与Verilog语言之间的转化的认识:

首先明确工程要实现一个什么功能;用到的硬件实现一个什么功能。

要很明确这个硬件的工作时序,即:用什么样的信号,什么变化规则的信号去驱动这个硬件。

然后对工程进行模块划分,顶层尽量不要有逻辑设计,尽量只放在子模块里,尽量提升模块复用性

按照模块划分,画出子模块的时序图。

重点:再画的时候,一定要清晰的想好,

这个信号是用reg型还是wire型,以及区别。

reg型,延迟条件一个时钟周期。

计数器的开启条件归零条件保持条件是什么。是否需要保持?

常用的信号:标志信号,请求信号,应答信号,计数信号。

Verilog语言:硬件描述语言。描述的就是驱动它的信号的时序。

所以一定要清楚的理解好硬件的工作时序。

以及一个清晰,缜密的逻辑思维。

我觉得主要难在一些逻辑条件,在设计的时候可能会忽略,在写代码或者通过功能仿真,不断修改吧。

看仿真波形的经验总结:

如果一个信号处于高阻态:没有用到三态逻辑或者三态门,那么大概率是信号例化时没有连接好。

如果一个信号处于X :可能是没有给这个信号赋值,或者这个信号的逻辑描述,有问题。因为不是预想中的逻辑,以外的给这个信号赋了一个未知的值。所以要检查信号产生的逻辑。

在看计数器波形时:要注意开始计数条件对不对,递增条件对不对,归零条件对不对,保持条件对不对。发现不对,再看是不是计数器逻辑错误,还是这个条件信号的描述有问题。逐渐深挖。

哦对了,先看仿真的输入信号描述是否正确。

然后看被测试的模块,由上至下,由顶至内。

确保所有子模块都正确的情况下,再对顶层模块进行仿真。

现在我遇到的都是小实验,都进行了仿真。在仿真顶层时,一般只需要看模块间的连接信号。也就是你的输出是我的输入,这种信号,看他们是否一致,完全相同嘛。

容易出错的是位宽,容易忽略的是连接错误。

然后来总结一下跨时钟域同步处理

跨时钟域同步处理:

同步处理,既可以解决两个不同时钟域之间的信号传递问题,又可以解决异步信号亚稳态的问题。

慢速时钟域到快速时钟域:

首先举一个uart rx模块的数据接收信号rx,外界给rx模块的数据信号变化时间是不确定的,那么rx信号就有可能在时钟上升沿检测到变化的rx信号而产生亚稳态。

这个属于单bit慢速时钟域到快速时钟域的同步,采用一个同步信号,两个打拍信号,来解决这个问题。同步打拍

我在做课设《数字频率计》的时候也遇到过这个问题,具体情况就是一开始用待检测的信号的上升沿做计数器always块的驱动信号,但计数器的结束条件是1秒钟,这个一秒钟的结束(归零)信号,是在sys_clk下的,就会出现一个问题:当1秒钟结束条件满足后,计数器always块没有执行,也就是跳过了这个结束信号。

我的解决办法是:由于是低速到高速的单bit信号,先同步一拍,再打两拍子,用打拍的信号进行一个上升沿(或者下降沿)的检测,每检测到一个边沿就拉高一个sys_clk ,这样就把待检测信号,同步到sys_clk下了,计数器always块用sys_clk驱动。

我愿称之为脉冲信号检测同步法。 还可以把这个信号输出出去,做标志信号,又名单向握手信号,哈哈,因为不需要接收应答信号。

由此引出了专用握手信号

这个应该是不论慢到块,还是快到慢,单bit还是多bit都适用的方法。

**用双口ram和双口fifo,**解决多bit异步时钟域传输问题。(慢到快,快到慢都适用)。

听说还有一个先用格雷码编码,然后再同步打拍的方法,我没研究过这个。不清楚。

推荐几本书:

我看过的比较适合新手:

《FPGA设计与Verilog实现》《深入浅出玩转FPGA》《那些年,我们拿下了FPGA》《野火征途pro开发实战指南》

相关推荐
上理考研周导师5 小时前
第二章 虚拟仪器及其构成原理
fpga开发
FPGA技术实战6 小时前
《探索Zynq MPSoC》学习笔记(二)
fpga开发·mpsoc
bigbig猩猩17 小时前
FPGA(现场可编程门阵列)的时序分析
fpga开发
Terasic友晶科技21 小时前
第2篇 使用Intel FPGA Monitor Program创建基于ARM处理器的汇编或C语言工程<二>
fpga开发·汇编语言和c语言
码农阿豪1 天前
基于Zynq FPGA对雷龙SD NAND的测试
fpga开发·sd nand·spi nand·spi nand flash·工业级tf卡·嵌入式tf卡
江山如画,佳人北望1 天前
EDA技术简介
fpga开发
淘晶驰AK1 天前
电子设计竞赛准备经历分享
嵌入式硬件·fpga开发
最好有梦想~1 天前
FPGA时序分析和约束学习笔记(4、IO传输模型)
笔记·学习·fpga开发
檀越剑指大厂1 天前
【基于Zynq FPGA对雷龙SD NAND的测试】
fpga开发