sbRIO - jak podzielić dwie liczby

Tematy związane z LabVIEW FPGA oraz programowaniem układów.
mrrudzin
Posty: 15
Rejestracja: 30 maja 2006 00:00

sbRIO - jak podzielić dwie liczby

Post autor: mrrudzin »

Wpadł mi w ręce sbRIO (9361) (i labView 8.6). Próbuje stworzyć pierwszą aplikacje - ale mam poważny problem z podzielieniem przez siebie dwóch liczb całkowitych. Dokładniej - aplikacja odmawia przekazania sygnału z wyniku mnożenia. Szczerze mówiąc wystarczy mi w zupełności całkowita część wyniku z dzielenia, ale nie mam pojęcia czy i jak można to ustawić. Próbowałem od razu skonwertować wynik dzielenia na integeer-a - niestety połączenie jest "not supported". Czy ta platforma umożliwia wogóle wykonanie takiego działania? Jeśli tak - jak się za to zabrać?
Ostatnio zmieniony 11 sty 2009 12:20 przez mrrudzin, łącznie zmieniany 1 raz.
Awatar użytkownika
wino
Posty: 549
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

Re: sbRIO - jak podzielić dwie liczby

Post autor: wino »

Rozumiem, że tworzysz aplikację na FPGA? Nie mam zainstalowanego tego modułu, ale chyba jest tam też bloczek Numeric ->
Quotient & Remainder
. Na jago wyjściach otrzymasz całkowity wynik dzielenia i resztę z dzielenia.
Ostatnio zmieniony 11 sty 2009 12:55 przez wino, łącznie zmieniany 1 raz.
mrrudzin
Posty: 15
Rejestracja: 30 maja 2006 00:00

sbRIO - jak podzielić dwie liczby

Post autor: mrrudzin »

TAK - aplikacja na FPGA.
Poradziłem sobie troszkę inaczej. Zmieniłem format wyniku operacji dzielenia.

