Wykład 6. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D , tel. w ,

Podobne dokumenty
Wykład 7. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń. Obsługa plików. Składnia Veriloga: Komórki prymitywne użytkownika

Konwencje językowe Verilog-a APSC

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Modelowanie liczników w języku Verilog i ich implementacja w strukturze FPGA

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Projektowanie układów VLSI-ASIC techniką od ogółu do szczegółu (top-down) przy użyciu pakietu CADENCE

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Wykład 4. Języki Opisu Sprzętu

Wykład 4. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D , tel. w ,

INFORMATYKA Studia Niestacjonarne Elektrotechnika

1 Wstęp. 2 Proste przykłady. 3 Podstawowe elementy leksykalne i typy danych. 6 Opis strukturalny. 7 Moduł testowy (testbench)

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Przykładowe pytania z części PSPICE. 1. Podaj zasady tworzenia pliku symulacyjnego. 2. Czy składnia PSPICE jest czuła na wielkość liter? 3.

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Krótkie wprowadzenie do ModelSim i Quartus2

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

ISO/ANSI C dostęp do plików ISO/ANSI C. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików. ISO/ANSI C dostęp do plików

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

PRZERZUTNIKI: 1. Należą do grupy bloków sekwencyjnych, 2. podstawowe układy pamiętające

MentorGraphics ModelSim

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Funkcje zawarte w bibliotece < io.h >

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Synteza logiczna APSC

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Wstęp do programowania

Projektowanie scalonych systemów wbudowanych VERILOG. VERLIOG - historia

Funkcje zawarte w bibliotece < io.h >

Liczby pseudolosowe. #include <stdio.h> #include <stdlib.h> int main() { printf("%d\n", RAND_MAX); return 0; }

Automat skończony FSM Finite State Machine

Powłoka I. Popularne implementacje. W stylu sh (powłoki zdefiniowanej w POSIX) W stylu csh. bash (najpopularniejsza) zsh ksh mksh.

Lista tematów na kolokwium z wykładu z Techniki Cyfrowej w roku ak. 2013/2014

Programowanie Niskopoziomowe

1. ISE WebPack i VHDL Xilinx ISE Design Suite 10.1 VHDL Tworzenie projektu Project Navigator Xilinx ISE Design Suite 10.1 File

Język HDL - VERILOG. (Syntetyzowalna warstwa języka) Hardware Description Language Krzysztof Jasiński PRUS PRUS

Kurs Zaawansowany S7. Spis treści. Dzień 1

Laboratorium Podstaw Techniki Cyfrowej

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

ćw. Symulacja układów cyfrowych Data wykonania: Data oddania: Program SPICE - Symulacja działania układów liczników 7490 i 7493

Język HDL - VERILOG. (Syntetyzowalna warstwa języka) Hardware Description Language Krzysztof Jasiński PRUS PRUS

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Laboratorium Projektowania Systemów VLSI-ASIC Katedra Elektroniki Akademia Górniczo-Hutnicza

PLC1: Programowanie sterowników logicznych SIEMENS SIMATIC S7-300/400 - kurs podstawowy

Adresowanie obiektów. Adresowanie bitów. Adresowanie bajtów i słów. Adresowanie bajtów i słów. Adresowanie timerów i liczników. Adresowanie timerów

Programowanie w Turbo Pascal

Laboratorium przedmiotu Technika Cyfrowa

Struktury, unie, formatowanie, wskaźniki

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 4 (3h) Przerzutniki, zatrzaski i rejestry w VHDL

Pliki. Operacje na plikach w Pascalu

Pojedyncze wartości zadeklarowanego typu Ustawiane przed rozpoczęciem symulacji bez moŝliwości

Kurs SIMATIC S7-300/400 i TIA Portal - Zaawansowany. Spis treści. Dzień 1

Biblioteka standardowa - operacje wejścia/wyjścia

1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33

bocznej Tabela stanów sterownika Światła na drodze:

Cyfrowy zapis informacji

Wykład PASCAL - Pliki tekstowe

Układy reprogramowalne i SoC Implementacja w układach FPGA

Program wykonujący operację na plikach powinien zachować schemat działania zapewniający poprawną pracę:

Organizacja pamięci VRAM monitora znakowego. 1. Tryb pracy automatycznej

Literatura. adów w cyfrowych. Projektowanie układ. Technika cyfrowa. Technika cyfrowa. Bramki logiczne i przerzutniki.

