Menu
Coddy logo textTech

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];
end

Rejestr 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.

challenge icon

Wyzwanie

Średni

Zaimplementuj 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;
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