Język Verilog w projektowaniu systemów wbudowanych na układach FPGA (2022, Oficyna Wydawnicza Politechniki Białostockiej) - Valery Salauyou, Adam Klimowicz, Tomasz Grześ, Irena Bułatowa [PL] [pdf] [LIBGEN]
Jeżeli pobieranie tego torrenta się zatrzyma to trzeba zamknąć i uruchomić ponownie program pobierający. Należy zamknąć go też w zasobniku systemowym (to koło zegara).
..::(Info)::..
Tytuł: Język Verilog w projektowaniu systemów wbudowanych na układach FPGA
Rok: 2022
Wydawca: Oficyna Wydawnicza Politechniki Białostockiej
Format: pdf
..::(Opis)::..
Tabela 1.1. Tablica prawdy sumatora jednobitowego
Tabela 1.2. Słowa kluczowe języka Verilog (wersja z 1995 r.)
Tabela 1.3. Słowa kluczowe języka Verilog w wersji z 2001 r. (niezawarte w wersji z 1995 r.)
Tabela 1.4. Poziomy mocy źródeł sygnałów
Tabela 1.5. Przykłady reprezentacji binarnej liczb całkowitych
Tabela 3.1. Bramkowe prymitywy języka Verilog
Tabela 3.2. Przełącznikowe prymitywy języka Verilog
Tabela 4.1. Wartość sygnału w różnych węzłach dla dwóch źródeł sygnałów
Tabela 5.1. Operatory bitowe
Tabela 5.2. Wyniki operacji bitowych
Tabela 5.3. Operatory redukcji
Tabela 5.4. Przykłady wykorzystania operatorów redukcji
Tabela 5.5. Operatory logiczne
Tabela 5.6. Operatory relacji
Tabela 5.7. Operatory arytmetyczne
Tabela 5.8. Operatory różne
Tabela 5.9. Priorytety operatorów
Tabela 5.10. Rozmiary wyrażeń bitowych
Tabela 13.1. Porównanie funkcji i procedur
Tabela 14.1. Lista symboli formatujących dla procedury $display
Tabela 14.2. Wartości parametru type przy otwieraniu plików
Tabela 14.3. Opis dodatkowych funkcji pracy z plikami
Tabela 16.1. Zbiory wartości opóźnień dla różnej liczby przełączeń sygnału
Tabela 18.1. Konstrukcje języka Verilog wspierane przez syntezator
Tabela 18.2. Typy danych
Tabela 18.3. Instrukcje
Tabela 18.4. Operatory przypisania
Tabela 18.5. Prymitywy
Tabela 18.6. Prymitywy definiowane przez użytkownika (UDP)
Tabela 18.7. Proceduralne operatory i bloki
Tabela 18.8. Procedury i funkcje
Tabela 18.9. Struktury hierarchiczne
Tabela 18.10. Bloki specyfikacji
Tabela 18.11. Systemowe procedury i funkcje
Tabela 18.12. Dyrektywy kompilatora
Rys. 1.1. Schemat jednobitowego sumatora na poziomie bramek logicznych
Rys. 1.2. Realizacja modułu add_1_2 z listingu 1.2: przykład opisu sumatora jednobitowego za pomocą równań logicznych
Rys. 1.3. Realizacja modułu add_1_3 na podstawie listingu 1.3: przykład opisu jednobitowego sumatora za pomocą operatorów proceduralnych
Rys. 1.4. Realizacja modułu add_4 na podstawie listingu 1.4: hierarchiczna struktura sumatora 4-bitowego zbudowanego z czterech instancji sumatora jednobitowego
Rys. 1.5. Wynik symulacji sumatora jednobitowego
Rys. 2.1. Realizacja modułu add_2 dwubitowego sumatora z listingu 2.2 stworzonego z dwóch sumatorów jednobitowych
Rys. 2.2. Realizacja modułów reg_4_1 oraz reg_4_2 4-bitowego rejestru z listingów 2.3 i 2.4
Rys. 2.3. Realizacja modułu wor_wand z listingu 2.5: przykład połączenia wyjść inwerterów za pomocą węzłów wor i wand
Rys. 2.4. Realizacja modułu add_N parametryzowanego sumatora z listingu 2.6: przykład wykorzystania funkcji arytmetycznych i operatora konkatenacji w lewej części operatora
Rys. 2.5. Realizacja modułu buf_8_1 z listingu 2.8: przykład budowy 8-bitowego bufora składającego się z ośmiu jednobitowych prymitywów bufif0
Rys. 3.1. Prymitywy logiczne w pakiecie Quartus
Rys. 3.2. Prymitywy buforowe w pakiecie Quartus
Rys. 3.3. Realizacja prymitywu użytkownika my_mux z listingu 3.1
Rys. 3.4. Realizacja prymitywu użytkownika my_dff z listingu 3.2
Rys. 3.5. Realizacja modułu user_primitives z listingu 3.3
Rys. 4.1. Realizacja przykładu połączenia wyjść bramek za pomocą węzłów różnego typu z listingu 4.1: y1 – wire; y2 – wor; y3 – wand; y4 – tri0; y5 – tri1; y6 – trireg; y7 – supply0; y8 – supply1
Rys. 5.1. Realizacja modułu mult_on_10 z listingu 5.1 wykonującego mnożenie liczby A przez 10 za pomocą operatora przesunięcia
Rys. 5.2. Realizacja modułu inputs_test z listingu 5.2: przykład wykorzystania operatorów redukcji do sprawdzenia czy liczba jedynek w słowie jest parzysta oraz czy wszystkie bity mają wartość 1
Rys. 5.3. Realizacja modułu comp_eq z listingu 5.3: przykład wykorzystania operatorów redukcji NOR do realizacji funkcji równości w komparatorze
Rys. 5.4. Realizacja modułu if_subtraction z listingu 5.4: przykład wykorzystania operacji logicznych podczas realizacji urządzenia sterującego mikrokontrolera
Rys. 5.5. Realizacja modułu comparator z listingu 5.5: przykład wykorzystania operatora relacji do stworzenia parametryzowanego komparatora
Rys. 5.6. Realizacja modułu mux_2_1 z listingu 5.6: przykład wykorzystania operatora warunkowego do stworzenia multipleksera
Rys. 6.1. Realizacja modułu sum_1_1 z listingu 6.1
Rys. 6.2. Realizacja modułu sum_1_2 z listingu 6.2
Rys. 6.3. Realizacja modułu sum_8 z listingu 6.3: przykład 8-bitowego sumatora z wykorzystaniem operacji arytmetycznych
Rys. 6.4. Realizacja modułu simple_ALU z listingu 6.4: przykład wielokrotnego wykorzystania operatora assign z różnymi operacjami przy opisie układu kombinacyjnego
Rys. 7.1. Realizacja modułu maj_3 z listingu 7.1: przykład wykorzystania bloku proceduralnego always do realizacji układu kombinacyjnego kontroli większościowej
Rys. 8.1. Realizacja modułu adder_sen_list_1 z listingu 8.1: wykorzystanie bloku proceduralnego always z listą czułości do opisu jednobitowego sumatora
Rys. 8.2. Realizacja modułu circ_latch z listingu 8.2: powstawanie zatrzasku na wyjściu w przypadku błędu opisu schematu kombinacyjnego
Rys. 8.3. Realizacja modułu adder_sen_list_2 z listingu 8.3
Rys. 8.4. Realizacja modułu circ_no_latch z listingu 8.4: rozwiązanie błędu przy opisie układu kombinacyjnego – zatrzask na wyjściu nie występuje
Rys. 8.5. Realizacja modułu my_DFF_no_blocking z listingu 8.5: przykład realizacji przerzutnika D za pomocą nieblokującego operatora przypisania
Rys. 8.6. Realizacja modułu my_DFF_blocking z listingu 8.6: przykład realizacji przerzutnika D za pomocą operatora przypisania blokującego
Rys. 9.1. Realizacja modułu blocking_in_out z listingu 9.1: przykład przypisania sygnałów w bloku always za pomocą operatora przypisania blokującego
Rys. 9.2. Realizacja modułu blocking_st z listingu 9.8: przykład wykorzystania operatora blokującego przypisania wspólnie z operatorami zarządzania czasem
Rys. 9.3. Realizacja modułu blocking_st_intra z listingu 9.9: przykład wykorzystania operatora blokującego przypisania z wewnętrznym opóźnieniem
Rys. 9.4. Realizacja modułu blocking_assignments z listingu 9.10: przykład przypisania sygnałów w bloku always, czułego na zbocze sygnału za pomocą operatorów blokującego przypisania
Rys. 9.5. Realizacja modułu non_blocking_st z listingu 9.12: przykład wykorzystania operatora przypisania nieblokującego razem z operatorami zarządzania czasem
Rys. 9.6. Realizacja modułu non_blocking_st_intra z listingu 9.13: przykład wykorzystania operatora przypisania nieblokującego z wewnętrznym opóźnieniem
Rys. 9.7. Realizacja modułu non_blocking_assignments z listingu 9.14: przykład przypisania sygnałów w bloku always, czułym na zbocze sygnału synchronizacyjnego, za pomocą operatorów przypisania nieblokującego (porównaj dany przykład z rysunkiem 9.4)
Rys. 9.8. Realizacja modułu not_inputs z listingu 9.2: przykład inwersji wejść
Rys. 9.9. Realizacja modułu gating_outputs z listingu 9.3: połączenie wejść za pomocą bramek różnego typu
Rys. 9.10. Realizacja modułu gating_in_out_1 z listingu 9.4: sekwencyjne połączenie wejść za pomocą bramek logicznych
Rys. 9.11. Realizacja modułu gating_in_out_2 z listingu 9.5: sekwencyjne połączenie wejść za pomocą bramek z wykorzystaniem wewnętrznej zmiennej tymczasowej
Rys. 9.12. Realizacja modułu connect_outs z listingu 9.6: połączenie wyjść inwerterów
Rys. 9.13. Realizacja modułu comb_circuit z listingu 9.7: przykład opisu prostego układu kombinacyjnego
Rys. 10.1. Realizacja modułu adder_mult z listingu 10.1: przykład wykorzystania operatora if do opisu ALU realizującego arytmetyczne operacje dodawania lub mnożenia
Rys. 10.2. Realizacja modułu mux_N_if z listingu 10.2: przykład realizacji szynowego multipleksera za pomocą operatora if
Rys. 10.3. Realizacja modułu mux_N_conditional z listingu 10.3: przykład realizacji szynowego multipleksera za pomocą wyrażenia warunkowego
Rys. 10.4. Realizacja modułu latch_1 z listingu 10.4: realizacja zatrzasku za pomocą operatora if
Rys. 10.5. Realizacja modułu latch_2 z listingu 10.5: wynik błędnego opisu układu kombinacyjnego – na wyjściu schematu zostaje ustawiony zatrzask
Rys. 10.6. Realizacja modułów comb_circuit_1-3 z listingów 10.6-10.8
Rys. 10.7. Realizacja modułu sm_IF z listingu 10.9: przykład opisu funkcji boolowskiej za pomocą operatora if
Rys. 10.8. Realizacja modułów sm_Case1-3 z listingów 10.10-10.12: przykład opisu funkcji boolowskiej za pomocą operatorów case
Rys. 10.9. Realizacja modułu sm_Case4 z listingu 10.13: przykład wykorzystania nieokreśloności do nadania wartości wyjścia w operatorze case
Rys. 10.10. Realizacja modułu decoder z listingu 10.14: przykład wykorzystania nieokreślonej wartości wejść w operatorze casex
Rys. 10.11. Realizacja modułu sm_Case5 z listingu 10.15: przykład wykorzystania znaku „?” przy opisie wartości wejść w operatorze casex
Rys. 10.12. Realizacja modułu count_zero1 z listingu 10.16: przykład wykorzystania operatora for do określenia liczby zer w 4-bitowym słowie
Rys. 11.1. Realizacja modułu use_full_case z listingu 11.1: przykład wykorzystania atrybutu full_case przy operatorze case
Rys. 11.2. Realizacja przykładu z listingu 11.1 bez atrybutu full_case
Rys. 11.3. Realizacja modułu one_hot_assign1 z listingu 11.2: przykład wykorzystania atrybutu parallel_case z operatorem case
Rys. 11.4. Realizacja przykładu z listingu 11.2 bez atrybutu parallel_case
Rys. 11.5. Realizacja modułu one_hot_assign2 z listingu 11.3: przykład jednoczesnego wykorzystania atrybutów full_case oraz parallel_case
Rys. 11.6. Realizacja przykładu z listingu 11.3 z pominięciem atrybutów full_case i parallel_case
Rys. 12.1. Realizacja modułu gray_bin z listingu 12.3: przykład wykorzystania bloku generacji i operatora for do opisu przekształcenia kodu Graya do kodu binarnego
Rys. 13.1. Realizacja modułu ram_model z listingu 13.3: przykład jednoportowej synchronicznej pamięci, przy opisie której wykorzystano funkcję stałą clogb2
Wykaz skrótów
Przedmowa
Wstęp
1. Wprowadzenie do języka Verilog
1.1. Historia języka Verilog
1.2. Pierwszy projekt w języku Verilog
1.2.1. Opis projektu
1.2.2. Symulacja projektu
1.3. Podstawowe elementy języka Verilog
1.3.1. Słowa kluczowe
1.3.2. Identyfikatory
1.3.3. Białe znaki
1.3.4. Komentarze
1.4. Sygnały, sieci, sterowniki
1.4.1. Wartości logiczne
1.4.2. Moc logiczna sygnałów
1.5. Liczby
1.5.1. Reprezentacja liczb całkowitych
1.5.2. Reprezentacja liczb rzeczywistych
1.6. Równoległość języka Verilog
2. Moduły
2.1. Definicje modułów
2.2. Elementy modułów
2.3. Deklaracja portów
2.4. Instancje modułów
2.5. Parametry
2.6. Niejawne przekazywanie parametrów
2.7. Tablice instancji modułów
2.8. Hierarchia modułów i zmiennych
2.9. Obszary hierarchii i zakresy widoczności zmiennych
3. Prymitywy i moduły biblioteczne
3.1. Gdzie można znaleźć gotowe rozwiązanie
3.2. Prymitywy języka Verilog
3.3. Prymitywy definiowane przez użytkownika
4. Typy danych
4.1. Dwie klasy typów danych
4.2. Sieciowe typy danych
4.3. Znaczenie sygnałów sieci
4.4. Zmienne typy danych
4.5. Inne typy danych
4.5.1. Parametry
4.5.2. Parametry lokalne
4.5.3. Parametry bloku specyfikacji
4.5.4. Zmienne generacji
4.5.5. Typ danych zdarzenie
4.5.6. Łańcuchy znaków
4.6. Wybór bitów i pól bitowych
4.7. Wybór elementów tablicy i pól bitowych elementów tablicy
4.8. Deklaracja pamięci
5. Operatory
5.1. Operatory języka Verilog
5.2. Operatory bitowe
5.3. Operatory redukcji
5.4. Operatory logiczne
5.5. Operatory relacji
5.6. Operatory identyczności
5.7. Operatory arytmetyczne
5.8. Operatory różne
5.9. Wykonywanie operacji
5.10. Priorytety operatorów
5.11. Rozmiar wyrażeń bitowych
6. Operator przypisania ciągłego assign
6.1. Przypisania w języku Verilog
6.2. Formaty operatora przypisania ciągłego
6.3. Wykorzystanie operatora przypisania ciągłego
7. Operatory i bloki proceduralne
7.1. Operatory proceduralne initial i always, bloki proceduralne
7.2. Operatory begin-end i fork-join
7.3. Nazwane bloki proceduralne
7.4. Format bloków proceduralnych
8. Zarządzanie czasem
8.1. Operator opóźnienia #
8.2. Operator czułości @
8.3. Operator oczekiwania wait
8.4. Lista czułości
8.5. Lista czułości w układach kombinacyjnych
8.6. Lista czułości w układach sekwencyjnych
9. Operatory przypisania
9.1. Cechy wspólne
9.2. Operator przypisania blokującego „=”
9.2.1. Składnia
9.2.2. Zarządzanie czasem
9.2.3. Opóźnienie wewnętrzne
9.2.4. Cechy syntezy
9.3. Operator przypisania nieblokującego „
Komentarze są widoczne tylko dla osób zalogowanych!
Żaden z plików nie znajduje się na serwerze. Torrenty są własnością użytkowników. Administrator serwisu nie może ponieść konsekwencji za to co użytkownicy wstawiają, lub za to co czynią na stronie. Nie możesz używać tego serwisu do rozpowszechniania lub ściągania materiałów do których nie masz odpowiednich praw lub licencji. Użytkownicy odpowiedzialni są za przestrzeganie tych zasad.