latch鎖存器;鎖存器sr
1、什么是鎖存器
鎖存器(latch)是通過電平觸發的存儲單元。數據存儲的動作由輸入時鐘(或者使能)信號的電平值決定,僅當鎖存器處于使能狀態時,輸出才會隨著輸入發生變化。
2、和觸發器的區別
觸發器是對脈沖邊沿敏感的存儲單元,它的變化只會在時鐘的上升沿或者下降沿到來的瞬間改變。
從定義上區分,鎖存器是電平觸發的,觸發器是邊沿觸發的。對于latch而言,由于其是電平觸發的,當使能的時候,輸入信號不穩定時,那么輸出信號就會出現毛刺。對于觸發器來說,其輸出是在時鐘的邊沿,只要不出現亞穩態輸出就不會出現毛刺。
3、latch的優劣
缺點:
1)電平觸發,容易產生毛刺;
2)電平觸發,對芯片設計后端時序收斂不友好。
優點:
1)面積小;
2)速度快。
4、怎樣生成latch
在芯片設計中,鎖存器和觸發器都是工藝庫中的最小單元。通過EDA工具將我們的代碼映射至工藝庫中相應的單元。基于Verilog硬件描述語言的,生成latch的代碼事例如下:
5、如何避免產生latch
在數字電路設計中,只有對面積和速度要求極高的情況下才可能會使用到latch。一般情況下,還是應該使用時序邏輯,避免毛刺及時序的影響。
數字前端設計可以通過以下幾種方式,避免latch的產生:
1)掌握良好且正確的代碼風格,完整的條件語句(if else、case中的default)且最后一個分支(else或default)不是自己賦值給自己
還有一點需要注意:上述第2個代碼段,是使用assign語句的3目運算符(條件性語句),且自己賦值給了自己。在Verilog中產生latch的代碼是組合邏輯且有一個分支是自己賦值給自己(省略最后一個分支也是保持不變即自己賦值給自己)
2)通過代碼檢查工具(如nlint、leda、spyglass等)檢查代碼
3)通過中端工具Design Compiler等檢查代碼
4)在后端時序分析時,如果出現時序不過的情況,可以分析是否有latch
在實際工程中,大家最好按照上述順序執行,盡量將問題在早期發現,早發現早治療。希望通過這篇文章可以幫助大家理解鎖存器。
讀了這篇文章對您有幫助的話,麻煩動動您的手指點個贊關注下,你的支持是我繼續創作的動力。