FSM(Finite State Machine, 유한 상태 기계)은 시스템이 일정한 개수의 상태를 가지며, 현재 상태와 입력 신호에 따라 상태가 변화하고, 그에 따라 출력을 결정하는 논리 구조를 말합니다. FSM은 주로 디지털 시스템 설계에서 사용되며, 복잡한 동작을 간단하게 설계하고 분석할 수 있도록 합니다.
> FSM을 사용하면 비교적 쉽게 Controller를 설계 할 수 있습니다.
참고로 FSM을 사용하지 않고 if else 분기문을 통하여 간단한 control 설계는 가능하지만, HW는 동시성의 개념 때문에 if else 문을 많이 사용하게되면 control이 꼬이게 될 수 있다.
한 번에 오로지 하나의 상태만을 가지게 되며, 현재 상태(Current State)란 임의의 주어진 시간의 상태를 칭한다.
이러한 기계는 어떠한 사건(Event)에 의해 한 상태에서 다른상태로 변화할 수 있으며, 이를 전이(Transition)이라한다.
한 데이터 처리 단계의 출력이 다음 단계의 입력으로 이어지는 형태로 연결된 구조를 가리킨다. 이렇게 연결된 데이터 처리 단계는 한 여러 단계가 서로 동시에, 또는 병렬적으로 수행될 수 있어 효율성의 향상을 꾀할 수 있다. 각 단계 사이의 입출력을 중계하기 위해 Buffer가 사용될 수 있다.
1. Sync Reset : 동기 리셋은 클록 신호의 상승 에지에서만 리셋 신호가 영향을 미칩니다. 즉, 리셋 신호가 활성화되더라도 클록 신호의 에지가 발생할 때만 출력이 리셋됩니다.
2. Asyncreset : 비동기 리셋은 클록 신호와 상관없이 리셋 신호가 활성화되는 즉시 출력을 리셋합니다. 클록의 상승 에지와 관계없이 리셋 신호가 들어오면 바로 출력이 초기화됩니다.
3. Async reset_n : Active-Low 리셋은 리셋 신호가 0일 때 출력이 리셋되는 구조입니다. 즉, 리셋이 비활성화 상태일 때(=1) 플립플롭은 정상적으로 동작하고, 리셋 신호가 0으로 들어오면 즉시 출력을 0으로 초기화합니다.
4. Mixed Reset : 동기식 리셋과 비동기식 리셋이 혼합된 형태입니다. 보통 비동기 리셋은 빠른 초기화가 필요할 때 사용되고, 동기식 리셋은 클록 신호의 정확한 타이밍에 따라 상태를 제어하는 데 사용됩니다. 이 경우 비동기 리셋 신호는 비동기적으로 상태를 초기화하고, 동기 리셋 신호는 클록 에지에서만 상태를 초기화합니다.
5. No Reset : 플립플롭은 리셋 신호가 없는 형태로, 클록 신호에 따라 입력 데이터를 출력으로 전달합니다. 리셋 없이 데이터를 저장하고 유지하는 기본적인 형태의 플립플롭입니다. 설계가 단순하지만, 시스템 부팅이나 초기화 시에 별도로 상태를 초기화하는 논리가 필요할 수 있습니다.
* Reset이 없는 로직은 상대적으로 작기 때문에 고속의 입력이 들어오는 스트리밍 혹은 통신 로직을 구현할때 사용된다.
D 플립플롭(D Flip-Flop)은 디지털 회로에서 가장 기본적이고 널리 사용되는 플립플롭 중 하나로, 데이터 레지스터, 신호 동기화, 상태 저장 등의 용도로 사용됩니다. D는 'Data' 또는 'Delay'를 의미하며, 입력된 데이터를 클록 신호의 상승 또는 하강 에지에서 출력으로 전달하는 방식으로 작동합니다.
기본 동작 원리
입력 (D): D 플립플롭의 입력 신호로, 'Data'를 의미합니다. 클록 신호가 작동할 때 D 입력이 출력으로 전달됩니다.
출력 (Q): D 입력이 클록에 동기화되어 저장된 값이 Q 출력으로 나타납니다.
클록 (Clock): 클록 신호는 D 플립플롭이 동작하는 타이밍을 제어합니다. 클록 신호의 상승 에지(positive edge) 또는 하강 에지(negative edge)에서 입력 D의 값이 출력 Q로 전달됩니다.
Reset/Set: 일부 D 플립플롭은 비동기적 리셋과 셋 신호를 제공하여 강제로 출력 값을 초기화하거나 설정할 수 있습니다.
동작
클록 신호의 상승 또는 하강 에지에서 D 입력 값이 Q 출력에 복사됩니다.
클록 에지가 발생하지 않으면 D 값이 Q로 전달되지 않고, 이전 상태를 그대로 유지합니다.
Set 신호가 있을 경우 Q 값이 1로 설정되고, Reset 신호가 있을 경우 Q 값이 0으로 초기화됩니다.