|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
本帖最后由 meijingguoyu 于 2010-11-8 15:33 编辑
请问大家,我在P&R之后用modelsim仿真遇到点问题,不知道该如何解决,希望哪位大侠能伸出援助之手,谢谢~
-------------------------------------------------------------------------------
----------------------------分割线---------------------------------------------
-------------------------------------------------------------------------------
问题1:
P&R是别人完成的,然后他给我P&R之后的netlist和sdf文件。
当我用modelsim 点simulate时,会有好多这样的error。
# ** Error: (vsim-SDF-3262) IT22_wc.sdf(24090): Failed to find matching specify timing constraint.
每次出现这样的error: 我都会把相对应的IT22_wc.sdf文件中的24090行的:
(RECOVERY (posedge RN) (posedge CK) (0.209138:0.209138:0.209138)) 给注释掉,这样的行有好多,都必须要注释掉的。
有的项目还有REMOVAL所在行也需要注释的。
都注释了后就可以正常仿真了。
请问这是什么问题啊,该如何解决,谢谢。
-------------------------------------------------------------------------------
----------------------------分割线---------------------------------------------
-------------------------------------------------------------------------------
问题2:
还有个问题就是我在P&R后仿真的话,会有setup timing的问题,如下:
# ** Error: D:/WORK/1505/Post_sim/tsmc25_new.v(5729): $setup( posedge RN:489 ps, posedge CK:966 ps, 1 ns );
# Time: 966 ps Iteration: 0 Instance: /tb/U_IT1505/U_RESET/disconnect_counter_reg_5_
# ** Error: D:/WORK/1505/Post_sim/tsmc25_new.v(5729): $setup( posedge RN:489 ps, posedge CK:966 ps, 1 ns );
# Time: 966 ps Iteration: 0 Instance: /tb/U_IT1505/U_RESET/disconnect_counter_reg_6_
# ** Error: D:/WORK/1505/Post_sim/tsmc25_new.v(5729): $setup( posedge RN:484 ps, posedge CK:966 ps, 1 ns );
# Time: 966 ps Iteration: 0 Instance: /tb/U_IT1505/U_RESET/disconnect_counter_reg_13_
..........
其中tsmc25_new.v是我用到的仿真库。 但是此类error我在用DC综合后(P&R之前)仿真时是没有的。请问该error如何解决啊。不知道是不是和我注释掉sdf文件里的RECOVERY 有关系啊。
我要是把相应的tsmc25_new.v里的5729行注释掉啊(我试过,这样的话就没有Timing问题了)。
相对应的RTL code如下:
always @ (posedge osc or posedge por) // osc是input clock, por是input power on reset signal
begin:
if (por)
disconnect_counter <= OSCCOUNTER ;
else if ( cki_8cycle )
disconnect_counter <= disconnect_counter + 1'b1 ;
else
disconnect_counter <= disconnect_counter ;
end
-------------------------------------------------------------------------------
----------------------------分割线---------------------------------------------
-------------------------------------------------------------------------------
问题3:
还有点就是FF的CK和RN之间的timing是如何定义的啊,FF的RN信号一有效就立马执行了,为啥还要和CK定义Timing啊,谢谢。
下面是仿真库tsmc25_new.v里关于DFFRX1的定义:
那位大侠能帮我解释一下我加粗的那行的timing定义啊,谢谢啦~~
`timescale 1ns/1ps
`celldefine
module DFFRX1 (Q, QN, D, CK, RN);
output Q, QN;
input D, CK, RN;
reg NOTIFIER;
supply1 xSN;
buf XX0 (xRN, RN);
buf IC (clk, CK);
udp_dff I0 (n0, D, clk, xRN, xSN, NOTIFIER);
and I4 (flag, xRN, xSN);
buf I1 (Q, n0);
not I2 (QN, n0);
specify
specparam
tplh$RN$Q = 1.0,
tphl$RN$Q = 1.0,
tplh$RN$QN = 1.0,
tphl$RN$QN = 1.0,
tplh$CK$Q = 1.0,
tphl$CK$Q = 1.0,
tplh$CK$QN = 1.0,
tphl$CK$QN = 1.0,
tsetup$D$CK = 1.0,
thold$D$CK = 0.5,
tsetup$RN$CK = 1.0,
thold$RN$CK = 0.5,
tminpwl$RN = 1.0,
tminpwl$CK = 1.0,
tminpwh$CK = 1.0;
if (flag)
(posedge CK *> (Q +: D)) = (tplh$CK$Q, tphl$CK$Q);
if (flag)
(posedge CK *> (QN -: D)) = (tplh$CK$QN, tphl$CK$QN);
$setuphold(posedge CK &&& (flag == 1), posedge D, tsetup$D$CK, thold$D$CK, NOTIFIER);
$setuphold(posedge CK &&& (flag == 1), negedge D, tsetup$D$CK, thold$D$CK, NOTIFIER);
(negedge RN *> (Q +: 1'b0)) = (tphl$RN$Q);
(negedge RN *> (QN -: 1'b0)) = (tplh$RN$QN);
$setuphold(posedge CK, posedge RN, tsetup$RN$CK, thold$RN$CK, NOTIFIER);
$width(negedge RN, tminpwl$RN, 0, NOTIFIER);
$width(negedge CK &&& (flag == 1), tminpwl$CK, 0, NOTIFIER);
$width(posedge CK &&& (flag == 1), tminpwh$CK, 0, NOTIFIER);
endspecify
endmodule // DFFRX1
`endcelldefine
-------------------------------------------------------------------------------
----------------------------分割线---------------------------------------------
-------------------------------------------------------------------------------
这几个问题我一直不理解,烦请大哥大姐们帮帮忙,小弟不胜感激~
谢谢啦! |
|