K7系列FPGA进行FLASH读写1——CCLK控制(STARTUPE2原语)

news2024/11/27 21:35:20

  最近的工作涉及对 FPGA 进行远程更新,也就是通过远程通信接口将 .bin 文件送到 FPGA,然后写入 FLASH,这样当 FPGA 重新上电后就可以执行更新后的程序了。因此第一步工作就是进行 FLASH 的读写控制。

  然而如果尝试配置 FLASH 管脚时,会发现 CCLK 管脚是不可配置的,这实际上是因为 CCLK_0 管脚在内部已经被占用,我们必须通过其他方式获取/设置它。笔者所用芯片为 K7 系列,根据 ug470 数据手册,我们可以使用 STARTUPE2 原语获取、设置该时钟,官方手册的介绍如下

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

原语调用格式如下

STARTUPE2 #(
	.PROG_USR		("FALSE"),
	.SIM_CCLK_FREQ	(0.0)
)
STARTUPE2_inst(
	.CFGCLK			(cfgclk),
	.CFGMCLK		(cfgmclk),
	.EOS			(eos),
	.PREQ			(),
	.CLK			(0),
	.GSR			(0),
	.GTS			(0),
	.KEYCLEARB		(1),
	.PACK			(1),
	.USRCCLKO		(usrcclk),
	.USRCCLKTS		(0),
	.USRDONEO		(1),
    .USRDONETS		(0)
);
  • CFGCLK,配置逻辑主时钟,仅在配置时有输出,在 master 模式下也一直存在(存疑;根据后面的测试,文档所说的 Persist Enabled 应当指的是 Master 模式下一直使能/连接,但除了配置的时候存在时钟,其他时候为无效的高电平;在配置了 USRCCLK 时,在 FPGA 配置结束后三个 clk 该时钟将切换到 USRCCLK)。Configuration mode 是根据 M[2:0] 管脚配置的,最常用的是 M[2:0]=001 对应的 Master SPI 配置模式,笔者开发板即本模式,Master 模式下 CCLK 由 FPGA 输出给 FLASH 的 SCK;

  • EOS,End Of Start,指示 FPGA 配置的结束;

  • CFGMCLK,配置内部振荡器时钟,是从内部的一个锁相环输出的 65MHz 时钟(不是很准,笔者输出到 GPIO 用示波器看过,那块板子的 ~68MHz);

  • USRDONEO,输出到FPGA 的 DONE_0 管脚。一般而言,在硬件设计中会在这个管脚挂一个 LED 灯,以指示 FPGA 完成配置开始运行;

  • USRDONETS,控制 DONE 管脚的三态门,1 将设置为高阻,0 将会把用户给入的 USRDONEO 输出到 DONE_0 管脚;

  • USRCCLKO,在配置完成后,驱动 CCLK_0 管脚的用户自定义时钟。在配置完成后,前三个时钟周期用于切换时钟源,且不会被输出,但如果使用了 EMCCLK 管脚,则 EMCCLK 信号会出现在 CCLK 管脚上,直到过渡到用户自定义时钟;

  • USRCCLKTS,控制 USRCCLKO 的三态门;

  • GTS,全局三态门使能,要用户自定义 CCLK/DONE 等,此管脚必须置低。

其他信号详见官方手册说明,默认启动设置下,配置期间的时序图如下

在这里插入图片描述

测试

不配置 USRCCLKO

STARTUPE2 STARTUPE2_inst (
	.CFGCLK			(cfgclk),
	.CFGMCLK		(cfgmclk),
	.EOS			(eos)
);

  做如上配置,将上述三信号输出到 GPIO 以及 ILA。测试发现 cfgclk 仅在上电一瞬有输出,之后为常高(Master SPI 模式);CFGMCLK 为 ~65MHz 时钟,输出到 GPIO 的信号极其微弱,但 ILA 可以正常捕获,因此此时钟可用于 FPGA 内部逻辑,但不可直接输出(其驱动 I/O 的能力太弱了);EOS 信号上电后一瞬即由低变高,指示配置完成,因此可用作 FPGA 启动的判断依据。

  由于没有配置 USRCCLK,CCLK 仅在初始配置有信号。上述写法仅为获取 FPGA 内部时钟,以及判断 FPGA 是否配置完成,不涉及对 FLASH 的控制。

