FAQ | Points | Add... | Recent posts | Search | Register | Log in


Krążąca jedynka - projekt


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> Programmable Systems -> Krążąca jedynka - projekt
Author
Message
brt32
Poziom 5
Poziom 5


Joined: 19 Mar 2005
Posts: 12

Post#1 Post from the author of the topic 05 Dec 2006 16:46   

Krążąca jedynka - projekt


Witam.
Wiecie moze jak w najprostszy sposob napisac w VHDL'u "krazaca jedynke"? Wiem, ze ma to byc rejestr i dekoder... Jednak nie wiem jak to napisac.
Ogolnie mam do zrobienia projekt na plytce Spartan 3 - mam wybrac 8 czestotliwosci, na plytce jest kwarc. Najpierw jedynka ma przejsc przez wszystkie 8 diod z pierwsza czestotliwoscia, pozniej z druga, itd. - coraz szybciej. Po tym, jak przejdzie te 8 czestotliwosci nastepuje zliczanie od poczatku... I tak w nieskonczonosc.
Ma ktos jakis pomysl?
Z gory dziekuje za pomoc.
Back to top
   
pndemon
Poziom 17
Poziom 17


Joined: 05 Jan 2005
Posts: 411
Location: Poznań

Post#2 05 Dec 2006 17:31   

Re: Krążąca jedynka - projekt


musisz stworzyć dzielnik częstotliwości o programowanej podziałce, coś jak:
Code:

entity trigering_freq_gen is port(
    tr_clk: in std_logic;
    data_bus: in std_logic_vector(3 downto 0);
    rst: in std_logic;
    clk: inout std_logic);
end entity trigering_freq_gen;

architecture arch of trigering_freq_gen is
   
signal count: integer range 0 to 10000;

signal rst_sig: std_logic;
   
begin
   
    gen: process (tr_clk, rst_sig, rst, data_bus)
    begin
        if rising_edge(tr_clk) then
            if (rst='1') then
                clk <= '0';
                count <= 0;
            elsif (rst_sig = '1') then
                count <= 0;
                clk <= not clk;
            else
                count <= count + 1;
            end if;
        end if;
    end process gen;
   
    rst_sig <= '1' when count >= (dev(conv_integer(data_bus))) else
               '0';
end architecture arch;


gdzie data_bus jest indeksem tablicy dev
Code:

type arr is array (0 to 10) of integer;
constant dev: arr:=(9999, 999, 499, 332, 249, 199, 168, 142, 124, 110, 99);


ten dzielnik generuje sygnał zegara od 1k do 100k z krokiem co 10k
czyli dla data_bus=0 jest 1k, dla 1 jest 10k itd.

a do krążącej jedynki dajesz np. maszynę stanu, masz od razu załatwiony rejestr i dekoder

czyli jakoś tak:
Code:

architecture arch of bleble
type state is (jeden dwa, trzy, cztery, itd..);
signal next_state, present_state: state;
begin
    comb: process (present_state)
    begin
        case present_state is
            when jeden =>
                led <= "00000001";
                next_state => dwa;
            when dwa =>
                led <= "00000010";
            when itd....
        end case;
    end process comb;
   
    synchro: process(clk)
    begin
        if rising_edge(clk) then
            present_state <= next_state;
        end if;
    end process synchro;
end architecture arch;

Back to top
   
brt32
Poziom 5
Poziom 5


Joined: 19 Mar 2005
Posts: 12

Post#3 Post from the author of the topic 05 Dec 2006 22:23   

Re: Krążąca jedynka - projekt


Dzieki za szybka odpowiedz :)
Sprobuje to wszystko poskladac i jak beda jakies problemy to jeszcze napisze :)
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 05 Dec 2006 22:23   





Back to top
   
griva
Poziom 14
Poziom 14


Joined: 14 Sep 2005
Posts: 199
Location: Krakow

Post#4 08 Dec 2006 11:14   

Re: Krążąca jedynka - projekt


pndemon: ten Twoj kod to chyba z konkursu jak napisac hello world w 300 liniach kodu :PPP

masz internalne clocki i wszystki najgorsze praktyki jakie sie da

przeciez krazaca jedynka to jest cos co jest na dzien dobry w cyfrowce, chcesz gosciowi wmowic ze nie da sie tego zrobic bez automatu??!!!

ja bym to zrobil tak:


process(clk)
begin

if reset='1' then
jhonson <= "0001";
elsif rising_edge(clk) then
if jhonson(3)='1' then
jhonson <= "0001";
else
jhonson <= jhonson(2 downto 0) & '0';
end if;
end if;

end process;
Back to top
   
pndemon
Poziom 17
Poziom 17


Joined: 05 Jan 2005
Posts: 411
Location: Poznań

Post#5 08 Dec 2006 11:33   

Re: Krążąca jedynka - projekt


Wcale nie mówiłem, że nie da się tego inaczej zrobić, poza tym nie podoba mi się że w twoim procesie tak na prawdę nie występuję sygnał clk, a ty masz nadzieję, że to zadziała, otóż niektóre programy do syntezy/symulacji pomijają listy czułości i co wtedy?? Ja np. uczyłem się że coś takiego jest b. złą praktyką.

Co do

Quote:
masz internalne clocki i wszystki najgorsze praktyki jakie sie da

to nie wiem za bardzo czego się to tyczy??
Back to top
   
Google

Google Adsense


Post# 08 Dec 2006 11:33   





Back to top
   
griva
Poziom 14
Poziom 14


Joined: 14 Sep 2005
Posts: 199
Location: Krakow

Post#6 08 Dec 2006 13:22   

