背景: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、通过分析信号波形,得出实验结果和理论一致。
|