Cyclone器件全局时钟尽在掌控

2023-12-17 11:08

本文主要是介绍Cyclone器件全局时钟尽在掌控,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



 http://bbs.ednchina.com/BLOG_ARTICLE_211992.HTM


         首先感谢wind330兄的《掌控全局时钟网络资源》一文对于我的帮助。本文结合cyclone器件(因为特权最近正在使用这个系列的器件)对FPGA的时钟资源进行一些探讨,或者说是特权同学的一点认识和大家分享一下,有不对的欢迎指正。


         翻开cyclone-handbookClock Management一章,其主要还是要介绍cyclone器件的PLL资源相关的内容。但是对于我们了解FPGA的全局时钟网络还是很有参考价值的。


         Cyclone系列的器件基本都有2PLLEP1C3例外只有一个PLL



点击看大图 


         上面这个图最说明问题,CLK0/CLK1作为PLL1的输入,CLK2/CLK3作为PLL2EP1C3没有)的输入。当然了,如果你尝试用上面所规定的时钟管脚以外的管脚作为PLL的输入,那么只会换来Quartus II的报错信息。


         而从上图我们可以看到PLL的输出最多可以有三个,c0,c1,e0c0c1一般作为内部时钟使用,而e0是只能作为外部输出时钟使用的,就是说这个PLL输出时钟必须直接连接到器件外部的pin上,如果你尝试在FPGA内部逻辑使用e0作为时钟,那么你同样只能换来Quartus II的报错信息。


         另外有一点必须提一下,先看下面的图。



点击看大图 


         绿色的方波是作为PLL输入的clk,而往下红色的分别是c0,c1,e0,最后面一个是所谓的Lock信号(拉高作为PLL输出有效信号)。也就是当PLL复位完成或者使能(到底要复位还是使能是可以在配置PLL时选择的)后若干个时钟周期后PLL的输出才会有效,那么在Lock拉高以后的PLL才是我们想要的。上面这个图里输入的clk和输出的时钟之间似乎没有相位差,是很理想的一个状态。但是实际上PLL出来的时钟和输入的clk之间总是存在相位差的,仿真后如下面的图。



点击看大图 


         所以,个人感觉在PLL时钟资源充裕的情况下,统一使用PLL输出时钟作为内部逻辑的时钟使用,而不使用PLL的输入作为内部时钟,这样是为了防止内部的各个时钟之间保持一定相位的对齐,同时我也发现PLL的输入时钟驱动内部逻辑的clock network latency相对要比PLL输出的时钟驱动内部逻辑的clock network lacency大得多。


         如果非得用PLL的输入时钟同时作为内部逻辑的时钟,最好是根据它们的相位关系进行一下时钟的对齐。如下面的两个图所示。




点击看大图


点击看大图 


         下面再看看cyclone器件的内部全局时钟网络的分配,8个全局时钟网络,左右各4个。而PLL1的输出c0,c1CLK0/1以及DPCLK0-3(复用的时钟管脚)或者内部的逻辑可以使用左边的4个全局时钟网络;PLL2的输出c0,c1CLK2/3以及DPCLK4-7(复用的时钟管脚)或者内部的逻辑可以使用右边的4个全局时钟网络。PLL输出作为外部时钟的e0是不会(也没有必要)分配到全局时钟网络的。



点击看大图 


         就拿左边的来说,可以使用4个全局时钟网络的信号其实不少,它们之中到底谁使用有限的全局时钟网络呢?说白了,都是可以由你掌控的,当然了,在你不管它们的时钟会有一个缺省的状态。


如果Setting--Fitter Setting--More Setting…里的Aoto Global Clock开启时,Quartus II在实现时会根据内部逻辑的实际情况自动分配全局时钟,就是说谁占用全局时钟网络软件说了算(一般系统的时钟和复位信号会占用全局时钟网络)。当然了,你也可以关闭它,然后自己来分配,这时你可以到Assignment Edit里Global Signals进行分配。然后你可以到编译报告里查看Fitter—>Rescource Section—>Global…里的信息。


 


另外还有一个值得注意的地方,下面两个图示出了可以占用全局时钟网络的信号它们实际可以占用的全局时钟网络资源。比如PLL1的输出c0只能使用GCLK1或者GCLK2c2只能使用GCLK0或者GCLK3




点击看大图


点击看大图 


拿一个实例来看看,我们有一个CLK1输入的时钟信号clk,这个时钟信号clk同时是PLL1的输入,产生两个PLL输出c0c1。系统本身有一个复位信号rst_n。此外,我们内部逻辑产生一个时钟clk_divown,在Aoto Global Clock开启的情况下,我们得到了下面的全局时钟网络的分配结果。



