Page 1 sur 2

- IMPORTANT - Problème de prog sous Quartus II

Publié : 10 mai 2005 9:45
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

Voici le code sous Warp

Publié : 10 mai 2005 9:47
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;

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

Publié : 10 mai 2005 10:00
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;

Publié : 10 mai 2005 11:18
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

Publié : 10 mai 2005 11:40
par vincevg
Perso je préfère que le code sois dans le message ça permet de le lire sans rien ouvrir d'autre.

Sa marche

Publié : 10 mai 2005 16:43
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

Publié : 10 mai 2005 19:25
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

Publié : 16 mai 2005 15:02
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

JP à l aide !!!

Publié : 18 mai 2005 18:48
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

Publié : 18 mai 2005 20:01
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.