Cyusb3014芯片原理之三GPIF原理

请参照GPIFII_Designer_User_Guide、AN65974第9节、AN87216以及(八)Cypress的技术支持之开发环境与应用架构学习关于GPIF II Designer的使用,了解GPIF原理。本篇大多数截取自官方文档,夹杂了部分自己的理解,应该会有帮助。

1.简介

FX3具有一个可配置的并行通用可编程接口(GPIF II),即赛普拉斯第二代通用可编程接口。GPIF II可连接至一个外部处理器(如ASIC或FPGA),是一个可编程状态机,使用它可以灵活地实现一个行业标准或专用接口。它可同多种接口(如异步SRAM、异步和同步地址数据复用式接口)建立无缝连接。同步从设备FIFO接口是GPIF II的常用领域。在使用该接口的应用中,连接至FX3的外部器件将访问FX3 FIFO,实现对该接口进行数据读写。并非通过从设备FIFO接口执行直接寄存器访问。
GPIF II 具有以下特性:可用作主设备或从设备;提供 256 种固件可编程状态;支持 8 位、16 位和 32 位并行数据总线;接口频率可高达 100 MHz;使用根据输入信号进行转换 GPIF II 状态,并且该 GPIF II 状态将驱动控制输出信号。状态机的行为由一个描述符定义,为满足所需接口规范而设计。本质上,GPIF II 描述符是可编程寄存器的集合。在 FX3 寄存器空间中,8 kB的内存空间专门作为 GPIF II 波形存储器,用于存储 GPIF II 描述符。GPIF II 状态转换基于输入信号发生,控制输出信号由 GPIF II 状态驱动。状态机的行为由描述符定义,该描述符旨在满足所需的接口规范。
GPIF II Designer是一款图形软件,允许设计人员配置EZ-USB FX3 USB 3.0设备控制器的GPIF II接口。该工具允许用户从赛普拉斯提供的五个接口中选择一个,或者从头开始选择创建自己的GPIF II接口。赛普拉斯提供了行业标准接口,如异步和同步从设备FIFO,以及异步和同步SRAM。已经在系统中拥有这些预定义接口之一的设计人员可以简单地选择所选择的接口,从一组标准参数中选择,如总线宽度(x8,16,x32)字节序,时钟设置,然后编译接口。该工具为需要定制界面的用户提供了简化的三步GPIF界面开发流程。用户可以先选择其引脚配置和标准参数。其次,他们可以使用可配置的动作设计虚拟状态机。最后,用户可以查看输出时序以验证它是否与预期时序匹配。完成此三步过程后,可以编译界面并与FX3固件集成。
以上三段截取自cypress的文档,作为一个入门的人,该如何理解这些话呢?

2.GPIF系统结构


如图所示为GPIF的架构示意图,DMA与P-Port之间有专属数据通道,处于核心地位是GPIF状态机引擎,它可以接收触发信号,也可以发出操作信号。GPIF硬件还支持生成一组DMA状态标志。这组标志用来指示缓冲区的就绪状态,或基于一个用户编程的阈值。外部处理器可以使用该组标志进行流控制。使用这些标志可确保传输中数据不被丢失。一组计数器和比较器模块与该GPIF硬件相关联,并由状态机使用。比较器检查地址、数据或控制信号的当前状态是否与特定模式相匹配,并生成一个匹配信号。状态机可将该匹配信号作为触发器使用。通过状态机操作,可复位或更新计数器。该计数器也会生成用作触发器的有限匹配信号。FX3 SDK包含一组API,可用来配置、控制和监控GPIF接口。通过在状态机画布上选中用户指定的操作,GPIF II硬件可以触发FX3板上ARM 内核的中断,也可以触发外部处理器的中断。GPIF II状态机还能使用固件生成的输入信号来控制GPIF接口的操作。
试着用最通俗的话描述清楚GPIF到底做了什么。GPIF做了两件事情,第一,配置状态机,涉及了三个要素,即状态,操作,切换。例如有ABCD四个状态,状态的名字,每个状态下要做的事情,ABCD状态之间如何切换就是GPIF所做的第一件事情。具体能进行哪些操作后文会专门介绍,切换事件可通过IO由外部事件触发,也可以通过计数器、比较器产生的事件来发生切换。第二件事情就是配置一些属性适配特定硬件环境,例如数据总线位宽、时钟来源、接口类型等等,那么按照这两件事情的思路介绍GPIF原理。
在应用中,GPIF是连接设备的核心接口。关于GPIF常见的应用有三种,一种是通过GPIF连接外部控制器,设备数据通过控制器转发到GPIF在通过FX3芯片传输到上位机,这是最最基础最最常见的应用(请参考AN65974),那么后续的FPGA端时序的介绍部分将会依据这种应用介绍。第二种是之前多次提到的直接连接一个图像传感器,将GPIF配置成DVP接口或者使用mipi接口直接相连,创建UVC应用。第三种如下图,GPIF作为桥梁,一主一从在两个上位机之间传输数据。

