Menu
Coddy logo textTech

Potokowanie danych i sygnału valid

Część sekcji Projektowanie RTL i weryfikacja ścieżki Verilog w Coddy. Lekcja 18 z 38.

Potoki potoków rozdzielają pracę między rejestry. Flaga poprawności przesuwa się obok każdego elementu danych, dzięki czemu kolejny etap może odróżnić próbkę od pustego cyklu. Przy przypisaniach nieblokujących późniejszy etap odczytuje poprzednią wartość wcześniejszego etapu na tym samym zboczu. Reset powinien unieważniać pracę będącą w toku.

Odpowiedni fragment; pozostałe deklaracje i połączenia są podane w wyzwaniu.

always @(posedge clk) begin
    stage <= data;
    stage_valid <= in_valid;
    result <= stage;
    out_valid <= stage_valid;
end

Dane i informacja o ich poprawności przechodzą przez taką samą liczbę rejestrów.

Wyrównaj dane i sygnał valid na każdym etapie potoku oraz wyzeruj sygnał valid przy resecie.

challenge icon

Wyzwanie

Średni

Zaimplementuj potok z dwoma etapami rejestrowymi. Na każdym zboczu, gdy reset nie jest aktywny, pierwszy etap przechwytuje wartości a i in_valid. Drugi etap używa poprzednich wartości pierwszego etapu: out_valid przyjmuje swoją poprzednią wartość valid, a y przyjmuje poprzednią wartość danych powiększoną o jeden modulo 256, gdy valid ma wartość prawda, w przeciwnym razie zero. Synchroniczny rst czyści oba etapy i wyjścia. Kolumny wyjściowe: y, out_valid. Wszystkie sygnały sterujące i dane są stabilne przed każdym narastającym zboczem zegara; wyniki są odczytywane po nim.

Uzupełnij design.v i zachowaj nazwy modułów oraz porty. Zablokowany testbench.v dostarcza zmiany wejść i wypisuje 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 wypisywania, opóźnień ani kończenia symulacji. Oczekiwane wyjście to jeden wiersz wartości dziesiętnych na obserwację, oddzielonych pojedynczą spacją i zakończonych znakiem nowej linii.

Spróbuj swoich sił

module dut (input clk, input rst, input in_valid, input [7:0] a, output reg [7:0] y, output reg out_valid);
    // Zastąp ten kod zastępczy własnym projektem.
    initial y = 0;
    initial out_valid = 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