code VHDL sous Quartus

code VHDL sous Quartus - Divers - Programmation

Marsh Posté le 04-02-2008 à 10:35:52    

Salut,
 
 
 
      Je suis actuellement bloqué par une erreur du logiciel Quartus, et j'aurais besoin d'un peu d'aide pour la débuger.
 
l'erreur est la suivante: " can't resolve multiple constant drivers for net "etat_suiv.ecriture1" at file *** "
 
et dans mon code VHDL si je retire une ligne je n'est plus d'erreur mais alors le code ne s'execute pas en entier.
 
Voici l'architecture du code :
 

Code :
  1. architecture Struct_LCD of LCD is
  2. type ETAT is ( ECRITURE1,ECRITURE2,ECRITURE3,ECRITURE4,VALIDATION1,VALIDATION2,VALIDATION3,VALIDATION4);
  3. Signal etat_pres, etat_suiv : ETAT := ECRITURE1;
  4. begin
  5. Process(clock)
  6. begin
  7. if(clock'event and clock = '1') then etat_suiv <= etat_pres;
  8. end if;
  9. end process;
  10. Process(etat_pres)
  11. begin
  12. case etat_pres is
  13. when ECRITURE1 =>
  14. LCD_ON<='1';
  15. LCD_Data <= x"30";
  16. LCD_EN <= '1' ;
  17. etat_suiv <=VALIDATION1;   
  18. --if I delete the previous line the error disapear but the code dont work properly.
  19. when VALIDATION1 =>
  20. LCD_EN <= '0' ;
  21. etat_suiv <=ECRITURE2;
  22.                
  23.                 .....
  24.                 ...


 
 
merci d'avance pour votre aide !

Reply

Marsh Posté le 04-02-2008 à 10:35:52   

Reply

Marsh Posté le 06-02-2008 à 15:42:48    

tu ne dois pas initialiser le registre d'état de cette manière mais plutôt dans le premier process :
if (clock'event and clock='1') then
   if (reset = '1') then
      etat_suiv <= ecriture1;
   else
      etat_suiv <= etat_pres;
   end if;
end if;
Mieux vaut ne pas initialiser un signal lors de sa déclaration, d'ailleurs certains outil s de synthèse n'en tiennent pas compte.
le signal reset ne fait pas partie de la liste de sensibilité du process dont la liste de sensibilité est constituée par clock, tu devrais d'ailleurs le nommer, ce serait plus facile.


Message édité par mcdjnaja le 06-02-2008 à 15:43:21
Reply

Marsh Posté le 08-04-2008 à 19:38:45    

Bonjour,
je commence avec le VHDL. Donc la meilleur maniere d'apprendre, c'est de commencer à coder. Apres pas mal de recherche sur le net, je me rabats sur le forum parce j'ai trouvé aucune soluce.
 
J'essaye de realiser un " Scrambler ".
 
Ce registre se compose de 15 cases de 1bit. On realise un XOR sur les cases 15 et 14, puis ce resultat passe encore dans un XOR avec un bit d'entrée puis nous donne la sortie. La sortie du premier xor sur 14 et 15 est mise dans la premiere case du registre.
Pour mieux comprendre, c'est le schéma sur wikipedia. http://en.wikipedia.org/wiki/Scram [...] domizer%29
 
 
 
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
USE ieee.numeric_std.all;
 
 
entity randomizer_test is  
port (
 clk : in std_logic;
 bit_in : in std_logic;
 bit_enab : in std_logic;
 bit_reset: in std_logic;
 bit_out: out std_logic
 );
end randomizer_test;
 
architecture arc of randomizer_test is
 
signal reg : std_logic_vector(14 downto 0):="111111111111111";
signal porte_1 : std_logic;
signal porte_2 : std_logic;
 
begin
 
 process(clk,bit_reset)
 begin
 
  if (bit_reset = '1') then
   reg<="110110101010101";
   
  elsif (rising_edge(clk) and clk='1' and bit_reset='0')   then
  if (bit_enab='1') then
  porte_1 <=  reg(14) xor reg(13);
  porte_2 <= porte_1 xor bit_in;
   
  reg(14 downto 1)<=reg(13 downto 0);
   
  reg(0)<=porte_1;
  end if;
  end if;
 end process;
 
bit_out<=porte_2;
 
end arc;
 
 
 
Donc le code ce compile bien. Mais quand je fais une simulation, et dans le registre reg, je n'ai aps du tout les bits que j'ai initialisé au depart.  
En gros mon probleme c'est que je n'arrive pas à initialiser le registre avec ces bits 110110101010101. Quelqu'un aurait une soluce? Pourrait m'eclaircir sur comment rentrer des valeurs prédéfinir dans les bits b0...B15 des le depart.
 
Merci d'avance.
                                             
 
                         
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed