Presentation is loading. Please wait.

Presentation is loading. Please wait.

Postdiplomske studije, smjer elektronika, Prof dr Radovan Stojanović

Similar presentations


Presentation on theme: "Postdiplomske studije, smjer elektronika, Prof dr Radovan Stojanović"— Presentation transcript:

1 Računarsko projektovanje elektronskih kola (Simulacija elektronskih kola)
Postdiplomske studije, smjer elektronika, Prof dr Radovan Stojanović Univerzitet Crne Gore, ETF Podgorica , Akademska, 2018

2 Opis kursa. Zašto automatizovani dizajn (AD)? AD methodologija.
1. U V O D Opis kursa. Zašto automatizovani dizajn (AD)? AD methodologija.

3 Opis kursa (1) Ciljevi: Upoznavanje sa osnovnim principima i tehnikama automatizovanog dizajna i simulacije elektronskih kola i hardverskih sistema za različite namjene (elektronika, telekomunikacija, računari itd). Razumijevanje nivoa apstrakcije. Upoznavanje i ovladavanje sa elementima HDL-a (Hardware description language) kao i osnovnim CAD (Computer aided design) alatima za opis, simulaciju i sintezu digitalnih elektronskih kola. Upoznavanje i ovladavanje sa izabranim softverima i alatima za simulaciju analognih elektronskih kola. Praktično projektovanje digitalnih elektronskih kola i sistema u FPGA tehnologiji.

4 Opis kursa (2) Metodologija nastave: Metodologija provjere znanja:
Teorijsko-praktičnog tipa: predavanja, prezentacije, lab vježbe, domaći, praktični problemi, seminarski, lektira. Metodologija provjere znanja: Pohadjanje nastave, aktivnosti na času (5%). Laboratorija (10 %). Domaći zadaci (5%). Kolokvijum I (25%) Kolokvijum II (25%) Zavrsni ispit (30%)

5 Opis kursa (3) Metodologija ocjenjivanja: >= 90%: A.
>= 80%, < 90%: B. >= 70%, < 80%: C. >= 60%, < 70%: D. >= 50%, < 60%: E. < 50%: F. Kredit: 6 ECTS poena Softverski alati u procesu nastave: Altera Quartus II Ver 9.1 (web free) ili jedna od zadnjih Hardverski alati u procesu nastave: EP1C6 Cyclone family i DGII education board

6 Opis kursa (4) Literatura: WEB sajt kursa
R. Stojanovic, AUTOMATIZOVANO PROJEKTOVANJE DIGITALNIH SISTEMA, TEMPUS EDICIJA 2008. WEB site. LAB CD Dodatni materijal (Internet, Članci, Popularne i stručne knjige) WEB sajt kursa Mjesto, vrijeme, konsultacije: Laboratorija za elektroniku, fleksibilno vrijeme. Kontakt: Tel

7 Lektira Na našem jeziku i engleskom (VHDL):

8 Evolucija

9 Integarcija Jack Kilby, TI, 1959 konstruiše prvo
integrisano kolo (IC). Robert Noyce Fairchild Intel, 1959, razvija prvo pravo IC.

10 Integarcija… 1961: TI i Fairchild izbacuju prvo logičko IC (dupli flip flop sa 4 tranzistora), >$50! 1963: Već imamo 4 flip-flopa. 1967: Fairchild prvi “programabilno” (semi-custom) čip. Tranzistori (organizovani u kolone) mogli su biti konfigurisani u različita kola (~150 logičkih kapija).

11 Murovo proročanstvo Samo par godina poslije početka Gordon Mur proriče
Broj tranzistora na čipu se udvostručava svakih 2 godine Electronics, Volume 38, Number 8, April 19, 1965

12 Murovo proročanstvo… 1968: Noyce and Moore leave Fairchild to
1968: Prvi operacioni pojačavač, početak integrisane analogne ere 1968: Noyce and Moore leave Fairchild to form Intel. 1970: Intel, 1k bit RAM, 1103. 1971: Ted Hoff u Intelu projektuje prvi microprocessor, 4004, 4-bit buss, 108 KHz, 2300 transistora, 10 um process.

13 Murovo proročanstvo... 1972: 8080 pronadjen, 8 bit, 3,500 tranz.
1976 – prvi mikrokontroler u automobilu (GeneralMotors) • 1978 – prvi 16-bitni mikroprocesor (Intel 8086). • 1981 – prvi IBM PC XT • 1984 – prva 1 Mb memorija. • 1995 – prva eksperimentalna 1 Gb memorija • 1985 – prvi 32-bitni procesor (Intel 80386) • 1989 – Intel 80486, 1.2 miliona tranzistora. • 1993 – Intel Pentium I. • 2000 – Nevjerovatan rast mobilne telefonije u svetu. 1982: Time-ov čovjek godine, kompjuter

14 Kontraverza “I think there is a world market for maybe five computers” IBM Chairman Thomas Watson, 1943 “640,000 bytes of memory ought to be enough for anybody”, Bill Gates, 1981. “The Internet will catastrophically collapse in 1996”, Robert Metcalfe

15 Murovo proročantvo... GWP Realni trend Moore
GWP – Gross world product, Bruto svetski proizvod. Kapacitet svetske ekonomije ne može pratiti troškove razvoja i proizvodnje kola tolikog stepena integracije i tako malih dimenzija Zakon 7/10, svake godine cijena čipa iz serije pada 30%.

16 EDA EDA – Electronic Design Automation. Ili “Mašina pravi mašinu”.
Jednostavno projektovanje pomoću računara, proračuni svih bitnih parametara, simulacija, verifikacija, korekcija rada i mnogi drugi zahtjevi se obavljaju pomoću računara. Samo na taj način Mooreov zakon je mogao biti ostvariv. Prvi pentium kada je bio projektovan iznajmljen je hangar za potrebe crtanje. EDA se primjenjuje podjednako na ANALOGNI, DIGITALNI, RF i MJEŠOVITI dizajn. Danas pentium core staje na jedan CD. DA je prisutna i u drugim disciplinama, gradjevinarstvu, mašinstvu (CAD) itd.

17 Stojanovic, Inaguraciono, Maj, 2013.
EDA (zašto?) Složenost Veća raznovrsnost funkcionalnih cjelina na čipu Processor Softver Memorija Analogni dio Preko 10M tranzistora Preko 1M linija koda Time-to-market Heterogenost Problemi Skraćeno vrijeme dizajniranja Manja tolerancija za reviziju Manja geometrija veći problemi: Kapacitivnost Veze Induktivnost Otpornost Sum Kasnjenje Stojanovic, Inaguraciono, Maj, 2013.

18 EDA fakti Očekivalo se da 2000ta bude kritična Dimenzije tranzistora
Silicon atom = 0.24nm Rhinovirus = 20nm 2008 Core 2 Quad, 45nm 2007 Core 2 Duo, 65nm 2006 Dual Core, 65nm 2005 Pentium D, 90nm 2003 Pentium M, 0,13um 2002 Itanium 2, 0,18um 2000 Pentium 4, 0,18um 1999 Celeron, 0,25um 1999 Pentium III, 0,25um Očekivalo se da 2000ta bude kritična

19 Zašto AD? (1) AD = Automatized design (Design Automatization)
Svjedoci smo prave “eksplozije” elektronske tehnologije. Elektronski čipovi postaju sve složeniji i sve manjih dimenzija. Cjelokupan uredjaj treba biti realizovan na jednom čipu, system on chip. Put od ideje do realizacije proizvoda mora biti što kraći. Neki od čipova visoke koncetracije

20 Gustina pakovanja Intel Pentium (IV) Microprocessor (physical layout),
2000 to 2008

21 Ekonomski aspekti EDA

