首页 > 其他分享 >【FPGA开发】Modelsim仿真精度的坑

【FPGA开发】Modelsim仿真精度的坑

时间:2024-10-09 21:22:31浏览次数:8  
标签:仿真 周期 FPGA Modelsim 单位 ns 精度 时钟

问题所在

       最近在使用黑金的AXU3EG板卡对着正点原子ZYNQ7020的例程进行移植学习。但在编写tb代码以及使用modelsim进行仿真时出了问题,发现我的实际波形与正点的对不上,仔细测量一下波形发现,我的系统时钟是6ns周期,而不是理想中的5ns周期,这才想到,正点的板子用的是50M单端时钟,也就是20ns的时钟周期,一半也就是10ns,而黑金的板子用的是200M的差分时钟,也就是5ns的时钟周期,一半也就是2.5ns(虽然我在编写tb代码时只用了其中一级),而正是这个小数出了问题!

       我开始时编写的tb代码中:

`timescale 1ns / 1ns       //仿真单位/仿真精度

...

initial begin
    sys_clk <= 1'b0;
    sys_rst_n <= 1'b0;
    #200
    sys_rst_n <= 1'b1;
end

always begin
    #2.5
    sys_clk <= ~sys_clk;
end

...

       时钟的翻转是我自己臆想的2.5ns翻一次,而实际上,由于仿真单位和仿真精度都是定义的1ns,也就是说,我对于时钟的翻转,最后会给优化为四舍五入的#3,即3ns,也就导致最后的时钟为6ns的周期。

问题的解决

       知道了问题的所在,解决起来就轻松了,只需要把仿真单位和仿真精度再提高一些就行了,而在ns后面的单位是ps,它们之间的进制也是1000,修改代码如下:

`timescale 100ps / 100ps       //仿真单位/仿真精度

...

initial begin
    sys_clk <= 1'b0;
    sys_rst_n <= 1'b0;
    #2000
    sys_rst_n <= 1'b1;
end

always begin
    #25
    sys_clk <= ~sys_clk;
end

...

       这里需要注意,不仅仅是只改变最上面的仿真单位和精度,下面使用#的所有延时都要同步的进行修改。

       然后继续进行仿真,发现由于修改了仿真单位和精度,最后的坐标轴变成了以ps为单位,这会把所有数都显得很大,不太美观,如下图所示:

在这里插入图片描述

       这时,我们只需要右键点击坐标轴,选择“Grid, Timeline & Cursor Control…”。

在这里插入图片描述

       再把Time units改回ns即可。

       这时再测量系统时钟,就是预期的5ns时钟周期了。

535ba202b48b0" style="zoom:33%;" />

标签:仿真,周期,FPGA,Modelsim,单位,ns,精度,时钟
From: https://blog.csdn.net/qq1016019583/article/details/142727018

相关文章