Ale mam kolejny problem - stworzyłem sobie VI mierzące czasy z podłączonego do płyty czujnika. Wszystko śmiga aż miło, ale chciałem wykorzystać to VI w troche większej aplikacji. Stworzyłem połączenia "ze światem zewnętrznym" i chciałem użyć tego jako subVI (tak jak TUTAJ na slajdzie 27.
Jednak program nadrzędny nie czyta mi tego co wyprowadziłem na zewnątrz (cały czas pokazuje mi 0).
Co jeszcze robie nie tak?
Awatar użytkownika
wino
Posty: 549
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

Re: sbRIO - jak podzielić dwie liczby

Post autor: wino »

Może jakoś szerzej, bo jakoś nie czaje.

Powiedz czy wszystko co robisz dzieje się na FPGA?
Czy dla ciebie "na zewnątrz" oznacza ciągle jeszcze w FPGA?
Z jakiego LV korzystasz?
Skąd wiesz, że to jest 0, widzisz to na kontrolce czy na probie?

Może zamieścisz trochę kodu?
Ostatnio zmieniony 11 sty 2009 17:10 przez wino, łącznie zmieniany 1 raz.
mrrudzin
Posty: 15
Rejestracja: 30 maja 2006 00:00

sbRIO - jak podzielić dwie liczby

Post autor: mrrudzin »

Przepraszam za taką długą przerwę.
Powiedz czy wszystko co robisz dzieje się na FPGA? Czy dla ciebie "na zewnątrz" oznacza ciągle jeszcze w FPGA?
Chciałbym poznać mechanizm wywoływania subVI zarówno z głównego VI, jak i "poza" FPGA. Nie da się ukryć że troche denerwujące jest 10 minutowe przekompilowywanie kodu po każdej zmianie. Dlatego pomyślałem o napisaniu VI w FPGA, które będzie odczytywało mi tylko stany we/wy - a resztę będę mógł testować sobie "na zewnątrz" i uruchamiać praktycznie w locie. Drugi mechanizm (subVI w FPGA) przydałby się żeby kod stał się troche bardziej przejrzysty.
Z jakiego LV korzystasz? Skąd wiesz, że to jest 0, widzisz to na kontrolce czy na probie?
Korzystam z LV 8.6, SBRIO-9631
Próbowałem tak: Ten mechanizm powinien zadziałać gdy VI z którego wywołuje f-cje jest "W FPGA" Obrazek
A jeśli VI jest "poza" FPGA - Obrazek
Na jedną z nóg mojej subVI wystawiam ciągle stałą 1206. W przypadku próby wywołania - na tej nodze (i na pozostałych) widze 0. Co robie nie tak?
Obrazek
Ostatnio zmieniony 16 sty 2009 10:16 przez mrrudzin, łącznie zmieniany 1 raz.
Awatar użytkownika
wino
Posty: 549
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

sbRIO - jak podzielić dwie liczby

Post autor: wino »

Hmm,

Może zaczniemy od definicji. Ustalmy, że "poza FPGA" to znaczy, że kod wykonywany jest w systemie RT.

Czyli VI, który wykonuje się w systemie RT jest troche źle napisany. Nie potrzebnie w każdym wywołaniu pętli otwierasz i zamykasz referencję do VI działającego na FPGA. To raz, a dwa(dlatego pewnie masz zera) nie wiem jak masz skonfigurowany VI działający na FPGA, ale poszukaj sobie funkcji od FPGA i tam znajdziesz węzeł metod, znajdź metode Run i zrób tak:

Otwórz referencję do VI na FPGA za tym podłącz węzeł z metoda Run i wejdź do pętli.
mrrudzin
Posty: 15
Rejestracja: 30 maja 2006 00:00

sbRIO - jak podzielić dwie liczby

Post autor: mrrudzin »

A system RT w moim przypadku to mój komputer :>?
Otwieraniem i zamykaniem VI zasugerowałem się po tym kawałku helpa:
You must open a reference to the FPGA target before you can communicate between the host VI and the FPGA VI. You can download and run only one FPGA VI at a time on a single FPGA target. If you attempt to download a second VI to the FPGA target while the first FPGA VI is still in use, the LabVIEW FPGA Module reports an error and the download fails.
Otwórz referencję do VI na FPGA za tym podłącz węzeł z metoda Run i wejdź do pętli.
Może kolega dorzucić screena?
Dopiero zaczynam zabawę z LV. Troche pisałem w C, dużo pisze w języku drabinkowym. Niektóre mechanizmy z LV są dla mnie narazie dziwne, ale podejrzewam że to kwestia przyzwyczajenia :)
Jak jest z wywoływaniem sub f-cji wewnątrz FPGA? (dokładniej - co jest źle w kodzie z pierwszego screena) Coś trzeba jeszcze wyklikać żeby zaczęło działać? Czy są jakiekolwiek ograniczenia jeśli chodzi o uruchamianie programów podrzędnych na poziomie FPGA?
Pytanie troche na boku Czy można w FPGA dopisywać wstawki w C? Jeśli tak - jak się za to zabrać?
Awatar użytkownika
wino
Posty: 549
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

Re: sbRIO - jak podzielić dwie liczby

Post autor: wino »

mrrudzin pisze:A system RT w moim przypadku to mój komputer :>?
Tu mnie zaskoczyłeś. Nie wiem czy ci to zadziała tak jak zrobiłeś. Wydaj mi się, że aplikację, która komunikuje się z FPGA powinieneś umieścić na procesorze, który jest na sbRIO. Ale tego nie jestem pewien, a nie moge sprawdzić, bo nie mam RIO na stanie.


Mógłbyś zamieścić screena z projektem?

Co do kodu w C na FPGA, to chyba sie nie da, ale na pewno możesz umieśćić tam kod w hdl'u.
Awatar użytkownika
wino
Posty: 549
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

Re: sbRIO - jak podzielić dwie liczby

Post autor: wino »

