【异步电路碎碎念1】 —— 到底什么是异步电路

简介: 【异步电路碎碎念1】 —— 到底什么是异步电路

异步电路是我们在进行IC设计时候必须要跨越的一道坎,必须要掌握的基础知识。个人认为对异步电路的理解以及处理经验是衡量一个IC前端水平的重要指示。不过最可怕的是哪怕你想的再明白理解的再清楚,也还是可能会翻车,简单说异步电路堪称IC芯片出错重灾区。当然正因为如此,一般的IC设计中会把异步处理做单独的模块设计,需要进行异步处理时调用对应功能的module即可。

下文综合了我自己对异步电路的理解和实操,书中所学技巧与经验以及网上其他大牛的总结讲解,我尝试用最易于理解掌握的方式进行表达也算是对自己所学的记录,如有侵权请告知立即删除。

无论我们是去面试、和前端后端交流还是听大佬们聊天,总会听到“跨异步”“异步处理”“异步FIFO”“跨异步打拍”“异步电路”这些词没事就蹦出来,所以第一篇文章我们就来探讨下到底什么是异步电路。

 

有异步就肯定有同步,基本含义上来说异步和同步都是针对时钟而言的。同步时钟sync是指时钟之间相位相对确定,异步时钟async是指时钟之间相位不确定。看到一些地方认为同步时钟sync是指时钟之间频率和相位都相对确定,异步时钟async是指时钟之间频率或相位不确定,也不能说没有道理吧。不过我坚持认为根源是在相位确不确定上,例如33M和100M时钟就一定不可能是同步时钟,因为无论如何做不到相位保持一致;而50M和100M时钟就有可能是同步时钟,因为相位可以保持一致。

下面就是典型的异步电路结构。

因此我们可以得出结论:频率不同不一定同步异步,同源时钟不一定同步异步,归根到底看有没有固定的相位。顺便多说一句,后端的大佬对于异步的理解跟前端偶尔有所出入,尤其是在进行时序收敛时候,典型的场景就是芯片子系统之间即使在同步时钟域,也会按照异步时钟域来进行时序收敛。

还有一种特殊场景,即使一组寄存器都由同一时钟驱动,也可能存在异步问题,那就是异步复位的情景。我们我们知道复位可以区分为同步复位和异步复位(当然一般使用同步复位异步撤离或者同步复位同步撤离,这个就先不讨论了)。

always @(posedge clk or negedge rst_n)

always @(posedge clk)

而对于同步复位,复位信号是不会放在敏感列表中的,因此在综合时会被综合成如图2的形式作为数据输入触发器,那么此时如果复位信号由异步时钟驱动,那么这个电路结构实际也构成了异步场景。

有时钟就可以划分出一块时钟域,一个时钟域是指使用某一同步时钟驱动的逻辑单元(当然一般是指时序逻辑单元,非时钟驱动的器件先往后站啊)集合,这个集合中一般有什么东西呢?最常见的肯定就是我们总写的D触发器啦,当然还有处于同步时钟下的FIFO啊、SDRAM啊、引脚啊都能算进来,总之在某一同步时钟驱动的所有时序单元都算进来就好了。

一个芯片多模块之间可能是同一时钟域(单时钟域)下的,也有可能是在异步时钟域(多时钟域)下的,我盲猜应该是多时钟域占大头吧,毕竟现在的芯片越做越大越做越复杂了。

正是因为多时钟域的存在,才引出了信号的跨时钟域处理问题也就是我们要探究的异步电路种种,这个慢慢写吧。话说那天某孩子忽然问我,“既然跨异步有这么多问题,那为啥不用同一个时钟呢,省了多少事啊”,这个问题当时我是懵了一下。很多场景下跨异步是不可避免的或者说多时钟域是不可避免的,例如例如前后两个模块的吞吐能力不同,串并转换模块,本来信号就属于不同系统但是必须进行交互(例如cpu通过cpu接口读写芯片内部信号),为了功耗考虑尽量降低部时钟域分模块的时钟频率等。

对于多时钟域的信号处理,必然是由发送时钟域(源时钟域)经过同步电路(同步器)到达接收时钟域(目的时钟域),这个过程可以称之为信号跨异步,电路结构称之为异步电路。


相关文章
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的停车场微信小程序附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的停车场微信小程序附带文章和源代码部署视频讲解等
215 6
|
缓存 安全 SoC
来看看ARM gicv2/gicv3的详解
来看看ARM gicv2/gicv3的详解
2036 0
如何用晶体管构建异或门
。XOR ,异或的缩写,它是一种逻辑运算,当高电平输入的数量为奇数时,产生高电平输出;当低电平输入的数量为偶数时,产生低电平输出。这种独特的特性使异或门成为各种应用中的重要组成部分,从简单的二进制算术到复杂的数据加密算法。 在本文中,我们将探讨异或门的内部工作原理,包括其真值表、逻辑符号表示、电路图以及使用晶体管的实际构造。
3155 0
|
缓存 Shell iOS开发
修改 torch和huggingface 缓存路径
简介:本文介绍了如何修改 PyTorch 和 Huggingface Transformers 的缓存路径。通过设置环境变量 `TORCH_HOME` 和 `HF_HOME` 或 `TRANSFORMERS_CACHE`,可以在 Windows、Linux 和 MacOS 上指定自定义缓存目录。具体步骤包括设置环境变量、编辑 shell 配置文件、移动现有缓存文件以及创建符号链接(可选)。
5257 2
|
测试技术 芯片 开发者
芯片验证 | UVM的phase机制
芯片验证 | UVM的phase机制
1487 0
|
Linux Windows 内存技术
PCIe初始化枚举和资源分配流程分析
本文主要是对PCIe的初始化枚举、资源分配流程进行分析,代码对应的是alikernel-4.19,平台是arm64 ## 1. PCIe architecture ### 1.1 pcie的拓扑结构 在分析PCIe初始化枚举流程之前,先描述下pcie的拓扑结构。 如下图所示: ![11.png](https://ata2-img.oss-cn-zhangjiakou.aliyuncs
9751 1
PCIe初始化枚举和资源分配流程分析
|
网络性能优化
【数字IC】深入浅出理解AXI协议
【数字IC】深入浅出理解AXI协议
【数字IC】深入浅出理解AXI协议
|
存储 前端开发 Linux
(上)【数字IC精品文章收录】近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|
【数字IC精品文章收录】近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|
(上)【数字IC精品文章收录】近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|
|
算法 前端开发 芯片
[静态时序分析简明教程(二)] 基础知识:建立时间、保持时间、违例修复及时序分析路径
[静态时序分析简明教程(二)] 基础知识:建立时间、保持时间、违例修复及时序分析路径
[静态时序分析简明教程(二)] 基础知识:建立时间、保持时间、违例修复及时序分析路径
|
供应链 物联网 分布式数据库
区块链技术作为一种新兴的分布式数据库技术,正逐渐改变着我们的生产和生活方式。而智能合约作为区块链技术的重要应用之一
【6月更文挑战第10天】本文探讨了区块链技术与智能合约的界限及其带来的挑战。区块链,以其不可篡改性和安全性,已广泛应用于金融、供应链和物联网等领域。智能合约作为区块链的关键应用,实现了自动、安全和不可篡改的合约执行。然而,技术上的扩展性、性能问题和安全漏洞,以及法律监管的困境,构成了当前的主要挑战。尽管如此,随着技术进步和应用场景的拓宽,区块链与智能合约有望在未来发挥更大潜力。
339 0