后防RAM不定态求助
查一下RAM的model,有些model会有initial block把所有单元设为X或0或rand,看看是否有macro控制这个initial block行为
跟踪了一下RAM的model,发现model中没有输入的组合。这种情况下可以修改model吗?module a4hvt_dff1_a1_func(Q,CK,D,SE,SELD,SI,notifier);
input CK,D,SE,SELD,SI;
output Q;
input notifier;
...
MGM_IQ_FF_UDP_HVT(IQ,1'b0,1'b0,CK,MGM_D,notifier);
...
endmodule
可以把MGM_IQ_FF_UDP_HVT(IQ,1'b0,1'b0,CK,MGM_D,notifier)改成MGM_IQ_FF_UDP_HVT(IQ,1'b0,1'b1,CK,MGM_D,notifier)吗?
MGM_IQ_FF_UDP_HVT的model如下:
primitive MGM_IQ_FF_UDP_HVT(Q,C,P,CK,D,N);
output Q;
reg Q;
input C,P,CK,D,N;
table
//CPCKDN:Q:Q
...
01???:?:1
...
endtable
endprimitive
是不是不满足setup/hold时序了,这个要找到具体原因,可能是隐藏的时序bug,主要还要仔细看后仿报告中的告警
我们现在仿真没带反标,所以不存在hold/setup问题。我追踪memory中的model,发现是复位之前输入信号D的不定态引起的model中没有对应的项。现在想在model中增加一项,在输入信号D为x的时候,就把输出置1,对应model如下:table
//CPCKDN:Q:Q
endtable
现在想请教下如何表示信号D为x?
谢谢
这样改不好吧,如果后面再出现不定态就为1了
后仿真阶段,对于RAM的不定态最好不要使用force,可能会隐藏问题。
我做后仿时,也遇到过RAM不定态,有几种情况你可以参考:
1、未加SDF反标。有可能是RAM的model跟前仿不一致,或者是前仿用sim RAM后仿用的是asic RAM。
2、加入SDF反标。很有可能是时序不满足。
3、这种情况比较少见,但是也不排除。仿真器对于0时刻采样的解释不一致导致。
以上是我遇到过的情况,仅供参考。