Menu
Coddy logo textTech

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.

challenge icon

Wyzwanie

Średni

Przesuń 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;
endmodule
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Projektowanie RTL i weryfikacja

Poćwicz samodzielnie: Kompilator Verilog online