点击看大图 


         PLLc0分配到了GCLK2c1分配到了GCLK3PLL的输入时钟即CLK1的输入clk分配到了GCLK1,它们都分配到了规定的全局时钟网络内了。其次,clk_div_ownrst_n随机分配。


         这个例子中的全局时钟网络对于我们的使用还是绰绰有余的,但是一个大的系统,时钟交错,高扇出的信号层出不穷,那么对于全局时钟信号的掌控就需要格外小心了。


说白了,对于设计者来说,最重要的是要做到一切尽在掌握。

这篇关于Cyclone器件全局时钟尽在掌控的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/504153

相关文章

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

Weex入门教程之4,获取当前全局环境变量和配置信息(屏幕高度、宽度等)

$getConfig() 获取当前全局环境变量和配置信息。 Returns: config (object): 配置对象;bundleUrl (string): bundle 的 url;debug (boolean): 是否是调试模式;env (object): 环境对象; weexVersion (string): Weex sdk 版本;appName (string): 应用名字;

集群环境下为雪花算法生成全局唯一机器ID策略

雪花算法是生成数据id非常好的一种方式,机器id是雪花算法不可分割的一部分。但是对于集群应用,让不同的机器自动产生不同的机器id传统做法就是针对每一个机器进行单独配置,但这样做不利于集群水平扩展,且操作过程非常复杂,所以每一个机器在集群环境下是一个头疼的问题。现在借助spring+redis,给出一种策略,支持随意水平扩展,肥肠好用。 大致策略分为4步: 1.对机器ip进行hash,对某一个(大于

fetch-event-source 如何通过script全局引入

fetchEventSource源码中导出了两种类型的包cjs和esm。但是有个需求如何在原生是js中通过script标签引呢?需要加上type=module。今天介绍另一种方法 下载源码文件: https://github.com/Azure/fetch-event-source.git 安装: npm install --save-dev webpack webpack-cli ts

Spring Boot全局异常捕捉!

项目中避免不了有异常! 为了用户体验,常常把异常捕获起来,展现一个友好的页面,提醒用户! 在pom.xml中: <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta

理解C++全局对象析构顺序与 IPC 资源管理:避免 coredump

文章目录 0. 概述1. 问题背景2. 问题分析3. 解决方案:手动释放资源4. 深入剖析:为什么手动调用 `reset()` 有效?5. 延伸思考:如何避免全局对象带来的问题?6. 总结 0. 概述 在编写 C++ 程序时,使用全局或静态对象有时可能会导致不可预期的崩溃(如 coredump)。这类崩溃通常源于对象的析构顺序、资源的管理方式,以及底层资源(如 IPC 通道或共

图特征工程实践指南:从节点中心性到全局拓扑的多尺度特征提取

图结构在多个领域中扮演着重要角色,它能有效地模拟实体间的连接关系,通过从图中提取有意义的特征,可以获得宝贵的信息提升机器学习算法的性能。 本文将介绍如何利用NetworkX在不同层面(节点、边和整体图)提取重要的图特征。 本文将以NetworkX库中提供的Zachary网络作为示例。这个广为人知的数据集代表了一个大学空手道俱乐部的社交网络,是理解图特征提取的理想起点。 我们先定义一些辅助函数

关于OceanBase MySQL 模式中全局索引 global index 的常见问题

在OceanBase的问答区和开源社区钉钉群聊中,时常会有关于全局索引 global index的诸多提问,因此,借这篇博客,针对其中一些普遍出现的问题进行简要的解答。 什么是 global index ? 由于 MySQL 不具备 global index 的概念,因此这一问题会经常被社区版用户提及。就在前几天,就要人询问下面这个语法的意义。 create table part_tes

油表加速器时钟屏保 就是这么酷酷的

太酷了!这个时钟屏保太有个性了!油表加速器时钟屏保,模拟汽车加速表盘,非常有质感,用它做屏保,简直就是酷毙了~!今天小编给大家分享一个非常实用好看的时钟屏保(芝麻时钟),官网地址(https://clock.zhimasoft.cn/?bili) 芝麻时钟-油表加速器时钟屏保 我们一起来看下,油表加速器表盘时钟屏保是怎么设置的? 1、打开芝麻时钟软件,找到"时钟屏保"菜单,点击后打开;(

彩虹数字屏保时钟 芝麻时钟开启个性化的时代 屏保怎么能少它

彩虹数字屏保时钟 芝麻时钟开启个性化的时代 屏保怎么能少它?电脑屏保多样化,让大家有了更多的选择,让更多人有机会把自己的电脑打扮得漂漂亮亮,今天小编给大家推荐:芝麻时钟(官网下载地址:http://clock.zhimasoft.cn/?bili),一起看下怎么开启彩虹数字时钟屏保吧! 彩虹数字屏保时钟 1、先下载芝麻时钟到电脑,可以百度,或者微软应用商城搜索“芝麻时钟”下载;