Bonjour a tous,
Je suis étudiant et dans le cadre d'un cours d’Électronique numérique, je suis amené a réaliser un projet en Vhdl pour ensuite mettre çà sur Cpld et faire le montage. Mon projet concerne un jeu de blackjack avec deux joueurs qui jouent l'un contre l'autre.
Quand je simule, mon code tourne mais ne fais pas ce que j’attends de lui..
J'ai un compteur, et une série de bouton poussoir pour que le joueur demande un carte, passe, ou reset.
Quand lance mon programme et que je le simule dans active-HDl, je demande une carte pour mon premier joueur, celui ci en reçoit une et puis plus rien ne se passe.
Ce qui est bizarre, c'est que la carte que mon joueur reçoit est censée être la valeur du compteur, or quand celle ci est a 2 mon joueur reçoit 17.. De plus mon jeu est censer s’arrêter lorsque le joueur dépasse 21, or ici il s'arette alors qu'il a 17...
Je me suis dit que c'était peut-être dans l'addition de mes vecteurs (joueur_1<=joueur_1+S_cnt) ou je ne sais quoi..
Si jamais quelqu'un aurait une solution, je le remercie mille fois d'avance
Je vous met mon code en dessous..
SI j'amais je me suis tromper de section dans le forum, je m'excuse..
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use ieee.numeric_std.all ;
Entity BJ is port(
CLK, B1_start, B2_start,B1_end, B2_end, clear: in std_logic ;
J1,J2ut std_logic_vector ( 4 downto 0 )
);
end BJ;
Architecture Arch_BJ of BJ is
-- attributions des pins selon SYNPLIFY sous ispLEVER
signal etat_joueur,y,x,B1_stop,B2_sto p :std_logic;
signal S_CNT:std_logic_vector(4 downto 0);
signal joueur_1,joueur_2:std_logic_ve ctor(4 downto 0);
-- process Counter
begin
process(CLK) begin
if CLK'event and CLK='1' then
if S_CNT < "01011" then-- compte de 0 à 11 seulement
S_CNT <= S_CNT +1;
else S_CNT <= "00000";
end if;
end if;
end process;
process (etat_joueur,B1_stop,B1_start, Joueur_2,B2_stop,joueur_1,B2_s tart,S_CNT,clear) begin
if clear='1' then
etat_joueur<='0';
y<='0';
x<='0';
B1_stop<='0';
B2_stop<='0';
Joueur_1<= "00000" ;
Joueur_2<= "00000" ;
J1<= "00000" ;
J2<= "00000" ;
end if;
if B1_end='1' then
B1_stop<='1';
end if;
if B2_end='1' then
B2_stop<='1';
end if;
if etat_joueur = '0' and B1_stop = '0' then
if B1_start='1' then
Joueur_1 <= Joueur_1 + S_CNT;
end if;
if Joueur_1 > "10101" then
B1_stop<='1';
B2_stop<='1';
x<='1'; ---J2 gagne
end if;
if B1_stop ='1'and x='0' then
etat_joueur<='1';
end if;
end if;
if etat_joueur = '1' and B2_stop = '0' then
if B2_start='1' then
Joueur_2<=Joueur_2 + S_CNT;
end if;
if Joueur_2> "10101" then
---J1 gagne
B1_stop<='1';
B2_stop<='1';
y<='1';
end if;
end if;
end process;
end arch_BJ ;
Merci beaucoup
-----