Aide_FPGA
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Aide_FPGA



  1. #1
    elec_cup
    Invité

    Aide_FPGA


    ------

    Bonjour:

    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.numeric_std.all;
    ---------------------------------------
    entity test is
    port(
    a : out std_logic :='0'
    );
    end entity;
    ---------------------------------------
    architecture arch of test is

    signal pulse : std_logic :='0';

    ---------------------------------------
    begin
    ---------------------------------------
    numero1 : process

    begin

    wait for 10 ns;
    pulse <= '1';
    wait for 10 ns;
    pulse <= '0';
    wait;

    end process numero1;
    ---------------------------------------
    numero2 : process

    begin

    wait until pulse'event and pulse='1';
    a<='1' after 4 ns;
    wait for 24 ns;
    a<='0';
    wait;

    end process numero2;
    ---------------------------------------
    end arch;

    Pourriez-vous m'expliquer comment avoir un signal sinusoïdal en sortie sur a, plutôt que un signal logique, après la gâchette pulse ?
    Le FPGA peut-il traîter de l'analogique, ou ne fonctionne-t-il qu 'en numérique, c'est-à-dire qu'à sa sortie, peut-on avoir des valeurs intermédiaire, entre 0 et 1, qui nous permettraient donc de créer un signal sinuoïdal ?
    Comment déclarer 'a' dans ce cas là (std_logic,...) ?

    Cordialement

    DELALIN Ambroise

    -----

  2. #2
    jiherve

    Re : Aide_FPGA

    Bonsoir,
    comme d'hab je m'y colle.
    A: Un FPGA ne traite que des signaux logiques.
    B: ce code est non shynthétisable
    C: on n'affecte pas de valeur à la déclaration d'une sortie.
    D: on peut créer un signal sinus à condition de le générer de façon numérique et d'envoyer ce signal (qui est alors un std logic vector) sur un DAC, pour ce faire voir CORDIC c'est une solution éprouvée, ou bien utiliser un compteur et une table de transcodage.
    en non synthétisable avec la librairie ieee.math_real on peut directement instancier un sinus mais cela sera seulement du comportemental.
    JR
    Dernière modification par jiherve ; 18/04/2011 à 20h38.
    l'électronique c'est pas du vaudou!

  3. #3
    elec_cup
    Invité

    Re : Aide_FPGA

    Bonjour,

    1) Alors voilà, je voudrais faire une boucle (loop), qui va de 0 à "01001".
    ==> for i in 0 to 01001 loop
    Mais il y a une erreur. La loop ne prend en compte que des nombres entiers comme par exemple:
    ==>for i in 0 to 8 loop.
    Dois-je convertir mon std_logic_vector en nombre réel ? Ou y a-t-il une astuce de syntaxe dans la boucle loop ?

    2)generic(
    width : positive :=8;
    A quoi sert cette expression ?

    3)architecture arc of multiplier is
    --
    begin
    --
    CLA_gen : if width < 8 generate
    inst_cla : CLA_multiplier generic map (width) port map(a, b, product);
    --
    end generate CLA_gen;

    A quoi servent ces deux lignes de codes ?

    Cordialement

    DELALIN Ambroise

  4. #4
    elec_cup
    Invité

    Re : Aide_FPGA

    re:

    J'ai oublié de vous dire que pour la loop, la valeur 01001 est sous forme d'un std_logic_vertor du nom de b.
    Il faudrais donc que la loop fasse :
    for i in 0 to b loop
    avec b="01001".

    Cordialement

    DELALIN Ambroise

  5. A voir en vidéo sur Futura
  6. #5
    elec_cup
    Invité

    Re : Aide_FPGA

    Voilà,
    comment convertir un nombre binaire en décimal ? (integer) ?

    Cordialement

    DELALIN Ambroise

  7. #6
    jiherve

    Re : Aide_FPGA

    Bonsoir
    il faut écrire: to_integer(unsigned(toto));
    toto étant un std_logic_vector.
    generic(
    width : positive :=8;
    A quoi sert cette expression ?
    cela declare un paramètre utilisé à la compilation, ici cela détermine la largeur d'un bus autrement dit un std_logic_vector(7 downto 0), par défaut il vaut 8, le positive signifie integer strictement positif: 1 ..2G et des bananes.
    3)architecture arc of multiplier is
    --
    begin
    --
    CLA_gen : if width < 8 generate
    inst_cla : CLA_multiplier generic map (width) port map(a, b, product);
    --
    end generate CLA_gen;
    la valeur du paramètre si elle satisfait la condition autorise la génération d'un multiplieur ayant ce même paramètre et possédant les ports déclaré le résultat c'est product = a*b.
    la fonction generate est tres puissante car elle permet d'instancier ou non certaines partie de code en fonction des besoins, il lui faut toujours un label, il n'existe pas de ELSE, c a d qui faut déclarer explicitement ce que l'on veux faire dans le cas contraire, ici il eut fallu un assert pour couvrir les cas >= 8 et générer une erreur si besoin.
    JR
    l'électronique c'est pas du vaudou!

Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...