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

 

+ Recent posts