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

 

1. Testbench (테스트벤치)

Testbench는 설계된 하드웨어 모듈을 시뮬레이션하고 검증하기 위해 작성된 코드입니다. 실제 하드웨어에서 사용하는 입력 신호를 제공하고, 결과가 예상대로 나오는지 확인하는 역할을 합니다. Testbench는 실제 하드웨어로 구현되지 않으며, 시뮬레이션에서만 동작합니다.

Testbench의 주요 기능:

  • 입력 신호 생성: Testbench는 DUT에 필요한 입력 신호를 생성합니다. 이 신호들은 클록, 리셋, 데이터 입력 등 DUT의 동작을 유도하는 모든 신호를 포함합니다.
  • 결과 검증: Testbench는 DUT로부터 나오는 출력 신호를 확인하고, 예상한 결과와 비교하여 DUT가 올바르게 동작하는지 검증합니다.
  • 시뮬레이션 종료: 특정 시간 후 시뮬레이션을 종료하거나 특정 조건이 충족되면 시뮬레이션을 자동으로 종료합니다.

2. DUT (Device Under Test, 테스트 대상 장치)

DUT는 Testbench에서 검증하려는 실제 설계 모듈입니다. DUT는 최종적으로 하드웨어로 구현되며, Testbench에서 생성된 신호를 받아 그에 따라 동작하는 시스템의 중심이 됩니다.

DUT의 주요 역할:

  • 설계된 하드웨어 동작: DUT는 설계자가 구현한 하드웨어의 기능을 수행하는 모듈입니다. Testbench에서 제공된 입력 신호에 따라 동작하며, 출력 신호를 생성합니다.
  • 검증 대상: DUT는 검증 대상이므로, Testbench를 통해 올바르게 동작하는지 여부가 테스트됩니다. DUT의 출력이 예상한 결과와 일치하는지 확인하는 것이 Testbench의 목적입니다.

실습) Clock Gating Model 설계하기

> Logic을 사용하지 않을 때에도 Clock신호를 계속 입력하게 된다면 Power을 계속 소모하게 됩니다.

   이를 방지 하고자, 전력 절감 기술 중 하나로써, Clock 을 On/Off시키는 Clock Gating Model을 사용합니다.

>실제 현업에서 Clock을 함부로 건들이면 여러 문제가 야기 될 수 있기 때문에, 보통 Clock Gating용 Cell을 Library에서 불러서 사용합니다.

 

 

- Verilog Code

* https://github.com/Vamosssss/Basic/tree/main/02.%20Clock_Gating_model

 

 

 

* https://wpaud16.tistory.com/entry/Verilog-HDL-DUT-Test-Bench-8bit-adder-8%EB%B9%84%ED%8A%B8-%EB%8D%A7%EC%85%88%EA%B8%B0-vivado

'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
03. Values & Reset  (0) 2024.10.06
01. Clock 생성하기  (0) 2024.10.06


 

 

1. Clock (클록)

클록 신호는 디지털 회로에서 동작의 기준이 되는 타이밍 신호입니다. 클록은 일정한 주기로 반복되는 파형을 가지며, 시스템 내부의 상태 변화를 동기화하는 데 사용됩니다. 클록 신호의 상승 또는 하강 에지에서 신호가 처리되거나 데이터가 전송되는 등 다양한 작업이 발생합니다. 대표적인 클록 신호 형태는 사각파이며, 일반적으로 클록 신호는 매우 정확한 주기를 가지도록 설계됩니다.

2. Frequency (주파수)

주파수는 클록 신호가 1초에 몇 번 반복되는지를 나타내는 값으로, Hz(헤르츠) 단위로 표현됩니다. 주파수는 클록 신호의 속도를 나타내며, 더 높은 주파수는 더 짧은 시간에 더 많은 작업을 처리할 수 있음을 의미합니다.

  • 여기서 period는 클록 신호가 한 번 주기적으로 반복되는 데 걸리는 시간을 의미합니다.

3. Period (주기)

주기는 클록 신호의 한 사이클이 완료되는 데 걸리는 시간을 나타내며, 초(s) 단위로 측정됩니다. 주기는 클록 신호의 주파수와 역수 관계에 있습니다. 즉, 주파수가 높을수록 주기는 짧아지고, 주파수가 낮을수록 주기는 길어집니다.

4. 클록, 주파수, 주기의 관계

클록의 주파수와 주기는 역수 관계에 있습니다. 예를 들어, 클록 주파수가 1MHz(메가헤르츠)라면 주기는 1μs(마이크로초)가 됩니다. 반대로, 주기가 10ns(나노초)인 클록 신호는 100MHz의 주파수를 갖습니다.

 

 

 


실습) 100MHz 의 Freq을 갖는 clock 생성하기

- Verilog Code

* https://github.com/Vamosssss/Basic/blob/main/01.%20tb_clock_generator.v

 

 

 

 

* http://watson.latech.edu/WatsonRebootTest/ch12s4p2.html

 

Watson

12.4.2  The clocked R-S flip-flop A clock is a device that generates a signal that periodically cycles between a high state, “1”, and a low state, “0”. Clocks ensure that the operations performed by a computer proceed in an orderly manner. They do

watson.latech.edu

 

 

 

 

'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
03. Values & Reset  (0) 2024.10.06
02. Testbench & DUT(Design under test)  (0) 2024.10.06

+ Recent posts