Arytmetyczne przesunięcia w prawo
Część sekcji Projektowanie RTL i weryfikacja ścieżki Verilog w Coddy. Lekcja 8 z 38.
Przesunięcie arytmetyczne w prawo używa >>> i powiela bit znaku, gdy jego lewy operand jest typu signed. Przesunięcie logiczne w prawo używa >> i wypełnia zerami. Dla ujemnej wartości nieparzystej arytmetyczne przesunięcie w prawo nie jest tym samym co dzielenie typu integer, które zaokrągla wynik w kierunku zera.
Odpowiedni fragment; pozostałe deklaracje i połączenia są dostępne w wyzwaniu.
reg signed [7:0] value;
value = -3;
$display("%0d", value >>> 1);Wynik to minus dwa, ponieważ rozszerzenie znaku zachowuje interpretację liczby ujemnej w kodzie uzupełnień do dwóch.
Użyj lewego argumentu typu signed wraz z >>>, gdy wymagane jest rozszerzenie znaku.
Wyzwanie
ŚredniPrzesuń arytmetycznie w prawo wartość 8-bitową signed o podaną liczbę bitów (od 0 do 7). Zwróć 8-bitowy wynik signed y. Wartości ujemne są uzupełniane ich bitem znaku. Kolumny wyjściowe: y. Wszystkie wartości sygnałów wejściowych są znanymi wartościami binarnymi.
Uzupełnij design.v i zachowaj nazwy modułów oraz porty. Zablokowany testbench.v dostarcza zmiany sygnałów wejściowych 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 nowego wiersza.
Spróbuj swoich sił
module dut (input signed [7:0] value, input [2:0] amount, output signed [7:0] y);
// Zastąp ten symbol zastępczy własnym projektem.
assign y = 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