3.GPIF Interface Definition面板


图示为Interface Definition界面
如图所示,该界面显示了为适应硬件环境的各种配置,具体按顺序如下:
① 选择使用FX3的串行外设,通过选中某一框,GPIF II Designer可避免使用分配给其他FX3外设的引脚。如选中的是“I2C”,可以避免SC和SDA引脚。
② 选择FX3作为接口的主设备还是从设备,当选择主设备或从设备时,Action List(操作列表)(右面板)将自动更新,以显示可用的选项。
③ 选择是否使用时钟?如果使用,请选择“Synchronous”(同步)。异步 SRAM是一个异步接口示例。它包含了一个地址和数据总线、读选通和写选通,但没有时钟。例如,通过激活地址,然后激活芯片使能并读选通,可以进行读操作。读选通后,将在传输时间内传出数据,且不使用任何时钟。
④ 选择是否要 FX3 GPIF II 驱动接口时钟?如果需要驱动,请选择“内部”;否则, 选择“外部”。如果第三个问题中没有选中“Synchronous”,该选项将被调暗。选择GPIF II 何时采样接口信号,在上升沿还是下降沿上?如果第三个问题中没有 选中“Synchronous”,该选项将被调暗。
⑤ 选择器件的字节顺序,低位优先或高位优先。“字节顺序”指的是多个字节顺序最高有效(大)或最低有效(小)字节优先。这是以32bit为单位的。
⑥ 选择外部器件(连接至 FX3)的数据总线宽度为:8位、16位或32位。
⑦ 选择外部器件是否要求地址行?如果需要选择各FX3资源(如套接字),将使用到地址行,所以选是。勾选是否复用地址和数据总线。
⑧ “Special features”(特殊特性)指的是唯一的硬件引脚和配置:
⑨ WE :特殊功能只能连接到GPIO_18。勾选此项,在激活GPIO_18时,入口路径的数据总线方向(进入FX3器件)将被设置。
⑩ OE :该特性仅用于GPIO_19。勾选此项,通过激活 GPIO_19,可以直接更改出口路径上数据总线的方向(退出 FX3 器件)。
⑪ DLE :使用数据锁存使能(DLE)功能时,通过取消激活GPIO_18,可在额外的几纳秒时间内锁存数据行。如果在取消激活GPIO_18的边沿到来时,FX3器件读取了使用于入口路径的数据行,将使用该特性。
⑫ 选择FX3 需要监控多少个信号,且要控制多少个信号。此外,选择使用多少个 DMA 标志。当您添加输入或输出时,状态机设计工具也会自动添加它们,以在任何状态中进行测试(输入)或激活(输出)。
⑬ 界面中可以根据具体的硬件连接修改管脚的映射关系,左侧GPIO是实际物理上的管脚,而右侧实际上是逻辑上的管脚,相当于将功能逻辑与物理管脚映射起来,便于后续的说明和配置,这里需要说明,SLWR等类似的名称是可以修改的,但多数情况下,约定俗成。

4.GPIF State Machine面板


如图所示,这是AN65974工程中状态机。其中矩形框代表状态,状态可以自己添加。矩形框中上边部分是状态的名称,可以自定义,对应于这个状态机的名字,AN65974提供了相应的FPGA代码。那么矩形框下半部分是用户添加的具体的操作的名称,这是用户自选的,每个操作的不同配置有其具体含义,稍后可看到。矩形框之间的连线的箭头代表状态可切换,连线上的文字代表状态由此切换至彼所需的条件,这个用户自选。通过这段描述,可以看出状态机的配置非常的灵活,因此可以通过复用不同的IO功能灵活做应用,典型的就是上述的UVC、GPIFII互连以及连接控制器的应用。关于上述提及的可修改的部分,在GPIF II Designer中可以很容易的找到。下面介绍这些“操作(Action List)”。
LD_DATA_COUNT

