Altifigence Academy

37 / 63 · 개념

직렬 입력과 프레임의 경계

입력 순서와 유효 에지를 정의하고 직렬-병렬 변환의 비트 배치를 계산합니다.

시간 순서를 벡터 위치로 바꾸기

직렬 입력은 매 유효 에지마다 비트 하나를 전달합니다. 3비트 레지스터레지스터 여러 비트의 상태를 저장하는 회로입니다. 이 과정의 동기식 레지스터는 클록 에지에서 정해진 입력을 저장합니다. 자세히 보기에 q<={q[1:0],din}을 적용하고 초기 q=000에서 1,0,1,1을 받으면 다음과 같습니다.

수락한 비트 수din갱신 q
11001
20010
31101
41011

새 비트는 오른쪽에 들어가고 기존 비트는 높은 인덱스로 이동합니다. 레지스터에는 최근 세 비트만 남습니다. 네 번째 비트를 받으면 첫 번째 비트가 밀려납니다.

각 열은 한 상승 에지상승 에지 클록이 0에서 1로 바뀌는 순간입니다. CLK=1인 구간 전체를 뜻하는 레벨과 구별합니다. 자세히 보기에서 관찰한 값을 보여 줍니다. 입력은 에지 직전의 값이고, 이름에 after가 붙은 상태는 갱신 직후의 값입니다. 열은 샘플링 순서대로 놓았으며, 실제 전파 지연전파 지연 입력이 바뀐 뒤 출력이 올바른 값으로 안정되기까지 걸리는 시간입니다. 논리식의 등가성과 시간 특성은 별개입니다. 자세히 보기을 나타내지는 않습니다. 첫 열은 reset입니다. 이후 수락된 1,0,1,1 중 최근 세 비트만 q에 남습니다. 마지막 열에서 첫 번째 비트가 밀려 나가는지 보세요.

직렬 입력이 병렬 상태로 바뀌는 과정
파형 데이터 보기
파형 데이터: 각 문자는 한 구간, 점은 이전 상태 유지, p는 클록 한 주기입니다.
신호파형버스 값
edge23452E0 → E1 → E2 → E3 → E4
reset10...
din0101.
q after23452000 → 001 → 010 → 101 → 011

MSB-first와 LSB-first는 통신 규약입니다

8비트 값을 MSBMSB 가장 높은 자릿값을 갖는 비트입니다. 벡터의 선언 방향에 따라 인덱스 번호가 달라지므로 항상 가장 큰 번호라고 가정하면 안 됩니다. 자세히 보기부터 보내 위 방식으로 여덟 번 받으면 원래 벡터를 얻습니다. LSBLSB 가장 낮은 자릿값을 갖는 비트입니다. 표기 방향과 인덱스 규칙을 함께 확인해야 합니다. 자세히 보기부터 보내면 비트 순서가 뒤집히므로 연결 방향을 바꾸거나 마지막에 비트를 재배열해야 합니다. 비트 전송 순서는 화면 표시만 바꾸는 옵션이 아니라, 송신 측과 수신 측이 함께 따라야 할 통신 규칙입니다.

데이터 값만으로 프레임을 알 수 없습니다

첫 비트를 어느 에지에서 받았는지, 총 몇 비트를 받았는지, 언제 결과를 사용할 수 있는지 알려 주는 상태가 필요합니다. 보통 수락한 비트 수를 세는 카운터와 valid 또는 done을 함께 사용합니다. 입력이 쉬는 사이클이 있다면 클록 수가 아니라 수락된 데이터 수를 세어야 합니다.

acceptk=validk∧readykaccept_k=valid_k\land ready_k

ready/valid핸드셰이크 송신 측의 valid와 수신 측의 ready가 같은 에지에서 모두 1일 때 데이터를 전달하는 규칙입니다. 기다리는 동안 데이터를 유지하는 규칙도 포함합니다. 자세히 보기 인터페이스를 쓰면 위 조건이 참인 에지에서만 비트를 이동시키고 카운터를 갱신합니다. 한쪽에만 enable을 적용하면 데이터와 비트 수가 어긋납니다. 제공된 실습은 입력을 연속해서 받으므로 데이터를 받는 모든 에지에서 이동하는 단순한 경우입니다.

직접 생각해 보기

8비트 프레임에서 네 번째 비트 뒤에 두 사이클 동안 valid가 0입니다. ready=1일 때 수신 카운터와 시프트 레지스터는 어떻게 동작해야 하나요?

해설 보기

두 사이클 모두 accept=0이므로 카운터와 데이터 레지스터를 함께 유지합니다. 다음 valid 비트가 다섯 번째 비트가 됩니다. 클록만 세면 아직 데이터가 부족한데 완료를 잘못 알릴 수 있습니다.

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