Computer Science/논리설계

Sequential Logic Design

Chavo Kim 2020. 12. 8. 13:25

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로 아웃풋이 나온다.

 

RS Latch

- cross-coupled NAND gates

=> nor과 유사하게 작동한다.

NAND로 구성된 latch(set과 reset이 반대로 동작한다는 것을 기억하자)

 

RS-latch의 waveform

 

- Reset과 Set이 동시에 1이면 의도하지 않은 결과가 나타나게 된다. (금지된 state)

- 해당 state에 가지 않을 방법을 찾아야 함.

 

RS latch의 state diagram(Theoretical)

 

state diagram(theoretical)

Q-Q'(0-0), Q-Q'(1-1)인 순간에 oscillation이 발생할 수 있고 이를 race라고 부른다.

 

metastable

 

metastable : 우리는 원하지 않는 결과에서 안정화되는 상태 => 굉장히 불안정해서 작은 자극에도 다시 원하는 결과로 돌아오게 된다.

 

1-3. J-K Latch

forbidden state를 어떻게 없앨 수 있을까?

=> output feedback을 이용해서 절대 (1, 1)이 input으로 들어오지 못하도록 조정함

 

J-K latch

(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)일 때도 동일.

 

 

J=K latch characteristic equation

 

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) 값을 결정한다.

 

1s catching problem

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 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하다.

 

positive edge-triggered
negative edge-triggered
파랑->초록->분홍 순서대로 바뀔 때 output 값을 계산한 것

따라서 다음 waveform을 보면 clock이 0에서 1로 변할 때의 D 값이 저장되는 것을 알 수 있다.

 

positive edge-triggered D F/F

1-9. Sequential Logic in Verilog

verilog에서 edge triggered clock의 사용

Verilog에서는 이를 (posedge clk 또는 negedge clk)로 always의 sensitive block 안에 넣어준다.

 

R-S latch in Verilog 

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)

 

clocking event 전과 후 필요한 시간

 

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을 사용할 수 있다.

 

output timing constraints

 

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) 만큼 뺀 시간보다 작아야 한다.

 

maximum delay로 계산한 time 조건

minimum delay로 계산하면 hold time에 필요한 최소 시간을 구해줄 수 있다.

 

thold 이후에 D가 바뀌어야하기 때문에 tccq(contamintaion time) + tcd(combination delay)은 thold 보다 커야 한다.

combination delay의 최소 조건

따라서 로직의 delay time들이 주어졌을 때 해당 logic의 안정성을 평가할 수 있어야 한다.

 

예시 문제

t pd의 경우 가장 먼 거리(critical path)를 기준으로 계산하고,

t cd의 경우 가장 짧은 거리를 기준으로 계산한다.

 

hold time에서 constraint를 만족시키지 못한 경우 가장 짧은 거리에 buffer를 추가해서 tcd를 늘려줄 수 있다.

 

buffer를 통해 문제 해결

 

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에 대해 잘 작동하는 것을 보장할 수 있다.

 

clock skew가 있을 경우 setup constraints 계산
hold constraints

2-4. Comparision of latches and flip-flops

type에 따른 동작 비교

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