Logic circuit_7 : Sequential Logic(2)
필자는 논리회로라는 과목을 20년도 1학기에 처음 접했다.
이번에 정리를 위해 다시 찾아보기전에 논리회로라고했을때 기억에 남는거는 combination logic과 sequential logic내용들 부분부분밖에 없었는데 그만큼 이 논리회로라는 주제에서 가장 큰 부분을 차지하는 내용이 이 두가지 개념들이다.
그 중에서도 clk개념이 들어가는 sequential logic이 더 어려울수밖없고 잘 이해하고 정리해야하는 부분이다.
지난 시간에 D-Latch까지 정리를 하였다. 어떻게 만들수있는지 내부 구조를 아는 것도 중요하지만 하나의 모듈을 어떻게 사용하는지도 매우 중요하니 꼭 알아두자고 강조했었는데, 이걸 사용해서 회로를 설계하기 때문에 그렇다.
마치 고등학교때 미분을 배울때 y=2x라는식을 x에대해 미분할때 미분계수의 정의로 미분을 할 수 있지만, 모든 문제를 이렇게 풀면 시간내에 풀 수 없다. 그냥 바로 2가 튀어나와야하는것처럼 모듈도 이렇게 활용할 수 있게 내용을 알아야한다고 생각한다.
본론으로 돌아와, D-Latch는 Enable신호가 들어가면 D값이 계속해서 Q로 들어가 Q가 계속해서 update되게된다.
D-F/F의 경우 clk edge에서만 Q값이 D값으로 update가 되는데 왜 후자를 이용하는걸까?
전 포스팅에서 예시를 든 sequential logic에서의 온도 예시를 기억해보자.
Current state = 18인상태에서 input값으로 25를 넣어준다면 combination logic(비교기 등등)을 통해 output으로 온도 up이되고나서 next state=19로 update되야한다. 그 후 이 과정을 current state = input값이 될 때까지 반복한다.
그런데 up이 작동하기전에(HW이기 때문에 Delay가 있다.) next state가 update가 된다면 up작동을 안 할 수 있게 된다.
따라서 clk edge에서만 동작하게 해야하며, up까지의 HW delay < 전체 clk pereiod만 만족시키게 설계하면 된다.
Flip flop이 왜 필요한지는 위 과정을 이해했다면 알게되었을 것이다. 그렇다면 어떻게 만들 수 있을까?
D-Latch의 경우 clk(En) = 1일때 Q<-D이고, clk=0일때 값을 hold시킨다.
Flip-Flop의 경우 clk=1일때 D가 움직이지 않게만 만들어주면 clk edge에서 Q<-D가 되게끔 동작할 수 있다.
Latch 2개를 이어 붙이면 Flip-flop 작동을 할 수 있게 만들 수 있다.
다음 그림을 보자.
clk = 0일때 첫번째 latch의 en = 1, 두번째 latch의 en = 0이다. 첫번째 Latch로 D값이 update되지만 두번째 latch에서 저장되어있는 값이 출력되게 된다.
clk = 1일때 첫번째 latch에 들어있는 값이 두번째 latch로가고 두번째 latch에서 이 값을 q로 보낸다. (= 출력한다.)
위 그림은 posedge F/F이며, clk에있는 inverter를 두번째 latch에 붙여버리면 negedge F/F으로 작동하게 된다.
flipflop은 2개의 latch로 구성되며, latch는 여러개의 gate로 구성된다. 즉, Delay가 존재할 수 밖에 없는 구조인데, 위의 예시에서 posedge를 살펴보자. rising edge직전에 D의 값이 첫번째 latch로 update되고, rising edge 직후에 이 값이 쭉 전달되서 두번째 latch의 q로 전달되게된다.
그런데 첫번째 latch에 들어가는 D값이 rising edge직전에 바뀐다면 어떻게 될까? 원래 이론적으로 rising edge할때의 d값이 출력되게 되는거지만, 이 첫번째 latch를 못 지나갈 수 있게 된다. 이를 setup time violation이라고 한다.
반대로 첫번재 latch에 들어가는 D값이 rising edge직후에 바뀐다면 어떻게 될까? 이론적으로는 rising edge할때의 d값이 q값이 되지만, 바뀐 d값이 첫번째 latch를 지나가 q로 출력이 될 수 있다. 이를 hold time violation이라고 한다.
즉, clk edge 전/후로 input값이 안정화되는데 시간이 필요한 것이고,
해당 내용은 가속기설계시스템 포스팅에서 다룬 적이 있어서 더 내용이 궁금하다면 해당 포스팅을 읽어보기를 바란다.
1. Clock & Timing _ Violation
Sequential Circuit이란 이전 state + Input값으로 Output이 결정되는 회로이다. 입력에 의해 출력이 바로 결정되는 Combination Circuit과 Memory로 보통 구성되며, F/F사이의 combination logic이 path를 이루게 된다. Vi
ksh9-9.tistory.com
Flip Flop의 종류는 여러개가 있는데,
1. D-F/F
2. JK-F/F
3. T-F/F
크게 이정도가 떠오른다.
next 값을 Q(t+1) 라고 할 수 있는데,
1. Q(t+1) = D
2. Q(t+1) = JQ' + K'Q
3. Q(t+1) = T xor Q 이다.
D flip flop은 여태 계속 설명한 내용이므로 더 이상의 추가설명은 필요없을 것 같고, JK flip flop은 hold, reset, set, complement를 할 수 있는 flip flop으로 D-F/F이 1bit만 필요한것에 비해 2bit가 필요한 특징이 있다.
T flip flop은 toggle or hold를 할 수 있는 flip flop으로
필자는 하드웨어를 베릴로그로 설계하는 프로젝트를 할 때 D flip flop밖에 이용해보지 않았다. 필요하니까 만들어졌을텐데 필자도 아직 학부생이라서 (졸업진이지만) 어디다 활용을 직접 해보지는 못했다.
따라서 해당 내용에 대해서 더 알고 싶다면 구글에서 찾아보는것을 추천한다.
필자는 자기전에 유투브를 자주 보는데 영상을 시청하다가 물이 마시고 싶어서 잠시 중단 후 물을 마신다음에 다시 영상을 재생했다. 이 때 영상은 내가 멈췄던 부분부터 재생이 되는데, 이게 sequential logic이다.
input으로 재생버튼을 눌렀고, current state로 멈췄던 영상 부분이 저장되어있었으며, output으로 그 구간부터 재생이 되었기 때문이다. 그리고 next state가 계속해서 clk edge마다 update될 것이다.
Sequential logic에서 잊으면 안되는것이 input / c_state / n_state / output이다.
Combination logic을 할 때
Truth table작성 -> k-map으로 최적화 -> 최적화된 식 가지고 회로설계 순서대로 회로를 설계하였다.
Sequential logic도 table을 작성하고 이에 맞춰서 회로를 그릴 수 있지만 보통 FSM이라는걸 사용한다.
그래서 다음 포스팅에서는 FSM에 대해 정리를 할 생각이다.