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