[LNIV Xilinx](index.html) | Vivado | [blokovni diagram](vivado-blok.htm) | [komponente IP](vivado-ip.htm) | [AXI IP](vivado-axi.htm) | [SW](sw.htm) # Osnove programa Xilinx Vivado Predstavili bomo najbolj osnovne korake idelave RTL projekta v programu Xilinx Vivado 2019. Projekt se nahaja v mapi, ki vsebuje datoteko z opisom projekta __projekt.xpr__ in podmape, med katerimi so: * projekt.runs, mapa z rezultati sinteze (synth_1) in implementacije (impl_1) * projekt.sdk, mapa procesorskega projekta (orodje SDK) * projekt.sim, mapa s simulacijskimi datotekami * projekt.srcs, mapa z izvornimi datotekami (sources_1) in omejitvami (constrs_1) ## Nov projekt V programu Vivado izberi **Create Project**, določi ime, npr. `project_add` in lokacijo `C:/DIVS/Andrej`. Pri izbiri imena in lokacije ne uporabljaj šumnikov in presledkov! Klikni Next in pusti privzeto izbiro RTL Project. Izpusti dodajanje datotek (3x klikni Next), na koncu pa določi ciljno integrirano vezje **Default Part** ali ploščo (Boards). ### Nova datoteka z opisom vezja V levem oknu PROJECT MANAGER klikni na **Add Sources**, nato pa izberi Add or create design sources, klikni na Create File, izberi File type: `Verilog` ali `VHDL` in vnesi ime, npr. `add1`. Program bo naredil novo datoteko v podmapi: ```projekt.srcs/sources_1/new```. **Nasvet** Če vsebuje projekt več izvornih datotek, je dobro imeti nadzor nad lokacijo datotek na disku. Npr. v projektni mapi v Windowsih naredimo podmapo ```hdl``` in pri izdelavi novih datotek določimo to podmapo (File location). Klikni OK in dvakrat Next Po zadnji potrditvi se odpre tabela v kateri določi ime in zunanje priključke vezja: ![](./img/Vivado_add1.png) Na podlagi vnešenih podatkov program naredi datoteko z ogrodjem opisa vezja v izbranem jeziku. ## Dodajanje obstoječih datotek Mapo z obstoječimi VHDL ali Verilog datotekami najprej prenesi v projektno mapo, najbolje kar znotraj podmape projekt.srcs (to naredimo v operacijskem sistemu). Nato izberi **Add Sources** in gumb **Add Files** ali pa **Add Directories**. Če dodajamo posamezne datoteke, preverimo da ni kljukice pod Copy sources into project, sicer bo Vivado naredil še eno kopijo datotek in bomo lahko popravljali napačne! ## Delo s projektom V programu Vivado uporabljamo pri delu s projektom naslednja okna: * Flow Navigator na levi v obliki menija z glavnimi koraki izdelave in prevajanja projekta (ctrl+Q) * Sources prikazuje hierarhijo izvornih datotek * Properties prikazuje in omogoča nastavitve izbrane datoteke ali elementa blokovnega diagrama * Poročila se nahajajo v spodnjem oknu z več zavihki, med katerimi je tudi konzola za ukaze Tcl ![](./img/Vivado_navigator.png) Izvorna datoteka, ki smo jo naredili s programom Vivado ali pa vključili kot Design Source se pojavi v oknu **Sources** pod Design Sources in pod Simulation Sources. Datoteko odpri z dvoklikom in dokončaj opis vezja v jeziku Verilog: ```verilog module add1( input [15:0] a,b, input [1:0] sel, output reg [15:0] r ); always @* begin case (sel) 2'b00: r = a; 2'b00: r = a+1; 2'b00: r = a+b; default: r = a-b; endcase end endmodule ``` Ali v strojno-opisnem jeziku VHDL: ```vhdl library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity add1 is Port ( a,b : in STD_LOGIC_VECTOR (15 downto 0); sel : in STD_LOGIC_VECTOR (1 downto 0); r : out STD_LOGIC_VECTOR (15 downto 0)); end add1; architecture Behavioral of add1 is signal a1,b1,r1: unsigned(15 downto 0); begin a1 <= unsigned(a); b1 <= unsigned(b); r1 <= a1 when sel="00" else a1+1 when sel="01" else a1+b1 when sel="10" else a1-b1; r <= std_logic_vector(r1); end Behavioral; ``` Orodje Vivado že med tipkanjem kode opozarja na nekatere sintaktične napake in obarva ali podčrta ustrezno vrstico ter izpiše sporočilo, če se z miško zadržimo nad označenim delom. Ko zaključimo z opisom kode, shranimo datoteko in izvedemo analizo, prevajanje ali simulacijo. ## Analiza vezja Analiza vezja omogoča grafičen pregled gradnikov, ki nastanejo od prevajanju opisa vezja. Postopek analize in izdelave sheme na nivoju registrov poženemo z **Open Elaborated Design** iz menija na levi. Program bo začel izvajati sintezo vezja in prikazal shemo ali pa sporočilo o napakah, ki se pojavijo tudi v spodnjem oknu v zavihku *Messages*. Na shemi iz opisa našega vezja vidimo zunanje priključke, seštevalnike in izbiralnike: ![](./img/Vivado_rtl1.png) ## Simulacija Simulacijo izvedemo z Run Simulation, Run Behavioral Simulation. Simulator prevede vezje in če ni napak naredi izvršilno datoteko. Lahko se zgodi, da bo antivirusni program onemogočil izvajanje simulacije - v tem primeru definirajmo izjemo za skeniranje mape s projektom. Enostavno simulacijo izvedemo tako, da nastavimo stimulatorje na vhodne signale, izvedemo simulacijo za nek čas, spremenimo stimulatorje, ponovno izvedemo... S privzetimi nastavitvami v Vivadu se simulacija avtomatsko izvede za 1000 ns in najbolje, da se najprej postavimo na začetek: Run > Restart. V simulatorju z desnim klikom na vhodni signal nastavimo vrednost signala z izbiro Force Constant. Za uro izberemo Force Clock in nastavimo kot npr.: * Leading edge value: 0 * Trailing edge value: 1 * Period: 200 ns Po opravljenih nastavitvah poženemo simulator za določen čas: Run > Run For in opazujemo izhode. ![](./img/Vivado_sim.png) Prikaz oblikujemo tako, da izberemo enega ali več signalov, z desnim klikom izberemo Radix in vrsto (Binary, Unsigned, Signed...). Vse nastavitve so vidne tudi v spodnjem oknu v zavihku *Tcl Console*. Namesto klikanja z miško lahko v konzoli nastavljamo signale z ukazi. Poglejmo primer ukazov, ki nastavijo signal *sel* na dvojiško vrednost 0, signal *a* na desetiško vrednost 9 in izvedejo simulacijo za 200 ns: ```tcl add_force sel 0 add_force a -radix dec 9 run 200 ns ``` Če spremenimo datoteko VHDL je potrebno simulator ponovno zagnati z Run > Relaunch simulation, ki povzroči ponovno prevajanje vezja. V primeru napak preverimo sporočila v zavihku *Tcl Console*. Bolj obsežno simulacijo naredimo s testno strukturo v jeziku VHDL, ki jo moramo napisati sami ali uporabiti kakšen program za grafično izdelavo testne strukture, kot je: [grafTB](http://lniv.fe.uni-lj.si/grafTB.htm) ali avtomatično izdelavo ogrodja testne strukture, npr. [vhdl.lapinoo.net](http://vhdl.lapinoo.net/testbench/). Datoteko s testno strukturo dodamo v projekt kot simulacijsko datoteko: **Add Sources**, Add or create simulation sources in izvedemo simulacijo. ## Pakiranje IP Orodje **Vivado** omogoča grafično izdelavo digitalnega sistema iz komponent intelektualne lastnine (IP). Projket z opisom vezja v jeziku VHDL lahko preprosto pretvorimo (zapakiramo) v komponento IP z izbiro iz menuja *Tools > Create and Package NEW IP*, klikni *Next* in izbiro *Package your current project*. ![](./img/Vivado_add_ip.png) Izdelavo IP sprožimo v zavihku Review and Package s klikom na **Package IP**. Ob privzetih nastavitvah bo program naredil paket (*.zip) v katerem je: * opis komponente, nastavitev in vključenih datotek (*.xml), * izvorna datoteka (*.vhd), * opis grafičnega simbola (xgui, *.tcl)