Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięProblem z Quartusem II (VHDL)
Moderatorzy:Jacek Bogusz, Moderatorzy
Witam.
Mam problem z zapisem wartości do pliku *.txt. W innych kompilatorach wszystko jest ok, jednak w quartusie nie mogę sobie poradzić. Poniżej przedstawiam kod, który zamiast zapisywać dane do pliku, nie robi nic.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use STD.TEXTIO.all;
entity io93 is
PORT
( CLK: IN STD_LOGIC
);
end entity io93;
ARCHITECTURE Behave OF io93 IS
TYPE Reg IS RECORD
Number : POSITIVE;
Sum : NATURAL;
END RECORD;
FILE MyFile : TEXT OPEN WRITE_MODE IS "myfile.txt";
BEGIN
PROCESS(CLK)
VARIABLE l : LINE; -- declare a line variable
VARIABLE fNumber : POSITIVE;
VARIABLE fSum : NATURAL;
BEGIN
IF CLK'EVENT AND CLK = '1' then
WRITE(l,fNumber); -- Write an element to a line ...
WRITE(l,' '); -- ... separate with a blank ...
WRITE(l,fSum); -- ... another element to the same line ...
WRITELINE(MyFile,l); -- ... and write the line to the file
end if;
END PROCESS;
END ARCHITECTURE Behave;
Może ktoś spotkał się już z tego rodzajem problemu i wie jak go rozwiązać?
Pozdrawiam.
Mam problem z zapisem wartości do pliku *.txt. W innych kompilatorach wszystko jest ok, jednak w quartusie nie mogę sobie poradzić. Poniżej przedstawiam kod, który zamiast zapisywać dane do pliku, nie robi nic.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use STD.TEXTIO.all;
entity io93 is
PORT
( CLK: IN STD_LOGIC
);
end entity io93;
ARCHITECTURE Behave OF io93 IS
TYPE Reg IS RECORD
Number : POSITIVE;
Sum : NATURAL;
END RECORD;
FILE MyFile : TEXT OPEN WRITE_MODE IS "myfile.txt";
BEGIN
PROCESS(CLK)
VARIABLE l : LINE; -- declare a line variable
VARIABLE fNumber : POSITIVE;
VARIABLE fSum : NATURAL;
BEGIN
IF CLK'EVENT AND CLK = '1' then
WRITE(l,fNumber); -- Write an element to a line ...
WRITE(l,' '); -- ... separate with a blank ...
WRITE(l,fSum); -- ... another element to the same line ...
WRITELINE(MyFile,l); -- ... and write the line to the file
end if;
END PROCESS;
END ARCHITECTURE Behave;
Może ktoś spotkał się już z tego rodzajem problemu i wie jak go rozwiązać?
Pozdrawiam.
Proszę opisz bliżej co to oznacza, w jaki sposób wykonujesz ten program w "innych" kompilatorach a w jaki w Quartusie?W innych kompilatorach wszystko jest ok,
bis
PS. Z pewna taką nieśmiałością używam określenia "program" bo "opis sprzętu" zupełnie mi nie pasuje, ale może tym razem moderator nie każe mi się zamknąć i pisać wyłącznie na privie
Już mówię.
W Quartusie poprostu nie mogę otworzyć pliku i zapisać do niego żadnych danych (to samo z odczytem), przykładowo ten "program" w (niewiem czy mogę tak nazwać) innym środowisku (użyłem Active-HDL), po przesymulowaniu i podaniu na wejście clk zegara tworzy plik "myfile.txt" i zapisuje do niego "1 0" tyle razy ile symulowanych jest cykli zegara.
Natomiast Quartus nie tworzy żadnego pliku i dane nie są zapisywane. Nie mogę zmusić go do wykonywania operacji na plikach, może mam jakieś złe ustawienia projektu, które należy zmienić (lecz do tej pory nie wiem co jest przyczyną)
PS. Masz rację, słowo opis sprzętu tutaj nie pasuje...
W Quartusie poprostu nie mogę otworzyć pliku i zapisać do niego żadnych danych (to samo z odczytem), przykładowo ten "program" w (niewiem czy mogę tak nazwać) innym środowisku (użyłem Active-HDL), po przesymulowaniu i podaniu na wejście clk zegara tworzy plik "myfile.txt" i zapisuje do niego "1 0" tyle razy ile symulowanych jest cykli zegara.
Natomiast Quartus nie tworzy żadnego pliku i dane nie są zapisywane. Nie mogę zmusić go do wykonywania operacji na plikach, może mam jakieś złe ustawienia projektu, które należy zmienić (lecz do tej pory nie wiem co jest przyczyną)
PS. Masz rację, słowo opis sprzętu tutaj nie pasuje...
Próbowałem już i tego, niestety bez powodzenia. Symulacja wywaliła warningi:
Warning (10543): VHDL Variable Declaration warning at io93.vhd(23): used default initial value for variable "fNumber" because variable was never assigned a value or an initial value expression. Use of default initial value may introduce unintended design optimizations.-- w tym miejscu można powiedzieć, że nie ma błędu, zmienna powinna przyjąć wartość domyślną
Warning (10543): VHDL Variable Declaration warning at io93.vhd(24): used default initial value for variable "fSum" because variable was never assigned a value or an initial value expression. Use of default initial value may introduce unintended design optimizations.
--jak wyżej...
Warning: Design contains 1 input pin(s) that do not drive logic. <- tylko potwierdza, że "program" nic nie robi.
PS. próbowałem nawet nie używać żadnych zmiennych, wpisałem wartość do zapisu na stałe, tak tylko żeby zapisać jakiś tekst do pliku [WRITE(l,"101001");
WRITELINE(MyFile,l);] również bez efektów.
Warning (10543): VHDL Variable Declaration warning at io93.vhd(23): used default initial value for variable "fNumber" because variable was never assigned a value or an initial value expression. Use of default initial value may introduce unintended design optimizations.-- w tym miejscu można powiedzieć, że nie ma błędu, zmienna powinna przyjąć wartość domyślną
Warning (10543): VHDL Variable Declaration warning at io93.vhd(24): used default initial value for variable "fSum" because variable was never assigned a value or an initial value expression. Use of default initial value may introduce unintended design optimizations.
--jak wyżej...
Warning: Design contains 1 input pin(s) that do not drive logic. <- tylko potwierdza, że "program" nic nie robi.
PS. próbowałem nawet nie używać żadnych zmiennych, wpisałem wartość do zapisu na stałe, tak tylko żeby zapisać jakiś tekst do pliku [WRITE(l,"101001");
WRITELINE(MyFile,l);] również bez efektów.
Może cwaniaczek optymalizując zwinął ten proces do "nic"? Może wyłaczyc optymalizację, może dodac jakiś out z tego entity. Czy Quartus ma własy symulator czy używa zewnętrzny np. ModelSim albo inny?Warning: Design contains 1 input pin(s) that do not drive logic. tylko potwierdza, że "program" nic nie robi.
bis
Niestety zaden z klasycznych syntezerow VHDL nie poradzi sobie z tym co opisales, bo to nie jest _zaden_ system logiczny. Probujesz wyzwolic zegarem zapis do pliku, co nijak sie nie da przelozyc na schemat logiczny, a jezyk VHDL
____jest jezykiem opisu sprzetu___
i nie sluzy do programowania!
Quartus skompliuje wszystko (i wylacznie) co da sie zaimplementowac za pomoca bramek logicznych. Polecenia typu WRITE nie sa syntezowane, wiec Quartus nie ma tu zupelnie nic do roboty!
Pzdr
PZb
____jest jezykiem opisu sprzetu___
i nie sluzy do programowania!
Quartus skompliuje wszystko (i wylacznie) co da sie zaimplementowac za pomoca bramek logicznych. Polecenia typu WRITE nie sa syntezowane, wiec Quartus nie ma tu zupelnie nic do roboty!
Pzdr
PZb
A-HDL jest de facto _wylacznie_ rozbudowanym symulatorem (a raczej zestawem narzedzi do symulacji, co-projektowania i dokmuentowania projektow), a Quartus narzedziem do syntezy logicznej. Ma wbudowany symulator, ale moze on symulowac skompilowane projekty, a zeby taki projekt skompilowac, trzeba stworzyc opis zrozumialy dla narzedzi _syzntezy_.
Symulowac zapis do pliku mozna, ale - jak wspomnialem - Quartus doszukuje sie w Twoim projekcie bramek logicznych, a jak - mam nadzieje - widzisz, w opisie ich nie ma.
Postaram Ci sie pomoc, ale napisz dokladnie co chcesz uzyskac, bo nie wiem ;-)
Pzdr
PZb
Symulowac zapis do pliku mozna, ale - jak wspomnialem - Quartus doszukuje sie w Twoim projekcie bramek logicznych, a jak - mam nadzieje - widzisz, w opisie ich nie ma.
Postaram Ci sie pomoc, ale napisz dokladnie co chcesz uzyskac, bo nie wiem ;-)
Pzdr
PZb
Gruzin: nie napisałeś dokładnie co robisz. Program który napisałeś mozna wykonac jedynie w trakcie symulacji. Tak naprawdę to jest kawałek (ale niepełny) programu, napisanego w jezyku programowania VHDL do wykonania przez środowisko symulacyjne. Kompilator do syntezy w dowolnym środowisku rzeczywiście nie ma tu zastosowania bo ten kod nie jest do syntezy. Trochę dopisałem do twojego programu. Dodałem generator cykli co zapewne w ActivHDL robiłeś ręcznie. A dla pana moderatora Piotra dopisałem jeszcze jeden kawałek, tworzy on plik z tabelą pierwiastków (jak widać w standardowym języku programowania VHDL mozna je spokojnie wyliczać, choć do celów syntezy nie zawsze jest to użyteczne).
Nie piszę tego aby wywoływać dyskusję o "aksjomatach". Dla mnie jest oczywiste że VHDL jest najczęsciej używany do opisu sprzętu i syntezy układów programowalnych. Ale wtedy używa się jedynie podzbioru możliwości języka. Mówienie że VHDL jest wyłącznie do opisu sprzętu może powodować mylne przekonanie że wszystko co się napisze w tym języku musi zadziałać na np. w FPGA.
bis
Kod: Zaznacz cały
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
USE ieee.MATH_REAL.ALL;
use STD.TEXTIO.all;
ENTITY testbench IS
END testbench;
ARCHITECTURE behavior OF testbench IS
TYPE Reg IS RECORD
Number : POSITIVE;
Sum : NATURAL;
END RECORD;
FILE MyFile : TEXT OPEN WRITE_MODE IS "myfile.txt";
FILE SqrtFile : TEXT OPEN WRITE_MODE IS "sqrtfile.txt";
signal clk : std_logic;
signal numerek : real := 0.0;
BEGIN
Clocker : PROCESS
variable counter : natural := 0;
BEGIN
while counter < 100 loop
wait for 10 ns;
clk <= '0';
wait for 10 ns;
clk <= '1';
counter := counter +1;
numerek <= numerek + 1.0;
end loop;
wait; -- will wait forever
END PROCESS Clocker;
PROCESS(CLK)
VARIABLE l : LINE; -- declare a line variable
VARIABLE fNumber : POSITIVE;
VARIABLE fSum : NATURAL;
BEGIN
IF CLK'EVENT AND CLK = '1' then
WRITE(l,fNumber); -- Write an element to a line ...
WRITE(l,' '); -- ... separate with a blank ...
WRITE(l,fSum); -- ... another element to the same line ...
WRITELINE(MyFile,l); -- ... and write the line to the file
end if;
END PROCESS;
SqrtTable: PROCESS(numerek)
VARIABLE l : LINE; -- declare a line variable
BEGIN
WRITE(l,string'("pierwiastek z "));
WRITE(l,numerek,field => 5, digits => 1);
WRITE(l,string'(" to "));
WRITE(l,SQRT(numerek), digits => 5);
WRITELINE(SqrtFile,l);
END PROCESS SqrtTable;
END;
bis
To prawda, że VHDLa w pewnych okolicznościach można używać tak jak języka programowania ogólnego przeznaczenia, jednak nie jest to jego zasadniczym przeznaczeniem. Gdybyśmy sięgnęli do genezy powstania VHDL to na początku służył on do celów dokumentacji dużych systemów cyfrowych, następnie wykorzystano go do symulacji tych systemów a później również do ich syntezy (rzeczywiście do syntezy wykorzystywany jest pewien niewielki podzbiór instrukcji VHDL).
Z kolei mówienie o tym, że VHDL jest językiem programowania może wywołać mylne wrażenie, że służy on tylko do programowania. Tymczasem języki programowania nie umożliwiają opisywania funkcji, struktury oraz parametrów projektowanego sprzętu, co w VHDL jest jednym z zasadniczych celów. Stosowanie pojęcia "język programowania" w odniesieniu do VHDL jest więc jakby zawężaniem jego możliwości i nie oddaje w pełni istoty języka. Skoro sam powiadasz, że VHDL używany jest najczęściej do opisu sprzętu, to czyż chociażby ze względu na częstość tego typu zastosowań nie byłoby znacznie bardziej uzasadnione używanie pojęcia "język opisu sprzętu"??
Z kolei mówienie o tym, że VHDL jest językiem programowania może wywołać mylne wrażenie, że służy on tylko do programowania. Tymczasem języki programowania nie umożliwiają opisywania funkcji, struktury oraz parametrów projektowanego sprzętu, co w VHDL jest jednym z zasadniczych celów. Stosowanie pojęcia "język programowania" w odniesieniu do VHDL jest więc jakby zawężaniem jego możliwości i nie oddaje w pełni istoty języka. Skoro sam powiadasz, że VHDL używany jest najczęściej do opisu sprzętu, to czyż chociażby ze względu na częstość tego typu zastosowań nie byłoby znacznie bardziej uzasadnione używanie pojęcia "język opisu sprzętu"??
W normalnej pracy projektowej (np. jakaś konstrukcja z FPGA) definiuje sie, za pomocą jezyka VHDL opis jego działania w celu syntezy i wtedy używamy VHDL do opisu sprzętu. Ale zaraz potem (a w zasadzie równolegle do tej pracy) przygotowuje się oprogramowanie, dla wirtualnego urządzenia jakim jest symulator. To oprogramowanie jest opisem algorytmu/sposobu w jaki ten symulator ma zadziałać. Ten algorym piszę w jezyku programowania dla tego wirtualnego urządzenia (symulatora) jakim jest VHDL. W tym oprogramowaniu używam nieporównanie wiecej konstrukcji języka VHDL, a wiele z nich jest wręcz nie do zastosowania w części projektu która jest jedynie opisem sprzętu. Obie te prace wykonuje się równolegle w trakcie trwania projektu. Skoro "opis sprzętu" używa jedynie podzbioru możliwości języka to jak można zawężać jego opis wyłącznie do tego. Jak tłumaczysz że w "opisie sprzętu do syntezy" nie bardzo można użyć "wait until..for.." albo "after".Skoro sam powiadasz, że VHDL używany jest najczęściej do opisu sprzętu, to czyż chociażby ze względu na częstość tego typu zastosowań nie byłoby znacznie bardziej uzasadnione używanie pojęcia "język opisu sprzętu"??
bis
Owszem, ale zwróćmy uwagę do czego została w zamyśle projektantów stworzona pozostała, niesyntezowalna część języka. Czy do tego, aby realizować typowe algorytmy programowania typu chociażby sortowanie bąbelkowe, czy też po to by opisywać zachowanie otoczenia symulowanego sprzętu?? Skoro zgadzamy się, że raczej do drugiego z wymienionych celów, oznacza to, że cały czas w centrum naszej uwagi jest sprzęt, nie zaś programowanie. Dlatego też całkowicie uzasadnione wydaje mi się pojęcie VHDL jako języka opisu sprzętu. Jednak nie wyklucza to, że w pewnych przypadkach VHDL używamy w sposób bardziej przypominający programowanie niż literalnie traktowane opisywanie sprzętu.
Bis: Mój problem polega na tym, zaimplementowałem zachowanie sprzętu, na wyjściu układu pojawiają się wartości i te wartości chciałbym "zrzucić" do pliku w celu dalszej obróbki, a następnie wczytać je na wejście drugiego układu... Mówisz, że jest to kawałek programu do wykonania przez środowisko symulacyjne, po wykonaniu symulacji niestety plik nie zostaje utworzony (i to jest mój główny problem).
Szkoda że nie odezwał się żaden użytkownik Quartusa. Jak rozumiem masz jakiś projekt w VHDL i można go potraktować jako "czarną skrzynkę" która chcesz stymulować na wejściach i zapisać stany wyjsć do pliku. Pogrzebałem w necie. Na mój gust to ten symulator nie pozwala na przygotowanie symulacji w VHDL. symuluje wyłącznie netlisty po syntezie układu a tam już nie ma takich bajerów jak "writeln" i reszta. Masz tylko inne, gotowe formaty zapisu zmiennosci sygnałów.
http://www.altera.com/literature/hb/qts ... i53017.pdf
Ale na szczęście są inne możliwości. Jeżeli dobrze zrozumiałem to nawet do WebEdition Quartusa jest możliwość pobrania i stosowania okrojonego symulatora ModelSim, a ten to już inna bajka, normalnie w VHDL przygotujesz sobie wszystko zarówno dla modelu funkcjonalnego jak i post-synthesis a nawet gate-level timing. poczytaj to:
http://www.altera.com/literature/hb/qts ... i53001.pdf
bis
http://www.altera.com/literature/hb/qts ... i53017.pdf
Ale na szczęście są inne możliwości. Jeżeli dobrze zrozumiałem to nawet do WebEdition Quartusa jest możliwość pobrania i stosowania okrojonego symulatora ModelSim, a ten to już inna bajka, normalnie w VHDL przygotujesz sobie wszystko zarówno dla modelu funkcjonalnego jak i post-synthesis a nawet gate-level timing. poczytaj to:
http://www.altera.com/literature/hb/qts ... i53001.pdf
bis
Z satysfakcja stwierdzam, ze moje wyjasnienie, ze Quartus jest narzedziem do syntezy logicznej i symulacji uzyskanych wynikow (czyli sprzetu) i nie potrafi symulowac "ukladu", ktory sklada sie wylacznie z polecenia zapisu tekstu do pliku, zostal potwierdzony przez bisa. Tylko po co szukac w necie, kiedy wystarczy zrozumiec post?
Tak czy inaczej: powodzenia w dalszym pisaniu programow dla PLD!
Propozycja z poprzedniego watku otwarta!
;-)
Pzdr
PZb
Tak czy inaczej: powodzenia w dalszym pisaniu programow dla PLD!
Propozycja z poprzedniego watku otwarta!
;-)
Pzdr
PZb
gruzin: z symulacja opisana w VHDL Quartus II sam sobie nie radzi. Zapewne swoj plik VHDL "wkladasz" do projektu quartusowego i probujesz skompilowac (za pomoca fioletowego trojkacika lub Processing>Start Compilation). Jesli korzystales z kreatora projektu, to zapewne zauwazyles, ze Quartus zacheca do korzystania z zewnetrznych symulatorow (w Helpie jest szczegolowo wyjasnione dlaczego).
Quartus - jako narzedzie do syntezy logicznej - nic z Twoim opisem zrobic nie potrafi, bo szuka w nim bramek! Z kolei symulator Quartusa jest niemal zywcem wziety z MAX+Plus II co oznacza, ze symuluje zachowanie list polaczen zsyntezowanych ukladow (skladajacych sie z bramek, ktorych w Twoim opisie nie ma).
Jezeli chcesz przeprowadzic symulacje projektu zaimplementowanego w Quartusie, to musisz go zsyntezowac (j.w.) i skorzystac z ModelSima (dostepny w wersji okrojonej bezplatnie na stronie Altery) lub czegokolwiek innego zgodnego z VHDL93. Jezeli nie zalezy Ci na ewaluacji czasow propagacji, takich narzedzi mozna znalezc w Internecie co najmniej kilka.
Pzdr
PZb
Quartus - jako narzedzie do syntezy logicznej - nic z Twoim opisem zrobic nie potrafi, bo szuka w nim bramek! Z kolei symulator Quartusa jest niemal zywcem wziety z MAX+Plus II co oznacza, ze symuluje zachowanie list polaczen zsyntezowanych ukladow (skladajacych sie z bramek, ktorych w Twoim opisie nie ma).
Jezeli chcesz przeprowadzic symulacje projektu zaimplementowanego w Quartusie, to musisz go zsyntezowac (j.w.) i skorzystac z ModelSima (dostepny w wersji okrojonej bezplatnie na stronie Altery) lub czegokolwiek innego zgodnego z VHDL93. Jezeli nie zalezy Ci na ewaluacji czasow propagacji, takich narzedzi mozna znalezc w Internecie co najmniej kilka.
Pzdr
PZb
Mówcie model sim, jednak niewiem jak go użyć, gdyż projekt w quartusie składa się z 5 plików *.vhd, do każdego stworzyłem symbol i wszystkie symbole połączone są ze sobą na schemacie blokowym *.bdf, symulacja zapisana jest w formacie *.vwf
Czy naprawdę nikt nie zna opcji, żeby zapisać dane z wyjścia do pliku i podać je na wejście innego układu w quartusie, nie używając do tego innych narzędzi?
Czy naprawdę nikt nie zna opcji, żeby zapisać dane z wyjścia do pliku i podać je na wejście innego układu w quartusie, nie używając do tego innych narzędzi?
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość