码迷,mamicode.com
首页 > 其他好文 > 详细

门仿真经验+sdf反标不成功--待补充

时间:2021-06-30 18:14:51      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:程序   define   out   tput   原因   mod   red   set   过程   

门级仿真经验(SDF反标及其工作原理)_verybing的专栏-CSDN博客_sdf反标

门级仿真经验(SDF反标及其工作原理)
Standard Cell的仿真模型:首先我们先看一个stand cell的仿真模型
一般情况下,仿真模型包括两个部分,一个部分是功能部分也就是这个standcell的功能,可以用udp元件或者逻辑功能做表述,第二个部分是时序反标和时序检查部分,这部分主要是提供sdf反标时序,和timingcheck的类型,并且通过系统函数告知仿真者和改变输出值。
`timescale 1ns/1ps
`celldefine
module DFFXL (Q, QN, D, CK);
output Q, QN;
input D, CK;
reg NOTIFIER;//时序检查系统函数和udp功能真值表之间的联系寄存器
supply1 xSN,xRN;
//下面是这个时序cell的功能描述,由元件,udp,逻辑操作组成。
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….endspecify是对基本门级元件输入输出端口的时延描述,称为延时说明块。延时说明块是module中一个独立结构。
specify
specparam//对一些代表时量的延时参数进行定义
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,
tminpwl$CK = 1.0,
tminpwh$CK = 1.0,
tperiod$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);
//借助时序检验系统任务对模块输入输出时序进行时序检验,一旦发现时序违规,仿真程序就会对违规触发标志位NOTIFIER //反转一次(如果是第一次违规报警,NOTIFIER其被之为1),这会通知udp使输出为X
$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);
$width(negedge CK &&& (flag == 1), tminpwl$CK, 0, NOTIFIER);
$width(posedge CK &&& (flag == 1), tminpwh$CK, 0, NOTIFIER);
$period(posedge CK &&& (flag == 1), tperiod$CK, NOTIFIER);
endspecify
endmodule // DFFXL
`endcelldefine
下面我们接着看一个udp是如何构成的,输入产生输出的,如何和时序检验系统函数进行联系的,其中udp(User Defined Primitives)元件的定义是通过真值表的形式来进行的,可以用真值表来描述组合逻辑UDP和时序逻辑的UDP的逻辑功能。该模块主要由primitive … endprimitive界定。如下:
primitive udp_dff (out, in, clk, clr_, set_, NOTIFIER);
output out;
input in, clk, clr_, set_, NOTIFIER;//NOTIFIER来自时序检验系统函数,注意UDP定义的端口只能是一位宽度的标量类型
reg out;
//真值表的格式:
table
// in clk clr_ set_ NOT : Qt : Qt+1
//
0 r ? 1 ? : ? : 0 ; // clock in 0
1 r 1 ? ? : ? : 1 ; // clock in 1
1 * 1 ? ? : 1 : 1 ; // reduce pessimism
0 * ? 1 ? : 0 : 0 ; // reduce pessimism
? f ? ? ? : ? : - ; // no changes on negedge clk
* b ? ? ? : ? : - ; // no changes when in switches
? ? ? 0 ? : ? : 1 ; // set output
? b 1 * ? : 1 : 1 ; // cover all transistions on set_
1 x 1 * ? : 1 : 1 ; // cover all transistions on set_
? ? 0 1 ? : ? : 0 ; // reset output
? b * 1 ? : 0 : 0 ; // cover all transistions on clr_
0 x * 1 ? : 0 : 0 ; // cover all transistions on clr_
? ? ? ? * : ? : x ; // any notifier changed
//注意-表示输出状态保持不变,?表示输入任意状态,b表示输入端任意状态(不包括X),*表示输入端的任意变化
//从最后一行我们可以看出一旦NOTIFIER发生了任意变化输出端将会输出X!!
endtable
endprimitive // udp_dff

 

后仿过程中sdf文件反标不成功 - 第2页 - FPGA/ASIC/IC前端设计 - EETOP 创芯网论坛 (原名:电子顶级开发网) -

后仿过程中sdf文件反标不成功

SDF 有分版本, 例如 2.1/3.0, 檢查一下 sdf 寫出的 format 是否與 cell verilog model 一致.

 您好,之前看过这个问题,分析了SDF的格式和lib库里的格式,有很多可能的原因,例如ck--->Q的iopath,写出来的sdf里有posedge信息,而库里没有,也就是两者关系不一致,肯定标不上。再例如,A---Q的iopath,sdf与库里的cond 描述格式不一致,也标不上。只要两者格式改成一致的,就可以标上了。这些在pt_userguide里其实有描述,要求sdf的格式与lib的格式完全一致才能标的上,如果标不上,工具会标最悲观的delay或transition到网表中。

门仿真经验+sdf反标不成功--待补充

标签:程序   define   out   tput   原因   mod   red   set   过程   

原文地址:https://www.cnblogs.com/zhiminyu/p/14952897.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!