查阅了所有关于PLLRECONFIGURATION的资料(官方和非官方),发现说的都差不多,但是说的内容都是高高在上,一点都不接地气。让我这种学渣看的不清不楚迷迷糊糊。所以以下内容在于帮助像我一样的学渣一步一步的学会PLL RECONFIGURATION。
本文介绍的PLL动态重配置是通过动态更新ALTPLL IP内核中的参数实现。PLL IP内核中的参数又是通过ALTPLL RECONFIG IP、单口ROM和.Mif文件三者配合工作实现参数的更新。同时还设计了一个选择.mif的功能模块,可以通过拨码开关实现输出频率的改变。整个流程框图如下所示:
整个流程需要做三部分的工作:
第一步:生产用于放置不同频率参数的.mif文件
本文设计输出60M,80M,96M和120M四个不同的频率。所以.mif文件的命名分别为60M.mif,80M.mif,96M.mif和120M.mif。详细过程如下,以64M.mif为例。
-
新建一个工程:工程命名为:pll_reconfig_hty
-
新建.mif文件
-
更改位宽和数据个数
-
保存文件,保存时需要对文件中的数据进行修改才能保存。随便更改一个数据就可以了,后面整个文件都要更新的。文件命名为64M.mif
-
相同的方法生产80M.mif、96M.mif和120M.mif。
第二步:生产PLL IP 核,并重新配置.mif文件。
-
新建一个PLL ,命名为pll_sw;
在第6小步中在“inclock”中输入自己板子上FPGA的晶振频率,我使用的晶振频率是48M。所以输入“48”。
更改“7”“8”中的值,使“9”配置为60M。
重复“7”~“18”步,把剩下80M,96M和120M全部配置一下。配置完后,点击“Finish”。
第三步:为每个.mif文件生产对应的ROM,分别命名为:ROM_64M、ROM_80M、ROM_96M、ROM_120M。
-
生成ROM
第四步:生产ALTPLL_RECONFIGIP,IP命名为pll_reconfig_sw
第五步:设计顶层文件和频率选择功能模块程序文件。
1、顶层文件
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY pll_reconfig_hty IS
PORT
(
fpga_clk_in : IN STD_LOGIC;
fpga_reset_global : IN STD_LOGIC;
sel_control_in : INSTD_LOGIC_VECTOR(1 DOWNTO 0);
pll_clk_out0 : OUT STD_LOGIC
);
END pll_reconfig_hty;
ARCHITECTURE struct OF pll_reconfig_hty IS
----------------------------------------------------------------------------
---------------------------------PLL 信号------------------------------------
SIGNALreset_global :STD_LOGIC;
SIGNALreset_global_not : STD_LOGIC;