技术一下:现在各位在公司用verilog-2001的generate吗?
但是我不是很喜欢,我coding的时候基本全是if---else----和case语句,基本没有其他语法的东西。是不是我比较out了.....打心底里还是想用的~~
if else case是最土的用法
assign & |才是王道
简单的组合逻辑基本都是assign,但是复杂的组合逻辑还是得always
支持一下,很多时候,省timing就是从这个地方下手了
.183
用吧,3年前就开始用了,方便的很,类似的bug,在一个地方就全部修改了
不过据说DFT的工具对generate支持不够好,尤其是做MBIST的时候
不知道现在这个问题修好了没有
.183
你不是动态配置 代码
还是老老实实的写Code比较好
Generate 我只在ARM 配置的Core 里面看过
越是基本语法,越安全
1)有人号称代码 零IF
我不知道他怎么做的,全用? :
这样做有什么意义呢?
2)generate其实和vhdl里的批量赋值差不多。
3)我还是觉得SV里的能节省大量繁琐的模块例化的——wildcard *
是最好的功能。
用generate写语句块还算顺利,如果用generate写模块调用,而且模块里面还有generate,你就会发现dump数组信号给verdi来看非常麻烦
用generate写是比较愉快的,但对于调试问题来说不太愉快
偶尔用到,但很少,因为不需要
verilog太古老了,跟脚本或者别的高级语言搭配来用比较方便
例化一百个insts用个perl for loop就是了,例化名随便起
physical design也比较方便
一般组合逻辑的话,手工未必有DC优化的更好。像我司,居然不允许使用*和+,只能例化dw,殊不知如果没有对运算单元很深的基本功,最终的结果就是timing和area更差。
不允许使用*和+是对的
做过formal check就知道为什么要禁止 */+
设计者用到运算单元就要练好基本功
*/+和formal check一毛钱的关系也没有,你说的是retiming吧。
很古老的年代的formal对于大的组合逻辑处理起来有问题,所以一些老的工程师就留下来*/+ formal不友好的印象。这也说明了IC这行知识更新的速度也是很快的,不随时学习就会被淘汰
*倒是没有用过,+ 为什么不让用啊 我写counter 就要用到 + 1'b1,有什么问题吗?不准用+,那用什么呢?
操蛋的规定
我不相信超过两个加数的加运算,使用DW会比+强,无论是面积还是timing
.183
DW也有加法树的,其实DW和DC是一回事。只不过在DW里面光乘法器和加法器都有很多种,不仔细研究用错了反而起到相反效果。不过,确实在很多公司老员工的落后的观念严重阻碍了技术发展。
看不同的应用的设计吧,
我们的设计里面会有十几个30+bit 变量的相加
最新版的formality不加blackbox也过不了
另外就是formal能跑通,runtime也大不一样,ECO的时候可不想因为formal等半天
当然例化加、乘法器还有别的好处,比如 signed/unsigned, bitwidth不同等等
不容易出错。
我还是坚持在RTL上用 + *是不好的代码风格,当然 +1'b1这种除外
如果代码里用 + *能使timing/area显著变好的话,说明这个设计也是很糟糕的
好的设计师对datapath应该有很准确的估量,综合器不会有太多优化空间。
dc综合之后有一个什么文件可以喂给formality,就可以大大加快formaility的速度和能力。。。。
问你个问题,加法树你怎么做?如果30-bit的加法器你用哪一种?一个乘法器后面跟一个加法树,你例化什么样的乘法器?
让综合器自动选,然后必要时干预一下。
因为加法器、乘法器都是例化的,后端很容易操控
哪个器件多大面积直接report出来,
而且这些器件项目都是重用的,交叉比较很容易
比如说哪个人做的32bit乘法器比别人面积大很多,timing要求却类似的情况下
很可能是他哪里搞砸了。有时候数数这乘法器netlist的行数就能看出问题。
学习了,平时写代码没有用到很复杂的乘或加,一般的乘就用移位代替了,那用DW代替的话,这个DW库怎么调用的啊,是用命令生成代码吗?是不是和memaker类似?
哥们你这基于啥规模啥工艺的设计?
用*先不说,
用+就是不好的风格,纯属刻舟求剑,扯闲淡。
菜鸟求问:小位宽(比如8bit)的加法器难道都不能用?