背景:Quartus II 13.0sp1(64-bit)、Modelsim SE-64 10.1c、DE2-70
目的:今天我们通过一个实验来认识和初步使用锁相环模块ALTPLL,实验的内容是将输入的50Mhz的时钟信号经过锁相环模块ALTPLL,输出一路25MHz的分频信号、一路100MHz的倍频信号和一路有3ns相移的50Mhz的时钟信号。 说明:我们有三种方式可以验证实验的正确性,一种方法是通过DE2-70开发板,将三路输出信号映射到FPGA的引脚,通过示波器观察,验证结果;另外一种方法是利用SignalTapII Logical Analyzer进行验证;第三种方法是编写激励块,在软件QuartusII中调用Modelsim SE进行仿真验证实验的正确性。本实验会给出激励块,在仿真环境ModelsimSE中验证实验结果。 前两种方式基于FPGA硬件设备,第三种方式可以在无硬件的条件下验证实验的正确性!! 1、配置锁相环模块ALTPLL: 1) 打开QuartusII软件,选择菜单栏Tool-->Mega Wizard Plug-In Manager,选择Create a newcustom megafunction,意为创建一个新的宏功能模块,然后单击Next; 2) 在弹出的界面中,右上角选择器件系列和输出文件类型(此处选择CycloneII和Verilog),在左边框栏中选择IO文件夹下的ALTPLL,最后选择输出文件保存路径和文件名,按如图所示设置后,点击Next; 3) 在新弹出的界面中,设置输入时钟inclk0的频率为50MHz(因为DE2-70开发板的输入时钟为50Mhz),设置devicespeed grade为6,这个参数与具体芯片的型号有关,其他保持默认,然后点击Next; 4)设置输入输出信号。在弹出的界面中,按照如图所示设置,其中OptionalInput项目下面包含”pllena(使能端,高电平有效)”、”areset(异步清零端,高电平有效)”、”pfdena(相位/频率检测器的使能端,高电平有效)”,为了方便操作,我们只选择了areset异步清零端;同时LockOutput项目下,选择”locked”,通过这个输出端口可以判断锁相环是否失锁,高电平表示正常; 5)单击Next两次,在弹出的界面中设置三个输出信号c0、c1、c2的参数(频率、相位和占空比)。设置输出信号c0的频率为25MHz,相移为零,占空比为50%,c1的频率为50MHz,相移为4ns,占空比为50%,c2的频率为100MHz,相移为零,占空比为50%,按照如图进行设置: 说明:可以通过分频因子和倍频因子设置输出信号频率,也可以直接输入输入信号频率,具体使用哪种方法,根据个人爱好! 需要选中Use thisclock,图片中忘记标记!! 6)设置输出文件类型。设置完c0、c1、c2输出信号的频率、相位和占空比等参数后,点击两次Next,在新弹出的界面中选择需要的输出文件格式。 说明:MyPll.v文件是我们建立的实例模块,需要在顶层模块中调用,所以系统默认选中; MyPll_inst.v文件展示了在顶层模块中引用的方法; MyPll.bsf文件与原理图有关; 每个人可以根据自己的需要选择文件,一般情况下保持默认即可!! 7)点击Finish,配置完毕。 2、新建顶层文件,引用刚才生成的MyPll.v文件,同时编写激励块文件,进行相关设置。 说明:关于如何建立工程、生成激励块文件,可以参考我的另一篇博文! 1)新建工程,并编写顶层模块,命名为My_Pll_Top.v具体代码如下所示: moduleMy_Pll_Top(areset,inclock0,c0,c1,c2,locked); inputareset,inclock0; outputc0,c1,c2,locked; MyPll MyPll_inst( .areset(areset), .inclk0(inclock0), .c0(c0), .c1(c1), .c2(c2), .locked(locked)); endmodule 2)编写激励块文件,具体代码如下: `timescale 1 ns/ 1 ps moduleMy_Pll_Top_vlg_tst(); regareset; reginclock0; wirec0; wirec1; wirec2; wirelocked; My_Pll_Top i1( .areset(areset), .c0(c0), .c1(c1), .c2(c2), .inclock0(inclock0), .locked(locked) ); initial begin areset =1'b1; # 100 areset = 0; # 1000$stop; $display("Runningtestbench"); end always begin inclock0 = 1'b0; inclock0 = #10 1'b1; #10; end endmodule 2)将之前生成的MyPll.v文件加入到当前项目,然后对整个工程进行编译,直到编译通过。 3、进行仿真测试,验证实验结果。 1)首先在QuartusII中对仿真环境进行设置(具体设置可以参考里一片博文); 2)选择菜单栏Tools-->Run Simulation Tool-->RTLSimulation,等待一会,系统会自动打开Modelsim SE仿真环境。 3)实验结果如图所示,通过各个信号的波形,可以观察到输入信号inclock0和输出信号c0、c1、c2之间的关系: a、100ns之后,areset变为低电平,大约90ns之后,输出信号正常; b、输入信号inclock0的频率为50Mhz, 输出信号c0的频率为25Mhz,c1的频率为50Mhz,c2的频率为100MHz; c、输入信号inclock0和c0、c2同相位,同占空比,输出信号c1相位滞后3ns; d、通过分析信号波形,得出实验结果和理论一致。
|