紫光同创——PLL IP 的使用(Logos2)

本文档主要针对 Logos2 系列的 PLL 配置,至于 Logos 系列的 PLL,可以参考《PLLIP 的使用(Logos)》的文档。

一、PLL IP 介绍


1、PLL 基本配置模式 Basic Configurations
PLL IP 是紫光同创基于 PLL 及时钟网络资源设计的 IP,通过不同的参数配置,可实现时钟信号的调频、调相、同步、频率综合等功能。

Logos2 系列器件的 PLL 支持 APB 动态重配功能,实现 HDMI 像素时钟频率的调整可通过 APB 接口动态配置 PLL 输出时钟频率(时钟相位和占空比不做调整)。而 Logos 器件是没有这个功能的,除了没有动态配置,基本的使用是一致的,大家注意查看 IP 相关手册。

PLL 的使用可选择 Basic 和 Advanced 两种模式,两种模式均支持 APB 接口动态配置实现时钟频率的动态调整,Advanced 模式下 PLL 的内部参数配置完全开放。Basic 和 Advanced两种模式下均可选择使用 GPLL 或 PPLL,GPLL 支持分数分频可实现更精确的输出频率,GPLL与 PPLL 详细描述请参考《UG040004_Logos2 系列 FPGA 时钟资源(Clock)用户指南_V1.2.pdf》。

下图为常用的 IP 框图以及其基本配置,Basic 配置模式下,用户无需关心 PLL 的内部参数配置,只需输入期望的频 率值、相位值、占空比等,IPC 将自动计算,得到最佳的配置参数。如果没有特殊应用,建议使用 Basic 模式配置 PLL。

(图1) 

(图2) 

(图3) 

图 1、图 2、图 3 所示的配置是最基本的使用方法,Mose Select 模式选择 GPLL,FeedbackClock Mode 反馈时钟选择内部反馈,反馈选择 CLKOUF。具体原理可以参考图 3: 

(图4) 

即基本结构是配置一路时钟输入,clkoutf 作为 PLL 内部反馈,并输出一路时钟 clkout0。

(图5)

还有一点,当我们勾选 Show Internal Settings of PLL 时,可以看到具体的配置参数。如图 5 所示,这些参数可以为我们后续进行动态配置,亦或是 Advanced 配置都可以提供参考。

2、PLL Advanced Configuration

 (图6)

Advanced 模式下,PLL 的内部参数配置完全开放,用户需要根据应用需求自行计算相应配置参数,才能正确配置。

(图7) 

如图 6 红框所示,需要自己填写输入分频系数、输出分频系数、占空比、相位、反馈分频系数等,若无特别需求,建议使用 Basic 模式。

二、PLL 的动态配置


勾选如图 x 的地方,可以看到 IP 多出了 APB 接口

(图8) 

1、APB 接口时序
PLL 的动态配置是通过 APB 接口来进行控制的,表 1 是其 APB 接口的描述。 

(图 9 APB 写时序)
 

其实,APB接口的读写时序是非常简单的,每次传输均需要两个时钟周期,我们可以将其分为三个状态,在IDLE状态,也就是空闲状态对应图中T1之前时刻,APB_EN和APB_SEL均为0。当我们需要传输数据时,会进入SETUP阶段,也就是准备状态,对应图中T1-T2这一段时间,在这个状态下会给出地址APB_ADDR,并设置APB_WRITE方向,如果是写,则APB_WRITE为高电平,同时拉高APB_SEL,即选择信号。此时会在SETUP状态下等待一个时钟周期后跳转到第三个状态,第三个状态为ENABLE阶段,也就是传输数据阶段,对应图中T2~T3这段时间,这个阶段地址、数据和APB_SEL均保持不变,然后拉高APB_EN,此时开始数据传输,当APB_READY拉高,表示传输完成。如果接下来不传输数据,则在下一个时钟周期跳转回去IDLE状态,如果传输数据则跳转到SETUP状态。


所以可以得出结论,每次发起传输都需要经过SETUP和ENABLE两个状态。即消耗两个时钟周期。

(图10 APB读时序)

读时序和写时序其实长得非常像,差别不大。一样还是分为三个状态,IDLE、SETUP、ENABLE三个。对比写时序,读时序仅是在SETUP阶段和ENABLE阶段把APB_WRITE改成低电平,表示读取数据。需要注意得是,在ENABLE阶段,数据读出,但是由于时序逻辑,别的模块要在T3时刻的上升沿才能采样到输出得D0。

