- IMPORTANT - Problème de prog sous Quartus II

Electronique numérique / Circuits logiques programmables EPLD, CPLD, FPGA d'Altera ou de Xilinx VHDL, Verilog ou SystemC

Modérateur : Modérateur

Cain77

- IMPORTANT - Problème de prog sous Quartus II

Message par Cain77 »

Je suis étudiant en 2ème année de DUT GEII. J ai un prjet de stage et je dois faire appel à un CPLD que je programmerais par le JTAG pour qu il soit implanté une fois pour toute dans le système.
A l'origine j utilisais Warp de chez Cypress mais étant donné qu'il non pas beaucoups de fournisseur j'ai du migrer vers Altera.

Description du projet :

Mon projet est de faire une commande unipolaire/bipolaire pour un moteur. Le code (en VHDL) comporte 3 modes distincs 00/10/10, pour les modes 1 et 2 il y a un compteur, pour le mode 3 c est un compteur/decompteur.
Il y a une entrée sur 8 bits qui nous permet de recuperer un valeur annalogique via un CAN cette entrée (E ou data) et comparé au compeur (8 bits aussi) et selon que cette valeur est superieur ou inferieur à la vealeur du compeur la sortie "s1" vaudra 0 ou 1 ensuite on a "s2" qui est le complément de "s1" mais seulement pour le mode 1 (00) car pour le mode 2 et 3 "s2" reprend le meme principe que pour "s1" mais on compare la valeur du compteur au complément de la valeur du CAN.
J oubliait aussi, il y a une sortie "can" elle permet de raffréchir la conversion du CAN ce-ci ne se fait qu'à chaque fois que le compteur arrive à zero et ne dure qu un temps d'horloge pour le momment.

Position du problème :

D'onc mon programme marchait très bien sous Warp, compilation, simu, tout etait OK. Mais au passage sous Quartus II le prog ne marchait plus, pire encore maintenant que je prend un peu le logiciel en main je fais planter celui-ci. Le problème se situe, semble t il au niveau de l entrée qui donne les valeurs du CAN que je le définise en tant que vecteur ou integer, rien ne change de plud je n arrive pas de toute façon a faire des calculs arithmétique entre vecteur donc c'est réglé. Donc essayez de voir ce que vous pourvez faire moi je suis bloqué, mais je dois continué de chercher.

Merci a tous j ai vraiment besoin d aide
Cain77

Voici le code sous Warp

Message par Cain77 »

Voici donc le code que j avais sous Warp de chez Cypress, et qui marchait trés bien.

-----------------------------------------------------------------------------------

LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE work.std_arith.all;

---------------------------

entity commande is

port ( h :in std_logic;
S1 : inout std_logic;
S2,can : out std_logic;
MODE :in std_logic_vector(1 downto 0);
E :in std_logic_vector(7 downto 0);
Q :buffer std_logic_vector(7 downto 0));

end commande;

---------------------------

architecture ARCH_commande of commande is

signal X :std_logic_vector(7 downto 0);
signal Xbar :std_logic_vector(7 downto 0);
signal Y :std_logic;

begin

