1. 파형은 시간축 위에 신호를 한 줄씩 그린 그림입니다
파형은 시간에 따라 각 신호가 어떤 값이었는지 기록한 그림입니다. 가로축은 시간이고 왼쪽에서
오른쪽으로 흐릅니다. 세로로는 신호마다 한 줄을 씁니다. 클록 clk의 상승 에지가 다른 모든 줄을
읽는 기준점입니다.
아래 파형은 앞 단원의 레지스터 d → q를 여섯 사이클 동안 그린 것입니다. 한 사이클은 여덟
칸이고, 칸 사이의 빈 자리가 상승 에지입니다. 에지의 번호는 edge 줄 아래에 적었습니다.
cycle 0 1 2 3 4 5
clk ‾‾‾‾____ ‾‾‾‾____ ‾‾‾‾____ ‾‾‾‾____ ‾‾‾‾____ ‾‾‾‾____
edge ^ ^ ^ ^ ^ ^
0 1 2 3 4 5
d 00000000 11111111 11111111 00000000 11111111 00000000
q 00000000 00000000 11111111 11111111 00000000 11111111사이클과 에지의 번호는 다음 규칙으로 붙입니다.
| 이름 | 뜻 |
|---|---|
| 에지 n | n번째 상승 에지. 0부터 셉니다 |
| 사이클 n | 에지 n으로 끝나는 구간 |
| 사이클 0 | 레지스터가 초깃값 0을 가진 채 시작하는 첫 구간. 왼쪽 경계는 번호를 붙이지 않는 시작점입니다 |
이 규칙으로 q 줄을 읽습니다. 사이클 1 동안 d는 1이고, 사이클 1을 끝내는 에지 1이 그 1을
저장합니다. 그래서 q는 사이클 2부터 1입니다. q 줄은 d 줄을 오른쪽으로 한 칸 옮긴 모양이며,
그 한 칸이 레지스터의 한 사이클 지연입니다.
실험 표의 열과 파형은 다음과 같이 대응합니다. "에지 직전" 열은 그 사이클 동안 파형에 보이는 값이고,
"에지 직후" 열은 다음 사이클 동안 보이는 값입니다. 사이클 1의 "에지 직후 q"는 1이고, 파형에서는
사이클 2의 q가 1입니다. 같은 값입니다.
2. 입력은 사이클 안에서 구동하고, 에지가 샘플링하고, 에지 뒤에 관찰합니다
한 사이클 안에는 서로 다른 세 순간이 있습니다.
| 순간 | 누가 | 무엇 |
|---|---|---|
| 구동 | 테스트벤치 | 사이클 안에서 입력 값을 정합니다 |
| 샘플링 | 레지스터 | 사이클을 끝내는 에지에서 그 순간의 입력을 저장합니다 |
| 관찰 | 테스트벤치 | 에지 뒤에 출력을 읽어 기대값과 비교합니다 |
시뮬레이터가 에지에 예약된 레지스터 갱신을 마친 뒤 Q를 읽으면 새 값이 보이고, 에지 전에는 이전 값이 보입니다. 테스트벤치가 같은 시뮬레이션 시각에 값을 읽을 때도 이 사건 처리 순서를 지켜야 합니다. 에지가 발생했다는 사실만으로 갱신까지 끝났다고 볼 수는 없습니다. 조합 회로의 연결은 클록 에지를 기다리지 않습니다.
주의. 지연을 지정하지 않은 RTL 시뮬레이션에서는 레지스터 출력이 에지와 같은 타임스탬프에 바뀔 수 있습니다. 실제 하드웨어에서는 에지 뒤에 Q가 안정되기까지 clock-to-Q 지연이 있습니다. 시뮬레이터가 한 시각 안에서 사건을 처리하는 순서는 이 물리적 지연의 모델이 아니므로, 파형에서 폭이 0인 변화를 "즉시 바뀌는 하드웨어"로 읽지 마세요.
확인 문제
d가 사이클 0과 1에서 0이고 사이클 2부터 계속 1입니다. q가 처음 1인 사이클은 몇 번입니까?
3. 레지스터 한 단계는 한 사이클, 두 단계는 두 사이클 늦춥니다
레지스터 두 개를 이어 붙인 delay2에서 s1의 다음 값은 in이고 s2의 다음 값은 s1의 현재
값입니다. 아래 파형에서 s1 줄은 in 줄을 한 칸, s2 줄은 두 칸 오른쪽으로 옮긴 모양입니다.
cycle 0 1 2 3 4 5
clk ‾‾‾‾____ ‾‾‾‾____ ‾‾‾‾____ ‾‾‾‾____ ‾‾‾‾____ ‾‾‾‾____
edge ^ ^ ^ ^ ^ ^
0 1 2 3 4 5
in 11111111 00000000 11111111 11111111 00000000 00000000
s1 00000000 11111111 00000000 11111111 11111111 00000000
s2 00000000 00000000 11111111 00000000 11111111 11111111| 사이클 | in (에지에서) | s1 직전 | s2 직전 | s1 직후 | s2 직후 |
|---|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 0 | 1 |
| 2 | 1 | 0 | 1 | 1 | 0 |
| 3 | 1 | 1 | 0 | 1 | 1 |
여기서 두 수치를 구분합니다.
| 수치 | 뜻 | 한 단계 | 두 단계 |
|---|---|---|---|
| 지연 시간(latency) | 입력이 출력에 나타나기까지 걸리는 사이클 수 | 1 | 2 |
| 처리율(throughput) | 한 사이클에 받아들이는 값의 수 | 1 | 1 |
단계를 늘리면 기다리는 시간은 길어지지만 흐름은 느려지지 않습니다. 매 사이클 새 값이 들어가고
매 사이클 값이 하나 나옵니다. 아래 실험에서 in을 매 사이클 바꾸며 에지를 눌러, 같은 값이 s1,
s2에 한 칸씩 늦게 나타나는 모양을 확인하세요.
개념 실험 · delay2
컴파일한 설계가 아니라 브라우저 안의 회로 모델입니다. 실제 도구 체인은 예제에서 실행됩니다.
입력
출력
- s1
- 0
- s2
- 0
아직 에지가 없습니다. 입력을 정한 뒤 클록 에지를 인가하세요.
빠진 파형을 채워 봅니다. in 열을 보고 각 에지 직후의 s1과 s2를 적으세요. 사이클 0은 두
레지스터가 모두 0에서 시작합니다.
예측한 뒤 비교 · delay2
비교하기 전에 모든 칸을 채우세요. 빈칸도 불일치로 처리합니다.
| 사이클 | in에지에서 샘플링한 입력 | s1에지 직후 | s2에지 직후 |
|---|---|---|---|
| 0 | 1 | ||
| 1 | 1 | ||
| 2 | 0 | ||
| 3 | 1 | ||
| 4 | 0 | ||
| 5 | 0 | ||
| 6 | 1 |
4. 두 파형이 갈라지는 첫 사이클을 찾습니다
파형을 비교할 때는 처음 다른 사이클을 찾고, 그 뒤가 어떻게 다른지 봅니다. 아래 두 표는 같은
in에 대한 delay2의 s2입니다. 첫째 표는 요구사항에서 계산한 기대값, 둘째 표는 어떤 설계를
시뮬레이션해 관찰한 값입니다. 두 표 모두 에지 직후의 값입니다.
| 사이클 | in | 기대 s2 |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 0 |
| 2 | 1 | 0 |
| 3 | 1 | 1 |
| 4 | 0 | 1 |
| 5 | 1 | 0 |
| 6 | 0 | 1 |
| 사이클 | in | 관찰 s2 |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 0 |
| 2 | 1 | 1 |
| 3 | 1 | 1 |
| 4 | 0 | 0 |
| 5 | 1 | 1 |
| 6 | 0 | 0 |
확인 문제
기대값과 관찰값이 처음 다른 사이클은 몇 번입니까?
5. 변형: 상승 검출기
사이클 단위 모델에서는 입력을 각 사이클 동안 일정하게 유지합니다. 이 가정 아래에서
rise-detect는 입력의 0에서 1로의 변화를 한 사이클짜리 펄스로 바꿉니다. 레지스터 prev는 지난
사이클의 in을 기억하고, 출력 rise는 in이 1이고 prev가 0일 때 1입니다.
| 신호 | 종류 | 값 |
|---|---|---|
prev | 레지스터 | 지난 에지에서 저장한 in |
rise | 조합 논리 | 현재 in AND NOT 현재 prev |
rise는 레지스터가 아니므로 에지를 기다리지 않습니다. in이 1로 올라간 바로 그 사이클에 1이
되고, 다음 에지에서 prev가 1로 갱신되면 같은 in에 대해 0으로 내려갑니다. 실험 표에서 rise
열은 에지 직후 값이 아니라 그 사이클 동안의 값입니다. in을 1로 올린 뒤 에지를 여러 번 눌러
rise가 첫 사이클에만 1인 것을 확인하세요. 실제 입력이 사이클 도중에 바뀌면 이 조합
출력의 펄스 폭이 한 주기보다 짧을 수도 있습니다.
개념 실험 · rise-detect
컴파일한 설계가 아니라 브라우저 안의 회로 모델입니다. 실제 도구 체인은 예제에서 실행됩니다.
입력
출력
- prev
- 0
- rise
- 0
아직 에지가 없습니다. 입력을 정한 뒤 클록 에지를 인가하세요.
확인 문제
in이 사이클 2, 3, 4에서 1이고 그 밖의 사이클에서는 0입니다. rise가 1인 사이클은 어느 것입니까?
6. 정리
- 파형의 가로축은 시간, 한 줄은 신호 하나이며,
clk의 상승 에지가 읽기의 기준입니다. - 에지 n은 사이클 n을 끝냅니다. 사이클 0은 초깃값에서 시작합니다. 실험 표의 "에지 직전"은 그 사이클 동안 보이는 값, "에지 직후"는 다음 사이클 동안 보이는 값입니다.
- 입력은 사이클 안에서 구동되고, 에지가 샘플링하고, 에지 뒤에 관찰합니다.
- 지연 없는 RTL 시뮬레이션에서 에지와 출력 갱신의 타임스탬프가 같아도 사건 처리 순서는 구분해야 합니다. 실제 하드웨어에는 clock-to-Q 지연이 있습니다.
- 레지스터 n단계는 지연 시간을 n사이클로 늘리고 처리율은 그대로 둡니다.
- 두 파형을 비교할 때는 처음 다른 사이클부터 봅니다.
다음 장에서는 요구사항에서 테스트 사례를 뽑고, 설계와 테스트벤치의 역할을 나누고, 첫 불일치에서 원인을 추정하는 방법을 다룹니다.