作者FTICR (FT-ICR)
看板Electronics
標題Re: [問題] Verilog 用 data edge 作為訊號輸入
時間Mon Jan 4 20:28:00 2016
※ 引述《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 訊號該怎麼做,
所以才想這些做法
:
: 如果你真的想要把這種做法實現,我大概會用這種方式去寫
:
: 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 大,我研究看看是否可行
:
: 真心建議你,先把"可合成"的verilog語法弄熟,其實當初教我做數位IC的人講過一句話
: 你寫的verilog大多是把你想像中的硬體寫出來,硬體我們能用的不外乎就是flip flop
: latch跟logic gate,因此procedural block中的sensitivity list會寫成這樣
: 簡單來說就是模擬器執行這些可合成語法的方式會類似真實電路的動作
: 因此這些語法就會被歸類為"可合成"
: 是因為合成軟體看到這類型的code會找出相對應的硬體。
: 如果短時間之內沒辦法做到這種程度就先了解到
: "testbench想怎麼寫沒關係,但設計一定要用可合成的語法"
之前是有寫過一些很簡單的 Verilog 做完合成、APR,也蠻清楚要用硬體的觀點去想,
只是這個 case 可能有點特殊所以卡住了
: : 我想把 Verilog code 畫成電路這我作的到
: 其實你想像中的情況跟我想表達的情況應該有一段差距 :s
: :
: : 想了一段時間,不知道 sequentail part 這樣寫是不是一個方法?
: : //sequentail part
: : always@(posedge clock or posedge a) begin
: : if (rst) begin //synchronous reset
: : state <= state_1;
: : ...
: : end
: : else if (a && state==state_1) begin
: : state <= state_2;
: : end
: : else begin
: : state <= next_state;
: : ...
: : end
: : end
: 可能我用的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來寫
: : 推 ptta: 就是把一個 之 comb signal當成 clock,可以合成,十年前就看 01/03 17:11
: : → ptta: 過了 01/03 17:11
: 其實有經驗,code寫出來有相對應的synthesis以及APR(CTS)的constraint
: 要怎麼做大概都可以,問題就在於很多人在下constraint的時候其實都沒有弄得很清楚
: EDA tool解讀這些constraint的方式還有處理電路的手法,如果是這種情況
: 我覺得就先別去把設計搞這麼複雜了,single clock domain的設計先弄清楚吧~
: 原po寫code的方式感覺就是剛出新手村,就不太建議自己去找麻煩 XD
確實沒有太多經驗,只寫過一些簡單的電路 (像是自動販賣機@@)
: : 推 Leadgen: Comb signal當clock,不怕有glitch嗎? 01/04 00:04
: 嗯呀,真的要對clock動特別的手腳(除頻以外的功能),也是使用DFF的輸出居多。
: 不過CTS也要另外處理,通常是吃力不討好
:
: --
:
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 182.234.146.229
: ※ 文章網址: https://webptt.com/m.aspx?n=bbs/Electronics/M.1451844137.A.365.html
: 推 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
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.55.232
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Electronics/M.1451910481.A.94F.html
1F:推 Baneling: 如果還在學校 建議去聽一下VLSI, 關鍵電路聽懂 後續步驟 01/04 21:01
2F:→ Baneling: 的constraint會有感覺很多~ 之後要學進階去摸primetime 01/04 21:02
感謝 B 大 我想112的"IC設計"就是類似VLSI的課,用Integrated Circuit Design
(CMOS VLSI Design) 這本書 (Weste) pt、pp 之前跑 design flow 有教過
但還是不很清楚 pt 和 dc 中的 timing analysis 有什麼差別
※ 編輯: FTICR (219.70.169.149), 01/04/2016 22:32:07
3F:→ Baneling: pt的timing比較完整,能驗的東西也多很多,至於你說為何 01/04 22:51
4F:→ Baneling: 不跟DC做再一起,只能說商業考量吧 XD 01/04 22:51
5F:推 cebelas: 112下學期劉宗德有開高等積體電路 可以去聽聽看 01/05 13:11