03-ASIC和FPGA中的时钟结构
1 ASIC 中时钟的结构
ASIC电路中的时钟的结构。这是一个非常典型的MCU的时钟结构图。它的时钟结构和功能的划分。首先,我们通过外部振荡器发送了一个8MHz的时钟给PLL,经过分分频和倍频产生更多的一些时钟。这些时钟再经过一些多路选择器来送给后面的电路。从上图里面看,我们把它做了1,2,4,8,16的分频。
送给后面的时钟以后我们这里面有个ICG,也称作门控时钟。来控制这个时钟在什么时间关断和打开,门控时钟输出了以后,接的这个OCC(oncheck clock controller)。它的作用是和design for test dft来结合来使用的。也就是说,在function模式或者功能的模式下,用直接接的分频出来的时钟system clock时钟。
如果在测试模式下,可能要用外部输入的慢速的ATE时钟,那么通过这个OCC的逻辑来选择或者是切换function模式和test模式下时钟的分配。这个切换的模式,就用dft的模式。dft模式是一个控制管脚,可以控制相关的时钟切换。在切换的过程中,我们为了防止切换导致或者引入一些毛刺时钟。我们有一个无毛刺切换电路来切换function和测试模式,时钟。
这些输出也可以通过这个mux电路来把输出作为其他的芯片的时钟,或者是说我们来观测观察我们这个时钟里面的情况。
在ASIC设计中有一个重要的概念,就是叫clock tree synthesis。我们简称为CTS。逻辑上,时钟会接到寄存器的时钟端,它是一个网状的结构。为了达到功能的正确或者时序的正确,期望时钟到达各个寄存器的延迟信息差不多。那么根据要求,我们就可以插入buffer,相当于一个大树,有树枝树叉,这样的一个结构。可以来确保我们源头时钟到各个寄存器的时钟的延迟差不多。这就叫clock tree synthesis,这是在ASIC设计中的一个重要的特点。
在ASIC设计中有很多的时钟,这里面就有一个问题,对这些时钟,各个时钟打出的信号之间该怎么处理呢?或者clock 1送给另外一个时钟clock 2它们之间有什么样的情况会导致功能出错。这是我们在ASIC设计中非常重要观念。
2 FPGA 中时钟的结构
下面我们讲一下FPGA中的使用的结构。FPGA的时钟结构和ASIC时钟结构是不一样的,为什么呢?ASIC设计可以通过后端的工具来插入clock tree和很多的处理功能,定制化的来做相关的电路时钟的处理。而FPGA中时钟的驱动电路和它的连接资源,其实在FPGA中已经把它做好了。你只能利用它或者调用它。用它的功能来完成相关时钟的驱动或者是分配。
首先,我们有MMCM,我们称之为混合模式的时钟管理器。它里面包含了锁相环,也会产生多个不同的时钟输出。这个输出可以分频倍频以及相位的调整。在一个FPGA里面,有很多个MMCM这些管理模块,也就是说它可以给你提供很多个时钟信号。时钟产生了以后,我们要通过一些时钟缓冲器。
bufferG全局时钟缓冲器。全局时钟缓冲器,它可以驱动FPGA中全局的时钟线路,也就是说它可以连接到在不同的位置的寄存器。
bufferH是横向组的时钟缓冲器,可以把它理解成为一个局域的局部的一个时钟区域驱动。bufferR用于纵向的组的时钟缓冲区,你也可以把它理解为一个局部区域的时钟。
bufferMR,它是multi clock region buffers,就是它可以驱动多个时钟域。
bufferIO,它只能用于驱动IO里面的相关的时钟。
bufferH和bufferR,也可以驱动lO里面相关的时钟。所以这就是bufferH,bufferR,bufferIO它的区别之一。
在实际电路设计中,要充分考虑或者要充分的了解你这个FPGA中里面它有多少个全局的缓冲区?有多少个bufferH,bufferR, bufferMR,bufferIO?来决定通过什么样的方式应用它来驱动相关的逻辑电路。
同步时钟异步处理
如果在ASIC设计中做好以后,很多设计要转到FPGA上,这时候该怎么处理呢?首先如果在ASIC这个设计中,很多时钟可能是同源时钟,但是它跨越了很多的时钟域。有时候我们为了更简单或者更方便的布局布线或者做clock tree。在设计中也会按异步对这些同源时钟
来做处理。也就是说,原是同步的时钟,但是,因为考虑到布局布线要多次迭代。这样的话,这个时间和效果可能不是很好,也把这些同源的时钟的关系作为一些异步处理。可以节省后端迭代的次数,进而可以缩短开发的周期。当然,代价是增加了一部分的设计面积,但这个代价在设计里面,往往可以,折中的考虑。
MMCM代替ASIC中时钟产生电路
(2)如果ASIC设计转到FPGA的时候,如果已经做了同步时钟的处理的话,仅需要在时钟产生模块的输出中给每个时钟都插入bufferG,就可以使每个生成时钟域的时钟偏差最小。但是,如果电路里面有很多倍频分频生成的时钟,在ASIC设计中,这时候我们可以充分利用FPGA里面的时钟产生模块,比如我们的MMCM。把我们这些ASIC设计中的时钟产生电路用MMCM或者PLL锁相环来替代。也就是说我们不用ASIC中时钟产生电路,直接用MMCM里面的模块来帮我们产生对应的分频或者倍频的一些时钟,这样我们再把这些时钟通过bufferG再进入各个模块,这样效果会更好一点。
扇出少的信号,不适用bufferG
(3)如果生成的时钟较多,但是每个时钟的扇出并不是很大。这时候按理说用bufferG来做时钟的驱动会更好。或者是用bufferH或bufferMR来做启动驱动比较好。但是,有一个小的问题,因为在FPGA中布线资源连接关系都布好了,需要把它通过一些连接来配置它。如果你扇出小的信号,一般不需要利用全局缓冲器的大驱动,为什么呢?因为你时钟生成的逻辑,如果处于普通的CLB中,从CLB到全局的时钟线,再到bufferG,然后再经过全局时钟线,进入本地的连线直接要驱动的目标的寄存器,这个路径会很长。此时,时钟源和它其他的生成的时钟,以及它们再生成的时钟的偏移会比较大。即我们用bufferG,并没有减到或者减减小,或者说体现减小时钟偏差的作用。这时候如果你不使用bufferG布局布线,使用FPGA里面的布局布线工具会自动的把相关的逻辑放在很近的位置。虽然我们。使用的是较慢的本地的逻辑的连线,但是由于路径短,经过的开关少时钟的偏差反而较小。
03-ASIC和FPGA中的时钟结构的更多相关文章
- 【转】关于FPGA中建立时间和保持时间的探讨
时钟是整个电路最重要.最特殊的信号,系统内大部分器件的动作都是在时钟的跳变沿上进行, 这就要求时钟信号时延差要非常小, 否则就可能造成时序逻辑状态出错:因而明确FPGA设计中决定系统时钟的因素,尽 ...
- 三叔学FPGA系列之一:Cyclone V中的时钟资源
之前的项目中更多的是有师兄提供经验和帮助,追求的是快速上手,所以不管对于硬件电路设计,还是verilog电路编程,甚至是FPGA内部的资源,都没来得及系统地学习,最近在做算法到电路的实现,正好系统学习 ...
- FPGA学习之基本结构
如何学习FPGA中提到第一步:学习.了解FPGA结构,FPGA到底是什么东西,芯片里面有什么,不要开始就拿个开发板照着别人的东西去编程.既然要开始学习FPGA,那么就应该从其基本结构开始.以下内容是我 ...
- FPGA中竞争冒险问题的研究
什么是竞争冒险? 1 引言 现场可编程门阵列(FPGA)在结构上由逻辑功能块排列为阵列,并由可编程的内部连线连接这些功能块,来实现一定的逻辑功能. FPGA可以替代其他PLD或者各种中小规模数 ...
- FPGA中的除法运算及初识AXI总线
FPGA中的硬件逻辑与软件程序的区别,相信大家在做除法运算时会有深入体会.硬件逻辑实现的除法运算会占用较多的资源,电路结构复杂,且通常无法在一个时钟周期内完成.因此FPGA实现除法运算并不是一个&qu ...
- FPGA中计数器设计探索
FPGA中计数器设计探索,以计数器为32位为例: 第一种方式,直接定义32位计数器. reg [31:0]count; quartus ii 下的编译,资源消耗情况. 85C模型下的时钟频率. 0C模 ...
- 低成本FPGA中实现动态相位调整
在FPGA中,动态相位调整(DPA)主要是实现LVDS接口接收时对时钟和数据通道的相位补偿,以达到正确接收的目的.ALTERA的高端FPGA,如STRATIX(r) 系列中自带有DPA电路,但低端的F ...
- FPGA中的“门”
逻辑门 在ASIC的世界里,衡量器件容量的常用标准是等效门.这是因为不同的厂商在单元库里提供了不同的功能模块,而每个功能模块的实现都要求不同数量的晶体管.这样在两个器件之间比较容量和复杂度就很困难. ...
- 理解FPGA中的RAM、ROM和CAM;ROM、RAM、DRAM、SRAM、FLASH
目前大多数FPGA都有内嵌的块RAM(Block RAM),可以将其灵活地配置成单端口RAM(DPRAM,Single Port RAM).双端口RAM(DPRAM,Double Ports RAM) ...
- 数字设计中的时钟与约束(gate)
转载:https://www.cnblogs.com/IClearner/p/6440488.html 最近做完了synopsys的DC workshop,涉及到时钟的建模/约束,这里就来聊聊数字中的 ...
随机推荐
- ElasticSearch索引库的增删改查
官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/indices.html 创建索引.设置分片 https://www. ...
- 【Python】【OpenCV】定位条形码(二)moments和HuMoments
根据上一篇博客可知,单纯的通过求取最大面积而进行定位的局限性,因此我们接下来将通过cv2.moments()和cv2.HuMoments()这两个方法来在更复杂的环境中去找到我们的目标区域. cv2. ...
- 从零玩转Java和word模板-从零玩转java和word模板
title: 从零玩转Java和word模板 date: 2021-12-22 18:38:14.086 updated: 2021-12-22 18:38:14.086 url: https://w ...
- Python——第四章:推导式(Comprehensions)
推导式: 推导式是为了简化代码. 语法: 列表推导式:[数据 for循环 if判断] 集合推导式:{数据 for循环 if判断} 字典推导式:{k:v for循环 if判断} 元组推导式:不存在(因为 ...
- 笔记本为什么不出可升级CPU的,用台式CPU不行吗?
我十几年年前的thinkpad 通过更换cpu复活了:联想ThinkPad E430c i3变i7:笔记本电脑CPU升级思路-CPU参数 为什么现在的市面上可以更换cpu的笔记本非常稀少呢? inte ...
- 如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 2
在 Part 1 中,我们一起了解了什么是 Prometheus 和 Grafana,以及使用这些工具的前提条件和优势.在本部分,将继续带您学习如何安装 Helm 以及如何使用 Prometheus ...
- JavaImprove--Lesson03--String的工具类,Math,Runtime,BigDecimal,Date
一String的工具类 String的作为字符串对象,也是使用最多的数据类型对象 所以难免有很多操作,字符串的常见操作包括:字符串拼接,字符串反转,字符串长度,字符串转换等 直接使用String类型来 ...
- 2023-09-20:用go语言,保证一定是n*n的正方形,实现从里到外转圈打印的功能 如果n是奇数,中心点唯一,比如 a b c d e f g h i e是中心点,依次打印 : e f i h g
2023-09-20:用go语言,保证一定是n*n的正方形,实现从里到外转圈打印的功能 如果n是奇数,中心点唯一,比如 a b c d e f g h i e是中心点,依次打印 : e f i h g ...
- 2、Text组件详解
TextStyle 的参数 //代码块 importM import 'package:flutter/material.dart'; void main() { runApp(MaterialApp ...
- 华为云GaussDB城市沙龙活动走进安徽,助力金融行业数字化转型
本文分享自华为云社区<华为云GaussDB城市沙龙活动走进安徽,助力金融行业数字化转型>,作者: GaussDB 数据库 . 近日,华为云GaussDB数据库城市沙龙·安徽站圈层活动顺利举 ...