『USB3.0Cypress』FPGA开发(3)GPIF II短包零包时序分析

news2025/3/17 1:15:05

在这里插入图片描述

文章目录

  • 1.时序参数
  • 2.FX3_PCLK
  • 3.短包和零包
    • 3.1短包时序
    • 3.2零包ZLP时序
  • 4.传送门

1.时序参数

AN65974文档中明确了操作GPIF II接口时的时序参数,上一篇文章中给出了读写时序图,本篇第二节给出ZLP写周期时序,这里说明相关的时序参数。应该注意,这是Cyusb3014芯片的时序要求,与外部控制器是什么无关。另外要注意,PCLK信号是由外部控制器传递给Cyusb3014的时钟,而不是它自身的。
在这里插入图片描述

2.FX3_PCLK

FX3_PCLK是由外部控制器产生的时钟,因此FPGA开发过程中有两个时钟信号和Cyusb3014相关,一个是驱动时钟,即连接到FX3_PCLK的时钟信号;还有一个是用户时钟,即FPGA工程里USB驱动模块的时钟。驱动时钟和用户时钟都应该是100MHz,但需要有180°的相位差。可以使用PLL锁相环生成,在锁相环管脚不够用的情况下也可以使用ODDR原语生成驱动时钟。这样做的目的就是为了满足cyusb3014对于时序参数的要求,既有充足的保持时间和建立时间,下图以slwr信号为例进行说明。
在这里插入图片描述
图中tap(0-1) 代表PCB走线延时,对于FX3_PCLK和SLWR几乎一样(信号等长设计)。Tap(1-2) 代表SLWR相对PCLK的延时(FPGA内部走线也需要时间,长短不同会造成到达IO的时间不一致s)。当tap(1-2)很小的时候,通向的FX3_PCLK可能无法满足Cyusb3014对于SLWR信号保持时间要求,而反相的FX3_PCLK,对保持时间和建立时间都有足够大的裕量,满足时序要求

3.短包和零包

前面已经详细的叙述了读与写的操作时序,但是仅有这些描述还不足以正确完成数据传输。考虑一个问题。AN65974中提到“标志与特定线程或当前寻址的线程相关联,用于表示映射到该线程的套接字状态”。以下行数据通道为例,当PIB还未通过自动DMA接收到数据的时候FLAGC为0。初始状态下,FLAGC为0,当上位机启动数据传输时,数据经过端点,UIB套接字到达缓冲区,只有数据从缓冲区达到PIB套接字,FLAGC才由0变成1标识缓冲区未空。而数据何时缓冲区到达PIB套接字是有条件的,即数据量刚好为一个缓冲区的大小,或,小于一个缓冲区但要执行执行一次COMMIT操作。『USB3.0Cypress』Cyusb3014开发(5)GPIF II接口中介绍了COMMIT的作用是缓冲区将被传输到管道的另一端。通常通过该操作,可强制缓冲区/数据包结束。当上位机发送的数据等于16KB时,正常发送数据即可到达PIB套接字,当数据小于16KB时应通过“短包或者零包的方式”发送,这种操作在介绍上位机的时候会讲(其实是通过特定的方式发送,只要能让小于缓冲区大小的数据到达PIB即可,这里把这种方式称作短包/零包)。那么也只有数据到达PIB,相应的FLAG信号才会变化,才能确保FPGA能够正确的读取数据。
在这里插入图片描述
本节讲的是上行数据通道,也就是对于FPGA来说,如何让小于缓冲区大小的数据从PIB到达缓冲区并到达UIB,这样做是为了上位机能够正确的读取数据。下图展示了AN65974的GPIF里面的状态机,可以清晰的看到只有在ZLP和SHORT_PKT中执行了COMMIT操作。因此这里说的零包和短包本质上是用不同组合的控制信号进入ZLP或SHORT_PKT状态执行COMMIT操作,那么短包和零包的应用场景便是完成小于缓冲区大小的数据的发送。依照现有结论向GPIF中写1024B数据,使用零包或者短包上位机都可以正确接收数据。3.1节和3.2节将分别测试,结果如何?拭目以待。

3.1短包时序

FPGA可控制仅通过激活PKTEND#,并且激活 SLWR#来传输一个短包(short package)。当然在此之前应该FIFO地址稳定且SLCS#激活。向GPIF II中写1024B数据,如图所示,在slwr拉高前的最后一个周期,将pktend信号拉低一个周期,便是以短数据包的形式写入数据,可以在control center中看到正确的数据。观察到在pktend信号置位三个周期后flaga信号会拉低一段时间,注意此时只向16KB的缓冲区写了1KB数据,按常规理解此时flaga不会为低电平,咨询赛普拉斯官方工程师,说是正常现象,可能是切换缓冲区了。
在这里插入图片描述

