ZHCAEZ7 February 2025 TPLD1202 , TPLD1202-Q1
TI 的可编程逻辑器件 (TPLD) 中的串行通信允许使用用户寄存器空间。在使用用户寄存器空间时,可对所选字段进行小幅调整,例如计数器块控制数据字段,或者可以在无需通过器件引脚的情况下像 I/O 一样使用。TPLD 目前仅支持用户寄存器、可在 "Detailed Description -> Device functional modes -> Programming -> “Device name” Registers -> “device name”_USER_REGISTER" 下找到。在本应用简报中,TPLD1202 是所使用的器件,任何对地址的引用都基于该器件的用户寄存器表。
表 1 是一个用户寄存器空间的示例。该表并没有包含所有器件中可用的所有选项,但它包含了大部分可用选项。
| 首字母缩写词 | 位 7 | 位 6 | 位 5 | 位 4 | 位 3 | 位 2 | 位 1 | 位 0 |
|---|---|---|---|---|---|---|---|---|
| DEVICE_ID0 | DEVICE_ID_MSB | |||||||
| DEVICE_ID1 | DEVICE_ID_LSB | |||||||
| DEVICE_ID2 | DEVICE_ID_RSVD | |||||||
| DEVICE_ID3 | DEVICE_ID_REV | |||||||
| DEVICE_ID4 | DEVICE_ID4 | |||||||
| DEVICE_ID5 | DEVICE_ID5 | |||||||
| DEVICE_ID6 | DEVICE_ID6 | |||||||
| DEVICE_ID7 | DEVICE_ID7 | |||||||
| CNT0_COUNT | CNT0_COUNT | |||||||
| CNT1_COUNT | CNT1_COUNT | |||||||
| CNT2_COUNT | CNT2_COUNT | |||||||
| CNT3_COUNT | CNT3_COUNT | |||||||
| CNT4_COUNT_LSB | CNT4_COUNT_LSB | |||||||
| CNT4_COUNT_MSB | CNT4_COUNT_MSB | |||||||
| CNT5_COUNT_LSB | CNT5_COUNT_LSB | |||||||
| CNT5_COUNT_MSB | CNT5_COUNT_MSB | |||||||
| CNT6_COUNT | CNT6_COUNT | |||||||
| CNT7_COUNT | CNT7_COUNT | |||||||
| CNT8_COUNT | CNT8_COUNT | |||||||
| CNT9_COUNT | CNT9_COUNT | |||||||
| CNT0_DATA | CNT0_DATA | |||||||
| CNT1_DATA | CNT1_DATA | |||||||
| CNT2_DATA | CNT2_DATA | |||||||
| CNT3_DATA | CNT3_DATA | |||||||
| CNT4_DATA_LSB | CNT4_DATA_LSB | |||||||
| CNT4_DATA_MSB | CNT4_DATA_MSB | |||||||
| CNT5_DATA_LSB | CNT5_DATA_LSB | |||||||
| CNT5_DATA_MSB | CNT5_DATA_MSB | |||||||
| CNT6_DATA | CNT6_DATA | |||||||
| CNT7_DATA | CNT7_DATA | |||||||
| CNT8_DATA | CNT8_DATA | |||||||
| CNT9_DATA | CNT9_DATA | |||||||
| WATCHDOG_TIMEOUT_DATA | WATCHDOG_TIMEOUT_DATA | |||||||
| WATCHDOG_OUTPUT_DATA | WATCHDOG_OUTPUT_DATA | |||||||
| WATCHDOG_STATUS | WATCHDOG_STATUS | |||||||
| PGEN_DATA_LSB | PGEN_DATA_LSB | |||||||
| PGEN_DATA_MSB | PGEN_DATA_MSB | |||||||
| STATE_MACHINE | RESERVED | CURRENT_STATE | ||||||
| STATE0_OUT | STATE0_OUT | |||||||
| STATE1_OUT | STATE1_OUT | |||||||
| STATE2_OUT | STATE2_OUT | |||||||
| STATE3_OUT | STATE3_OUT | |||||||
| STATE4_OUT | STATE4_OUT | |||||||
| STATE5_OUT | STATE5_OUT | |||||||
| STATE6_OUT | STATE6_OUT | |||||||
| STATE7_OUT | STATE7_OUT | |||||||
| VREF_ACMP0 | VREF_ACMP0 | |||||||
| VREF_ACMP1 | VREF_ACMP1 | |||||||
| VREF_ACMP2 | VREF_ACMP2 | |||||||
| VREF_ACMP3 | VREF_ACMP3 | |||||||
| VREF_McACMP0_0 | VREF_McACMP0_0 | |||||||
| VREF_McACMP0_1 | VREF_McACMP0_1 | |||||||
| VREF_McACMP1_0 | VREF_McACMP1_0 | |||||||
| VREF_McACMP1_1 | VREF_McACMP1_1 | |||||||
| VREF_McACMP2_0 | VREF_McACMP2_0 | |||||||
| VREF_McACMP2_1 | VREF_McACMP2_1 | |||||||
| VREF_McACMP3_0 | VREF_McACMP3_0 | |||||||
| VREF_McACMP3_1 | VREF_McACMP3_1 | |||||||
| VIRTUAL_INPUT | VIRTUAL_IN | |||||||
| VIRTUAL_OUTPUT | VIRTUAL_OUT | |||||||
| SER_COMM_CFG | RESERVED | ADDR_AUTOINC | ||||||
| CRC_STATUS | CRC_ERR_CNT | RESERVED | CRC_ERR_FLAG | |||||
| SER_COMM_WR_MASK | SER_COMM_WR_MASK | |||||||
可使用 DEVICE_ID 寄存器为每个设计创建一个标识。前 2 个 DEVICE_ID 寄存器由器件根据所选器件进行设置,例如,TPLD1202 在 DEVICE_ID0 中有 0x12,在 DEVICE_ID1 中有 0x02,而 TPLD2001在 DEVICE_ID0 中有 0x20,在 DEVICE_ID1 中有 0x01。Device_ID 4-7 在启动时加载,并配置了写入 InterConnect Studio 内系统设置的程序 ID。
从地址 0 开始到地址 7 是器件的标识符。例如,其中包括基于 TI 产品编号的器件 ID。TPLD1202 在地址 0x00 = 0x12 和地址 0x01 = 0x02 处有寄存器,其中 TPLD2001 分别配有 0x20 和 0x01。之后,在启动时将寄存器 DEVICE_ID 4-7 加载程序 ID。这意味着,从地址 0-7 读取数据是用户所创建的每项设计完全唯一的值。读取这些寄存器不仅能获知哪些器件正在使用,还能获知当前正在加载的设计。
CNTx_COUNT 寄存器是只读寄存器,能反映计数器块的当前计数。这可用于粗略估算计数器在达到零之前剩余的时长。请务必注意,此读取操作与实际计数器是异步的,因此根据读取值的时间,计数器可能会在通过通信协议返回值之前迭代。
CNTx_DATA 寄存器是读取/写入寄存器,能存储已写入 InterConnect Studio 中的控制数据值。这些值可动态更新,让用户能够调整 PWM 输出、增加/减少延迟以及调整块,例如动态频率检测器。
寄存器空间内的看门狗部分允许用户读取状态和调整看门狗计时器的超时时间和输出脉冲长度。WATCHDOG_STATUS 记录自启动以来或自上次读取以来触发看门狗的次数。该寄存器在被读取时复位。增加 WATCHDOG_TIMEOUT_DATA 中的值会增加在触发输出脉冲之前信号可以处于低电平的时间。增加 WATCHDOG_OUTPUT_DATA 的值会增加触发看门狗时的输出脉冲长度。
寄存器空间内的 STATE_MACHINE 部分允许用户控制当前状态并调整每种状态行为。SM_CURRENT_STATE 包含二进制格式的当前状态,单位为位 2-0。这是 R/W,因此不仅可读取当前状态,还可使用串行控制器强制状态机进入特定状态。本节还包含列示为 SM_S#_OUT_CFG 的状态输出。这样,控制器便可以调整该部分中任何给定状态的输出。
寄存器空间内的 VREF 部分允许用户调整进入多通道模拟比较器和独立模拟比较器 IN- 的值。此处写入的值不是 VREF 的值,而是 VREF 引用的值。在 TPLD2001 中,VREF 的步长为32mV,因此将值从 0x00 增加到 0x01 会将该基准从 32mV 更改为 64mV。
VIRTUAL_INPUT 寄存器用于存储进入 TPLD 器件的值。该寄存器用作器件的可选输入。其能代替引脚,扩大控制器的输出计数。
VIRTUAL_OUTPUT 寄存器能用于存储在任何给定时间从 TPLD 器件发出的值。与上述的早期 CNT_COUNT 寄存器类似,该寄存器的读取是异步的,因此在发出请求后和返回数据之前,这些值中的任一值可能会发生更改。
CRC_STATUS 寄存器用于检查器件是否已正确启动。CRC_ERR_CNT 段存储 CRC 过程在成功启动之前迭代的次数。TPLD 器件设计为在完全上电之前最多运行 8 个 CRC_ERR_CNT 值。如果该值为 8 且 CRC 校验失败,则 CRC_ERR_FLAG 将翻转为1。该寄存器可用于检查 TPLD 中的设计是否已成功加载,如果这些值是不可接受,则器件上电循环。如果器件再次启动失败,则对连接到 TPLD 的设计进行误差分析。
SER_COM_WR_MASK 寄存器可屏蔽未来任何的读取或写入。这可用于仅读取寄存器的下半部分或上半部分。不在屏蔽范围内的值全部由 TPLD 读取为 0 或作为 0 返回至控制器。
每个 TPLD 都有一组特定的、连接到串行通信的引脚,在外设添加到设计中时会对这些引脚进行初始化。欲了解 I2C 设置示例,可参阅 图 1。欲了解 SPI 设置示例,可参阅 图 2。
InterConnect Studio (ICS) 是一款用于设计、模拟和配置 TPLD 系列器件的软件工具。
图 3 显示了 InterConnect Studio 中 I2C 外设的初始设置。通过点击红色箭头指示的加号按钮,可以将 I2C 添加到设计中。外设地址是一个二进制值,可用于静态设置此 TPLD 设计的地址。外设地址下方是一个设置,能启用外部基于引脚的地址。许多 I2C 外设都配置了预定义的地址,但 TPLD 没有,而是使用这两个设置允许许多 TPLD 置于 I2C 总线上,但并不会相互干扰。通过启用基于引脚的地址,可以在通信开始时,使用引脚上存在的逻辑值覆盖外设地址。I2C 唯一的最后一项设置是全局复位侦听。当控制器发送复位命令时、全局复位侦听可以复位器件。
SPI 的选项较少,因为 SPI 不是如 图 4所示的可寻址协议。Virtual Inputs 的共享选项可允许器件查看 VIRTUAL_INPUT 寄存器。在某些 TPLD 系列器件中,虚拟输入代替某些引脚作为连接矩阵的输入,并查看数据表以阐明哪些输入无法一起使用。例如,在 TPLD1202 中,VIR_IN0 与 IO1共享,如 表 2 所示。这表示,如果选择了 VIR_IN0,则 IO1不能用作设计的输入引脚。
| 虚拟输入 | VIR_IN0 | VIR_IN1 | VIR_IN2 | VIR_IN3 | VIR_IN4 | VIR_IN5 | VIR_IN6 | VIR_IN7 |
| 数字输入引脚 | IO1 | IO2 | IO3 | IO4 | IO5 | IO6 | IO7 | IO9 |
I2C 的一个简单实现方式是将 TPLD1202 用作 I/O 扩展器,如 图 5 所示。三个引脚被用作数字输入,并被馈送到块的输入端。这些引脚将把值馈入 VIRTUAL_OUTPUT 寄存器中,在运行期间读取此寄存器。四个引脚用作器件的数字输出,并连接到 VIR_IN0、VIR_IN1、VIR_IN2 和 VIR_IN3。这些引脚能显示 VIRTUAL_INPUT 寄存器中存在的值,例如 pin4 (IO6) 能显示位 0,依此类推。
在默认情况下,PWM 以 50% 的占空比运行。KEEP 输入保持为高电平,因此除非覆盖 CNT_DATA 的值,否则占空比绝不会改变。
运行设置如 图 6 所示,其中不包括逻辑分析仪连接。TPLD-PROGRAM 用于更新设计,而无需烧录器件。消息传递期间,在 USB2ANY 内使用内部上拉电阻。
若要写入引脚 4 至 7,我们将值写入 VIRTUAL_INPUT 内部地址中(地址:0xE0)。可以在 图 7 中查看 USB2ANY explorer 设置,且可以在 图 8 中查看操作示例。在 Slave Address 框中输入的地址与设计不同,因为在 TPLD1202中,I2C 接收器仅使用 4 位、而 USB2ANY 使用一个 7 位地址。必须将输入的地址值从输入到 IC 的值向左移动 3 位,才能识别 TPLD。命令之间的唯一变化是在选择写入之前更改写入数据部分的值。
若要从引脚 0 至 2 读取数据,我们首先对寄存器 VIRTUAL_OUTPUT 进行空写(地址:0xE1),然后对器件执行读取命令。可以在 图 9 中查看 USB2ANY explorer 设置,且可以在 图 10 中查看操作示例
最后、若要调整 PWM,请将新值写入寄存器 CNT6_DATA (地址:0x26)。可以在 图 11 中查看 USB2ANY explorer 设置,且可以在 图 12 中查看操作示例
可在 表 3 中找到支持本文档的硬件
| 器件 | EVM |
|---|---|
| 所有 TPLD | TPLD-PROGRAM |
| TPLD1202 | TPLD1202-DYY-EVMTPLD1202-RWB-EVM |
| 不适用 | USB2ANY |