Menu
Coddy logo textTech

Przekazywanie danych przy odczycie i zapisie

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

Interfejs pamięci musi definiować zachowanie podczas odczytu i zapisu pod tym samym adresem. Przekazywanie jawnie wybiera przy kolizji przychodzące dane zapisu, zapewniając zachowanie z nowymi danymi. Bez tego obejścia poprzedni szablon odczytu nieblokującego przechwytuje stare dane. Tryby pamięci urządzeń są różne, więc sama semantyka symulacji nie gwarantuje mapowania na konkretny element prymitywny.

Odpowiedni fragment; otaczające deklaracje i połączenia są podane w wyzwaniu.

if(re) begin
    if(we && waddr==raddr) q <= data;
    else q <= mem[raddr];
end

Obejście wybiera słowo wejściowe tylko w przypadku rzeczywistej kolizji adresów.

Określ jawnie zachowanie przy kolizji i sprawdź je pod kątem wybranego trybu pamięci sprzętowej.

challenge icon

Wyzwanie

Średni

Zaimplementuj czterowyrazową pamięć z rejestrowanym odczytem i przekazywaniem nowych danych. Zasady zapisu oraz resetu i zezwolenia na odczyt są takie same jak w poprzedniej lekcji. Gdy zezwolony odczyt koliduje z dozwolonym zapisem pod ten sam adres, q przechwytuje przychodzące dane zamiast starego słowa. Przy pozostałych odczytach przechwytuje mem[raddr]. Kolumny wyjściowe: q. Wszystkie sygnały sterujące i dane są stabilne przed każdym narastającym zboczem zegara; wyniki są obserwowane po nim.

Uzupełnij design.v i zachowaj nazwy modułów oraz portów. Zablokowany plik testbench.v dostarcza zmiany wejść i wyświetla wyjścia, gdy się ustabilizują. Wybiera scenariusz za pomocą argumentu symulatora, takiego jak +CASE=1; standardowe wejście nie jest wymagane. Nie dodawaj wyświetlania, opóźnień ani zakończenia symulacji do projektu. Oczekiwane wyjście to jeden wiersz wartości dziesiętnych dla każdej obserwacji, oddzielonych pojedynczą spacją i zakończony znakiem nowej linii.

Spróbuj swoich sił

module dut (input clk, input rst, input we, input re, input [1:0] waddr, input [1:0] raddr, input [7:0] data, output reg [7:0] q);
    // Zastąp ten kod zastępczy własnym projektem.
    initial q = 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