오버플로와 포화
Coddy Verilog 여정의 RTL 설계 및 검증 섹션에 포함된 레슨. 38개 중 9번째.
부호 있는 오버플로는 수학적 결과가 선택한 signed 너비에 맞지 않는다는 의미입니다. 이는 부호 없는 캐리와 다릅니다. signed 덧셈에서는 입력의 부호가 같을 때 결과의 부호가 바뀌면 오버플로가 발생합니다. 포화는 래핑하는 대신 표현 가능한 끝점으로 제한합니다.
관련 발췌문입니다. 주변 선언과 연결은 과제에서 제공됩니다.
assign overflow = (a[7] == b[7]) && (sum[7] != a[7]);부호가 다른 입력은 signed 덧셈에서 오버플로를 일으킬 수 없습니다. 부호가 같은 입력은 결과 부호를 확인해야 합니다.
carry와는 독립적으로 signed 오버플로를 확인하세요. 포화 연산을 구현하기 전에 비트 폭을 늘리세요.
챌린지
중급signed 8비트 a와 b를 더하세요. 래핑된 signed 결과 y를 반환하고, 정확한 수학적 합이 -128부터 127까지의 범위를 벗어나는 경우에만 overflow=1로 설정하세요. 출력 열: y, overflow. 모든 자극 값은 알려진 이진 값입니다.
design.v를 완성하고 모듈 이름과 포트를 그대로 유지하세요. 잠긴 testbench.v가 입력 변경을 제공하고 안정화된 후 출력을 출력합니다. 시뮬레이터 인수(예: +CASE=1)를 사용하여 시나리오를 선택하며, 표준 입력은 필요하지 않습니다. 설계에 출력, 지연 또는 시뮬레이션 종료를 추가하지 마세요. 예상 출력은 관측값마다 10진수 값이 한 행에 표시되고, 값들은 공백 하나로 구분되며 줄바꿈으로 끝납니다.
직접 해보기
module dut (input signed [7:0] a, input signed [7:0] b, output signed [7:0] y, output overflow);
// 이 플레이스홀더를 여러분의 설계로 교체하세요.
assign y = 0;
assign overflow = 0;
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
RTL 설계 및 검증의 모든 레슨
직접 연습해 보세요: 온라인 Verilog 컴파일러