[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)