본문으로 건너뛰기
code0.HDL

비트와 수

디지털 값을 표현하는 비트, 비트를 묶어 한 신호로 다루는 버스, 이진수의 자릿값과 16진수 표기, 비트 폭이 부호 없는 수의 범위를 정하는 원리를 다룹니다.

이 장에서 배울 내용

  • 정해진 폭의 값을 이진수와 16진수로 읽고 쓸 수 있습니다
  • 각 비트의 자릿값으로 비트 패턴의 값을 계산할 수 있습니다
  • 폭이 표현하는 범위와 범위에 필요한 폭을 말할 수 있습니다
이 장에서 배우는 개념
  • 비트
  • 버스와 폭
  • 이진 자리값
  • 16진수
  • 폭과 표현 범위
먼저 알아야 할 개념
먼저 알아야 할 개념이 없습니다.

1. 비트로 디지털 값을 표현합니다

이 과정에서는 디지털 회로가 전달하고 저장하고 계산하는 값을 0과 1인 비트로 표현합니다. 실제 신호는 낮은 전압 범위와 높은 전압 범위로 두 논리값을 나타냅니다. 전압이 정확히 두 값만 존재하는 것은 아닙니다. 수 2, 글자, 소수 등을 나타내려면 적절한 부호화가 필요하며, 보통 여러 비트를 묶어 사용합니다.

이 장의 실험은 0과 1만 사용합니다. Verilog 시뮬레이션에서는 알 수 없는 논리값을 x, 높은 임피던스 상태를 z로도 표시합니다. 둘은 시뮬레이션 상태이지 이진수의 추가 숫자가 아닙니다.

선 여러 개를 하나의 이름으로 묶어 한 신호로 다루는 것이 버스이고, 버스에 든 선의 개수가 폭입니다. 폭은 신호를 선언할 때 정하고 회로가 동작하는 동안 바뀌지 않습니다. 8비트 버스는 값이 0이든 255든 항상 선 여덟 개입니다.

이 장의 비트 패턴은 오른쪽 끝부터 0, 1, 2 순서로 번호를 붙입니다. n비트 패턴에서 비트 0은 최하위 비트, 비트 n−1은 최상위 비트입니다. 실제 HDL에서는 다른 인덱스 범위로 선언할 수도 있지만, 여기의 그림은 이 번호 규칙을 사용합니다.

용어뜻
비트0 또는 1인 논리값
버스선 여러 개를 한 이름으로 묶은 신호
폭버스에 든 선의 개수
비트 i오른쪽 끝을 0으로 하여 i번째 선

2. 비트 i의 자리값은 2^i입니다

버스에 든 수는 십진수와 같은 방식으로 읽습니다. 다른 점은 각 자리의 값이 10의 거듭제곱이 아니라 2의 거듭제곱이라는 것입니다. 비트 0은 1, 비트 1은 2, 비트 2는 4, 비트 i는 2^i를 나타냅니다. 버스의 값은 1인 비트들의 자리값을 모두 더한 것입니다.

4비트 패턴 1011을 읽습니다. 비트 3은 1이고 자리값은 8입니다. 비트 2는 0입니다. 비트 1은 1이고 자리값은 2, 비트 0은 1이고 자리값은 1입니다. 8 + 2 + 1 = 11이므로 1011은 11입니다.

십진수를 패턴으로 바꿀 때는 아직 들어가는 가장 큰 자리값부터 차례로 뺍니다. 13을 4비트로 쓰려면 8이 들어가고 5가 남습니다. 4가 들어가고 1이 남습니다. 2는 들어가지 않습니다. 1이 들어가고 0이 남습니다. 사용한 자리값이 8, 4, 1이므로 13은 1101입니다.

아래 실험에서 비트를 누르면 0과 1이 바뀝니다. 비트 위에 자리값이 적혀 있고, 부호 없는 수 칸은 1인 비트의 자리값을 모두 더한 값입니다. 1011을 만들어 합이 11인지 확인한 뒤, 13이 되는 패턴을 찾아 보세요.

개념 실험 · 4-bit

컴파일한 설계가 아니라 브라우저 안의 회로 모델입니다. 실제 도구 체인은 예제에서 실행됩니다.

비트3210자리값8421입력
부호 없는 수
0
16진수
0x0

확인 문제

4비트 패턴 0110을 부호 없는 수로 읽으면 얼마입니까?

확인 문제

13을 4비트 패턴으로 쓰세요.

3. 16진수 한 글자는 비트 네 개를 나타냅니다

