芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 335|回复: 0

无需重新编译,纯verilog设计中如何通过JTAG动态控制时钟

[复制链接]

该用户从未签到

75

主题

105

帖子

1587

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1587
发表于 2024-12-20 15:50:35 | 显示全部楼层 |阅读模式
【前言】
在verilog设计中,我们常常会面临需要修改PLL输出时钟的情况,一旦进行修改,便需要重新编译等待较长时间。而clock wizard核是支持动态重配置的,因此,只需结合xilinx提供的JTAG to AXI Master核,便能够使用JTAG,通过AXI4接口去动态重配置clock wizard,进而实现无需编译,就能修改PLL输出时钟。

【设计实现】

设计的实现十分简单,只需将clock wizard设置为动态重配置,并添加JTAG to AXI Master核。为了方便使用,建议使用BD来实现。
BD系统.png PLL配置.png


【配置方法】

JTAG to AXI Master核的控制需要通过TCL指令实现,为了方便大家操作,这里已经提前为大家写好了TCL脚本。
[C#] 纯文本查看 复制代码
proc ReadReg { Addr } {
set address [format "0x%08X" $Addr]
create_hw_axi_txn read_txn [get_hw_axis hw_axi_1] -address $address -type read
run_hw_axi  read_txn
set read_value [lindex [report_hw_axi_txn  read_txn] 1];
delete_hw_axi_txn read_txn
set tmp addr=0x
append tmp $address
append tmp , data=0x
append tmp $read_value
return $tmp
}

proc WriteReg { Addr data } {
set address [format "0x%08X" $Addr]
set data [format "0x%08X" $data]

create_hw_axi_txn write_txn [get_hw_axis hw_axi_1] -address $address -data $data -type write
run_hw_axi  write_txn
set write_value [lindex [report_hw_axi_txn  write_txn] 1];
delete_hw_axi_txn write_txn
}

# 请根据硬件设置PLL基地址
set baseaddr 0x44A00000

# ------------------------------------------------------
# PLL寄存器配置表请参考下帖
# 如何使用AXI4接口对PLL/MMCM输出时钟的频率和相位进行动态重配置
# [url=https://www.corecourse.cn/forum.php?mod=viewthread&tid=29747]https://www.corecourse.cn/forum.php?mod=viewthread&tid=29747[/url]
# (出处: 芯路恒电子技术论坛)
# ------------------------------------------------------

# 以下为示例,配置CLK0为20分频
# 配置完成后续要向0x25c偏移地址写入0X03配置才会生效

WriteReg [expr {$baseaddr + 0x00000208}] 0x14
WriteReg [expr {$baseaddr + 0x0000025c}] 0x03


使用时,只需要根据系统修改clock wizard的基地址,然后按照格式修改对应寄存器即可。PLL的寄存器说明可以参考下帖:

根据clock wizard的要求,配置完成后,还需向偏移地址为0x25c的寄存器写入0x3,配置才会生效。编写完TCL脚本后,只需在Tools中,运行脚本即可
运行TCL脚本.png
运行过脚本后,用户也可以在TCL中使用封装好的WriteReg指令和WriteReg指令读写寄存器,指令格式参考如下:
[C#] 纯文本查看 复制代码
WriteReg 0x44A00208 0x14
ReadReg 0x44A00208

读写指令.png


【效果演示】

PLL 50M输入时钟;VCO20倍频,1分频;clk_out1 10分频,输出100M时钟
100M.jpg

运行脚本后,修改clk_out1 为20分频,输出50M时钟
50M.jpg


【附件】
clock_recofig.rar (479.57 KB, 下载次数: 55)
PLL_RD_WR.tcl (1.26 KB, 下载次数: 54)



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

GMT+8, 2025-2-5 15:55 , Processed in 0.080079 second(s), 34 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表