Re: [問題] Verilog 用 data edge 作為訊號輸入

看板Electronics作者 (爆炸一哥)時間10年前 (2016/01/04 21:36), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串4/4 (看更多)
※ 引述《FTICR (FT-ICR)》之銘言: : ※ 引述《Baneling (爆炸一哥)》之銘言: : : 標題: Re: [問題] Verilog 用 data edge 作為訊號輸入 : : 時間: Mon Jan 4 02:02:15 2016 : : 看你的想法我大概會有幾個疑問吧 : : 1.你這樣寫或者要實現這樣的function想要得到什麼樣的好處? : : 一般來說如果真的要對clock動手腳一定會有甚麼原因 : : 不外乎操作速度要更快或者面積要更小, 或者是逼不得已的情況(介面處理) : 因為輸入訊號(a)類似pulse,且它pulse width 很短沒辦法用 synchronous : : 2.clk與a這兩個訊號的關係? : : 如果a是源自於clk的訊號,簡單來說就是同步的東西 : : 那就在狀態轉換的時候寫一個條件去判斷就好了 : : 如果是不同步的兩個訊號, 那狀態機為何要用兩個不同的clock去驅動? : : 而且處理不同步的訊號也不是用這種方式去處理的~ : 我知道如果是 synchronous 就好解決,但不清楚處理這樣 asynchronous 訊號該怎麼做, : 所以才想這些做法 如果是這種例子,我建議你pulse先用一種電路放大 我記得叫做pulse amplifier,詳細的名字跟電路我有點忘記了 它是用邏輯閘(忘了是nor還是nand)兜出來的電路,功能很簡單就是加寬你的pulse width 不過它有logic loop所以無法用合成的方式實現 要用full custom的方式做出來,如果有standard cell lib的話就直接去挑邏輯閘來用 pulse width加寬到比一個clock寬就可以了 在數位IC設計這邊把pulse width直接加寬去模擬 這個訊號就當作是一個輸入aa 然後你在做一個用clk去驅動的synchronizer(可以用verilog寫)去同步aa 這個aa就可以當作狀態機裡面的控制條件了 : : 如果你真的想要把這種做法實現,我大概會用這種方式去寫 : : always@(posedge clk_a or negedge rst) begin : : if(!rst) state<=state_1; : : else begin : : case(state) : : state_1: begin : : state<=state_2; : : end : : state_2: begin : : .. : : .. : : endcase : : end : : end : : assign clk_a=(state==state_1) ? a : clk; : : 只是你在synthesis以及APR的時候對clock下的constraint : : 還是要去思考我上面問的那些問題 : : (考慮clk_a, clk, a等訊號之間的關聯性) : 了解! 感謝 Baneling 大,我研究看看是否可行 如果a是很小的pulse,就算verilog寫得出來合成應該還是會gg 因為這樣寫clk_a的週期等校上只有pulse width的寬度 DFF的clock有最小寬度的限制,詳細規格要看你使用的design kit : : 真心建議你,先把"可合成"的verilog語法弄熟,其實當初教我做數位IC的人講過一句話 : : 你寫的verilog大多是把你想像中的硬體寫出來,硬體我們能用的不外乎就是flip flop : : latch跟logic gate,因此procedural block中的sensitivity list會寫成這樣 : : 簡單來說就是模擬器執行這些可合成語法的方式會類似真實電路的動作 : : 因此這些語法就會被歸類為"可合成" : : 是因為合成軟體看到這類型的code會找出相對應的硬體。 : : 如果短時間之內沒辦法做到這種程度就先了解到 : : "testbench想怎麼寫沒關係,但設計一定要用可合成的語法" : 之前是有寫過一些很簡單的 Verilog 做完合成、APR,也蠻清楚要用硬體的觀點去想, : 只是這個 case 可能有點特殊所以卡住了 其實問題是一樣的,如果想要往這方面走你的問題可能像是姆O教主說的一樣 缺乏對數位基本元件的理解,同步電路本身就是在躲一些問題所以才會用這種東西 想要理解的話去聽聽看VLSI吧~ 買書回來念也可以 : : 其實你想像中的情況跟我想表達的情況應該有一段差距 :s : : 可能我用的standard cell比較單純,我幾乎沒寫過這種可以被兩個clock trigger : : 的procedural block,一般來說沒有DFF可以同時被兩種clock觸發,所以這種寫法 : : 就算能用,在coding style上來說也是很不好 : 還不確定是不是 synthesizable、模擬對不對 : : 要也是像我上面那樣寫,先把clock處理過後再送到DFF。 : : (當然constraint要怎麼下又是另外一回事了) : : 另外建議你,寫FSM就把comb跟sequ寫在一起了,因為大部分寫法都把控制訊號 : : 跟FSM的state寫在一起,當你狀態很多的時候描寫state的procedural block會拖很長 : : 你每個控制訊號獨立寫成單一procedural block,debug的時候你看自己的code : : 會上上下下拉到很想死。 : 感謝,因為上課的時候都是學到這樣的寫法,頂多功能不同電路分到不同的 always block : 或 module來寫 : : 其實有經驗,code寫出來有相對應的synthesis以及APR(CTS)的constraint : : 要怎麼做大概都可以,問題就在於很多人在下constraint的時候其實都沒有弄得很清楚 : : EDA tool解讀這些constraint的方式還有處理電路的手法,如果是這種情況 : : 我覺得就先別去把設計搞這麼複雜了,single clock domain的設計先弄清楚吧~ : : 原po寫code的方式感覺就是剛出新手村,就不太建議自己去找麻煩 XD : 確實沒有太多經驗,只寫過一些簡單的電路 (像是自動販賣機@@) 去找本書來K,"advanced digital design",作者是Mano,裡面有很多範例 也有很多實用的IP教學,剛開始學數位IC的時候這本書陪我不少時間 不過最快的方式應該還是去讀個研究所比較快 XD : : 嗯呀,真的要對clock動特別的手腳(除頻以外的功能),也是使用DFF的輸出居多。 : : 不過CTS也要另外處理,通常是吃力不討好 : : -- : : 推 obov: 把verilog/HDL當C(or其他)寫的人 尤其是以前資工轉硬體的 01/04 02:41 : : → obov: 最常見的觀念錯誤就是 不懂甚麼叫做DFF 01/04 02:42 : : → obov: DFF最重要的一個特性 就是setup/hold time 01/04 02:42 : : → obov: 這是當代絕大多數數位電路設計的核心 01/04 02:43 : 我非 EE 本科 (也跟資工、軟體無關),只是對硬體很有興趣想多了解,所以才想學這些 : 數位邏輯、IC 設計都修過,setup time/hold time/time borrowing/timing violation : 這些概念上課也都有學到 : : → Baneling: 他們會覺得那是一種變數~ 01/04 03:04 : : 推 xanter: 原PO寫的CODE真的像新手村出來的 01/04 10:16 : : → tonybin: 竟然需要教主出來教電子學 囧 01/04 18:08 : : 推 cebelas: 教主安安 01/04 18:35 : 感謝 B 大和各位前輩的指導 小弟不懂的東西還太多了 QQ 理論要跟Tool的使用結合才會有用.. 如果你有錢的話,真心推薦CIC的課程,便宜又大碗 講師大多都資深工程師,人也都nice 不過我覺得做硬體可以再考慮考慮就是了... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 182.234.146.229 ※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1451914561.A.0EC.html

01/04 22:09, , 1F
...最後一句話頗有深意,是事實就是了
01/04 22:09, 1F

01/04 23:05, , 2F
感謝 B 大各種 useful 的建議 以後會不會把這當工作還難講
01/04 23:05, 2F

01/04 23:06, , 3F
底子還是差多了
01/04 23:06, 3F
文章代碼(AID): #1MYdL13i (Electronics)
討論串 (同標題文章)
文章代碼(AID): #1MYdL13i (Electronics)