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

在这里插入图片描述

文章目录

  • 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.mzph.cn/diannao/15743.shtml

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

相关文章

initial begin end 和always语句区别

initial语句:只执行一次always语句:不断重复执行,直到仿真结束, initial begin 语句1; ... 语句n; end always (posedge clk or negedge clear) begin if(!clear) qout 0; //异步清零 else qout 1; end…

用户态下屏蔽全局消息钩子 —— ClientLoadLibrary 指针覆盖

目录 前言 一、研究 SetWindowsHookEx 的机制 二、概念验证 三、运行效果分析 四、总结与展望 参考文献 原文出处链接:[https://blog.csdn.net/qq_59075481/article/details/139206017] 前言 SetWindowsHookEx 函数帮助其他人员注入模块到我们的进程&#x…

【代码随想录训练营】【Day 27 and 28】【回溯1-2】| Leetcode 77, 216, 17

【代码随想录训练营】【Day 27 and 28】【回溯1-2】| Leetcode 77, 216, 17 需强化知识点 组合问题:感受遍历的横向和纵向 题目 77. 组合 注意path要深拷贝 class Solution:def combine(self, n: int, k: int) -> List[List[int]]:result []def backtrac…

C++中的模板类的定义与使用

文章目录 前言模板类的定义与使用方式模板类的总结 前言 在C中,模板类是一种通用的类模板,允许在类定义和成员函数实现时使用不具体指定的数据类型或参数。下面是模板类的定义与使用方式,并对其进行总结: 模板类的定义与使用方式…

Kubernetes(k8s) v1.30.1 本地集群部署 安装metallb 支持LoadBalancer 生产环境 推荐 BGP模式部署

1 metallb 安装参考:Kubernetes(k8s) v1.30.1 本地集群部署 默认不支持LoadBalancer metallb来解决-CSDN博客 2 删除 Layer 2 模式 配置 kubectl delete -f IPAddressPool.yaml kubectl delete -f L2Advertisement.yaml kubectl delete -f discuz-srv.yaml 3 配置 k8s Metal…

nacos-opera(k8s)安装问题解决

整理一些关于k8s部署nacos出现的一些恶心的问题 网上说其他说的更改数据库连接都未解决。 在用nacos-opera想安装高可用nacos时连接mysql数据库报错: 报错具体项: No DataSource set 具体就是说没找到数据源。 第一个 检查一下nacos连接数据库配置 : 第二个 检查一下数据库…

[笔试训练](三十三)097:跳台台阶扩展问题098:包含不超过两种字符的最长子串099:字符串的排列

目录 097:跳台台阶扩展问题 098:包含不超过两种字符的最长子串 099:字符串的排列 097:跳台台阶扩展问题 题目链接:跳台阶扩展问题_牛客题霸_牛客网 (nowcoder.com) 题目: 题解: 规律题: 1.跳上n级台阶的跳法等于前面1~(n-1)级台阶跳法的总和1。 2.跳…

开发中遇到Electron自定义窗口的问题

开发中遇到Electron自定义窗口的问题 使用VUE3 Electron 开发一个音乐软件,自定义导航栏的放大、缩小和关闭。 其中使用ipcRenderer进行联系Electron,进行放大、缩小和关闭操作。 遇到问题 遇到__dirname is not defined in ES module scope //在V…

一、机器学习概述

1.课程目的 学习机器学习算法、提高算法性能的技巧 2.算法分类 有监督学习supervised learning、无监督学习unsupervised learning (1).有监督学习 在这种学习方式中,算法需要一个带有标签的训练数据集,这些标签通常是每个样本的真实输出或类别。 在有…

[C][指针]详细讲解

目录 0.铺垫1.指针是什么?2.指针变量3.指针和指针类型4.指针类型的意义5.野指针1.野指针成因2.如何规避野指针6.指针运算 6.指针和数组7.二级指针(n级指针)8.指针数组9.数组指针10.&数组名VS数组名11.函数指针 12.函数指针数组13.回调函数 0.铺垫 在…

NDIS小端口驱动(九)

PCIe设备难免会遇到一些重置设备的请求,例如重置总线的时候,但是由于NIC网卡的多样性,重置设备确实也有许多要注意的地方,另外还有一些包含WDM的NDIS驱动 微型端口驱动程序硬件重置 微型端口驱动程序必须向 NdisMRegisterMinipo…

C++技能进阶指南——多态语法剖析

前言:多态是面向对象的三大特性之一。顾名思义, 多态就是多种状态。 那么是什么的多种状态呢? 这里的可能有很多。比如我们去买火车票, 有普通票, 学生票; 又比如我们去旅游, 有儿童票&#xff…

视觉与数据的和谐:数字孪生技术在UI设计中的艺术

视觉与数据的和谐:数字孪生技术在UI设计中的艺术 引言 在UI设计的世界里,视觉艺术与数据科学似乎相隔甚远,然而随着数字孪生技术的出现,这两者之间的界限变得模糊。数字孪生技术不仅是一种技术革新,更是一种艺术形式…

LabviewCarla仿真平台搭建一:平台设计及仿真视频可视化实现

文章目录 背景一、平台设计二、视频显示模块实现1、视频模块实现框架2、python-camera数据生成3、labview-camera数据可视化 三、效果展示 背景 在使用carla的时候,有平台的话可以提高效率,因此想结合labview和carla设计一个仿真平台-labcar。其实carla…

【DASBOOK】Mark loves cat

文章目录 一、工具下载二、Mark loves cat解题感悟 一、工具下载 克隆dirsearch仓库: git clone https://github.com/maurosoria/dirsearch.git下载 githack工具 git clone https://github.com/lijiejie/GitHack.git二、Mark loves cat 用dirsearch扫描目录&…

talib 安装

这里写自定义目录标题 talib 安装出错 talib 安装出错 https://github.com/cgohlke/talib-build/releases 这里找到轮子 直接装。

DatePicker日期选择框(antd-design组件库)简单使用

1.DatePicker日期选择框 输入或选择日期的控件。 2.何时使用 当用户需要输入一个日期,可以点击标准输入框,弹出日期面板进行选择。 组件代码来自: 日期选择框 DatePicker - Ant Design 3.本地验证前的准备 参考文章【react项目antd组件-demo:…

算法提高之你能回答这些问题吗

算法提高之你能回答这些问题吗 核心思想&#xff1a;线段树 用sum,lmax,rmax,tmax分别存线段长度,最大前缀,最大后缀,最大子段和 #include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N 500010;int n,m;int w[N];s…

简单3步,ERP、OA、CRM等客户端,安全远程访问服务端

如今&#xff0c;企业员工出差远程办公和分支机构的协同工作变得越来越普遍。然而&#xff0c;如何确保在不同地点的员工都能安全、便捷地访问公司内网的C/S&#xff08;Client/Server&#xff09;架构办公系统&#xff0c;是一个亟待解决的问题。 贝锐花生壳内网穿透服务提供…

zdppy_mcrud操作MySQL数据库教程

01 创建数据库连接 .env配置文件 ZDPPY_MCRUD_HOST192.168.234.130 ZDPPY_MCRUD_PORT3306 ZDPPY_MCRUD_USERNAMEroot ZDPPY_MCRUD_PASSWORDzhangdapeng520 ZDPPY_MCRUD_DATABASEzdppy_mcrud_demo连接到MySQL数据库&#xff1a; import env import mcrudenv.load(".env&…