일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DNN Accelerator
- 대구 반도체 설계기업 특화
- gcc 컴파일
- 클럭 게이팅
- linux makefile 작성
- pygraphviz 설치 오류
- Makefile compile
- linux c++ 컴파일
- 딥러닝 가속기
- 이진수 곱셈 알고리즘
- DNN 가속기
- Design DNN Accelerator
- Pyvrilog tutorial
- systolic array
- Data HAzard
- makefile
- CUDA
- 컨벌루션 연산
- CLOCK GATING
- AMBA
- gpgpu-sim
- Pyverilog 설치
- 남산업힐
- Pyverilog 튜토리얼
- 데이터 해저드
- pyverilog 설치 오류
- linux c 컴파일
- Pyverilog 실행
- pytest-pythonpath 설치 오류
- CDC
- Today
- Total
목록이진수 곱셈 알고리즘 (3)
오늘은 맑음

이번에는 multiplier X가 음수인 경우를 알아보겠습니다. 두 수의 부호비트가 모두 1일 때에는 이전의 계산법과 조금 달라집니다. 수식으로 풀어보겠습니다. 어떠한 승수(multiplier) X가 음수일 때 X는 다음과 같이 표현할 수 있습니다. X=−xx−12n−1+˜X 이 때 ˜X=∑n−2j=0xj2j입니다. 쉽게 표현해보면 X = 1101(-3)일 때 X = 1000 + 101을 의미합니다. 이전 (1), (2)에서 표현한 product U를 ˜X를 이용해 표현하면 다음과 같습니다. $$U = \tilde{X} · A = (X + x_{n-1} · 2^{n-1}) · A = X · A + A ·..

이번에는 multiplicand A가 음수인 경우의 곱셈 과정을 살펴보겠습니다. 이번에는 A = -5, X = 3인 경우 연산을 진행해보겠습니다. A는 음수이므로 2의 보수(2's complement)로 변환한 후 연산이 진행됩니다. -5를 2의 보수로 변환하면 다음과 같습니다. -5 = 1011 연산을 수행하면 위와 같습니다. 전체적인 과정은 양수 x 양수와 같으나 차이점이 있다면 shift할 때 MSB를 부호로 채워줍니다. 따라서 결과는 1110001이 되며 보수 형태를 다시 바꿔주게 되면 다음과 같습니다. 1110001 => 1110000 => 1001111 따라서 -15가 나오게 됩니다.

곱셈은 multiplicand(피승수/A) x multiplier(승수/X) = product(결과물/U)로 이루어진다. 디지털 회로에서 어떻게 곱셈이 이루어지는지 알아보겠습니다. X=xn−1xn−2...x1x0 A=an−1an−2...a1a0 이 때 xn−1과 an−1은 각 수의 부호 비트입니다. 곱셈 알고리즘은 단계(step) j에서 승수(multiplier)비트 xj가 검출되고 결과물 xjA가 P(j+1)로 표기되는 부분 합(partial sum)에 더해지는 n-1단계(step)로 구성됩니다. $$P^{(j+1)} = (P^{(j)} + x_{j} * A) * 2^{-1}; j = 0, 1,..