-以下文章來源于IC的世界 ,,作者IC小鴿-
本文將簡述一種fifo讀控制的不合理設計案例,,在此案例中,反壓信號type1_fc和type2_fc會不合理阻塞讀控制信號,,造成性能損失,,甚至會造成嚴重bug。
如下圖所示:all_data_fifo 為主數(shù)據(jù)路徑的存儲fifo,,用于存儲報文,,所有正常報文類型包含:TYPE1和TYPE2。數(shù)據(jù)從all_data_fifo讀出后會分根據(jù)報文類型分發(fā)到兩個fifo,,分別是type1_data_fifo和type2_data_fifo,。兩個fifo分別產生反壓信號type1_fc和type2_fc作用到data_fifo的讀控制模塊。type1_data_fifo/type2_data_fifo將滿時,,將type1_fc/type2_fc置1表示不希望上游all_data_fifo向下發(fā)送數(shù)據(jù),。
data_fifo_ren為all_data_fifo讀使能信號,1表示讀fifo,。all_data_fifo_empty為1表示all_data_fifo為空,,沒有數(shù)據(jù)。錯誤設計中,,all_data_fifo_empty,、type2_fc和type1_fc均為0,才允許讀all_data_fifo,。
正確設計中,,應該區(qū)分當前all_data_fifo中的數(shù)據(jù)類型,當數(shù)據(jù)為type1類型時,,type1_fc才會生效,當數(shù)據(jù)為type2類型時,,type2_fc才會生效,,避免出現(xiàn)過度流控,造成數(shù)據(jù)阻塞,。
NOTE: 本文中列舉的案例很簡單,,但在實際芯片設計中時常會出現(xiàn)此類問題,,并且隱藏在很復雜的讀控制邏輯中,不容易發(fā)現(xiàn),。