www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

VHDL delavnica 1 - vprašanja
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> FPGA in CPLD programabilna vezja
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.71
Kraj: Kranj - struževo

PrispevekObjavljeno: Pon Jan 14, 2008 6:36 pm    Naslov sporočila:  VHDL delavnica 1 - vprašanja Odgovori s citatom

Tukaj lahko nadaljujemo debato iz prve VHDL delavnice za začetnike (12.1.2008-).
Objavil bom tudi primere, ki smo jih tam delali. In literaturo.

Torej, na dan z vprašanji.

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2752
Aktiv.: 11.62
Kraj: Trzic

PrispevekObjavljeno: Pon Jan 14, 2008 6:57 pm    Naslov sporočila:   Odgovori s citatom

Škoda edino, da se ni pokazalo, kako se uporablja simulator...
Meni non-stop javlja tole napako:
Citiram:
ISE Simulator is unable to compile this design due to
specific coding constructs used in design unit work/top_test2/behavioral,
defined in file "K:/Xilinx_projects/test2/TOP_test2.vhd". Xilinx is actively
working on reducing the number of conditions where this error occurs. For
more information on this error, please consult Answer Record 24068 in Answers
Database at http://www.xilinx.com/support.


Program je čisto enostaven: led<=tipka;

Koda:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity TOP_test2 is
    Port ( clk : in  STD_LOGIC;
           tipka : in  STD_LOGIC;
           led : out  STD_LOGIC);
end TOP_test2;

architecture Behavioral of TOP_test2 is

begin

   led <= tipka;


end Behavioral;


V čem je fora?

_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.71
Kraj: Kranj - struževo

PrispevekObjavljeno: Tor Jan 15, 2008 2:31 pm    Naslov sporočila:   Odgovori s citatom

Pripenjam literaturo iz delavnice - predstavitev.


VHDL delavnica 1 - 12.1.2008 - ProgVezja.pdf
 Opis:
Predstavitev iz VHDL / CPLD / FPGA delavnice, 12.1.2008

Download
 Ime datoteke:  VHDL delavnica 1 - 12.1.2008 - ProgVezja.pdf
 Velikost datoteke:  2.02 MB
 Downloadano:  82 krat


_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.71
Kraj: Kranj - struževo

PrispevekObjavljeno: Tor Jan 15, 2008 3:18 pm    Naslov sporočila:   Odgovori s citatom

Še primeri iz delavnice:

1. primer........ prižge eno LEDico ob pritisku na tipko. Druga ledica utripa v taktu vhodne ure.

Koda:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity TOP_test is
    Port ( clock : in  STD_LOGIC;
           tipka : in  STD_LOGIC;
           ledica1 : out  STD_LOGIC;
           ledica2 : out  STD_LOGIC;
           );
end TOP_test;

architecture Behavioral of TOP_test is

   signal clk_div : std_logic_vector (20 downto 0);

begin

process (clock)
begin
   if rising_edge(clock) then
      clk_div <= clk_div + 1;   -- navaden binarni števec
   end if;
end process;


   ledica2 <= clk_div(18);   -- 19-ti odcep iz delilnika frekvence

   ledica1 <= NOT tipka;

end Behavioral;

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.71
Kraj: Kranj - struževo

PrispevekObjavljeno: Tor Jan 15, 2008 3:30 pm    Naslov sporočila:   Odgovori s citatom

Drugi primer je nekoliko bolj kompleksen...

Namenjen je demonstriranju množice različnih stavkov in struktur.

TOP modul:
Koda:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
library UNISIM;
use UNISIM.VComponents.all;

entity demo1_top is
    Port ( clock_in_24MHz : in  STD_LOGIC;
           TIPKA5_neg : in  STD_LOGIC;
           TIPKA6_neg : in  STD_LOGIC;
           LED : out  STD_LOGIC;
           LED_7seg_LSB : out  STD_LOGIC_VECTOR (6 downto 0);
           LED_7seg_MSB : out  STD_LOGIC_VECTOR (6 downto 0);
           LED_BAR : out  STD_LOGIC_VECTOR (12 downto 1);
           LED_BAR_dodatna : out  STD_LOGIC;
           piskac_a : out  STD_LOGIC;
           piskac_b : out  STD_LOGIC);
end demo1_top;

------------------------------------------------------------------------------------------------

