在线咨询 切换到宽版
eetop公众号 创芯大讲堂 创芯人才网

 找回密码
 注册

手机号码,快捷登录

手机号码,快捷登录

搜全文
查看: 9968|回复: 24

[求助] icg在pre_sim的网表仿真中出现x的原因?

[复制链接]
发表于 2021-12-19 15:18:09 | 显示全部楼层


   
赵旭东 发表于 2022-1-28 03:52
你好,它附近的代码是这样子的,如下面的几个图。


初始的时候应该没有timing violation。应该是primitive latch的Verilog model有漏洞,造成了初始时G2内部latch信号int_res_iq变成X。
附上前面贴过的primitive latch Verilog model,和C家的比较一下,就比较容易看出问题了。第一列v对应的只有1或x, 没有0!  
再结合前面贴过的waveform,一起分析一下。
在t=20 (100fs) 的时候,G2 int_res_prectrl 发生 0->1 变化, primitive latch的输入变为v=0, clk=1, d=0。 这个组合在primitive latch的表中是不存在的。 根据Verilog LRM (IEEE1364-2005, 109页),仿真时如果出现表中不存在的输入组合时,primitive的输出变为X。

Picture1.png
Picture2.png
Picture3.png
回复

使用道具 举报

发表于 2021-12-19 22:43:31 | 显示全部楼层
初始状态是否时钟为高?这种状态下 ICG 处于未初始化状态,输出为 X
回复

使用道具 举报

发表于 2021-12-22 22:19:02 | 显示全部楼层
"其它的latch和这个latch相同的输入,其它的latch就不会出现x" -- en, te, clk完全一样吗? 如果完全一样,为什么不合并成一个?感觉应该有细微差别。

“后面的逻辑再返回来作为这个icg(latch)的输入的en,类似于一个圈,但是后面的逻辑是时序相关的” -- 时钟为低,ICG latch 打开,ICG output = en & clk = 0, 后面逻辑里的 DFF 没有时钟,不会改变状态。如果没有 reset 过,DFF 的输出为X,返回到 ICG en = X。 时钟变高时,en = X 被锁进 ICG 的 latch,ICG output = latched en & clk,因为 latched_en = X,ICG output = X,后面逻辑的 DFF 得到的时钟为 X,DFF 的状态为 X,返回到 ICG en 依然为 X。

这个电路需要引入reset 初始化后面逻辑的 DFF
回复

使用道具 举报

发表于 2022-1-2 11:51:57 | 显示全部楼层
本帖最后由 jake 于 2022-1-1 22:01 编辑


   
赵旭东 发表于 2022-1-1 20:27
你好,非常感谢您的分析,您说的情况确实是出现x的原因的一种。       但是现在我遇到的情况很奇 ...


但是现在我遇到的情况很奇怪,跟你描述的不太一致,也就是说尽管是个圈,但是在出现x之前所有的输入信号都是正常有数值的,没有x出现。  这个出现x的时刻的原因像您说的一样:这个icg里面有个latch,在从一开始到第一个时钟上升沿来这段时间,这个latch的输出一直是xlatch一直是通的状态),这个输出的x和输入的时钟经过与门输出,但因为之前一直是clk的低电平,与门有00,所以这段时间icg的输出一直为0,但当clk为高电平时与门把这个x输出了出去。看波形仿真分析是这样的。也就是这个x出现的时刻是可以这么解释的

1. 但是在出现x之前所有的输入信号都是正常有数值的,没有x出现
2. 这个icg里面有个latch,在从一开始到第一个时钟上升沿来这段时间,这个latch的输出一直是xlatch一直是通的状态)
如果latchclk低电平打开,那么从初始到到一个时钟上升沿这段时间,latch是打开的,latch的输出应该等于en。如果所有输入信号都是正常逻辑值(x)en也是正常逻辑值,这段时间latch的输出不可能是x
结论就是这个latch比较特殊,是clk高电平打开,而不是clk低电平打开。

下面是一个常用的ICG,这里的latch在低电平的时候是打开的。
有的库里有另一种ICGlatch接时钟的pin没有这个这个小圈圈,表示latch是高电平时候打开。出问题的ICG可能是这一种。

附上另一种ICG做参考,里面是一个高电平打开的latch + OR  


CLK low, latch open

CLK low, latch open

CLK high, latch open

CLK high, latch open
回复

使用道具 举报

发表于 2022-1-7 14:22:09 | 显示全部楼层
从“网表仿真不同的latch对比图片.jpg”来看,有两个信号是明显不同的。
1. int_res__prectrl
G1为0,G2为1。说明G1, G2的SE, EN值是不一样的。估计G1一开始就是EN=0, 而G2一开始EN=1。

2. int_res_iq
G1为0,G2为x。问题发生在int_res_iq变成x的地方。在波形里往左走,一直到找到int_res_iq刚变成x的地方,比较G1, G2的信号有何不同。Debussy/Verdi 有个功能就是在Verilog里显示当前光标所在时间的值。把这个功能打开,就可以在右边的窗口里看到信号的值。比较G1,G2在int_res_iq变成x同一时间信号有何不同。
回复

使用道具 举报

发表于 2022-1-13 23:54:32 | 显示全部楼层
G2 里面的 primitive latch 有问题。 在 delayed_CK 0->1, int_res__CK 1->0 的时候,int_res__prectrl 应该被锁住,这里没有,int_res_iq 依然是 X。
在standard cell verilog model文件中找一下 primitive latch,应该有一个表,决定latch的状态,贴上来研究一下。也许这个表做得有点问题。
G2_ICG_x_latch_issue.png
回复

使用道具 举报

发表于 2022-1-14 11:24:09 | 显示全部楼层
table 前三列对应v, clk, d; 第四列对应 q 当前的状态; 第五列对应 q 的新状态。
在 int_res__CK failling edge 之前,clk=1, d=1, 59580 这一行应该被执行。但实际上这一行并没有被执行。唯一的可能就是仿真从 time = 0 一直到光标位置,clk, d 的 level 一直没有变化,simulator 一直不需要查这个 table 进行赋值。等到 clk 变低,59583 这一行被执行,q 状态不变,int_res_q 继续为 X。

在 waveform 里查一下 G2 的 CK, EN 从 t=0 到光标处是否一直没有变化 (CK=0, EN=1)。 如果是这样,问题就在这里了
回复

使用道具 举报

发表于 2022-1-14 20:12:57 | 显示全部楼层


   
赵旭东 发表于 2022-1-14 05:57
你好,查了一下,这个更奇怪了,出x的在时间上前面d信号从0变成1,一开始两个的对比图如下。
...


waveform 和 Verilog 对不起来,感觉显示的 Verilog 不是被执行的那一段。
在 waveform 里双击 0->X 那个边沿,Verdi 会跳到真正被执行的 Verilog

回复

使用道具 举报

发表于 2022-1-17 10:34:02 | 显示全部楼层


   
赵旭东 发表于 2022-1-16 20:18
你好,这个确实是那个latch对应的verilog,点了0->x的部分,对应的图片如下

...


这个像是工具报了timing violation。
在Verilog里往下看,Timing那一段,看有没有什么地方把int_res_iq置为X

回复

使用道具 举报

发表于 2022-2-13 00:19:35 | 显示全部楼层
本帖最后由 jake 于 2022-2-12 13:52 编辑


   
赵旭东 发表于 2022-2-12 01:18
您分析的挺对的,第一列无0,所以在primitive中没有这个entry,所以输出了x,但是在T=20(100fs)时v=0, ...


可以跟G1对比一下。G1 primitive latch输入没变化, 输出保持为0。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

手机版| 小黑屋| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-9-19 04:12 , Processed in 0.022486 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表