AXI Quad SPI IP核中的STARTUPEn原语参数

启动STARTUPEn Primitive (原语)参数在 FPGA的主 SPI模式下非常有用。当你启用这个参数时,对于 7 系列设备,STARTUPE2 原语会被包含在设计中;而对于 UltraScale™ 设备,则是 STARTUPE3 原语。这些原语在 FPGA 配置后成为IP核的一部分。

1 启用STARTUPEn 原语参数

STARTUPEn(如STARTUPE2STARTUPE3)原语在FPGA设计中起着关键的作用,特别是在与FPGA的SPI配置接口相关时。

FPGA内部的一个输出端口SCK_O(即SPI的时钟输出)会与STARTUPEn原语连接。这个连接允许FPGA在配置过程中与外部的SPI从设备(通常是配置存储器)进行通信。在FPGA配置之前,STARTUPEn也可以用于预配置过程,其中外部SPI从设备会被预先配置。这个过程确保了FPGA在上电时可以立即从已知的状态开始工作。

在FPGA配置完成后,SCK_O端口会驱动STARTUPEn原语的USRCCLK0端口。这个信号在FPGA IP核外部是不可见的,因为它是内部连接的一部分。

实例化STARTUPEn原语会影响ext_spi_clk(外部SPI时钟)的最大频率。这是因为STARTUPEn原语的性能会限制SPI接口可以支持的最大时钟速率。如下图所示:

注:对于xip和标准模式,ext_spi_clk可能被限制为60 MHz。

       UltraScale™设备的频率数字预计与7系列相似。

      上表中提到的频率特定于传统的SPI x 1模式。如果我们改变模式和其他设置,它们会发生变         化。 

2 使用双通道四通道模式

启用Dual Quad模式这个参数仅在UltraScale™及未来系列的设备中,在特定的IP核配置下才有效。

  1. Master mode:IP核工作在主模式下,即它是SPI通信的发起者和控制者。

  2. STARTUP enabled

  3. SPI mode is QUAD

  4. Number of slaves is 2:IP核配置为与两个SPI从设备通信。

当“Enable Dual Quad Mode”参数被启用时,IP核将拥有两个SPI接口。这意味着它可以同时与两个flash存储器或其他SPI从设备通信,如图3-2所示。这提高了数据传输的效率和灵活性,允许IP核在单个时钟周期内与两个从设备交换数据。

在SPI通信中,当涉及到多个从设备时,数据流量的控制是通过从设备选择寄存器(SPISSR)来控制实现的。

3 不启用STARTUPEn 原语参数

SCK_O 和 IO1_I 端口是IP核的一部分,但由于它们不是IP核内部实例化的原语,这些端口作为IP核的外部端口存在,并被放置在用户配置位置的输入输出块(IOB, Input/Output Block)中。

(1) 在传统和增强非XIP模式下

无论是否选择了Enable Performance Mode,都设置该模式。这时,不选择Enable XIP Mode。AXI Quad SPI IP核支持Winbond、Micron、Spansion和Macronix存储器。当使用AXI Quad SPI IP核测试不同的存储器时,确实需要检查不同存储器所需的命令是否相同。如果不同存储器的命令、地址和数据行为都相同,那么可以选择其中一个设备作为基准存储器来测试IP核。

IP核通过内部逻辑了解目标内存的命令及其预期行为。当IP核尝试执行一个不被存储器设备支持的命令时,它会设置一个命令错误标志。一旦命令错误被设置,IP核将不会执行与该命令相关的SPI事务,并生成一个命令错误中断。这允许系统识别并响应不支持的命令,从而避免潜在的错误或数据损坏。

在命令阶段之后,如果包含地址相位,则根据地址模式位定义的模式,在SPI事务中传输下一个DTR(数据/地址/寄存器传输)内容。地址相位通常用于指定存储器中要访问的具体位置(例如,读取或写入的起始地址)。

