problème genérique en code VHDL

problème genérique en code VHDL - Divers - Programmation

Marsh Posté le 06-06-2014 à 00:52:15    

Bonsoir à tous ;
 
Mon programme concerne le produit de corrélation .pour 4 bits il marche  
 
Probléme : comment  faire le programme en generique  
 
j'essaye à le faire pour 8 bits mais j'ai quelques  soucis : :??:  
 
Vous pouvez m'aider si possible :
 
voici mon code :

Code :
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.numeric_std.all;
  4. entity correla is
  5. generic  (
  6.             longueur  : natural :=8 );
  7. port (
  8.          clk : in    std_logic ;
  9.          rst : in    std_logic  ;
  10.          data: in    std_logic_vector(11 downto 0)  ;
  11.           --code: in    std_logic_vector(15 downto 0 )  ;--for 4 bits
  12.          code: in    std_logic_vector((4*longueur)-1 downto 0 )  ;---for generic
  13.        
  14.             --Q   :out    std_logic_vector(17 downto 0) )  ;--for 4 bits
  15.          Q   :out   std_logic_vector((4*longueur)+1 downto 0)) ; ---for generic
  16. end entity ;
  17. architecture arch of correla  is
  18.        --type RAM is array (0 to 3) of std_logic_vector(3 downto 0) ; --for 4 bits
  19.        type RAM is array (0 to 3) of std_logic_vector(longueur-1 downto 0) ;---for generic
  20.      
  21.        --type ram16 is array (0 to 3) of signed(15 downto 0) ;--for 4 bits
  22.        type ram16 is array (0 to 3) of signed((4*longueur)-1 downto 0) ;---for generic
  23.        --type Rom is array (0 to 3) of signed(11 downto 0) ;--for 4 bits
  24.        type Rom is array (0 to 3) of signed((3*longueur)-1 downto 0) ;---for generic
  25.         signal voie :Rom ;
  26.         signal CD    : RAM;
  27.        
  28.         signal temp: ram16;
  29.      
  30.      
  31.        -- signal sum0   :signed (16 downto 0) ;
  32.          signal sum0   :signed (4*longueur  downto 0) ;---for generic
  33.         --signal sum1   :signed (16 downto 0) ;--for 4 bits
  34.         signal sum1   :signed (4*longueur downto 0) ;---for generic
  35.         --signal AB     :signed (17 downto 0) ;--for 4 bits
  36.         signal AB     :signed ((4*longueur)+1 downto 0) ;---for generic
  37.        
  38. begin
  39.    
  40.                                
  41.                            
  42.     --CD(0) <= code(15 downto 12);--for 4 bits
  43.     --CD(1) <= code(11 downto 8);--for 4 bits
  44.     ---CD(2) <= code(7 downto 4);--for 4 bits
  45.     --CD(3) <= code(3 downto 0); --for 4 bits
  46.    
  47.      AY:for j in 0 to 3 generate
  48.            CD(j)<=(code((longueur*j+(longueur-1)) downto (longueur*j)));---for generic
  49.       end generate AY ;
  50.    
  51.    
  52.      
  53.      etalement:process(clk,rst)
  54.          
  55.         begin
  56.                   if(rst='1') then
  57.                      Q  <=(others=>'0');
  58.                    
  59.                      F:for k in 0 to longueur-1 loop ---for generic
  60.                           temp(k)<=x"0000";
  61.                        end loop ;
  62.                      --temp(0)<=x"0000";--for 4 bits
  63.                      --temp(1)<=x"0000";--for 4 bits
  64.                      --temp(2)<=x"0000";--for 4 bits
  65.                      --temp(3)<=x"0000";--for 4 bits
  66.                    else
  67.                         if(clk'event and clk ='1') then
  68.                               voie(0)<=signed(data) ;
  69.                              
  70.                               B:for L in 1 to 3 loop
  71.                                  voie(L)<=voie(l-1);---for generic
  72.                                end loop ;
  73.                              
  74.                               --voie(1)<=voie(0);--for 4 bits
  75.                               --voie(2)<=voie(1);--for 4 bits
  76.                               --voie(3)<=voie(2); --for 4 bits
  77.                            
  78.                                    
  79.                                       for i in 0 to 3 loop
  80.                                       --for i in 0 to longueur-1 loop
  81.                                         temp(i) <= voie(i)*signed(CD(i));
  82.                                       end loop ;
  83.                                      
  84.                                        --sum0<= resize(temp(0),17)+temp(1) ;--for 4 bits
  85.                                        sum0<= resize(temp(0),(4*longueur)+1)+temp(1) ;---for generic
  86.                                        --sum1<= resize(temp(2),17)+temp(3) ;--for 4 bits
  87.                                       sum1<= resize(temp(2),(4*longueur)+1)+temp(3) ;---for generic
  88.                                
  89.                                         -- AB<=resize(sum0,18)+sum1 ;--for 4 bits
  90.                                          AB<=resize(sum0,(4*longueur)+2)+sum1 ;---for generic
  91.                                        
  92.                                          Q<=std_logic_vector(AB) ;
  93.                                                  
  94.                                  
  95.                              end if ;
  96.                      end if
  97.                                    
  98.                        
  99.                      
  100.             end process ;
  101. end architecture ;


 
 
Merci d'avance .

Reply

Marsh Posté le 06-06-2014 à 00:52:15   

Reply

Marsh Posté le 06-06-2014 à 01:00:00    

la question :comment faire pour que le programme sera generique  
 
Merci encore une fois :sweat:

Reply

Marsh Posté le 06-06-2014 à 10:30:24    

On ne peut rien faire pour toi si tu n'expose pas clairement:
- Qu'est ce qui doit être générique et qu'est-ce qu'il représente
- Quel est l'impact de ton générique sur la tailles des I/O du module
- Quel est l'impact de ton générique sur la taille de tes signaux internes
- Enfin, l'impact sur l'algorithme
 
Il y a d'ailleurs de grande chances que tu résolves de toi même ton souci après y avaoir répondu!
 
Aussi, je te l'ai déjà dis mais les noms de tes I/O et signaux doit être amélioré. On doit savoir de quoi il s'agit à la première lecture.
Pour nous qui ne sommes pas dans ta tête, c'est incompréhensible.
 
AUssi, les commentaires ne servent pas à commenter le code, mais à mettre des informations supplémentaires.


---------------
sheep++
Reply

Marsh Posté le 06-06-2014 à 14:57:55    

h3bus a écrit :

On ne peut rien faire pour toi si tu n'expose pas clairement:
- Qu'est ce qui doit être générique et qu'est-ce qu'il représente : je voudrais que mon code sera génerique ex:8,12,.....31
- Quel est l'impact de ton générique sur la tailles des I/O du moduleIl va changer la taille  ça depend code !! meme chose pour les signaux internes
- Quel est l'impact de ton générique sur la taille de tes signaux internes
- Enfin, l'impact sur l'algorithme
 
Il y a d'ailleurs de grande chances que tu résolves de toi même ton souci après y avaoir répondu!
 
Aussi, je te l'ai déjà dis mais les noms de tes I/O et signaux doit être amélioré. On doit savoir de quoi il s'agit à la première lecture.
Pour nous qui ne sommes pas dans ta tête, c'est incompréhensible.
 
AUssi, les commentaires ne servent pas à commenter le code, mais à mettre des informations supplémentaires.


 
J'écris sur une feuille comment les changements faites (signaux internes ,I/O ) mais je n'arrive pas comment la postuler !

Reply

Sujets relatifs:

Leave a Replay

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