* Coding Style

  • next_state is complemented by case statements, combinational logic
  • curr_state is F/F output of next_state
  • Above 2 things can be combined into one procedure block
  • localparam(parameter) is used for state encoding

 

 

- Verilog code

* https://github.com/Vamosssss/Basic/tree/main/07.%20FSM/01-1.%20FSM%202%20Design%20Style

'Verilog HDL > Basics' 카테고리의 다른 글

09-3. FSM(Finite State Machine) Transition통합, 분리  (0) 2024.10.07
09-2. FSM(Finite State Machine) Typiclal Design  (0) 2024.10.07
09. FSM (Finite State Machine)  (2) 2024.10.06
08. Pipeline  (1) 2024.10.06
07. Counter  (0) 2024.10.06

FSM(Finite State Machine, 유한 상태 기계)은 시스템이 일정한 개수의 상태를 가지며, 현재 상태와 입력 신호에 따라 상태가 변화하고, 그에 따라 출력을 결정하는 논리 구조를 말합니다. FSM은 주로 디지털 시스템 설계에서 사용되며, 복잡한 동작을 간단하게 설계하고 분석할 수 있도록 합니다.

 

> FSM을 사용하면 비교적  쉽게 Controller를 설계 할 수 있습니다.

참고로 FSM을 사용하지 않고 if else 분기문을 통하여 간단한 control 설계는 가능하지만, HW는 동시성의 개념 때문에  if else 문을 많이 사용하게되면 control이 꼬이게 될 수 있다.

 

한 번에 오로지 하나의 상태만을 가지게 되며, 현재 상태(Current State)란 임의의 주어진 시간의 상태를 칭한다.

이러한 기계는 어떠한 사건(Event)에 의해 한 상태에서 다른상태로 변화할 수 있으며, 이를 전이(Transition)이라한다.

 

IDLE >> (i_run==1) >> RUN >> (is_done?) >> DONE >> IDLE 

 

위와 같은  FSM Logic이 있다면 State는 IDEL, RUN, DONE 이렇게 세개가 존재합니다. 

현재 상태가 IDLE이고 (i_run==1)일때 RUN State로 전이(Transition)되고, 여기서 (i_run==1)이 Event가 됩니다.

 

Mealy & Moore Machine

  • Moore FSM: 출력이 현재 상태에만 의존하는 구조입니다. 즉, 현재 어떤 상태인지에 따라 출력이 결정됩니다.
  • Mealy FSM: 출력이 현재 상태와 입력 신호에 모두 의존하는 구조입니다. 즉, 입력에 따라 같은 상태에서 다른 출력을 만들 수 있습니다.

> Mealy Machine은 State와 Input 까지 보기 때문에, 출력값에 Timing을 손해보게됩니다.(Delay)

특히 output이 나갈때, F/F을 거치지 않고 나간다면, Noise나 Glitch와 같은 오동작 원인이 유발할 수 있습니다.

Moore는 input을 안보기 때문에, 단방향으로 Data가 흘러가는 시스템에서 사용할 수 있습니다.

Ready/Valid 등 양방향 Handshake interface등을 사용하게 된다면 Mealy Machine을 이용하여 설계해야 합니다.

이처럼 설계의 경험치가 쌓이면서 각각의 장단을 고려해 설계해야 합니다.

 


 

실습) Core를 Control하기 위한 FSM설계

IDLE >> (i_run==1) >> RUN >> (is_done?) >> DONE >> IDLE 

  • 처음 Reset이 입력되면 IDLE상태가 됩니다. 그리고 i_run신호를 '1'로 Set하기 전까지 대기합니다.
  • i_run신호가 '1'로 Set되면, IDLE에서 RUN으로 Transition이 발생합니다. is_done이 '1'이 될때 까지 유지합니다.
  • is_done이 '1'이 되면 DONE 상태가 되고, 1Cycle뒤에 IDLE로 돌아옵니다.

 

- Verilog Code

