利用EZ-USB FX3 从器件FIFO接口进行设计(3)

2025-08-13

传输结束的标志延迟GPIFII转换开始Slave FIFO的写传Slave FIFO的读传设计器标标志配置的地址到输(从最后一个输(从最后一个志设定选标志延时SLWR#有效到满标志SLRD#有效到空标志择有效)有效)特定进程3周期+tCFLG(外部2周期+tCFLG(外部Thread_n“n”的设备在第四个时钟设备在第三个时钟_DMA_Rea0周期专用空/边缘采样有效标边缘采样有效标dy满标志志)志)当前寻址Current_2周期+进程的满thread_D3周期+tCFLG2周期+tCFLGtCFLG/空标志MA_Ready特定进程Thread_n取决于水取决于水“n”的_DMA_Wat0周期印水平印水平局部空ermark/满标志当前寻址Current_进程的局thread_D2周期+取决于水印水平取决于水印水平部满/空MA_WatertCFLG标志mark表4 不同标志配置的延迟相关

需要的应用APIn/an/aCyU3SocketConfigure() API.设置水印水平CyU3SocketConfigure() API.设置水印水平

这个部分描述了不同类型的可用且相关的延迟标志配置。下面的部分将描述如何使用GPIFII设计工具和EZ-USB FX3 SDK来配置标志位。

GPIFII设计器

应用同步Slave FIFO接口

GPIFII设计工具能够从赛普拉斯的网站上安装,一旦启动了GPIFII设计器,在开始页中你将发现赛普拉斯提供的接口。

图7 GPIFII设计器的Slave FIFO工程-赛普拉斯应用接口

Sync_slave_fifo_2bit工程是2位地址的同步从器件FIFO接口的GPIFII应用。下一个部分解释使用GPIFII设计器配置局部FLAG。 配置局部标志

局部标志的配置遵循下面两步:

1. 在GPIFII设计工具中选择局部FLAG设置。

2. 在固件中使用CyU3PGpifSocketConfigure()API设置局部FLAG的水印水平。

上述两步将在下面详细介绍。

在GPIFII设计工具中,一旦打开了来自塞朴拉斯应用接口的Sync_slave_fifo_2bit工程,在“标志A连接”或“标志B连接”情况下,对于当前进程,选择“Current_Thread_DMA_Watermark”来配置FLAG作为局部标志。或者选择“Thread_n_DMA_Watermark”来配置FLAG作为特定进程n的局部标志。 下面展示了该部分的截图。

图8 GPIFII设计器的标志设定-塞朴拉斯应用接口sync_slave_fifo_2bit

如果你打算添加更多的FLAG或作出在除了在sync_slave_fifo_2bit.cyfx工程中已经允许改变时,你可以单击文件->保存工程作为可编辑模式。这将允许你用一个不同的名字保存工程,保存完后,可以修改该工程。

在这种情况下配置一个FLAG作为局部FLAG,在I/O矩阵配置图中右击,然后在DMA标志设置上单击。下面的截图展示了这一过程。

图9“保存工程为可编辑”来创建新工程后

这将允许如像下图,选择FLAG配置:

图10. 选择特定的FLAG设置

第二步去配置一个局部FLAG是为局部标志指定一个水印值。这个水印值必

须在固件工程中被指定。在cyfxslfifo.c文件中添加一个称作CyU3PGpifSocketConfigure() 的API来设定水印值。这个调用可以在调用CyU3PGPIFLoad()API后添加。可以参考EZ-USB FX3 SDK API引导手册寻找CyU3PGpifSocketConfigure()API的完整描述。这个API的一个输入参数是水印值。

水印值决定了何时局部FLAG有效。下面的部分描述了再局部FLAG有效后可以读写的数据字数的公式。 使用局部标志的通用公式

前面部分描述了对FLAGs可能的配置以及配置一个局部FLAG的步奏。该部分解释了对于一个局部FLAG,水印值是如何决定的?

使用下面的公式来计算当局部FLAG有效后读写的数据量。

注:在CyU3PGpifSocketConfigure()设置的水印值是就 32位数据字而言的。 1. 当从外部主控向Sync Slave FIFO写数据时:

在局部FLAG被采样为低的时钟边缘,能够被写入的数据字量等于水印值*(32/总线宽度)-4

2. 当外部主控从Sync Slave FIFO读数据时:

a. 在局部FLAG被采样有效时的时钟边缘,能够读取的数据字量是水印值*(32/总线宽度)-1

b. 注意,从SLRD#到数据有两个周期延时。因此,在局部FLAG被采样有效时的时钟边缘后,SLRD#保持有效,循环的数据量是水印值*(32/总线宽度)-3

下面部分描述怎样设置水印值的一些例子与相应的对标志位的影响。截图清晰的展示了对于不同的水印值,局部标志的不同行为。注意,这些例子的FLAG极性设置为低,因此,FLAGs变低表明空/满或局部空/满。

CyU3PGpifSocketConfigure()API使用实例

前面的部分规定局部FLAGs的行为依赖于水印值和水印值的精确计算公式。 在该部分提供一些通过使用CyU3PGpifSocketConfigure()API来影响水印值设定的例子。截图也显示了对于不同的水印值,局部模式的行为。

注意,在这些例子中,FLAG极性设置为低。因此FLAG变低表明满/空或局部满/空。

例1:

32位数据总线同步从器件FIFO:

在GPIFII Designer中,FLAGA被配置成Current_thread_DMA_RDY,FLAGB被配置成Current_thread_DMA_watermark.

CyU3PGpifSocketConfigure(0,PIB_SOCKET_0,4,CyFalse,1)

在同步从器件FIFO中,从FPGA向EZ-USB FX3突发写(最后一个数据被写为0x00800080)。

下面是一个在转换结束时,FLAGs变成0的逻辑分析截图。在同一次循环中,最后一个字被写入,能够看到,FLAGB变低。

图11 32位数据总线宽度下的突发写转换

例2:

32位数据总线的同步从器件FIFO:

在GPIFII Designer中,FLAGA被配置成Current_thread_DMA_RDY,FLAGB被配置成Current_thread_DMA_watermark。

CyU3PGpifSocketConfigure(0,PIB_SOCKET_0,4,CyFalse,1) 同步从器件中,外部FPGA读取来自EZ-USB FX3的数据。

下面的截图展示了在转换结束时FLAGs变为0的逻辑图。从图中可以看到,在最后的数据被读取的前4个周期,FLAGB变低,在FLAGB变低后3个字的数据能够被读取出来。

来自局部FLAGs模式下的通用公式2(a)能被用于该实例: 水印值 = 4,宽度 = 32

因此,在局部FLAG被采样为3之后的时钟边缘,可以读取32位的数据。


利用EZ-USB FX3 从器件FIFO接口进行设计(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高二地理下册期中调研检测试卷12

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219