Bezpieczne dekodowanie case
Część sekcji Projektowanie RTL i weryfikacja ścieżki Verilog w Coddy. Lekcja 4 z 38.
Użyj zwykłej instrukcji case dla dokładnych kodów sterujących. Określ zachowanie default dla nieobsługiwanych kodów i przypisz wszystkie wyjścia za pomocą assign. Dekodowanie z symbolami wieloznacznymi przy użyciu casex może ukrywać nieznane bity sterujące w symulacji, dlatego nie nadaje się do sytuacji, gdy nieznane wartości powinny pozostać widoczne podczas debugowania.
Odpowiedni fragment; otaczające deklaracje i połączenia są podane w wyzwaniu.
always @* begin
y = 0;
invalid = 0;
case (op)
0: y = a & b;
1: y = a | b;
default: invalid = 1;
endcase
endNieobsługiwane kody powodują ustawienie jawnego statusu zamiast zachowania poprzedniego wyjścia.
Jawnie zdefiniuj nieobsługiwane kody sterujące i unikaj maskowania nieznanych kodów sterujących za pomocą casex.
Wyzwanie
ŚredniZaimplementuj 8-bitową jednostkę logiczną: op 0 oblicza a AND b, op 1 oblicza a OR b, op 2 oblicza a XOR b, a op 3 zwraca zero i ustawia invalid na jeden. Dla obsługiwanych operacji invalid ma wartość zero. Kolumny wyjściowe: y, invalid. 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 podaje 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 nowej linii.
Spróbuj swoich sił
module dut (input [1:0] op, input [7:0] a, input [7:0] b, output reg [7:0] y, output reg invalid);
// Zastąp ten kod zastępczy własnym projektem.
initial y = 0;
initial invalid = 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