Przepełnienie i nasycenie
Część sekcji Projektowanie RTL i weryfikacja ścieżki Verilog w Coddy. Lekcja 9 z 38.
Przepełnienie ze znakiem oznacza, że wynik matematyczny nie mieści się w wybranej szerokości signed. Różni się od przeniesienia bez znaku. W przypadku dodawania signed przepełnienie występuje, gdy składniki o tym samym znaku dają wynik o innym znaku. Nasycenie ogranicza wynik do reprezentowalnej wartości granicznej zamiast zawijania.
Odpowiedni fragment; otaczające deklaracje i połączenia są podane w wyzwaniu.
assign overflow = (a[7] == b[7]) && (sum[7] != a[7]);Dane wejściowe o różnych znakach nie mogą powodować przepełnienia przy dodawaniu signed; dla danych wejściowych o takich samych znakach trzeba sprawdzić znak wyniku.
Sprawdzaj przepełnienie ze znakiem niezależnie od przeniesienia; przed implementacją nasycenia rozszerz typ.
Wyzwanie
ŚredniDodaj do siebie 8-bitowe liczby signed a i b. Zwróć obcięty wynik signed y, a overflow=1 tylko wtedy, gdy dokładna suma matematyczna wykracza poza zakres od -128 do 127. Kolumny wyjściowe: y, overflow. Wszystkie wartości pobudzające są znanymi wartościami binarnymi.
Uzupełnij design.v i zachowaj nazwy modułów oraz portów. Zablokowany testbench.v dostarcza zmiany wejść i wyświetla wyjścia po ich ustaleniu. Wybiera scenariusz za pomocą argumentu symulatora, takiego jak +CASE=1; standardowe wejście nie jest wymagane. Nie dodawaj do projektu wyświetlania, opóźnień ani kończenia symulacji. Oczekiwane wyjście to jeden wiersz wartości dziesiętnych dla każdej obserwacji, oddzielonych pojedynczą spacją i zakończonych znakiem nowej linii.
Spróbuj swoich sił
module dut (input signed [7:0] a, input signed [7:0] b, output signed [7:0] y, output overflow);
// Zastąp ten symbol zastępczy swoim projektem.
assign y = 0;
assign overflow = 0;
endmoduleTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Projektowanie RTL i weryfikacja
1Niezawodna logika kombinacyjna RTL
Wartości domyślne zapobiegają zatrzaskomKoder priorytetowyWeryfikacja kodu one-hotBezpieczne dekodowanie casePodsumowanie — router żądań2Szerokości i arytmetyka ze znakiem
Zachowywanie bitów przeniesieniaPorównania ze znakiemArytmetyczne przesunięcia w prawoPrzepełnienie i nasyceniePodsumowanie — różnica ze znakiemPoćwicz samodzielnie: Kompilator Verilog online