 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
Objavljeno: Pon Jan 14, 2008 6:36 pm Naslov sporočila: VHDL delavnica 1 - vprašanja |
|
|
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  |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Pon Jan 14, 2008 6:57 pm Naslov sporočila: |
|
|
Š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 |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
Objavljeno: Tor Jan 15, 2008 3:18 pm Naslov sporočila: |
|
|
Š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  |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
Objavljeno: Tor Jan 15, 2008 3:30 pm Naslov sporočila: |
|
|
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  |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
|
Nazaj na vrh |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.37 Kraj: Lovrenc na P.
|
Objavljeno: Tor Jan 15, 2008 5:07 pm Naslov sporočila: |
|
|
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 |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
Objavljeno: Sre Jan 16, 2008 12:42 pm Naslov sporočila: |
|
|
Š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  |
|
Nazaj na vrh |
|
 |
alessio Član

Pridružen-a: Pon 04 Dec 2006 8:39 Prispevkov: 363 Aktiv.: 1.61 Kraj: Ljubljana
|
Objavljeno: Sre Jan 16, 2008 3:03 pm Naslov sporočila: |
|
|
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 |
|
 |
MarkoM Član

Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.37 Kraj: Lovrenc na P.
|
Objavljeno: Sre Jan 16, 2008 4:35 pm Naslov sporočila: |
|
|
Stalno bolj ugotavljam, da je FPGA eno veliko področje prej, da bom kaj uporabnega iz njega spravil bo še veliko vode preteklo.
|
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
Objavljeno: Pet Jan 18, 2008 6:17 pm Naslov sporočila: |
|
|
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...
_________________ I'm going to stand outside, so if anyone asks, I'm outstanding  |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Pet Jan 18, 2008 8:28 pm Naslov sporočila: |
|
|
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 |
|
 |
Tihi Član


Pridružen-a: Čet 27 Nov 2003 14:15 Prispevkov: 281 Aktiv.: 1.19 Kraj: Ljubljana
|
Objavljeno: Pet Jan 18, 2008 10:19 pm Naslov sporočila: |
|
|
Bi prosil če bi se lahko video posnetki dobili še kje drugje kot v FileManager-ju, ker mi slednji nekaj "štrajka".
|
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
Objavljeno: Ned Jan 20, 2008 8:09 pm Naslov sporočila: |
|
|
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  |
|
Nazaj na vrh |
|
 |
aly Član



Pridružen-a: Tor 28 Sep 2004 14:51 Prispevkov: 9407 Aktiv.: 39.71 Kraj: Kranj - struževo
|
Objavljeno: Ned Jan 20, 2008 8:19 pm Naslov sporočila: |
|
|
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  |
|
Nazaj na vrh |
|
 |
|
|
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: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|