Nie mogę uruchomić sygnał po 12 cyklach

A

aris12

Guest
hi everybody,
Jestem nowy w VHDL i staram się uruchomić sygnał po 12 cykli a następnie di uaktywnić ponownie.na przykład
start-0-0-0-0-0-0-0-0-0-0-0-0-1-0-end

Mam te błędy w ModelSim,
Błąd: Nie możliwe emtries dla Infix operatora " ".
o błędzie: Błąd typu rozwiązania Infix wyrażenie " " jak ieee.std_logic_1164.std_logic_vector typu.

może ktoś mi powiedzieć co się dzieje pls i jak mogę to naprawić?Kod:

library IEEE;

use IEEE.STD_LOGIC_1164.all;

ieee.numeric_std.all wykorzystania;- =============== Opis interfejsu ===============Jednostka COUNTER_DEC jestport (clock: in std_logic; - pozytywne krawędzi

reset: in std_logic;start: in std_logic; - rozpoczęcie procesudone_count: out std_logic - koniec procesu);

koniec COUNTER_DEC;Architektura COUNTER_DEC_RTL z COUNTER_DEC jest- =============== Sygnału HD ===============signal tmp: std_logic;

Sygnał aktywny: std_logic;

zliczające: std_logic_vector (3 downto 0);- =============== Danych o ruchu ===============zacząćSTART_COUNTER: process (clock, reset)zacząćjeśli reset = '1 'then

licznik <= (others => '0 ');

tmp <= '0 ';

aktywne <= '0 ';elsif (start = '1 'lub active = '1'), a następniejeśli clock'event i zegar = '1 'then

counter <= (licznik 1);

w przeciwnym razie

licznik <= licznik;

tmp <= tmp;

end if;

aktywne <= active start xor;

w przeciwnym razie

counter <= "0000";

tmp <= '0 ';

aktywne <= '0 ';

end if;jeżeli licznik = "1100", a następnie

tmp <= '1 ';

counter <= "0000";

aktywne <= '0 ';

w przeciwnym razie

tmp <= '0 ';

end if;

done_count <= tmp;end process;COUNTER_DEC_RTL końca;
 
' ' Błąd składni jest łatwe.Możesz dodać wartości liczbowe, a nie wartości bitowe."1" to sygnał nieco, nie mogą być dodawane.

Używasz numeric_std pakiet, więc musisz określić swój licznik jak niepodpisane nie jak std_logic_vector.
Niezależni sygnały można zwiększyć przez dodanie 1.
Kod:

licznik <= licznik 1;
 
FVM dziękować u bardzo za odpowiedź.
You are right.Kiedyś "podpisany" oraz kompilacji complited pomyślnie.złe jest to, że nie robi tego, co chciałem ..

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Uśmiechać się" border="0" />

<img src="http://images.elektroda.net/17_1214589189_thumb.jpg" border="0" alt="i can't activate a signal after 12 cycles" title="Nie mogę uruchomić sygnał po 12 cyklach"/> Kod:- ================================================ ===========================

- Projekt: COUNTER_DEC

- Przeznaczenie: blok po 12 zegary aktywować wyjście dla jednego impulsu.

- ================================================ ===========================library IEEE;

use IEEE.STD_LOGIC_1164.all;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

- wykorzystanie ieee.numeric_std.all;- ================ Opis interfejsu ================Jednostka COUNTER_DEC jestport (clock: in std_logic; - pozytywne krawędzi

reset: in std_logic;start: in std_logic; - rozpoczęcie procesudone_count: out std_logic - koniec procesu);

koniec COUNTER_DEC;Architektura COUNTER_DEC_RTL z COUNTER_DEC jest- ================ Sygnału HD ================signal tmp: std_logic;

Sygnał Aktywność1: STD_LOGIC;

zliczające: std_logic_vector (3 downto 0);

- Sygnał new_counter: std_logic_vector (3 downto 0);- ================ Danych o ruchu ================zacząćSTART_COUNTER: process (clock, reset)zacząćjeśli reset = '1 'thenjeśli reset = '1 'then

licznik <= (others => '0 ');

tmp <= '0 ';

Aktywność1 <= '0 ';elsif (start = '1 'lub Aktywność1 = '1'), a następniejeśli clock'event i zegar = '1 'then

