【FPGA】高云FPGA之IP核的使用->PLL锁相环

FPGA开发流程

1、设计定义

使用高云内置IP核实现多路不同时钟输出

输入时钟50M由晶振提供

软件开发环境高云V1.99版本

硬件开发环境采用小梅哥ACG525(主芯片GW5A-LV25-UG324C2)

2、设计输入

创建好工程后我们点击IP核配置,然后搜索PLL,这里我们可以使用的模块是PLL_ADV

配置我们的输入时钟以及IP核心文件名字以及模块名字

然后依次在上方tab栏中设置需要输出的时钟频率



最后点击计算然后点击OK

添加到工程,然后在我们的顶层文件中实例化我们的IP核并连接输入输出信号

bash 复制代码
module clock_test(
    input clk_in_50m,
    output clk_out_10m,
    output clk_out_25m,
    output clk_out_75m,
    output clk_out_100m
);


myclock myclock_test(
        .clkout0(clk_out_10m), //output clkout0
        .clkout1(clk_out_25m), //output clkout1
        .clkout2(clk_out_75m), //output clkout2
        .clkout3(clk_out_100m), //output clkout3
        .clkin(clk_in_50m) //input clkin
    );

endmodule

3、分析和综合

当逻辑输入设计完成后需要对其进行验证,该部分由软件部分进行验证,如果逻辑输入有问题需要检查语法错误或则重新设计设计输入

4、功能仿真

当分析和综合通过后应该进行功能性验证,针对项目设计定义的功能使用设计的逻辑输入验证其功能能否实现,一般的做法都是通过功能仿真的方式进行验证,比如软件逻辑分析仪,modelsim、vivado等软件自带的仿真工具进行仿真验证

功能仿真也称为行为仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟,主要是验证电路与理想情况是否一致。也可以叫做RTL仿真(test bench)

首先编写我们的仿真时序文件

bash 复制代码
`timescale 1ns / 1ps

module clock_test_tb();

reg sys_clk;
wire clk_out_10;
wire clk_out_25;
wire clk_out_75;
wire clk_out_100;

// 对pll_test_ds进行例化操作
clock_test Myclock(
        .clk_in_50m(sys_clk),           // 模拟50MHZ
        .clk_out_10m(clk_out_10),       // 模拟输出10MHZ
        .clk_out_25m(clk_out_25),       // 模拟输出25MHZ
        .clk_out_75m(clk_out_75),       // 模拟输出75MHZ
        .clk_out_100m(clk_out_100)      // 模拟输出100MHZ
    );

initial begin  
    sys_clk = 1'b0;   // 初始化
end

always #10 sys_clk = ~sys_clk;//10ns之后将时钟进行翻转(即说明20ns为一个周期) 1/20ns = 1/2*10^(-8) =  5*10^7 = 50MHz 产生50MHz的时钟

endmodule

创建我们的modsim文件进行时序查看,这里需要注意我们需要吧IP核生成的文件也添加进仿真工程编译

库这边需要选择安装时编译的高云库

然后我们查看波形

可以看到波形满足我们时序要求跟我们设定的频率在运行;

5、布局布线

当我们的IO可以开始分配了我们首先需要分配IO,如果当前还没到IO分配的时候我们可以将IO分配放在最后,当IO分配完成后我们就可以通过软件进行布局布线,在芯片内部生成芯片电路

6、时序仿真

时序仿真也称为布局布线后仿真,是指电路已经映射到特定的工艺环境以后,综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想的过程,能较好地反映芯片的实际工作情况,当时序仿真不通过的时候可能还会设计到时序约束的一个过程(在比较复杂的设计中也需要用到);这个在上一个步骤(功能仿真中)我们已经完成了时序仿真的波形查看

7、IO分配以及配置文件(bit流文件)的生成

如果在布局布线时未进行IO分配在该步骤进行IO分配并生成BIT流文件,这里我们直接查看小梅哥给出的excel文档,填写我们需要输出的时钟引脚;


bash 复制代码
//Copyright (C)2014-2023 Gowin Semiconductor Corporation.
//All rights reserved. 
//File Title: Physical Constraints file
//Tool Version: V1.9.9 (64-bit)
//Part Number: GW5A-LV25UG324C2/I1
//Device: GW5A-25
//Device Version: A
//Created Time: Fri 02 02 09:37:52 2024

IO_LOC "clk_out_100m" C17;
IO_PORT "clk_out_100m" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "clk_out_75m" G14;
IO_PORT "clk_out_75m" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "clk_out_25m" F14;
IO_PORT "clk_out_25m" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "clk_out_10m" C18;
IO_PORT "clk_out_10m" PULL_MODE=NONE DRIVE=8 BANK_VCCIO=3.3;
IO_LOC "clk_in_50m" T9;
IO_PORT "clk_in_50m" PULL_MODE=NONE BANK_VCCIO=3.3;

到这里软件的模拟仿真验证就完成了最后是烧录到板子上进行测试验证

8、配置(烧录)FPGA

时序通过了后需要通过硬件进行验证也就是最后一步的实物验证

9、在线调试

当系统出现问题运行不正常我们可以通过外部硬件示波器或者逻辑分析仪进行实际引脚信号抓取分析




相关推荐
仲南音2 天前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner2 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20203 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy3 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia3 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20203 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子3 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安4 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun5 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd
千寻xun5 天前
二、实战篇-NVME SSD控制之ZYNQ实现(三)
fpga开发·nvme ssd·nvme协议