22 EDA na ETFu Pretežno u svrhe primjene
Akcenat na mikrokontrolerima i FPGA U okviru APEG lab (FPGA)

23 EDA pristupi i softveri
Šta je sledeće? McKinseyeva-Kriva Visoki nivo abstarkcije, MATLAB, System C ? Rezultati (produktivnost projektovanja) Sinteza –syntese (Cadence, Synopsys, Mentor) Šematski nivo - Schematic entry (Daisy, Mentor, Valid) Fizički nivo – transistor entry (Calma, Computervision, Magic) (EDA softver) U korjenu svega: Analogni dizajn, SPICE, PSPICE, 70s, Nagel and Pederson Digitalni dizajn, Verilog, VHDL, 80s.

24 Faze automatizovanog projektovanja
Opis na visokom nivou Funkcionalni Opis Specifikacija Logički Opis Sinteza Fizički Dizajn Tehnološko mapiranje Smeštanje & Povezivanje Gate-level Opis Fabri- kacija X=(AB*CD)+ (A+D)+(A(B+C)) Y = (A(B+C)+AC+ D+A(BC+D)) Pakovanje

25 Faze logičkog i fizičkog projektovanja…
Predmet našeg interesovanja

26 Tok projektovanja - “Design flow”
1 Design Entry direktno šema ili unošenje programa (koda), VHDL, and/or Verilog. Implementation Analiza, simulacija, tajmming. 2 XC4000 Download direktno u čipove, pomoću ISP ili programatora 3

27 “Design flow…” – naši primjeri
FPGA kolo za racunanje kvadratnog korjena FPGA VGA kontroler Od ideje do realizacije, radovi studenata

28 FPGA čip za mjerenje krvnog pritiska
Problem sa mehaničkim djelovima, Mažetna, pumpa Potrošnja. Neugodnost pri mjerenju. Šum Postoji jasna veza izmedju PTTa parametra (Pulse Transmit Time) i BPa. Veći BP manji PTT.

29 Čip za mjerenje krvnog pritiska
FPGA Čitav sistem za mjerenje krvnog pritiska na jednom čipu. Algoritmi obrade Signala od filtera, preko Waveleta do FFT, sve u kodu (VHDL) Knezevic Sasa, 2013

30 2. VHDL

31 Osnove Šta je VHDL? VHDL filozofija
VHDL je internacionalni IEEE standardizovan jezik (IEEE ) za opis elektronskog hardvera. VHDL je akronim za VHSIC (Very High Speed Integrated Circuit) Hardware Description Language VHDL je jezik visokog nivoa abstrakcije (slično C-u, Paskalu, itd) VHDL filozofija Maximalno tačan i pouzdan dizajn uz najmanju cijenu koštanja u najkraćem roku razvijanja.

32 Istorija Ideja 1980. 1981 prve konkretne aktivnosti.
U julu 1983 IBM i Texas Instruments potpisali Ugovor o razvijanju VHDL-a U avgustu 1985 završena VHDL version 7.2. U decembru 1987 VHDL postaje IEEE standard i 1988 ANSI standard. U septembru 1993 VHDL je re-standardizovan, VHDL-1993.

33 Struktura koda Tri elementa

34 Model “crne kutije” Half-adder x carry y enable resut
Interna Funkcionalnost def VHDLom Spoljašni izvodi def VHDLom x Half-adder carry y enable resut x carry y Half Adder result enable

35 Entitet x carry Half Adder y result a[3..0] Byn Comp equals b[3..0]
ENTITY half_adder IS PORT( x, y, enable: IN BIT; carry, result: OUT BIT); END half_adder; x carry Half Adder entity eq_comp4 is port ( a : in bit_vector(3 downto 0); b : in bit_vector(3 downto 0); equals: out bit ); end eq_comp4; y result a[3..0] Byn Comp equals b[3..0]

36 Arhitektura (1) Opisuje unutrašnjost entiteta na nekoliko nivoa apstrakcije. Nivo abstrakcije Strukturni opis paralelno (istovremeno) Opis ponašanja serijsko (redosledno) A B B<= NOT A Fizički (implementacioni) opis Ili (najčešće) kombinacijom

37 Arhitektura (2) Strukturalni opis, kreiran iz pre-definisanih komponeti (ovdje u0,1,2,3,4). Podrazumijeva se da je korisnik familijaran sa električnom šemom. U jednom programu se daje opis interkonekcije komponenti, spoljašnih izvoda i unutrašnjih pomoćnih izvoda. x(0) a(0) u0 b(0) a(1) x(1) b(1) u1 equals Šema komparatora u4 a(2) x(2) b(2) u2 a(3) x(3) u3 b(3)

38 Arhitektura (3) Strukturalni opis, kod Componenta definisana u ovoj
library ieee; use ieee.std_logic_1164.all; entity eq_comp4 is port ( a : in std_logic_vector(3 down_to 0); b : in std_logic_vector(3 down_to 0); equals: out std_logic ); end eq_comp4; architecture struct of eq_comp4 is signal x : std_logic_vector(0 to 3); begin u0: xnor_2 port map (a(0), b(0), x(0)); u1: xnor_2 port map (a(1), b(1), x(1)); u2: xnor_2 port map (a(2), b(2), x(2)); u3: xnor_2 port map (a(3), b(3), x(3)); u4: and_4 port map (x(0), x(1), x(2), x(3), equals ); end struct; Componenta definisana u ovoj biblioteci Mapiranje Strukturalni opis, kod

39 Arhitektura (4) opis ponašanja, paraleni
Upotreba logičkih izraza kojim se opisuje funkcija, tok podataka, (“concurrent behavioral description – dataflow”). ARCHITECTURE half_adder_b OF half_adder IS BEGIN carry <= enable AND (x AND y); result <= enable AND (x XOR y); END half_adder_b; izmedju begin i end _ ime arhitekture) opis ponašanja, paraleni

40 Arhitektura (5) opis ponašanja, serijski
U formi izraza koji se redosledno izvršavaju, (“sequential behavioral”). Ti izrazi mogu biti i konstrukcije kao što su “if”, “case”, “loop”, “for”, and “while”. Sve se odigrava unutar “process” sekvence, može biti više procesa. ARCHITECTURE half_adder_a OF half_adder IS BEGIN PROCESS (x, y, enable) IF enable = ‘1’ THEN result <= x XOR y; carry <= x AND y; ELSE carry <= ‘0’; result <= ‘0’; END IF; END PROCESS; END half_adder_a; opis ponašanja, serijski

41 Entity, sintaksa Sintaksa u širem smislu entity program_rom is
entity entity_name is   [generics]   [ports]   [declarations (types, constants, signals)]   [definitions (functions, procedures)] [begin statements] – ne upotrebljava se end [entity_name]; Sintaksa u širem smislu entity program_rom is port ( address : in bit_vector (14 downto 0) ; data : out bit_vector (7 downto 0) ; enable : in bit ); subtype instruction_byte is bit_vector (7 downto 0); type program is array (0 to 2**14-1) of instruction_byte; end entity program_rom; Samo type deklaracija, signal deklaracija i konstante, ne variable.

42 Architecture, sintaksa
Ime arhitekture Ime entiteta arch_body <= architecture id of entity_name is { block_decl_item } begin { concurrent_stmt } end [ architecture ] [ id ] ; Type, signal i constant deklaracije. Process i component izrazi

43 Architecture, primjer architecture primitive of and_or_inv is
signal and_a, and_b, or_a_b : bit; begin and_a: process is and_a <= a1 and a2; wait on a1, a2; end process; …… end architecture;

44 PROSTI VHDL PROGRAM Entitet i arhitektura ENTITET ARHITEKTURA
ENTITY nand_gate IS PORT ( a, b : IN BIT; c : OUT BIT; ); END nand_gate; ARCHITECTURE myarch OF nand_gate IS BEGIN c <= a NAND b; END myarch; ENTITET ARHITEKTURA

