看板 Electronics 關於我們 聯絡資訊
※ 引述《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)
luckyBF:推 01/28 03:52