Re: Krążąca jedynka - projekt


pndemon wrote:
Wcale nie mówiłem, że nie da się tego inaczej zrobić, poza tym nie podoba mi się że w twoim procesie tak na prawdę nie występuję sygnał clk, a ty masz nadzieję, że to zadziała,



fakt byl bug juz poprawilem

Dodano po 3 [minuty]:

pndemon wrote:
Co do

Quote:
masz internalne clocki i wszystki najgorsze praktyki jakie sie da

to nie wiem za bardzo czego się to tyczy??


sygnal clk, jesli dobrze zrozumialem tworzysz zegar dwojka liczaca i a potem tymze zegarem clockujesz drugi modul, tak??
Back to top
   
pndemon
Poziom 17
Poziom 17


Joined: 05 Jan 2005
Posts: 411
Location: Poznań

Post#7 11 Dec 2006 18:29   

Re: Krążąca jedynka - projekt


Quote:

sygnal clk, jesli dobrze zrozumialem tworzysz zegar dwojka liczaca i a potem tymze zegarem clockujesz drugi modul, tak??


Rozumiem, że mówisz o tym jak tworzony jest sygnał clk. Niestety nie znam innego sposobu na dzielnik częstotliwości jak tylko licznik, który zlicza do połowy zadanej częstotliwości, a potem zmienia sygnał clk na not clk.

Ten moduł działa bez problemów przy 20 MHz, ale jeśli sądzisz, że jest 'nie ok' to z przyjemnością dowiem się o Twojej propozycji, w końcu nadal się uczę tego języka i wszelkie sugestie mile widziane.
Back to top
   
griva
Poziom 14
Poziom 14


Joined: 14 Sep 2005
Posts: 199
Location: Krakow

Post#8 11 Dec 2006 19:00   

Re: Krążąca jedynka - projekt


pndemon wrote:
Quote:

sygnal clk, jesli dobrze zrozumialem tworzysz zegar dwojka liczaca i a potem tymze zegarem clockujesz drugi modul, tak??


Rozumiem, że mówisz o tym jak tworzony jest sygnał clk. Niestety nie znam innego sposobu na dzielnik częstotliwości jak tylko licznik, który zlicza do połowy zadanej częstotliwości, a potem zmienia sygnał clk na not clk.

Ten moduł działa bez problemów przy 20 MHz, ale jeśli sądzisz, że jest 'nie ok' to z przyjemnością dowiem się o Twojej propozycji, w końcu nadal się uczę tego języka i wszelkie sugestie mile widziane.


nie tworzysz nowego zegara, caly projekt powinien chodzic na jednym zegarze (oczywiscie nie zawsze jest to mozliwe) natomiast ten clk ktory Ty tworzysz dwojka liczaca zamieniasz na enable.
Back to top
   
pndemon
Poziom 17
Poziom 17


Joined: 05 Jan 2005
Posts: 411
Location: Poznań

Post#9 11 Dec 2006 19:30   

Re: Krążąca jedynka - projekt


Quote:
nie tworzysz nowego zegara


no a jak jest na płytce na 50MHz, to i tak musisz zrobić dzielnik


Quote:
caly projekt powinien chodzic na jednym zegarze


nie wiem jak to się ma do jednego z założeń projektowych, że częstotliwość mrugania ma się zmieniać

Quote:
natomiast ten clk ktory Ty tworzysz dwojka liczaca zamieniasz na enable.


mógłbyś to rozwinąć bo nie wiem za bardzo o co chodzi ;)
Back to top
   
Google

Google Adsense


Post# 11 Dec 2006 19:30   





Back to top
   
griva
Poziom 14
Poziom 14


Joined: 14 Sep 2005
Posts: 199
Location: Krakow

Post#10 12 Dec 2006 08:05   

Re: Krążąca jedynka - projekt


pndemon wrote:
Quote:
nie tworzysz nowego zegara


no a jak jest na płytce na 50MHz, to i tak musisz zrobić dzielnik


Quote:
caly projekt powinien chodzic na jednym zegarze


nie wiem jak to się ma do jednego z założeń projektowych, że częstotliwość mrugania ma się zmieniać

Quote:
natomiast ten clk ktory Ty tworzysz dwojka liczaca zamieniasz na enable.


mógłbyś to rozwinąć bo nie wiem za bardzo o co chodzi ;)



jesli masz za duzy zegar wejsciowy to uzywasz dcm-a do podzielenia tej wartosci np przez 2 i masz ladny zegar.

generalnie metoda enabli jest starsza od fpga, zrob sobie counter podlacz jedno z wyjsci do en przerzutnika przesymuluj i zajarzysz.
poszukaj tez cos na temat detektor zbocza (poszukaj moich postow - nie ma ich duzo- i juz gdzies rozpisywalem)

internalne clocki rozwala Ci projekt poniewaz tworzysz w ten sposob asynchroniczny projekt (chyba ze jestes w tym dobry ;-) ).

pamietaj tez ze dedykowanych linii zegarowych jest malo, do tego kazdy wykryty internal obkladanyh jest buforem bufg zeby zmniejszyc skew(zalezy tez od syntezera) ktorych np w virtexie I bylo tylko 4.

poczytaj logi, stawiam piwo ze router napisal Ci ze masz low-skew lub tez zroutowal zegar niededykowana linia
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> Programmable Systems -> Krążąca jedynka - projekt
Page 1 of 1
Similar topics
At89C5131 - na wszytskich portach jedynka logiczna (7)
220V - jedynka na wejściu procka (14)
[mega8][asm] uart - jedynka na najstarszym bicie danych ? (15)

Page generation time: 0.162 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed