FPGA(Field-Programmable Gate Array)는 SoC(System on Chip) 설계와 제품 개발에서 다양한 방식으로 활용될 수 있습니다. FPGA는 설계자가 직접 하드웨어 구조를 프로그래밍할 수 있어 유연성과 빠른 개발이 가능하다는 장점이 있습니다. 이를 바탕으로 제품 개발과 SoC 제작에 어떻게 사용될 수 있는지 몇 가지 중요한 활용 방법을 살펴보겠습니다.

1. FPGA의 제품 활용 방안

  • 프로토타이핑 및 검증: FPGA는 SoC의 하드웨어 설계를 실제 실리콘으로 구현하기 전에 검증하는 데 중요한 역할을 합니다. SoC 설계의 RTL 코드를 FPGA에 다운로드하여 실시간 테스트를 통해 오류를 조기에 발견할 수 있습니다. 이를 통해 설계 최적화와 실리콘 제작 전 하드웨어 검증을 효과적으로 수행할 수 있습니다.
  • 저비용, 소규모 양산 제품: 일부 제품에서는 ASIC(Application-Specific Integrated Circuit)으로 대체하기 전에 소량 생산 제품에 FPGA를 사용하기도 합니다. FPGA는 소량 생산이나 시장 검증 제품에서 비용 효율적이고 유연한 솔루션을 제공합니다.
  • 고속 데이터 처리 및 맞춤형 연산: FPGA는 병렬 처리를 통해 고속 연산이 필요한 분야에서 사용될 수 있습니다. 이미지 처리, 신호 처리, 통신 장비 등에서 특정 알고리즘을 하드웨어 가속기로 구현하여 높은 성능을 요구하는 애플리케이션에 적합합니다.
  • 업그레이드 가능한 하드웨어 플랫폼: FPGA의 재프로그램 가능성을 이용하여, 하드웨어 수준에서 기능을 추가하거나 성능을 개선할 수 있습니다. 이 방식은 IoT 기기나 통신 장비에서 새로운 프로토콜 지원이나 하드웨어 업그레이드를 용이하게 할 수 있습니다.

2. SoC 설계에서 FPGA의 활용

  • 초기 프로토타이핑: SoC 설계 초기 단계에서, FPGA는 시스템 검증과 성능 평가에 중요한 도구입니다. SoC의 하드웨어 설계를 FPGA에서 미리 구현하고, 이를 통해 시스템 통합 테스트를 수행할 수 있습니다. 실제 ASIC이나 SoC가 제작되기 전에 성능과 기능을 확인할 수 있는 효과적인 방법입니다.
  • IP 검증 및 통합: FPGA는 SoC 설계 시 사용되는 IP(Intellectual Property) 블록들을 통합하여 검증하는 과정에서도 활용됩니다. 예를 들어, 메모리 제어기나 통신 프로토콜 IP를 FPGA에 구현하여 소프트웨어와 하드웨어 간 상호작용을 사전에 테스트할 수 있습니다.
  • SoC의 가속기 역할: FPGA는 SoC 설계에서 하드웨어 가속기로 활용될 수 있습니다. SoC 내부에서 FPGA를 협력 처리 장치로 사용하여 특정 작업을 가속화하고, SoC의 성능을 극대화하는 데 기여할 수 있습니다. 예를 들어, 머신러닝, 신호 처리, 암호화 연산 등을 FPGA로 구현하여 CPU의 부담을 줄이고 성능을 개선할 수 있습니다.
  • 칩 설계 검증 환경: FPGA는 SoC 설계의 시스템 레벨 검증에서도 사용됩니다. SoC 설계에서 각종 인터페이스나 통신 프로토콜을 검증할 때, FPGA를 사용하여 실제 환경에서 동작하는지 확인할 수 있습니다.
  1. CLK (Clock)
    • CLK는 SRAM의 모든 동작을 동기화하는 클럭 신호입니다. 읽기 및 쓰기 연산은 클럭의 상승 또는 하강 에지에서 발생하며, 대부분의 동기식 SRAM은 클럭의 상승 에지에서 동작합니다.
  2. ADDR (Address)
    • ADDR는 접근할 메모리 셀의 주소를 지정하는 신호입니다. 이 신호는 SRAM의 특정 위치에서 데이터를 읽거나 쓰기 위해 사용됩니다.
  3. DIN (Data Input)
    • DIN은 쓰기 연산 시 입력되는 데이터 버스입니다. ADDR로 지정된 메모리 셀에 기록할 데이터를 담고 있습니다.
  4. DOUT (Data Output)
    • DOUT은 읽기 연산 시 출력되는 데이터 버스입니다. ADDR로 지정된 메모리 셀에서 읽어온 데이터를 출력합니다.
  5. EN (Enable)
    • EN은 SRAM을 활성화하는 신호입니다. EN이 활성화되면 SRAM이 동작할 준비가 되며, 비활성화 상태에서는 모든 동작이 중지되고 SRAM은 대기 상태에 들어갑니다. 읽기 및 쓰기 연산을 실행하려면 EN이 반드시 활성화되어야 합니다.
  6. WE (Write Enable)
    • WE는 쓰기 연산을 제어하는 신호입니다. WE가 활성화되면 쓰기 모드로 동작하여 SRAM에 데이터를 기록할 수 있으며, WE가 비활성화된 경우 SRAM은 읽기 모드로 동작합니다.

Write Operation (쓰기 연산 과정)

  1. ADDR 설정: 쓰기할 메모리 위치를 선택하기 위해 ADDR 버스에 주소를 설정합니다.
  2. DIN 설정: 기록할 데이터를 DIN 버스에 입력합니다.
  3. EN 활성화: EN 신호를 활성화하여 SRAM을 동작 가능한 상태로 만듭니다.
  4. WE 활성화: WE 신호를 활성화하여 쓰기 모드를 설정합니다.
  5. CLK 상승 에지: 클럭 신호가 상승 에지에 도달하면, ADDR로 지정된 메모리 위치에 DIN 값이 기록됩니다.
  6. WE 비활성화: 쓰기 작업이 끝난 후 WE 신호를 비활성화하여 쓰기 작업을 종료합니다.

Read Operation (읽기 연산 과정)

  1. ADDR 설정: 읽고자 하는 메모리 위치를 선택하기 위해 ADDR 버스에 주소를 설정합니다.
  2. EN 활성화: EN 신호를 활성화하여 SRAM을 동작 가능한 상태로 만듭니다.
  3. WE 비활성화: WE 신호를 비활성화하여 읽기 모드로 전환합니다.
  4. CLK 상승 에지: 클럭 신호가 상승 에지에 도달하면, ADDR로 지정된 메모리 위치에서 데이터가 DOUT 버스를 통해 출력됩니다.
  5. DOUT 출력: ADDR에 저장된 데이터가 DOUT으로 읽혀집니다.

> Address0번지의 Data를 Read하고 싶을땐

en = 1, we = 0 >> Read Setting, Addr = 0 > dout에 Read Data가 올라옵니다.

 

> Address2번지에 Data를 Write하고 싶을땐

en = 1, we = 1 >> Write Setting, Addr = 2 >> din에 Write하고 싶은 data를 만들어줍니다.

 

 

 


실습 ) BRAM에 Data를 Write/Read하기.

  1. IDLE상태를 확인하고, i_run신호와 num_cnt에 숫자를 입력합니다.
  2. 0~99까지의 Address에 data를 Write합니다.
  3. Address 0~99까지의 data를 Read합니다.
  4. Read가 끝난 후, DONE을 띄우고, 다시 IDLE로 돌아갑니다.

1. Reset 입력 후 Core는 IDLE상태로 진입.

 

2. i_run신호와 Core의 입력값을 넣어주게 되면 State는 Write가 된다.(ce,we = 1, Write operation)
3. 0~99Addr까지 Write한 후, we = 0으로 내려오고 Read operation 시작.

 

4. 1cycle뒤에 Valid신호와 함께 Read 종료, o_done신호 1cycle후 다시 i_idle신호

 

 

- Verilog Code

* https://github.com/Vamosssss/FPGA-Project/tree/main/01.%20BRAM%20Controller

 

AT First.

1. ROM (Read-Only Memory)

  • 읽기 전용 메모리로, 데이터를 한 번 기록하면 이후에는 읽기만 가능합니다.
  • 전원이 꺼져도 데이터가 유지되는 비휘발성 메모리입니다.
  • 주로 펌웨어, 부팅 프로그램(BIOS), 디바이스 설정 값 등 고정된 데이터를 저장하는 데 사용됩니다.
  • ROM의 종류에는 PROM, EPROM, EEPROM 등이 있으며, 각기 다른 방식으로 데이터를 한 번 쓰거나 수정할 수 있습니다.

2. RAM (Random Access Memory)

  • 읽기/쓰기 모두 가능한 메모리로, 프로그램 실행 시 데이터를 일시적으로 저장합니다.
  • 전원이 꺼지면 데이터가 사라지는 휘발성 메모리입니다.
  • SRAMDRAM으로 나뉘며, SRAM은 속도가 빠르고 DRAM은 더 많은 용량을 저장할 수 있습니다.
  • 임시 저장 공간으로, 운영체제와 실행 중인 프로그램에서 데이터를 빠르게 읽고 쓰기 위한 목적으로 사용됩니다.

 

Xililx FPGA에는 BRAM이라는 Component가 존재합니다.

BRAM은 Block RAM의 약어로 SRAM의 역할을 할 수 있도록 만든 Primitive Cell입니다.

BRAM의 사용법을 익힌다면, ASIC에서의 SRAM사용도 문제가 없습니다!

 

 

1. SPSRAM (Single-Port SRAM)

  • 하나의 포트만을 가지고 있어, 한 번에 하나의 접근(읽기 또는 쓰기)만 가능합니다.
  • 간단한 구조로, 비용전력 소모가 적지만, 동시에 여러 데이터에 접근할 수 없는 제약이 있습니다.
  • 일반적으로 캐시 메모리일반적인 임베디드 시스템에서 사용됩니다.

2. DPSRAM (Dual-Port SRAM)

  • 두 개의 독립적인 포트를 가지고 있어, 동시에 두 개의 데이터 접근(읽기/쓰기)을 지원합니다.
  • 복잡한 구조로 인해 비용전력 소모가 증가하지만, 병렬 처리고속 데이터 처리가 필요한 시스템에 유리합니다.
  • 주로 고속 버퍼FPGA, 통신 시스템에서 사용됩니다.

> DPRAM을 사용하게 될 경우 Control에서 유리한 부분이 있겠지만, Dual인 만큼 Area를 많이 차지하는 부분도 있습니다. 엔지니어는 항상 이러한 Trade-off를 고려하여 설계해야 합니다.

 


* https://dreamsailor.tistory.com/21

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

03. FPGA(Field Programmable Gate Array) Usage  (1) 2024.10.09
02. FPGA BRAM에 Write/Read해보기.  (0) 2024.10.08

+ Recent posts