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