zoukankan      html  css  js  c++  java
  • 赛灵思S6器件族PLL_Reconfiguration---利用RAM随时随地配置

    Xilinx S6 PLL 重配置工程概述

    一.思路说明

    官方配置过程:官方大概是这么配置的,在rom中初始化2组参数,通过顶层模块的STTEP和STATE以及SRDY信号控制配置过程。上电后等待SRDY有效(1clk)之后,使能STTEP(1clk),在STTEP有效的前提下,判断STATE的值是1或者0,从而选择哪组参数有效,实际上最终是由状态机来完成对PLL寄存器读写的,状态机请参考pll_drp_modify.v文件。

    修改说明:由于我们要动态配置PLL,且要求灵活性较高,故采用RAM的存储数据,这样便不需要指定两组或者多组参数了,且将参数的值例化为顶层模块的输入,使用的时候可以用单片机配置fpga的寄存器,单片机计算相关参数的数值通过协议发送给fpga,由FPGA最终完成配置,参数的计算,请参考官方的pll_drp_func.h文件,工程已经转换为.c文件供参考。

    二.使用说明

    使用工程下的C计算参数参考文件中的<参数计算_exc_pll_cal.c>文件,传入对应的值后就可以运行得到相关的参数,然后将这些参数写入到fpga对应的测试文件中,目前仿真已测试。

    三.部分C函数使用说明

    1. void s6_pll_lock_lookup(u8 divide, LOCK * p);

    使用说明:该函数主要是设置值PLL检测锁存的能力,第一个参数用来设置CLKFBOUT+MULT的属性,取值范围:1-64,第二个参数是传入结构体的地址,因为这个是40bit的,由32bit+8bit构成,这里用了结构体数据类型。

    1. u16 s6_pll_filter_lookup(u8 divide, char *p);

    使用说明:该函数会影响PLL相位的偏移和抖动的过滤能力,其主要实现查表,Xilinx官方提供了64个数据的表格,根据第一个参数来查找相应的数据,取值范围:1-64,第二个参数是PLL的带宽值,取值范围:HIGH, LOW, AND OPTIMIZED,但是实际上只有两个值,因为HIGH,和OPTIMIZED是一样的,返回值采用u16接收,其实有效数据位只有10bit。

    1. u32 s6_pll_count_calc(u8 divide, s32 phase, u32 duty_cycle);

    使用说明:该函数用来计算分频或者倍频、相位和占空比的参数。第一个参数取值范围:1-128,第二个参数取值(-360°  ~ +360)*1000:第三个参数取值:(0-1)*100_000,返回值用u32接收,其有效数据位只有14bit+9bit有效。

    四.参数计算说明

    以下是官方顶层文件中的例化实例,我加了一下注释:

    输出转换关系:

    输出频率    :(反馈系数 / 设置输出的系数)* 输入时钟 (注:假设输入分频为1)

    输出相移    :数值 / 1000

    输出占空比:数值 / 100_000

    官方参数计算说明,当上图的参数传入后,对应的参数是怎么计算的,如下图:

    前5个都是计算反馈的相关参数的,是调用用官方提供的.h文件进行计算,传入的参数参照名字。

    参考xx.h文件,设计了参数计算_exc_pll_cal.c文件,该计算方法是参照上图的使用规则,举例:

    前5行是反馈系数的计算,后面的6行是输出时钟的参数计算,实际运用中,应该接收函数的返回值,这里并没有接收,是不正确的使用方法,之所以这么用,是因为我在函数中加了打印注释信息,可以根据打印信息去调试,实际运用要接收函数的返回值。

    一.附录

    实际工程中,在测试文件中加入了如下调试信息,如下所示:

    运行modelsim后,写入到temp中的数据:

    xx.c文件打印的调试参数:

    可以看到和上面的一样,可以用官方的计算参数和xx.c运行之后的结果比对,验证计算后数据的正确性。

    备注:关于PLL配置的其他相关资料请查看Xilinx官方的文档。

    需要工程文件请向博主索要,欢迎大家讨论,转贴请注明出处,谢谢。欢迎大家一起交流,Q群:912014800。

                                          --------------------cofin_add

  • 相关阅读:
    [LeetCode] Min Stack
    [LeetCode] Find Minimum in Rotated Sorted Array
    [LeetCode] Maximum Product Subarray
    [Jobdu] 题目1504:把数组排成最小的数
    [Jobdu] 题目1544:数字序列区间最小值
    Python2.3-原理之语句和语法
    Python2.5-原理之模块
    Vim2.1-Vim简明教程【CoolShell】【非原创】
    Python2.6-原理之类和oop(下)
    QT1.1-与Opencv的hello world
  • 原文地址:https://www.cnblogs.com/cofin/p/6825689.html
Copyright © 2011-2022 走看看