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

news2024/9/22 21:37:14

本文档主要针对 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.coloradmin.cn/o/2081727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年【山东省安全员A证】新版试题及山东省安全员A证模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 2024年山东省安全员A证新版试题为正在备考山东省安全员A证操作证的学员准备的理论考试专题,每个月更新的山东省安全员A证模拟考试祝您顺利通过山东省安全员A证考试。 1、【多选题】《建设工程安全生产管理…

Kafka简单搭建及常用命令

一、Kafka的服务搭建 1. 安装包下载 这里我下载的是目前最新的版本,在3.X版本及之后的版本中,Kafka已经移除了Zookeeper的强依赖,虽然依旧支持以Zookeeper的方式启动,但本文仅介绍无Zookeeper的启动方式,即kraft模式。…

003、架构_详解(重点)

GoldenDB 分布式数据库框架 DN和RDB增加了备节点;引入新模块CM,且GTM、MDS、PM、CM都增加备节点;MDS、PM、CM、RDB被统一在了管理节点之中;GTM和MDS间多了一条连线,因为GTM的切换由MDS把控;初步系统架构mysqld:一般称为DB节点,负责单个节点的数据处理; dbproxy:一般…

【文心智能体】通过低代码工作流编排创建应用《挑战奥运问答拿奖牌》

欢迎来到《小5讲堂》 这是《文心智能体平台》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 背景整体界面大模型链提示词模型 工具链HTTP请求工具 逻辑…

多语言跨领域迁移学习的新框架:MAD-X

人工智能咨询培训老师叶梓 转载标明出处 多语言模型如mBERT和XLM-R通过零样本或少样本跨语言迁移极大地推动了低资源语言的NLP应用。但这些模型由于容量限制,对低资源语言和未见语言的迁移性能并不理想。为了解决这一问题,来自德国达姆施塔特工业大学、…

【docker】docker学习笔记

docker学习笔记 0. docker 基本命令1. docker存储1.1 目录挂载1.2 卷映射 2. docker 网络2.1 机器ip访问2.2 容器ip访问2.3 域名访问 3. docker compose(批量管理)3.1 编写一个yml文件:3.2 docker compose 命令 4. 制作docker 镜像 0. docker 基本命令 …

【JAVA】jdk下载与安装、配置环境

【JAVA】jdk下载与安装、配置环境 一、下载jdk二、安装jdk三、配置环境四、测试环境变量是否设置成功五、特殊情况六、idea官网 一、下载jdk Oracle官网: https://www.oracle.com/点击 “ Products ” “ 下滑 ”,点击 “ Java ” 点击 “ Download Java ” 先选择…

智慧公厕:城市公共卫生间智慧之选@卓振思众

在现代城市生活中,公共设施的智能化已经成为提升市民生活质量的重要一环。而智慧公厕作为公共卫生设施的创新代表,正逐步改变我们对传统公共厕所的认知,为城市管理带来了前所未有的便捷与舒适。【卓振思众】 环境智能调控,提升使用…

【逐行注释】一维EKF滤波的MATLAB代码|*不需要下载*,直接复制到MATLAB即可运行

文章目录 介绍完整代码运行结果各模块含义介绍 这是一个状态量为一维的MATLAB下的滤波程序,使用的滤波方法是EKF(扩展卡尔曼滤波),滤波后,显示滤波值的曲线、滤波误差曲线、滤波误差的最大值、平均值、标准差的输出。 模型是非线性的(状态方程和观测方程都是非线性的),…

RuoYi-Vue 最新 SpringBoot3 前后端分离版本源码分析

RuoYi-Vue 最新 SpringBoot3 前后端分离版本源码分析 RuoYi-Vue 本地环境部署权限管理SpringSecurity 配置登录接口(认证管理)Authentication 认证token的生成 权限控制 异步任务管理操作日志数据权限 RuoYi-Vue 本地环境部署 直接去 gitee 上拉取最新版本即可,分支…

comfyUI好在哪?为啥大家都在用?

前言 comfyUI自从面世以来,就以一种潜力股的姿态快速流行了起来,越来越多的小伙伴开始使用comfyUI。也许你一开始会被comfyUI密密麻麻的“线路”吓到,但其实comfyUI也没那么复杂,并且好处多多。 本文将带大家一起,快…

2024年8月31日(星期六)骑行瓦恭村

2024年8月31日 (星期六)骑行瓦恭村(向日葵,谷花鱼),早8:30到9:00, 昆明氧气厂门囗集合,9:00准时出发【因迟到者,骑行速度快者,可自行追赶偶遇。】 偶遇地点:昆明氧气厂…

华为Huawei路由器交换机SSH配置

华为设备的SSH登录配置需要5个步骤,示例如下: 一、配置命令 使能SSH功能 stelnet server enable生成公钥 rsa local-key-pair create 1024配置AAA用户密码及相应授权 aaalocal-user xxx password cipher xxxyyy1234local-user xxx privilege level …

RAG必备知识:OpenAI官宣结构化输出|结构化输出工具大汇总

官宣:根据非常普遍的需求,OpenAI的API 中开始支持结构化输出。 在 API 中引入结构化输出 - 模型输出现在遵循开发人员提供的 JSON 模式。让大型语言模型(Large Language Models, LLMs)进行结构化输出是自然语言处理(NLP)领域中的一个重要目标。结构化输出指的是将自然语…

Java SpringBoot结合Vue打造法律援助平台,实现高效在线法律咨询服务

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

布偶猫应该怎么喂?希喂、交响乐金罐、尾巴生活彩虹泥适合布偶猫吗?

我开了家布偶猫咖,这些长相甜美可爱的小家伙超会撒娇卖萌,把客人迷的团团转。布偶猫又叫仙布拉多尔猫,它是现存体型最大、体重最重的猫之一,它们体型大,食量也大,但肠胃却特别弱,所以一定要特别…

Mac环境下Python3虚拟环境创建、Flask安装以及创建运行第一个最小的Flask项目

为什么要使用虚拟环境?随着你的 Python 项目越来越多,你会发现不同的项目会需要 不同的版本的 Python 库。同一个 Python 库的不同版本可能不兼容。 虚拟环境可以为每一个项目安装独立的 Python 库,这样就可以隔离不同项目之间的 Python 库&…

普通人怎么利用ai赚钱?这10个AI帮你实现!

以前我是真想不到,AI写的破文章,复制粘贴发出去竟然有收入? 今天先码住10个ai工具,下次更新10投稿文章获得收入的平台! 1、豆包:完全免费,ai对话里有一个功能叫做网页摘要,可以把你…

从源码到产品:视频美颜SDK与直播美颜插件的开发详解

开发一款高效的视频美颜SDK与直播美颜插件,不仅需要深入理解图像处理技术,还需要考虑到性能优化、跨平台支持等多个方面的挑战。接下来,笔者将从源码开发的角度,详解视频美颜SDK与直播美颜插件的开发过程。 一、视频美颜SDK的核心…

ai取名生成器在哪?建议看看这篇文章

ai取名字叫什么好听?你是否在为给孩子、宠物或是项目起一个既独特又好听的名字而烦恼?别担心,AI取名字软件来帮你解锁命名新境界! 现在有很多智能工具利用先进的人工智能技术,可以为你量身定制一系列令人耳目一新的名…