Przechowywanie w tablicy rejestrów
Część sekcji Projektowanie RTL i weryfikacja ścieżki Verilog w Coddy. Lekcja 22 z 38.
Rozpakowana tablica może modelować słowa pamięci sprzętowej. Zapis taktowany zegarem aktualizuje jedno wybrane słowo; odczyt ciągły wybiera słowo bez zegara odczytu. Synteza może implementować małe tablice za pomocą rejestrów lub wnioskować o zasobach pamięci dla obsługiwanych wzorców. Nigdy nie zakładaj, że niezapisane słowo zaczyna od zera.
Odpowiedni fragment; pozostałe deklaracje i połączenia są podane w wyzwaniu.
reg [7:0] mem [0:3];
always @(posedge clk)
if(we) mem[waddr] <= data;
assign q = mem[raddr];Zapis jest wyzwalany zboczem, a odczyt odzwierciedla wybrane zapisane słowo.
Jawne zdefiniuj sygnał zezwolenia na zapis i taktowanie odczytu; nie polegaj na nieokreślonej zawartości pamięci initial.
Wyzwanie
ŚredniZaimplementuj cztery 8-bitowe słowa. Na narastającym zboczu we zapisuje dane do mem[waddr]. q jest asynchronicznym, kombinacyjnym odczytem mem[raddr]. Pamięć nie ma resetu ani zawartości początkowej; testbench zapisuje każdy obserwowany adres przed jego odczytem. Obserwacje są wykonywane po zboczu, więc zapis pod ten sam adres jest widoczny w q. 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 porty. Zablokowany testbench.v dostarcza zmiany wejściowe i wyświetla wyjścia po ich ustabilizowaniu. 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. Oczekiwanym wynikiem jest jeden wiersz wartości dziesiętnych na każdą obserwację, oddzielonych pojedynczą spacją i zakończonych znakiem nowej linii.
Spróbuj swoich sił
module dut (input clk, input we, input [1:0] waddr, input [7:0] data, input [1:0] raddr, output [7:0] q);
// Zastąp ten kod zastępczy własnym projektem.
assign 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