licznik <= licznik 1;

w przeciwnym razie

licznik <= licznik;

tmp <= tmp;

end if;

Aktywność1 <= Aktywność1 lub rozpocząć;- inne

- Licznik <= "0000";

- Tmp <= '0 ';

- Aktywność1 <= '0 ';

end if;

end if;jeżeli licznik = "0001", a następnie

tmp <= '1 ';

counter <= "0000";

Aktywność1 <= '0 ';

w przeciwnym razie

tmp <= '0 ';

end if;

done_count <= tmp;end process;COUNTER_DEC_RTL końca;

 
Używasz zachowania kodu, który nie jest synthesizable w FPGA.Może być stosowana w ony symulacji.Książek, to konsultacje, najwyraźniej nie koncentrują się na to istotna różnica.

Ani zegar wrażliwych oświadczenie czekać w pętli, ani zegara wrażliwe oświadczenie o przeciwnej krawędzi są synthesizable kod, niestety.(można używać różnych krawędzi w procesie lub w spearate procesów, ale aby ten sam sygnał).

Powodem tego ograniczenia jest dość prosty i zrozumiały dla mojej opinii.Logika rdzenia FPGA jest oparta na bramach i flip-flops.Są mniejsze różnice między rodzinami FPGA, ale w zasadzie, flip flops mają asynchroniczny (zawsze reset, czasami ustawić synchroniczne i obciążenia) i synchronicznych funkcji.Synchronicznych z wykorzystaniem funkcji jest krawędź wrażliwe wejście zegara, przez odwrócenie zegara, może działać na othe krawędzi.Nie ma nic, które pozwoliłyby na próbkę sygnału na obu brzegach.

W rzeczywistości jest logika jest bardzo prosta.Może być napisany prostym

Kod:

jeśli reset = '1 'then

licznik <= (others => '0 ');

done_count <= '0 ';

elsif rising_edge (zegar), a następnie

jeżeli licznik> = 12 to

counter <= "0000";

done_count <= '1 ';

elsif counter> 0 lub start = '1 'then

licznik <= licznik 1;

done_count <= '0 ';

w przeciwnym razie

counter <= "0000";

done_count <= '0 ';

end if;

end if;
 
FVM ur my hero

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Uśmiechać się" border="0" />

thank u man.to działa.
Zrozumiałem u wszystko powiedział.thank u.Spędzam tyle czasu, starając się procedur, funkcji i wiele wiele innych rzeczy, aby to działało

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Uśmiechać się" border="0" />
<img src="http://images.elektroda.net/38_1214609049_thumb.jpg" border="0" alt="i can't activate a signal after 12 cycles" title="Nie mogę uruchomić sygnał po 12 cyklach"/> Można u też zaproponować mi dobry przewodnik dla VHDL bo staram się używać operatorów przesunięcia i mam błędów ponownie

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Uśmiechać się" border="0" />używam i
ieee.numeric_std.all;
IEEE.NUMERIC_BIT;
i napisać na przykład,
test <= rol licznika 1;
gdzie badania i counder są "std_logic_vector (3 downto 0);".
Błąd: nie można ustalić definicję operatora "ROL" - znaleziono 0 możliwych definicji

 
Nie wiem, określonej książki VHDL, choć są na pewno dużo_Osobiście używam Streszczenie podręcznik dla odniesienia http://www.cse.unsw.edu.au/ ~ cs3211/refs/vhdl1.pdf
http://www.cse.unsw.edu.au/ ~ cs3211/refs/vhdl2.pdf,
czasem nawet ze specyfikacją IEEE, choć nie jest to wygodne literatury, ale kilka użytecznych konstrukcji nie są wymienione w innej literatury.

W odniesieniu do podmiotów gospodarczych na zmiany, jakie zostały określone w opakowaniach, składni i dostępność zależy od tego, które są przywożone.Osobiście preferuję ogólnych wyrażeń VHDL zamiast:
Kod:

test <= count (2 downto 0) & count (3);
 
dzięki jeszcze raz.Zrobiłem go na swój sposób.
i wygląda szczegółowe instrukcje.
thnx

 

Welcome to EDABoard.com

Sponsor

Back
Top