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]로 연속 복사하는 동작이 아닙니다.
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]는 사용하지 않습니다.
✓ 학습 완료