mrrudzin pisze:A system RT w moim przypadku to mój komputer :>?
Tu mnie zaskoczyłeś. Nie wiem czy ci to zadziała tak jak zrobiłeś. Wydaj mi się, że aplikację, która komunikuje się z FPGA powinieneś umieścić na procesorze, który jest na sbRIO. Ale tego nie jestem pewien, a nie moge sprawdzić, bo nie mam RIO na stanie.


Mógłbyś zamieścić screena z projektem?

Co do kodu w C na FPGA, to chyba sie nie da, ale na pewno możesz umieśćić tam kod w hdl'u.
mrrudzin
Posty: 15
Rejestracja: 30 maja 2006 00:00

sbRIO - jak podzielić dwie liczby

Post autor: mrrudzin »

OK - brakowało mi METHOD :)

Projekt w systemie RT najchętniej odpaliłbym na płycie SBRIO - tak zrobiłem i po poprawce wszystko śmiga aż miło :)

Jeśli dobrze zrozumiałem:
Kod wkompilowywany w FPGA powinien być jedynie odnośnikiem do we/wy. Reszta wykonuje się w systemie RT (stąd też brakowało mi wielu f-cji)
Awatar użytkownika
wino
Posty: 549
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

sbRIO - jak podzielić dwie liczby

Post autor: wino »

hmm,

prawdopodobnie sie zapędziłem troche i nie potrzebnie używasz metody RUN, bez tego też ci powinno zadziałać.
mrrudzin pisze:Kod wkompilowywany w FPGA powinien być jedynie odnośnikiem do we/wy. Reszta wykonuje się w systemie RT (stąd też brakowało mi wielu f-cji)
Nie koniecznie. Na FPGA możesz też implementować rzeczy, które mają się wykonać bardzo szybko(jakieś filtry, operacje matematyczne, itp.). Zauważ, że na FPGA jesteś w stanie zakręcić pętlą z częstotliwością 40 MHz, a na w systemie RT częstotliwości są dużo mniejsze rzędu 1kHz, może szybciej może wolniej.
mrrudzin
Posty: 15
Rejestracja: 30 maja 2006 00:00

sbRIO - jak podzielić dwie liczby

Post autor: mrrudzin »

Dziękuje za wsparcie. Nurtuje mnie jeszcze sprawa zamykania wywoływanego za pomocą READ WRITE CONTROL VI?
Problem pojawia się, gdy chce w kilku miejscach skorzystać z We/Wy.

Do VI, które wrzuciłem do FPGA odwołuje się za pomocą Read/Write control z palety FPGA interface. Ale niestety potrzebuje sterować we/wy sekwencyjnie w kilku miejscach w programie - i pojawia się problem.
Moge kilkukrotnie wywołać READ/WRITE CONTROL? Czy za każdym razem musze wywołanie zamknąć (za pomocą CLOSE FPGA VI REFERENCE)?
Jeśli przy pierwszym wywołaniu używam wyjścia A, a przy drugim B - to czy podczas drugiego wywołania stan wyjścia A pozostanie taki jak został ustawiony podczas pierwszego wywołania?
Kiedy zadziała zamykanie wywołanego VI? Po wykonaniu całego kodu w VI, czy po skompletowaniu wszystkich danych potrzebnych do uruchomienia VI?
Ostatnio zmieniony 18 sty 2009 13:57 przez mrrudzin, łącznie zmieniany 1 raz.
Awatar użytkownika
wino
Posty: 549
Rejestracja: 23 gru 2005 00:00
Wersja środowiska: Nie mam LabVIEW
Lokalizacja: Kraków

sbRIO - jak podzielić dwie liczby

Post autor: wino »

Zbuduj swój kod tak, żeby tylko w jednymi miejscu komunikować się z FPGA, a informacje o stanie we/wy "rozsyłaj" do całego programu za pomocą kolejek lub notifajerów, lub ostatecznie zmiennych globalnych.
Co do reszty pytań. Wystarczy, że na początku działania programu otworzysz referencję do VI działającego na FPGA i wtedy możesz wywołać READ?WRITE CONTROL kilkukrotnie.
ODPOWIEDZ