architecture Behavioral of demo1_top is

   COMPONENT hex_7seg
   PORT(
      D : IN std_logic_vector(3 downto 0);         
      seg : OUT std_logic_vector(7 downto 1)
      );
   END COMPONENT;

   signal reset : std_logic;

   signal clock_24MHz,  clock, pwm_clock : std_logic;
   signal clk_div : std_logic_vector (25 downto 0);

   signal stevec : std_logic_vector (7 downto 0);
   signal smer_stetja : std_logic;
   signal bar_graf : std_logic_vector (12 downto 1);
   
   signal pwm_stevec, pwm_komparator : std_logic_vector (7 downto 0);
   signal pwm : std_logic;

begin

   reset <= NOT TIPKA6_neg;
   
input_clock_inst : BUFG port map (I => clock_in_24MHz, O => clock_24MHz);

   process (clock_24MHz)
   begin
      if rising_edge (clock_24MHz) then
         clk_div <= clk_div + 1;
      end if;
   end process;

-- SISTEMSKI CLOCK
-- 0 = 12MHz
-- 1 = 6 MHz
-- ...
-- 18 = 45,75 Hz
-- 19 = 22,8 Hz
-- 20 = 11,4 Hz
-- 21 = 5,7 Hz
-- 22 = 2,85 Hz

sys_clock_inst : BUFG port map (I => clk_div (21), O => clock);


pwm_clock_inst : BUFG port map (I => clk_div (7), O => pwm_clock);

   

process (clock)
begin
   if rising_edge (clock) then
      if reset='1' then stevec <= (others => '0'); -- sinhroni reset
            elsif smer_stetja='1' then   
               stevec <= stevec + 1;
            else
               stevec <= stevec - 1;
            end if; -- smer stetja & reset
   end if; -- clock
end process;


process (clock)
begin
   if rising_edge (clock) then
      if reset='1' then smer_stetja <= '1'; -- sinhroni reset
         else
            if stevec="00000001" then smer_stetja <= '1'; -- stej gor
            elsif stevec="11111110" then smer_stetja <= '0'; end if; -- stej dol
      end if; -- reset
   end if; -- clock
end process;

-- uporaba enaga podmodula za krmiljenje dveh 7-segmentnih displejev
Inst_hex_7seg_MSB: hex_7seg PORT MAP(
      D => stevec(7 downto 4),
      seg => LED_7seg_MSB
   );

Inst_hex_7seg_LSB: hex_7seg PORT MAP(
      D => stevec(3 downto 0),
      seg => LED_7seg_LSB
   );

-----------------------------------------------------------------------

-- 12 LEDic v vrsti, ki letajo sem in tja po vzorcu

process(clock)
begin
   if rising_edge (clock) then
      if ( reset = '1') then bar_graf <= "000000000000";
      else
         case stevec (3 downto 0) is
            when "0000" => bar_graf <= "000000000001";
            when "0001" => bar_graf <= "000000000010";
            when "0010" => bar_graf <= "000000000100";
            when "0011" => bar_graf <= "000000001000";
            when "0100" => bar_graf <= "000000010000";
            when "0101" => bar_graf <= "000000100000";
            when "0110" => bar_graf <= "000001000000";
            when "0111" => bar_graf <= "000010000000";
            when "1000" => bar_graf <= "000100000000";
            when "1001" => bar_graf <= "001000000000";
            when "1010" => bar_graf <= "010000000000";
            when "1011" => bar_graf <= "100000000000";
            when "1100" => bar_graf <= "111000000000";
            when "1101" => bar_graf <= "111111000000";
            when "1110" => bar_graf <= "111111111000";
            when "1111" => bar_graf <= "111111111111";
            when others => bar_graf <= "000000000000";
         end case;
      end if;
   end if;
end process;

--  Spreminjanje svetilnosti teh istih ledic zgoraj z PWM signalom
--LED_BAR <= bar_graf AND pwm;  -- ne da se združiti vodila (vector) in enobitnega signala.
-- modulirati je potrebno vsak bit (signal) posebej:

GEN1: for j in 1 to 12 generate -- 12x ponovi isto, vsakič za drug signal:
   LED_BAR(j) <= bar_graf(j) AND (pwm OR (NOT TIPKA5_neg)) ;
end generate;

   LED_BAR_dodatna <= smer_stetja; -- kaže smer štetja počasnega števca

-----------------------------------------------------------------------
-- hitri števec za generacijo rampe za PWM
   process (reset, pwm_clock)
   begin
      if reset='1'
         then pwm_stevec <= "00000000";
         elsif rising_edge (pwm_clock)
            then
            pwm_stevec <= pwm_stevec + 1;
      end if;
   end process;

