일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- gcc 컴파일
- DNN 가속기
- CDC
- makefile
- 이진수 곱셈 알고리즘
- linux c++ 컴파일
- 클럭 게이팅
- pyverilog 설치 오류
- linux c 컴파일
- pytest-pythonpath 설치 오류
- Pyverilog 튜토리얼
- AMBA
- systolic array
- DNN Accelerator
- 남산업힐
- Makefile compile
- gpgpu-sim
- Pyverilog 실행
- Data HAzard
- pygraphviz 설치 오류
- Pyvrilog tutorial
- linux makefile 작성
- 데이터 해저드
- CUDA
- Design DNN Accelerator
- 컨벌루션 연산
- Pyverilog 설치
- CLOCK GATING
- 딥러닝 가속기
- 대구 반도체 설계기업 특화
- Today
- Total
오늘은 맑음
Dual port register와 Single port register 본문
레지스터를 사용하는 방법으로는 크게 두 가지가 있습니다.
1. Single port register
2. Dual port register
1번은 일반적으로 알고 있는 Single port register입니다.
read와 write를 동시에 할 수 없죠.
따라서 write와 read를 번갈아가면서 사용해줘야 합니다.
반면에, Dual port register는 read port와 write port가 분리되어 있습니다.
따라서 read와 write를 동시에 할 수 있습니다.
정말 좋겠죠? 데이터를 계속 밀어넣음과 동시에 반대쪽에서는 빼서 사용할 수 도 있답니다.
하지만 항상 좋을 수는 없습니다.
모름지가 어떤 한 가지가 좋아진다면, 무언가는 안좋아지기 마련이죠.
Dual port register를 사용하면 같은 크기의 buffer를 할당했을 때 Single port register보다 훨씬 많은 자원(logic)을 필요로 합니다. 따라서 꼭 필요한 경우가 아니면 사용하기 편리한 Dual port register보다는 Single port register를 사용하는 것이 좋죠.
Single port register를 쓰면 자원을 아낄 수 있는 대신에 컨트롤 하기가 복잡해집니다. write하지 않을 때 read를 하거나, read를 하지 않을 때 write를 적절히 해주어야 합니다. 또는 더블 버퍼링을 이용해서 해결하는 방법도 있지만 이 방법 역시 두 개의 Single port register를 사용하게 되므로 컨트롤은 편리해지지만 자원을 많이 사용하게 됩니다. 하지만 이러한 방법들 역시 상황에 알맞게 구현을 하는 것이 중요하지, 꼭 어떤 방법이 최고다라는 왕도는 없습니다.
그렇다면 Dual port register는 언제 사용할까요?
가장 대표적으로는 CDC(Clock Domain Crossing)에서 버퍼가 필요할 때 사용합니다.
두 개의 서로 다른 clock domain에서 데이터를 주고 받는 상황을 CDC라고 표현합니다. 이 때 CDC처리를 잘 해주지 못한다면 엉뚱한 데이터가 전달되는 등 큰 에러를 발생하기 쉽습니다. 따라서 CDC상황에서 버퍼가 필요한 경우 Dual port register를 이용해서 서로 다른 clock domain에 있는 모듈끼리 데이터를 전달합니다.
Dual port register는 두 개의 clk을 받을 수 있습니다. 따라서 aclk을 사용하는 모듈에서 Dual port register에 write를 하고, bclk을 사용하는 모듈에서 Dual port register에서 데이터를 read하는 방식으로 데이터를 전달합니다.
CDC 관련 포스팅
2019.12.05 - [Digital logic] - CDC(Clock Domain Crossing)
'Digital logic' 카테고리의 다른 글
verilog 문법(4) and/or 비트연산자, 논리연산자 (0) | 2021.05.01 |
---|---|
verilog 문법(3) part select (0) | 2021.04.24 |
verilog hdl 설계시 주의할 점(2) (2) | 2021.04.21 |
verilog 문법(2) ! 와 ~(산술 부정과 비트단위 부정) (0) | 2021.04.18 |
verilog 문법(1) 결합연산자, 중복연산자 (0) | 2020.07.09 |