40 / 63 · 실습
실습: 직렬 데이터의 이동과 비트 순서 검증
비트열과 정수 참조 모델을 함께 사용해 방향, 손실되는 비트, 리셋 이후 지연을 검증합니다.
내용은 무료로 볼 수 있습니다. 수강 신청하면 학습 기록을 저장할 수 있어요.
실험 대상과 관찰 조건
상승 에지상승 에지 클록이 0에서 1로 바뀌는 순간입니다. CLK=1인 구간 전체를 뜻하는 레벨과 구별합니다. 자세히 보기마다 이전 q의 하위 두 비트가 왼쪽으로 이동하고 din이 bit 0에 들어옵니다. 1, 0, 1, 1을 차례로 넣어 이동 과정을 비교하세요.
시작하기 전에
Digital Design Studio의 Desktop 프로젝트와 정상 실행 권한을 준비하세요. 각 예제는 별도 폴더의 rtl/top.sv로 저장합니다.
SystemVerilog 소스
module top (
input logic clk,
input logic rst,
input logic din,
output logic [2:0] q
);
// Old q[1:0] and din are captured together at each rising edge.
always_ff @(posedge clk)
if (rst) q <= 3'b000;
else q <= {q[1:0], din};
endmodule실행 방법
New analysis에서 Two-state single-clock v1을 선택하세요. Clock port는 clk, 주기는 1000ps입니다. 아래 값으로 Preflight 후 Run RTL simulation을 실행하고 결과를 비교하세요.
| 설정 | 값 |
|---|---|
| 초기 레지스터 값 (LSB부터) | [false,false,false] |
| Reset port | rst · Active high · 1 cycle |
| Maximum cycles / time | 5 / 5000ps |
입력 자극
[
{
"inputs": {
"din": [
false
]
}
},
{
"inputs": {
"din": [
true
]
}
},
{
"inputs": {
"din": [
false
]
}
},
{
"inputs": {
"din": [
true
]
}
},
{
"inputs": {
"din": [
true
]
}
}
]각 열은 한 상승 에지에서 관찰한 값을 보여 줍니다. 입력은 에지 직전의 값이고, 이름에 after가 붙은 상태는 갱신 직후의 값입니다. 열은 샘플링 순서대로 놓았으며, 실제 전파 지연전파 지연 입력이 바뀐 뒤 출력이 올바른 값으로 안정되기까지 걸리는 시간입니다. 논리식의 등가성과 시간 특성은 별개입니다. 자세히 보기을 나타내지는 않습니다. 첫 열은 리셋리셋 상태를 미리 정한 초기값으로 되돌리는 제어입니다. 동기식인지 비동기식인지, 다른 제어보다 우선하는지를 함께 정해야 합니다. 자세히 보기 에지이며 din=0은 저장 데이터로 세지 않습니다. 그 뒤 네 번의 입력을 앞의 JSON 순서와 비교하세요.
파형 데이터 보기
| 신호 | 파형 | 버스 값 |
|---|---|---|
| edge | 23452 | E0 → E1 → E2 → E3 → E4 |
| reset | 10... | |
| din | 0101. | |
| q after | 23452 | 000 → 001 → 010 → 101 → 011 |
결과 비교
5 cycles · q=011. 상승 에지마다 000 → 001 → 010 → 101 → 011 순서가 됩니다.
이 실습은 0/1 단일 클록 RTL을 사용합니다. #delay·initial·X/Z 테스트벤치는 포함하지 않습니다. 학습 완료 표시는 학습 기록이며 실제 시뮬레이션 결과를 뜻하지 않습니다.
연결 연산을 독립적인 식으로 확인합니다
RTL과 똑같은 연결 연산연결 연산 비트열을 옆으로 이어 붙이는 연산입니다. 결과 폭은 피연산자 폭의 합이며 숫자의 덧셈과는 다릅니다. 자세히 보기을 테스트의 정답으로 복사하면 같은 실수가 두 곳에 들어갈 수 있습니다. unsignedunsigned 비트열을 음수가 없는 정수로 해석하는 규칙입니다. n비트의 범위는 0부터 2^n−1이며, 같은 비트열의 signed 해석과 다를 수 있습니다. 자세히 보기 정수로 해석한 참조 모델을 사용해 보세요.
리셋 이후 입력 1, 0, 1, 1에 대한 계산은 입니다. 이를 3비트 이진수로 적으면 기존 실습의 파형과 같아야 합니다. 마지막 단계에서 이고 하위 3비트만 남으므로 3이 됩니다.
| 수신한 비트 수 | 입력 | 에지 이후 q | 정수 값 |
|---|---|---|---|
| 0 | 리셋 | 000 | 0 |
| 1 | 1 | 001 | 1 |
| 2 | 0 | 010 | 2 |
| 3 | 1 | 101 | 5 |
| 4 | 1 | 011 | 3 |
reset=0, enable=1에서 din을 1,0,1,1 순서로 고르고 매번 클록을 누르세요. q는 001,010,101,011이 됩니다. 아래 실습 화면에서 결과를 예측한 뒤 실제 RTL 결과와 비교하세요. enable 제어는 아래 확장 과제의 정지 동작도 시험하기 위해 포함되어 있습니다.
동기 reset이 enable보다 우선합니다. enable=0이면 현재 값을 유지합니다. q=000; q_next = (2q + din) mod 8
한 비트를 추적해 방향을 검증합니다
리셋 후 1을 한 번 넣고 0을 세 번 넣으세요. 상태는 001 → 010 → 100 → 000입니다. 첫 1이 bit 0, bit 1, bit 2를 차례로 지나고 사라져야 합니다. 모든 비트가 0이거나 1인 패턴만 사용하면 이동 방향이 잘못되어도 알아채지 못할 수 있습니다.
3단 레지스터레지스터 여러 비트의 상태를 저장하는 회로입니다. 이 과정의 동기식 레지스터는 클록 에지에서 정해진 입력을 저장합니다. 자세히 보기에서 입력이 처음 저장된 에지를 라고 하면 최상위 bit 2에는 번째 에지 후 도달합니다. 외부 송신 레지스터가 데이터를 내보낸 에지를 기준으로 지연을 세면 기준점이 달라지므로, 보고서에 출발점과 도착점을 명시하세요.
확장 과제: 유효한 입력만 이동하기
입력에 valid를 추가한다고 가정합니다. valid=0일 때 q를 유지하는 설계와, 매 사이클 이동하면서 별도 valid 비트를 함께 전달하는 파이프라인은 서로 다릅니다. 전자는 수신한 비트 수를 기준으로 이동하고 후자는 실제 클록 사이클을 기준으로 이동합니다. 두 설계를 같은 예상 상태열로 검증하면 안 됩니다.
직접 생각해 보기
리셋 후 valid=1인 비트가 순서대로 1, 0, 1입니다. 두 번째 비트 전후에 valid=0인 사이클이 각각 하나씩 있고, invalid 사이클에는 q를 유지합니다. 마지막 q와 첫 1의 bit 2 도달 시점을 설명하세요.
해설 보기
세 번의 유효한 입력에서만 상태가 바뀌므로 최종 q는 101입니다. 첫 1은 세 번째 유효 입력이 저장되는 에지에 bit 2에 도달합니다. 첫 저장부터는 두 번의 추가 이동이 필요하며, 그 사이에 입력이 유효하지 않은 두 사이클이 있어, 실제로는 그만큼 시간이 더 걸립니다.