UDB。 这是什么 第3部分。数据路径FIFO



我们将继续将赛普拉斯的专有文档转换为UDB模块。 而且,一切都非常吻合。 要继续关于UDB实用文章,您将需要使用FIFO,并且在理论部分我们已经对它们进行了非常详细的描述。 因此,我们开始详细研究它们。

循环的一般内容是“ UDB。 这是什么?
第1部分。简介。
第2部分。数据路径。
第3部分。数据路径FIFO。 (当前文章)
第4部分。数据路径ALU。
第5部分。数据路径。 有用的小东西。
第6部分。管理和状态模块。
第7部分。时序和复位控制模块
第8部分。处理UDB

21.3.2.2数据路径FIFO


FIFO模式和配置


每个FIFO缓冲区都有几种可用的操作模式和配置:

表21-2。 FIFO模式和配置。
模式内容描述
输入/输出
(输入/输出缓冲区)
在输入缓冲模式下,CPU或DMA写入
FIFO中的数据,然后Datapath读取它。 在模式下
输出缓冲区数据从以下位置进入FIFO
数据路径,并从那里读取CPU或DMA。
单缓冲器
(单缓冲区)
FIFO用作没有状态的单个缓冲区。
FIFO中记录的数据可立即读取,并且可能
随时被覆盖。
水平/边缘
(等级/三角洲)
负责从数据路径加载FIFO的参数,
可以通过水平或差分触发。
正常/快速
(正常/快速)
负责从源加载FIFO的参数
数据路径:以为数据路径选择的频率计时
时钟源(正常)或总线频率(快速)。
这使您可以以最高频率进行捕获。
在系统中(总线频率),与数据路径时钟频率无关。
软件捕获
(软件捕获)
当此模式打开且FIFO处于模式时
输出缓冲区,读取CPU或DMA相关
电池(A0代表F0,A1代表F1),初始化
同步将电池值传输到FIFO。
捕获的值可立即从FIFO中读取。
如果激活了链接支持,
该操作将遵循到MS块的链,以便
数据路径可以执行多字节的原子读取
价值观。
y
(异步)
当Datapach和系统总线时钟不是
同步的FIFO状态信号可以是
转发到其余数据路径
直接从数据路径时钟频率开始计时
或在Asynch模式下进行双重同步。
独立时钟极性
(独立时钟极性)
每个FIFO都有一个控制位要反转
FIFO时钟极性与数据路径时钟的关系。

图21-7显示了FIFO对的可能配置选项,具体取决于为每个FIFO选择的输入/输出模式。 如果一个FIFO处于输入模式,而另一个FIFO处于输出模式,则得到RX / TX配置。 需要这种配置的典型示例是SPI总线控制器。 双捕获配置(两个FIFO配置为输出)提供对A0和A1对的独立捕获,或者对A0或A1寄存器的两个独立捕获。 最后,在双缓冲模式下(均为输入),可以使用一个寄存器对或两个独立的寄存器进行加载或比较。



图21-7。 FIFO配置。

图21-8详细显示了FIFO的源和接收器。



图21-8。 FIFO源和接收器。

当FIFO在输入缓冲模式下工作时,源是系统总线,接收器是Dx和Ax寄存器。 在输出缓冲模式下工作时,源是Ax和ALU寄存器,接收器是系统总线。 多路复用器选择在UDB CFG15配置寄存器中静态设置,如F0_INSEL [1:0]或F1_INSEL [1:0]的表所示:

表21-3。 UDB配置寄存器中的一组FIFO多路复用器。
Fx_INSEL [1:0]内容描述
00输入缓冲模式:系统总线写入FIFO,而接收器
FIFO是Ax或Dx。
01输出缓冲模式:FIFO源为A0,接收器为
FIFO-系统总线。
10输出缓冲模式:FIFO的源是A1,接收器是
FIFO-系统总线。
11输出缓冲模式:FIFO源是ALU输出,接收器是
FIFO-系统总线。

