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



我们将继续基于赛普拉斯文档来考虑UDB。 这次我们将详细研究可操作的自动机Datapath。

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

21.3.2操作机(数据路径)


图21-6所示的数据路径包含一个8位单端ALU及其相关电路,用于比较和生成条件标志。 可以将相邻UDB的数据路径块链接在一起以增加位深度。 数据路径包括一个小的动态配置RAM,可以动态选择要在特定周期内执行的操作。

数据路径经过优化,可实现典型的嵌入式功能,例如定时器,计数器,PWM,PRS,CRC,移位寄存器和死区生成器。 添加加法和减法功能可支持数字delta-sigma操作。


图21-6。 顶级数据路径。

21.3.2.1概述


以下各章概述了数据路径的主要功能。

动态配置

动态配置-在定序器的控制下,在每个周期中更改Datapath的工作和内部通信的能力。 这是通过配置存储器(配置RAM)实现的,该存储器存储八个唯一的配置。 该存储器的输入地址可以从连接到跟踪资源的任何模块转发,通常是从PLD逻辑,I / O引脚或其他数据路径转发。



ALU可以执行八种通用功能:递增,递减,加,减,还可以执行逻辑运算AND,OR,XOR和PASS。 功能的选择由每个周期的配置存储器决定。 ALU输出提供独立的移位操作(左,右,半字节置换)以及屏蔽操作。

条件构造

每个数据路径具有两个按位屏蔽的比较器,可以将其配置为选择多个数据路径寄存器输入作为参数。 其他可识别条件可能是全零,全1和溢出。 这些条件构成了数据路径的主要输出,可以转发到数字跟踪线或其他功能的输入。

嵌入式CRC / PRS

Datapath内置支持单周期CRC计算以及生成具有给定位深度和生成多项式的伪随机序列(英语伪随机序列,PRS)。 为了获得超过8位的位深度,可以在数据路径之间链接信号。 此功能是动态控制的,这意味着它可以与其他功能交替使用。

自定义高位数

算术函数和移位函数的最高有效位(英语最高有效位,MSB)的编号可以通过编程设置。 这提供了对可变长度CRC / PRS功能的支持,并且与屏蔽ALU输出一起,允许实现任意长度的计时器,计数器和移位块。

FIFO输入/输出缓冲器

每个数据路径都有两个4字节FIFO缓冲区,每个缓冲区都可以配置为用作输入缓冲区(CPU或DMA将数据写入FIFO,数据路径读取FIFO)或作为输出缓冲区(数据路径写入FIFO,以及CPU或DMA)从中读取)。 这些FIFO缓冲区生成的状态可以转发以与定序器,中断或DMA请求进行交互。

链式

数据路径可以配置为将条件和信号链接到相邻的数据路径。 移位,传输,捕获和其他条件信号可以按链组合以创建更高位深度的算术函数,以及移位函数和CRC / PRS函数。

时分复用

在过采样应用中或不需要高时钟速度的情况下,可以在两组寄存器和条件生成器之间有效分配Datapath中的一个ALU。 ALU和移位寄存器的输出被锁存,可以在后续周期中用作输入。 使用示例包括支持一个(8位)数据路径中的16位功能,或将CRC生成操作与数据移位操作交替使用。

数据路径输入

数据路径具有四种类型的输入:配置,控制以及数据输入(串行和并行)。 配置输入选择动态配置的RAM地址。 控制输入​​从FIFO加载数据寄存器,并将电池输出下载到FIFO。 串行数据输入包括移位和进位输入。 并行数据输入端口允许您从跟踪资源接收多达8个数据位。

数据路径输出

总共在Datapath中生成了16个信号。 其中一些是条件信号(例如,比较),另一些是状态信号(例如,FIFO状态),其余是数据信号(例如,移位寄存器输出)。 这16个信号被多路复用为6个数据路径输出,并路由到跟踪矩阵。 默认情况下,输出与时钟频率同步,这会以1个时钟周期的延迟创建流水线。 同样,它们的(输出)可以切换到异步(组合)模式(请参阅翻译说明)。

译者注

我搜索了很长时间以了解数据路径输出的时间。 根据我的经验,所有内容都是异步的。 事实证明,这与其说是输出的状态,不如说是基于这些变量的编辑器设置。



这将迫使编辑器生成以下Verilog代码:
/* ==================== Assignment of Registered Variables ==================== */ always @ (posedge clock) begin : register_assignments var1 <= (decr_finished); end 

如果切换到组合模式



代码将变成这样:

 assign var1 = (decr_finished); 

但这一切都适用于从数据路径输出生成的变量。 输出本身始终是异步的。 并且可以使用它们的名称(在此示例中为decr_finished )而无需输入其他变量。

数据路径工作寄存器

每个数据路径模块都有六个8位工作寄存器。 CPU或DMA具有对所有寄存器的读写访问权限。

表21-1
型式内容描述
电瓶A0,A1电池可以是电源,也可以是电池
用于ALU。 它们也可以从数据寄存器中加载。
或FIFO。 电池通常包含当前功能值。
(例如计数器,CRC或移位)。 这些寄存器丢失了它们的
进入睡眠模式时的值以及重置后的值
值0x00。
资料D0,D1数据寄存器通常包含函数常量,
例如,PWM比较值,定时器周期或CRC多项式。
这些寄存器在休眠模式下保留其值。
模式。
先进先出F0,F1提供两个4字节FIFO缓冲区作为源,
以及用于缓冲数据的接收器。 FIFO可以是
配置为输入缓冲区和输出缓冲区,或配置为一个
输入缓冲区和一个输出缓冲区。 状态信号显示
这些缓冲区的读取和写入状态。 使用实例
可以在SPI或UART中包含缓冲的TX和RX数据,
以及缓冲的PWM数据和缓冲的数据
关于计时器时间段。 这些寄存器不保存其值。
在休眠模式和复位期间,它们的值为0x00。

在下一篇文章中,我们将开始处理FIFO。

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


All Articles