為什么代碼中要避免使用時(shí)鐘下降沿?
以前做FPGA的時(shí)候,沒(méi)有關(guān)心過(guò)這個(gè)問(wèn)題,上升沿和下降沿,一直混用。但是昨天后端部門(mén)的Lint檢查和綜合檢查都指出了這個(gè)問(wèn)題,要求把設(shè)計(jì)中的所有時(shí)鐘沿都統(tǒng)一為上升沿抽樣。這樣做的目的,據(jù)說(shuō)是為了提高scan chain的覆蓋率。因?yàn)闆](méi)有經(jīng)驗(yàn),想在這里請(qǐng)教一下大家:
- 混用上升下降沿會(huì)對(duì)scan chain造成什么樣的影響,能否具體解釋一下;
- 如果代碼在邏輯上必須用下降沿采樣,怎樣才能滿足后端的要求(用上升沿采樣),有無(wú)變通方法;
我的代碼
我在上面提到了上升沿和下降沿混用,其實(shí)是表述不正確。不是混用,而是在代碼中有些寄存器用posedge,有些則用negedge,對(duì)同一個(gè)寄存器同時(shí)使用兩個(gè)邊沿的情況沒(méi)有。,我的代碼是這樣的情況,比如
always @ (posedge i_clk or negedge i_rst_n) begin
.... // reg 1
end
always @ (negedge i_clk or negedge i_rst_n) begin
.... // reg 2
end
對(duì)于這樣的情況,后端部門(mén)也建議盡量避免,也就是說(shuō)所有寄存器全都采用上升沿,要怎么處理呢?
====
用下降沿采樣的話
dft_drc會(huì)認(rèn)為該寄存器有violation
因此不把他放到chain里邊
所以覆蓋率會(huì)降低