內容簡介
本案例主要通過兩個基礎的鎖存器(Latch)和觸發器(Flip-Flop)來闡述下兩者之間的區別,從時序圖和源代碼可以了解。
鎖存器
鎖存器是電平觸發的存儲單元,數據存儲的動作取決于輸入時鐘(或者使能)信號的電平值。簡單而言,鎖存器的輸入有數據信號和使能信號,當處于使能狀態時,輸出隨著輸入變化而變化,當不處于使能狀態時,輸入信號怎么變化都不會影響輸出。
觸發器
觸發器是對脈沖邊沿敏感的器件,它的變化只會在時鐘的上升沿或者下降沿到來的瞬間改變。
通過簡單的鎖存器時序和觸發器時序來感受下有什么區別吧
1
鎖存器時序圖
**鎖存器LTCH—— **輸入:L , D ,RST 輸出:Q
LTCH信號解讀
只有L為高電平,輸出Q才會跟隨輸入D并進行鎖存,t1到t3之間,輸入D信號雖然發生變化,輸出Q并未隨之改變,鎖存上一次D的信號;當復位RST為高電平,Q輸出低電平,由于RST在t4為高電平后下降沿變為低電平,而在t5時L為高電平對輸出Q產生作用,輸出Q變為高電平。
2
觸發器時序圖
**觸發器FF_RSE—— **輸入:CR , SR ,RST 輸出:Q
FF_RSE信號解讀
SR上升沿時,置位輸出Q;CR上升沿時,復位輸出Q;當復位RST為高電平,輸出Q為低電平,由于RST在t4為高電平,雖然SR在t5后為高電平但對輸出Q不產生作用,RST變為低電平后,SR已不是上升沿,仍舊對輸出Q不產生作用。
源代碼
鎖存器LTCH代碼:
FUNCTION_BLOCK "LTCH"
TITLE = 'LTCH'
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
D : Bool;
L : Bool;
RST : Bool;
END_VAR
VAR_OUTPUT
Q : Bool;
END_VAR
BEGIN
IF #RST THEN
#Q := FALSE;
ELSIF #L THEN
#Q := #D;
END_IF;
END_FUNCTION_BLOCK
觸發器FF_RSE源代碼:
FUNCTION_BLOCK "FF_RSE"
TITLE = 'FF_RSE'
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
CS : Bool;
CR : Bool;
RST : Bool;
END_VAR
VAR_OUTPUT
Q : Bool;
END_VAR
VAR
es : Bool;
er : Bool;
END_VAR
BEGIN
IF #RST THEN
#Q := FALSE;
ELSIF #CR AND NOT #er THEN
#Q := FALSE;
ELSIF #CS AND NOT #es THEN
#Q := TRUE;
END_IF;
#es := #CS;
#er := #CR;
END_FUNCTION_BLOCK
-
數據存儲
+關注
關注
5文章
963瀏覽量
50857 -
鎖存器
+關注
關注
8文章
904瀏覽量
41444 -
觸發器
+關注
關注
14文章
1995瀏覽量
61051 -
RST
+關注
關注
0文章
31瀏覽量
7381
發布評論請先 登錄
相關推薦
評論