Je ne sais pas vraiment si je suis dans le bon forum. Peut-être que "Hardware" conviendrait mieux ...
J'ai un petit problème : je suis en train de programmer un FPGA avec Quartus II et pour cela j'aurais besoin d'utiliser l'instruction "wait for x ns" de vhdl. Malheureusement, à chaque fois que j'essaie, le compilateur râle et me sort un message d'erreur (comme pour "wait on" d'ailleurs) :-(
Est-ce que quelqu'un sait si quartus reconnaît le 'wait for" ? Et si ce n'est pas le cas que peut-on utiliser à la place ?
Voilà, merci d'avance pour vos réponses !
(s) : un débutant un peu pommé ... :-?
P.S. : voici mon code et l'erreur qui va avec :
LIBRARY ieee;
USE ieee.std_logic_1164.all;
-- Entity Declaration
ENTITY CONTROLEUR IS
-- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE!
PORT
(
DATA : IN STD_LOGIC_VECTOR (5 downto 0);
RXF : IN STD_LOGIC ;
LED : OUT STD_LOGIC_VECTOR (5 downto 0);
RD : OUT STD_LOGIC
);
-- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE!
END CONTROLEUR;
-- Architecture Body
ARCHITECTURE CONTROLEUR_architecture OF CONTROLEUR IS
BEGIN
transfert : PROCESS
BEGIN
IF (RXF ='0')THEN
wait for 30 ns;
LED <= DATA;
wait for 20 ns;
RD <= '0';
wait for 50 ns;
RD <= '1';
END IF;
END process;
END CONTROLEUR_architecture;
messages d'erreur à la compilation :
Error (10533): VHDL Wait Statement error at CONTROLEUR.vhd(53): Wait Statement must contain condition clause with UNTIL keyword
Error (10442): VHDL Process Statement error at CONTROLEUR.vhd(50): Process Statement must contain either a sensitivity list or a Wait Statement
tu as raison, en fait quartus effectue une implantation sur une cible, il modélise les temps de traversé de toute les porte et détermine le temps critique. Je pense que tu devrait cadencé ton contrôleur par une horloge (10 ns), un reset et utilisé une machine d'état pour faire ce que tu veux faire. description rapide de la machine
Excuse moi j'ai pas trop le temps alors j'ecris vite, il ya beaucoup d'ereur dans le code qui suis mais la philosophie est la.
Bon courage
if reset etatnext <= init:
else
switch etatcurrent
case init:
LED <= '0';
RD <= '0';
IF (RXF ='0')THEN
etatnext <= etat1;
else
etatnext <= Init;
case attente30:
RD <= '0';
if(compteur >= 3) then -- incrémenté le compteur si etat = attente30 ou attente 20 ou attente 50 sinon reset le compteur
etatnext <= etat1;
else
etatnext <= attente30;
end if:
case etat1:
LED <= data
etatnext <= attente20;
case attente20:
if(compteur >= 2then -- incrémenté le compteur si etat = attente30 ou attente 20 ou attente 50 sinon reset le compteur
etatnext <= etat2
else
etatnext <= attente2;
end if:
case etat2:
RD <= '0';
...
when others:
end case;
Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois. Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.