4. vaja: sistem z VGA izhodom
|
|
Cilj laboratorijske vaje je izdelava sistema za prikaz gibljive sličike kuzorja na računalniškem monitorju. Na vaji bomo uporabili že pripravljeno sinhronizacijsko komponento in naredili novo komponento za prikaz sličice.
|
Izdelava komponente za prikaz sličice
1. Izdelava novega projekta
- v orodju Vivado naredi nov projekt z imenom VGAm in izberi razvojno ploščo Zedboard
- klikni Add Sources in ustvari novo VHDL datoteko z imenom VGAm ter definiraj priključke:
Port ( clk : in STD_LOGIC;
rgb_i : in STD_LOGIC_VECTOR (7 downto 0); -- vhodni RGB
tx_i, ty_i : in STD_LOGIC_VECTOR (8 downto 0); -- vhodni koordinati
en_i : in STD_LOGIC; -- veljaven vhod
ctrl : in STD_LOGIC_VECTOR (18 downto 0); -- kontrolni signal
rgb_o : out STD_LOGIC_VECTOR (7 downto 0); -- izhodni RGB
tx_o, ty_o : out STD_LOGIC_VECTOR (8 downto 0);-- izhodni koordinati
en_o : out STD_LOGIC); -- veljaven izhod
2. Naloga
- Definiraj zbirko (array) in signal kurzor velikosti 12 x 18 točk, v katerem bo sličica miškinega kurzorja. Tokrat bo standardni vektor definiran v obratni smeri (0 to 17), ker naraščajo koordinate točk od leve proti desni in bi drugače videli na zaslonu zrcalno sličico.
type slika is array (0 to 17) of std_logic_vector(0 to 11);
constant kurzor: slika :=(
"100000000000",
"110000000000",
"101000000000",
"100100000000",
"100010000000",
"100001000000",
"100000100000",
"100000010000",
"100000001000",
"100000000100",
"100000000010",
"100000011111",
"100010010000",
"100101001000",
"101001001000",
"110000100100",
"000000100100",
"000000011000" );
- V vezju definiraj dva 9-bitna nepredznačena vektorja xc in yc, ki predstavljata začetno koordinato (levi zgornji vogal) slike na zaslonu. Koordinato bomo nastavljali preko paralelnega vhodnega signala ctrl. Najvišji bit tega signala določa ali bo kurzor prikazan ali ne, ostali biti pa so koordinate v oknu 512 x 512:
xc <= unsigned(ctrl(8 downto 0));
yc <= unsigned(ctrl(17 downto 9));
- Definiraj tudi dva 9-bitna nepredznačena vektorja x in y, ki jima priredi vrednost koordinat vhodne točke tx_i in ty_i. Ob prireditvi naredi pretvorbo podatkovnih tipov v unsigned, da bomo imeli kasneje lažje računanje.
- Napiši sinhroni proces,ki definira barvo izhodne točke rgb_o. izhodna barva naj bo bela ("11111111") kadar je
- en_i='1' in ctrl(18)='1' in
- trenutna koordinata (tx_i, ty_i) znotraj okvirja slike, ko je tx_i na intervalu [xc, xc+12) in ty_i [yc, yc+18) in
- vrednost v tabeli kurzor(to_integer(y-yc))(to_integer(x-xc)) = '1'
- v vseh ostalih primerih naj bo izhod enak vhodni barvi rgb_i
- Napiši še prireditvene stavke za izhodni koordinati in veljaven izhod, ki so kar enake vhodnim vrednostim zakasnjenim za en urni cikel. Preizkusi delovanje opisanega vezja na simulaciji s testno strukturo TestVGA.vhd, ki vsebuje proces s števci za vhodne signale in zapisovanje vrednosti izhodov v datoteko.
- Iz menija Tools izberi Create and Package IP, nato pa pustimo privzeto Package your current project in na koncu kliknemo Finish.
Uporaba komponente v sistemu
- Izdelaj sistem s procesorjem in obema grafičnima komponentama ter preizkusi delovanje na razvojni plošči. Uporabi datoteko z lokacijami priključkov VGAsistem.xdc.