오늘은 맑음

Dual port register와 Single port register 본문

Digital logic

Dual port register와 Single port register

자전거 타는 구구 2021. 4. 22. 01:11
반응형

레지스터를 사용하는 방법으로는 크게 두 가지가 있습니다.

 

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)

 

CDC(Clock Domain Crossing)

CDC라 함은 서로 다른 clock으로 동작하는 clock domain끼리 데이터를 전송하는 것을 의미합니다. 이 때 다양한 문제가 발생하게 됩니다. 서로 전혀 상관 없는 전혀 다른 clock으로 동작하기 때문에 setup

wh00300.tistory.com

 

 

 

반응형
Comments