-- komparator rampe in reference za generacijo PWM

   pwm_komparator <= stevec; -- to je referenca (pocasni stevec, ki se izpisuje na LED displeju)
   
   process (reset, pwm_clock) begin
      if reset='1'
         then pwm <= '0';
         elsif rising_edge (pwm_clock) then
            if (pwm_stevec > pwm_komparator) OR (pwm_komparator = "00000000")
               then
                  pwm <= '0';
               else                           -- PWM generator
                  pwm <= '1';
            end if;
      end if; --{reset, clock}
   end process;

-- LEDica se počasi prižiga in ugaša s PWM krmiljenjem
   LED <= pwm;

---------------------------------------------------------------------------

-- piskac je zvezan med tema dvema pinoma.
-- piska s konstantno frekvenco, le duty-cycle se mu spreminja.
-- ce pritisnemo reset, samo piska z visjo frekvenco

   piskac_a <=       reset AND clk_div (12);
   piskac_b <= (NOT reset) AND pwm;

end Behavioral;




in še dodatni podmodul - dekoder iz binarne vrednosti v 7-segmentni HEX prikaz:
Koda:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity hex_7seg is
    Port ( D : in std_logic_vector(3 downto 0);
           seg : out std_logic_vector(7 downto 1));
end hex_7seg;

architecture Behavioral of hex_7seg is

begin

-- segment encoding
--      0
--     --- 
--  5 |   | 1
--     ---   <- 6
--  4 |   | 2
--     ---
--      3
   
    with D select
      seg <= "0000110" when "0001",   --1
             "1011011" when "0010",   --2
             "1001111" when "0011",   --3
             "1100110" when "0100",   --4
             "1101101" when "0101",   --5
             "1111101" when "0110",   --6
             "0000111" when "0111",   --7
             "1111111" when "1000",   --8
             "1101111" when "1001",   --9
             "1110111" when "1010",   --A
             "1111100" when "1011",   --b
             "1011000" when "1100",   --C
             "1011110" when "1101",   --d
             "1111001" when "1110",   --E
             "1110001" when "1111",   --F
             "0111111" when others;   --0
          -- "6543210"

end Behavioral;

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.71
Kraj: Kranj - struževo

PrispevekObjavljeno: Tor Jan 15, 2008 3:53 pm    Naslov sporočila:   Odgovori s citatom

NeoTO je napisal/a:
Škoda edino, da se ni pokazalo, kako se uporablja simulator...

Simulatorjev je en kup. Npr. ActiveHDL ali po tanovem tudi xilinx-ISE.
Jaz ne delam kaj dosti s simulatorjem, ker mi je še vedno vse delalo iz prve. Pa tudi časa ni bilo na delavnici.

Sem pa sedajle poskusil zagnati simulator v ISE.
Zgoraj nad sourci izbereš Behavioral Simulation in se ti namesto procesov za sintezo pokažejo procesi za simulacijo.
Na nek način še dodaš TestBench (vhodne stimuluse) in poženeš.

NeoTO, ne vem, kaj si nastavil narobe. Meni deluje.

Pri meni izgleda takole:



ise-sim.png
 Opis:
 Velikost datoteke:  49.31 KB
 Pogledana:  17 krat

ise-sim.png



_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
MarkoM
Član
Član



Pridružen-a: Tor 12 Sep 2006 15:29
Prispevkov: 2825
Aktiv.: 12.37
Kraj: Lovrenc na P.

PrispevekObjavljeno: Tor Jan 15, 2008 5:07 pm    Naslov sporočila:   Odgovori s citatom

Ali obstajajo kakšne knjižnice kot npr. v C-ju za razno periferijo kot je SPI, IIC, UART itd.?
Rad bi pognal ADC in DAC.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.71
Kraj: Kranj - struževo

PrispevekObjavljeno: Sre Jan 16, 2008 12:42 pm    Naslov sporočila:   Odgovori s citatom

Še ena zanimiva funkcija obstaja - izpis mapiranja pinov.
Med projektnimi fajli nadeš eno takšno datoteko: "<ime_top_modula>_pad.csv"
Tam so izpisani vsi pini izbranega čipa.

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
alessio
Član
Član



Pridružen-a: Pon 04 Dec 2006 8:39
Prispevkov: 363
Aktiv.: 1.61
Kraj: Ljubljana

PrispevekObjavljeno: Sre Jan 16, 2008 3:03 pm    Naslov sporočila:   Odgovori s citatom

MarkoM je napisal/a:
Ali obstajajo kakšne knjižnice kot npr. v C-ju za razno periferijo kot je SPI, IIC, UART itd.?

