eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaNauka programowania FPGA › Re: Nauka programowania FPGA
  • Data: 2018-02-08 23:20:01
    Temat: Re: Nauka programowania FPGA
    Od: Grzegorz Kurczyk <g...@c...usun.slupsk.pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    W dniu 08.02.2018 o 22:10, s...@g...com pisze:
    > W dniu czwartek, 8 lutego 2018 07:37:17 UTC+1 użytkownik Grzegorz Kurczyk napisał:
    >> W dniu 08.02.2018 o 00:50, s...@g...com pisze:
    >>
    >>> Dobrze napisane! Jako przykład można podać taką sekwencję w C:
    >>> a=1;
    >>> b=2;
    >>> c=a+b;
    >>> Wiadomo, że powyższe może dać zupełnie inny wynik, jeżeli pomieszamy
    kolejnościami instrukcji np. tak:
    >>> c=a+b;
    >>> b=2;
    >>> a=1;
    >>> Tymczasem w języku opisu sprzętu owa kolejność zapisu nie ma żadnego znaczenia.
    >>>
    >>
    >>
    >> A jeszcze lepszy numer, to różnica między zapisem w Verilogu:
    >> b = a;
    >> c = b;
    >> d = c;
    >>
    >> a taką wersją:
    >> b <= a;
    >> c <= b;
    >> d <= c;
    >>
    >> tego raczej nie sposób zrozumieć bez uświadomienia sobie, że "a", "b",
    >> "c" i "d" to dwie sztuki UCY7474 ;-) czyli cztery przerzutniki wyzwalane
    >> zboczem. W pierwszym przypadku syntezer i optymalizator może zwinąć te
    >> cztery linijki kodu do jednego przerzutnika, a w drugim przypadku
    >> dostaniemy czterobitowy rejestr przesuwny :-)
    >>
    >> Tej jawności zapisu zawsze mi brakowało w VHDL-u
    >>
    >> --
    >> Pozdrawiam
    >> Grzegorz
    >
    > ===============
    >
    > Sie zagalopowałeś.. Ten drugi przypadek a<=b itd.. istotnie sugeruje shift
    register, no ale dla ścisłości należałoby to opisać jako proces z pewną listą
    parametrów czułości. Skomplikowane?! Nie !! Precyzyjne!!

    Aj tam zaraz zagalopowałem ;-) co najwyżej użyłem zbyt dużego skrótu
    myślowego :-) Chodziło mi konkretnie o takie dwa przykłady:

    module test1(
    input clk,
    input a,
    output reg d
    );
    reg b, c;
    always @(posedge clk) begin
    b <= a;
    c <= b;
    d <= c;
    end

    wynik syntezy ftp://control.slupsk.pl/pub/fpga/test1.png

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


    module test2(
    input clk,
    input a,
    output reg d
    );
    reg b, c;
    always @(posedge clk) begin
    b = a;
    c = b;
    d = c;
    end

    wynik syntezy ftp://control.slupsk.pl/pub/fpga/test2.png
    ----------------------------------------------------


    No i niestety chcąc nie chcąc daję się zaś prowokować do odwiecznej
    dyskusji nt. języków programowania.. Abstrahując od faktu, że
    VHDL/Verilog nie są językami programowania, twierdzę iż C powstał nie z
    potrzeby, ale że się dało. Podobnież jak Verilog. Zdecydowanie lepszym
    moim zdaniem odpowiednikiem C jest Pascal. VHDL powstał na bazie ADA.
    Prosty, chyba pierwszy język programowania obiektowego. Idealnie
    pasujący strukturalnie i behawioralnie do opisu i łatwej konstrukcji
    syntezy elektroniki cyfrowej na dowolną platformę. Verilog jest
    promowany, bo w zapisie podobny do C. I tak jak w latach 80'tych
    pieprzono, że C jest językiem wyższego rzędu, optymalnym w sensie czasu
    wykonania kodu wynikowego (bo krótki zapis jak w assemblerze) tak samo
    się pierdoli głupoty odn. VHDL/Verilog. Synteza równań logicznych, to
    "małe piwko". Synteza stanów maszynowych, to trochę więcej roboty, ale
    są gotowe narzędzia zarówno pod Veriloga jak i pod VHDL. Więc w tym
    temacie też nie ma o czym gadać.
    >
    > Jedni lubią blondynki, inni brunetki...
    >

    Wcale nie zamierzam nic prowokować. Jedni wolą ogórki, a drudzy
    ogrodnika córki ;-) Każdy język ma swoje "walety" i "zady". Dużo pisałem
    w Pascalu i pascalopodobnych. Borlandowskie kompilatory TurboPascala na
    x86 dawały tak zwięzły kod wynikowy, że jak przeglądałem go pod
    debbugerem, to w assemblerze nie dałoby się już zbyt wiele
    zoptymalizować. Pascal bardziej wymuszał czytelny zapis, ale przy
    programowaniu nie raz mi "brakowało" zwięzłej konstrukcji typu
    suma+=*wskaznik++; która ponoć jest nieczytelna. Przy programowaniu
    małych 8-bitowych uC często mieszałem C z assemblerem. Pewne rzeczy
    nawet wygodniej się robiło mi się w assemblerze :-)


    --
    Pozdrawiam
    Grzegorz

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: