在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜帖子
楼主: come_on_sn

[求助] vivado行为仿真和时序仿真,时序图差别很大

[复制链接]
 楼主| 发表于 2022-3-4 08:54:23 | 显示全部楼层


   
jinj198908 发表于 2022-3-3 09:28
问题出在这里,布线后定时仿真这个参数是无法传进去的,使用的是top文件里默认的1s,如果你有足够耐心的话 ...


OTZ!!!
感谢感谢,对我是很大的帮助!!!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-4 09:13:12 | 显示全部楼层


   
jinj198908 发表于 2022-3-3 09:28
问题出在这里,布线后定时仿真这个参数是无法传进去的,使用的是top文件里默认的1s,如果你有足够耐心的话 ...


前辈您好,我把testbench改成下面的,但还是不行

`timescale 1ns/100ps
//`define CLOCK_PERIOD 10     //单位ns
//`define CLOCK_FREQ 100      //100_000_000   

module flash_led_top_tb();      
                 reg rst;
                 reg sw0;
                 wire [15:0] led;
                 wire [3:0] an;                     //4个数码管使能信号
                 wire [6:0] seven_segment;
                
                 parameter CLOCK_PERIOD = 10;
                 parameter CLOCK_FREQ = 100;
                
                 // Generate 100 MHz clock
        reg clk = 0;
//        always #(`CLOCK_PERIOD/2) clk = ~clk;
          always # CLOCK_PERIOD clk = ~clk;

                   flash_led_top #( .CYCLES_PER_SECOND(CLOCK_FREQ) )
                      inst_flash_led_top(
            .clk( clk ),
            .rst( rst ),
            .sw0( sw0 ),
            .led( led ),
            .an( an ),
            .seven_segment( seven_segment )
            );

                 initial begin
                         rst = 1'b0;
                         sw0 = 1'b0;
                         #10;
                         rst = 1'b1;
                         #10;
                         rst = 1'b0;
                         repeat(20 * CLOCK_FREQ) # CLOCK_PERIOD;                                 //20次后改变位移方向
                         sw0 = 1'b1;
                 end

endmodule

这是布线后定时仿真的截图

image.png




回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-4 09:38:00 | 显示全部楼层
本帖最后由 come_on_sn 于 2022-3-4 09:54 编辑


   
come_on_sn 发表于 2022-3-4 09:13
前辈您好,我把testbench改成下面的,但还是不行

`timescale 1ns/100ps


而且很奇怪,我直接在top里面把参数改为100,还是不行

(哦,我有点傻,忘了重新implement了,用的还是旧的布线信息)
image.png
回复 支持 反对

使用道具 举报

发表于 2022-3-4 10:31:05 | 显示全部楼层
本帖最后由 jinj198908 于 2022-3-4 10:34 编辑


   
come_on_sn 发表于 2022-3-4 09:13
前辈您好,我把testbench改成下面的,但还是不行

`timescale 1ns/100ps


改testbench是没用的,这里的参数是无法传进去的,仿真的话必须改top文件里的参数
PS:你可以想一下,在实际情况中,你怎么可能通过这种方式将一个参数直接就传给FPGA了
回复 支持 1 反对 0

使用道具 举报

发表于 2022-3-4 10:33:16 | 显示全部楼层


   
come_on_sn 发表于 2022-3-4 09:38
而且很奇怪,我直接在top里面把参数改为100,还是不行

(哦,我有点傻,忘了重新implement了,用的还是旧 ...


我把你的top文件里的参数改成1ms时就能很快看到了(在1ms的位置),不改的话得等到仿真1s后才能看到,但这个等待时间会很长,你无聊的话可以等等看
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-3-4 10:59:34 | 显示全部楼层


   
jinj198908 发表于 2022-3-4 10:31
改testbench是没用的,这里的参数是无法传进去的,仿真的话必须改top文件里的参数
PS:你可以想一下,在实 ...


明白了明白了,感谢前辈为后学解惑,感谢感谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-4 11:00:54 | 显示全部楼层


   
jinj198908 发表于 2022-3-4 10:33
我把你的top文件里的参数改成1ms时就能很快看到了(在1ms的位置),不改的话得等到仿真1s后才能看到,但 ...


哈哈哈,这个问题解决了,谢谢谢谢~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-4 11:06:58 | 显示全部楼层


   
jinj198908 发表于 2022-3-4 10:33
我把你的top文件里的参数改成1ms时就能很快看到了(在1ms的位置),不改的话得等到仿真1s后才能看到,但 ...



下面是布线后定时仿真截图,能问下为什么会出现中间状态吗?这是亚稳态现象的反映吗?

image.png

不知前辈是否有空帮忙解惑下,后学万分感激!
回复 支持 反对

使用道具 举报

发表于 2022-3-4 12:19:22 | 显示全部楼层


   
come_on_sn 发表于 2022-3-4 11:06
下面是布线后定时仿真截图,能问下为什么会出现中间状态吗?这是亚稳态现象的反映吗?


这个应该算是竞争冒险,你看一下综合出来的实际电路就知道了,这个计数器的每个BIT都是通过一些组合逻辑(LUT)计算出来的,然后再到D触发器,这就导致每个BIT实际计算出来的时间是不完全一致的(LUT和布线延迟,CLK到每个D触发器的延迟也不一致),所以出现了竞争冒险(即中间状态),对你这个项目实际影响不大,因为在下个CLK来之前数据已经稳定下来了,满足setup时间;但是如果你的组合逻辑太大,LUT的级数过多,延迟超过了一定的时间,导致在下个CLK来之前数据还没稳定,就会出问题,也就是常说的时序违例。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-6 20:35:04 | 显示全部楼层


   
jinj198908 发表于 2022-3-4 12:19
这个应该算是竞争冒险,你看一下综合出来的实际电路就知道了,这个计数器的每个BIT都是通过一些组合逻辑 ...



明白了,谢谢前辈的解惑,原理上也明白很多
另外还想请教您两个问题:
1、竞争冒险和亚稳态之间有什么联系或者区别呢?
2、在实验中怎么观察亚稳态现象呢?

谢谢~

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-8-21 19:04 , Processed in 0.018023 second(s), 4 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表