发新话题
打印

[讨论] 在design中是否应该为综合的优化而放弃使用for循环?

在design中是否应该为综合的优化而放弃使用for循环?

在综合区看到一个关于for循环的贴子,大都是不赞成使用For循环的,我觉得有必要拿出来讨论一下:在设计中到底应不应该使用for循环?
( P( \6 S) f, P; U/ i* T  n      首先说明一点:语法上,for循环是完全可以综合的,只是for循环有它有一些特点,使得是否应该在设计中使用for循环一直有争论.* h- g7 i' g5 g4 E
      反对使用for循环的理由是for循环会产生N个类似的电路,不利于综合工具优化,影响综合结果。这是有一定道理的,我不知道综合工具的算法是怎么实现的,不知道有没有方法对这N个相同的电路模块进行优化,但是,在今天芯片规模日益增大,工艺水平不断进步的情况下,增加一点面积相对于使用for循环而得到的好生来说,我觉得是值得的。使用for循环至少可以获得以下几个好处:
7 q' h% X( l3 X; @' G* j      1.使代码看起来简洁,容易检查。
) t$ Z  U7 w4 s  z9 K      2.书写起来方便,不用敲N组相似的命令。
1 K8 w! r/ A" a, V      3.可以防止笔误,类似的东西写上100多遍,难免不出错,而使用for循环,只要找到规律,就不会出错( i+ ^8 C; s  k# M/ F
      4.还有一大好处是使得design非常的scalarble。而scalarble就意味着TTM。而TTM对于很多公司来说甚至是最重要的,我相信做过产品的同志一定都对这点深有体会/ Y! y& v5 x2 K3 Y: y# C
      所以,我觉得只要使用for循环的时候心里清楚,for循环是把相同的电路复制N遍,小心谨慎地使用,而没必要一概而论地所for直接在design中打入冷宫,让其永世不得翻身!。我的观点是design中适当地使用for循环并不见得是坏事,只是使用的时候要心里清楚是怎么回事,谨慎地使用。
5 d- ^! `$ \6 ~+ N! F% E2 }, J     上述只是我个人的一些看法,欢迎大家各抒己见,一起讨论,共同提高!; n5 K7 |* P; ?0 `

7 `2 Q  T; `( ^$ L[ 本帖最后由 cloud 于 2007-11-18 11:43 PM 编辑 ]
Better to light one candle than to curse the darkness.

TOP

我们公司的CODEING STYLE中明确规定不能使用for语句~~
曾梦想仗剑走天涯,看一看世间的繁华。年少的心总有些轻狂,如今我四海为家……

TOP

那你们这公司的规定也有点太不近情理了....
7 a8 {- o5 d& Z8 x+ T, a, S: f, y为什么不能用for 语句?有什么坏处?仅仅是规定?.......
3 ~2 G1 i" f6 E8 v也由此可以看到,贵公司 的设计的可扩展性一定不怎么好......
Better to light one candle than to curse the darkness.

TOP

一个简单的办法

相同功能用for,和不用for综合一下看看!

TOP

我试过呀,要分情况的,相同电路结构或只是换下连线,当然不会增加面积。而且我认变如果能够增加更好的可扩展性,能够缩短TTM,多花一点面积的代价也是值得的!
Better to light one candle than to curse the darkness.

TOP

这个太绝对了,用是可以用的,但是要看用的是什么器件,而且还要看你怎么优化~~& \) C3 h+ t+ a! ]6 l+ O
我个人不推荐用FOR

TOP

公司规定不让用for自然也有他的考虑。因为并不是每一个员工都是对verilog有着特别深入的理解的,刚刚参加工作的人,如果之前写verilog的经验不是很丰富,根本不能了解每一个语句背后对应的是什么样的结构。所以公司自然是要采用最安全稳妥的方法。当然,这样的规定都是针对RTL级的。
0 ]  \: P, ~# ^& n* E* f# I5 _- T. K- ~9 V6 t
至于说可扩展性,不是用这一个语句就可以决定的吧?我们完全可以用别的方法来解决这个问题。
$ B2 i9 a2 i) z  _3 _7 N" {) ?" U! L( \
[ 本帖最后由 linda_0823 于 2007-12-16 10:55 PM 编辑 ]
曾梦想仗剑走天涯,看一看世间的繁华。年少的心总有些轻狂,如今我四海为家……

TOP

回复 1# 的帖子

for循环只要边界固定就可以综合!
' I  n! a: s( s感觉for循环唯一的作用就是使得代码简洁.$ F" r9 r1 A5 j* Q4 Z
for循环未必只用于复制电路& v6 M5 N6 \8 w9 k" D( c4 p
比如译码电路,38译码器用case或if 会需要好多行$ Q. u9 c; K3 p4 X3 q$ C5 i
而用for很简单
& h/ ~) W& P; H, ?7 e( l# aalways@(in)begin
1 {* g' y2 _1 `% tout=0;, l8 v- [( P4 z: z8 M
out[in]=1'b1;$ H6 W0 o+ i5 O1 M- L
end
6 P! c  ]% U2 Y: m更多的译码器如4-16,还是一样的写法,很简明5 T7 V7 V( F) a7 A' M
其实synopsys公司的coding style也介绍使用这样的方法.

TOP

怎么都觉得你的公司“因为怕出错而规定不能使用for语句”有点因噎废食的感觉!
Better to light one candle than to curse the darkness.

TOP

for循环的用法是软件人员的思维, 作为一个硬件工程师,写每一条语句必须能够想象综合出来之后的样子,而不能为了所谓的简便来推荐使用for语句,只会给综合器带来麻烦。所以不推荐使用。

TOP

发新话题