王德福 Wonderful

通过 VIO 实现 Si5345 的配置

2019-06-17 · 3 min read
实验室经验

用了这么多的开源代码,今天总算是页做出了自己的贡献,可以发一个自己的开源工程

这个工程主要是通过 VIO 配置一款 PLL 芯片

Si5345

因为工程需要,在板上设计了一个 PLL—— Si5345,详细参数就不讨论了,这个芯片可以通过 I2C 或者 SPI 进行配置,在板子设计的时候就想着通过 Xilinx 的 VIO 来进行配置,所以没有放置其他的调试接口,事实证明这样是可行的,但是还是太年轻,因为 Si5345 官方提供了烧写器套件,只要按照官方的设计,就可以花 800 多块钱买一套烧写器,直接通过 USB 配置,推荐以后的新设计都使用官方的开发套件,可以节约不少时间。

Xilinx VIO

VIO 的全称是 Virtual IO,是通过在 FPGA 中生成一个虚拟的 接口 Core,这个 Core 可以设置输入输出,然后通过 JTAG 就可以和电脑进行通讯,从而实现对 FPGA 的控制。这样的优点就是节约了一个调试接口,省了空间和时间,同时接口的宽度和数量都比较灵活,易于调试,再结合 Debug Core 可以轻松的调试逻辑;当然缺点就是接口速度很慢很慢,基本上只能够实现电平控制,如果要脉冲控制的话就自己写上升沿或者下降沿检测电路。

VIO 结合 tcl 语言可以实现自动化的数据发送和读取的工作

tcl

用了这么多年的 FPGA 真不该忽略 Xilinx 提供的 tcl 工具,可以实现很多测试的自动化,在 配置 tcl 的时候主要用到了四条 Vivado 定制的 tcl

前两条是想 VIO 写数的脚本,注意数据的位宽一定要对,tcl 是比较简单的语法,不会对数据进行智能转换。

set_property OUTPUT_VALUE $RegData_real [get_hw_probes si5345_reg_wr_value_from_vio_w]
commit_hw_vio [get_hw_probes {si5345_reg_wr_value_from_vio_w}]

后两条是读取 VIO 的语法,一定要先刷新再读。

refresh_hw_vio [get_hw_vios {hw_vio_1}]
set is_busy [get_property INPUT_VALUE [get_hw_probes si5345_spi_busy_to_vio_w]]

工程介绍

GitHub Si5345 VIO Config 中已经介绍得明明白白,直接下载看使用说明即可。


欢迎关注我的语雀和公众号
MyQR

本文采用 BY-NC 协议

署名-非商业性使用 (BY-NC):只要在使用、公开时进行署名,那么使用者可以对本创作进行转载、节选、混编、二次创作,但不得将本创作或由本创作衍生的创作运用于商业目的。