Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Solved] Układy sekwencyjne a taktowanie VHDL

04 Dec 2020 11:25 939 9
  • Level 3  
    Chciałbym wiedzieć czy mam rację w pewnej kwestii. Nie wiem gdzie tego szukać a nikt w kursach nie porusza tego tematu.
    W układach sekwencyjnych sychronicznych (jakimi są chyba procesy w vhdl ale nie jestem pewien na 100% odpowiedzcie)
    wykonywane operacje zależą od zegara czyli to oznacza że każda pojedyncza instrukcja w vhdl w procesie wykonywana jest przy 1 zboczu narastającym lub opadającym ?

    2. Jeśli moje domysły mają rację. Czy ma miejsce sytuacja że np piszemy kod w procesie i używamy jako argumeny if rising_edge_clk na narastające zbocze i w tym warunku jeśli nastąpi to zrobimy jakiś kolejny if który będzie liczył narastające zbocza i np co sekundę będzie zapalał diodą. To mało kodu ale załóżmy że zamiast zapalania diody będzie bardzo wiele instrukcji To czy w takiej sytuacji trochę zbocz zegara zostanie poświęconych na prace algorytmu co spowoduje, że algorytm odpowiadający za liczenie zbocz nie policzy wszystkich? bo będą wykonywały się inne instrukcję ?

    ewentualnie link do czegoś o tym

    Dodano po 1 [minuty]:

    przy wyższym taktowaniu tym bym się nie przejmował ale będę tym przetwarzał sygnał zamiast używać atmegi328

    Dodano po 2 [godziny] 19 [minuty]:

    naprzykład taki kod tyle że zamiast migania led będzie więcej operacji

    ----------------------------------------------------------------------------------
    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.std_logic_unsigned.all;


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

    architecture Behavioral of glowny is
    signal licznik:STD_LOGIC_VECTOR(0 to 29):="000000000000000000000000000000";
    signal ledsig:STD_LOGIC:='1';
    begin

    process(clk)
    begin
    if(rising_edge(clk)) then
    if(licznik= "101101110001101011111111") then
    licznik<="000000000000000000000000000000";
    ledsig<=not ledsig;
    else
    licznik<=licznik+"1";
    end if;
    end if;

    end process;
    led<=ledsig;
    end Behavioral;
  • Helpful post
    Level 14  
    kamil3211 wrote:
    W układach sekwencyjnych synchronicznych (jakimi są chyba procesy w vhdl ale nie jestem pewien na 100% odpowiedzcie) wykonywane operacje zależą od zegara czyli to oznacza że każda pojedyncza instrukcja w vhdl w procesie wykonywana jest przy 1 zboczu narastającym lub opadającym ?

    Trochę mylisz pojęcia. VHDL to tylko język opisu sprzętu. Może opisywać zarówno procesy synchroniczne, jak też asynchroniczne. Opis w języku VHDL jest syntezowany do postaci układu cyfrowego implementowalnego w docelowym układzie FPGA. Ale tak, generalnie układy FPGA dzięki swojej budowie są predysponowane do szybkiego przetwarzania synchronicznego.
    W przypadku gdy proces wykrywa narastające zbocze sygnału zegarowego, zostaną wykonane wszystkie instrukcje pod Twoim IFem.

    kamil3211 wrote:
    2. Jeśli moje domysły mają rację. Czy ma miejsce sytuacja że np piszemy kod w procesie i używamy jako argumeny if rising_edge_clk na narastające zbocze i w tym warunku jeśli nastąpi to zrobimy jakiś kolejny if który będzie liczył narastające zbocza i np co sekundę będzie zapalał diodą. To mało kodu ale załóżmy że zamiast zapalania diody będzie bardzo wiele instrukcji To czy w takiej sytuacji trochę zbocz zegara zostanie poświęconych na prace algorytmu co spowoduje, że algorytm odpowiadający za liczenie zbocz nie policzy wszystkich? bo będą wykonywały się inne instrukcję ?

    To pytanie świadczy trochę o niezrozumieniu istoty tego czym są i jak działają układy FPGA. Radzę odrzucić wszystkie analogie do mikrokontrolerów, bo to po prostu zgubne. Lepiej myśleć o układzie FPGA jak o bardzo dużym układzie logicznym składającym się z bardzo wielu bramek i przerzutników. Oprócz ograniczoności szybkości działania, ograniczeniem o które tutaj zahaczasz pytaniem jest liczba zasobów układu FPGA.
    Typowo układy FPGA wykonują tysiące instrukcji JEDNOCZEŚNIE, jeśli tylko pozwoli na to liczba zasobów potrzebnych do implementacji.
    Odpowiadając na pytanie: algorytm policzy wszystko, nie "zgubi" żadnych zbocz.
  • Helpful post
    Level 31  
    kamil3211 wrote:
    wykonywane operacje zależą od zegara

    Nie, zależą od szybkości logiki. Bo fpga to taki duży zestaw bramek i przerzutników. Natomiast to jaką maksymalną częstotliwością możesz taktować daną logike, zależy od projektu w tym samego fpga.

    Na końcu, po syntezie i takich tam innych rzeczach, możesz otrzymać różne timingi i informacje, w tym interesującą cię maksymalną częstotliwość danej domeny zegarowej.
    .
  • Level 3  
    trol.six wrote:
    Nie, zależą od szybkości logiki. Bo fpga to taki duży zestaw bramek i przerzutników. Natomiast to jaką maksymalną częstotliwością możesz taktować daną logike, zależy od projektu w tym samego fpga.
    To w końcu wykonywane instrukcje w procesie zależą od zegara czy od szybkości logiki?
  • Helpful post
    Level 31  
    kamil3211 wrote:
    wykonywane instrukcje w procesie zalerzą od zegara czy od szybkości logiki.

    Nie w każdym procesie musi być zegar. A w praktyce jak masz zegar to nie jest tak że to się wykonuje natychmiast, bo istnieje czas propagacji sygnału. W teorii zakłada się jednoczesność zdarzeń na zboczu jeśli takowe jest użyte w instrukcji warunkowej, inaczej nie miałoby to sensu logicznego. (z tym że teoretycznie wszystko tam jest sekwencyjne) Ale to jak to się w praktyce wykona zależy już tylko od szybkości logiki. Bo jak będzie za szybko to ci się zrobi coś innego niż jest.

    Być może jest to kwestia lingwistycznego podejścia do słowa "zależy". Bo to zależy od czego zależność ma zależeć ;) Ja to zrozumiałem w ten sposób.
    .
  • Helpful post
    Level 14  
    kamil3211 wrote:
    To w końcu wykonywane instrukcje w procesie zależą od zegara czy od szybkości logiki?

    Pytanie jest tak postawione, że w zależności od tego jak się je zrozumie, można odpowiedzieć, że zależą od jednego i drugiego, albo nie zależą od żadnego :D

    Próbując to uporządkować:
    1. W procesie taktowanym zegarem wykonają się wszystkie operacje, które są tam wpisane. W poprawnie zaprojektowanym układzie każdy wynik operacji będzie dostępny przed pojawieniem się kolejnego zbocza sygnału zegarowego.

    2. O tym jaka może być maksymalna częstotliwość zegara, czyli de facto jak szybko mogą wykonywać się operacje, decyduje wiele czynników - m. in. złożoność kombinacyjna zaprojektowanego układu logicznego, szybkość zasobów logicznych FPGA, temperatura i napięcie zasilania. Raczej w takiej kolejności co do istotności.
  • Level 3  
    ok ok dzięki