긴 패턴은 읽기 어렵고 옮겨 쓸 때 틀리기 쉽습니다. 16진수는 비트를 오른쪽부터 네 개씩 묶고 각 묶음을 0부터 F까지의 숫자 하나로 적는 표기법입니다. 비트 네 개는 16가지 값을 가지므로 16진수 한 자리와 정확히 대응합니다. 16진수는 비트를 적는 표기법이지 회로 안에 따로 있는 수가 아닙니다.

비트16진수비트16진수비트16진수비트16진수
0000001004100081100C
0001101015100191101D
00102011061010A1110E
00113011171011B1111F

8비트 패턴 10110110은 1011과 0110으로 나뉘고, 각각 B와 6이므로 0xB6으로 적습니다. 앞에 붙이는 0x는 뒤의 글자가 16진수라는 표시입니다. 0x가 없으면 B6은 이름으로도 읽힙니다. 16진수를 비트로 되돌릴 때는 같은 표를 반대로 읽습니다. 0x3A는 0011 1010입니다.

확인 문제

4비트 패턴 1110을 16진수 한 글자로 쓰세요.

4. 폭이 표현 범위를 정합니다

n비트 버스가 가질 수 있는 패턴은 2^n가지이고 그 이상은 없습니다. 부호 없는 수로 읽으면 모두 0인 패턴이 0이고 모두 1인 패턴이 2^n − 1입니다. 이 범위를 벗어난 값은 그 버스에 대응하는 패턴이 없으므로 저장할 수 없습니다.

폭패턴 수부호 없는 수의 범위
1비트20 ~ 1
4비트160 ~ 15
8비트2560 ~ 255
16비트65 5360 ~ 65 535
n비트2^n0 ~ 2^n − 1

폭은 신호가 가져야 하는 값의 범위에서 정합니다. 0부터 200까지 세는 카운터에는 201가지 패턴이 필요합니다. 7비트는 128가지로 부족하고 8비트는 256가지로 충분합니다. 폭은 8이고, 201부터 255까지의 패턴은 쓰이지 않습니다. 남는 패턴이 있는 것은 정상입니다.

주의. 폭은 가장 큰 값을 기준으로 정합니다. 평소 값이 100 아래라는 이유로 7비트를 고르면 200에 대응하는 패턴이 없으므로, 값이 200에 이르렀을 때 다른 값이 표시됩니다. 어떤 값이 표시되는지는 뒤의 단원에서 다룹니다.

확인 문제

0부터 200까지의 모든 값을 담아야 하는 신호에 필요한 최소 폭은 몇 비트입니까?

확인 문제

10비트 버스가 가질 수 있는 가장 큰 부호 없는 수는 얼마입니까?

답

5. 변형: 8비트 패턴 하나를 세 가지로 읽기

아래 실험은 폭이 8비트이고 190에서 시작합니다. 자리값으로 읽으면 128 + 32 + 16 + 8 + 4 + 2 = 190이므로 패턴은 10111110입니다. 16진수로 읽으면 1011은 B, 1110은 E이므로 0xBE입니다. 패턴 하나를 세 가지 방법으로 적은 것입니다.

개념 실험 · 8-bit

컴파일한 설계가 아니라 브라우저 안의 회로 모델입니다. 실제 도구 체인은 예제에서 실행됩니다.

비트76543210자리값1286432168421입력
부호 없는 수
190
16진수
0xBE

이제 패턴을 바꿔 보세요. 비트 6과 비트 0을 1로, 비트 5, 4, 3, 2를 0으로 바꾸면 세 칸의 값이 함께 바뀝니다. 완성된 패턴은 0xC3입니다.

확인 문제

0xC3을 부호 없는 수로 읽으면 얼마입니까?

6. 정리

  • 비트는 0 또는 1입니다. 버스는 비트 여러 개를 한 이름으로 묶은 신호이고, 오른쪽 끝이 비트 0입니다.
  • 비트 i의 자리값은 2^i입니다. 버스의 값은 1인 비트의 자리값을 모두 더한 것입니다.
  • 16진수 한 글자는 비트 네 개에 대응하며, 0x는 16진수 표기라는 표시입니다.
  • n비트에는 2^n가지 패턴이 있고 부호 없는 수로 0부터 2^n − 1까지 담습니다. 폭은 가장 큰 값을 기준으로 정합니다.

다음 장에서는 비트 하나하나에 게이트가 하는 일을 다룹니다. NOT, AND, OR, XOR과 각 게이트를 빠짐없이 서술하는 진리표입니다.

확인 지점

이 장의 확인 문제에 답하세요