Układy cyfrowe w Verilog HDL. Elementy języka z przykładami. wersja: cz.3

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Technologie Informacyjne

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Wykład 3. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D , tel. w ,

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Spis treści. Dzień 1. I Rozpoczęcie pracy ze sterownikiem (wersja 1707) II Bloki danych (wersja 1707) ZAAWANSOWANY TIA DLA S7-300/400

Lekcja 3: Pierwsze kroki z Pythonem. Pętle

1 Przygotował: mgr inż. Maciej Lasota

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

OPTYMALIZACJA MODELI SYMULACYJNYCH ZAMODELOWANYCH W JĘZYKU VERILOG HDL Z WYKORZYSTANIEM INTERFEJSU PLI

Część 3. Układy sekwencyjne. Układy sekwencyjne i układy iteracyjne - grafy stanów TCiM Wydział EAIiIB Katedra EiASPE 1

Pracownia Komputerowa wykład V

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 8 (3h) Implementacja pamięci ROM w FPGA

4. Pliki Informacje ogólne o dostępie do plików w PHP Sprawdzanie istnienia pliku file_exists()

Operacje na plikach. Informatyka. Standardowe strumienie wejścia i wyjścia

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Wykład 2. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D , tel. w ,

Szkolenia specjalistyczne

Ćw. 9 Przerzutniki. 1. Cel ćwiczenia. 2. Wymagane informacje. 3. Wprowadzenie teoretyczne PODSTAWY ELEKTRONIKI MSIB

Układy czasowo-licznikowe w systemach mikroprocesorowych

Programowanie w językach wysokiego poziomu

Wykład 5. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D , tel. w ,

Podstawy programowania skrót z wykładów:

Pliki. Informacje ogólne. Obsługa plików w języku C

Uniwersytet w Białymstoku Wydział Ekonomiczno-Informatyczny w Wilnie SYLLABUS na rok akademicki 2010/2011

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Transkrypt:

Języki Opisu Sprzętu Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D-10 222, tel. w. 28-72, e-mail: skoczen@fis.agh.edu.pl Zadania systemowe Wykład 6 2018 22 październik 2018 Konstrukcja symulatora Układ synchroniczny http://www.fis.agh.edu.pl/~skoczen/hdl AGH WFiIS Informatyka Stosowana Języki Opisu Sprzętu 1

Zadania systemowe Wywołuje się je w postaci: $<słowo_kluczowe> Zatrzymywanie symulacji $stop; Zawiesza symulację i wprowadza tryb interaktywny np. w celu analizy sygnałów w projekcie. Zakańczanie symulacji $finish; Kończy symulację. AGH, WFiIS, HDL 2

Zadania systemowe Wyświetlanie informacji $display(p1, p2,..., pn); $write(p1, p2,..., pn); p1, p2,..., pn zmienne, wyrażenia, ciągi znaków ujęte w cudzysłów. Różnica między $display a $write polega na tym, że pierwszy na końcu ciągu znaków domyślnie wstawia koniec linii a drugi nie. Dla wyświetlenia kilku ciągów znaków w jednej linii używamy $write. Monitorowanie informacji $monitor(p1, p2,..., pn); p1, p2,..., pn zmienne, nazwy sygnałów, ciągi znaków ujęte w cudzysłów. W sposób ciągły monitoruje wartości zmiennych i sygnałów i wyświetla ich wartości w momentach zmiany choć jednego z parametrów. Zadanie to wystarczy wywołać tylko raz. Drugie wystąpienie zadania $monitor powoduje deaktywację poprzedniego. Dwa pomocnicze zadania systemowe: $monitoron; aktywacja zadania $monitor (domyślne) $monitoroff; deaktywacja zadania $monitor AGH, WFiIS, HDL 3

Zadania systemowe Formatowanie ciągów znakowych: %h lub %H heksadecymalnie %d lub %D dziesiątkowo %o lub %O oktalnie %b lub %B binarnie %c lub %C znak ASCII %v lub %V moc sygnału w węźle %m lub %M nazwy hierarchiczne %s lub %S stringi %t lub %T bieżący czas %f lub %F liczby rzeczywiste w sposób dziesiętny %e lub %E liczby rzeczywiste w sposób wykładniczy %g lub %G liczby rzeczywiste w sposób dziesiętny lub wykładniczy, tak aby było krócej AGH, WFiIS, HDL 4

Zadania systemowe module disp; initial begin $display("\\\t%%\n\"\123"); module $display ncsim> run \ % "S module printval; reg [11:0] r1; initial begin r1 = 12 d10; $display("printing with maximum size - :%d: :%h:",r1,r1 ); $display("printing with minimum size - :%0d: :%0h:",r1,r1 ); module ncsim> run Printing with maximum size - : 10: :00a: Printing with minimum size - :10: :a: AGH, WFiIS, HDL 5

