仿真的时候最主要的细节是啥?

描述

仿真是我们在验证逻辑功能的常用手段。通过仿真,我们可以提早发现一些隐含的逻辑Bug。仿真一般分为功能仿真和时序仿真,有的时候也称作前仿真和后仿真。这两者的主要区别是在功能仿真里暂时忽略了逻辑延时和布局布线延时,仿真的模型相对简单,仿真的运行速度更快。

可以用来验证功能的正确性。时序仿真通过反标的方式将加入延时信息,这样仿真的结果更接近实际芯片的工作情况。但正因为如此,时序仿真的模型更为复杂,需要计算的信息更多,运行的时间更长。一般情况下,我们首先通过逻辑仿真验证功能,然后再运行时序仿真验证时序的正确性。

当然现在也有一些做法是在做功能仿真的时候,人为的设定一些延时,虽然不能百分之百的拟合实际的芯片运行情况,但可以覆盖大多数的应用场景。带来的好处是仿真的运行比时序仿真要快很多。

各个EDA公司都有自己的仿真工具,针对FPGA/CPLD来说,用的比较多的是Modelsim和Aldec。无论用哪个仿真工具,有一个细节经常会被初学者会忽略。在设计好testbench后,编译都没有问题,但在开始仿真的时候,软件会报类似这样的错误:

Fatal Error: ELAB2_0036 Unresolved hierarchical reference to“PUR_INST.PURNET” from module“tb_cdr_tb.UUT.top_cdr_u.receive_top_u.serial_data_in.FF_3” (modulenot found)。

Fatal Error: ELAB2_0036 Unresolved hierarchical reference to“GSR_INST.GSRNET” from module “tb_cdr_tb.UUT.top_cdr_u.receive_top_u.serial_data_in.FF_3”(module not found)。

这是因为在芯片工作的时候,内部有PUR(Power Up Reset)和GSR(Global Set/Reset)模块产生上电复位信号和接入全局复位/置位信号。这个信号在做综合的时候是自动生成并加入的设计中的,但在仿真的时候编译并不会加入这两个模块。所以如果要做仿真,一定要在你的testbench中加入这样一段描述:

PUR PUR_INST(.PUR(1‘b1));

GSRGSR_INST(.GSR(1’b1));

本站资讯文章系编辑转载,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!

[声明]本站文章版权归原作者所有 内容为作者个人观点 本站只提供参考并不构成任何投资及应用建议。

本站拥有对此声明的最终解释权。

编辑;jq

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分