2 / 37 · 개념
신호와 포트: 폭·방향·시간의 계약
인터페이스를 읽고 조합 출력과 상태 출력의 검증 기준을 분리합니다.
내용은 무료로 볼 수 있습니다. 수강 신청하면 학습 기록을 저장할 수 있어요.
포트 목록을 회로의 계약으로 읽기
input logic [7:0] data는 8비트가 동시에 전달되는 포트입니다. 8개의 값이 차례로 도착한다는 뜻이 아닙니다. logic라는 자료형만으로 저장 소자가 생기는 것도 아닙니다. 조합 대입으로 구동되는지, 에지 기반 순차 블록으로 구동되는지가 하드웨어 동작을 결정합니다.
신호를 읽을 때 폭과 방향에 더해 언제 유효한가, 누가 구동하는가, 리셋 뒤 어떤 값인가를 확인하세요. 이 정보가 빠지면 각 모듈이 따로 맞아도 연결된 시스템은 틀릴 수 있습니다.
같은 MUX에도 두 종류의 출력이 있습니다
이 코스의 실습은 선택 결과 y와 이를 저장한 sampled_y를 함께 관찰합니다.
첫 식은 조합 기능, 두 번째 식은 에지 직전 안정된 y를 저장하는 이상적인 동기 모델입니다. 두 출력을 같은 순간의 입력과 무조건 비교하면 정상 레지스터레지스터 여러 비트의 상태를 저장하는 회로입니다. 이 과정의 동기식 레지스터는 클록 에지에서 정해진 입력을 저장합니다. 자세히 보기를 오류로 판정하게 됩니다.
assign y = sel ? b : a;
always_ff @(posedge clk) sampled_y <= y;시뮬레이터에서는 같은 시간값 안에도 이벤트 처리 순서가 있습니다. 실제 소자에서는 setupsetup 클록의 캡처 에지 전에 입력 데이터가 안정되어 있어야 하는 최소 시간입니다. 위반하면 저장 결과를 보장할 수 없습니다. 자세히 보기/hold와 clock-to-Q 지연이 있습니다. 여기의 두 식은 그 차이를 없애는 것이 아니라 기능 검증에서 사용하는 관찰 시점을 명확히 정하는 출발점입니다.
화살표는 데이터 의존성입니다. a·b·sel이 바뀌면 조합 출력 y가 먼저 바뀌지만 sampled_y는 상승 에지상승 에지 클록이 0에서 1로 바뀌는 순간입니다. CLK=1인 구간 전체를 뜻하는 레벨과 구별합니다. 자세히 보기에서만 새 값을 저장합니다.
- a · b · sel: 동시에 주어지는 입력
- MUX → y: 현재 선택선으로 계산
- DFF → sampled_y: 상승 에지에서 y를 저장
검토할 질문
- sel은 0/1이 확정된 입력인가, 비동기 외부 신호인가?
- y가 변한 뒤 sampled_y와 비교하는 시점은 다음 유효 에지 이후인가?
- sampled_y의 초기값은 리셋리셋 상태를 명세한 초기값으로 돌리는 제어입니다. 동기식인지 비동기식인지, 다른 제어보다 우선하는지를 함께 정해야 합니다. 자세히 보기으로 정하는가, 도구의 초기화 설정을 쓰는가?
이 실습의 명시적 초기값은 재현 가능한 0/1 모델을 위한 설정입니다. 초기값 설정이 실제 칩의 전원 투입 동작을 보증한다고 해석해서는 안 됩니다.
직접 생각해 보기
클록 에지 사이에 a가 0에서 1로 바뀌고 sel=0인 상태를 유지합니다. y와 sampled_y는 각각 언제 변하나요?
해설 보기
조합 출력 y는 해당 조합 경로의 평가 또는 전파 뒤 바뀝니다. sampled_y는 그 값을 캡처하는 다음 상승 에지에서 갱신됩니다. 에지 근처의 입력 변화는 실제 회로에서 setup/hold 문제이므로 이 단순 모델만으로 안전성을 결론 내리지 않습니다.