일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- gcc 컴파일
- CDC
- 데이터 해저드
- AMBA
- pytest-pythonpath 설치 오류
- Pyverilog 실행
- pyverilog 설치 오류
- CUDA
- linux c++ 컴파일
- Data HAzard
- systolic array
- Pyvrilog tutorial
- 남산업힐
- 컨벌루션 연산
- Pyverilog 설치
- Makefile compile
- 클럭 게이팅
- 딥러닝 가속기
- linux c 컴파일
- gpgpu-sim
- 이진수 곱셈 알고리즘
- CLOCK GATING
- pygraphviz 설치 오류
- makefile
- DNN Accelerator
- Design DNN Accelerator
- DNN 가속기
- Pyverilog 튜토리얼
- 대구 반도체 설계기업 특화
- linux makefile 작성
- Today
- Total
오늘은 맑음
Multiplication algorithm(1) 본문
곱셈은 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)+xj∗A)∗2−1;j=0,1,2,...,n−2
이 때 첫 번째 단계 P(0)=0입니다.
(P(j)+xj∗A)를 2−1로 곱하게 되면 우측으로 1번 산술 시프트가 이루어지며 이는 P(j+1)에서 자리수를 맞춰주기 위함입니다.
이로 인해 x(j+1)는 x(j)에 비해 2배가 되며 n-1 단계의 수식을 전개하면 다음과 같습니다
P(n−1)=(P(n−2)+xn−2·A)·2−1
=P(n−3)+xn−3·A)·2−1+xn−2·A)·2−1+xn−2·A)·2−1
=(xn−22−1+xn−32−2+...+x02−(n−1))·A
=(n−2∑j=0xj2−(n−1−j))·A
만약 X와 A가 모두 양수라면 최종 결과물 U는 다음과 같습니다.
U=2n−1·P(n−1)=(n−2∑j=0xj2j)A=X·A
X와 A가 모두 양수일 때 곱셈 과정을 살펴보겠습니다.
A = 5, X = 3인 경우 두 수를 이진수로 나타내면 다음과 같습니다.
A = 0101, X = 0011
곱셈 과정을 전개해 보겠습니다.

첫 0번째 단계에서는 P(0)는 0이 됩니다.
X의 0번째 비트 x0이 1이므로 P(1)에 A를 더해줍니다.
더해준 이후 2−1을 곱해주게 되므로 우측으로 시프트가 이루어집니다.
다음 1번째 단계 역시 0번째 단계와 같이 동작을 수행합니다.
2번쨰 단계에서는 X의 2번째 비트가 0이므로 Add 과정 없이 shift만 수행이 됩니다.
따라서 결과값은 000_1111이 되어 15가 나왔습니다.
'Digital logic' 카테고리의 다른 글
Multiplication algorithm(3) (0) | 2020.04.17 |
---|---|
Multiplication algorithm(2) (0) | 2020.04.17 |
CDC(Clock Domain Crossing) (4) | 2019.12.05 |
Metastability/Metastable state (0) | 2019.12.04 |
fpga와 asic설계시 유의사항 (0) | 2019.12.01 |