Quartus 调用PLL IP核仿真

Quartus 调用PLL IP核仿真

本文简要介绍在Quartus中调用PLL IP核进行仿真。PLL(Phase Lock Loop)是锁相环,简单地说就是能够将一种频率的信号转换为另一种频率的信号。本文主要介绍PLL IP核的产生,Test Bench文件的编写和对IP核的仿真。
运行环境:
- Quartus:Quartus Prime Version 16.0.0 in Linux
- Simulation: ModleSim-Altera

生成PLL IP核

  1. 首先新建一个空的项目,此处较为简单,省略。这里的项目名称为pll_simulation_test,如下图。

  2. 编写顶级文件。因为是空的项目,所以没有包含顶级文件,编译的话会出错。新建一个Verilog HDL File,输入以下简单的内容:

module pll_simulation_test(
        input wire clk  //clock signal
);
endmodule   
将其保存名为`pll_simulation_test.v`的文件。然后`Processing -> Start Compilation`开始编译。编译的过程需要花点时间,耐心等待一下。编译完成之后如下图:
3. 产生PLL IP 核。在Quartus的右边找到IP Catalog,如果没有此界面的话的话,点击`View -> Utility Windows -> IP Catalog`即可出现。如下图所示:

找到Altera PLL,并点击“Add”,弹出如下窗口:

给PLL IP核取名字,这里是my_pll,点击OK。出现IP核的设置界面。

在这里我取消勾选“Enable locked output port”,即让输出只有一个。另外将“Reference Clock Frequency”设置为25.0MHz。点“Finish”完成。

“Exit”之后会弹出一个对话框,询问是否将my_pll.qip文件添加到工程。这里选择”Yes”。

至此,PLL IP Core产生完成。

Tip:你可以将项目导航切换到Files,看看是否有以下文件。

双击“my_pll.v”可以看到PLL IP 核的声明。

编写Test Bench文件

接下来我们开始编写一个简单测试文件。
首先新建一个Verilog HDL Files,取名为my_pll_tb.v

  // File: my_pll_tb.v
  // Author: ZHUO Zengsi
  // Date: 2016-10-20
  // Function: This test bench file is to test the simulation of
  // PLL IP Core.

  `timescale 1ns/1ps

  module my_pll_tb();

    reg clk;                  // the reference clock signal, 25MHz
    reg rst;                  // the reset signal
    reg unsigned [3: 0] cnt;      // the count of clk, maximum is 15
    wire clk_out;         // the output signal with 100MHz

    my_pll init_my_pll_0(
        .refclk(clk),     // refclk.clk
        .rst(rst),        // reset.reset
        .outclk_0(clk_out)// outclk0.clk
    );

    initial
    begin
        clk = 1'b0;       // make initial value be 0
        rst = 1'b1;   // make initial value be 1
        cnt = 4'b0001;    // make initial value be 1
        #20 rst = 1'b0;   // after 20ns reset finished
    end

    always #20 clk = ~clk;   //reverse the signal every 20ns.

    always @(posedge clk)
    begin
        cnt <= cnt + 1;   // when the clk rise, cnt will increment 1
        if (cnt == 0)     // if cnt is 16, stop the simulation.
            $stop();
    end

  endmodule 
接下来设置仿真环境。打开“Assignments -> Settings”,点击“Simulation”出现如下界面。

在“Tool Name”中选择“ModelSim-ALtera”,选中“Compile test bench”,按照我们写的Test Bench文件来仿真,所以点击“Test Benches”。出现以下界面。

点击“New”新建一个Test Bench,如下图。

这里输入“Test bench name”为my_pll_tb,并在“File ame”中选中刚才编写的my_pll_tb.v文件。
然后“OK”回到上一个界面,再“OK”回到设置界面。

此时,在“Compile test bench”中出现刚下新建的Test Bench了。点击“OK”,仿真环境搭建完成。

## 仿真结果 接下来我们开始仿真。点击“Tools -> Run Simulation Tool -> RTL Simulation”开始仿真,仿真出现如下结果。

仿真的结果中出现四个信号,其中分别为时钟信号clk,重置信号rst,计数信号cnt以及输出信号clk_out,如下图。

在Test Bench文件中,我们延迟了20ns之后将重置信号置为0,这时候PLL开始正常运行。输入信号clk的频率为25Mhz,输出信号clk_out的频率为100MHz。当cnt的值为16时,停止仿真。总的仿真时间为620ns。

  • 9
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值