* https://github.com/Vamosssss/Basic/tree/main/07.%20FSM/01.FSM%20Basic

 

 

 

 

 

'Verilog HDL > Basics' 카테고리의 다른 글

09-2. FSM(Finite State Machine) Typiclal Design  (0) 2024.10.07
09-1 . FSM(Finite State Machine) Coding Style  (0) 2024.10.07
08. Pipeline  (1) 2024.10.06
07. Counter  (0) 2024.10.06
06. Combination Logic  (0) 2024.10.06

한 데이터 처리 단계의 출력이 다음 단계의 입력으로 이어지는 형태로 연결된 구조를 가리킨다. 이렇게 연결된 데이터 처리 단계는 한 여러 단계가 서로 동시에, 또는 병렬적으로 수행될 수 있어 효율성의 향상을 꾀할 수 있다. 각 단계 사이의 입출력을 중계하기 위해 Buffer가 사용될 수 있다.

* https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8_(%EC%BB%B4%ED%93%A8%ED%8C%85)

Pipeline은 여러 작업 단계를 동시에 처리하여 성능을 향상시키는 기법입니다.

  • 레이턴시 (Latency): 작업이 완료되기까지 걸리는 시간으로, 초기에는 길지만 파이프라인이 가동되면 각 클럭 사이클마다 새로운 작업이 완료되어 상대적으로 낮아집니다.
  • 처리량 (Throughput): 일정 시간 동안 처리할 수 있는 작업의 양으로, 파이프라인 구조로 인해 작업 흐름이 원활해져 증가합니다.

Hw에서의 Pipeline의 장점

 

  • 성능 향상: 여러 작업을 동시에 처리함으로써 CPU의 자원을 효율적으로 활용하여 전체 성능을 크게 향상시킵니다.
  • 자원 활용 극대화: 각 단계가 독립적으로 작동하여 동일한 하드웨어 자원을 더 효과적으로 사용할 수 있습니다. 이를 통해 성능 향상 및 비용 절감이 가능합니다.
  • 작업 병렬 처리: 여러 명령어를 동시에 실행할 수 있어 CPU의 처리 능력을 극대화하고, Latency를 줄입니다.
  • Throughput 증가: 파이프라인이 완전히 가동되면 매 클럭 사이클마다 작업이 완료되므로, 시스템의 전반적인 처리량이 증가합니다.

 

이러한 이유로 CPU혹은 GPU등의 Architecture 에서 Pipeline을 많이 사용합니다.

 

 


실습) Power of 8 Operation

  • Latency : 3 Cycle
  • Throughput : 1 Cycle

 

 

 

- Verilog Code

* https://github.com/Vamosssss/Basic/tree/main/06.Pipeline

 

> SW는 Sequential하기 때문에 Loop가 끝나기 전까지 새로운 입력을 받아서 계산이 불가능합니다.

반면, HW에서는 F/F이라는 Buffer가 있기 때문에 매 Cycle마다 새로운 입력을 받아서 계산이 가능합니다.

예를 들어, HW의 clock이 1GHz라고 한다면, 100번 연산을 하는데 102Cycle이 필요합니다

그에 반해, SW에서는 CPU가 3GHz 라고 하고, 3Cycle마다 결과가 나온다 하더라고 300Cycle이 필요하게 됩니다.

그래서 AI처럼 단순하면서도 많은 연산을 필요로 할 땐 HW를 사용할  수 밖에 없습니다.

그리고, Pipeline을 잘 유지하도록 설계가 되어야 Performance를 잘 끌어 올릴 수 있습니다.

 

'Verilog HDL > Basics' 카테고리의 다른 글

09-1 . FSM(Finite State Machine) Coding Style  (0) 2024.10.07
09. FSM (Finite State Machine)  (2) 2024.10.06
07. Counter  (0) 2024.10.06
06. Combination Logic  (0) 2024.10.06
05. D Flip-Flop & Reset(실습)  (0) 2024.10.06

Counter

