当前位置: 首页 > 热门 > 正文

Modelsim仿真问题解疑:初始时间段内逻辑不符

来源:哔哩哔哩    时间:2023-07-09 16:15:50

一、问题描述

在使用modelsim进行功能仿真时,会遇到如下情况,仿真结果在前面一段时间内的逻辑输出不符预期,后面的结果符合预期


(相关资料图)

以实现一个D触发器的逻辑为例

设计代码

功能简单,为一个异步清零的D触发器

测试代码,根据输入数据d时间点变化将输入进行了两轮的变动,一轮在100ns以前,第二轮在100ns之后

 综合结果

综合为FDCE,符合预期

 仿真结果

在红框1内,当ce=1,clr=0,输入数据d变化时,输出out一直为0,不符合预期逻辑,红框2内,在输出结果正确,clr为1时清零,输出为0,ce=1,clr=0时,out跟随d变化,符合预期

二、问题原因

仔细观察会发现,波形中多了一个全局复位信号GSR,在设计中是未体现的,该信号在100ns时进行了从1到0 的切换,切换之后,输出逻辑符合预期。

100ns来自何处?测试文件中未有设置,信号列表中选中该信号,点击鼠标右键,进入“Object Declaration”查看其来源。

GSR信号来源于FF_tb_func_文件的glbl模块,如下图,在125行定义了GSR信号,129行的initial模块中对GSR_int进行了赋值,初始值为1,等待ROC_WIDTH=100000(100ns)后状态变为0,符合前面的现象。

三、解决方法

比较容易想到的办法是直接修改FF_tb_func_中initial模块,但该模块是仿真前生成的,修改重新运行会被覆盖。此时可借用modelsim的force功能,将GSR信号强制置为0再运行。

操作:选中GSR信号,鼠标右键,执行restart将原有结果删除。

再选中GSR信号,选择“Force”,弹出下图弹框“Force Selected Signal”,在Value中将值改为1'h0,OK进行保存。

再将默认运行100ps修改为300ns,即运行300ns,最后执行run。如下图,GSR一直为低电平0,所以前100ns的结果也符合预期

X 关闭

原料

最近更新

Copyright ©  2015-2022 太平洋五金网版权所有  备案号:豫ICP备2022016495号-17   联系邮箱:93 96 74 66 9@qq.com