FIFO状态


每个FIFO生成两个状态信号“总线”和“块”,它们通过数据路径输出多路复用器传输到UDB跟踪资源。 总线状态可用于中断或请求对FIFO的DMA读/写。 “块”状态主要用于将FIFO状态传递给内部UDB实体。 状态位的用途取决于配置的方向(Fx_INSEL [1:0])和FIFO级别位。 在工作寄存器空间的辅助控制寄存器中设置FIFO级别位(Fx_LVL)。 下表显示了状态选项:

表21-4。 FIFO状态选项。
Fx_INSEL [1:0]Fx_lvl条件讯号内容描述
进入0不满巴士状态当有FIFO时会阻塞
放置至少一个字节。
进入1个毁了
至少
一半
巴士状态当有FIFO时会阻塞
至少2个字节的空间。
进入不适用是空的封锁状态没有FIFO时将阻塞
不是一个字节。
FIFO不为空时,数据路径
可以读取字节。
FIFO为空时,数据路径
可能能够
期望要么产生
毁灭性的状态。
结论0不空巴士状态处于FIFO时已阻塞
至少1个字节可用
阅读。
结论1个已满
至少
一半
巴士状态在FIFO中可用时已阻塞
至少要读取2个字节。
结论不适用已满封锁状态当FIFO已满时,将被塞住。
当FIFO未完成时,数据路径
可以在FIFO中写入字节。
当FIFO已满时,数据路径
可能在
备用或
产生条件
溢出。

FIFO工作图


图21-9显示了典型的读写顺序,以及与这些操作相关的状态的产生。 在图中,读写发生在不同的时间,但是它们可以同时执行。



图21-9 FIFO接收器操作

FIFO快速模式(FIFO FAST)


当FIFO处于输出缓冲模式时,FIFO引导操作通常使用所选数据路径的时钟频率为写信号提供时钟。 如图21-10所示,选择FIFO快速模式(FIFO FAST)时,可以选择此特定操作的总线频率。 当与“电平/边沿=边沿”模式结合使用时,此操作可减少从电池到FIFO的从数据路径时钟周期到总线时钟周期的传输延迟,因为总线频率可能更高。 这允许CPU或DMA以最小的延迟读取接收到的FIFO结果。

如图21-10所示,无论当前的Datapath时钟如何,都会执行快速启动操作,但是,使用总线时钟速度会增加功耗。



图21-10。 FIFO快速配置接收器。

FIFO边沿/电平记录模式(差分/电平)


数据路径的FIFO中有两种记录模式。 在第一种模式下,数据从电池同步传输到FIFO。 该记录的控制信号(FX_LD)通常由状态机或与数据路径时钟同步的条件产生。 在输入负载控制信号为“ 1”的任何周期内都将执行对FIFO的写操作。 在第二种模式下,FIFO用于响应FX_LD信号的上升沿来捕获电池值。 在这种模式下,信号的信号格式是任意的(但是,其周期必须至少等于一个数据路径时钟周期)。 此模式的一个示例是使用外部脚的输入作为触发器来捕获电池电量。 此模式的局限性在于,在检测到另一个正差之前,输入参数必须至少一个周期返回值“ 0”。

图21-11显示了FX_LD输入上的差分检测模式的实现。 UDB中两个FIFO的模式都由同一位控制,切换此选项。 注意,差分检测的时钟频率等于所选FIFO的频率。



图21-11。 内部FIFO记录接收器的差分检测。

FIFO软件捕获模式


一个共同而重要的要求是使CPU和DMA在正常操作期间可靠地读取电池的内容。 这是使用软件捕获完成的,并使用FIFO上限配置位使能。 该位适用于UDB中的两个FIFO,但仅在FIFO处于输出缓冲区模式时才有效。 使用软件捕获时,F0必须从A0读取,F1必须从A1读取。

