DFT实训教程笔记2(bibili版本)- Scan synthesis practice
文章目錄
- Scan synthesis practice
本博文是博主記錄DFT實訓教程的筆記版本,此筆記并沒有對所有的知識進行記錄,僅僅以自身的認知水平,來記錄了一些部分筆記并加上了自己的理解。
Scan synthesis practice
How to design scan clock structure?
假設一塊chip里面有好幾十個clock domain,如果每一個clock domain都用一個scan clock雖然會非常清晰,但是IO數目肯定不夠用。
clock group:
1、no crosstalk
2、less crosstalk
3、functional clock frequency
如何理解串scan時候的不同沿觸發的寄存器
腳本:
如上圖所示,對于那些已經存在的,已經鏈接好的,可以拿來直接使用的port,就可以用existing_dft命令,所以腳本里面對于clk是用的exsiting,如果是對SE的話,就必須用spec了。
對于還沒有串,沒有鏈接的port,就必須用spec端口來指定。比如SE端口,就需要用spec來指定為ScanEnable。
現在讀入netlist文件,該文件是如上圖所示的兩個負沿觸發的reg和兩個正沿觸發的reg,并且我們設置了1條chain,如下圖所示,報告除了violation
如下圖所示,雖然我們指定了chain count=1但是tool還是做成了兩條chain,其中一條chain包含了2條cell,另一個chain也包含了兩條cell
查看已經串好的scan的netlist,驗證確實是兩條chain,也就是工具默認情況下,是不允許這種雙沿的串在一起。現在需要更改工具這中默認的行為。
查看set_scan_configuration 這條命令的文檔。
后面有一個參數是-clock_mix no_mix | mix_edges | mix_clocks | mix_clocks_not_edges
也就是說-clock_mix有四個變量選項:
1、no_mix代表的是任何情況下都不能去混合時鐘
2、mix_edges代表同一個clock domain 不同clock edge可以去混合串不同edge的reg
3、mix_clocks代表不同clock domain,不同edge都可以放在一條scan chain上面。
4、mix_clocks_not_edges代表不同的clock domain可以混合,但是,不同的edges不可以混合。
現在在腳本里面更改
set_scan_configuration -clock_mixing mix_edges如下圖所示,當重新運行腳本之后,Scan path變為了1條,chain length變為了4
退出dc的gui使用gui_stop
通過檢查scan insetion后的netlist后發現,工具將負沿在前面,正沿在后面。為什么需要這樣串chain?
如上圖所示,關鍵一點,在一個cycle內,數據會被捕獲兩次,從而導致兩個正沿在前負沿在后的兩個寄存器的值保持了相同,被綁定。導致經過這個跨沿的后續reg均錯誤得到值。
總結:越晚capture的cell越放在前面去,這樣保證他不能立即capture到前面cell最新的那個值
如上圖所示,對于一個design來說我們可能有多個clk_domain,雖然每個clk_domain分別鏈接一個clk最清晰,但是我們很可能沒有這么多個clk port。
如下圖所示,現在將這四個cell串起來,假設第二個和第三個reg之間的路徑比較長,就會導致嚴重的skew的問題。
如下圖所示,可以分為下面兩種情況,對于第二種情況,如果skew過大后,就可能導致抓取的是最新的值,而不是前一個cycle的值。從而形成了兩個寄存器之間的數據一直是綁定的。
如何解決這個問題?
如上圖所示,為了解決這個問題,需要在時鐘域之間加上一個lockup latch,這個lockup latch電平觸發,與前面一個reg的觸發沿取相反值。
當加了一個反的lockup latch之后,相當于將數據延遲了半個cycle,延遲到了下降沿的位置,只要skew不超過半個cycle,就可以保證clk2不會抓到最新的那個值。
如下圖所示,因為加個反向的lockup latch可以將數據延遲半個時鐘周期。從而相當于把clk2的捕獲沿在前面,clk1的捕獲沿在后面。當使用不同的clk domain時候,如果將scan串起來,工具會自動加上lockup latch。
在做DFT時候,經常用到的signal總結如下
Scan clock:
Reset/Set is also treated as a clock
Scanenable:it is 1 in shift, when capture it is 0
Scan mode/Test mode: always 1 in the whole test mode
Scan input/Scan output
Scan Design Rules-clock
這個cell能不能串到scan chain上面去的標準是什么?
scan chain是不是能夠正確的shift in shift out 是這個方法的基礎,也就是說如果我把這個cell串到scan chain上面去,那他的shift in shift out是否會有問題。
如上圖所示,后面兩個cell的時鐘受到了一個與門的控制,并且受到了Q的輸出的影響,因為工具把前面三個cell串起來后,在shift 階段,Q的值是變化的,從而導致經過與門后面的時鐘是變化的,所以,如果將后面兩個串起來的話,后面兩個cell就沒法正確的shift了。
而我們想做的是一個full scan,那么在不影響function的情況下如何解決這個問題。上面設計屬于為了節約功耗low power而設計的一種門控。
如上圖所示,通過增加一個mux而解決了clk可控的問題。
在predft階段主要是針對clock和set/reset的問題。
同樣如上圖所示,由于reset被cell/Q控制,從而在shift階段,你沒法控制這個cell的值,所以沒法串到chain上面去,解決的方法,要么是用autofix,要么反饋給Designer修改設計。
clock gating cell的設計
clock gating cell的目的就是為了省power,在這些邏輯不工作的時候,我可以通過clock gating cell 來省power,如果用與門來控制就會產生glitch。通常有兩種設計:這個在綜合的時候可以在綜合的時候交個工具替換,添加:
如上圖a所示,輸入的時鐘是010,如上圖b所示,輸入的時鐘是101。
值得思考的問題:
1、除了MUX-D scan cells,再列出兩種scan cell并簡述
2、Measure PO的動作可以發生在capture之后嗎?為什么
3、詳細分析為什么lockup latch能解決clock skew的問題?
4、create a test case with reset scan violation and then fix them with EDA tool Autofix feature。
簡單介紹如何使用autofix
通過在腳本中增加新的腳本command:
第一條命令是希望工具能fix clock相關的問題,默認是disable的,所以這里需要enbale
第二條命令是auto fix的配置,告訴他fix clock相關的問題,這樣的話,工具就會fix clock相關的問題。
總結
以上是生活随笔為你收集整理的DFT实训教程笔记2(bibili版本)- Scan synthesis practice的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DFT实训教程笔记1(bibili版本)
- 下一篇: DC workshop指导篇1- Se