Sequential Logic Design
1. Sequential Circuits
1-1. Circuits with feedback
Sequential circuit의 output은 input, 전의 input, 전의 output으로 결정된다.
Logic circuit 내부에서 memory를 설치하는 것으로 이루어진다.
Door combination lock은 sequential circuit의 하나의 예시이다.
1) state가 하나의 메모리이고,
2) state는 combination circuit의 아웃풋이자 다음의 인풋이 된다.
3) combination에서의 output은 저장된다.
어떻게 아웃풋과 인풋을 연결할 것인가?
-> 아웃풋과 인풋을 바로 연결하면 끊임없이 값이 순환하게 된다.
1-2. Simplest Circuits with feedback(R-S latch)
1. Two inverters form a static memory cell
-> 값을 load하고 전원이 끊기지 않으면 값을 계속 저장하게 된다.
두 개의 switch를 이용해서 새로운 값을 load하고 저장해줄 수 있다.
2. Memory with cross-coupled gates
- Cross-coupled NOR gates
=> inverter pair와 유사하게 값을 저장할 수 있다.
- reset 신호가 1이면 0으로 아웃풋이 나오고 set을 1으로 하면 1로 아웃풋이 나온다.
- cross-coupled NAND gates
=> nor과 유사하게 작동한다.
RS-latch의 waveform
- Reset과 Set이 동시에 1이면 의도하지 않은 결과가 나타나게 된다. (금지된 state)
- 해당 state에 가지 않을 방법을 찾아야 함.
RS latch의 state diagram(Theoretical)
Q-Q'(0-0), Q-Q'(1-1)인 순간에 oscillation이 발생할 수 있고 이를 race라고 부른다.
metastable : 우리는 원하지 않는 결과에서 안정화되는 상태 => 굉장히 불안정해서 작은 자극에도 다시 원하는 결과로 돌아오게 된다.
1-3. J-K Latch
forbidden state를 어떻게 없앨 수 있을까?
=> output feedback을 이용해서 절대 (1, 1)이 input으로 들어오지 못하도록 조정함
(J, K)가 (1, 1)이 되면 Q값이 뒤집힌다. => Q' (toggle)
J는 S에 K는 R에 연결됨. (J, K)가 reset일 때, Q가 0일 때는 (0, 0), Q가 1일 때는 (0, 1)이 돼서 똑같은 결과를 만든다.
=> (J, K)가 (1,0)일 때도 동일.
R-S가 금지된 상태에 들어가는 것은 막아주지만 (1, 1) input이 지속될 경우 Race Condition에 빠진다.
이를 방지하기 위해 Master/Slave Flipflop을 사용 => 상태를 한 cycle에 한 번씩만 바뀌게 해줌.(clock concept)
Sequential Logic의 발전
R-S latch => J-K latch => Master-Slave F/F => D F/F & Edge-triggered F/F
1-4. Gated R-S latch
enable 신호를 사용해서, enable이 1일 때만 상태 변경이 가능한 상태가 됨.
enable이 0일 때는 그냥 hold
1-5. Clocks
clock : 0과 1이 일정한 주기로 반복되는 주기적인 신호를 뜻한다.
duty cycle : 1의 값을 가지는 비율(보통은 50%)
clock을 이용해서 gated R-S latch의 enable 값을 넣어줄 수 있다.
clock이 active할 때만 R-S latch의 상태를 바꿔줄 수 있다.
1-6. Master-slave Flipflop
Cascading latches
한 latch의 output과 다른 latch의 input을 연결
clock 신호를 inverter를 통해 반대로 넣어줌으로써 다른 타이밍에 동작할 수 있도록 해준다.
1에서 0으로 떨어지기 전의 값이 뒤의 R-S latch(slave) 값을 결정한다.
0-1-0 glitch가 master latch가 enable 때 생기면 해당 set 값을 기억하는 문제가 생기게 된다.
위의 그림에서도 (0, 0) input을 넣어서 (Q = 0) 값을 hold하려 했는데, S에서 0-1-0 glitch가 생김으로써 1 값을 hold하게 된다.
1-7. D flip-flop
input을 하나만 넣어서 S-R이 항상 complements가 되게 만든다.
(hold state로 갈 수가 없게 된다.)
clock이 disable되기 바로 전의 D 값이 flip-flop 내에 저장되게 된다.
D-flipflop에서는 총 10개의 gate를 사용한다. master-slave 연결은 그냥 wire로 연결
1-8. Edge-triggered flip-flops
6개의 gate만으로 똑같은 behavior를 가지는 circuit을 구현할 수 있다.
edge of clock signal(0-1로 바뀌거나 1-0으로 바뀔 때)에서만 sensitive하다.
따라서 다음 waveform을 보면 clock이 0에서 1로 변할 때의 D 값이 저장되는 것을 알 수 있다.
1-9. Sequential Logic in Verilog
Verilog에서는 이를 (posedge clk 또는 negedge clk)로 always의 sensitive block 안에 넣어준다.
Verilog에서 always sensitive block 안에 input을 모두 입력하지 않으면 자동적으로 latch로 생각하게 된다.
실수를 방지하기 위해 combination logic에서는 (*)을 사용해서 input을 모두 넣어줄 것
2. Timing methodologies
Rules for interconnecting components and clocks
=> 제대로된 시스템의 동작을 위해 꼭 구현되어야 한다.
Memory elements를 사용해서 기본 block을 만들 것이다. => Programmable한 Logic device를 만들 기 위해서
Basic rules for correct timing:
(1) 시간에 맞는 제대로된 input이 flip-flop에 주어져야 한다.
(2) flip-flop에서 한 사이클 안에 여러번의 state 변경이 있어서는 안된다.
terms
(1) clock : periodic event, clock이 위에서 아래로 떨어질 때나, 아래에서 위로 올라갈 때 상태가 바뀜
(2) setup time : clocking event가 생기기 전에 input이 stable해야 하는 최소한의 시간(Tsu)
(3) hold time : clocking event 이후에 input이 stable로 유지하기 위해 필요한 최소한의 시간(Th)
2-1. Timing Analysis for Sequential Logic
Timing
- F/F는 clock edge일 때 D를 sampling
- D가 원하는대로 sample되기 위해 sample될 때 stable을 유지해야하는 시간이 필요하다
- clock edge 근처에서 stable하지 않으면 원하지 않는 상태(metastability)로 갈 수 있다.
Input Timing Constraints
- Aperture time = clock edge 근처에서 stable해야하는 시간을 모두 합친 시간(Ta = Tsetup + Thold)
Output Timing Constraints
- Propagation delay(tpcq) = clock edge 이후에 output Q가 stable하다고 보증되는 시간
- Contamination delay(tccq) = clock edge 이후에 unstable 할 수도 있는 구간
tpcq가 tccq보다 크고, tpd 이후에 우리는 안정화된 output을 사용할 수 있다.
Dynamic Discipline
Synchronous sequential circuit input은 aperure time이 stable 해지기 위해 무조건 필요하다.
clock edge가 생기기 전 setup time만큼
clock edge가 생기고 난 후 hold time만큼
register 사이에는 다음과 같은 output delay가 발생하기 때문에, 그에 맞춰서 circuit을 설계해야 한다.
register 사이의 combination logic은 전의 output이 안정화된 이후 (propagation delay)에 사용할 수 있다.
maximum delay에 맞춰 time constraints를 계산해보면, combination이 진행되는 시간은 clock time에서 sequencing overhead(tpcq + tsetup) 만큼 뺀 시간보다 작아야 한다.
minimum delay로 계산하면 hold time에 필요한 최소 시간을 구해줄 수 있다.
thold 이후에 D가 바뀌어야하기 때문에 tccq(contamintaion time) + tcd(combination delay)은 thold 보다 커야 한다.
따라서 로직의 delay time들이 주어졌을 때 해당 logic의 안정성을 평가할 수 있어야 한다.
t pd의 경우 가장 먼 거리(critical path)를 기준으로 계산하고,
t cd의 경우 가장 짧은 거리를 기준으로 계산한다.
hold time에서 constraint를 만족시키지 못한 경우 가장 짧은 거리에 buffer를 추가해서 tcd를 늘려줄 수 있다.
2-2. Back-to-Back F/Fs
flip-flop끼리 연결하는 것을 의미한다.
중간에 combination logic이 없기 때문에 tcd는 따로 없고 hold도 거의 0이기 때문에 hold time violation을 신경 써줄 필요가 없다.
2-3. Clock Skew
모든 register에 대해 clock event가 똑같은 시각에 일어나지 않는다.
skew : difference between two clock edges
worst case에 대해 분석을 해야 모든 register에 대해 잘 작동하는 것을 보장할 수 있다.
2-4. Comparision of latches and flip-flops
level-sensitive latch의 경우 clock이 high할 때 모든 input change에 대해 변화한다.
edge-triggered의 경우 p->n(negedge) 이나 n->p(posedge)로 갈 때만!
2-5. Flip-flop features
1. Reset(set state to 0) - R
- Synchronous : clock edge에 맞춰서 값을 0으로 변화시킨다. Dnew = R'*Dold
- asyhnchronous : clock을 기다리지 않고 0으로 변화시킨다. 위험할 수 있음!
2. Preset or set (set state to 1) - S (or sometimes P)
- synchronous : Dnew = Dold + S(when next clock edge arrives) => clock이 edge일 때 1로 set
- asynchronous L : clock을 기다리지 않고 load. 위험할 수 있음
3. Both reset and preset
- Dnew = R' * Dold + S (set dominant, Set이 Reset보다 우선일 때)
- Dnew = R' * Dold + R'S (reset dominant, Reset이 Set보다 우선일 때)
4. Selective input capability (input enable or load)
- multiplexor at input : Dnew = LD' * Q + LD * Dold ()
- load may