如图21-12所示,读取电池将启动从电池写入FIFO的操作。 信号链接在一条链中,因此,同时读取一个特定字节可捕获链中所有UDB的电池值。 这使8位处理器可以成功地同时读取16位或更多位。 读取电池时返回的数据应被忽略,捕获的值可立即从FIFO中读取。

跟踪的FX_LD信号(产生FIFO负载)与程序捕获信号一起发送到OR项。 当同时使用硬件和软件捕获时,结果可能无法预测。 通常,这些功能应该互斥,但是,在以下情况下可以同时使用硬件和软件捕获:

  • FIFO捕获时钟模式设置为FIFO FAST。
  • FIFO记录模式设置为FIFO EDGE。

在上述条件下,硬件和软件捕获的工作原理相同,并且在任何总线时钟周期内,这些信号中的任何一个都可以触发捕获。

还建议在程序捕获开始之前清除程序代码(ACTL寄存器)中的目标FIFO。 因此,FIFO读和写指针将被设置为已知状态。



图21-12。 软件捕获配置。

译者注:
很长一段时间我都无法理解本节的含义。 然后很长一段时间,我确定该部分是为PSoC3编写的,其8位内核不能访问的字节数以上。 但是,当创建转换的第八部分时 ,事实证明,即使在PSoC5LP中,对于所有32位ARM处理器内核,也可以以八位或十六位模式访问工作的UDB寄存器。 从文档来看,仅此而已。 这就是所描述的功能派上用场的地方。


FIFO控制位


辅助控制寄存器可在正常操作期间用于控制FIFO,包含4位。

FIFO0 CLR和FIFO1 CLR位用于复位或清除FIFO。 当为这些位之一分配值“ 1”时,相关的FIFO被复位。 该位必须恢复为其原始值(0),FIFO才能继续工作。 如果该位值保持等于1,则将禁用相应的FIFO,并将其用作无状态的单字节缓冲区。 可以将数据写入FIFO,可以立即读取数据,并且可以随时覆盖。 仍可以使用FX INSEL配置位[1:0]设置数据方向。

FIFO0 LVL和FIFO1 LVL位确定FIFO将阻塞状态位“总线”的电平 (总线读取或写入FIFO时)。 也就是说, “总线”状态的状态取决于给定的方向,如下表所示。

表21-5。 FIFO电平控制位
FIFO LVL输入缓冲模式
(总线写入FIFO)
输出缓冲模式
(总线从FIFO读取)
0不满
至少可以写入一个字节。
不空
至少可以读取一个字节。
1个至少中途清空
至少可以写入2个字节。
半满
至少可以读取2个字节。

FIFO异步操作


图21-13显示了异步FIFO操作的原理。 例如,假设F0在输入缓冲模式下工作,而F1在输出缓冲模式下工作,这是TX和RX寄存器的典型配置。



图21-13。 异步FIFO操作。

在TX端,数据路径状态机使用Empty标志来确定是否有任何字节可用于接收。 Empty值是与Datapath状态机同步设置的,并且由于来自总线的写入而被异步清除。 清洗后,状态再次与数据路径状态机同步。

在RX端,RX状态机使用Full来确定是否有空闲空间可写入FIFO。 Full值与Datapath状态机同步设置,由于总线读取而被异步清除。 清洗后,状态再次与数据路径状态机同步。

一个FIFO ASYNCH位用于启用该同步方法,激活后,该方法将应用于两个FIFO。

它仅适用于“ 块”状态,因为假定总线状态由中断过程自然同步。

