일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 컨벌루션 연산
- Pyvrilog tutorial
- linux makefile 작성
- pyverilog 설치 오류
- 딥러닝 가속기
- pytest-pythonpath 설치 오류
- Data HAzard
- Design DNN Accelerator
- AMBA
- CUDA
- gpgpu-sim
- 대구 반도체 설계기업 특화
- Pyverilog 튜토리얼
- DNN Accelerator
- 남산업힐
- pygraphviz 설치 오류
- gcc 컴파일
- Makefile compile
- Pyverilog 설치
- DNN 가속기
- CLOCK GATING
- Pyverilog 실행
- systolic array
- linux c++ 컴파일
- 이진수 곱셈 알고리즘
- CDC
- makefile
- 데이터 해저드
- linux c 컴파일
- 클럭 게이팅
- Today
- Total
목록이진수 곱셈 알고리즘 (3)
오늘은 맑음
이번에는 multiplier X가 음수인 경우를 알아보겠습니다. 두 수의 부호비트가 모두 1일 때에는 이전의 계산법과 조금 달라집니다. 수식으로 풀어보겠습니다. 어떠한 승수(multiplier) X가 음수일 때 X는 다음과 같이 표현할 수 있습니다. $$X = -x_{x-1}2^{n-1} + \tilde{X}$$ 이 때 $\tilde{X} = \sum_{j=0}^{n-2} x_{j}2^{j}$입니다. 쉽게 표현해보면 X = 1101(-3)일 때 X = 1000 + 101을 의미합니다. 이전 (1), (2)에서 표현한 product U를 $\tilde{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 = x_{n-1}x_{n-2}...x_{1}x_{0}$$ $$A = a_{n-1}a_{n-2}...a_{1}a_{0}$$ 이 때 $x_{n-1}$과 $a_{n-1}$은 각 수의 부호 비트입니다. 곱셈 알고리즘은 단계(step) j에서 승수(multiplier)비트 $x_{j}$가 검출되고 결과물 $x_{j}A$가 $P^{(j+1)}$로 표기되는 부분 합(partial sum)에 더해지는 n-1단계(step)로 구성됩니다. $$P^{(j+1)} = (P^{(j)} + x_{j} * A) * 2^{-1}; j = 0, 1,..