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

"Zmienne globalne" w VHDL oraz ich modyfikacja pop

marekw2143 17 Kwi 2008 23:02 2799 5
REKLAMA
  • #1 5042577
    marekw2143
    Poziom 10  
    Posty: 17
    Witam

    Jak się w vhdl'u deklaruje C++'owy odpowiednik zmiennej globalnej? Chciałbym mieć kilka procesów które w identycznej jednostce czasu będą potrafiły odczytać zawartość owej "globalnej" zmiennej.

    Jak można poprzez port rs232 zmodyfikować zawartość takiej "zmiennej"?

    Pozdrawiam, Marek
  • REKLAMA
  • #2 5042907
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 240
    Nie ma czegoś takiego w VHDL, są jedynie możliwe zmienne "lokalne" w modułach. Jeśli chciałbyś zrobić jakiś globalny rejestr to musisz umieścić go w którymś module i połączyć moduły w taki sposób aby oprócz wartości zmiennej były przekazywane informacje o zapisie (np sygnał). Jeśli chciałbyś zmieniać zmienną w kilku różnych modułach konieczne jest zaprojektowanie jakiegoś mechanizmu arbitrażu. W Twoim przypadku myślę że jest to zbędne, zaprojektuj taki moduł "komunikacyjny" aby miał w sobie rejestr (lub więcej) który będzie uaktualniany przez rs232 i będzie podłączony do wyjścia modułu.
  • REKLAMA
  • #3 5043118
    avidvx
    Poziom 12  
    Posty: 16
    Pomógł: 2
    Można pokombinować z zadeklarowaniem jakoś sygnału (lub czegokolwiek) w jakimś package-u
    Ale to jest niezalecane rozwiązanie i bardzo utrudnia potem debugowanie projektu.


    library IEEE;
    use IEEE.STD_LOGIC_1164.all;
    package package_projektu is
    signal xxx :std_logic;
    end package_projektu;
    package body package_projektu is
    end package_projektu ;


    a potem wywołanie w plikach projektu:

    library IEEE;
    use IEEE.STD_LOGIC_1164.all;
    library proj_lib;
    use proj_lib.package_projektu.all;
    entity aa is
    ...
    architecture...
    begin
    ...
    xxx <= '1';
    ...
    xxx <= '0';
    ...
    end
    ...
    library proj_lib;
    use proj_lib.package_projektu.all;
    entity bb is
    ...
    xxx <= '0';
    ...
    xxx <= '1';
    ...
    end;
  • REKLAMA
  • #4 5043300
    J.A
    Poziom 28  
    Posty: 596
    Pomógł: 159
    Ocena: 12
    marekw2143 napisał:
    Jak się w vhdl'u deklaruje C++'owy odpowiednik zmiennej globalnej

    vhdl to nie jest odpowiednik c++, a fpga to nie odpowiednik uC;
    im szybciej pozbedziesz sie chetki programowania fpga na podobienstwo
    procesora, tym mniej stresow cie czeka;
    jak to powinno sie zrobic napisal elektryk, choc w taki sposob,
    ze poczatkujacemu chyba trudno cos z tego zrozumiec ... :);
    avidvx napisał:
    Można pokombinować z zadeklarowaniem jakoś sygnału (lub czegokolwiek)
    w jakimś package-u/.../ Ale to jest niezalecane rozwiązanie

    nie zalecane, a przede wszystkim bledne;
    kazdy kompilator wywali sie z bledem, ze sygnal jest sterowany
    z kilku zrodel;
    mozna by tak ewentualnie, gdyby tylko jeden modul 'pisal' do xxx,
    a reszta jedynie 'czytala';

    J.A
  • REKLAMA
  • #5 5043437
    [g.d.]
    Poziom 18  
    Posty: 174
    Pomógł: 31
    avidvx napisał:
    Chciałbym mieć kilka procesów które...

    W jakim sensie procesów? W vhdl process to słowo kluczowe.:D

    avidvx napisał:
    Można pokombinować z zadeklarowaniem jakoś sygnału (lub czegokolwiek) w jakimś package-u
    Ale to jest niezalecane rozwiązanie i bardzo utrudnia potem debugowanie projektu.

    (jedynie sygnału)To jest mechanizm najbardziej podobny do zmiennej globalnej i tak samo niezalecany jak zmienne globalne w C++. :D

    marekw2143 napisał:

    Jak można poprzez port rs232 zmodyfikować zawartość takiej "zmiennej"?

    Najpierw musisz sobie napisać swój "rs232"(abstrahując od tego że to standard napięć) w vhdl-u, a potem to już z górki, poprostu przypisanie w vhdl-u robisz i już. :D

    J.A napisał:

    nie zalecane, a przede wszystkim bledne;
    kazdy kompilator wywali sie z bledem, ze sygnal jest sterowany
    z kilku zrodel;

    Jeśli typ będzie posiadał "funkcje rezolucji" to dopiero synteza wywali błąd. ;)

    J.A napisał:

    mozna by tak ewentualnie, gdyby tylko jeden modul 'pisal' do xxx,
    a reszta jedynie 'czytala';

    O to chyba koledze chodzi, tyle że koncepcja portów w vhdl jest mu równie obca jak mechanizm dziedziczenia czy kompozycji w C++. :|
  • #6 5054670
    marekw2143
    Poziom 10  
    Posty: 17
    [g.d.] napisał:

    W jakim sensie procesów? W vhdl process to słowo kluczowe.:D

    W sensie takim zeby te kilka procesow (wykonujacych te same obliczenia jednak na innych danych) dzialalo rownolegle. Z tego co wiem, to wlasnie slowo kluczowe process umozliwia tworzenie takich "procesow".


    [g.d.] napisał:

    Najpierw musisz sobie napisać swój "rs232"(abstrahując od tego że to standard napięć) w vhdl-u, a potem to już z górki, poprostu przypisanie w vhdl-u robisz i już. :D

    Czy istnieja jakies gotowe rozwiazania do zapisywania danych do fpga przez port szeregowy (RS-232)? W koncu przesylanie danych do i z fpga to dosyc istotna sprawa.
REKLAMA