仿真是我们在验证逻辑功能的常用手段。通过仿真,我们可以提早发现一些隐含的逻辑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));
这样就可以继续你的仿真工作了。
文章出处:【微信公众号:FPGA之家】
责任编辑:gt
-
芯片
+关注
关注
453文章
50366浏览量
421650 -
仿真
+关注
关注
50文章
4037浏览量
133396
原文标题:仿真的时候不要忘了PUR和GSR
文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论