45 PROSTI VHDL PROGRAM POLU SABIRAČ Simbol, definisan VHDL kodom
ENTITY half_adder IS PORT( x, y, enable: IN BIT; carry, result: OUT BIT); END half_adder; ARCHITECTURE half_adder_b OF half_adder IS BEGIN carry <= enable AND (x AND y); result <= enable AND (x XOR y); END half_adder_b; Logička šema

46 Prosti VHDL Program Car Door Alarm con a b c d e f
f= (a or b or c or d or e) and con, alarm signal f je aktivan logicka “1”, ako je alarm ukljucen con=“1” i bilo koja od vrata otvorena (a ili b ili c ili d ili e = “1”. Ako koristimo klasicna kola iz 74HC…. Serije potrebna su nam vise od 3 cipa!!! U slucaju FPGA implementacije zauzece se oko 2% resursa 1nog cipa. con ENTITY alarm IS PORT ( a, b, c, d, e, con : IN BIT; f : OUT BIT ); END alarm; ARCHITECTURE myarch OF alarm IS BEGIN f <= (a or b or c or d or e) and con; END myarch; a b c d e f

47 Vježba 1: Unos, kompajliranje i simulacija VHDL programa
KORAK 1: Ponoviti “klasiku digitalnih kola” KORAK 2: Instalirati besplatni Quartus II program. KORAK 3: Postati familijaran sa softverom Quartus II KORAK 4 Kreirati i unijeti VHDL kod u text editoru (half_adder.vhd). KORAK 5: Provjeriti ispravnost koda datog u obliku VHDL programa (half_adder.vhd) i simulirati rad kola koristeći Altera Quartus II programski paket. KORAK 5: Izvršimo provjeru koda, kompalaciju i simulaciju kola. Kreirati simbol “half_adder” .

48 Vježba 1... Kod, kompalacija, simulacija, verifikacija (1) (2) (3) (4)
ENTITY half_adder IS PORT( x, y, enable: IN BIT; carry, result: OUT BIT); END half_adder; ARCHITECTURE half_adder_b OF half_adder IS BEGIN carry <= enable AND (x AND y); result <= enable AND (x XOR y); END half_adder_b; Kompalacija Simulacija Kod (1) (2) (3) (4) (5) enable, x, y, result, carry (1) (2) (3) (4) 0 x x (5) Verifikacija. Da li dobijamo na simulacionim dijagramima ono sto odgovara tabeli stanja?

49 Kompletni “Design Flow”
Kod, kompalacija, simulacija, verifikacija simulacije cip Na racunaru Konfiguracija, verifikacija rada, pomocu konfiguratora/programatora ili na razvojnoj ploci

50 “Design Flow” u nasem slucaju
Quartus + Drivers Periferije DC adapter USB kabal FPGA cip Cyclone II, EP2C70F896C Pročitati fajl: “Getting_Started_with_DE2-70_board.pdf” Pročitati fajl “DE2_70_User_manual_v109.pdf” Presnimiti odgovarajući CD Periferije

51 Altera DE2-70 Board Ploca koju mi koristimo i sadrzi:
· Altera Cyclone® II 2C70 FPGA device, cip EP2C70F896C · Altera Serial Configuration device - EPCS16 USB Blaster (on board) for programming and user API control; both JTAG and Active Serial (AS) programming modes are supported 2-Mbyte SSRAM · Two 32-Mbyte SDRAM · 8-Mbyte Flash memory · SD Card socket · 4 pushbutton switches · 18 toggle switches · 18 red user LEDs · 9 green user LEDs · 50-MHz oscillator and MHz oscillator for clock sources · 24-bit CD-quality audio CODEC with line-in, line-out, and microphone-in jacks · VGA DAC (10-bit high-speed triple DACs) with VGA-out connector · 2 TV Decoder (NTSC/PAL/SECAM) and TV-in connector · 10/100 Ethernet Controller with a connector · USB Host/Slave Controller with USB type A and type B connectors · RS-232 transceiver and 9-pin connector · PS/2 mouse/keyboard connector · IrDA transceiver · 1 SMA connector · Two 40-pin Expansion Headers with diode protection

52 Primjer konfiguracije
NI kolo, kod, simulacija, verifikacija, konfiguracija, provera rada ENTITY nand_gate IS PORT ( a, b : IN BIT; c : OUT BIT ); END nand_gate; ARCHITECTURE myarch OF nand_gate IS BEGIN c <= a NAND b; END myarch; Kompalacija Simulacija i ver. Konfiguracija Kod 5V KEY[0] PIN_T29 LEDR[0] PIN_AJ6 Provjera rada 5V KEY[1] PIN_T28 FPGA cip Cyclone II, EP2C70F896C

53 Vjezba 2 Projektujmo i realizujmo polusabirac “do kraja”
ENTITY half_adder IS PORT( x, y, enable: IN BIT; carry, result: OUT BIT); END half_adder; ARCHITECTURE half_adder_b OF half_adder IS BEGIN carry <= enable AND (x AND y); result <= enable AND (x XOR y); END half_adder_b; 5V SW[0] PIN_AA23 SW[1] PIN_AB26 SW[2] PIN_AB25 LEDR[0] PIN_AJ6 LEDR[1] PIN_ AK5 FPGA cip, Cyclone II, EP2C70F896C

54 Lab 1 onal onal ao a b l1 Alarm c d e LEDR(0..) Sw(0..)
DE2-70 FPGA pins Onal SW[0] PIN_AA23 a SW[1] PIN_AB26 b SW[2] PIN_AB25 c SW[3] PIN_AC27 d SW[4] PIN_AC26 e SW[5] PIN_AC24 11 LEDR[0] PIN_AJ6 ao LEDR[1] PIN_AK5 Hocemo da konstruisemo kolo (cip) koji je alarm otvorenosti vrata automobila Naime, izlaz “ao” koji je vezan na LEDR[1] na ploci se automatski aktivira ako su bilo koja od 5 vrata “a…e” otvorena (pri otvaranju se akticira odgowarajuci Sw[1]…Sw[5]. Normalno ako je “onal” SW[0] ukljucen, [to idicira LEDR[0]; Step1: Napravimo VHDL cod alarma Step2: Dodijelimo cip Step3: Dodijelimo pinove Step 4: Provjerimo funkcionalnost na ploci LEDR(0..) onal ENTITY alarm IS PORT ( a, b, c, d, e, onal : IN BIT; ao,l1 : OUT BIT ); END alarm; ARCHITECTURE myarch OF alarm IS BEGIN ao<= (a or b or c or d or e) and onal; l1<=not(not onal); END myarch; onal Vcc ao a Sw(0..) b l1 Alarm c d e

55 Strukturalni vs „bihevoralistički“ kod
Structural code za full adder library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity full_adder_vhdl_code is Port ( A : in STD_LOGIC; B : in STD_LOGIC; Cin : in STD_LOGIC; S : out STD_LOGIC; Cout : out STD_LOGIC); end full_adder_vhdl_code; architecture Behavioral of full_adder_vhdl_code is begin S <= A XOR B XOR Cin ; Cout <= (A AND B) OR (Cin AND A) OR (Cin AND B); end Behavioral;

56 8bits adder, kod, blok diagram
library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity full_adder_vhdl_code is Port ( A : in STD_LOGIC; B : in STD_LOGIC; Cin : in STD_LOGIC; S : out STD_LOGIC; Cout : out STD_LOGIC); end full_adder_vhdl_code; architecture Behavioral of full_adder_vhdl_code is begin S <= A XOR B XOR Cin ; Cout <= (A AND B) OR (Cin AND A) OR (Cin AND B); end Behavioral; Klasična realizacija Sve se moze “strpati” u VHDL cip i to da ne zauzima prostora Cin full_adder_vhdl_code simbol Cout S

57 Moduli Primjer deklaracije modula: Primjer “body-a”:
Modul je kolekcija često korištenih podataka, komponenti, funkcija, podprograma itd. Ako je objekt deklarisan i definisan u modulu on može biti korišten u svim VHDL programima. U modulima se preporučuje definisanje globalnih informacija, značajnih parametara kao i osnovnih komponenti u. Nesto slično kao “include” u C-u. Modul sadrži “deklarativni” i “body” dio. Ponekad može samo figurisati deklarativni dio. Primjer deklaracije modula: package MY_PACK is   type SPEED is (STOP, SLOW, MEDIUM, FAST);   component HA     port (I1, I2 : in bit; S, C : out bit);   end component;   constant DELAY_TIME : time;   function INT2BIT_VEC (INT_VALUE : integer)     return bit_vector; end MY_PACK; Primjer “body-a”: package body MY_PACK is   constant DELAY_TIME : time := 1.25 ns;   function INT2BIT_VEC (INT_VALUE : integer)     return bit_vector is   begin     -- sequential behavioral description (omitted here)   end INT2BIT_VEC; end MY_PACK;

58 Moduli, primjer k1 Fajl#2, trenutni projekat (mux4to1.vhd)
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY mux2to1 IS PORT (d0, d1, s :IN STD_LOGIC; f :OUT STD_LOGIC); END mux2to1; ARCHITECTURE LogicFunc OF mux2to1 IS BEGIN f <= (d0 AND (NOT s)) OR (d1 AND s); END LogicFunc; PACKAGE mux2to1_package IS COMPONENT mux2to1 PORT (d0, d1, s :IN STD_LOGIC; f :OUT STD_LOGIC); END COMPONENT; END mux2to1_package; LIBRARY ieee; USE ieee.std_logic_1164.all; USE work.mux2to1_package.all; ENTITY mux4to1 IS PORT(w0, w1, w2, w3, sel0, sel1 :IN STD_LOGIC; f :OUT STD_LOGIC); END mux4to1; ARCHITECTURE structure OF mux4to1 IS SIGNAL I1, I2 :STD_LOGIC; BEGIN u1:mux2to1 PORT MAP(w0, w1, sel0, I1); u2:mux2to1 PORT MAP(w2, w3, sel0, I2); u3:mux2to1 PORT MAP(I1, I2, sel1, f); END structure; Fajl#2, trenutni projekat (mux4to1.vhd) NAPOMENA: Pri kompajliranju mux4to1.vhd kao projekta u Qurtusu II, nije dovoljno ukključiti package sa USE work.mux2to1_package.all; već treba mux2to1.vhd dodati projektu sa Project-> Add/Remove files in Project… Fajl#1 u radnom direktrorijumu, mora biti kompajliran (mux2to1.vhd)

59 Biblioteke Sadrže modul ili kolekciju modula Biblioteke proizvodjača
Standard Package IEEE developed packages Altera Component packages Radne Biblioteke Work.xx.xx

60 Biblioteke... LIBRARY std; LIBRARY ieee;
Sadrži sledeće module (pakete): Standard (Types: Bit, Boolean, Integer, Real, and Time. All operator functions to support types) Textio (File operations) LIBRARY ieee; Sadrži sledeće module (pakete): std_logic_1164 (std_logic types & related functions) std_logic_arith (arithmetic functions std_logic_signed (signed arithmetic functions) std_logic_unsigned (unsigned arithmetic functions)

61 Biblioteke... Pozivanje biblioteke STD_LOGIC_1164:
Declaration: type std_logic is (           'U',    -- uninitialized           'X',    -- forcing unknown           '0',    -- forcing 0           '1',    -- forcing 1           'Z',    -- high impedance           'W',    -- weak unknown           'L',    -- weak 0           'H',    -- weak 1           '-' );  -- "don't care" Sintaksa upotrebe biblioteke: LIBRARY <any_name>; USE <any_name>.<package_name>.all; Pozivanje biblioteke LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY mux2to1 IS PORT( d0, d1, s :IN STD_LOGIC; f :OUT STD_LOGIC); END mux2to1; ARCHITECTURE behavior OF mux2to1 IS BEGIN WITH s SELECT f <= d0 WHEN '0', d1 WHEN OTHERS; END behavior;

62 Ideja sistem integracije
Veza izmedju hiararhijskih nivoa u projektu

63 Domaći 1 Projektovati 8bitni sabirač na nivou VHDL koda i šematskog prikaza. Osnovna komponenta je puni sabirač. A)Verifikaciju izvršiti po principu kod punog sabiraca, simbol punog sabiraca, graficki editor gdje se projektuje 8 bitni sabirač, simulacija. Simulirati razlicita stanja npr: 12+24, , itd... A) Verifikaciju izvršiti na strukturalnom nivou upotrebom „package“ koda.

64 Modeli kašnjenja VHDL koristi sledeći simulacioni ciklus.
Start Simulation Delay Update Signals Execute Processes End Simulation

65 Tipovi kašnjenja VHDL precizira vremenski period koji mora proći dok signali poprime nove vrijednosti. Precizirana kašnjenja mogu biti podijeljena u sledeće kategorije: Transport -- propagaciono kašnjenje Inertial – propagaciono kašnjenje i minimalna širina ulaznog impulsa. Delta – uobičajeno kašnjenje, ako nije definisano u kodu Input Output delay

66 Transport delay Mora biti eksplicitno definisano
Npr. riječ “TRANSPORT” mora biti upotrijebljena Signal prima novu vrijednost poslije definisanog perioda -- TRANSPORT delay example Output <= TRANSPORT NOT Input AFTER 10 ns; Input Output Input Output 10ms

67 Drugi impuls se invertuje poslije
Inertial delay Definiše propagaciono kašnjenje i ulaznu širinu impulsa, tj. ‘inerciju’ izlaza: Inertial delay je uobičajen (ugradjen u kompajleru) a REJECT je opcion: target <= [REJECT time_expression] INERTIAL waveform; Output <= NOT Input AFTER 10 ns; -- Propagation delay and minimum pulse width are 10ns Input Output Input Output Nema uticaja jer je 5ns Drugi impuls se invertuje poslije 10ns

68 Inertial delay... Primjer kada je ‘inercia’ manja od vremena propagacije Npr. Inverter sa propagation delay od 10ns koji ignoriše impulse kraće od 5ns PS: REJECT je opcija VHDL Output <= REJECT 5ns INERTIAL NOT Input AFTER 10ns; Input Output “klin”

69 Inertial vs Transport Inertial Delay Uobičajeno u VHDLu.
Guta “klinove”. Najcesce koristen u simultoru. Transport Delay Mora biti specificirano sa riječju TRANSPORT. Moze izbeci impulse bilo koje sirine. Dobro za delay blokove/sekcije. Glavna razlika: inertial delay je “default” delay,i.e to je  kasnjenje samih komponenti, dok je “transport” vezan za provodnike (zice-wire) .

70 Delta delay Uobičajeno kašnjenje
VHDL signal ne prima novu vrijednost trenutno Output <= NOT Input; -- Output assumes new value in one delta cycle -- Primjer realizacije RS flip flopa -- Uociti delta delay ENTITY rsff IS PORT (r, s: IN BIT; q, qn: INOUT BIT); END rsff; ARCHITECTURE behave OF rsff IS BEGIN q <= r NOR qn; qn <= s NOR q; END behave; Delta delay

71 NAND gate “okida” prvo:
Delta delay=0 Kako se ponaša C? A IN: 1->0 C B 1 AND gate “okida” prvo: IN: 1->0 A: 0->1 C: 0->1 B: 1->0 C: 1->0 NAND gate “okida” prvo: IN: 1->0 A: 0->1 B: 1->0 C: 0->0

72 Delta delay <> 0 Kako se ponaša C? A IN: 1->0 C B 1
Vremenski slijed Time Delta Event 0 ns IN: 1->0 eval INVERTER A: 0->1 eval NAND, AND B: 1->0 C: 0->1 eval AND C: 1->0 1 ns

73 Jos o kasnjenju… q<=r nor nq after 1ns; nq<=s nor q after 1ns;
q<=transport r nor nq after 1ns; nq<=transport s nor q after 1ns;

74 Tipovi podataka u VHDLu
VHDL je strogo “tipski” orjentisan jezik. Svaki objekat kao sto su konstante, promenljive, signali, portovi pridruzuju vrijednosti odredjenog tipa. Types Access Composite Array Record Scalar Integer Physical Real Enumerated

75 Skalarni tipovi podataka
Slično kao u Pascalu i C-u. Intidžer (Integer) - 2,147,483,647 do 2,147,483,647 (oblast definisanosti) Primjer pridruživanja ARCHITECTURE test_int OF test IS BEGIN PROCESS (X) VARIABLE a: INTEGER; a := 1; -- OK a := -1; -- OK a := 1.0; -- illegal END PROCESS; END test_int;

76 Skalarni tipovi ... Realni (Real) Primjer pridruživanja
-1.0E38 do 1.0E38 (oblast definisanosti) Primjer pridruživanja ARCHITECTURE test_real OF test IS BEGIN PROCESS (X) VARIABLE a: REAL; a := 1.3; -- OK a := -7.5; -- OK a := 1; -- illegal a := 1.7E13; -- OK a := 5.3 ns; -- illegal END PROCESS; END test_real;

77 Nenumerisani i fizički
Nenumerisani (bezimeni), Enumerated Korisnik definiše vrijednosti. Primjer: TYPE binary IS ( ON, OFF ); ... some statements ... ARCHITECTURE test_enum OF test IS BEGIN PROCESS (X) VARIABLE a: binary; a := ON; -- OK ... more statements ... a := OFF; -- OK END PROCESS; END test_enum;

78 Nenumerisani i fizički...
Fizički (physical) Zahtijeva pridruženje jedinica. Oblast mora biti definisana- Vrijeme je jedini predefinisani fizički tip u VHDLu. TYPE resistance IS RANGE 0 TO UNITS ohm; -- ohm Kohm = 1000 ohm; -- i.e. 1 K Mohm = 1000 kohm; -- i.e. 1 M END UNITS;

79 Kompozitni tipovi Nizovi (array)
Koristi grupu elemenata istog tipa u VHDL objektu. Ime, Indeks, Oblast definisanosti (zadata u kodu). Primjer: TYPE data_bus IS ARRAY(0 TO 31) OF BIT; 31 1 ...element indices... ...array values... VARIABLE X : data_bus; VARIABLE Y : BIT; Y := X(12); -- Y gets value of element at index 12

80 Kompozitni tipovi... Primjer sa DOWNTO (od većeg prema manjem) 15 1
TYPE reg_type IS ARRAY(15 DOWNTO 0) OF BIT; 1 15 ...element indices... ...array values... VARIABLE X : reg_type; VARIABLE Y : BIT; Y := X(4); -- Y gets value of element at index 4

81 Kompozitni tipovi ... Višedimenzioni vektor (matrica)
type MEMORY is array (0 to 7, 0 to 3) of bit; ...                         8×4 bit array constant ROM: MEMORY := (  ('0','0','0','0'),                           ('0','0','0','1'),                           ('0','0','1','0'),                           ('0','0','1','1'),                           ('0','1','0','0'),                           ('0','1','0','1'),                           ('0','1','1','0'),                           ('0','1','1','1')); variable DATA_BIT: bit; access to one element: DATA_BIT := ROM (5,3);                     

82 Kompozitni tipovi... Struktura (Records)
Grupa elemenata različitog karaktera u jednom objektu Elementi su indeksirani kroz ime polja Primjer: TYPE binary IS ( ON, OFF ); TYPE switch_info IS RECORD status : BINARY; IDnumber : INTEGER; END RECORD; VARIABLE switch : switch_info; switch.status := ON; -- status of the switch switch.IDnumber := 30; -- e.g. number of the switch

83 Pristupni tip Access Slično kao “pointer”
Omogućava dinamičku alokaciju memorije Pogodan za implemenatciju “stakova”, fifo: type CELL;                       --    incomplete type type LINK is access CELL;                -- access type type CELL is          --- full type declaration for CELL   record     VALUE : integer;     NEXTP : LINK;   end; variable HEAD, TEMP : LINK;         -- pointer to CELL TEMP := new CELL'(0, null);   -- new data object with initial values for I in 1 to 5 loop   HEAD := new CELL;               --additional objects   HEAD.VALUE := I;          --access to record element   HEAD.NEXTP := TEMP;   TEMP := HEAD; end loop; deallocate(TEMP);                   -- free the memory -- allocate new memory new CELL;                                -- new object new CELL'(I, TEMP);     ... with initial values

84 Pod-tipovi Subtypes Omogućava korisniku da definiše sopstvena ograničenja. Može sadržavati definisane tipove ali u modifikovanom opsegu SUBTYPE name IS base_type RANGE <user range>; SUBTYPE first_ten IS INTEGER RANGE 0 TO 9;

85 VHDL objekti VHDL objekti Konstante Promenljive Signali Fajlovi
Objekti definisani u “package” su dostupni svim VHDL programima koji ga koriste. Objekti definisani u entitetima su dostupni svim arhitekturama koje koriste dati entitet. Objekti deklarisani u arhitekturi su dostupni svim naredbama u arhitekturi. Objekti deklarisani u procesu su dostupni samo unutar njega.

86 Konstante Ime pridruženo za specifičnu vrijednost tipa
Omogućava jednostavnije izmjene i dopune CONSTANT constant_name : type_name [:= value]; CONSTANT PI : REAL := 3.14; CONSTANT SPEED : INTEGER;

87 Promjenljive Konvencionalni mehanizam za lokalne promenljive
Npr: petlje, brojači Definišu se samo unutar procesa ili drugih blokova (funkcija, procedura) Sve varijalbe uzimaju vrijednost trenutno Nema delta ili pre-definisanog kašnjenja VARIABLE variable_name : type_name [:= value]; VARIABLE opcode : BIT_VECTOR(3 DOWNTO 0) := "0000"; VARIABLE freq : INTEGER;

88 Signali Služe za komunikaciju izmedju VHDL komponenti
Realni fizički signali (žice) Podrazumijevaju kašnjenje pri pridruživanju. Glavna razlika izmedju promenljivih i signala je pridruženo kašnjenje. SIGNAL signal_name : type_name [:= value]; SIGNAL brdy : BIT; brdy <= ‘0’ AFTER 5ns, ‘1’ AFTER 10ns;

89 Promenljive vs Signal Paznja := i <= Isto kolo
signal A, B, C, X, Y : integer; begin   process (A, B, C)   variable M, N : integer;   begin     M := A;     N := B;     X <= M + N;     M := C;     Y <= M + N;   end process; signal A, B, C, Y, Z : integer; signal M, N : integer; begin   process (A, B, C, M, N)   begin     M <= A;     N <= B;     X <= M + N;     M <= C;     Y <= M + N; end process; Paznja := i <= Isto kolo ENTITY var_sig_var IS PORT( a, b, c: IN BIT; out_4 : OUT BIT); END var_sig_var; ARCHITECTURE var_ex OF var_sig_var IS BEGIN PROCESS (a, b, c) VARIABLE out_3 : BIT; out_3 := a NAND b; out_4 <= out_3 XOR c; END PROCESS; END var_ex; ENTITY var_sig_sig IS PORT( a, b, c: IN BIT; out_2 : OUT BIT); END var_sig_sig; ARCHITECTURE sig_ex OF var_sig_sig IS signal out_1: BIT; BEGIN PROCESS (a, b, c, out_1) out_1 <= a NAND b; out_2 <= out_1 XOR c; END PROCESS; END sig_ex;

90 Promenljive vs Signal END var_ex; -- architecture #3 by signal out_2
-- Ilustration of signals and variables -- one ENTITY ENTITY var_sig_var IS PORT( a, b, c: IN BIT; out_1 : OUT BIT); END var_sig_var; -- 3 architectures -- architecture #1 without variables and signals ARCHITECTURE ex OF var_sig_var IS BEGIN PROCESS (a, b, c) out_1 <= (a NAND b) XOR c; END PROCESS; END ex; -- architecture #2 by variable out_2 ARCHITECTURE var_ex OF var_sig_var IS VARIABLE out_2 : BIT; -- variable out_2 := a NAND b; -- assign mid result to variable out_1 <= out_2 XOR c; -- assign fin result to signal END var_ex; -- architecture #3 by signal out_2 ARCHITECTURE sig_ex OF var_sig_var IS signal out_2: BIT; -- signal BEGIN PROCESS (a, b, c, out_2) out_2 <= a NAND b; -- assign mid result to signal out_1 <= out_2 XOR c; -- assign fin result to signal END PROCESS; END sig_ex; -- configuration, chose architecture to assign to entity CONFIGURATION config OF var_sig_var IS FOR ex END FOR; END config;

91 Promenljive vs Signal Variable se upotrebljavaju kada hocete da upotrebljavte “serijski kod”, za razliku od “parallelnog coda”. Variable, samo u processu pridruzivanje nije paralelno. Na primjer: signal a,b : std_logic_vector(0 to 4); process (CLK) begin if (rising_edge(clk)) then a <= '11111'; b <= a; end if; end process; stavlja b prije starta processa, ne '11111'. Sa druge strane kod variable var : std_logic_vector(0 to 4); var := '11111'; a <= var; b <= var; stavlja '11111' u a i b.

92 Atrubuti Povezano sa dogadjajem, tj stanjem.
Generalna forma upotrebe atributa : VHDL ime više predefinisanih atributa: name'attribute_identifier -- read as “tick” X’delayed(T) Signal koji uzima iste vrijednosti kao X samo pomjeren u vremenu za T X’stable(T) Logi čki signal koji je istinit ako u intervalu T signal X bio stabilan X’quiet(T) Logi čki signal koji je istinit ako u intervalu T nije bilo transakcija signala X X’transaction Signal koji mijenja vrijednost iz ‘0’- ‘1’ i obrnuto svaki put kada se dogodi transakcija signala X

93 Atributi... Istinit ako je došlo do doga đaja na signaluX u X’event
VHDL podržava nekoliko tipova atributa. Vezani su za signale, promjenljive i podatke tipa „type“. Označavaju se sa (‘) iza čega slijedi naziv atributa. Sledeća tabela pokazuje nekoliko attributa vezanih za signale. Istinit ako je došlo do doga đaja na signaluX u X’event teku ćem simulacionm ciklusu X’active Istinit ako je došlo do transakcije signala X u teku ćem simulacionom ciklusu X’last_event Vrijeme poslednjeg dogadjaja X’last_active Vrijeme posledenje transakcije X’last_value Vrijednost signala X prije poslednjeg dogadjaja

94 Primjer Atributi entity attr_ex is port (B,C : in bit; Z : out bit );
end attr_ex; architecture test of attr_ex is signal A, C_delayed5 : bit; begin A <= B and C; C_delayed5 <= A'delayed(5 ns); Z<=C_delayed5; end test; C B A 5ns Z

95 qsim_state predefinisan tip sa parametrima 0, 1, X, i Z
Atributi, primjer Kako se atributi mogu koristiti u primjeru 8-bitnog registra. Specifikacija : Trigger na uzlaznoj ivici Lečovanje samo kada je enable high Data setup vrijeme x_setup Propagaciono kašnjenje prop_delay ENTITY 8_bit_reg IS GENERIC (x_setup, prop_delay : TIME); PORT(enable, clk : IN qsim_state; a : IN qsim_state_vector(7 DOWNTO 0); b : OUT qsim_state_vector(7 DOWNTO 0)); END 8_bit_reg; qsim_state predefinisan tip sa parametrima 0, 1, X, i Z

96 Kada se signal ustabili
Primjer atributi… ARCHITECTURE first_attempt OF 8_bit_reg IS BEGIN PROCESS (clk) IF (enable = '1') AND a'STABLE(x_setup) AND (clk = '1') THEN b <= a AFTER prop_delay; END IF; END PROCESS; END first_attempt; Kada se signal ustabili ARCHITECTURE behavior OF 8_bit_reg IS BEGIN PROCESS (clk) IF (enable = '1') AND a'STABLE(x_setup) AND (clk = '1') AND (clk'LAST_VALUE = '0') THEN b <= a AFTER delay; END IF; END PROCESS; END behavior;

97 DFF DFF sa RESETOM, primjer atributa
LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY dff IS PORT (d, clk, rst: IN STD_LOGIC; q: OUT STD_LOGIC); END dff; ARCHITECTURE behavior OF dff IS BEGIN PROCESS (clk, rst) IF (rst='1') THEN q <= '0'; ELSIF (clk'EVENT AND clk='1') THEN -- atribut q <= d; END IF; END PROCESS; END behavior;

98 GENERIC library ieee; use ieee.std_logic_1164.all;
Promjenljiva koja je deklarisana korišćenjem ključne riječi GENERIC predstavlja konstantu koja se može samo čitati. Ova riječ se upotrebljava najčešće kada je potrebno projektovati dizajn čiji se neki od parametara mogu mijenjati (npr. dubina i širina memorije, dužina registra i sl.). Za dizajnera je mnogo jednostavnije da napravi komponentu koja se u daljem radu može koristiti nezavisno od parametara kakvi su već navedeni. · Primjer: library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity signed_adder is generic (DATA_WIDTH : natural := 8); port ( a : in signed ((DATA_WIDTH-1) downto 0); b : in signed ((DATA_WIDTH-1) downto 0); result : out signed ((DATA_WIDTH-1) downto 0) ); end entity;

99 Primjer Generic In1 In2 Output Simbol
entity Gen_Gates is generic (Delay : Time := 10 ns); port (In1, In2 : in bit; Output : out bit); end Gen_Gates; architecture Gates of Gen_Gates is begin Output <= In1 or In2 after Delay; end Gates; In1 In2 Output Parametar se mijenja lako Simbol

100 VHDL Operatori Logički, relacioni i aritmetički
Logički “and”, “or”, ... Relacioni se upotrebljavaju za komparaciju Arithmetički za matematičke operacije

101 VHDL Operatori, relacioni
Vraćaju boolean vrijednosti Upotrebljavaju se sa if-then-else, do,... za kontrolu toka programa.

102 VHDL Operatori, arithmetički
Za tipove integer, real,.... Ne primenjuju se za vektore

103 NAČINI MODELOVANJA (kodiranja)
VHDL kod može biti paralelan (concurrent), sekvencijalan i strukturalan. Ova podjela je vrlo bitna jer, omogućava bolje razumijevanje kakve se komande koriste gdje, kao i posledice primjene jednog odnosno drugog načina.

104 PARALELNO kodiranje WHEN / ELSE: assignment WHEN condition ELSE ...;
· WITH / SELECT / WHEN: WITH identifier SELECT assignment WHEN value, · Primjer: With WHEN/ELSE outp <= "000" WHEN (inp='0' OR reset='1') ELSE "001" WHEN ctl='1' ELSE "010"; ---- With WITH/SELECT/WHEN WITH control SELECT output <= "000" WHEN reset, "111" WHEN set, UNAFFECTED WHEN OTHERS;

105 Sekvencijalno modelovanje
Processes If-then-else Case For While

106 Process Sekvencijalno izvršenje naredbi
Sintaksa: Opciono label, ključna riječ “PROCESS”, i sensitivna lista

107 Process… Izvršava se kontinualno
Aktivira se kada se neki od signala u sensitivnoj listi promijeni, ili ima neki “event”. Sensitivna lista mora biti kompletna da bi se proces uspješno odvijao. A complete sensitivity list is one that contains every signal who’s value is read within the process

108 IF “if” testira uslov, i izvršava različit set komandi u zavisnosti od rezultata. Dvije forme if-then i the if-then-else

109 IF-ELSIF IF-ELSEIF omogućava testiranje serije uslova, i prvi uslov koji je tačan uzrokovaće izvršenje naradbi koje slijede iza njega. Tok se nastavlja poslije END IF riječi Redosled uslova je značajan Može biti više njih tačnih ali prvi ima prioritet.

110 IF-ELSIF Primjer Ako je x= “0000”, tada su oba seta uslova zadovoljena. Kako je x = “0000” testirano prvo, z će poprimiti vrijednost a. IF-ELSIF ima ugradjeni prioritet.

111 CASE CASE uzima u obzir sve moguće vrijednosti koje jedan izraz može da poprimi i izvršava naredbe specificirane za aktuelnu vrijednost.

112 CASE... Vrijednosti ne mogu biti specificirane više puta!
Moraju biti specificirane eksplicitno ili sa “others”

113 FOR Petlja Standardna For petlja

114 WHILE Ovo je petlja koja se ponavlja sve do onog momenta do koga je zadovoljen neki uslov. Sintaksa: [label:] WHILE condition LOOP (sequential statements) END LOOP [label]; · Primjer: WHILE (i < 10) LOOP WAIT UNTIL clk'EVENT AND clk='1'; (other statements) END LOOP;

115 STRUKTURALNO KODIRANJE
Strukturno modelovanje omogućava manuelnu konekciju više komponenata u funkcionalnu cjelinu upotebom signala za povezivanje. Sve komponente koje se koriste moraju prethodno biti definisane svojim entitetom i arhitekturom što može biti u posebnim ili zajedničkom fajlu. Strukturno modelovanje je slično sastavljanju šeme složenog kola iz komponenti.

116 STRUKTURALNO KODIRANJE...
COMPONENT Sintaksa deklaracije komponente: COMPONENT component_name IS PORT ( port_name : signal_mode signal_type; port_name : signal_mode signal_type; ...); END COMPONENT; - Sintaksa povezivanja komponente: label: component_name PORT MAP (port_list);

117 STRUKTURALNO KODIRANJE...
· Primer deklaracije PACKAGE koji sadrži komponenate: ----- File my_components.vhd: LIBRARY ieee; USE ieee.std_logic_1164.all; PACKAGE my_components IS inverter: COMPONENT inverter IS PORT (a: IN STD_LOGIC; b: OUT STD_LOGIC); END COMPONENT; input nand: --- COMPONENT nand_2 IS PORT (a, b: IN STD_LOGIC; c: OUT STD_LOGIC); input nand: --- COMPONENT nand_3 IS PORT (a, b, c: IN STD_LOGIC; d: OUT STD_LOGIC); END my_components; Primer projekta u kome će se koristiti prethodno kreirani package sa datim komponentama: ----- File project.vhd: LIBRARY ieee; USE ieee.std_logic_1164.all; USE work.my_components.all; ENTITY project IS PORT ( a, b, c, d: IN STD_LOGIC; x, y: OUT STD_LOGIC); END project; ARCHITECTURE structural OF project IS SIGNAL w: STD_LOGIC; BEGIN U1: inverter PORT MAP (b, w); U2: nand_2 PORT MAP (a, b, x); U3: nand_3 PORT MAP (w, c, d, y); END structural;

118 Vjezba 3: 3 to 8 decoder Sekvencijalno kodiranje Paralelno kodiranje
case Paralelno kodiranje With WHEN/ELSE library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity decoder3x8 is Port ( i : in  STD_LOGIC_VECTOR (2 downto 0); y : out  STD_LOGIC_VECTOR (7 downto 0)); end decoder3x8; architecture Behavioral of decoder3x8 is begin process(i) begin case i is when "111" => y<=" "; when "110" => y<=" "; when "101" => y<=" "; when "100" => y<=" "; when "011" => y<=" "; when "010" => y<=" "; when "001" => y<=" "; when "000" => y<=" "; when others => null; end case; end process; end Behavioral; library IEEE; use IEEE.STD_LOGIC_1164.all; entity decoder3_8 is      port(          din : in STD_LOGIC_VECTOR(2 downto 0);          dout : out STD_LOGIC_VECTOR(7 downto 0)          ); end decoder3_8; architecture decoder3_8_arc of decoder3_8 is begin     dout <= (" ") when (din="000") else             (" ") when (din="001") else             (" ") when (din="010") else             (" ") when (din="011") else             (" ") when (din="100") else             (" ") when (din="101") else             (" ") when (din="110") else             (" ") ; end decoder3_8_arc;

119 Vjezba 4: BCD to 7 segment Konstruisati BCD-SEDMOSEGMENTNI dekoder. Displej može prikazivati i brojeve (0 do 9) i slova (A, B, C, D, E i F). Displej je aktivan logičkom 1. Prikazati rezultat simulacije za BCD=“0111“, „7“. Upotribijeti „case“ i „if elesif“. Priložiti kod i simulacioni dijagram.

120 Vjezba 5: Brojač koji koristi generic i atribute
counter Library Ieee; Use ieee.std_logic_1164.all; Use Ieee.std_logic_arith.all; Use ieee.std_logic_unsigned.all; entity counter is generic(word_length : integer:=4); port( clk, en, rst: in std_logic; output : out std_logic_vector(word_length-1 downto 0) ); end counter; architecture counter_behav of counter is signal counting : std_logic_vector(word_length-1 downto 0); begin process(clk, rst, en) if rst='1' then output<=(others=>'0'); counting<=(others=>'0'); elsif clk'event and clk='1' then if en='1' then output<=counting; counting<=counting+'1'; end if; end process; end architecture;

121 ... -------------------------package---------------------------
Library Ieee; Use ieee.std_logic_1164.all; Use Ieee.std_logic_arith.all; Use ieee.std_logic_unsigned.all; package counter_package is component counter generic(word_length : integer:=16); port( clk, en, rst: in std_logic; output : out std_logic_vector(word_length-1 downto 0) ); end component; end package counter_package;

122 Vjezba 6: 8bitni Shift Registar
library IEEE; use IEEE.std_logic_1164.all; entity SHIFTR is port ( CLK, RSTn, SI : in std_logic; SO : out std_logic); end SHIFTR; architecture RTL of SHIFTR is signal FF8 : std_logic_vector(7 downto 0); begin posedge : process (RSTn, CLK) if (RSTn = '0') then FF8 <= (FF8'range => '0'); elsif (CLK'event and CLK = '1') then FF8 <= SI & FF8(FF8'length-1 downto 1); end if; nd process; SO <= FF8(0); end RTL; Bez flip flopa Sematski prikaz Kod

123 Lab 2: BCD to 7segment, divider, counter, selector
Grupa 1: Projektovati Divider sa generickim N, simulirati njegov rad. Grupa 2: Projektovati SELECTOR i simulirati njegov rad. Grupa 3: Projektovati 4 bitni BCD UP/DOWN counter i simulirati njegov rad. Grupa 4: Projektovati BCD to 7seg decoder i simulirati njegov rad. Svi: Koristeci projektovane komponente, realizovati sklop koji broji od 0 do F (HEX0) sa razlicitim brzinama (SEL), gore ili dolje (UP/DOWN) na DE2-70 ploci. Demonstrirati njegov rad

124 Domaći #2 D0 D1 D2 D3 not Clk=1s J1 slika1
Simulirati rad ring brojaca koji se pogoni klokom od 1s (J1 zatvoren, slika 1). Simulirati rad Jonson brojaca koji se pogoni klokom od 1s (J1 otvoren, slika1) Kolo realizovati na DE2-70 ploci. J1 se realizuje digitalno (slika 2). D0 D1 D2 D3 not Clk=1s slika2 J1 1 2 3 slika1

125 Podprogrami U VHDLu postoje dva tipa podprograma: procedure i funkcije. Moraju imati deklaraciju i definiciju. Slicno kao u Cu. Omogucavaju preglednost programa, medjutim treba biti pazljiv pri radu sa njima. Ne zaboravite ovo je hardverski jezik.

126 Pod-programi Peomjenljive unutar podprograma su lokalne.
Validne su samo za vrijeme izvršavanja pod-programa Sadrže sekvencijalne naredbe Funkcije: -vraćaju jedan argument -svi parametri su ulazni function vector2int(vec : bit_vector) return integer is variable tmp : integer; begin tmp := 0; for i in vec’range loop if vec(i) = ‘1’ then tmp := tmp+1; end if; end loop; return tmp; end vector2int; function increment(val: bit_vector(7 downto 0)) return bit_vector(7 downto 0);

127 Pod-programi... Procedure Ulazno-izlaznog tipa,
Sadrže više ulazno-izlaznih parametara procedure vector2int(signal vec : in bit_vector; variable int: inout integer) is begin int := 0; for i in vec’range loop if vec(i) = ‘1’ then int := int+1; end if; end loop; end vector2int; Ulazno-izlaznog tipa, moze biti inout ili out procedure count_256( variable init: in integer; variable compteur:out word_32 )

128 Pod-programi... Poziv procedure Myproc1(my_signal,my_variable,1);
Myproc1(formal1 => ‘1’, formal2=>”111” ,formal3 =>1); Myprocedure3; --No parameters

129 Pod-programi... Primjer pozivanja funkcije za konverziju tipa
Ugradjenja u

130 Vjezba 7: Pod-programi... -- ilustration of function and procedure
libraryieee; use ieee.std_logic_1164.all; Entity comp_by_func_by_proc is port ( X,Y : in bit; Z1,Z2 : out bit ); end entity; architecturebehav of comp_by_func_by_proc is -- comparator by function function COMP_BITS(A, B: in bit) return bit is begin if A=B then return '1'; else return '0'; end if; end COMP_BITS; -- comparator by procedure procedure COMP_BITS(signal A, B: bit; signal C: out bit) is if A=B then C<='1'; else C<='0'; end if; end procedure; -- begin of architecture Z1<=COMP_BITS(X,Y); -- call architecture COMP_BITS(X,Y,Z2); -- call procedure end architecture; Projektovati VHDL kod komparatora koristeći funkciju: function COMP_BITS(A, B: in bit) return bit is ……. end COMP_BITS; funkcija vraća logičku “1” ako je A>B. U ostalim slucajevima “0”. Projektovati isti kod koristeci proceduru procedure COMP_BITS(signal A, B: bit; signal C: out bit) is

131 Vjezba 8: Pod-programi... --- DFF preko procedure
entity flop is port(clk: in bit; data_in: in bit_vector(7 downto 0); data_out, data_out_bar: out bit_vector(7 downto 0)); end flop; architecture design of flop is procedure dff(signal d: bit_vector; signal clk: bit; signal q, q_bar: out bit_vector) is begin if clk'event and clk = '1' then q <= d; q_bar <= not(d); end if; end procedure; dff(data_in, clk, data_out,data_out_bar); end design;

132 Funkcija množenja definisana u ovoj biblioteci
Vjezba 9: Pod-programi... Uvježbavanje poziva funkcije iz ugradjenih biblioteka na primjeru množača package std_logic_unsigned is function "+"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function "-"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function "*"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function "<"(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN; end std_logic_unsigned; LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL; ENTITY design_one IS PORT (a,b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); f : OUT STD_LOGIC_VECTOR (15 DOWNTO 0)); END design_one; ARCHITECTURE add_design OF design_one IS BEGIN f <= a * b; END add_design; Funkcija množenja definisana u ovoj biblioteci a[7..0] a*b c[15..0] b[7..0]

133 Domaći #3 a) Projektovati VHDL kod MAX_MIN koristeći funkciju: function MAX_MIN(A, B,C: in integer; D: in bit, ) return integer is ……. end MAX_MIN; Aka je D=0 funkcija vraca maximalnu vrijednost (najveci od) ulaznih parametara A,B,C, ako je D=1 funkcija vraca minimalnu vrijednost (najmanji od) ulaznih parametara . b) Realizovati isti kod koristeći proceduru. Priložiti kod i simulacione dijagrame. c) Napraviti package my_pack koji pored ostalog sadrzi funkciju function vector2int. Iz drugog *.vhd programa pozvati datu funkciju i ilustrovati njen rad pomoću simulacionih dijagrama.

134 Domaći #3… d) Projektovati VHDL kod koji će polu-sabirač realizovati pomoću funkcije ADD_BITS(X,Y) tako da se izlazni signali mogu izraziti preko ulaznih u formi. RESULT<=ADD_BITS(X,Y); CARRY<=X AND Y; Funkcija ADD_BITS ima oblik function ADD_BITS(A, B: in bit) return bit is begin return(A XOR B) end ADD_BITS; Isti kod realizovati preko procedure ADD_BITS procedure ADD_BITS(signal A, B: bit; signal q: out bit) is q<=A XOR B; end procedure; #3 State Machine Detektor binarne sekvence “ ” Priložiti VHDL kog i simulacione dijagrame.

135 Domaći #4… State Machine: Procitati (lektira):
Zadatak: Projektovati i simulirati kod “detektora binarne sekvence “ ” . Priložiti VHDL kog i simulacione dijagrame.

136 Vjezba 8 Debauncing problem OK! Contact debaunce period

137 Vjezba 8 Projektovati debauncer kolo i izabrati contact debaunce period na 100ms (ili po potrebi) Projektovati kolo monostabilnog multivibratora stepenisnog automata Contact in Clock Contact out Debaunce active low/high SW0, SW1, speed Vo LEDR0 Debauncer Monostabil KEY0 15s,30s,60s,90s Clock 0.3s

138 Lab 3 Pravi Alarm!!! 0.3s

139 Piprema za kol ,draft 1. Prosti alarm, bez zadrska
2. Prosti sifrarnik. 3. Alarm sa zadrskom. 4. Sifrarnik sa kaznanjavanjem. 5. cetvrobitni sabirac, 2x4, sa display. 4. selekcija brzine blinka na 1 led 5. 3 to 8 detector sa blinkom 6. Lab 2 7. Domaci 2 ring 8. Domaci 2 johnson 9. Stepenisni automat sa debauncingom 10 Prosta muzika 11 12. Semafor 13. Realni Alarm. 3-11, Select problems, 1.2 ocena nize


Download ppt "Postdiplomske studije, smjer elektronika, Prof dr Radovan Stojanović"

Similar presentations


Ads by Google