Zynq-7000 PL端时钟详解
扫描二维码
随时随地手机看文章
1PL 时钟简介
PL 具有自己的时钟管理生成和分配功能,还从 PS 中的时钟发生器接收四个时钟信号,如下图所示。
PL 时钟生成
PS 产生的四个时钟彼此完全异步,与其他 PL 时钟没有关系。
这四个时钟来自 PS 中单独选择的 PLL。每个 PL 时钟都是独立的输出信号,可产生适合 PL 使用的时钟波形。
2时钟油门
四个 PL 时钟中的每一个都包含用于启动和停止时钟以及协助 PL 设计调试和协同仿真的逻辑。时钟节流行为由软件和来自 PL 的触发输入信号控制。
时钟节流功能包括:
-
软件控制下的启动/停止时钟
-
为预编程的脉冲数运行时钟
-
运行时钟并使用 PL 逻辑来暂停时钟脉冲
每个时钟节流阀都有一个 16 位计数器,该计数器针对要生成的时钟脉冲数进行编程。
对于连续时钟输出,向计数器写入 0,这是默认值,当前计数可由软件读取,PL 逻辑可以使用来自 PL 的FCLKCLKTRIGxN输入信号暂停计数和时钟脉冲,软件可以通过写入PL时钟控制寄存器来重新启动计时。
PL 时钟油门输入信号如下:
| 信号名称 | I/O | 描述 |
|---|---|---|
| FCLKCLKTRIGxN | I | PL 时钟触发信号是来自 PL 逻辑的输入,用于在对编程的时钟脉冲数进行计数时暂停(暂停)PL 时钟。暂停模式由FCLKCLKTRIGxN信号的上升沿(逻辑 0 到逻辑 1)进入, 该信号可以与 FCLK 和所有其他信号异步置位,当时钟连续运行时,该引脚没有影响,[LAST_CNT] = 0。 |
3时钟油门编程
示例:停止/开始时钟
此示例说明了使用写入节流计数寄存器slcr.FPGAx_THR_CNT [LAST_CNT]中的最后一个计数字段来停止和启动 PL 时钟 (FCLKCLKx) 的简单方法,该示例假设slcr.FPGAx_THR_CTRL寄存器保持其默认状态0x0000_0000。
- 停止时钟
将0x0000_0001写入slcr.FPGAx_THR_CTRL,立即停止时钟。
[LAST_CNT] = 1 [ReservedReserved] = 0
- 开始时钟
将 0x0000_0000 写入slcr.FPGAx_THR_CTRL以恢复连续时钟。
[LAST_CNT] = 0 [Reserved] = 0
示例:运行 592 个脉冲的 PL 时钟并停止
在本例中,将有 592 个时钟脉冲和停止,slcr.FPGAx_THR_CTRL [CPU_START]位是正沿触发以启动时钟。
- 启动启动时钟位
将 0x0000_0004 写入控制寄存器slcr.FPGAx_THR_CTRL。
[CPU_START] = 0 [CNT_RST] = 0 [Reserved] = 0x001
- 编程计数为 592
将 0x0000_0250 写入计数寄存器slcr.FPGAx_THR_CNT。
[LAST_CNT] = 0x0250 [Reserved] = 0
- 置位起始时钟位
将 0x0000_0005 写入控制寄存器slcr.FPGAx_THR_CTRL。
[CPU_START] = 1 [CNT_RST] = 0 [Reserved] = 0x001
示例:编程 592 脉冲并与 PL 触发器输入交互
在这个例子中,将有 592 个时钟脉冲被时钟触发信号暂停(FCLKCLKTRIGxN) 并由软件重新启动,slcr.FPGAx_THR_CTRL [CPU_START]位为正边沿触发以启动时钟。
-
启动起始时钟位
-
编程计数为 592
-
置位起始时钟位
-
PL 逻辑暂停时钟(HALT 状态):逻辑置位 FCLKCLKTRIGxN 输入以停止时钟时钟。
-
启动起始时钟位