LD_DATA_COUNT为加载数据计数器操作,添加到某一状态后,该操作用于配置数据计数器。下面介绍面板中的参数配置。
Counter type (Up / Down):例中,“Up”项被选中,指计数器为递增方式累加。
Counter load value:执行该操作时,将加载初始计数。示例中,该值等于0。
Counter limit value:生成事件时的计数值,也就是计数器的满状态值。通过32位数据总线读取16KB数据时,该值被设置为4096。使用下面简单的公式可以计算该值:计数器限制值 = (要读取的字节数/ 数据总线宽度(字节)) -1。(只在计数器加载值等于0时,才会减去1。)
Counter step value:每次使用COUNT_DATA操作时,将要加上/减去计数器步长。该值必须大于 0,以激活DATA_CNT_HIT 事件。
Reload counter on reaching limit:通过选中该参数框,在到达计数限制值时,可重载计数加载值。否则,它仅作为一次性计数器使用。
Counter mask event:如果尚未选中该框,当到达计数器限制值时,将生成固件事件,也就是在固件程序中可接收此事件进行处理。
LD_ADDR_COUNT
LD_ADDR_COUNT为加载地址计数器操作,面板配置与使用方式与LD_DATA_COUNT相同。
DR_GPIO

DR_GPIO 操作可将 GPIO 引脚驱动为高电平、低电平或对其进行翻转。在“Assertion Delay”(激活延迟)后,将执行该操作。对于同步操作,该延迟的时长为两个或三个周期;而对于异步操作,该时长为 25 ns 或 30 ns。当转换到下一个状态时,通过该操作驱动的GPIO将被取消激活。因此,要想在状态机中所有状态下都将GPIO驱动为高电平或低电平,您要将该操作添加到所有状态内。如果不想将它添加到所有状态内,那么请在第一个状态中添加该操作,并选择翻转模式。下面介绍的是与该操作相关的参数:
Signal name:用户定义的字母数字字符串,它指示此处可输入的信号。该名称将显示在状态机画布上。
Output type : 该参数控制着所驱动的输出信号的延时。当选中 Early 参数框时,异步模式的延时为 25 ns,同步模式的延时为两个时钟周期。当选中 Delayed 参数框时,异步模式中的延时为 30 ns,同步时钟中的延时为三个时钟周期。
Signal mode : 在翻转模式中,当退出包含该信号的状态时,该信号值将被翻转。在激活模式下,信号值被驱动为输出所指定的激活极性。要想选择激活极性,请切换到 Interface Definition 选项卡,然后双击“Application Processor”中的信号名称(例如“OUTPUT0”)。这时,将打开一个对话框,用以设置初始引脚值和高电平有效或低电平有效极性。例如,如果选择低电平有效,当执行“Assert”操作时,引脚将被驱动为低电平。
注1:每个信号的延迟输出和信号模式设置均是全局设置。因此每次在其他状态下使用该操作时,不能更改这些设置。工具将生成一个与每个输出信号的最后设置相应的配置文件。
注2:State Settings 对话框中的“Repeat actions until next transition”项并不影响 DR_GPIO 操作的性能。在每个时钟周期内都会重复 DR_GPIO 操作(该时钟可为接口时钟或 FX3 内部时钟)。如果选中“Toggle”项,在当前的状态内,GPIO 将在每个时钟周期内进行翻转。
注3:只有当Interface Definition面板中设置有output管脚时,这个操作才会被列到Action List面板中。
IN_DATA
IN_DATA是输入数据操作,对来自数据总线的数据进行采样,然后将其转移到所指定的位置(可以是 DMA 通道,也可以是固件应用)。如果将 Data Sink 设置为 Register,可以使用 CyU3PGpifReadDataWords() API 将数据转移到固件内。注意:指定的目的地为 DMA 通道,且寻址模式被设置为 Thread selected by State machine (Number of address lines =0)时,才能直接从四个目的地线程中选择某一个。也就是说,有地址位的时候,通过地址位选择线程,没有地址位的时候可以通过此处设置配置对应线程。


能锁存来自数据总线的数据,并不将它保存到所选的位置,或者将先前锁存的数据保存到所选位置。
下面介绍的是与该操作相关的参数:
Data Sink,数据接收器,可用的选项为“Register/ Socket/ PPRegister”数据从总线上面来到选项中去。
Thread Number,与数据接收相关联的线程编号。可选的编号为Thread 0至3。(当不使用地址行,且线程编号或主设备模式已被使能时,该特性可用。)
Sample data from data bus,通过该选项,可对来自数据总线的数据进行采样,但不会将其写入到指定的数据接收器。
Write data into Data Sink,当用户想要将采样数据推入指定的数据接收器时,请选中该选项。通过该两个选项,可采样数据,并将数据写入到其目的地。
DR_DATA