配置 USRCCLKO

  要进行 FLASH 的读写,就要对 CCLK 进行配置,如下

STARTUPE2 #(
	.PROG_USR		("FALSE"),
	.SIM_CCLK_FREQ	(0.0)
)
STARTUPE2_inst(
    .CFGCLK			(cfgclk),
    .CFGMCLK		(cfgmclk),		//~65MHz,可用于 FPGA 内部逻辑,驱动 IO 的能力太弱了
    .EOS			(eos),			//指示 FPGA 配置完成
	.PREQ			(),
	.CLK			(0),
	.GSR			(0),
	.GTS			(0),
	.KEYCLEARB		(1),
	.PACK			(1),
    .USRCCLKO		(usrcclk),		//FLASH SCK
    .USRCCLKTS		(0),			//设为0以启用USRCCLK
    .USRDONEO		(usrdone),		//控制DONE_0管脚
    .USRDONETS		(0)				//设为0以启用usrdone,不想用就设为1
);

在该配置下,测试发现,cfgclk 将被配置为 usrcclk,这个也就是输出到 CCLK_0 的信号,ILA 捕获、GPIO 输出均正常;cfgmclk 仍为 ~65MHz 时钟,GPIO 输出极弱。

  如果只是要控制 CCLK_0,可以只配置如下

STARTUPE2 STARTUPE2_inst(
	.GTS			(0),
    .USRCCLKO		(usrcclk),
    .USRCCLKTS		(0)
);

通过控制 usrcclk 即可控制 CCLK_0 管脚了,从而获得对 FLASH 的控制权。

  关于如何对 FLASH 芯片进行读写控制,将持续更新…

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

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

相关文章

队列、循环队列和双端队列

目录 1、队列 1.1 概念 2.2 队列的使用 2.3 队列模拟实现 2、循环队列 2.1 循环队列的认识 2.2 设计循环队列 3. 双端队列 (Deque) 1、队列 1.1 概念 队列 :只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列…

Python之Excel——复制一个sheet当做模板,生成多个sheet

目录 专栏导读背景思路1、加载模板2、项目文件2、完整版代码:3、视频演示:4、总结:👍 该系列文章专栏:[Python办公自动化专栏] 专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍&…

synchronized和死锁介绍

synchronized特性synchronized使用修饰普通方法(对象锁)修饰静态方法(类锁)修饰代码块(明确指定锁的对象)非锁竞争情况 死锁死锁是什么?死锁的必要条件循环等待场景程序死锁怎么排除死锁问题怎么解决 标准库的线程安全…

led驱动电源模块能进行自动化测试吗,具体测试方法,流程是?

LED电源模块测试的痛点主要包括以下几点: 测试效率低:传统的LED电源模块测试方法通常采用人工操作,测试效率低下,且易出错。 测试项目不全面:传统的测试方法可能无法覆盖所有的性能指标,导致一些潜在的问…

非洲“支付宝”PalmPay搭载OceanBase:成本降低80%

10 月 30 日,非洲支付公司PalmPay 的核心系统搭载国产自研数据库OceanBase,正式投入使用。PalmPay 也是 OceanBase 首个非洲商业用户。 作为一家非洲领先的金融科技公司,PalmPay 于 2019 年在尼日利亚推出电子钱包应用,其功能类似…

Verilog刷题[hdlbits] :Module cseladd

题目:Module cseladd One drawback of the ripple carry adder (See previous exercise) is that the delay for an adder to compute the carry out (from the carry-in, in the worst case) is fairly slow, and the second-stage adder cannot begin computing …

推荐PHP匿名在线聊天室系统源码

PHP匿名在线聊天室系统源码 自适应PCWAP端 可发语音、图片,修改数据库config\settings.php可拿去搭建专门跟客户聊天的网站。 演示地址:runruncode.com/php/19610.html

AD教程(五)光耦及二极管元件模型的创建

AD教程(五)光耦及二极管元件模型的创建 二极管元件的创建 放置管脚,设置管脚号和管脚名称(一般隐藏)绘制三角形 右键放置直线,选择放置多边形,操作逻辑,每次操作都会增加一边&…