http://www.opencores.org/

glej pod "projects".

Aleš
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
MarkoM
Član
Član



Pridružen-a: Tor 12 Sep 2006 15:29
Prispevkov: 2825
Aktiv.: 12.37
Kraj: Lovrenc na P.

PrispevekObjavljeno: Sre Jan 16, 2008 4:35 pm    Naslov sporočila:   Odgovori s citatom

Stalno bolj ugotavljam, da je FPGA eno veliko področje prej, da bom kaj uporabnega iz njega spravil bo še veliko vode preteklo. Confused
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.71
Kraj: Kranj - struževo

PrispevekObjavljeno: Pet Jan 18, 2008 6:17 pm    Naslov sporočila:   Odgovori s citatom

Na FileManagerju v direktoriju VHDL delavnica so video posnetki. Vsega skupaj je 2 uri materiala, ki sem ga razdelil v 4 fajle.

Žal so na nekaterih mestih v videu "kocke". Očitno posledica ne ravno kompatibilnih kamer... Confused

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2752
Aktiv.: 11.62
Kraj: Trzic

PrispevekObjavljeno: Pet Jan 18, 2008 8:28 pm    Naslov sporočila:   Odgovori s citatom

Sem še enkrat namestil celoten sistem in je stanje še vedno isto...
Je komu uspelo usposobiti tale simulator pod Visto?

_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Tihi
Član
Član



Pridružen-a: Čet 27 Nov 2003 14:15
Prispevkov: 281
Aktiv.: 1.19
Kraj: Ljubljana

PrispevekObjavljeno: Pet Jan 18, 2008 10:19 pm    Naslov sporočila:   Odgovori s citatom

Bi prosil če bi se lahko video posnetki dobili še kje drugje kot v FileManager-ju, ker mi slednji nekaj "štrajka".
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.71
Kraj: Kranj - struževo

PrispevekObjavljeno: Ned Jan 20, 2008 8:09 pm    Naslov sporočila:   Odgovori s citatom

NeoTO je napisal/a:
Škoda edino, da se ni pokazalo, kako se uporablja simulator...

Sestavil sem vodič, kako spraviti v življenje simulator znotraj ISE / Webpack. Dostopen je TUKAJ.
Z visto pa so sami problemi. Uporabna je samo za gledanje ure na namizju. Žal.

Še eno stvar sem pozabil omeniti na delavnici - s signali višjih frekvenc na vhodih so lahko težave in nepravilno delovanje. Razlog tega je, da niven signal ni neskončno hiter, ampak imajo vsi nek rise-time. Če FPGA / CPLD (ki je sicer zelo hiter) "posempla" ta vhodni signal točno na mestu, kjer je vhod nekje na sredini med maso in Vccio (okrog 1,65V), se ne more odločiti, ali je 1 ali 0. In s tem lahko zagrabi napačno stanje.

Problem se dokaj enostavno reši tako, da se vsak signal takoj po vstopu v čip pelje skozi en D-FF, ki teče na sistemski uri. S tem sicer dobimo zakasnitev za 1-CLK cikel, ampak v veliki večini primerov je to povsem sprejemljivo.

Primer enega takšnega filter-registra:
Koda:
process (clock, reset) begin
   if reset='1' then
      data1 <= '0';
      data2 <= '0';
      data3 <= '0';
   elsif rising_edge (clock) then
      data1 <= data1_in;
      data2 <= data2_in;
      data3 <= data3_in;
      end if;
end process;

dataN_in so signali direktno iz vhodnih pinov
dataN signali pa se uporabijo v nadaljnem vezju.

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
aly
Član
Član



Pridružen-a: Tor 28 Sep 2004 14:51
Prispevkov: 9407
Aktiv.: 39.71
Kraj: Kranj - struževo

PrispevekObjavljeno: Ned Jan 20, 2008 8:19 pm    Naslov sporočila:   Odgovori s citatom

Tihi je napisal/a:
Bi prosil če bi se lahko video posnetki dobili še kje drugje kot v FileManager-ju, ker mi slednji nekaj "štrajka".

Videi so bolj slabe kvalitete (kocke). V planu je, da se material še enkrat obdela in takrat bo tudi bolje dostopen.
Filemanager pa res nekaj štrajka. Že iščemo vzroke.

_________________
I'm going to stand outside, so if anyone asks, I'm outstanding Smile
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran MSN Messenger - naslov
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> FPGA in CPLD programabilna vezja Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 492 dni


Powered by phpBB © 2001, 2005 phpBB Group