[問題] counter的hold time violation怎麼解?

看板Electronics作者 (GoGoGo)時間9年前 (2016/05/18 21:50), 編輯推噓8(808)
留言16則, 10人參與, 最新討論串1/1
各位前輩大家好, 小弟是初心者,現在遇到一個問題,試了很多寫法沒辦法解, 想請益一下, 目前在synthesis後gate level的模擬會跑出hold time violation的警告, 我只知道可以塞buffer讓Td增加就可以解, 但是計數器電路的buffer我不知道怎麼塞, 想請教各位前輩解惑一下,謝謝。 這是警告訊息: Warning! Timing violation $setuphold<hold>( negedge CKN &&& (flag == 1): 932871 PS, negedge D:932955 PS, 0.152 : 152 PS, 0.106 : 106 PS ); File: ./umc18_neg.v, line = 6843 Scope: TEST.RM.counter_reg_1_ Time: 932955 PS 這是我的計數器程式碼: always @(negedge CLK) begin if (RESET==1'b1) counter <= 6'b0; else if (IN_VALID==1'b0) counter <= 6'b0; else counter <= counter + 6'b1; end 再麻煩各位前輩不盡指教>< 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.143.165.12 ※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1463579427.A.82B.html

05/18 22:05, , 1F
手動在gate level RTL塞buffer看看? 或起初就用gate去兜
05/18 22:05, 1F

05/18 22:11, , 2F
還是說testbench中的flag轉態跟CLK切齊? 那樣直接灌進去
05/18 22:11, 2F

05/18 22:14, , 3F
似乎可能造成violation,太久沒碰了~
05/18 22:14, 3F

05/18 22:56, , 4F
synthesis用的script裡面可以加指令直接修hold time
05/18 22:56, 4F

05/18 22:56, , 5F
05/18 22:56, 5F

05/18 22:59, , 6F
Counter裡面有hold time violation?好像不太可能 如果發
05/18 22:59, 6F

05/18 22:59, , 7F
生應該只能增加clock cycle time了吧
05/18 22:59, 7F

05/18 23:02, , 8F
hold time在前段處理意義不大....
05/18 23:02, 8F

05/19 00:52, , 9F
fix_hold
05/19 00:52, 9F

05/19 10:07, , 10F
APR時才需要加buffer... 你這是設計問題
05/19 10:07, 10F

05/19 10:09, , 11F
再者你IN_VALID是enable signal吧? 為啥要這樣寫...
05/19 10:09, 11F

05/19 11:23, , 12F
改成posedge試試呢?
05/19 11:23, 12F

05/19 12:21, , 13F
IN_VAILD跟CKN 錯開
05/19 12:21, 13F

05/19 15:30, , 14F
感謝各位幫忙,我找出原因了,我的data跟VALID都是負緣
05/19 15:30, 14F

05/19 15:30, , 15F
把counter改正緣觸發就可以了>"""<
05/19 15:30, 15F

05/22 21:50, , 16F
always @(posedge CLK, RESET)
05/22 21:50, 16F
文章代碼(AID): #1NF7CZWh (Electronics)