logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] Zasada działania procesów VHDL w układach sekwencyjnych - taktowanie i wykonywanie instrukcji

kamil3211 04 Gru 2020 09:04 1527 9
REKLAMA
  • #1 19088469
    kamil3211
    Poziom 10  
    Posty: 475
    Ocena: 57
    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;
  • REKLAMA
  • Pomocny post
    #2 19089619
    vertigo_02
    Poziom 15  
    Posty: 97
    Pomógł: 14
    Ocena: 16
    kamil3211 napisał:
    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 napisał:
    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.
  • REKLAMA
  • Pomocny post
    #3 19090257
    trol.six
    Poziom 31  
    Posty: 1650
    Pomógł: 151
    Ocena: 381
    kamil3211 napisał:
    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.
    .
  • #4 19091648
    kamil3211
    Poziom 10  
    Posty: 475
    Ocena: 57
    trol.six napisał:
    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?
  • Pomocny post
    #5 19092330
    trol.six
    Poziom 31  
    Posty: 1650
    Pomógł: 151
    Ocena: 381
    kamil3211 napisał:
    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.
    .
  • REKLAMA
  • Pomocny post
    #6 19092752
    vertigo_02
    Poziom 15  
    Posty: 97
    Pomógł: 14
    Ocena: 16
    kamil3211 napisał:
    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.
  • #7 19093945
    kamil3211
    Poziom 10  
    Posty: 475
    Ocena: 57
    ok ok dzięki
  • REKLAMA
  • #8 19140927
    kamil3211
    Poziom 10  
    Posty: 475
    Ocena: 57
    https://electronics.stackexchange.com/questions/399427/vhdl-when-is-a-process-block-too-long
    o to mi chodziło ale nie wiedziałem jak zapytać.
    Popisałem trochę głupot i za to przepraszam ale się dokształciłem.
    mam nadzieję że nie za późno
    tu ta książka skąd autor tematu to wziął
    http://freerangefactory.org/pdf/df344hdh4h8kjfh3500ft2/free_range_vhdl.pdf strona 66
  • #9 19142768
    kamil3211
    Poziom 10  
    Posty: 475
    Ocena: 57
    Kiedy chce się sprawdzić maksymalną częstotliwość to jest taki plik generowany z rozszerzeniem twr i na końcu jest coś takiego
    Załączniki:
    • Zasada działania procesów VHDL w układach sekwencyjnych - taktowanie i wykonywanie instrukcji Przechwytywanie.PNG (19.96 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #10 19142871
    kamil3211
    Poziom 10  
    Posty: 475
    Ocena: 57
    https://electronics.stackexchange.com/questions/399427/vhdl-when-is-a-process-block-too-long
    o to mi chodziło ale nie wiedziałem jak zapytać.
    Popisałem trochę głupot i za to przepraszam ale się dokształciłem.
    mam nadzieję że nie za późno
    tu ta książka skąd autor tematu to wziął
    http://freerangefactory.org/pdf/df344hdh4h8kjfh3500ft2/free_range_vhdl.pdf strona 66

Podsumowanie tematu

LABEL_AI_GENERATED
W dyskusji poruszono kwestie dotyczące działania procesów VHDL w układach sekwencyjnych, szczególnie w kontekście taktowania i wykonywania instrukcji. Uczestnicy wyjaśnili, że VHDL jest językiem opisu sprzętu, który może opisywać zarówno procesy synchroniczne, jak i asynchroniczne. W przypadku procesów synchronicznych, operacje są wykonywane na zboczu sygnału zegarowego, a ich czas wykonania zależy od szybkości logiki oraz złożoności układu. W poprawnie zaprojektowanym układzie, wyniki operacji powinny być dostępne przed pojawieniem się kolejnego zbocza zegara. Wskazano również na znaczenie maksymalnej częstotliwości zegara, która jest determinowana przez różne czynniki, takie jak złożoność kombinacyjna, szybkość zasobów logicznych FPGA oraz warunki pracy. Uczestnicy podkreślili, że w praktyce, czas propagacji sygnału może wpływać na wykonanie instrukcji, co może prowadzić do nieprzewidzianych rezultatów, jeśli logika działa zbyt szybko.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA