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

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: SKILLER

[求助] RTL上板验证部分不通过

[复制链接]
发表于 2013-3-22 08:35:01 | 显示全部楼层
和代码风格有关。
 楼主| 发表于 2013-3-22 15:21:19 | 显示全部楼层
回复 8# genus001


    这就怪了,没有理论依据啊!!!
 楼主| 发表于 2013-3-22 15:25:45 | 显示全部楼层




    是这样的,插入不定太的话,就不会综合成相应的电路,因此占用的面积就自然小了,但是会有警告!如果default项里放的不是不定太的话,会综合成相应的电路,而不是被忽略掉!
其实可以不写default项,然后综合的时候添加"//synthesis full case"
发表于 2013-3-22 19:00:34 | 显示全部楼层
本帖最后由 Timme 于 2013-3-22 19:01 编辑


想请教一下RTL中插入连不定态会怎么样?
以前公司的教育是:default里尽量放不定态,有利于减小综合 ...

orlye 发表于 2013-3-22 07:49



对假如去除default就变成非full case的case语句,default赋不定态有两种情况:

1. default会被击中。则后续如遇到不定态终止(如if-else),则可能造成前后仿不一致。

2. default不会被击中。此时
(2.1)首先你得花大量精力去保证,该default确实不会被击中。
(2.2)该段逻辑在每次综合时的功能可能不一样,降低了Silicon Proven的价值。比如,你的前仿环境遗漏了击中Default的情况(有Bug未被发现),流片版本1中恰好被综合成没有Bug的逻辑(Bug被彻底掩盖),流片完反复测试后你认为该代码是Golden的。好了现在流片版本2,该段代码被综合成Bug会被击中的逻辑。。。


对假如去除default就是full case的语句,default赋不定态是标准的做法。这样不会造成不定态插入,只是不定态传播。

如果full case不写default,则会造成不定态终止。
发表于 2013-3-22 22:01:41 | 显示全部楼层


对假如去除default就变成非full case的case语句,default赋不定态有两种情况:

1. default会被击中。 ...
Timme 发表于 2013-3-22 19:00




对于你说的2.1,我觉得既然设计成default不会被击中,那前仿验证者有义务花
大量精力去验证,该default确实不会被击中。
对于2.2,我感觉你的意思就是,default放固定值,万一前仿有遗漏、芯片仍然存在bug时,
能有更高概率能避免bug的触发。
但事实上,default放固定值,前仿时肯定是不利于X的传播,不利于bug的暴露的。

对于default该放什么,公司的教育是尽量要放X,但我看很多IP,无论大公司
还是小公司的,似乎更多是放固定值的,以至于我很困惑到底怎样比较好。
发表于 2013-3-22 22:20:33 | 显示全部楼层
本帖最后由 Timme 于 2013-3-22 22:37 编辑


对于你说的2.1,我觉得既然设计成default不会被击中,那前仿验证者有义务花
大量精力去验证,该defa ...
orlye 发表于 2013-3-22 22:01



default放固定值是不能考虑的,因为会不定态终止。

我的建议是把case补全为full,再加default赋不定态;如果case直接补全为full不现实,则用一些变通的手段达到相同的效果。

这样也有个麻烦就是会带来击不中的语句,需要加SVA确保这些语句确实未被击中,不过不是什么大问题。要彻底解决只能不用case。。。

2.2的意思是保证silicon proven是有效的,假如任意一次流片回来测不到bug,就可以断定代码在未来的综合中也没有bug。(这个对IP来说尤为重要)

ARM 10年前的paper没有对情况2提出太多的异议,也没有提到2.2,但实际上近年Cortex代码里已经基本不用case语句了(基本上就保留jtag状态机在用,full case + default x)。

ARM以外的软IP很多代码风格都乱七八糟,不建议效仿。。。
发表于 2013-3-23 13:28:41 | 显示全部楼层


default放固定值是不能考虑的,因为会不定态终止。

我的建议是把case补全为full,再加default赋不定 ...
Timme 发表于 2013-3-22 22:20




那问个具体的吧,比如说状态机,很难全case吧,特别是one hot编码的状态机,default里放什么好?

> 近年Cortex代码里已经基本不用case语句了(基本上就保留jtag状态机在用,full case + default x)
你的意思是jtag以外的状态机都不用case写了?还是连状态机都不用了?
发表于 2013-3-23 13:51:49 | 显示全部楼层
本帖最后由 Timme 于 2013-3-23 13:54 编辑


那问个具体的吧,比如说状态机,很难全case吧,特别是one hot编码的状态机,default里放什么好?

...
orlye 发表于 2013-3-23 13:28




一是你可以写成Binary编码,然后在综合工具里设置fsm encoding style。



二是直接把Onehot写成sum-of-product形式,这是ARM 10年前的paper里推荐的。(所谓sum-of-product就是先“与”再“或”)



  1. Recommendation 8: For one-hot logic on a critical path, write the RTL directly in a sum-of-products form (rather than case) and add a one-hot assertion checker.


复制代码


http://www.arm.com/files/pdf/Verilog_X_Bugs.pdf
发表于 2013-3-23 21:42:10 | 显示全部楼层
回复 18# Timme


谢谢。我好好研究一下。
发表于 2013-3-24 16:37:53 | 显示全部楼层
看下代码,状态有没有带复位,一定要带,

one hot应该是没有问题的,
fpga综合的时候,状态机会被综合成one hot 个人认为是one hot的频率跑的能搞比较高,不过这个时候是没有default了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

X

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

GMT+8, 2025-6-17 15:20 , Processed in 0.023677 second(s), 7 queries , Gzip On, MemCached On.

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