Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1117 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  demande en VHDL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

demande en VHDL

n°2228913
ayo1
Posté le 23-05-2014 à 20:04:28  profilanswer
 

Bonsoir mes ami(e)s :
 
Je voudrai juste savoir est ce qu'il y en a quelqu'un qui pourra m'aider  
 
Au niveau de code VHDL !
 
parce que je me suis bloqué !
 
 
Merci d'avance pour votre réponse .

mood
Publicité
Posté le 23-05-2014 à 20:04:28  profilanswer
 

n°2228914
sligor
Posté le 23-05-2014 à 20:08:10  profilanswer
 

ouai  :sol:  
mais attention on aide, on répond à des questions, mais on ne fait pas les exercices ni le boulot à ta place ;)

n°2228919
ayo1
Posté le 23-05-2014 à 21:19:24  profilanswer
 

Ok ;
 
Je te remercie .
 
Au fait, j'ai écris un programme de la modulation bpsk .mais ce que me gène c'est: il faut faire générique(generate for) pour la longueur de mon code  cela veut dire qu' au lieu d'entrée 4 bits je peux saisie 1bit ,2,3bits ..
sachant que j'ai une séquence de 8 bits chaque 1 bit il y en a (4bits)  
mon souci c'est au niveau de la fonction (generate for) .
J’espère que vous m'avez compris
 
Voici mon code :
 
entity cdma_testbipo is
generic  (
            longueur  : natural :=4 );
 
port (
         clk : in std_logic ;
         rst : in std_logic  ;
         data: in std_logic  ;
        odata: out std_logic  ;
        isis :out  integer range 0 to longueur-1  ;
        CD   :in std_logic_vector( (4*longueur)-1 downto 0) ;
         S   :out integer range -8 to 7 );
end entity ;
 