2、APB寄存器列表

通过APB接口修改相关寄存器数值重新配置输出时钟频率,详细寄存器地址及其定义,如表2所示:

3、动态时钟计算公式

(1) 输出频率的计算

PLL 输出时钟频率由输入时钟频率、配置模式及相关配置参数决定,计算公式如下:

 

FCLKOUTx 为输出时钟频率;
FIN 为输入时钟频率;
MDIV 为反馈分频参数;
FBDIV 的值等于 PLL 反馈时钟的输出分频参数,clkoutf 作为反馈时钟时:FBDIV = ODIVf;
IDIV 为输入分频器分频参数;
ODIVx 的值等于输出时钟的输出分频参数,基于 IP 的配置使能 clkout0,所以 x=0 ,ODIVx = ODIV0;
根据像素时钟频率确定时钟配置参数,每次切换分辨率时 PLL 动态配置通过 APB 接口修改相关参数的寄存器数值实现输出频率调整。

分频参数:
根据 PLL 输出频率计算公式,相关分频参数如下,需根据实际输出频率确定分频参数数值
REG_ODIV0_RATIO<7:0>
REG_FDIV_RATIO<7:0>
REG_IDIV_RATIO<7:0>
REG_MDIV_RATIO<7:0>
具体的参数,在 IP 配置可以看到,如下所示

(图11) 

点击 Show Internal Setting of PLL 去查看具体的配置,IP 这里有时会显示小数,而我们知道,FPGA 不能直接写小数,所以要将其定点化,可以简单扩大一个倍数,去除小数位。

(2) 占空比和相位的计算

GPLL 寄存器设置:
占空比计算公式为 duty cycle = (50%/odiv)*duty,若保持占空比为 50%不变,需设置分频参数与占空比参数相同。
其中 odiv 为输出分频系数与 xxx_RATIO 寄存器的值有关,duty 和 xxx_DUTY 寄存器的值有关,请参考表 2 给出的寄存器值。
以下为参考:
REG_ODIV0_DUTY=REG_ODIV0_RATIO
REG_FDIV_DUTY=REG_FDIV_RATIO
输出时钟相位不做调整,正常情况改变寄存器的值即可,具体配置可以查阅手册:
REG_ODIV0_FPHASE=0
REG_ODIV0_CPHASE=0
REG_FDIV_FPHASE=0
REG_FDIV_CPHASE=0

三、动态配置验证

本次不进行仿真,直接通过上板验证,输出不同分辨率的彩条进行验证,大家可以自备一个屏幕。

本实验主要了解 APB 接口,故只介绍相关代码,由于 apb_cfg_test 模块一共 500 多行,故挑重点部分进行讲解,HDMI 显示等代码将在应用篇介绍,代码如下:

该代码主要完成不同分辨率的分频和占空比系数的配置,key_cnt 默认为 0,每按下按键 1该值加1,例如在key_cnt=0时,通过配置不同的分频系数以及占空比系数将输出的时钟配置为148.5MHZ,占空比 50%,相位默认不调节,以此输出 1080P 所需要的像素时钟;接下来的每个状态都是如此。

该 always 块主要完成状态的跳转,一共有 14 个状态,在 CFG_IDIE 状态下,检测到 cfg_en 的上升沿到达,即 cfg_en_pos 信号,则状态跳转到 ODIV0_CFG1 下,然后开始完成相应寄存器的配置.然后检测到 apb_rdy 信号,就是我们所说的 apb_ready 信号,则表示配置完成,所以检测到该信号拉高就跳转到下一个状态,直到跳转到 CFG_DONE 状态。 

这部分代码主要完成对 ODIV、FDIV、MDIV、IDIV 的寄存器进行配置,一共有 14 个状态, 除了 CFG_IDLE(初始状态)和 CFG_DONE(配置完成状态),剩下的 12 个状态均是先配置寄存器, 然后读出数据.例如在 ODIV0_CFG1 状态下,为了配置输出分频系数,根据我们的寄存器地址表, 可以知道其地址为 0,故 addr<=0,高八位是输出分频系数,低八位是占空比系数,所以wdata<={odiv_ratio,odiv_duty}.然后拉高 apb_wr_r 表示进行写.剩下来的每个写数据均是如此, 只需要修改地址和写入的数据即可。 

而 ODIV0_CFG1_RD 状态就是当写完之后,把 apb_wr_r 拉低表示读数据,地址不变,写数据情空,读出数据,验证写入是否正确。之后的每个状态操作均一致,知道配置完 ODIV、FDIV、MDIV 、IDIV 的寄存器就跳转到 CFG_DONE 状态,表示配置完成。

ODIV0_CFG2 则是配置相位,相位不改变,所以全部给 0.因此,接下来的操作其实就是配置分频系数和占空比,然后读出,然后配置相位,然后读出.反复操作,直到全部配置完成。

具体讲解,大家可以看视频讲解部分,至于 VESA 时序也将在应用篇讲解,这里只是简单演示动态配置时钟输出不同分辨率的彩条作为演示,效果比较直观。目前读者只需要知道不同的分辨率都会有不同的像素时钟即可。

以下是上板现象图:

(图12) 

输出彩条即表示实验成功,默认输出 1080p 60hz,按下 key1 切换分辨率,key2 复位。(图 5 最左边是白色 文字是文档中打上去的,避免以为是空白)。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/416392.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客周赛 Round 58(ABCDF)

目录 A.会赢吗&#xff1f; B.能做到的吧 C.会赢的&#xff01; D.好好好数 F.随机化游戏时间 A.会赢吗&#xff1f; 思路&#xff1a; 签到题&#xff0c;比大小 void solve() {double a,b;cin>>a>>b;if(a>b) cout<<"NO";else cout<&…

ByteTrack多目标跟踪(一)—理论基础

ByteTrack多目标跟踪 算法概述 github: https://github.com/ifzhang/ByteTrack ByteTrack是一种基于Tracking-by-Detection范式的多目标跟踪算法。 先前的多目标追踪算法一般在完成当前帧的目标检测后只会保留置信度比较大的检测框用于进行目标跟踪&#xff0c;比如图中置信度…

思维导图在线制作怎么制作?5个软件教你快速进行思维导图制作

思维导图在线制作怎么制作&#xff1f;5个软件教你快速进行思维导图制作 思维导图是一种用于组织信息、梳理思路和激发创意的可视化工具。在线制作思维导图可以帮助你随时随地进行创作和分享&#xff0c;以下是五款在线思维导图工具&#xff0c;可以帮助你快速进行思维导图的制…

828华为云征文|基于华为云Flexus云服务器X搭建FTP服务器

❀目录 ❀概述❀特点❀环境准备❀安装❀配置文件修改❀创建目录、修改权限❀控制台安全组开启21端口❀工具验证❀总结 ❀概述 FTP文件传输协议是一种在网络中进行文件传输的广泛使用的标准协议。作为网络通信中的基础工具&#xff0c;FTP允许用户通过客户端软件与服务器进行交…

Java技术栈 —— Spark入门(二)之实时WordCount

Java技术栈 —— Spark入门&#xff08;二&#xff09; 一、kafka1.1 创建topic1.2 准备input与查看output 二、spark2.1 spark下的程序文件2.2 用spark-submit提交作业 参考文章&#xff1a; 参考文章或视频链接[1] 《Kafka Spark Stream实时WordCount》 实验环境&#xff…

【AQS源码】深入理解AQS的工作原理

【AQS源码】深入理解AQS的工作原理-CSDN博客

从零开始掌握容器技术:Docker的奇妙世界

容器技术在当今的云计算和软件开发领域中扮演着越来越重要的角色。如果你是一名计算机专业的学生或从事IT行业的从业者&#xff0c;可能已经听说过Docker这个词。它在软件开发、部署、运维等环节中大放异彩&#xff0c;但对于刚接触这个概念的朋友来说&#xff0c;可能还是有些…

JMeter在Mac下的安装使用

前言 开发过程中需要对系统进行性能测试&#xff0c;可以选用jemter对接口进行压测&#xff0c;jemter优点如下&#xff1a; 开源许可证&#xff1a;Jmeter完全免费&#xff0c;允许开发者使用源代码进行开发 友好的 GUI&#xff1a;Jmeter 非常易于使用&#xff0c;不需要花…

flume 使用 exec 采集容器日志,转储磁盘

flume 使用 exec 采集容器日志&#xff0c;转储磁盘 在该场景下&#xff0c;docker 服务为superset&#xff0c;flume 的sources 选择 exec &#xff0c; sinks选择 file roll 。 任务配置 具体配置文件如下&#xff1a; #simple.conf: A single-node Flume configuration#…

推荐4个一键生成 PPT的AI工具,让你畅享智能办公!

对于职场人士来说&#xff0c;ai PPT 工具已经成为了高效办公的一大得力助手 。它可以让你从繁琐的 PPT 制作中解脱出来&#xff0c;把更多的时间放在其他的工作准备上面。并且它们有极大的设计能力&#xff0c;会让我们的PPT变的设计感十足&#xff0c;如果大家正在为PPT制作烦…

js逆向——RSA实战案例讲解

受害者网站&#xff1a;http://www.15yunmall.com/pc/login/index 检查超时&#xff0c;这个我们不管他 直接分析参数&#xff0c;有2处加密位置&#xff0c;分别为password和csrftoken 只要是能够跟栈的&#xff0c;一律先在send的位置下断 很快就跟栈找到加密数据的位置 R…

《JavaEE进阶》----4.<SpringMVC①简介、基本操作(各种postman请求)>

本篇博客讲解 MVC思想、及Spring MVC&#xff08;是对MVC思想的一种实现&#xff09;。 Spring MVC的基本操作、学习了六个注解 RestController注解 RequestMappering注解 RequestParam注解 RequestBody注解 PathVariable注解 RequestPart注解 MVC View(视图) 指在应⽤程序中…

我用 GPT 学占星

最近对占星赶兴趣&#xff0c;但是看到星盘中好多名词&#xff0c;不懂是什么意思&#xff1f;所以直接问 gpt &#xff0c; 发现回答的真的很棒&#x1f389; &#xff01; 假如我想知道各个状态的具体是根据什么数据来显示的&#xff1f; 分分钟解决了我的问题&#xff1b; 我…

docker Desktop报错 error pulling image configuration 处理

问题描述 在 docker 拉数据 出现以下错误 error pulling image configurarion&#xff1a; 这个问题 主要是 可能应该某些原因不能网络无法连上镜像 原因分析&#xff1a; 1。 2024年 5月以后 国内很多IP都 。。。懂的都懂&#xff0c;很多 VPN 也是。。。 懂的都懂&#x…

7种常见排序

1 直接插入排序 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为 止&#xff0c;得到一个新的有序序列 。 void InsertSort(int* a, int n) {for (int i 0; i < n - 1; i){//划分区间【0&#xff0c;end】int en…

Ubuntu 24.04 安装 英特尔工具包 Intel® Toolkits

目录 1.采用用户界面 GUI 安装英特尔基本工具包 Intel oneAPI Base Toolkit 1.1 下载离线英特尔基本工具包 1.2 安装英特尔基本工具包 1.3 英特尔基本工具包 Intel oneAPI Base Toolkit 环境设置 2.安装英特尔高性能计算工具包 Intel HPC Toolkit 2.1 下载离线英特尔高性…

模型从 HuggingFace 转存到 ModelScope

由于 HuggingFace 网络访问比较慢&#xff0c;国内通常会使用魔搭下载模型&#xff0c;如果魔搭上还没有&#xff0c;需要从 HuggingFace 准存一下&#xff0c;本文将通过 Colab AliyunPan 的方式下载模型并进行转存。 登录Colab 并运行一下命令 安装依赖包&#xff0c;Hugg…

最新项目管理软件排行榜,90%大厂项目经理都在用!

本文是主流的热门项目管理软件排行榜&#xff0c;助力企业选型&#xff01; 项目管理软件排行榜就如同企业管理的指南针&#xff0c;能为企业在众多项目管理工具中找到最适合的那一款。 对于企业来说&#xff0c;如果没有好用的项目管理软件&#xff0c;就像航海者失去了罗盘&…

Python 数据分析笔记— Numpy 基本操作(上)

文章目录 学习内容&#xff1a;一、什么是数组、矩阵二、创建与访问数组三、矩阵基本操作 学习内容&#xff1a; 一、什么是数组、矩阵 数组&#xff08;Array&#xff09;&#xff1a;是有序的元素序列&#xff0c;可以是一维、二维、多维。 array1 [1,2,3] 或[a, b, c, d…

智能工厂监控升级:Sovit2D大屏展示和ARM计算机的完美搭档

在当今科技飞速发展的时代&#xff0c;智能工厂和环境监测领域对于高效、精准的监控系统的需求日益增长。Sovit2D 组态软件与 ARM 工业计算机的结合&#xff0c;为这些领域带来了全新的解决方案。 走进智能工厂的监控室&#xff0c;一台台 ARM 工业计算机正稳定地运行着 Sovit2…