一、背景描述
二、Clocking Wizard IP核的配置
三、axi4lite寄存器摸索与配置
四、axi4lite的仿真参考学习
一、背景描述
在项目中,FPGA内部的用户时钟通常是由MMCM或者PLL生成,外部硬件管脚提供一个由晶振产生的固定的时钟频率,或者通过时钟芯片的某一路输出提供。在内部使用时钟IP,然后倍频、分频出所需要的用户时钟频率。一般而言,这个ip例化后,所输出的时钟频率的相位和频率也就确定了,无法修改。但是,在某些特殊的应用场景下,ip输出的时钟频率最多为7路,有时候需要切换不同的时钟来实现不同的IO速率应用场景。xilinx的时钟ip提供了两种动态配置方式,一种是DRP的接口,这种在GT serdes的模块中很常见,修改一系列底层寄存器,从而实现配置;另一种是axilite的接口,这种接口属于标准axi4协议,好处是可以与内部总线互联,然后开辟一段寄存器空间,开放给软件,由软件来修改内部寄存器,从而实现频率的动态修改。
二、Clocking Wizard IP核的配置
在IP核的配置中,笔者选择MMCM,当然PLL也可以,这个取决于芯片底层两个硬核的使用数量。其中需要选定AXI4Lite的选项,支持动态配置,DRP寄存器配置等。
从手册上来看,动态修改时钟频率是由axi4lite的寄存器到DRP寄存器的映射完成。但是笔者发现并没有axi4lite的寄存器描述,在xapp888 MMCM and PLL Dynamic Reconfiguration中提供了DRP的地址映射,所以如何通过axi4lite的寄存器来实现动态修改频率,是问题的症结。
三、axi4lite寄存器摸索与配置
在时钟IP的界面中有两个界面需要关注,一是Ouput Clocks,二是DRP Registers。
以clkout1输出200M,clkout2输出10M,此时在DRP Registers界面中会出现一系列的寄存器,其实也就是需要修改的axilite寄存器,至于如何映射给上层软件,需要FPGA开发者来切割寄存器空间。
将clkout1输出修改为100M,clkout2输出10M,此时在DRP Registers界面中部分寄存器发生改变。笔者并未深究这些寄存器具体的数值含义,有兴趣的可以结合xapp888手册中drp寄存器定义进行比对。
四、axi4lite的仿真参考学习
笔者建议如果想学习一些参考代码,不论是设计方面还是仿真方面的,可以从xilinx官方的example中去学习,比如axi4lite的仿真,其实就是axi4lite接口信号控制,只要摸清楚协议标准,就可以自己进行task封装任务,实现axi4lite的读写寄存器。如果是axi4lite寄存器的初始化,可以参考一些带axi4lite接口配置的ip,比如三速以太网IP,各种以太网IP中关于axi4lite接口初始化配置模块。
初始仿真Locked锁定时候,clkout1周期5ns,200M,clkout2周期100ns,10M,IP核的初始设置频率一致。
通过修改axi4lite寄存器后,Locked锁定时候,clkout1周期10ns,100M,clkout2周期100ns,10M。