3.2零包ZLP时序

在这里插入图片描述

FPGA可控制仅通过激活PKTEND#,而没有激活 SLWR#来传输一个零长度数据包(ZLP)。但必须驱动 SLCS#和地址。向GPIF II中写1024B数据,在slwr拉高以后,再将pktend信号拉低一个周期,按照对AN65974的理解,这里应该为发送1024B之后再发送一个零数据包(ZLP)来使缓冲区commit,但按照如下图所示在写完1024B数据之后紧接着发送一个零包,使用control center接收数据,会出现997的错误。
在这里插入图片描述
对于此问题通过向官方社区询问已经得到解答,我们使用的是sync slave fifo这个状态机,在从WRITE到ZLP时需要经过IDLE状态,因此如果写结束后没有延迟直接拉低pktend信号不满足(PKEND&SLWR)|SLCS,状态机跳回到IDLE的条件因此会出现错误,所以这时需要创造使状态机跳回到IDLE的条件才能发送零长度数据包。这里采用将pktend延迟一个clk再拉低,状态机即可进入IDLE状态,从而后续再进入ZLP状态发送零长度数据包。正确的处理如下图所示。
在这里插入图片描述

4.传送门

  • 我的主页
  • USB3.0-Cypress通信方案专栏汇总导航
  • 下一篇:FPGA开发(4)上下位机读写测试
END

🔈文章原创,首发于CSDN论坛。
🔈欢迎点赞❤❤收藏⭐⭐打赏💴💴!
🔈欢迎评论区或私信指出错误❌,提出宝贵意见或疑问❓。


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

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

相关文章

校园二手书交易|基于SprinBoot+vue的校园二手书交易管理系统(源码+数据库+文档)

校园二手书交易管理系统 目录 基于SprinBootvue的校园二手书交易管理系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3 卖家用户功能模块 4 用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八…

WPF之容器标签之Canvas布局标签

Canvas: 定义一个区域&#xff0c;可在其中使用相对于 Canvas 区域的坐标以显式方式来定位子元素。 实例 可以在子标签使用Canvas属性设置定位 <Canvas Width"500" Height"300"><StackPanel Width"100" Height"100"Backgro…

基于51单片机的火灾检测设计(仿真+程序+原理图+论文报告+讲解视频)

基于51单片机的火灾检测设计 基于51单片机的火灾检测设计&#xff08;仿真程序原理图论文报告&#xff09;功能要求仿真图&#xff1a;原理图&#xff1a;源程序&#xff1a;论文/报告&#xff1a;资料清单&#xff1a; 基于51单片机的火灾检测设计&#xff08;仿真程序原理图论…

数据库操作(事务)

描述&#xff1a;事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或者撤销操作请求&#xff0c;这些操作要么同时成功&#xff0c;要么同时失败 一。事务的操作&#xff1a; 开启事务&#xff1a;star…

Linux入门攻坚——23、DNS和BIND基础入门2

前一篇实践了正向解析服务器的配置使用&#xff0c;如何配置反向解析呢&#xff1f; 反向区域&#xff1a; 区域名称&#xff1a;网络地址反写.in-addr.arpa. 192.168.138. --> 138.168.192.in-addr.arpa. (1)定义区域&#xff1a; zone "ZONE_NAME" I…

Unity实现TableView

基于Scrollview封装的TableView&#xff0c;实现对视野外的Cell回收利用&#xff0c;减少创建Cell的开销。 核心逻辑如下&#xff1a; /***************************************动态使用cell核心逻辑开始 **************************************///计算所有cell的坐标信息 …

《python编程从入门到实践》day38

# 昨日知识点回顾 定义、迁移模型Entry # 今日知识点学习 18.2.7 Django shell 每次修改模型后&#xff0c;看到重启后的效果需要重启shell&#xff0c;退出shell会话Windows系统按ctrlZ或者输入exit() 18.3 创建页面&#xff1a;学习笔记主页 创建页面三阶段&#xf…

【Windows系统】解决Intel 6代CPU安装win7系统过程中无法操作键盘鼠标的问题

问题 微软表示&#xff0c;从 2016 年 7 月 17 日起&#xff0c;新的 Intel、AMD 和Qualcomm 处理器将仅支持 Windows 10&#xff0c;不再支持 Windows 7 和 8.1。因此&#xff0c;Intel 6代以后的CPU因为没有USB驱动无法完成win7系统的安装。 下文核心思想是通过老毛桃PE系统…