process(h)
begin
if (h'event and h='1')
then if (Q="00000000")
then X<=E;
Xbar<=(not E);
can<='1';
else can<='0';
end if;

if (MODE="00")
then Q <= Q + 1;
if (Q<X)
then s1<='0';
else s1<='1';
end if;
s2<=(not s1);

elsif (MODE="01")
then Q<=Q+1;
if (Q<X)
then s1<='0';
else s1<='1';
end if;

if (Q<Xbar)
then s2<='0';
else s2<='1';
end if;

elsif (MODE="10")
then If (Q="0000001")
then Y<='0';
end if;

If (Q="11111110")
then Y<='1';
end if;

if (Y='0')
then Q<=Q+1;
else Q<=Q-1;
end if;

if (Q<X)
then s1<='0';
else s1<='1';
end if;

if (Q<Xbar)
then s2<='0';
else s2<='1';
end if;

end if;
end if;
end process;

end ARCH_commande;
Cain77

Voici le code que j ai mis a jours sous quartus II

Message par Cain77 »

LIBRARY ieee;
USE ieee.std_logic_1164.all;

---------------------------

entity commande is

port
(
h :in std_logic;
S1 : inout std_logic;
S2,can : out std_logic;
MODE :in std_logic_vector(1 downto 0);
E : in INTEGER RANGE 0 TO 255;
Q : inout INTEGER RANGE 0 TO 255
);

end commande;

---------------------------

architecture ARCH_commande of commande is

signal X :INTEGER RANGE 0 TO 255;
signal Xbar :INTEGER RANGE 0 TO 255;
signal Y :std_logic;

begin

process(h)
begin
if (h'event and h='1')
then if (Q=0)
then X<=E;
Xbar<=(255 - E);
can<='1';
else can<='0';
end if;

if (MODE="00")
then Q <= Q + 1;
if (Q<X)
then s1<='0';
else s1<='1';
end if;
s2<=(not s1);

elsif (MODE="01")
then Q<=Q+1;
if (Q<X)
then s1<='0';
else s1<='1';
end if;

if (Q<Xbar)
then s2<='0';
else s2<='1';
end if;

elsif (MODE="10")
then If (Q=1)
then Y<='0';
end if;

If (Q=254)
then Y<='1';
end if;

if (Y='0')
then Q<=Q+1;
else Q<=Q-1;
end if;

if (Q<X)
then s1<='0';
else s1<='1';
end if;

if (Q<Xbar)
then s2<='0';
else s2<='1';
end if;

end if;
end if;
end process;

end ARCH_commande;
JP
Administrateur
Administrateur
Messages : 2328
Inscription : 23 sept. 2003 19:14
Localisation : Strasbourg
Contact :

Message par JP »

Salut Cain77,
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use IEEE.NUMERIC_STD.ALL;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_unsigned.all;
J'ai repris ton programme sous Warp et j'ai changé les librairies pour qu’elles soient adaptées à Quartus II.
Je n'ai aucunes d'erreurs.

Essayes et tiens nous au courant.

PS: Il y a une fonction pièce jointe sur le forum n'hésites pas à l'utiliser pour tout ce qui est long fichier de code ;)

a+
JP
Avatar de l’utilisateur
vincevg
ACCRO
ACCRO
Messages : 803
Inscription : 05 mars 2005 16:58
Localisation : SMalville
Contact :

Message par vincevg »

Perso je préfère que le code sois dans le message ça permet de le lire sans rien ouvrir d'autre.
Vince
http://anyedit.free.fr/
http://electropol.free.fr/

Les amis, ça va, ça vient, mais les ennemis, ça s’accumule.
Cain77

Sa marche

Message par Cain77 »

Finalement sa marche !
En faite le bp c'est que j'imposais une fréquence d'hologe trop élevée.

Parcontre je voudrais bien que tu m'explique rappidement les correspondances des diffèrentes libraries en particulier IEEE.STD_LOGIC_unsigned.all .

De plus je vien d'apprendre que je vais devoir faire une notice d'utilistion du logiciel "Quartus II" pour toutes les fontions de bases, je ne me fais pas trop de soucis à ce sujet mais parcontre je me pause des question en ce qui concerne le JTAG :

- Lors de la programmation le CPLD ne dois pas recevoir d info sur les entrées ou pas.

-Es ce que je dois mettre un switch pour isoler les entrés du JTAG du CPLD pour qu elle soit directement reliées à la carte de programmation.


Voilà c'est à peu prés tous ce que j ai comme question pour le momment mais bien d autres suiveront avec l'arrivée de tous mes composants cette semaine.

Merci pour ton aide et ta rappidité JP :-D
JP
Administrateur
Administrateur
Messages : 2328
Inscription : 23 sept. 2003 19:14
Localisation : Strasbourg
Contact :

Message par JP »

Parcontre je voudrais bien que tu m'explique rappidement les correspondances des diffèrentes libraries en particulier IEEE.STD_LOGIC_unsigned.all .
Apparement, c'est une librairie qui va de paire avec LOGIC_ARITH.
Il faut utiliser STD_LOGIC_signed si tes calculs portent sur des nombres signés.
De plus je vien d'apprendre que je vais devoir faire une notice d'utilistion du logiciel "Quartus II" pour toutes les fontions de bases, je ne me fais pas trop de soucis à ce sujet mais parcontre je me pause des question en ce qui concerne le JTAG :
Si ça peut un peu te simplifier le travail : http://www.jelectronique.com/modules/ne ... storyid=27

- Lors de la programmation le CPLD ne dois pas recevoir d info sur les entrées ou pas.

-Es ce que je dois mettre un switch pour isoler les entrés du JTAG du CPLD pour qu elle soit directement reliées à la carte de programmation.
Je sais pas, désolé. Je débute et je ne me suis pas encore posé cette question :) Peut être que dans une doc sur le JTAG, sur le site d'Altera.
Merci pour ton aide et ta rappidité JP
De rien :-D
Cain77

Message par Cain77 »

Donc quelque nouvelles du projet. Pour le momment sa avance bien, j ai fini mon programmateur, j ai reçu tous mes composants :P ; CAN (temps de conversion 3.6us 8) ), Buffer, CPLDs, ...
Je vien également de finir mon typon pour ma plaque d'essai, elle sera faite pr aujourd hui ou demain. Donc c'est pour bientot le momment fatidique de la programmation du CPLD à savoir un 7064S en 44 pins.

Je vous tiendrais au courant de la suite!
Bye
Cain77

JP à l aide !!!

Message par Cain77 »

Salut, j ai encore un pb maintenant, je ne sais pas si il est serieux mais en tous cas je n'arrive pas à programmer mon CPLS :cry: !!!
C'est un 7064SLC44-10, j ai installé les drivers windows 2000 pour mon programmateur, a savoir le byteblaster 2, bah le même que pour la Porte AND que tu as fais JP. Mais je ne sais pas j ai connecté le JTAG tout bien mais il ne le reconnais pas. En plus j avais fais une connerie sur ma plaque d essai puis que je m'etais planté sur les pattes, la catta quoi !!! Donc je pense que j ai cramé un CPLD :cry: donc j ai fini par refaire tout le support avec un plaque à straper. Si tu pouvais m'expliquer comment tu as fais pour faire marcher le Programmer avec le programmateur sa m aiderait beaucoups

Merci
JP
Administrateur
Administrateur
Messages : 2328
Inscription : 23 sept. 2003 19:14
Localisation : Strasbourg
Contact :

Message par JP »

j ai installé les drivers windows 2000 pour mon programmateur, a savoir le byteblaster 2
Bizarre je n'ai pas besoin de driver.

Pour le programmateur j'utilise celui-ci :
http://perso.wanadoo.fr/loicmarty/intro_vhdl/vhdl_1.htm

Et je me suis fais une petite plaquette avec un connecteur de programmation.
Pièces jointes
jtag.gif
jtag.gif (29.36 Kio) Consulté 7335 fois
Répondre