找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4745|回复: 0
收起左侧

FPGA学习笔记之嵌入式锁相环模块ALTPLL的配置和调用

[复制链接]
ID:113276 发表于 2016-4-10 14:47 | 显示全部楼层 |阅读模式
背景: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、通过分析信号波形,得出实验结果和理论一致。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表