AI PC 的曙光:微软大胆出击与苹果竞争

AI PC 的曙光&#xff1a;微软大胆出击与苹果竞争 AI PC 的曙光&#xff1a;微软大胆出击与苹果竞争 概述 微软已正式进入 AI PC 时代&#xff0c;并且毫不避讳地直接向苹果的 MacBook 发起攻击。随着代号为“Copilot”的笔记本电脑的推出&#xff0c;微软准备彻底改变我们与…

Android 实现竖排文本(垂直方向显示)

Android 实现竖排文本-垂直方向显示 前言效果图代码实现方式一 Custom View1. 自定义视图 VerticalTextView2. 在xml布局文件中使用3. 设置文本内容 方式二 使用 TextView 的 rotation属性方式三 使用带有跨距文本的TextView1. 自定义视图 VerticalTextView2. 在xml布局文件中使…

ML307R OpenCPU UART使用

一、串口使用流程图 二、串口相关函数介绍 三、实现串口收发 一、串口使用流程图 OneMO ML307R模组提供了2路UART给开发者用于通讯开发&#xff0c;以及1路DBG UART用于log的打印。UART Demo示例可以在SDK&#xff1a;examples\uart\src\cm_demo_uart.c中查看。 串口使用流…

视频号小店的保证金是多少钱?2024最新收费标准,一篇了解!

哈喽~我是电商月月 现实社会&#xff0c;干什么都需要交钱&#xff0c;就连上班&#xff0c;路费也得掏钱 想要入驻视频号小店&#xff0c;在视频号里卖货赚钱&#xff0c;就要缴纳类目保证金 那到底要缴多少钱呢&#xff1f; 今天&#xff0c;月月就把最新的收费标准分享给…

Android Low Storage机制之DeviceStorageMonitorService

一、Android 版本 Android 13 二、low storage简介(DeviceStorageMonitorService) 设备存储监视器服务是一个模块&#xff0c;主要用来&#xff1a; 1.监视设备存储&#xff08;“/ data”&#xff09;。 2.每60秒扫描一次免费存储空间(谷歌默认值) 3.当设备的存储空间不足…

Ollama:一个在本地部署、运行大型语言模型的工具

Ollama&#xff1a;一个在本地部署、运行大型语言模型的工具 Ollama部署、运行大型语言模型概述安装配置Ollama命令模型库使用示例自定义模型从GGUF导入自定义提示从PyTorch或Safetensors导入 开启服务REST API卸载Ollama One-API概述One-API管理本地模型 Open WebUI概述Docker…

VUE3 学习笔记(十)查看vue版本

命令&#xff1a; npm list vue(空) (在项目的根目录下执行以下命令即可查看项目所使用的vue版本) npm list vue version(空) npm info vue (全局查看vue版本号&#xff0c;详细) npm list vue -g(全局查看vue版本号&#xff0c;简单) npm view vue version(查看项目依赖的vue…

Jeecg | 如何解决 ERR Client sent AUTH, but no password is set 问题

最近在尝试Jeecg低代码开发&#xff0c;但是碰到了超级多的问题&#xff0c;不过总归是成功运行起来了。 下面说说碰到的最后一个配置问题&#xff1a;连接redis失败 Error starting ApplicationContext. To display the conditions report re-run your application with deb…

解决鼠标滚动时element-ui下拉框错位的问题

问题描述&#xff1a;elementUi的el-select下拉选择框,打开之后,直到失去焦点才会自动关闭。 在有滚动条的弹窗中使用时就会出现打开下拉框,滚动弹窗,el-select下拉框会超出弹窗范围的问题. 解决方案&#xff1a; 1、先在util文件夹下创建个hideSelect.js文件&#xff0c;代码…

内网穿透--Nps-自定义-上线

免责声明:本文仅做技术交流与学习... 目录 Nps项目: 一图通解: 1-下载nps/npc 2-服务端启动 访问web网页: 添加客户端&#xff0c;生成密匙. 3-kali客户端连接服务端 4-添加协议隧道. 5-kali生成后门&#xff1a; 6-kali创建监听: Nps项目: https://github.com/ehang…

算法刷题笔记 高精度乘法(C++实现)

文章目录 题目描述解题思路解题代码 题目描述 给定两个非负整数&#xff08;不含前导0&#xff09;A和B&#xff0c;请你计算 AB的值。 输入格式 共两行&#xff0c;第一行包含整数 A&#xff0c;第二行包含整数 B。 输出格式 共一行&#xff0c;包含AB的值。 数据范围 …