architecture beh of cdma_testbipo is    
    type RAM is array (0 to longueur-1) of integer range -8 to 7;
        signal i      :integer range 0 to longueur-1 ;
        signal code   : RAM;
        signal idata  :std_logic  ;
         
         
        begin  
       
        F:for j in 0 to longueur-1 generate  
              begin
             
           code(j)<=to_integer(signed(CD((4*longueur)-1 downto 3*longueur)));
           code(j)<=to_integer(signed(CD((3*longueur)-1 downto 2*longueur))) ;
           code(j)<=to_integer(signed(CD((2*longueur)-1 downto longueur )));
           code(j)<=to_integer(signed(CD(longueur-1 downto 0))) ;
         
         
         bpsk :process(clk,rst)
               begin  
                    if(rst='1')then  
                        i<= 0;
                    else  
                        if(clk'event and clk='1')then  
                             
                            i<=i+1 ;
                            if(idata='0') then  
        s<=-code(i);  
       else  
        s<=code(i);
       end if;
     
       if(i=longueur-1) then  
        idata<=data;
       end if;
                               
                          end if ;
                      end if ;
                  end process ;
               
                  isis<=i;
                 
                 odata<=idata ;
              end generate F ;
   end architecture ;          
 
 Merci d'avance . :wahoo:  
 

n°2228924
h3bus
Troll Inside
Posté le 23-05-2014 à 22:37:07  profilanswer
 

Il manque le "end generate"

 

PS utilise la balise [code=vhdl] c'est plus clair!


Message édité par h3bus le 25-05-2014 à 16:19:53

---------------
sheep++
n°2228928
ayo1
Posté le 23-05-2014 à 23:05:02  profilanswer
 

Si ; voir le code tu vas le trouver  end generate F

n°2228930
h3bus
Troll Inside
Posté le 23-05-2014 à 23:33:55  profilanswer
 

Ah oui, je ne pige pas ton code, tu a des driver multiples sur code(j)


---------------
sheep++
n°2228932
ayo1
Posté le 23-05-2014 à 23:57:38  profilanswer
 

ah d'accord ; on a sortie sur 8 bits .
 
chaque bit parmi ces 8 bits nous avons 4bits .
 
j :pour les 4 bits qui est dans chaque bit .
 
?!  

n°2228934
h3bus
Troll Inside
Posté le 24-05-2014 à 00:36:13  profilanswer
 

Je suis désolé, je ne comprends pas.
 
Explique ce que représentes tes IO et ce que tu veux faire avec.


---------------
sheep++
n°2228947
ayo1
Posté le 24-05-2014 à 16:56:46  profilanswer
 

Bonjour ;
 
Je voulais d'entrer des bits variables (code) .
 
Merci d'avance

n°2228948
ayo1
Posté le 24-05-2014 à 17:00:50  profilanswer
 

mon code que je faisais c'est chaque bit de code est représenté par 4 bits .
 
alors moi je voulais qu'ils sont variables (4bis ,5bits ,...) c'est pour cela il faut faire generique ...for .
 
c'est ça mon problème.

mood
Publicité
Posté le 24-05-2014 à 17:00:50  profilanswer
 

n°2228949
sligor
Posté le 24-05-2014 à 17:08:12  profilanswer
 

j'ai vraiment du mal à comprendre ton code et ton explication.
 
Montre nous un code qui marche, sans générique, avec valeur fixe pour qu'on comprenne un peu mieux.

n°2228950
ayo1
Posté le 24-05-2014 à 17:23:18  profilanswer
 

mais dis moi t'as une idée à propos la modulation bpsk !!?? ne c'est pas

n°2228958
ayo1
Posté le 25-05-2014 à 00:54:07  profilanswer
 

ça c'est programme principale :
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity cdm2 is
generic  (
            longueur  : natural :=4 );
 
port (
         clk : in std_logic ;
         rst : in std_logic  ;
         data: in std_logic  ;
        odata: out std_logic  ;
        isis :out  integer range 0 to longueur-1  ;
        CD   :in std_logic_vector( (4*longueur)-1 downto 0) ;
         S   :out integer range -8 to 7 );
end entity ;
 
architecture beh of cdm2 is  
       
           
    type RAM is array (0 to longueur-1) of integer range -8 to 7;
        signal i      :integer range 0 to longueur-1 ;
        signal code   : RAM;
        signal idata  :std_logic  ;
         
         
        begin  
       
        -
             
           code(0)<=to_integer(signed(CD(15 downto 12)));
           code(1)<=to_integer(signed(CD(11 downto 8))) ;
           code(2)<=to_integer(signed(CD(7 downto 4 )));
           code(3)<=to_integer(signed(CD(3 downto 0)));
         
         
         bpsk :process(clk,rst)
               begin  
                    if(rst='1')then  
                        i<= 0;
                    else  
                        if(clk'event and clk='1')then  
                             
                            i<=i+1 ;
                            if(idata='0') then  
        s<=-code(i);  
       else  
        s<=code(i);
       end if;
     
       if(i=longueur-1) then  
        idata<=data;
       end if;
                               
                          end if ;
                      end if ;
                  end process ;
               
                  isis<=i;
                 
                 odata<=idata ;
               
   end architecture ;          
 
 
 
dans le 1ere programme(principale) on a 4 bits pour chaque front montant alors moi je veux faire generique pour que je puisse entrer ce que je voulais c'est à dire (3 bits ;5 bits .......)pour chaque front montant .
 
Merci pour votre aider .

n°2228959
h3bus
Troll Inside
Posté le 25-05-2014 à 01:43:43  profilanswer
 

Beaucoup à dire sur ce code. Je ferai un point demain...
On va déjà nettoyer le code non générique, puis le passer en générique.

 

Pour tes prochain post, merci d'employer la balise code=vhdl comme indiqué dans ma première réponse.

 

Également, les librairies utilisée ont une importance, mets les dans le code que tu poste !


Message édité par h3bus le 25-05-2014 à 16:19:42

---------------
sheep++
n°2228961
h3bus
Troll Inside
Posté le 25-05-2014 à 11:28:40  profilanswer
 

La première remarque est le nom des sorties/signaux, c'est peut être courant pour le bspk mais quand je lis le code, leur nom ne me renseigne par sur leur fonction. Un autre choix de nom ou un commentaire peut aider.
 
Ensuite le process bspk n'affecte des valeurs de reset qu'à un seul signal, bien qu'il en pilote d'autre. C'est une bonne pratique de reseter tous les signaux affectés par un process (ce n'est pas indispensable, mais il faut bien maitriser ce qu'on fait pour ne pas le faire).
 
Utilise rising_edge(clk) au lieu de clk'event.
 
Tu ne gères pas l'overflow sur i qui est un integer. Ce n'est pas grave en soit car quand i = 3, i+1 = 0 car il va être encodé sur 2 bits. Mais si le synthétiseur pour une raison x ou y choit de le mettre sur 3 bits, ça ne marchera pas, un test if(i= 3) i <= 0 est plus prudent.
 
Pour être générique, après avoir corrigé les points au dessus, d'après ma compréhension du code, tu as uniquement besoin de passer la génération de code(j) dans un generate.
Note que tu pourrais complètement te passer du generate en récupérant le bon bit span de CD dans ton process. Tu pourrait alors également te passer du type RAM et du signal code.
 


---------------
sheep++
n°2228963
ayo1
Posté le 25-05-2014 à 12:20:29  profilanswer
 

si j'ai bien compris on peut faire comme ça :
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity cdma_testbipo is
generic  (
            longueur  : natural :=4 );
 
port (
         clk : in std_logic ;
         rst : in std_logic  ;
         data: in std_logic  ;
        odata: out std_logic  ;
        isis :out  integer range 0 to longueur-1  ;
        CD   :in std_logic_vector( (4*longueur)-1 downto 0) ;
         S   :out integer range -8 to 7 );
end entity ;
 
architecture beh of cdma_testbipo is    
    type RAM is array (0 to longueur-1) of integer range -8 to 7;
        signal i      :integer range 0 to longueur-1 ;
        signal code   : RAM;
        signal idata  :std_logic  ;
         
         
        begin  
       
                         F:for j in 0 to longueur-1 generate  
                          code(j)<=to_integer(signed(CD((longueur)-1 downto 0)));
                             
                            end generate F ;  
                 
                           
         
         
         
         bpsk :process(clk,rst)
               begin  
                    if(rst='1')then  
                        i<= 0;
                    else  
                        if(clk'event and clk='1')then  
                           i<=i+1 ;
                            if(idata='0') then  
        s<=-code(i);  
       else  
        s<=code(i);
       end if;
     
       if(i=longueur-1) then  
        idata<=data;
       end if;
                               
                          end if ;
                      end if ;
                  end process ;
               
                  isis<=i;
                 
                 odata<=idata ;
               
   end architecture ;          
     
tu pourras modifier programme si tu veux !
 
Merci d'avance

n°2228964
h3bus
Troll Inside
Posté le 25-05-2014 à 12:33:59  profilanswer
 

Presque, il faut que tu sélectionne le bon bitspan dans ton generate. La tu prends toujours le même. Aussi, prend en compte mes remarques sur ton processus, si tu changes longueur et que c'est plus une puissance de 2, le compteur va prendre des valeurs supérieures à longueur-1


Message édité par h3bus le 25-05-2014 à 12:34:57

---------------
sheep++
n°2228965
ayo1
Posté le 25-05-2014 à 12:55:09  profilanswer
 

comme ça : ??????
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity cdma_testbipo is
generic  (
            longueur  : natural :=4 );
 
port (
         clk : in std_logic ;
         rst : in std_logic  ;
         data: in std_logic  ;
        odata: out std_logic  ;
        isis :out  integer range 0 to longueur-1  ;
        CD   :in std_logic_vector( (4*longueur)-1 downto 0) ;
         S   :out integer range -8 to 7 );
end entity ;
 
architecture beh of cdma_testbipo is    
    type RAM is array (0 to longueur-1) of integer range -8 to 7;
        signal i      :integer range 0 to longueur-1 ;
        signal code   : RAM;
        signal idata  :std_logic  ;
         
         
        begin  
       
                         F:for j in 0 to longueur-1 generate  
                          code(j)<=to_integer(signed(CD((4*longueur)-1 downto 0)));
                             
                            end generate F ;  
                           
           
           
         
         
         bpsk :process(clk,rst)
               begin  
                    if(rst='1')then  
                        i<= j;
                    else  
                        if rising_edge(clk) then
                           i<=i+1 ;
                            if(idata='0') then  
        s<=-code(i);  
       else  
        s<=code(i);
       end if;
     
       if(i=longueur-1) then  
        idata<=data;
       end if;
                               
                          end if ;
                      end if ;
                  end process ;
               
                  isis<=i;
                 
                 odata<=idata ;
                 
               
   end architecture ;          
     
 
Merci

n°2228968
h3bus
Troll Inside
Posté le 25-05-2014 à 15:58:28  profilanswer
 

J'ai pas essayé et je ne sais vraiment ce que tu veux faire, mais en code correct voilà ce que ça donne:

Code :
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.numeric_std.all;
  4.  
  5. entity cdma_testbipo is
  6. generic
  7.    (
  8.        longueur  : natural := 4
  9.    );
  10. port
  11.    (
  12.        clk     : in  std_logic;
  13.        rst     : in  std_logic;
  14.        
  15.        data    : in  std_logic;
  16.        cd      : in  std_logic_vector( (4*longueur)-1 downto 0 );
  17.        
  18.        odata   : out std_logic;
  19.        isis    : out integer range 0 to longueur-1;
  20.        s       : out integer range -8 to 7
  21.    );
  22. end entity;
  23.  
  24. architecture RTL of cdma_testbipo is
  25.    signal i      : integer range 0 to longueur-1;
  26.    signal idata  : std_logic;
  27. begin
  28.  
  29. bpsk : process(clk,rst)
  30. begin  
  31.    if rst = '1' then  
  32.        i <= 0;
  33.        s <= 0;
  34.        idata <= '0';
  35.        
  36.    elsif rising_edge(clk) then
  37.    
  38.        if idata = '0' then  
  39.            s <= -to_integer(signed(CD(4*(i+1) - 1 downto 4*i)));
  40.        else  
  41.            s <= to_integer(signed(CD(4*(i+1) - 1 downto 4*i)));;
  42.        end if;
  43.        
  44.        if i = longueur-1 then
  45.            i       <= 0;
  46.            idata   <= data;
  47.        else
  48.            i <= i+1;
  49.        end if;
  50.      
  51.    end if;
  52. end process;
  53.  
  54. isis  <= i;
  55.  
  56. odata <= idata;
  57.  
  58. end architecture;


Message édité par h3bus le 25-05-2014 à 16:01:01

---------------
sheep++
n°2228972
ayo1
Posté le 25-05-2014 à 16:30:49  profilanswer
 

je te remercie ^^

n°2229017
ayo1
Posté le 25-05-2014 à 23:47:45  profilanswer
 

Bonsoir mes ami(e)s :
 
j'aimerai bien savoir est ce que vous avez une idée à propos le produit de corrélation ?!
 
Merci d'avance

n°2229043
h3bus
Troll Inside
Posté le 26-05-2014 à 10:12:32  profilanswer
 

Que veux tu exactement? Montres nous ce que tu as déjà fait!


---------------
sheep++
n°2229053
ayo1
Posté le 26-05-2014 à 10:48:10  profilanswer
 

Bonjour ;
 
Ok les données sont les suivantes : on a 4 bascule D ,donnée sur 12 bits ,en plus on a :c(0),c(1),c(2),c(3) sont les codes qui vont multiplié le signal .
 
la question : écrire cette formule en vhdl :   ∑_(k=0 jusqu'à N-1)〖signal*la référence 〗.
e but pour avoir un étalement de spectre DSSS .
 
voici mon code :
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity correla is
 
port (
         clk : in std_logic ;
         rst : in std_logic  ;
         data: in std_logic_vector(11 downto 0)  ;
         code: in std_logic_vector(3 downto 0 )  ;
         Q   :out std_logic_vector(12 downto 1))  ;
end entity ;
 
architecture arch of correla  is
begin
     process(clk,rst)
           variable temp :std_logic_vector(1 to 12) ; --:=(others=>'0') ;
           variable sum  :integer range 0 to 3 ;
           begin  
                  if(rst='1') then  
                     Q<=(others=>'0') ;
                   
                   else  
                        if(clk'event and clk ='1') then  
                            for i in 1 to 4 loop  
                               sum:=0  ;
                               for j in 1 to 11 loop  
                                   sum:=sum+(code(i)*(data(i+j))) ;
                                end loop ;
                                temp(i):=sum ;
                             end loop ;
                         end if ;
                     end if ;
                         Q<=temp ;
            end process ;
 end architecture ;  
                 
Merci pour votre aider .

n°2229055
h3bus
Troll Inside
Posté le 26-05-2014 à 10:58:21  profilanswer
 

Je me répète, merci de mettre des balise [code=vhdl] [ /code] autour de ton code. C'est illisible!

 

Je n'ai pas cherché à savoir si tu faisais ce que dit dans l'énoncé, mais déjà:
- i varie de 1 à 4 mais code va de 0 à 3. L'indexation code(i) est foireuse
- Pareil pour l'indexation de data
- temp(i)??Indexation foireuse aussi? (temp est défini de 1 à 12)
- ... (j'ai arrêté de lire)


Message édité par h3bus le 26-05-2014 à 10:59:33

---------------
sheep++
n°2229063
ayo1
Posté le 26-05-2014 à 11:21:07  profilanswer
 

je crois range (0 à 3) c'est pareil(1 à 4) !!  
 
mais qu'est ce que vous n'avez pas compris !?

n°2229071
h3bus
Troll Inside
Posté le 26-05-2014 à 11:46:32  profilanswer
 

Non ce n'est pas pareil, que crois tu qu'il va se passer quand ta boucle va tenter d'accéder à code(4)?


---------------
sheep++
n°2229093
ayo1
Posté le 26-05-2014 à 14:19:19  profilanswer
 

ah ok d'accord

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  demande en VHDL

 

Sujets relatifs
PETITE DEMANDE : comment récupérer des données XML dans un flashPrévision demande Besoin d'aide VBA EXCEL
demande de l'aideLa Nasa demande de l'aide à trouver des géocroiseurs et propose 35000$
Demande de coup de main pour script "stress-test" Demande une étude sur : l'âge idéale pour apprendre la programmation
[Site web] Demande de votre avis sur un site Essais-anglais.frDemande d'aide : ajouter un administrateur à une application
vhdlDemande d'avis application smartphone
Plus de sujets relatifs à : demande en VHDL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR