作者Maddulin (what else do u focus?)
看板Electronics
标题Re: [问题] 写HDL碰到的频颈...
时间Sun Jan 28 00:46:17 2007
※ 引述《invalid (everlasting)》之铭言:
: 基本上我想第一步要做的事就是要决定最後的thoughput
: 如果很要求速度的话,那就看看能不能透过pipeline的方式
: 让二三四级能够将critical path缩短到10 period
: 而如果30 period的速度是可接受的话
: 就让所有的block都操作在一样的速度下
: (即先做完的就等,直到最慢的做完)
: HDL要写的好跟程式要写的好是一样的
: 除了要了解语言的特性
: 譬如说在verilog里面
: assign a=b+c[1:0];
: 跟assign a=b+c; (假设reg [1:0] c; )
: 会有完全不一样的结果(就是unsigned跟signed的差别)
: 软工的问题也很重要
: 推荐一本"Reuse Methodology Manual"
: 算是HDL的软工吧
: 有很多guideline
: 也有对整个flow的建议
: testbench也多有着墨
其实好的coding style, assign也应尽量避免 (simulation efficiency)
另外就以assign a=b+c[1:0] 来说
b,c长度不同,如何相加? 这也是不佳的coding style
基本的linting rule都不可能过
以硬体设计角度,最简单就是请将c补足适当之长度再相加
硬体怎麽设计,HDL就怎麽写,不要去写你不知道这样描述将mapping到如何的电路
: ※ 引述《saininniang (sob)》之铭言:
: : verilog基本的语法大都已熟悉
: : 但我遇到频颈了...已经卡很久了
: : 若只单写一个演算法还没问题
: : 若这个电路的前後级是由好几个不同执行周期的电路组合而成
: : 我就不知怎麽结合
: : 假设
: : 第一级的演算法要跑10个周期
: : 第二级 18
: : 第三级 30
: : 第四级 22
: : .....................
: : 前级的输出为後级的输入
: : 各别写的话还OK
: : 但我没能力将这些演算法整合成一个完整的电路
: : 这四级的电路都由finite state machine写成
: : 每级都是由许多小module所结合
: : 主电路又要再整合这四级
: : 实在不会结合...
: : 不知该怎样去抓取资料...
: : 因为每一级的执行周期都不一样
: : 另外
: : 写测试function的testbench有没有更有效率的写法?
: : 写testbench真的好累
: : 最後发表一下写hdl遇到很多的挫折
: : 明明用软体就能轻易实现,但hdl却不会写
: : hdl的架构不会设计,coding很没效率
: : 越来越恐惧hdl.....0rz
给 saininniang 因为你不是在描述硬体
自已想想你coding时,有先思考硬体如何去设计吗? 显然没有
即然没有,写不出不好的rtl也是理所当然
功力不够就先想基本架构,将timing确定,特别是control的timing
请将control分离,control只做control body的事
另外,fsm只会出现在control logic内,不要连 body都想用 fsm解决
这样的code根本是难看,不仅违背HDL发展的精神,合成的结果应该也好不到那
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.163.202.42
※ 编辑: Maddulin 来自: 218.163.202.42 (01/28 00:50)
1F:推 luckyBF:推 01/28 03:52