Tablice
Część sekcji Podstawy ścieżki Verilog w Coddy. Lekcja 10 z 90.
Tablica pozwala przechowywać wiele wartości w jednej zmiennej. Do każdego elementu tablicy można uzyskać dostęp za pomocą jego indeksu.
Uwaga: Tablica nie jest osobnym typem danych. Jest kolekcją typów wire, reg, integer lub real.
Deklarowanie tablic
Składnia: <data_type> <name> [<size>];
reg [7:0] memory [0:255]; // 256 bajtów pamięci (każdy po 8 bitów)
reg data [0:7]; // 8 rejestrów jednobitowych
wire [3:0] bus [0:3]; // 4 magistrale, każda o szerokości 4 bitów
integer counters [0:9]; // 10 liczb całkowitychLiczba w nawiasach kwadratowych [ ] oznacza rozmiar tablicy, a nie szerokość w bitach.
Dostęp do elementów tablicy
reg [7:0] memory [0:3];
memory[0] = 165; // Dziesiętnie 165
memory[1] = 90; // Dziesiętnie 90
memory[2] = memory[0] + memory[1];
$display("%d", memory[2]); // Wyświetla: 255Tablice są bardzo przydatne w testbenchach do przechowywania danych testowych.
Tablice wielowymiarowe
Możesz tworzyć tablice o wielu wymiarach:
reg [7:0] matrix [0:3][0:3]; // Tablica 4x4 wartości 8-bitowych
matrix[0][0] = 255; // 8'hFF = 255 w systemie dziesiętnym
matrix[2][1] = 85; // 8'h55 = 85 w systemie dziesiętnymTablica wektorowa a tablica
| Wektor | Tablica | |
|---|---|---|
| Co to jest | Wielobitowy przewód lub rejestr | Zbiór wielu wartości |
| Składnia | [MSB:LSB] | [size] |
| Przykład | reg [7:0] data; | reg [7:0] mem [0:255]; |
| Dostęp | data[3] (bit 3) | mem[3] (element 3) |
Wektor to jedna wartość z wieloma bitami.
Tablica to wiele wartości, z których każda ma własne bity.
Ważne uwagi
- Tablice w wielu narzędziach nie mogą być syntezowane, gdy są używane z dużymi rozmiarami
- Tablice są używane głównie w stanowiskach testowych
- W przypadku pamięci sprzętowej używaj specjalnych prymitywów pamięci
Wyzwanie
Uzupełnij poniższy kod, aby utworzyć tablicę przechowującą 4 wartości testowe.
Co należy zrobić:
- Zadeklaruj tablicę o nazwie
test_data- Użyj typu danych
reg(ponieważ przechowuje wartości w testbench) - Każdy element powinien mieć szerokość 8 bitów (
[7:0]) - Tablica powinna mieć 4 elementy (
[0:3])
- Użyj typu danych
Spróbuj swoich sił
module arrays;
// Zadeklaruj tablicę o nazwie test_data
// Powinna mieć 4 elementy, każdy o szerokości 8 bitów
// Użyj typu danych reg (ponieważ przechowuje wartości w środowisku testowym)
integer i;
initial begin
test_data[0] = 170;
test_data[1] = 240;
test_data[2] = 204;
test_data[3] = 15;
for (i = 0; i < 4; i = i + 1) begin
$display("test_data[%0d] = %b", i, test_data[i]);
end
$finish;
end
endmoduleTa lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
1Wprowadzenie
Czym jest VerilogSprzęt a oprogramowanieTwój pierwszy modułKomentarzePoziomy abstrakcji projektu4Operatory, część 1
Operatory arytmetyczneOperator moduloOperatory porównaniaPowtórka — prosta matematykaOperatory bitowe7Przypisania i bramki
Przypisanie ciągłePrzypisanie z operatoramiWbudowane prymitywy bramekBramki AND, OR i NOTBramki XOR i XNORPodsumowanie — układ z bramek logicznych10Podejmowanie decyzji
Instrukcja ifIf-elsePowtórka – prosty komparatorInstrukcja caseCaseX i CaseZPowtórka – projektowanie ALU13Odmierzanie czasu i opóźnienia
Czym są opóźnieniaOpóźnienia bramekOpóźnienia przypisańDyrektywa timescaleGenerowanie zegaraPodsumowanie — kontrola czasu2Typy danych
Typ WireTyp RegLiczby całkowite i rzeczywisteWektoryTabliceParametryPowtórka — deklarowanie sygnałów5Operatory — część 2
Operatory logiczneOperatory redukcjiOperatory przesunięciaOperator konkatenacjiOperator warunkowyPowtórzenie — wyzwanie z operatorami11Pętle
Pętla forPętla whilePętla repeatPętla nieskończonaInstrukcja wyłączaniaPowtórka — wzorce pętli3System liczbowy
Reprezentacja binarnaLiczby o określonej szerokościLiczby o nieokreślonej szerokościLiczby ujemneWartości specjalne X i ZPodsumowanie — formaty liczb6Moduły
Struktura modułuPorty wejściowe i wyjściowePorty dwukierunkoweInstancjonowanie modułuMapowanie portów według nazwMapowanie portów według kolejnościPodsumowanie — zbuduj moduł9Bloki proceduralne
Blok alwaysBlok initialLista czułościPrzypisanie blokującePrzypisanie nieblokującePodsumowanie — always a initial12Projekt multipleksera
Projekt multipleksera 2 do 1Projekt multipleksera 4 do 115Sterownik sygnalizacji świetlnej
Definiowanie stanówLogika maszyny stanówPoćwicz samodzielnie: Kompilator Verilog online