6 / 37 · 개념
벡터 인덱스, 비트 순서와 부호
비트 번호·직렬 전송 순서·산술 해석을 분리해 데이터 경로를 읽습니다.
내용은 무료로 볼 수 있습니다. 수강 신청하면 학습 기록을 저장할 수 있어요.
인덱스는 이름이고, 선언 방향이 의미를 정합니다
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입니다.
그림을 왼쪽으로 그렸는지보다 어떤 인덱스가 어떤 신호를 받는지가 정확한 명세입니다.
화살표는 한 비트가 거치는 저장 위치입니다. 모든 레지스터레지스터 여러 비트의 상태를 저장하는 회로입니다. 이 과정의 동기식 레지스터는 클록 에지에서 정해진 입력을 저장합니다. 자세히 보기는 같은 에지에서 이전 값을 읽습니다. din이 한 에지에 q2까지 통과한다는 뜻이 아닙니다.
- din: 이번 에지에 수락할 비트
- q0: din을 캡처
- q1: 이전 q0를 캡처
- q2: 이전 q1을 캡처
산술 이동과 논리 이동
>>는 왼쪽의 빈자리를 0으로 채우는 논리 이동입니다. >>>는 왼쪽 피연산자가 signed일 때 부호를 확장하는 산술 이동으로 사용할 수 있습니다. 같은 비트열이라도 피연산자의 signed 선언이 다르면 결과가 달라질 수 있습니다.
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이 되어 방향 오류를 구별할 수 있습니다.