野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8836|回复: 3

仿真时序逻辑不打拍的现象

[复制链接]
发表于 2021-9-26 21:58:28 | 显示全部楼层 |阅读模式
野火的教程时说到,当表达时序逻辑时如果时钟和数据是对齐的,则默认当前时钟沿采集到的数据为在该时钟上升沿前一时刻的值。但我在做仿真的时候发现有时采集的数据为时钟上升沿之后的值。经试验比较之后得出结论:如果数据是在 testbench initial 块中通过延时赋予的,那采集到的确实是时钟上升沿之后的值;如果是在模块中写的时序逻辑,采集的数据为上升沿前一时刻的值。
试验如下:key1 和 key2 分别按照上述两种方法变化,赋值给 out1 和 out2,观察波形变化:
野火论坛202109262157127155..png
野火论坛202109262157219364..png
野火论坛202109262157312981..png
以后做仿真的时候需要注意这个问题。
有没有大佬知道产生这种情况的原因,或者某手册上有说明这个情况,希望得到解答!
回复

使用道具 举报

 楼主| 发表于 2021-9-27 08:56:10 | 显示全部楼层
本帖最后由 dxb 于 2021-9-27 08:57 编辑

知道怎么解决这个问题了,但还是希望大佬说明一下深层的原因。
问题出在 testbench 文件的编写上,在该文件中所有 sys_clk 都采用 "=" 阻塞赋值,两种赋值方式都会有“打一拍”的现象。
回复 支持 反对

使用道具 举报

发表于 2021-9-27 15:15:12 | 显示全部楼层
这里有个非官方的介绍文档,你可以参考看一下,希望对你有所帮助

仿真文件中的阻塞和非阻塞.pdf

774.79 KB, 下载次数: 26

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-7 22:45:17 | 显示全部楼层
本帖最后由 dxb 于 2021-10-8 08:56 编辑
Hhyt 发表于 2021-9-27 15:15
这里有个非官方的介绍文档,你可以参考看一下,希望对你有所帮助

你好,我又发现了新的问题。
当 rtl 文件中时序逻辑的敏感条件为 pll 输出的上升沿(即 always @(posedge pll_clk...) )时,还是出现了同样的问题,即采集到上升沿之后的值。而仿真文件只是对 sys_clk 进行阻塞赋值,因此不能利用之前的办法解决。请问有什么好方法吗? 野火论坛202110072245528139..png
C:\Users\dongx\Desktop\Snipaste_2021-10-07_22-44-01.png
图为在时钟上升沿将 data 的值赋给 TBPRD_S,没有出现打一拍的情况。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-29 09:50 , Processed in 0.033127 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表