18 / 63 · 개념
비교기와 경계값 조건
같은 비트열의 unsigned·signed 비교를 구분하고 경계 조건을 검증합니다.
내용은 무료로 볼 수 있습니다. 수강 신청하면 학습 기록을 저장할 수 있어요.
크기 비교는 서로 다른 비트 중 가장 높은 자리에서 결정됩니다
두 unsignedunsigned 비트열을 음수가 없는 정수로 해석하는 규칙입니다. n비트의 범위는 0부터 2^n−1이며, 같은 비트열의 signed 해석과 다를 수 있습니다. 자세히 보기 벡터를 MSBMSB 가장 높은 자릿값을 갖는 비트입니다. 벡터의 선언 방향에 따라 인덱스 번호가 달라지므로 항상 가장 큰 번호라고 가정하면 안 됩니다. 자세히 보기부터 비교해 처음 다른 비트를 찾습니다. 그 자리에서 1인 쪽이 큽니다. 라 하면 4비트에서 a가 b보다 큰 조건은 다음과 같습니다.
여기서 왼쪽의 는 비교 결과인 불리언 값입니다. 높은 자리들이 모두 같을 때만 낮은 자리의 비교가 결과에 영향을 줍니다. 모든 를 AND하면 두 값이 같은지 알 수 있습니다.
signed 비교는 부호를 먼저 해석합니다
4'b1111과 4'b0001은 unsigned로 15와 1이지만 signed로 -1과 1입니다. 부호가 다르면 음수가 작습니다. logic [3:0]과 logic signed [3:0]의 차이는 저장 용량이 아니라 연산에서 사용하는 해석입니다.
logic [3:0] a, b;
logic unsigned_lt, signed_lt;
assign unsigned_lt = a < b;
assign signed_lt = $signed(a) < $signed(b);이 코드는 두 피연산자의 폭이 같은 경우입니다. 폭이 다르면 단순 cast 전에 어느 폭으로 확장할지부터 정해야 합니다.
같은 두 비트열도 signed인지 unsigned인지에 따라 대소 관계가 뒤집힙니다. 높은 자리부터 비교하는 unsigned 규칙을 signed 값에 그대로 적용하지 마세요.
- 1111 vs 0001: 동일한 4비트 입력
- Unsigned: 15는 1보다 큼
- Signed: −1은 1보다 작음
경계에서의 동작을 문장으로 정합니다
버퍼가 16개 항목을 저장할 때 count==16은 full이라는 뜻이고, count<16이면 추가로 저장할 수 있다는 뜻입니다. count가 4비트라면 16을 표현하지 못하므로 full 상태를 제대로 판정할 수 없습니다. 비교기의 기능과 비교 대상의 표현 범위를 함께 검토해야 하는 이유입니다.
임계값 가 있으면 을 우선 확인하되 표현 범위 밖의 값은 별도로 다룹니다. <와 <=의 차이를 의도적으로 드러내는 테스트를 구성하세요. unsigned wraparound가 발생한 뒤의 값만 비교하면 이미 잃어버린 carry를 복구할 수 없습니다.
직접 생각해 보기
저장된 항목 수 0~16을 표현하는 FIFO 카운트에 몇 비트가 필요한가요? full에서 동시에 pop과 push가 허용되는지는 비교식만으로 결정할 수 있나요?
해설 보기
17개 값을 표현하므로 5비트가 필요합니다. pop과 push를 함께 처리할지는 인터페이스에서 정해야 합니다. count < 16만 사용하면 full에서의 동시 교환을 막을 수 있으므로, 두 동작을 함께 허용하려면 pop이 실제로 수락되는 조건도 반영해야 합니다.