Quartus基本IP核调用及仿真

一.PLL

PLL介绍

PLL全称Phase Locked Loop,也就是锁相环,是一种反馈控制电路。PLL对时钟网络进行系统级的时钟管理和偏移控制,具有时钟倍频、分频、相位偏移和可编程占空比的功能。PLL一般由模拟电路所实现。
在这里插入图片描述
PLL是FPGA重要的资源,不同FPGA的PLL 是不一样。以我们开发板的Cyclone IV为例,它有两个PLL,每个PLL可以提供5路输出。
PLL 的时钟输入可以是PLL 所在的 Bank 的时钟输入管脚或者其他 PLL 的输出,FPGA 内部产生的信号不能驱动PLL。Cyclone IV PLL 产生的时钟可以为单端时钟信号或差分时钟信号, 可以通过GCLK 网络直接驱动 FPGA 外部的 IO 口。

PLL的IP核调用

打开Quartus软件,新建一个项目后(命名为test_IP),在界面的最右侧,可以看见一个IP Catalog的栏目,在这里有很多的IP核可以供我们选择使用在这里插入图片描述
我们在这里需要选择PLL
在这里插入图片描述
资源比较多,可以在搜索栏搜索,双击选择ALTPLL后出现如下弹窗
在这里插入图片描述
点击…选择文件保存路径,这里使用我们创建工程文件夹里面的ip文件夹,将文件命名为pll.v,点击OK
在这里插入图片描述
我使用的是Cyclone IV系列的EP4CE6F17C8,只有一个50MHZ的晶振,时钟频率选择50MHZ就可以了,选择正常模式就可以了
在这里插入图片描述
选择创建一个’areset’输入异步重置锁相环
在这里插入图片描述
这一步默认就好了
在这里插入图片描述
Next
在这里插入图片描述
Next
在这里插入图片描述
原时钟频率为50MHZ,这里选择100MHZ,相当于把时钟倍频,占空比50%

在这里插入图片描述
第二个时钟,25MHZ,选择分频,且相位偏移90°,占空比50%
在这里插入图片描述
第三个时钟,5MHZ,占空比为25%
在这里插入图片描述
第四个时钟,先分频再倍频,75MHZ,占空比50%
这里只使用了4个时钟,第五个时钟不勾选
在这里插入图片描述
Next
在这里插入图片描述
选择生成pll_inst.v和pll_bb.v文件,点击Finish
现在PLL的相关资源已经添加到项目中了,在Quartus软件左侧选择IP Components就可以看见我们添加的pll了(其他IP核在后面介绍)
在这里插入图片描述

PLL仿真

我们可以自己编写例化
例如我们编写test_IP.v文件例化PLL模块

module test_IP(
    input           clk     ,//时钟信号
    input           rst_n   ,//上电复位低有效
    output          c0      ,
    output          c1      ,
    output          c2      ,
    output          c3      ,
    output          locked  ,
);
// //PLL
    pll	pll_inst (
    	.areset ( ~rst_n ),//IP复位高有效
    	.inclk0 ( clk    ),//输入时钟
    	.c0     ( c0     ),//输出时钟
    	.c1     ( c1     ),//输出时钟
    	.c2     ( c2     ),//输出时钟
    	.c3     ( c3     ),//输出时钟
    	.locked ( locked ) //时钟输出锁--锁定不稳定时钟输出
    	);
endmodule

再编写一个测试文件

`timescale 1ns/1ps
module test_tb();

    reg             clk         ;
    reg             rst_n       ;
    wire            c0          ;
    wire            c1          ;
    wire            c2          ;
    wire            c3          ;
    
//例化要仿真的文件
test_IP u_test_IP(
    .clk        (clk        ),//时钟信号
    .rst_n      (rst_n      ),//上电复位低有效
    .c0         (c0         ),
    .c1         (c1         ),
    .c2         (c2         ),
    .c3         (c3         ),
    .locked     (locked     )
);

always  #10     clk = ~clk;//产生50M仿真时钟

integer i = 0,j = 0;//用于产生地址,写入数据

initial begin
    clk = 1'b1;
    rst_n = 1'b1;
    #200.1;
    rst_n = 1'b0;//主动产生上电复位
    #200;
    rst_n = 1'b1;

    #20000;
    $stop;
end

endmodule

编译仿真:

二.RAM

RAM介绍

RAM的英文全称是Random Access Memory,即随机存取存储器,它可以随时把数据写入任一指定地址的存储单元,也可以随时从任一指定地址中读出数据。其读写速度是由时钟频率决定的。RAM主要用来存放程序及程序执行过程中产生的中间数据、运算结果等。其特点适合双向交换数据。

其他类型的寄存器:

  • ROM(Read-Only Memory):只读存储器,系统上电后数据就被写入ROM,运行过程中智能从ROM中读取数据,而不能改变ROM中的数值。
  • FIFO(不寻址,操作简单)适合数据缓冲或跨时钟域数据同步处理;

总结:RAM、ROM、FIFO都是FPGA提供的存储单元

RAM的IP核调用(单时钟)

同样在IP Catalog中搜索RAM
在这里插入图片描述
双击选择RAM:1-PORT,同样保存在ip文件夹下,命名为RAM_1port.v
在这里插入图片描述
选择数据位大小,以及数据深度
在这里插入图片描述
在这里插入图片描述
Next
在这里插入图片描述
Next
在这里插入图片描述
同样勾选RAM_1port_inst.v和RAM_1port_bb.v文件

RAM仿真(单时钟)

同样,先例化
test_IP.v

module test_IP(
    input           clk     ,//时钟信号
    input           rst_n   ,//上电复位低有效
    input           rden    ,
    input           wren    ,
    input   [7:0]   address ,
    input   [7:0]   data    ,

    output  [7:0]   q
);

//RAM_1port
    RAM_1port	RAM_1port_inst (
        .aclr       ( ~rst_n    ),
     	.address    ( address   ),
     	.clock      ( c
  • 20
    点赞
  • 159
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值