DR_DATA 操作将数据从指定的源驱动到数据总线上。数据源可以是 DMA 通道,也可以是固件应用。如果将 Data Source 设置为Register,将使用 CyU3PGpifWriteDataWords() API 对来自固件的数据进行写操作。注意:仅在数据源为 DMA 通道,且其寻址模式被设置为 Thread selected by State machine (Number of address lines =0)时,才能将数据源设置为线程。
下面介绍的是与该操作相关的参数:
Update new value from data source,通过该选项,可使用数据源中的数据字更新数据总线,并移除指定源中的数据字。
Data Source,通过该项,用户可选择数据来源为“data counter”和“register/ Socket / PPRegister”。
Thread Number,与数据源相关联的线程编号。可选的编号为 Thread 0 至 3。当没有用于选择线程编号的地址行时,该特性可用。这时,Interface Definition 选项卡下的 Number of Address Pins Used 字段被设置为 0。
Remove Data from the Data Source,禁用该项时,不会消除源数据,因此可在其他状态下使用该数据。注意:在State Settings 对话框中,“Update new value from data source”标志将覆盖“Repeat actions until next transition”标志。尽管已经取消选择 Repeat actions until next transition标志,但只要选中了 Update new value from data source标志,就可以在每个时钟周期内更新总线上的数据(GPIF II 处于该状态)。
IN_ADDR

通过 IN_ADDR 操作,GPIF 硬件采样来自地址总线的值,并使用它选择 DMA 线程或套接字。如果在 Interface Definition 选项卡下指定了0地址位,则 Address Selecting 选项被暗掉。当地址总线宽度小于或等于两位时,地址只能选择四个DMA线程中的一个。如果地址宽度介于3到5位之间,便可以选择DMA线程或特定套接字。可使用上面对话框中的“Address Selecting”参数进行选择。
下面介绍的是与该操作相关的参数:
Address Selecting,“Thread”或“Socket”当您更改Interface Definition中的值,操纵选项会立即自动更改。例如,如果您将Number of address pins used设置为0,Action List中的IN_ADDR选项将消失。
COUNT_DATA 、COUNT_ADDR
使用LD_DATA_COUNT操作所配置的步长更新数据计数器的值。如果更新操作使计数达到了所指定的限制值,则DATA_CNT_HIT事件的触发将为真。COUNT_ADDR对地址计数器进行同样的操作。没有与该操作相应的参数。
INTR_CPU
中断片上 CPU 以生成 CYU3P_GPIF_EVT_SM_INTERRUPT 事件(由固件应用处理)。如果在状态中选择了INTR_CPU 操作,则转换公式列表中的 INTR_PENDING 事件可用。如果在清除 INTR_PENDING 信号前,需要执行操作,请使用 CyU3PGpifRegisterSMIntrCallback 函数。在 CPU 清除中断前,该回调函数会执行。
COMMIT
在选定的入口 DMA 通道上传输数据包/缓冲区(将读取数据传入 FX3 器件时所使用的 DMA 通道)。缓冲区将被传输到管道的另一端。通常通过该操作,可强制缓冲区/数据包结束。
下面介绍的是与该操作相关的参数:
Thread Number,Thread0至3(仅在地址位的数量被配置为0或主控模式被使能时,该参数才可用)。

5.以AN65974为例介绍相关配置


①引脚配置,如图所示,这是AN65974的状态机示意图,划分了5个功能状态,分别执行零包传输操作,短包传输操作,连续读,连续写,以及地址采样操作。他将功能引脚定义为SLOE、SLCS、SLWR、SLRD、PKTEND,均是低电平有效,上升沿触发。管脚配置的功能如下所示。

②SLOE说明,在该工程中SLOE的功能是使能从设备驱动数据总线,之所以有这样的功能,如图1所示,是与sloe映射的物理IO被拉低的时候,状态机将进入到READ状态(配置了状态机切换条件),而在READ状态中,将执行DR_DATA操作(选择了“操作”),故而当sloe拉低的时候,其实现的功能与图2一致。对于这个管脚功能的说明反应了GPIF配置的灵活性。

图1

图2

