adeptofvoltron napisał: Ale to są drobne zmiany które niczego nie naprawiają.
Uwielbiam takie stwierdzenia, zamiast pisać od początku do końca czytelnie i zgodnie z sztuką, to przesłaniasz faktyczny problem takim "brzydkim" opisem HDL. Po co
reset albo
tcq ? I tak dalej, przyciemnia to sprawę...
variable licznik :integer; - integer domyślnie to jest 32 bitowy rejestr, marnujesz niepotrzebnie zasoby logiki programowalnej. Mądry syntezer zoptymalizuje ten babol, ale następnym razem ograniczaj zakres za pomocą
range x to y, albo najlepiej korzystaj tylko z
std_logic_vector.
signal tmp :std_logic; - inicjalizuj takie sygnały, bo w symulacji wyjdą Ci same X, a to świadczy że na pewno nie zrobiłeś symulacji, to byś wiedział co masz źle. Domyślnie większość narzędzi inicjalizuje w FPGA wartością '0'.
clk'event and clk = '1' - używaj
rising_edge, to robi różnicę w symulacji, zwiększa czytelność.
tmp <= not tmp; - wiesz co właśnie stworzyłeś ? Generator ! Czyli jak będzie w tym stanie, to wartość tmp będzie się zmieniała z jego maksymalnym opóźnieniem. Czyli jak czas propagacji bramki NOT (inwerter) wyniesie pojedyncze ns, to otrzymasz jakieś kilkanaście MHz ! Raczej nie zobaczysz tego na LED. Tu leży główna przyczyna Twojego problemu
(licznik<StartTime) - typowe myślenie programisty, marnujesz znowu zasoby. Wystarczy samo
=.
when others - wstaw
adeptofvoltron napisał: Wydaje sie prosty automat stanu, jak chce go przetestowac ...
Najpierw piszemy testbench, uruchamiamy
symulator, a później wrzucamy bitsream do FPGA, a nie pomijamy tego etapu...