Counter Logic은 디지털 회로에서 특정 이벤트의 발생 횟수를 세기 위해 사용되는 순차 회로입니다. 카운터는 입력 신호에 따라 증가하거나 감소하는 값을 유지하며, 보통 클럭 신호에 동기화되어 동작합니다.

 

Counter의 동작 원리

  • 카운터는 보통 D 플립플롭(D Flip-Flop)을 사용하여 구현됩니다. 클럭 신호가 들어오면 플립플롭의 출력 상태가 변하고, 이 상태가 다음 카운트 값으로 이어집니다.
  • 상태 변화는 다음과 같은 논리식을 통해 제어됩니다:
    • 업 카운터: Qn+1 = Qn + 1
    • 다운 카운터: Qn+1 = Qn - 1

 

> Counter Logic을 설계할 수 있는 능력을 기르게 된다면 간단하게 LED점등 부터, 현업에서 쓰이는 Memory의 원하는 Address data를 Read/Write하는 메모리 컨트롤러까지 여러 방면으로 사용 할 수 있습니다

또한, Clock, Reset, Sequential Logic, Combinational Logic, OverFlow등 여러 설계 스킬을 사용 할 수 있는 기본이 되는 Logic입니다.

 


실습) Positive Edge마다 1씩 증가하는 Counter 설계

  • Count 100
  • Count 100(always) >99

* Essential Clk, Reset

 

 

 - Verilog Code

https://github.com/Vamosssss/Basic/tree/main/05.%20Counter

 

'Verilog HDL > Basics' 카테고리의 다른 글

09. FSM (Finite State Machine)  (2) 2024.10.06
08. Pipeline  (1) 2024.10.06
06. Combination Logic  (0) 2024.10.06
05. D Flip-Flop & Reset(실습)  (0) 2024.10.06
04. D Flip-Flop  (0) 2024.10.06

조합 논리(Combinational Logic)는 디지털 회로 설계에서 입력 신호에 의해 즉각적으로 출력이 결정되는 논리 회로를 의미합니다. 즉, 조합 논리 회로는 메모리 요소나 시간적 상태(Clock)를 가지지 않고, 순수하게 입력에 의해 출력이 결정됩니다.

조합 논리 회로의 주요 특징은 다음과 같습니다:

  1. 순차 논리와의 차이: 순차 논리(Sequential Logic)는 클럭 신호를 기반으로 상태(State)가 변하는데 반해, 조합 논리는 클럭 신호가 필요 없으며 입력에 따라 즉시 출력이 결정됩니다.
  2. 입력과 출력 관계: 입력과 출력 사이의 관계는 고정된 논리 연산(Logical Operations)을 통해 정의됩니다. 이 연산에는 AND, OR, NOT, XOR 같은 기본적인 논리 게이트들이 포함됩니다.
  3. 예시: 조합 논리의 간단한 예로는 다음이 있습니다.
    • 디코더(Decoder): n 비트 입력 신호를 받아서 2^n 개의 출력을 발생시키는 회로.
    • 멀티플렉서(Multiplexer): 여러 개의 입력 중 하나를 선택하여 출력으로 내보내는 회로.
    • 반가산기(Half-Adder): 두 개의 입력 비트의 합과 캐리 비트를 계산하는 회로.
  4. 사용 사례: 조합 논리는 데이터 처리, 산술 연산, 제어 신호 생성 등에서 자주 사용되며, CPU 내부의 ALU(Arithmetic Logic Unit)나 디지털 회로의 제어 모듈 등에서도 핵심적인 역할을 합니다.


실습) Arithmetic Operation

  • Result Add
  • Result Sub
  • Result Mul
  • Result Div

* no Clk, Reset

 

- Verilog Code

* https://github.com/Vamosssss/Basic/tree/main/04.%20Combinational%20Logic


https://www.electronics-tutorials.ws/combination/comb_1.html

'Verilog HDL > Basics' 카테고리의 다른 글

08. Pipeline  (1) 2024.10.06
07. Counter  (0) 2024.10.06
05. D Flip-Flop & Reset(실습)  (0) 2024.10.06
04. D Flip-Flop  (0) 2024.10.06
03. Values & Reset  (0) 2024.10.06

실습 ) D F/F과 Reset 실습

-  Design Various type of D F/F 

1. Sync Reset : 동기 리셋은 클록 신호의 상승 에지에서만 리셋 신호가 영향을 미칩니다. 즉, 리셋 신호가 활성화되더라도 클록 신호의 에지가 발생할 때만 출력이 리셋됩니다.

 

2. Asyncreset : 비동기 리셋은 클록 신호와 상관없이 리셋 신호가 활성화되는 즉시 출력을 리셋합니다. 클록의 상승 에지와 관계없이 리셋 신호가 들어오면 바로 출력이 초기화됩니다.

3. Async reset_n : Active-Low 리셋은 리셋 신호가 0일 때 출력이 리셋되는 구조입니다. 즉, 리셋이 비활성화 상태일 때(=1) 플립플롭은 정상적으로 동작하고, 리셋 신호가 0으로 들어오면 즉시 출력을 0으로 초기화합니다.

 

4. Mixed Reset : 동기식 리셋비동기식 리셋이 혼합된 형태입니다. 보통 비동기 리셋은 빠른 초기화가 필요할 때 사용되고, 동기식 리셋은 클록 신호의 정확한 타이밍에 따라 상태를 제어하는 데 사용됩니다. 이 경우 비동기 리셋 신호는 비동기적으로 상태를 초기화하고, 동기 리셋 신호는 클록 에지에서만 상태를 초기화합니다.

5. No Reset : 플립플롭은 리셋 신호가 없는 형태로, 클록 신호에 따라 입력 데이터를 출력으로 전달합니다. 리셋 없이 데이터를 저장하고 유지하는 기본적인 형태의 플립플롭입니다. 설계가 단순하지만, 시스템 부팅이나 초기화 시에 별도로 상태를 초기화하는 논리가 필요할 수 있습니다.

 

* Reset이 없는 로직은 상대적으로 작기 때문에 고속의 입력이 들어오는 스트리밍 혹은 통신 로직을 구현할때 사용된다.

 

 - Verilog Code

* https://github.com/Vamosssss/Basic/tree/main/03.%20D%20Flip-Flop

'Verilog HDL > Basics' 카테고리의 다른 글

07. Counter  (0) 2024.10.06
06. Combination Logic  (0) 2024.10.06
04. D Flip-Flop  (0) 2024.10.06
03. Values & Reset  (0) 2024.10.06
02. Testbench & DUT(Design under test)  (0) 2024.10.06

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 플립플롭은 비동기적 리셋과 셋 신호를 제공하여 강제로 출력 값을 초기화하거나 설정할 수 있습니다.

동작

  1. 클록 신호의 상승 또는 하강 에지에서 D 입력 값이 Q 출력에 복사됩니다.
  2. 클록 에지가 발생하지 않으면 D 값이 Q로 전달되지 않고, 이전 상태를 그대로 유지합니다.
  3. Set 신호가 있을 경우 Q 값이 1로 설정되고, Reset 신호가 있을 경우 Q 값이 0으로 초기화됩니다.

* Flip Flop & Latch

- F/F과 Latch는 모두 1bit를 저장 할 수 있는 레지스터인 공통점이 있습니다.

  차이점으로는 F/F은 Clk의 Edge에 반응하는 Edge Senstive인 반면에 Latch는 Level Sensitive입니다

  (Enable신호가 있는 Latch가 있기때문에 Clk의 유무로 차이점을 구분하기에는 불명확한 부분이 있습니다)

- Latch는 호가 활성화되는 동안 입력을 계속해서 출력으로 전달합니다. 클록이 하이 레벨이 유지되는 동안 입력이 바로 출력에 반영되므로, 타이밍 제어가 까다롭습니다.

이러한 이유로 현업에서는 F/F을 많이 사용하고 있습니다.

TIP : D Flip/Flop Gate Count == 10Gates

 

 

https://commons.wikimedia.org/wiki/File:D-Type_Flip-flop_Diagram.svg

https://ecstudiosystems.com/discover/textbooks/basic-electronics/flip-flops/d-flip-flop/

'Verilog HDL > Basics' 카테고리의 다른 글

06. Combination Logic  (0) 2024.10.06
05. D Flip-Flop & Reset(실습)  (0) 2024.10.06
03. Values & Reset  (0) 2024.10.06
02. Testbench & DUT(Design under test)  (0) 2024.10.06
01. Clock 생성하기  (0) 2024.10.06

1. 0 (논리 0)

  • 의미: 논리적으로 "낮음" 또는 "False"를 나타냅니다.
  • 전압 상태: 전압이 낮은 상태를 의미하며, 실제 하드웨어에서는 0V에 가깝습니다.
  • 용도: 디지털 회로에서 기본적인 논리 연산을 수행할 때 사용됩니다. 예를 들어, AND 연산에서 입력 중 하나가 0이면 출력은 항상 0입니다.

2. 1 (논리 1)

  • 의미: 논리적으로 "높음" 또는 "True"를 나타냅니다.
  • 전압 상태: 전압이 높은 상태를 의미하며, 하드웨어에 따라 3.3V, 5V 등으로 설정됩니다.
  • 용도: 논리 연산에서 "참"을 나타내는 기본 값입니다. OR 연산에서 입력 중 하나가 1이면 출력은 1입니다.

3. x (unknown, 알 수 없는 상태)

  • 의미: 값이 불확실하거나 알 수 없는 상태를 나타냅니다. **'x'**는 시뮬레이션에서 초기화되지 않은 신호, 또는 충돌로 인해 값을 결정할 수 없는 상태를 나타낼 때 사용됩니다.
  • 원인: 다음과 같은 경우에 'x' 상태가 발생할 수 있습니다:
    • 레지스터나 신호가 초기화되지 않았을 때.
    • 서로 다른 신호 드라이버가 하나의 신호를 동시에 제어하려 할 때(충돌).
    • 잘못된 타이밍이나 클록 신호의 문제로 인해 값이 안정되지 않았을 때.
  • 용도: 시뮬레이션에서 발생하며, 하드웨어의 초기화 문제나 신호 간 충돌을 감지할 수 있도록 돕습니다.

4. z (high-impedance, 고임피던스 상태)

  • 의미: **'z'**는 신호가 고임피던스 상태에 있음을 의미하며, 신호 라인이 전기적으로 분리되었거나, 출력이 활성화되지 않은 상태입니다. 고임피던스는 신호가 다른 회로에 영향을 미치지 않는 상태를 나타냅니다.
  • 용도: Tri-state 버퍼와 같은 회로에서 많이 사용되며, 여러 장치가 동일한 데이터 버스를 공유할 때 버스의 충돌을 방지하기 위해 고임피던스 상태로 전환됩니다.
  • 상황: 신호가 고임피던스 상태에 있으면, 다른 회로들이 그 신호에 영향을 주지 않고 제어할 수 있습니다.

>> Reset을 입력해줌 으로 인해서 초기값이 X(Unknown)상태가 나오는 것을 방지 해줄 수 있다.

     이로 인해 F/F, Counter등의 로직에서 초기값을 설정하여 Logic이 정상 동작을 할수 있게 한다.

     But, 모든 Logic에 Reset이 들어가야 하는 것은 아니다.

 

 

 

'Verilog HDL > Basics' 카테고리의 다른 글

06. Combination Logic  (0) 2024.10.06
05. D Flip-Flop & Reset(실습)  (0) 2024.10.06
04. D Flip-Flop  (0) 2024.10.06
02. Testbench & DUT(Design under test)  (0) 2024.10.06
01. Clock 생성하기  (0) 2024.10.06

+ Recent posts