4 / 24 · 개념
조건 연산자로 MUX 표현하기
선택 신호와 두 데이터 입력을 RTL에 연결합니다.
내용은 무료로 볼 수 있습니다. 수강 신청하면 학습 기록을 저장할 수 있어요.
학습 목표
- 조건 연산자의 두 선택지를 읽기
- 조합 경로와 저장 경로를 코드에서 분리하기
참일 때의 값이 먼저 온다
조건 ? 참일 때의 값 : 거짓일 때의 값 순서입니다. sel ? b : a를 읽을 때는 sel이 1이면 b, 0이면 a라고 소리 내어 확인하세요. 입력 이름의 알파벳 순서로 대입하면 선택 방향을 뒤집기 쉽습니다.
assign은 이 조합 관계를 계속 유지합니다. 프로그램이 한 번 실행된 뒤 멈추는 문장처럼 생각하지 마세요. 관련 입력이 달라지면 출력 식이 다시 평가됩니다.
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이 나옵니다.
✓ 학습 완료