使用高云内置IP核实现多路不同时钟输出
输入时钟50M由晶振提供
软件开发环境高云V1.99版本
硬件开发环境采用小梅哥ACG525(主芯片GW5A-LV25-UG324C2)
创建好工程后我们点击IP核配置,然后搜索PLL,这里我们可以使用的模块是PLL_ADV
配置我们的输入时钟以及IP核心文件名字以及模块名字
然后依次在上方tab栏中设置需要输出的时钟频率
最后点击计算然后点击OK
添加到工程,然后在我们的顶层文件中实例化我们的IP核并连接输入输出信号
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
当逻辑输入设计完成后需要对其进行验证,该部分由软件部分进行验证,如果逻辑输入有问题需要检查语法错误或则重新设计设计输入
当分析和综合通过后应该进行功能性验证,针对项目设计定义的功能使用设计的逻辑输入验证其功能能否实现,一般的做法都是通过功能仿真的方式进行验证,比如软件逻辑分析仪,modelsim、vivado等软件自带的仿真工具进行仿真验证
功能仿真也称为行为仿真,主旨在于验证电路的功能是否符合设计要求,其特点是不考虑电路门延迟与线延迟,主要是验证电路与理想情况是否一致。也可以叫做RTL仿真(test bench)
首先编写我们的仿真时序文件
`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核生成的文件也添加进仿真工程编译
库这边需要选择安装时编译的高云库
然后我们查看波形
可以看到波形满足我们时序要求跟我们设定的频率在运行;
当我们的IO可以开始分配了我们首先需要分配IO,如果当前还没到IO分配的时候我们可以将IO分配放在最后,当IO分配完成后我们就可以通过软件进行布局布线,在芯片内部生成芯片电路
时序仿真也称为布局布线后仿真,是指电路已经映射到特定的工艺环境以后,综合考虑电路的路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想的过程,能较好地反映芯片的实际工作情况,当时序仿真不通过的时候可能还会设计到时序约束的一个过程(在比较复杂的设计中也需要用到);这个在上一个步骤(功能仿真中)我们已经完成了时序仿真的波形查看
如果在布局布线时未进行IO分配在该步骤进行IO分配并生成BIT流文件,这里我们直接查看小梅哥给出的excel文档,填写我们需要输出的时钟引脚;
//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;
到这里软件的模拟仿真验证就完成了最后是烧录到板子上进行测试验证
时序通过了后需要通过硬件进行验证也就是最后一步的实物验证
当系统出现问题运行不正常我们可以通过外部硬件示波器或者逻辑分析仪进行实际引脚信号抓取分析