Altifigence Academy

14 / 63 · 개념

신호와 포트: 비트 폭·방향·동작 시점

인터페이스에서 신호의 조건을 읽고, 조합 출력과 상태 출력의 값을 언제 비교해야 하는지 구분합니다.

포트 목록에서 회로의 연결 조건 읽기

input logic [7:0] data는 8비트가 동시에 전달되는 포트입니다. 8개의 값이 차례로 도착한다는 뜻이 아닙니다. logic라는 자료형만으로 저장 소자가 생기는 것도 아닙니다. 조합 대입으로 구동되는지, 에지 기반 순차 블록으로 구동되는지가 하드웨어 동작을 결정합니다.

신호를 읽을 때 폭과 방향에 더해 언제 유효한가, 누가 구동하는가, 리셋 뒤 어떤 값인가를 확인하세요. 이 정보가 빠지면 각 모듈이 개별적으로 올바르게 동작해도 서로 연결했을 때 오류가 날 수 있습니다.

같은 MUX에도 두 종류의 출력이 있습니다

이 과정의 실습에서는 선택 결과 y와 이를 저장한 sampled_y를 함께 관찰합니다.

y(t)=s(t)‾a(t)+s(t)b(t)y(t)=\overline{s(t)}a(t)+s(t)b(t)
qk+1=y(tk−)q_{k+1}=y(t_k^-)

첫 식은 조합 기능, 두 번째 식은 에지 직전 안정된 y를 저장하는 이상적인 동기 모델입니다. 두 출력을 같은 순간의 입력과 무조건 비교하면 정상적으로 동작하는 레지스터레지스터 여러 비트의 상태를 저장하는 회로입니다. 이 과정의 동기식 레지스터는 클록 에지에서 정해진 입력을 저장합니다. 자세히 보기도 오류가 있는 것으로 판단하게 됩니다.

SystemVerilog
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인 구간 전체를 뜻하는 레벨과 구별합니다. 자세히 보기에서만 새 값을 저장합니다.

조합 출력과 저장 출력의 경계
  1. a · b · sel: 동시에 주어지는 입력
  2. MUX → y: 현재 선택선으로 계산
  3. 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 문제이므로 이 단순 모델만으로 실제 회로가 안전하게 동작한다고 판단하지 않습니다.

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