Spisu treści:

Projekt prostego kontrolera pamięci podręcznej w VHDL: 4 kroki
Projekt prostego kontrolera pamięci podręcznej w VHDL: 4 kroki

Wideo: Projekt prostego kontrolera pamięci podręcznej w VHDL: 4 kroki

Wideo: Projekt prostego kontrolera pamięci podręcznej w VHDL: 4 kroki
Wideo: Co to jest Cache, czyli Pamięć Podręczna #PatrickProTip 2024, Czerwiec
Anonim
Projekt prostego kontrolera pamięci podręcznej w VHDL
Projekt prostego kontrolera pamięci podręcznej w VHDL

Piszę tę instrukcję, ponieważ trochę trudno było mi uzyskać jakiś referencyjny kod VHDL do nauczenia się i rozpoczęcia projektowania kontrolera pamięci podręcznej. Więc sam zaprojektowałem kontroler pamięci podręcznej od podstaw i przetestowałem go z powodzeniem na FPGA. Przedstawiłem tutaj prosty, bezpośrednio mapowany kontroler pamięci podręcznej, a także modelowałem cały system procesor-pamięć do testowania kontrolera pamięci podręcznej. Mam nadzieję, że uznacie to za przydatne jako odniesienie do projektowania własnych kontrolerów pamięci podręcznej.

Krok 1: Specyfikacje

Specyfikacje
Specyfikacje

Oto główne specyfikacje kontrolera pamięci podręcznej, który zamierzamy zaprojektować:

  • Bezpośrednio mapowane. (przejdź do tego linku, jeśli szukasz asocjacyjnego mapowanego kontrolera pamięci podręcznej)
  • Jednobankowa, blokująca pamięć podręczna.
  • Zasady zapisu dotyczące trafień związanych z zapisem.
  • Zasady alokacji lub zapisywania z pominięciem zapisu w przypadku chybionych zapisów.
  • Brak bufora zapisu lub innych optymalizacji.
  • Tablica tagów jest włączona.

Poza tym zaprojektujemy również pamięć podręczną i system pamięci głównej.

Domyślne (konfigurowalne) specyfikacje pamięci podręcznej:

  • 256 bajtów pamięci podręcznej z jednym bankiem.
  • 16 linii pamięci podręcznej, każda linia pamięci podręcznej (blok) = 16 bajtów.

Specyfikacje pamięci głównej:

  • Synchroniczna pamięć odczytu/zapisu.
  • Wielobankowa pamięć z przeplotem - cztery banki pamięci.
  • Każdy rozmiar banku = 1 kB każdy. Stąd całkowity rozmiar = 4 kB.
  • Pamięć adresowalna Word (4 bajty) z 10-bitową magistralą adresową.
  • Większa przepustowość do odczytu. Szerokość odczytu danych = 16 bajtów w jednym cyklu zegara.
  • Szerokość danych zapisu = 4 bajty.

UWAGA: sprawdź moje nowsze instrukcje, jeśli szukasz 4-kierunkowego asocjacyjnego kontrolera pamięci podręcznej

Krok 2: Widok RTL całego systemu

Widok RTL całego systemu
Widok RTL całego systemu

Pełna reprezentacja RTL modułu górnego jest pokazana na rysunku (bez procesora). Domyślne specyfikacje autobusów to:

  • Wszystkie magistrale danych są magistralami 32-bitowymi.
  • Szyna adresowa = Szyna 32-bitowa (ale tylko 10 bitów jest tutaj adresowanych przez pamięć).
  • Blok danych = 128 bitów (szyna szerokopasmowa do odczytu).
  • Wszystkie komponenty są sterowane tym samym zegarem.

Krok 3: Środowisko testowe

Top Module został przetestowany na stanowisku testowym, które po prostu modeluje procesor bez potoku (ponieważ zaprojektowanie całego procesora wcale nie jest łatwe !!). Stanowisko testowe często generuje żądania odczytu/zapisu danych do pamięci. To kpi z typowych instrukcji „Load” i „Store”, wspólnych dla wszystkich programów wykonywanych przez procesor. Wyniki testów pomyślnie zweryfikowały funkcjonalność kontrolera pamięci podręcznej. Poniżej znajdują się zaobserwowane statystyki testu:

  • Wszystkie sygnały odczytu/zapisu chybienia i trafienia zostały wygenerowane poprawnie.
  • Wszystkie operacje odczytu/zapisu danych zakończyły się pomyślnie.
  • Nie wykryto problemów z niespójnością/niespójnością danych.
  • Projekt został pomyślnie zweryfikowany w czasie dla Maxm. Częstotliwość taktowania = 110 MHz w płytce Xilinx Virtex-4 ML-403 (cały system), 195 MHz dla samego Cache Controllera.
  • Dla pamięci głównej wywnioskowano blokowe pamięci RAM. Wszystkie inne macierze zostały zaimplementowane na LUT.

Krok 4: Załączone pliki

Do tego bloga dołączone są następujące pliki:

  • Pliki. VHD kontrolera pamięci podręcznej, tablicy danych pamięci podręcznej, głównego systemu pamięci.
  • Stanowisko testowe.
  • Dokumentacja kontrolera pamięci podręcznej.

Uwagi:

  • Przejrzyj dokumentację, aby w pełni zrozumieć specyfikacje kontrolera pamięci podręcznej przedstawione tutaj.
  • Wszelkie zmiany w kodzie są zależne od innych modułów. Tak więc zmiany powinny być dokonywane rozsądnie. Zwróć uwagę na wszystkie komentarze i nagłówki, które podałem.
  • Jeśli z jakiegoś powodu blokowe pamięci RAM nie są wywnioskowane dla pamięci głównej, ZREDUKUJ rozmiar pamięci, a następnie zmiany szerokości szyn adresowych w plikach i tak dalej. Aby ta sama pamięć mogła być zaimplementowana na LUT lub rozproszonej pamięci RAM. Oszczędzi to czas i zasoby routingu. Lub przejdź do odpowiedniej dokumentacji FPGA i znajdź kompatybilny kod dla bloku RAM i odpowiednio go edytuj, używając tych samych specyfikacji szerokości magistrali adresowej. Ta sama technika dla FPGA Altera.

Zalecana: