推 luckyBF:推 01/28 03:52
※ 引述《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)