CRC๋?
CRC(Cyclic Redundancy Checking) ์ํ ์ค๋ณต๊ฒ์ฌ๋ ์๋ฌ๊ฒ์ถ ๋ฅ๋ ฅ์ด ์ฐ์ํ ‘์ํ๋ถํธ’์ ์ผ์ข ์ด๋ค. ์ํ๋ถํธ๋ ์ ํ ๋ธ๋ก ๋ถํธ(๋ถํธ์ด ์งํฉ์ด ์ ํ ๋ฒกํฐ๊ณต๊ฐ์ ํ์ฑํ๋ ๋ถํธ)์ ์ผ์ข ์ผ๋ก์ ์ฃผ์ํน์ง์ผ๋ก ์ ์ ์๋ ์ํ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ ๋ถํธํ์ ์ฉ์ดํ๋ฉฐ ๋งค์ฐ ํจ์จ์ ์ธ ๋ณตํธํ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์๋ค.
CRC์ ํน์ง
1. ์ฐ๋ฐ ์๋ฌ(Random Error) ๋ฟ๋ง ์๋๋ผ, ์ฐ์ง ์๋ฌ(Burst Error)์์๋ ๊ฒ์ถ ๋ฅ๋ ฅ์ด ์ฐ์ํ๋ค. ์ฐ์ง์๋ฌ๋ ๋ฐ์ดํฐ ์ ์ก ์ ํ ๋ฌด๋ฆฌ์ ๋ฐ์ดํฐ์ ์ง๋จ์ ์ผ๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๊ณ , ์ด์ ๋ฐ๋๋ก ์ฌ๊ธฐ์ ๊ธฐ ์ฐ๋ฐ์ ์ผ๋ก ๋๋คํ๊ฒ ๋ํ๋๋ ์ค๋ฅ๋ฅผ ์ฐ๋ฐ ์๋ฌ ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
2. ์ํ๋ถํธ์ ๊ธฐ๋ฐํ ์ค๋ฅ๊ฒ์ถ๋ถํธ์ด๋ค. ์ก์ ์ธก์์ ๋ฐ์ดํฐ์ ๋ํด ํน์ ๋คํญ์์ผ๋ก ๋๋ ๊ฒฐ๊ณผ๋ฅผ ์ฌ๋ถ์ FCS์ ๋ง๋ถ์ฌ ๋ณด๋ด๋ฉด, ์์ ์ธก์์ ๋์ผํ ๋ฐฉ๋ฒ์ผ๋ก ๊ณ์ฐํ ๊ฒฐ๊ณผ์์ ์ผ์น์ฑ์ผ๋ก ์ค๋ฅ๊ฒ์ฌ๋ฅผ ํ๋ ๊ธฐ์ ์ด๋ค.
์ฌ๊ธฐ์ FCS๋(Frame Check Sequence) ํ๋ ์ ๋ ๋ถ๋ถ์ ์์ ์ธก์ ์๋ฌ๊ฒ์ถ์ ๋๊ธฐ์ํด ์ฝ์ ํ๋ ํ๋์ด๋ค. ์์์ธก์ ์์ ์ด ๊ฐ๊ณ ์๋ FCS์ ์ ์ก๋์ด์จ ํ๋ ์์ FCS์ ๋น๊ตํ์ฌ ์๋ฌ ์ฌ๋ถ๋ฅผ ํ์ธ ๊ฐ๋ฅํ๊ณ ์๋ฌ ํ์ธ์์๋ ํด๋น ํ๋ ์์ ํ๊ธฐํ๊ณ ์ก์ ์ธก์ ์ฌ์ ์ก์ ์๊ตฌํ๋ค.
CRC ์์ฑ ๋ฐ ๊ฒ์ฌ ๋ฐฉ๋ฒ
1. ์ก์ ๋จ
์ ์กํ ์๋ ๋ฐ์ดํฐ ํ๋ ์(k bit)์ ๋ํด ๋ฏธ๋ฆฌ ์ ์๋ CRC๋คํญ์์ผ๋ก ๋๋๊ณ ๊ทธ ๋๋จธ์ง ๊ฐ์ ์๋์ ๋ฐ์ดํฐ ํ๋ ์ ๋ค์ FCS(n-k bits)๋ก ๋ถ์ธ๋ค. ์ด๋, ๊ทธ ๊ฒฐ๊ณผ ํ๋ ์(์๋์ ๋ฐ์ดํฐ + FCS)์ด ๋ฏธ๋ฆฌ ์ ์๋ CRC ๋คํญ์์ ์ํ์ฌ ์ ํํ ๋๋์ด ๋จ์ด์ง ์ ์๊ฒ ๋๋ค.
๊ทธ ๊ฒฐ๊ณผ ํ๋ ์(์๋์ ๋ฐ์ดํฐ + FCS)(n bits)์ ์ก์ ํ๋ค.
2. ์์ ๋จ
์์ ๋ ํ๋ ์ (n bits)์ ๋ฐ์ ํ์ CRC ๊ฒ์ฌ๋ฅผ ํ๊ฒ ๋๋๋ฐ, ์์ ๋ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ก์ ์์ ๊ฐ์ ๋ฏธ๋ฆฌ ์ ์๋ CRC ๋คํญ์์ผ๋ก ๋๋์ด์ ๋๋จธ์ง๋ฅผ ๊ฒ์ฌํ๋ค.
์ค๋ฅ ๊ฒ์ถ ๋ฐฉ๋ฒ์ ์์ ๋จ์์ ์์ฌ๋ถ(FCS)์ ํฌํจํ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ์๋ CRC ๋คํญ์์ผ๋ก ๋๋ ๋ ๋๋จธ์ง๊ฐ 0์ด๋ฉด ์ค๋ฅ๊ฐ ์๋ ๊ฒ์ด๊ณ ๋๋จธ์ง๊ฐ 0์ด ์๋ ์๊ฐ ๋๋ฉด, ์ ์ก ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
๋คํญ์์ ํํ
์๋ก x4+x+1 ์ด๋ ๋คํญ์์ ๋ค์๊ณผ ๊ฐ์ด ์ธ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ซ์๋ก ํํํ ์ ์๋ค.
- 0x3 = 0b0011 : x4+ 0x3+0x2+1x1+1x0 (MSB – ์ฐ์ ์ฝ๋)
- 0xC = 0b1100 : 1x0+1x1+0x2+0x3+x4 (LSB – ์ฐ์ ์ฝ๋)
- 0x9 = 0b1001 : 1x4+0x3+0x2+1x1+x0 (Koopman ํ์)
-
๋คํญ์(representations) |
||
์ ์ (normal) |
์ญ๋ฐฉํฅ (reversed) |
์ญ๋ฐฉํฅ์ ์ญ์ (reversed reciprocla) |
0x3 |
0xC |
0x9 |
CRC ๊ณ์ฐ ๋ฐฉ๋ฒ
- ๋์ ํญ๋ชฉ๋ค
์๋ ๋ฐ์ดํฐ : D(x) (k bits)
์์ฌ ๋ฐ์ดํฐ : F(x) (n-k bits)
์ ์ก ๋ฐ์ดํฐ : T(x) (n bits)
๋ฏธ๋ฆฌ ์ ์๋ CRC ๋คํญ์ (Divisor) : P(x) (n-k+1 bits)
(n–k+1 bits)์ ๋นํธ ํจํด (์์ฑ ๋คํญ์)
๋๋์ ๋ชซ (Quotient) : Q(x) (k bits) (๋ฒ๋ ค์ง)
๋๋จธ์ง (Reminder) : R(x) (n-k bits) (๋ง๋ถ์ฌ์ง)
- ๋คํญ์ ํํ
(์ ๋ฐ์ดํฐ์ prescale) D'(x) = xn-kD(x)
์๋ ๋ฐ์ดํฐ์ ์์ฑ ๋คํญ์์ ๊ฐ์ฅ ํฐ ์ฐจ์๋ฅผ ๊ณฑํ๋ค.
(์ฆ, ๊ทธ๋งํผ 0 ๊ฐ์ ๋ง๋ถ์ด๋ ๊ฒ)
(์ด๊ฒ์ ์์ฑ๋คํญ์์ผ๋ก ๋๋) D'(x)/P(x) = xn-kD(x)/P(x)
xn-kD(x)/P(x) = Q(x) + R(x)/P(x)
xn-kD(x) = Q(x)P(x) + R(x)
(์์์ xn-kD(x)์ ์ ์ก) T(x) = xn-kD(x) + R(x)
T(x) = xn-kD(x) + R(x) = Q(x)P(x)
์ฆ, ์ ์ก ๋นํธ ํจํด T(x)๊ฐ ์์ฑ๋คํญ์ P(x)์ ์ํด ์ ํํ ๋๋์ด ๋จ์ด์ง๋ค.
-CRC ๊ณ์ฐ ๋ฐ ๋นํธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
๋๋์ ์ฐ์ฐ์, ์บ๋ฆฌ(overflow ๋ฐ borrow)๋ฅผ ๋ฌด์ํ๊ณ , XOR (mod-2) ์ํํ๋ค.
๋๋๋ ์์ธ ์ ์(Divisor)๋ ๋ฏธ๋ฆฌ ์ ์๋ ์ด์ง ์์(Divisor)์ ์ํด ๋๋๋ค.
์ด๋์ ์ ์์ ๊ธธ์ด๋ `(๋ง๋ถ์ด๋ ๋นํธ์ n-k) + 1
๋๋จธ์ง(Reminder)๋ ๋๋์ ์ ๋๋จธ์ง(Reminder)๋ฅผ ํ๋ ์์ ๋ง๋ถ์ฌ ์ก์ ํ๋ค.
์ด๋์ ๋๋จธ์ง ๊ธธ์ด๋ `n-k`์ด๋ค.
๊ณ์ฐ์์
'์๊ณ ๋ฆฌ์ฆ ํ์ด > ์ด๋ชจ์ ๋ชจ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ ์์ค๋ฅผ ํ์ฉํ github ํ๋กํ ์ด์๊ฒ ๊พธ๋ฏธ๊ธฐ (0) | 2020.11.07 |
---|---|
๋ฐ๋์ฒด๊ธฐ์ ์ ๋ ๊ฑฐ๋์ฐ๋งฅ ALTERA ์ XILINX์ ๋ํ์ฌ (0) | 2020.05.06 |
[c์ธ์ด]๋ค๋ชจ ์ถ๋ ฅํ๊ธฐ (0) | 2020.04.24 |
[c์ธ์ด] ์ฌ๊ทํจ์ ํฉํ ๋ฆฌ์ผ ์๊ณ ๋ฆฌ์ฆ (0) | 2020.04.24 |
[c์ธ์ด]ํผ๋ณด๋์น ์์ด ํจ์, for ๋ฐ๋ณต๋ฌธ ์ผ๋ก ํ์ด๋ณด๊ธฐ (0) | 2020.04.24 |