Rejestrowane porty odczytu
Część sekcji Projektowanie RTL i weryfikacja ścieżki Verilog w Coddy. Lekcja 23 z 38.
Zarejestrowany odczyt przechwytuje dane z pamięci na zboczu zegara i zachowuje tę wartość później. Zezwolenie na odczyt może zachować poprzednie wyjście w cyklach, w których odczyt jest wyłączony. Resetowanie rejestru odczytu nie wymaga czyszczenia każdego słowa pamięci. Przy nieblokujących przypisaniach odczytu i zapisu wyrażenie odczytu widzi wartość słowa sprzed zbocza.
Odpowiedni fragment; pozostałe deklaracje i połączenia podano w wyzwaniu.
always @(posedge clk) begin
if(we) mem[waddr] <= data;
if(rst) q <= 0;
else if(re) q <= mem[raddr];
endRejestr wyjściowy aktualizuje się tylko przy określonym zboczu i na ścieżce z włączonym sygnałem.
Opóźnienie odczytu dokumentu, zachowanie przy wyłączonym odczycie i informacja, który reset stanu faktycznie czyści dane.
Wyzwanie
ŚredniZaimplementuj czterosłowową pamięć 8-bitową z synchronicznym zapisem i rejestrowanym odczytem q. we zapisuje dane na zboczach narastających. rst synchronicznie zeruje tylko q; w przeciwnym razie re ładuje do q wartość z mem[raddr] sprzed zbocza; gdy re=0, q zachowuje swoją wartość. Pamięć nie jest resetowana, a zapisy są niezależne od rst. Jeśli odczyt i zapis dotyczą tego samego adresu podczas jednego zbocza, q otrzymuje starą wartość. Testy inicjalizują słowa przed odczytami z włączonym odczytem. Kolumny wyjściowe: q. Wszystkie sygnały sterujące i dane są stabilne przed każdym zboczem narastającym zegara; wyniki są odczytywane później.
Uzupełnij design.v i zachowaj nazwy modułów oraz portów. Zablokowany plik 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 instrukcji wyświetlania, opóźnień ani kończenia symulacji. Oczekiwane wyjście to jeden wiersz wartości dziesiętnych dla każdej obserwacji, rozdzielonych pojedynczą spacją i zakończony znakiem nowego wiersza.
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 symbol zastępczy swoim 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