【面试精选】00后卷王带你三天刷完软件测试面试八股文

前言 本人普通本科计算机专业,做测试也有3年的时间了,讲下我的经历,我刚毕业就进了一个小自研薪资还不错,有10.5k(个人觉得我很优秀),在里面呆了两年,积累了一些的经验和技能&#…

火爆全网,性能测试-Tomcat连接数分析/jprofiler定位接口相应时长(总结)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、Tomcat链接数分…

QT之多个界面相互切换 (stackedWidget控件)

TOC Chapter1 QT之多个界面相互切换 (stackedWidget控件) 原文链接 stackedWidget控件: 可以自由在多个widget切换,可以通过点击顶部菜单,显示不同界面,在实际开发中应用很广泛。 QStackedWidget是一个堆栈窗口控件&#xff0c…

tp6使用Spreadsheet报错:Class ‘PhpOffice\PhpSpreadsheet\Spreadsheet‘ not found

问题提示如下: 可能vendor下的 phpoffice是从别的项目拷贝过来的,所以咋都不行 解决办法是删掉vendor下的phpoffice,用composer重新下载 具体操作:1、在项目根目录下cmd执行下面这条命令 composer require phpoffice/phpspread…

【Linux】 shutdown 命令使用

shutdown 命令可以用来进行关机程序,并且在关机以前传送讯息给所有使用者正在执行的程序,shutdown 也可以用来重开机。使用权限:系统管理者。 语法 shutdown [选项] 时间 [警告信息] 命令选项及作用 执行令 man shutdown 执行命令结果 参…

矿山数字化react-native技术点记录

文章目录 1,宽度自适应表格实现2,新建作业手势动画3,tabBar中间midTabBar动态展示4,堆料图实现5,语音识别实现6,待办事项上下滑动切换页面7,装料卸料手势冲突8,首页初始化性能9&…

有活动啦 | 同立海源年终大促,满额赠礼!

秋天是倒放的春天 时间不停流转 四季马不停蹄 转眼间 距离2024年还有59天啦! 在这个最美的季节 同立海源,年终大促,携礼而来! 关于同立海源 北京同立海源生物科技有限公司,专注细胞和基因治疗(CGT&am…

都是80m²小户型,凭啥她家那么好看!福州中宅装饰,福州装修

杨桥新苑 本案来自杨桥新苑的住宅, 质朴弥漫在80㎡的小家, 自然淡雅的木纹,精炼的玄关隔断, 简约的设计里传达着中式的静谧风雅, 简练的空间加入中国元素, 让人从进门开始就沾染一丝艺术气息。 风格&a…

库尔勒春雨社会工作服务中心开展“三金西瓜霜‘爱牙公益行’善网公益资源对接

为进一步增强辖区居民口腔健康观念和口腔保健意识,加大口腔防治知识宣传教育,促进形成良好的口腔健康行为。10月29日,库尔勒市春雨社会工作服务中心联合库尔勒市天山街道未成年人保护站开展“三金西瓜霜‘爱牙公益行’─善网公益资源对接”公…

uniapp原生插件之安卓客户端之间wifi文件传输

插件介绍 安卓客户端之间文件传输,支持大文件传输,Wifi/热点文件传输,轻松传送1G文件 插件地址 安卓客户端之间wifi文件传输 - DCloud 插件市场 超级福利 uniapp 插件购买超级福利 使用文档 详细使用文档 示例文件 百度网盘链接&a…

精品Python的旅游数据可视化大屏平台-爬虫-景点门票

《[含文档PPT源码等]精品基于Python的旅游数据可视化平台-爬虫》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: 开发语言:python 使用框架:Flask 前端技术&…

突破性技术!开源多模态模型—MiniGPT-5

多模态生成一直是OpenAI、微软、百度等科技巨头的重要研究领域,但如何实现连贯的文本和相关图像是一个棘手的难题。 为了突破技术瓶颈,加州大学圣克鲁斯分校研发了MiniGPT-5模型,并提出了全新技术概念“Generative Vokens "&#xff0c…