Zadania systemowe $display module disp; reg [31:0] rval; pulldown (pd); initial begin rval = 32 d101; $display("rval = %h hex %d decimal",rval,rval); $display("rval = %o octal %b binary",rval,rval); $display("rval has %c ascii character value",rval); $display("pd strength value is %v",pd); $display("current scope is %m"); $display("%s is ascii value for 101",101); $display("simulation time is %t", $time); module ncsim> run rval = 00000065 hex 101 decimal rval = 00000000145 octal 00000000000000000000000001100101 binary rval has e ascii character value pd strength value is StX current scope is disp e is ascii value for 101 simulation time is 0 AGH, WFiIS, HDL 6

Zadania systemowe $monitor `timescale 1ns / 1ns module top; reg clock, reset; initial begin clock = 1'b0; forever #5 clock = ~clock; initial begin reset = 1'b0; #1 reset = 1'b1; #3 reset = 1'b0; //monitorowanie wartości czasu i sygnałów zegara i resetu initial $monitor($time, "ns Wartosci sygnałow clock = %b reset = %b", clock, reset); initial #20 $finish; module 0ns Wartosci sygnałow clock = 0 reset = 0 1ns Wartosci sygnałow clock = 0 reset = 1 4ns Wartosci sygnałow clock = 0 reset = 0 5ns Wartosci sygnałow clock = 1 reset = 0 10ns Wartosci sygnałow clock = 0 reset = 0 15ns Wartosci sygnałow clock = 1 reset = 0 AGH, WFiIS, HDL 7

Funkcja systemowa $random Generacja liczb losowych jest konieczna dla tworzenia losowych wymuszeń w modułach testujących. Służy do tego funkcja systemowa: $random(<seed>) Zwraca ono 32-bitową losową liczbę całkowitą ze znakiem. Standard nie określa algorytmu. Parametr seed (posiew) sprawia, że różne strumienie losowe są generowane dla różnych jego wartości. Może być zadeklarowany jako: integer, reg, lub time. Przypisanie wartości do zmiennej seed musi być wykonane przed wywołaniem. $random % b reg [23:0] rand; rand = $random % 60; Daje liczby losowe z zakresu [(-b+1): (b-1)]. Generacja liczb losowych z zakresu od -59 do 59. reg [23:0] rand; rand = {$random} % 60; Nawiasy klamrowe oznaczają utworzenie modułu wylosowanej wartości co ogranicza zakres do wartości dodatnich tzn. od 0 do 59. reg serdata; serdata = {$random} % 2; Generacja losowego strumienia zer i jedynek. AGH, WFiIS, HDL 8

Funkcja systemowa $bitstoreal Generacja rzeczywistych liczb losowych w terminach znaku sgn, wykładnika exp i mantysy man. Potrzebne jest użycie funkcji systemowej $bitstoreal. module Tb(); reg sgn; reg [10:0] exp; reg [51:0] man; real r_num; initial begin repeat(5) begin sgn = $random; exp = $random; man = $random; r_num = $bitstoreal({sgn,exp,man}); $display("r_num = %e",r_num); module r_num = 3.649952e+193 r_num = -1.414950e-73 r_num = -3.910319e-149 r_num = -4.280878e-196 r_num = -4.327791e+273 AGH, WFiIS, HDL 9

Zadanie systemowe $readmemb, $readmemh Zadania do inicjowania pamięci zawartością pliku. $readmemb wczytuje zmienne binarne $readmemh wczytuje zmienne heksadecymalne module test; reg [7:0] memory [0:7]; integer i; initial begin $readmemb( init.dat, memory); for(i=0; i<8; i=i+1) $display( memory[%0d]=%b,i, memory[i]); module $readmemb( <nazwa_pliku>, <zmienna_pam>, <start_adres>, <finish_adres>); Plik init.dat : @002 11111111 01010101 00000000 10101010 @006 1111zzzz 00001111 memory[0]= xxxxxxxx memory[1]= xxxxxxxx memory[2]= 11111111 memory[3]= 01010101 memory[4]=00000000 memory[5]= 10101010 memory[6]= 1111zzzz memory[7]= 00001111 AGH, WFiIS, HDL 10

Zadanie systemowe initial if ($test$plusargs( test01 )) $readmemh( test01.dat,stim_mem); if ($test$plusargs( test02 )) $readmemh( test02.dat,stim_mem); if ($test$plusargs( test03 )) $readmemh( test03.dat, stim_mem); if ($test$plusargs( test04 )) $readmemh( test04.dat, stim_mem); % ncsim snapshot_name +test01 & % ncsim snapshot_name +test02 & % ncsim snapshot_name +test03 & % ncsim snapshot_name +test04 & % isim snapshot_name plusargs test01 & % isim snapshot_name plusargs test02 & % isim snapshot_name plusargs test03 & % isim snapshot_name plusargs test04 & Incisive, Cadence ISim, Xilinx AGH, WFiIS, HDL 11

Zadanie systemowe Synteza pamięci stałej ISim, Xilinx AGH, WFiIS, HDL 12

Zadanie systemowe Synteza pamięci stałej ISim, Xilinx AGH, WFiIS, HDL 13

Zadania obsługi plików Obsługa plików poprzez zadania systemowe: Otwarcie pliku: <uchwyt_pliku>=$fopen( <nazwa_pliku>,tryb); <uchwyt_pliku> - 32-bitowa wartość z MSB = 1; Deskryptory predefiniowane: STDIN STDOUT STDERR 32 h8000_000 32 h8000_001 32 h8000_002 Pisanie do pliku: $fdisplay(<uchwyt_pliku>, p1, p2,..., pn); $fmonitor(<uchwyt_pliku>, p1, p2,..., pn); p1, p2,..., pn zmienne, sygnały lub łańcuchy znakowe w cudzysłowie tak samo jak dla zwykłych zadań $display, $monitor tryb sposób otwarcia pliku: r odczyt, w zapis, a kontynuacja. Odczyt z pliku: $fgetc, $ungetc, $fgets, $fscanf, $fread Zamknięcie pliku: $fclose(<uchwyt_pliku>); AGH, WFiIS, HDL 14

Zadania obsługi plików - odczyt Zadanie $fgetc $ungetc $fgets $fscanf $fread Opis Czyta jedne znak Wstawia znak c spowrotem do bufora określonego deskryptorem pliki fd Czyta jedną linię Czyta formatowane dane Czyta dane binarne AGH, WFiIS, HDL 15

module str(); integer fptr, c; reg [8*12:1] nazwa_plik, buffer; initial nazwa_plik = "datafile.txt"; initial begin fptr = $fopen(nazwa_plik,"r"); if(!fptr ) $stop; $display("otwarto plik %s do czytania o deskryptorze %b", nazwa_plik, fptr); c = 1; Bufor o długosci 12 bajtów while ( c!= 0 ) begin c = $fgets(buffer, fptr); $write(" number=%0d data:%s", c, buffer); $fclose(fptr); module Zadanie obsługi plików - odczyt Otwarto plik datafile.txt do czytania o deskryptorze 10000000000000000000000000000011 number=12 Data:abababababa number=12 Data:xxxxbbbbcccc number=1 Data: number=9 Data: ccccdddd number=12 Data:mmmmmmmmmmmm umber=2 Data: number=0 Data: m m abababababa xxxxbbbbcccc ccccdddd mmmmmmmmmmmmm Napotkano koniec pliku, więc bufor buffer nie został zaktualizowany. AGH, WFiIS, HDL 16

Zadanie obsługi plików - zapis module strout(); reg [255:0] v; reg [7:0] xb; integer fptr; initial begin xb = {8{1'b1}}; v = {32{xb}}; fptr = $fopen("output_data.txt", "w"); if(!fptr) begin $display("blad!"); $stop; $display("otwarto plik output_data.txt o deskryptorze %b", fptr); $fwrite(fptr, "Value of v is: %b", v); $fwrite(fptr, "Some string."); $fclose(fptr); module Value of v is: 11111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111 111111111111111111111 Some string. Wynik symulacji: Otwarto plik output_data.txt o deskryptorze 10000000000000000000000000000011 AGH, WFiIS, HDL 17

Wielokanałowy deskryptor: służy tylko do zapisu Zadanie obsługi plików powstaje w nieobecności argumentu tryb ma MSB=0 i LSB=0 zawiera tylko jeden bit ustawiony na 1. Zapis do wielu plików równocześnie jest możliwy poprzez alternatywę deskryptorów wielokanałowych. AGH, WFiIS, HDL 18

Zapis wielokanałowy module mcdtry; integer mcd1, mcd2, cluster, all; initial begin mcd1 = $fopen("plik1.dat"); if(mcd1 == 0) $display("blad otwarcia pliku!"); mcd2 = $fopen("plik2.dat"); if(mcd2 == 0) $display("blad otwarcia pliku!"); cluster = mcd1 mcd2; //uzupelnij o stdout all = cluster 1'b1; $display("mcd1\t=%b\nmcd2\t=%b\ncluster\t=%b\nall\t=%b", mcd1,mcd2,cluster,all); $fdisplay(all,"czas: %0d ns", $time); #10 $fdisplay(cluster,"xxxxxxxx", $time); forever #10 $fdisplay(mcd2, "tylko do plik2.txt"); initial #100 $finish; module AGH, WFiIS, HDL 19

Zapis wielokanałowy Wyniki z symulacji kodu na poprzednim slajdzie: Czas: 0 ns plik2.txt XXXXXXXX 10 tylko do plik2.txt tylko do plik2.txt tylko do plik2.txt tylko do plik2.txt tylko do plik2.txt tylko do plik2.txt tylko do plik2.txt tylko do plik2.txt Czas: 0 ns plik1.txt XXXXXXXX 10 ncsim> run stdout mcd1 =00000000000000000000000000000010 mcd2 =00000000000000000000000000000100 cluster =00000000000000000000000000000110 all =00000000000000000000000000000111 Czas: 0 ns Simulation complete via $finish(1) at time 100 NS + 0./mcd.v:18 initial #100 $finish; AGH, WFiIS, HDL 20

Typy symulatorów cyfrowych Pod względem konstrukcji rozróżniamy: Interpretery (interpreted simulators) wczytywane są kolejne komy HDL-a, budowane struktury danych w pamięci i bezpośrednio wykonywane Kompilowane (compiled code simulators) projekt w HDL-u konwertowany jest do równoważnego kodu w C, który następnie kompilowany jest standardowym kompilatorem, a otrzymany obraz wykonywalny jest następnie uruchamiany Natywne (native code simulators) projekt w HDL-u konwertowany jest bezpośrednio do równoważnego obrazu wykonywalnego dla konkretnej platformy sprzętowej komputera, a następnie otrzymany obraz ten jest uruchamiany

Architektura symulatora natywnego Kompilacja ncvlog *.v Kod RTL library Elaboracja ncelab library Projektant Analiza Optymalizacja Sterowanie symulacją Generacja obrazu wykonywalnego snapshot Maszyna symulacyjna ncsim snapshot Wyniki Kompilacja sprawdzenie syntaktyki kodu i utworzenie wewnętrznych składników dla następnej fazy, Elaboracja dołączenie wewnętrznych składników, rozwinięcie pętli, ekspansja pętli generate, ustawianie parametrów, przesłanie argumentów do zadań i funkcji..., Generacja utworzenie kodu, który będzie użyty przez maszynę symulacyjną. AGH, WFiIS, HDL 22

Algorytmy symulacji Trzy typy algorytmu symulacji: Wszystkie elementy są procesowane cały czas (oblivious-driven) odpowiedni dla symulatorów analogowych, Element projektu (bramka lub blok kodu) jest procesowany tylko w momentach zdarzeń (event-driven), którymi są zmiany wartości sygnałów lub zmiennych, Obliczana jest tylko odpowiedź ustalona układu w chwilach wyznaczonych przez aktywne zbocza zegara (cycle-based), AGH, WFiIS, HDL 23

Charakteryzuje się: Układ synchroniczny jednym sygnałem zegarowym (master clock) i jednym sygnałem ustawiania/kasowania (master set/reset), które sterują wszystkimi elementami sekwencyjnymi w projekcie. Za najbardziej bezpieczne podejście w dziedzinie zapewnienia właściwych relacji czasowych w układzie scalonym uważa się metodologię układu synchronicznego. Podejście w pełni synchroniczne może wydłużać wstępną fazę projektu (up-front design time). Jednak osiągamy znaczną oszczędność w czasie weryfikacji. Całkowicie synchroniczny projekt może używać więcej zasobów ale: Układ będzie bardziej stabilny, Krótszy będzie czas debugowania, Skuteczna będzie statyczna analiza czasowa, Łatwość przeniesienia na inną technologię. AGH, WFiIS, HDL 24

Reguły projektu synchronicznego Wszystkie przerzutniki w ścieżce danych powinny być bezpośrednio połączone do jednego wspólnego globalnego bufora zegara, Wszystkie przerzutniki powinny być wyzwalane na tym samym zboczu zegara, Nie mogą istnieć przerzutniki taktowane sygnałem innym niż zegar, Jeśli potrzeba więcej niż jeden zegar i dane wędrują pomiędzy domenami różnych zegarów, to muszą być resynchronizowane za pomocą kilku przerzutników gdy przechodzą z jednej domeny do drugiej. always @(posedge nie_zegar) AGH, WFiIS, HDL 25