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];
endObejś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.
Wyzwanie
ŚredniZaimplementuj 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;
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 znakiem5Pamięć i tablice wyszukiwania
Kombinacyjne tablice ROMPrzechowywanie w tablicy rejestrówRejestrowane porty odczytuPrzekazywanie danych przy odczycie i zapisiePodsumowanie — bank z dwoma portami odczytuPoćwicz samodzielnie: Kompilator Verilog online