表21-6。 FIFO状态同步选项。
异步添加同步运作方式使用模式
00与总线定时同步CPU读/写状态更改
发生在总线频率上。 可以
使用最少
延迟,如果你能实现
Datapatch时钟频率
等于总线的频率。
01个频率重新同步
轮胎到数据路径频率。
此模式应为
默认操作模式。 什么时候
CPU执行读/写操作,
状态更改将重新同步
以及Datapath中使用的频率。
这样就可以使用全部
要设置的数据路径频率周期
UDB逻辑的信号。
1个0已预留--
1个1个双频同步
轮胎到数据路径频率。
时钟脉冲用于数据路径时
不仅不同步
全身性但也
单独生产
独立发电机
此参数可能是
用于双
同步操作
读写CPU
与数据路径时钟。

操作期间FIFO溢出


为了安全地实现内部(数据路径)和外部(CPU或DMA)读写操作,应使用FIFO状态信号。 没有内置的清空和溢出条件保护。 如果FIFO已满,并且执行了后续写操作(溢出),则新数据将覆盖FIFO的开头(当前正在输出的数据是读取队列中的下一个)。 如果FIFO为空并且执行了后续读取(清空或耗尽),则读取值不确定。 FIFO指针保持准确,无论是否发生下溢和溢出。

FIFO时钟反转


每个FIFO都有一个控制位Fx CK INV,该位负责时钟FIFO的极性。关于时钟数据路径的极性。 默认情况下,FIFO与数据路径时钟具有相同的极性。 当该位为1时,FIFO相对于数据路径具有相反的极性。 这为双向交换数据(例如SPI)提供了协议支持。

动态FIFO控制


通常,FIFO是在输入缓冲模式或输出缓冲模式下静态配置的。 或者,每个FIFO可以配置为在动态控制方向(在外部信号的影响下)的模式下运行。 每个FIFO(Fx DYN)一个配置位负责激活此模式。 图21-14显示了FIFO动态模式下可用的配置。



图21-14。 动态FIFO模式。

在内部访问模式下,数据路径可以读写FIFO。 在此配置中,为了选择FIFO中的写操作源,必须将Fx INSEL位设置为1。Fx INSEL = 0(CPU总线源)在此模式下不正确,它只能采用值1、2或3(A0,A1或ALU) ) 值得注意的是,读取只能访问适当的电池,该模式下数据寄存器的方向不可用。

在外部访问模式下,CPU或DMA可以读取或写入FIFO。

通过转发来自Datapath的信号,配置可以在外部访问和内部访问之间动态切换。 为此,使用输入信号数据路径d0_load和d1_load。 值得注意的是,在动态控制模式下,从F0 / F1加载寄存器D0 / D1时,d0_load和d1_load无法正常使用。 Dx_load信号可以由任何跟踪信号(包括常量)触发。

考虑一个示例,其中从外部访问(dx_load == 1)开始,CPU或DMA可以将一个或多个字节的数据写入FIFO。 然后,当切换到内部访问(dx_load == 0)时,Datapath可以对数据执行操作。 之后,当切换到外部访问时,CPU或DMA可以读取计算结果。
由于Fx INSEL应始终为01、10或11(A0,A1或ALU),这对应于正常操作期间的“输出缓冲区模式”,因此FIFO状态信号具有以下定义(取决于Fx LVL参数):

表21-7。 FIFO状态。
状态信号价值Fx LVL = 0Fx LVL = 1
fx_blk_stat记录状态FIFO已满FIFO已满
fx_bus_stat阅读状态FIFO不完整半满

由于数据路径和CPU都可以从FIFO中写入和读取,因此这些信号不再被视为块和总线状态。 blk_stat信号用于写入状态,而bus_stat信号用于读取状态

21.3.2.3 FIFO状态


有四个FIFO状态信号,每个FIFO有两个:fifo0_bus_stat,fifo0_blk_stat,fifo1_bus_stat和fifo1_blk_stat。这些信号的含义取决于特定FIFO的方向,该方向由静态配置确定。FIFO状态在21.3.2.2数据路径FIFO中有详细描述

在下一部分中,我们将继续分析算术逻辑单元(ALU)。

Source: https://habr.com/ru/post/zh-CN434706/


All Articles