如果特定命令包含数据相位,则根据读或写操作以及数据模式位设置的模式来执行数据相位。数据相位涉及数据的实际传输,无论是从存储器读取数据还是向存储器写入数据。

dummy bytes(虚拟字节)是在与某些存储器通信时,特别是在执行某些指令时,为了符合特定时序要求而插入的额外字节。这些虚拟字节并不包含实际的数据或地址信息,但它们对于确保命令的正确执行至关重要。

在SPI通信中,DTR(Data/Address/Register Transfer)是数据传输的基本单元,它可能包含地址、数据、控制信号或其他信息。当执行某些指令时,除了需要传输的实际数据字节数外,还需要在DTR中包含一定数量的dummy bytes。

对于读取命令,在传输地址位之后,IP核立即切换到输入模式,并开始在DRR中存储数据。因此,请注意有多少虚拟字节在DRR中被忽略。例如,对于Winbond存储器中的快速读取双输出命令,DTR应填充一个命令字节加三个地址字节加上dummy cycle(虚拟周期的两个虚拟字节加上要从存储器中读取的虚拟字节数。命令和地址在标准SPI模式下传输,之后IP核切换到输入模式并开始存储数据。数据在IO0_I和IO_1线上传输,并存储在SPI DRR中,包括两个虚拟循环加上有效数据。因此,在读取SPI DRR时,忽略掉SPI DRR的前6个字节。FIFO中可用的有效数据从第七个字节开始。这也适用到其他双读取或四读取命令。

对于每个新事务,必须清除SPI DTR FIFO。SPI DTR中的第一个条目始终被视为命令条目,它与所选SPI模式的相应存储器的内置逻辑进行交叉检查。

(2)在XIP模式下

当“Enable Performance Mode”和“Enable XIP Mode”都被选中时,IP核将支持标准模式、双模式和四模式,具体设置和配置如下:

  • 标准模式(Standard mode):设置“Mode”为“Standard”,“Slave Device”设置为Winbond、Micron、Macronix或Spansion等支持的存储器设备。
  • 双通道模式(Dual mode):设置“Mode”为“Dual”,“Slave Device”同样需要设置为Winbond、Micron、Macronix或Spansion等支持的存储器设备。在双模式下,SPI通信将使用两条数据线(如IO0和IO1)同时进行数据传输。
  • 四通道模式(Quad mode):设置“Mode”为“Quad”,“Slave Device”也需要是Winbond、Micron、Macronix或Spansion等支持四模式的存储器设备。在四模式下,SPI通信将使用四条数据线(如IO0、IO1、IO2和IO3)同时进行数据传输。

此模式的假设为:

Winbond存储器
在每次上电复位状态后,会执行一个高性能模式命令,以确保Winbond存储器被配置在高性能模式下。随后,可能会执行DIOFR(0xBBh)或QIOFR(0xEBh)这样的命令来进一步操作该存储器。
当设置Quad模式时,对于Winbond存储器,确实需要预先通过向状态寄存器写入来设置QE(Quad Enable)位为1。
如果IP核不负责向状态寄存器写入任何内容来配置Quad模式,那么这项工作就需要由外部系统或初始化代码来完成。在XIP模式下,预配置存储器的责任在于系统设计者或初始化代码。

当IP核在执行DIOFR或QIOFR命令之前被配置为双模式或四模式时,IP核会在上电复位(POR)后在AXI4接口接收事务之前向存储器写入高性能模式(HPM)命令。这个HPM命令需要一个命令周期和三个dummySPI周期来完成。这个HPM命令在存储器中的写入仅在系统上电时执行一次。当HPM命令成功写入后,Winbond存储器就被配置为高性能模式(HPM — 0xA3h),并允许DIOFR或QIOFR命令在相应的模式下进行操作。

Micron Memory

在Micron存储器中,无论是易失性配置寄存器还是非易失性配置寄存器,其关于dummy周期的字段(VCR[7:4]和NVCR[15:12])在出厂时都被设置为默认值,即1111。IP核特征是基于这些dummy周期寄存器的默认设置(即1111)来设计的。这意味着,当这些寄存器保持默认设置时,IP核可以预期按照特定的行为模式来工作。

建议:不要更改默认的易失性配置寄存器(VCR)和非易失性配置寄存器(NVCR)配置。

在每个新事务开始时,IP核发送相应的命令、地址和所需要的dummy周期,然后接收数据。

Spansion 存储器

当IP核不直接写入状态寄存器,并假定在执行XIP模式之前已经完成这一配置时,这通常意味着系统设计师或开发者需要在系统启动或初始化阶段进行必要的配置。

当设置四通道模式时,Spansion内存必须预先通过写入配置寄存器来设置QUAD位为1。这一步骤是为了确保内存能够按照四通道模式进行工作,以提供更高的数据传输速率和吞吐量。

Macronix 存储器

在Macronix存储器中,配置寄存器负责处理虚拟周期的信息。虚拟周期的配置因配置寄存器中的bit6和bit7(DC0和DC1)的设置而异。默认情况下,bit6和bit7的值为00。

根据Macronix的数据手册,DC0和DC1的不同设置会对应不同的虚拟周期数量。

推荐:不要改变默认的配置寄存器配置。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于NodeJs 的Vue安装和创建项目

基于NodeJs 的Vue安装和创建项目 一、Node.js的下载与安装 下载地址: https://nodejs.org/en/download/prebuilt-installer 安装完之后,启动 cmd命令行,验证 Node.js 是否安装成功 二、配置npm的全局模块的存放路径以及缓存的路径 注&…

大模型应用工程化过程

近年来,以人工智能为代表的新一代信息技术加速应用,特 别是基于大模型、大数据、大算力的 ChatGPT 的发布,标志着人 工智能技术取得里程碑式突破,推动科技创新进入新阶段。随着 大模型技术的迅猛发展和场景价值的不断涌现&#xf…

HTML-CSS练习例子

HTML CSS 练习 https://icodethis.com 作为前端练习生。不敲代码只看,入门是很慢的,所以直接实战是学习前端最快的途径之一。 这个网站练习HTML CSS的,可以打开了解一下,可以每天打卡,例子简单,循序渐进&…

每日5题Day19 - LeetCode 91 - 95

每一步向前都是向自己的梦想更近一步,坚持不懈,勇往直前! 第一题:91. 解码方法 - 力扣(LeetCode) class Solution {public int numDecodings(String s) {int n s.length();//注意我们dp的范围是n1int[] d…

AtCoder Beginner Contest 356 G. Freestyle(凸包+二分)

题目 思路来源 quality代码 题解 对n个泳姿点(ai,bi)建凸包,实际上是一个上凸壳, 对于询问(ci,di)来说,抽象画一下这个图,箭头方向表示询问向量 按x轴排增序,并且使得后面的y不小于前面的y,因为总可以多…

ThreadCache线程缓存

一.ThreadCache整体结构 1.基本结构 定长内存池利用一个自由链表管理释放回来的固定大小的内存obj。 ThreadCache需要支持申请和释放不同大小的内存块,因此需要多个自由链表来管理释放回来的内存块.即ThreadCache实际上一个哈希桶结构,每个桶中存放的都…

LLM的基础模型8:深入注意力机制

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技(Mamba,xLSTM,KAN)则提…

SpringBoot之静态资源

默认静态资源路径 classpath:/META-INF/resources/classpath:/resources/classpath:/static/classpath:/public/ 静态资源路径下的文件,可以通过根目录访问 resources 文件夹的文件如下图所示: 启动项目,分别访问以下路径: ht…

STM32 proteus + STM32Cubemx仿真教程(第一课LED教程)

文章目录 前言一、STM32点亮LED灯的原理1.1GPIO是什么1.2点亮LED灯的原理 二、STM32Cubemx创建工程三、proteus仿真电路图四、程序代码编写1.LED灯操作函数介绍HAL_GPIO_WritePin函数原型参数说明示例代码 HAL_GPIO_TogglePin函数原型参数说明示例代码 2.代码编写3.烧写程序 总…

微服务开发与实战Day04 - 网关路由和配置

一、网关路由 网关&#xff1a;就是网络的关口&#xff0c;负责请求的路由、转发、身份校验。 在SpringCloud中网关的实现包括两种&#xff1a; 1. 快速入门 Spring Cloud Gateway 步骤&#xff1a; ①新建hm-gateway模块 ②引入依赖pom.xml(hm-gateway) <?xml version…

在VSCode中安装python

引言 Python 是一种广泛使用的高级编程语言&#xff0c;因其易学、易用、强大而受到欢迎。它由 Guido van Rossum 于 1991 年首次发布&#xff0c;并以简洁的语法和丰富的库生态系统而著称。 以下是 Python 的一些关键特点和优势&#xff1a; 关键特点 易于学习和使用&#x…

vue28:组件化开发和根组件

简单写个点击事件 <template> <div class"app"><div class"box" click"fn"></div></div> </template><script> export default {//导出当前组件的配置项//里面可以提供 data methods computed wat…

解决PyQt5中柱状图上显示的数值为带e的科学计数法

PyQt5生成柱状图的代码参考&#xff1a;PyQt5 QtChart-柱状图 参照上述文章&#xff0c;生成柱状图后&#xff0c;数值较大或较小情况下会导致柱状图上显示数值为带e的科学计数法&#xff0c;这样会影响数值的识别&#xff1a; 经过分析QBarSet方法得到解决方法&#xff1a;需…

基于stm32最小版的超声波测距模块

目录 一、模块准备 二、HC-SR04模块原理解释 三、程序完整代码 四、烧录结果 总结 一、模块准备 STM32F103C8T6 HC-SR04 ST-Link&#xff08;其他烧录器也可以&#xff09; 0.96寸OLED屏幕&#xff08;非必须&#xff0c;仅供显示测距结果&#xff0c;可以使用串口助手代替…

【Git】详解本地仓库的创建、配置以及工作区、暂存区、版本库的认识

一、创建本地仓库 需要将本地仓库放在一个目录下&#xff0c;所以在创建本地仓库之前&#xff0c;应该先创建一个目录&#xff0c;再进入这个目录&#xff1a; 在这个目录中创建一个本地仓库&#xff1a; git init 创建完成后&#xff0c;我们就会发现当前目录下多了一个.git…

【Redis学习笔记04】Jedis客户端(上)

Java客户端操作Redis Java生态丰富&#xff0c;自定义的客户端非常多&#xff0c;常见的有Jedis、Lettuce、以及Spring整合后的RedisTemplate&#xff0c;但是对于初学者而言&#xff0c;从Jedis开始入门学习是非常容易上手的&#xff0c;因为Jedis中的API与原生Redis命令高度…

DT-MIL:用于组织病理学图像的MIL方法

学习信息表示对于组织病理学图像的分类和预测任务至关重要。由于图像大小巨大&#xff0c;通常使用多实例学习&#xff08;MIL&#xff09;方案来处理整张组织病理学图像&#xff08;whole-slide histopathological image&#xff09;。然而&#xff0c;MIL的弱监督性质导致了学…

阿里云平台产品创建过程 网页端界面 手机APP

云平台产品创建 登录后选择 产品-物联网-物联网平台&#xff1a; 进入后选择 公共示例-立即试用&#xff1a; 选择 公共示例&#xff1a; 选择 设备管理-产品-创建产品&#xff1a; 产品名称: 传感器 所属品类&#xff1a;自定义品类 节点类型&#xff1a;直连设备 联网方式…

【JsDoc】JsDoc用法 | 巧妙用法

type type {other} other 接收表达式或字符 1、数组代码提示 1、效果图 1、码 /*** type {Array.<play|paush|next>} */ let music []2、字符串提示 2、效果图 2、码 /*** type {a|b|c}*/ let str