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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1805|回复: 5

[原创] verilog case嵌套case优化的请教

[复制链接]
发表于 2023-8-24 15:49:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

谭里的大佬们好,小弟最近有些疑惑,请教下大家!

目前在做的一个risc V的mpu项目,里面的译码模块通常采用case嵌套的方式实现译码,如下:
case(inst[6:2])
00000: inst_type = `LW;
00100:begin
case(inst[14:12])
000: inst_type = `ADD;
···
endcase
···
end
endcase
这种嵌套的实现会造成组合逻辑级数很大,路径延时很差,请教下谭里的大佬们,这种一般怎么优化咧,谢谢!
发表于 2023-8-24 16:41:18 | 显示全部楼层
我认为按你写出来的部分不会造成逻辑级数高,只是简单的case然后赋值,最简单的方式也能变成一个位宽很高的查找表。所以应该是其它原因,不是嵌套导致的。把时序报告有问题的地方贴一下看看。
 楼主| 发表于 2023-8-24 17:13:51 | 显示全部楼层
本帖最后由 AEureka 于 2023-8-24 17:40 编辑


拾冠 发表于 2023-8-24 16:41
我认为按你写出来的部分不会造成逻辑级数高,只是简单的case然后赋值,最简单的方式也能变成一个位宽很高的 ...


感谢您的指教,我目前综合出来的最坏路径,组合逻辑级数最长的有46级,是reg2reg的路径,速度瓶颈就600M了。
目前怀疑就是这个译码模块,就是case嵌套。其他模块都是基本的if_else if_else结构。

非常抱歉,截图的话不大方便,内部环境没法弄到公网上,我把延时最坏的路径组打出来吧:
Timing path group 'reg2reg_i_clk'

levels of logic:                     46
critical path length:              1.2904
critical path slack:                0.0004
critical path clk period:          1.6660

额外再问一下,如果是case嵌套的话,综合出来的是怎样的电路结构呀,感觉不是几个MUX级联这么简单了


发表于 2023-8-25 11:01:00 | 显示全部楼层
我用的是vivado,按你打出来的代码来综合,理论上会变成一个{inst[6:2],inst[14:12],...}的LUT,逻辑级数是0或1。能不能把这条路径上的时序报告发出来,上面就有说明逻辑级数的来源。46级太多了,我怀疑代码里是不是有大量的加减运算,不是简单的赋值,或者你使用的综合器功能不够强?
发表于 2023-8-25 11:18:32 | 显示全部楼层
跟写法关系不大,是case条件比较多,现在的DC都很聪明,都会给你优化得很好。组合逻辑太大,那就用时间换速度,用PIPE
 楼主| 发表于 2023-8-25 14:44:23 | 显示全部楼层


fuxugang 发表于 2023-8-25 11:18
跟写法关系不大,是case条件比较多,现在的DC都很聪明,都会给你优化得很好。组合逻辑太大,那就用时间换速 ...


嗯好的,感谢指导。
那就是说即使是case嵌套,目前的工具都会自动优化好,不会出现级联太严重的问题。而真正的问题应该还是出在其他路径上了。



原来是研究着用pipeline,但是后续的冲突解决实现很有难度,目前想先实现单周期的作为保底,再考虑做pipeline。

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

本版积分规则

关闭

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


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

GMT+8, 2024-12-23 13:20 , Processed in 0.018179 second(s), 7 queries , Gzip On, Redis On.

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