1. Positive Edge-Triggered D-FF
초창기에 탄생한 D-FF이다. 여러 개의 NAND-3 gate로 nSR latch를 만들어 FF을 구성한다.
(2개의 NAND gate를 cross-coupling 하면 nSR latch가 된다)
왼쪽에는 2개의 nSR latch가 input stage로, 오른쪽에는 1개의 nSR latch가 output stage로 존재하며
CLK이 low일 때 input stage의 output은 모두 high 이므로
output latch는 input signal에 관계 없이 preserve 상태가 된다.
요새는 대부분의 standard cell에서 얘보다는 아래에서 설명할 TGFF를 훨씬 더 많이 사용한다.
2. Transmission-Gate D-FF (TGFF)
Standard cell library에서 가장 많이 사용되고 있는 D-FF 이다.
최신 D-FF 논문들의 대부분은 이 FF을 baseline으로 잡고 자기네들의 performance를 비교한다.
대충 만들어도 상당히 잘 동작하고, fully-static operation을 하기 때문에
kHz와 같은 low-frequency로의 scaling에도 용이하다.
(Dynamic D-FF은 leakage current 때문에 low-frequency 에서 안정적으로 동작하지는 않는다.)
반면, >100MHz의 frequency를 사용하면서 D-FF의 power 혹은 area를 아끼고 싶다면 (ex. PLL)
dynamic D-FF인 True-Single-Phase-Clock (TSPC) D-FF의 선택지도 있다.
아래 링크는 Razavi 교수님의 친절한 강의자료.
TSPC Logic [A Circuit for All Seasons]
Since its introduction in the 1980s, true single-phase clock (TSPC) logic [1] has found widespread use in digital design. Originally proposed as a high-speed topology, the TSPC structure also consumes less power and occupies less area than other methods. I
ieeexplore.ieee.org
TGFF는 2개의 latch stage로 구성되어 있기 때문에 master-slave latch라 부르기도 한다.
Master latch에 있는 input SW는 Track-and-Hold (T/H) 역할을 한다.
CLK=H일 때
master latch는 closed-loop을 형성하고, CLK=L 일 때까지 들어오고 있던 이전 input을 잡아내 hold 한다.
SW가 OFF가 되기 때문에, 새로 들어오는 D와 무관하게 master latch의 state는 positive feedback을 통해 유지된다.
또한, slave latch로 들어가는 input SW는 ON이므로, master latch의 data를 Q와 QB를 통해 출력한다.
CLK=L일 때
master latch는 track mode, slave latch는 hold mode가 된다.
Slave latch의 input SW가 OFF이므로 Q와 QB는 master latch와 독립되어 이전 state를 positive feedback을 통해 유지한다.
Master latch의 input SW는 ON이므로 D를 track 함과 동시에 open-loop 상태를 유지한다.
여기서 다시 CLK=H rising edge가 나타나면 master latch는 hold mode에 들어가면서 track하던 D를 latching하고,
slave latch의 input SW는 ON이 되며 master latch의 state를 받아 Q와 QB를 통해 출력한다.
즉, FF의 output이 바뀌는 순간은 rising edge가 발생할 때 뿐이고 positive-edge triggering이 된다.
Verilog RTL의 아래 code에 해당한다.
<<코드가 보이지 않는다면 오른쪽 아래의 달모양 버튼으로
테마를 다크모드에서 화이트모드로 바꿔주세요>>
always @ (posedge clk)
2.1. Asynchronous-Set/Reset TGFF (NOR-Based)
중간의 latching이 일어나는 곳에 INV 대신 NOR gate를 넣어주면 asynchronous set/reset DFF을 만들 수 있다.
RST에 high가 들어오면 Q는 무조건 low가 되므로 slave latch가 hold mode에 들어가면 QB는 무조건 high가 된다.
Slave latch가 track mode에 들어가면 master latch가 hold mode인 상황이고,
이 때 NOR gate에 의해 master latch의 state는 low이고 Q 및 QB는 항상 low, high가 된다.
2.2. Asynchronous-Reset TGFF (NAND-Based)
NOR gate보다는 NAND gate를 쓰는 것이 size도 더 줄일 수 있고 power도 더 적게 먹으므로,
똑같은 원리를 이용해 위와 같이 asynchronous reset DFF을 만들 수 있다.
RSTB가 low일 때 QB는 항상 high가 되므로 slave latch가 hold일 때 Q는 항상 low가 되며,
master latch의 NAND output 또한 항상 high가 된다.
SET의 경우에도 signal을 SETB로 맞춰준 뒤 NOR gate가 있어야 할 자리에 NAND gate를 넣어주면 된다.
(set operation도 비슷한 원리로 넣을 수 있음)