# latch ### latch發生原因: 合成器認為某部分電路需要鎖定在某個特定值中。 1. 非同步電路Latch是一種非理想的狀態,發生在電路未定義完全的情況。 2. Latch只在組合邏輯才會產生,在非同步電路中,Latch可取代暫存器的角色。 3. 當輸入變更時,Latch會保持輸入的狀態,並將其儲存在輸出連接port上,直到輸入發生變化。 3. Latch類似於Flip-flop,但它沒有時脈輸入,因此它的輸出取決於輸入變化的時間。 ### 產生latch的寫法: latch語法: 只寫if不寫else、只寫case不寫defult、輸出自己給輸入賦值。 除了這些外,不是只要寫完整就不會有latch,更重要的在於不要hold值。 ### latch的缺點: 以下討論是建立在設計的電路是同步電路,才要避免。 1. 對glitch敏感: 訊號有效時,輸出狀態可能隨輸入多次變化,產生空翻,對下一級電路造成危險。 2. 需要更多logic資源: FPGA本身沒有設計好的latch(注意這是發生在FPGA上)。 3. 不能非同步reset: 上電後會鎖值,只能下電重置,無法使用reset重置,如果鎖了一個錯誤的值會造成極大的危險。 4. 需要額外的delay: 不適合運用在高速電路上。 5. 複雜的STA分析: 沒有經過clock,STA不會分析,每次合成器合成的結果可能也不一樣。 7. 時序問題: Latch不像DFF具有clock,輸出狀態可以在任何時間被改變,這可能導致時序問題。 8. 設計不確定性: Latch是非同步元件,會導致電路輸出的值與輸入值之間存在不一致的情況,從而導致電路輸出的結果無法預測。 ### latch的優點: 如果latch和FF兩者都由與NOT gate搭建的話,latch使用的logic source要比DFF少一半, latch的整合度較DFF高,latch的面積很小,又能省電。 所以在ASIC設計中會用到latch,且只有在CPU高速電路或RAM這種面積很敏感的電路才會使用latch。 ### latch的應用: 1. Clock Gating Cell(非常常見): Integrated Clock Gating(ICG) = latch +AND,詳細部分參看IC design筆記。 2. A Dual-Edge D Flip-Flop(少見): A Dual-Edge D Flip-Flo = 2 latches + 1 MUX. A dual-edge flip-flop stores data at both clock transitions. ### 合出latch的解決方式 使用FF取代Latch,以確保電路的可靠性和正確性。 ### coding技巧 在coding時:需要在組合邏輯中避免hold的操作。 **<font color="#f00">記住,當組合邏輯需要hold時,就會合成出latch。</font>** ``` always@(*) begin if(d)a = b; end ``` 應改為 ``` always@(*) begin a=1'b0; if(d)a = b; end ``` 或 ``` always@(*) begin if(d)a = b; else a = 1'b0; end ``` Refence: 1. [Avoiding Unwanted Latches](https://www.doe.carleton.ca/~shams/ELEC3500/Ver2Syn.pdf)