Academy
English한국어

20 / 24 · 개념

슬라이스와 연결 연산

중괄호 안의 비트가 새 레지스터에 놓이는 순서를 읽습니다.

학습 목표

  • 연결 연산의 각 비트 목적지 찾기
  • 갱신 전 값과 갱신 후 값을 구분하기

중괄호는 덧셈이 아니다

q <= {q[1:0], din};에서 중괄호는 비트를 나란히 이어 붙입니다. q[1:0]=01, din=1이면 새 값은 011입니다. 숫자 1과 1을 더해 2를 만드는 연산이 아닙니다.

오른쪽 q[1:0]은 모두 갱신 전 q에서 읽습니다. 한 에지에서 q[0]에 새 입력을 넣고, 그 새 값을 q[1]과 q[2]로 연속 복사하는 동작이 아닙니다.

RTL 코드 발췌
always_ff @(posedge clk)
    if (rst) q <= 3'b000;
    else q <= {q[1:0], din};
새 위치사용하는 값
q[2]이전 q[1]
q[1]이전 q[0]
q[0]해당 에지의 din

연결 순서를 바꾸면 이동 방향이 바뀐다

{din, q[2:1]}은 새 입력을 최상위 위치에 넣습니다. 원래 식과 폭은 같지만 이동 방향이 다릅니다. 두 식이 모두 문법적으로 가능하다고 같은 회로인 것은 아닙니다.

q=101, din=1을 두 식에 각각 대입해 보세요. 원래 식은 011이고 반대 방향의 식은 110입니다. 값 하나를 손으로 계산하는 것만으로 방향 오류를 드러낼 수 있습니다.

직접 생각해 보기

q=010, din=0이면 {q[1:0], din}은 무엇일까요?

해설 보기

q[1:0]=10 뒤에 0을 붙이므로 100입니다. 이전 q[2]는 사용하지 않습니다.

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