Altifigence Academy

36 / 63 · 개념

벡터 인덱스, 비트 순서와 부호

비트 번호, 직렬 전송 순서, 수치 해석을 구분하며 데이터 경로를 읽습니다.

벡터의 선언 방향에 따라 비트 번호가 달라집니다

logic [7:0] a;에서 a[7]은 가장 왼쪽 자리입니다. logic [0:7] b;라면 b[0]이 가장 왼쪽 자리입니다. 두 벡터에 8'h96을 대입하면 왼쪽부터 비트열은 모두 10010110이지만 각 비트의 인덱스가 다릅니다. bit 0이 항상 LSBLSB 가장 낮은 자릿값을 갖는 비트입니다. 표기 방향과 인덱스 규칙을 함께 확인해야 합니다.라고 생각하지 말고, 벡터의 선언 방향부터 확인하세요.

실무에서는 인터페이스 전체에서 방향을 일관되게 정하는 편이 검토에 유리합니다. 파형 도구의 표시 순서와 파일의 비트 배열 순서도 명시해야 합니다. 이 과정의 입력 JSON 배열은 LSB부터 기록하며, RTL 벡터 표시는 일반적으로 MSBMSB 가장 높은 자릿값을 갖는 비트입니다. 벡터의 선언 방향에 따라 인덱스 번호가 달라지므로 항상 가장 큰 번호라고 가정하면 안 됩니다.부터 읽습니다.

이동 방향은 실제 연결로 확인합니다

q <= {q[1:0], din};에서 q[2]의 다음 값은 이전 q[1], q[1]의 다음 값은 이전 q[0], q[0]의 다음 값은 din입니다.

q2next=q1,q1next=q0,q0next=dq_2^{next}=q_1,\quad q_1^{next}=q_0,\quad q_0^{next}=d

그림에서 왼쪽으로 이동하는지보다, 각 인덱스에 어떤 신호가 들어가는지 확인해야 이동 방향을 정확히 알 수 있습니다.

화살표는 한 비트가 저장 위치를 옮겨 가는 순서를 나타냅니다. 모든 레지스터레지스터 여러 비트의 상태를 저장하는 회로입니다. 이 과정의 동기식 레지스터는 클록 에지에서 정해진 입력을 저장합니다. 자세히 보기는 같은 에지에서 이전 값을 읽습니다. din이 한 에지에 q2까지 통과한다는 뜻이 아닙니다.

비트 번호로 이동 경로를 읽기
  1. din: 이번 에지에 수락할 비트
  2. q0: din을 캡처
  3. q1: 이전 q0를 캡처
  4. q2: 이전 q1을 캡처

산술 이동과 논리 이동

>>는 왼쪽의 빈자리를 0으로 채우는 논리 이동입니다. >>>는 왼쪽 피연산자가 signed일 때 부호를 확장하는 산술 이동으로 사용할 수 있습니다. 같은 비트열이라도 피연산자의 signed 선언이 다르면 결과가 달라질 수 있습니다.

SystemVerilog
logic signed [7:0] x;
logic [7:0] logical_right, arithmetic_right;
assign logical_right = x >> 1;
assign arithmetic_right = x >>> 1;

x=8'b11111000(-8)이면 결과는 각각 01111100과 11111100입니다. 음수의 산술 우측 이동은 정수 나눗셈의 음수 반올림 규칙과 항상 같지는 않으므로 수치 알고리즘에서는 별도로 확인합니다.

직접 생각해 보기

3비트 q=101, din=0에서 q<={q[1:0],din}과 q<={din,q[2:1]}의 다음 값을 각각 구하세요.

해설 보기

첫 식은 010, 두 번째는 010입니다. 이 입력에서는 어느 방향으로 이동해도 우연히 결과가 같습니다. q=001, din=0을 사용하면 각각 010과 000이 되어 방향 오류를 구별할 수 있습니다.

선택은 이 브라우저에만 적용됩니다. 언제든 푸터에서 변경할 수 있습니다.