일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AMBA
- gcc 컴파일
- CLOCK GATING
- Pyverilog 튜토리얼
- CDC
- linux c 컴파일
- 데이터 해저드
- linux c++ 컴파일
- Pyvrilog tutorial
- DNN 가속기
- Data HAzard
- pygraphviz 설치 오류
- 딥러닝 가속기
- makefile
- 이진수 곱셈 알고리즘
- 대구 반도체 설계기업 특화
- pyverilog 설치 오류
- 남산업힐
- gpgpu-sim
- pytest-pythonpath 설치 오류
- Makefile compile
- Pyverilog 실행
- linux makefile 작성
- CUDA
- 컨벌루션 연산
- Pyverilog 설치
- systolic array
- 클럭 게이팅
- Design DNN Accelerator
- DNN Accelerator
- Today
- Total
목록CDC (3)
오늘은 맑음
서로 다른 clock domain끼리 multi-bit의 데이터를 주고 받는 방법 중 gray code와 async fifo를 이용한 방법에 대해 알아보겠습니다. 이 전 글에서 알아본 것 처럼 2개 혹은 3개 이상의 fifo chain을 이용해서 CDC를 해결하는 할 수 있지만 이 방법은 multi-bit의 데이터를 주고 받기에는 적합하지 않습니다. 이유는 clock skew와 같은 이유로 모든 데이터가 동일한 타이밍에 switching되지 않을 수 있기 때문입니다. 아래 그림 1은 CLK domain의 128bit의 DATA가 CLK' domain으로 전달되는 모습입니다. 128bit의 데이터 중 1번 bit가 skew로 인해 CLK'의 posedge에 제대로 전달되지 않은 모습입니다. 이러한 상황에서..
레지스터를 사용하는 방법으로는 크게 두 가지가 있습니다. 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를 사용..
CDC라 함은 서로 다른 clock으로 동작하는 clock domain끼리 데이터를 전송하는 것을 의미합니다. 서로 다른 clock domain에 있는 Flip Flop끼리 데이터를 주고 받기 때문에 문제가 발생합니다. 하나의 clock domain에서 데이터를 주고 받을 때 발생하지 않는 문제들이죠. 속도가 느린 Old Clock Domain과 속도가 빠른 New Clock Domain에서 데이터를 주고 받을 때를 가정하겠습니다. 만약 Old Clock Domain에서 데이터를 변경하는 동안 New Clock Domain의 clock이 rising edge가 되어 데이터를 받아간다면 이 때 가져간 데이터는 metastable state에 빠지게 됩니다. 충분히 안정되지 않은 데이터를 가져갔기 때문입니다..