USB之Cyusb3014芯片原理之三GPIF原理(十一) 2022-03-08相关推荐

  1. USB之Cyusb3014芯片原理之四控制传输实现原理(十二) 2022-04-01

    1.写在前面 系列文章(一)到(十一)应该是总分的结构,最开始大致写明我要写的内容,后面将每一个点拆解出来作为一篇.本篇所要讲述的内容是基于Cyusb3014实现控制传输的原理,要求比较高,硬是从写文 ...

  2. GPIF II designer使用说明+CYUSB3014芯片基本信息介绍——英文文档学习记录

    这篇文章是基于之前FX3实现FPGA与USB3.0通信的内容.本人新手,写的不好如有错误请原谅.今天来记录一下官方文档的学习. 一.基本信息讲解 1.1 GPIF II Designer和CYUSB3 ...

  3. 一篇读懂:Android手机如何通过USB接口与外设通信(附原理分析及方案选型)

    更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,共同探讨软件知识经验,关注就有海量学习资料免费领哦: 目录 0背景 1.手机USB接口通信特点 1.1 使用方便 1.2 通用性强 1.3 ...

  4. 服务器看门狗芯片电路图,看门狗芯片MAX708的工作原理及数 - 电源设计应用 - 电子发烧友网...

    引 言 单片机的程序稳定性和运行及数据的安全性是设计者在不同的运行环境中所必须考虑的问题,而最易遇到的问题是受干扰而使CPU进入死循环,一般情况下设计者会使用软件陷阱和软件看门狗来避免此类现象的出现, ...

  5. 一颗芯片的内部设计原理和结构

    关注.星标公众号,直达精彩内容 来源:网络素材 摘要 作为一名电源研发工程师,自然经常与各种芯片打交道,可能有的工程师对芯片的内部并不是很了解,不少同学在应用新的芯片时直接翻到Datasheet的应用 ...

  6. USB之Cyusb3014开发经验总结 (十八)2022-04-17

    1.固件开发 1.1串口打印调试信息 在固件开发时,可以利用串口打印调试信息,获得代码执行情况的指示.固件中,用于打印调试信息的串口配置如下,其中波特率的设置为112500,停止位为1,无校验位.在程 ...

  7. CYUSB3014设计方案|替代CYUSB3014芯片|方寸微T630可完全替代兼容CYPRESS CYUSB3014

    CYUSB3014设计方案|替代CYUSB3014芯片|方寸微T630可完全替代兼容CYPRESS CYUSB3014 赛普拉斯CYPRESS CYUSB3014是一款USB 3.0 PHY芯片,广泛 ...

  8. USB电源过流保护芯片应用介绍

    USB电源过流保护芯片应用介绍 USB电源相关要求 USB应用的电压等级是5V,但是有个波动范围是4.75到5.25V之间:USB2.0的电流大小是500mA,USB3.0的电流大小是900mA,因为 ...

  9. USB音频/耳机芯片DP108替代CM108AH

    已被广泛应用的USB音频/耳机芯片DP108,虚拟7.1声道,电脑界面驱动.内部集成晶振,包括双通道DAC和耳机功放,ADC,麦克风增压器,PLL,稳压器,USB收发器等模拟模块在DP108内.许多功 ...

最新文章

  1. BGR图像与HSV图像互相转换(opencv)
  2. java正则测试_Java的正则表达式
  3. C语言如何返回格式化日期时间(格式化时间)?(将日期和时间以字符串格式输出)ctime()、asctime()、localtime()、strftime()
  4. asr1601芯片平台实现ssl加密的websocket
  5. zigbee物联网模块市场:LTE标准Cat.1和nbiot无线通信模块差异
  6. JavaWeb总结(四)
  7. LeetCode 1973. Count Nodes Equal to Sum of Descendants(DFS)
  8. 数据结构--跳表SkipList
  9. Written English-书面-一般现在时
  10. 星巴克“猫爪杯”遭国人疯抢 而 “大白兔冰淇淋”在美国大火
  11. Python之进程+线程+协程(生产者消费者模型)
  12. SAP License:员工离职分析
  13. YARN作业提交流程剖析
  14. Jenkins知识地图
  15. android 远程代码,Android 远程连接数据库。。。。。(示例代码)
  16. 010 editor如何复制16进制
  17. I.MX6 AW-NB177NF wifi HAL
  18. 【NYOJ】[845]无主之地1
  19. NODEJS day_04(5.24)Express-2
  20. 不使用layer的masksToBounds和cornerRadius来设置圆角

热门文章

  1. 基金从业-证券投资基金概述第二章重点(了解投资,做好程序员下半生规划)
  2. 显卡显存测试u盘 mats_影驰RTX 2080 Ti HOF Plus显卡评测:披坚执锐的性能王冠守护者...
  3. 美国eb1a移民费用有哪些
  4. Excel排序,数据透视图,公式预测
  5. 7 RRC Measurement -- 测量报告
  6. 22.JS+jQuery
  7. Python实现一行输入多个数和输入n行的操作
  8. IDEA MyBatis 报错:Could not find resource com/xxx/xxxMapper.xml
  9. [BDSec CTF 2022] 部分WP
  10. 毕业设计 - 题目_ 基于单片机的智能小车 - 嵌入式 物联网 本科毕设