Academy
English한국어

4 / 24 · 개념

조건 연산자로 MUX 표현하기

선택 신호와 두 데이터 입력을 RTL에 연결합니다.

학습 목표

  • 조건 연산자의 두 선택지를 읽기
  • 조합 경로와 저장 경로를 코드에서 분리하기

참일 때의 값이 먼저 온다

조건 ? 참일 때의 값 : 거짓일 때의 값 순서입니다. sel ? b : a를 읽을 때는 sel이 1이면 b, 0이면 a라고 소리 내어 확인하세요. 입력 이름의 알파벳 순서로 대입하면 선택 방향을 뒤집기 쉽습니다.

assign은 이 조합 관계를 계속 유지합니다. 프로그램이 한 번 실행된 뒤 멈추는 문장처럼 생각하지 마세요. 관련 입력이 달라지면 출력 식이 다시 평가됩니다.

RTL 코드 발췌
assign y = sel ? b : a;

always_ff @(posedge clk)
    sampled_y <= y;

같은 출력을 두 곳에서 쓰지 않기

예제에서는 y는 assign에서, sampled_y는 always_ff에서만 값을 받습니다. y를 다른 always 블록에서도 대입해 문제를 고치려 하면 서로 다른 구동원이 충돌할 수 있습니다.

수정은 하나씩 진행하세요. 먼저 선택 식을 진리표와 비교하고, 다음에 관찰 레지스터를 확인합니다. 조합 출력 오류를 레지스터 추가로 가리면 원인을 찾기 어려워집니다.

직접 생각해 보기

assign y = sel ? a : b;는 이 코스의 선택 규칙과 같을까요?

해설 보기

아닙니다. sel=1일 때 a를 고르므로 반대입니다. a=0, b=1, sel=1을 넣으면 기대값 1 대신 0이 나옵니다.

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