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

RAM par un tableau en VHDL



  1. #1
    compa

    RAM par un tableau en VHDL


    ------

    Bonjour a tous

    Je programme depuis peu donc je vais essayer d'être clair.
    Je travail sur l'implémentation, dans un FPGA xilinx spartan 3, d'une fonction néssécitant l'utilisation d'une ram.
    J'ai mis en place une RAM en la codant moi même sous la forme d'un tableau de 1000 case de 32 bit. A la synthese pas de probleme, mais l'implémentation ne passe pas car ce tableau utilise toute la logic dans le FPGA. Je sais que par core generator de ise des blocks ram peuvent étre créer mais cela ne correspond pas tout a fait a ce que je souhaite.

    Ma question est la suivante : peut-on créer une RAM sous forme de tableau qui n'utiliserai pas la logic interne mais un espace interne de memoire dans le FPGA comme les ram créer par le coregene de ise.

    merci

    -----

  2. Publicité
  3. #2
    thieu17

    Re : RAM par un tableau en VHDL

    Bonjour compa!

    Donc oui en effet tu peux créer un tableau de telle manière à ce qu'il crée ta mémoire dans le block RAM du composant. Par contre tout dépend de la manière dont tu as codé...Il faut que tu le vérifie lorsque tu fais la synthèse sous ise dans "view RTL Schematic". Normallement tu dois voir un block RAM de ton composant.

    Je te passe en exemple un extrait de code d'une RAM double accès à 2 registres 8 bits qui a marché pour moi. Inspire toi de ce code pour ta mémoire de plus grosse capacité!!

    extrait de code :

    entity RAM_2registres is
    Port ( add_r : in STD_LOGIC;
    add_w : in STD_LOGIC;
    write_enable : in STD_LOGIC;
    H: in STD_LOGIC;
    reset : in STD_LOGIC;
    data_w : in STD_LOGIC_VECTOR (7 downto 0);
    data_r : out STD_LOGIC_VECTOR (7 downto 0));
    end RAM_2registres;

    architecture Behavioral of RAM_2registres is

    signal mem0 : std_logic_vector(7 downto 0);
    signal mem1 : std_logic_vector(7 downto 0);

    begin

    process(H)

    begin

    if (H'event and H='1') then
    if (reset='1') then
    mem0<=x"00";
    mem1<=x"00";
    data_r<=x"00";
    else

    --lecture
    if (add_r='0') then data_r<=mem0;
    else data_r<=mem1;
    end if;

    --ecriture
    if (write_enable='1') then
    if (add_w='0') then mem0<=data_w;
    else mem1<=data_w;
    end if;
    end if;

    end if;
    end if;

    end process;


    end Behavioral;


    voilà j'espère que sa va t'aider !!

  4. #3
    compa

    Re : RAM par un tableau en VHDL

    Bonjour thieu17!

    Pour la visualisation dans "view RTL Schematic" je ne voit qu'un block de description de mes entrées et sorties de module, rien qui m'informe vraiment... Voici en gros mon code pour te présenter ce que j'ai mis en place pour éssayer de solutionner mon probleme. lorsque je synthétise cela pas de probleme, mais cette façon utilise tous les éléments logic du FPGA pour créer ce tableau.

    entity Ram is
    port (
    clk_wr : in std_logic;
    clk_rd : in std_logic;
    reset : in std_logic;
    data_wr : in std_logic_vector(31 downto 0);
    data_rd : out std_logic_vector(7 downto 0);
    wr_en : in std_logic;
    rd_en : in std_logic
    );
    end Ram;

    architecture struct of Ram is

    Type memory is array (1000 downto 0) of std_logic_vector (31 downto 0);
    signal ram : memory;

    |
    |
    |
    |
    |


    --écriture

    if (reset = '1') then

    ram <= (others => "00000000000000000000000000000 000");
    indice_adresse <= (others => '0');

    elsif(clk_wr'event and clk_wr = '1') then

    if (wr_en) then

    ram(indice_adresse) <= data_wr ;


    En réduisant la taille du tableau cela fonctionne. Avec des fifos de core generator de la taille que je souhaite cela fonctionne. Mais ce que je souhaite faire avec la ram, je doit etre codé. Il me faut donc la placer dans la ram interne du FPGA et je n'y arrive pas
    di moi ce que tu en pense.

  5. #4
    thieu17

    Re : RAM par un tableau en VHDL

    ton code me parait correcte...
    Ta vérifié les capacités des block RAM disponible dans le FPGA ? peut-etre que si tu dépasse la capacité d'un block le logiciel ISE utilise la logique...

  6. A voir en vidéo sur Futura
  7. #5
    compa

    Re : RAM par un tableau en VHDL

    apparament c'est le "reset" qui pose probleme a cause de ce signal ise utilise des bascules et non de la mémoire ram du FPGA.
    En tous cas un grand merci et si tu as d'autre information ou idées...

  8. #6
    jiherve

    Re : RAM par un tableau en VHDL

    Bonsoir,
    Je ne connais pas bien les FPGA Xilinx mais je doute qu'il comprennent des blocs de RAM resetables car physiquement c'est coton à réaliser.
    Donc retires ton :ram <= (others => "0000000000000000000000000 0000 000");cela s'écrit d'ailleurs plus simplement (others => (others =>'0'));
    et tout devrait rentrer dans l'ordre.
    Chez Altera il est possible d'initialiser un bloc ram avec un .hex, je pense que cela doit aussi exister chez Xilinx.
    JR
    l'électronique c'est pas du vaudou!

  9. Publicité
  10. #7
    compa

    Re : RAM par un tableau en VHDL

    Merci jiherv !
    c'etait bien le "reset" le probleme. Je n'ai pas un réel interet a initialiser mon tableau, c'etait juste pour ne pas etre ennuyé lors de la simulation. Mais je vais regarder quand meme s'il est possible de l'initialiser avec xilinx

  11. #8
    radiotique

    Re : RAM par un tableau en VHDL

    Bonjour tout le monde

    Bonjour compa
    je vois que vous avez travaillé sur les FPGA de xlinx et précisement sur le Spartan3. Moi aussi j'ai entrain de travailler un projet en utilisant cette carte, mais ce que m'intéresse c'est de faire afficher un signal sinusiodal ou carré sur l'écran ...
    Alors, je vous demande, si vous me permet bien sur, si vous avez une idée ou un astus... j'ai fait quelques essais mais toujours j'ai pas arrivé à faire cet affichage
    Aussi, un autre truc, savez vous comment pourrais-je accéder à la date systéme (la date courante) en utilisant VHDL..

    et merci d'avance

  12. #9
    DAUDET78

    Re : RAM par un tableau en VHDL

    Notre ami Compa a quitté le forum

    Dernière activité: 17/06/2009 09h48
    J'aime pas le Grec

  13. #10
    pitbuell94

    Re : RAM par un tableau en VHDL

    Bonjour,

    J'ai en ma possession un KIT NEXYS2 SPARTAN 3E avec sa carte d'extension à trous.

    Je suis actuellement en train de réaliser un système nécessitant l'accès à une mémoire RAM.

    Ce système doit être capable d'accèder au contenu de la mémoire et d'écrire à des vitesses diffèrentes.

    Pour des raisons pratiques, je pense qu'il me faut au moins 2880 emplacements mémoire de 8 bits.

    Je suis en train de réaliser un scaler vidéo.

    Les lignes ont 720 points de résolution horizontale.

    Je restaure de vieux téléviseurs fonctionnant en 819 lignes.

    Les émissions actuelles ont diffusées en 625 lignes.

    En fait, il n'y a que 576 lignes visibles réelles en 625.

    En 819 lignes, seules 737 lignes sont visibles.

    Les lignes absentes servent à la remontée du spot en haut à gauche de l'écran.

    Il faut en fait que je crée les lignes manquantes par extrapolation en prenant les données luminance du point P1 de la ligne L1 d'entrée moyennée avec les données du point P1 de la ligne d'entrée L2.

    Le contenu de la ligne L1 est intégralement envoyé tel quel mais à un débit différent vers le récepteur 819.

    Les données de la ligne L2 se trouve en position L3 et la moyenne de L1 et L2 d'entrée devient le contenu de la ligne L2 du récepteur 819 lignes.

    Quelqu'un a-t-il une idée?

    Quel type de fonctionnement: FIFO, RAM....

    J'ai déjà réalisé toute la partie synchronisation qui fonctionne parfaitement en simulation et sur les leds de mon KIT NEXYS2 SPARTAN 3E.

    Toutes les idées sont les bienvenues.

    Pitbuell94.

  14. #11
    amina2330

    Re : RAM par un tableau en VHDL

    salut tous le monde...
    j'ai un problème; je n'arrive pas à écrire un programme vhdl d'un tableau x(obj,e0)et son circuit électronique....est qu'il y a quelqu'un qui peut m'aider...
    maerci

  15. #12
    pitbuell94

    Re : RAM par un tableau en VHDL

    Bonjour Amina2330,

    Combien de valeurs votre tableau ou RAM doivent-être mis en mémoire?

    Est-ce simplement des mots de 8 bits?

    La RAM que vous allez implémenter, si elle est de forte valeur, devra toujours être un multiple de puissance de 2.

    Bonne soirée.

    Pitbuell94.

  16. Publicité
  17. #13
    amina2330

    Re : RAM par un tableau en VHDL

    slt
    512 oct de la mémoire.
    si vous avez un email pour mieux parler et comme ça je t'expliqueras mon problème

    merci a vous

  18. #14
    pitbuell94

    Re : RAM par un tableau en VHDL

    Bonjour Amina2330,

    Un exemple de code en VHDL pour votre RAM.

    LIBRARY ieee;
    USE ieee.std_logic_1164.ALL;

    ENTITY Ma_RAM IS
    PORT
    (
    clock: IN std_logic;
    data: IN std_logic_vector (7 DOWNTO 0);
    write_address: IN integer RANGE 0 to 511;
    read_address: IN integer RANGE 0 to 511;
    we: IN std_logic;
    q: OUT std_logic_vector (7 DOWNTO 0)
    );
    END Ma_RAM;

    ARCHITECTURE rtl OF ram_infer IS

    TYPE mem IS ARRAY(0 TO 511) OF std_logic_vector(7 DOWNTO 0);

    SIGNAL ram_block : mem;
    SIGNAL read_address_reg : INTEGER RANGE 0 to 511;

    BEGIN

    PROCESS (clock)
    BEGIN
    IF (clock'event AND clock = '1') THEN
    IF (we = '1') THEN
    ram_block(write_address) <= data;
    END IF;
    read_address_reg <= read_address;
    END IF;
    END PROCESS;

    q <= ram_block(read_address_reg);

    END rtl;

    Bonne journée.

    Pitbuell94.

  19. #15
    pitbuell94

    Re : RAM par un tableau en VHDL

    Bonsoir AminA2330,

    Le code fournit vous convient-il?

    N'ayant plus de nouvelle, je m'interroge.

    Pitbuell94.

  20. #16
    jiherve

    Re : RAM par un tableau en VHDL

    Bonsoir,
    il va falloir s'habituer à n'avoir aucun retour, dur est le métier de forumeur!
    JR
    l'électronique c'est pas du vaudou!

  21. #17
    pitbuell94

    Re : RAM par un tableau en VHDL

    Bonjour Jihervé,

    Effectivement.

    Sans doute l'apanage des jeunes générations... qui prennent beaucoup sans donner grand chose.

    Je me sers, tout est gratuit.

    je parierai qu'il y avait la-dessous un devoir ou un quelconque TP à faire en urgence...

    Un simple merci eu été suffisant de sa part.

    Heureusement que la plupart des gens que je tente d'aider ne sont pas tous comme cela et les jeunes aussi.

    J'officie sur un autre forum (TSF Radiofil) où les retours sont bien plus nombreux car l'entraide est vraiment de mise et le milieu est un peu comme un aquarium: presque tout le monde se connait.

    Enfin.

    je fais ici l'amère expérience des limites de ce type d'aide.

    Je vous souhaite une excellente journée.

    Pitbuell94.

  22. #18
    yoann30

    Re : RAM par un tableau en VHDL

    coucou tous

    desolé pour le deterrage

    deja gros gros merci a toi pitbuell94 comme ca n'as pas ete fait

    jaurais besoin que tu m'explique des lignes sur ton code

    SIGNAL ram_block : mem; -- mem c'est un type ?

    q <= ram_block(read_address_reg); -- la j'arrive pas du tout lire cette ligne.
    si tu pouvais me la traduire ca serais super de ta part .


    je te remercie et tres certainement a bientot lol

  23. Publicité
  24. #19
    DAUDET78

    Re : RAM par un tableau en VHDL

    Citation Envoyé par yoann30 Voir le message
    jaurais besoin que tu m'explique des lignes sur ton code
    notre ami pitbuell94 n'est plus revenu sur le forum Dernière activité 13/04/2013 08h56
    J'aime pas le Grec

  25. #20
    yoann30

    Re : RAM par un tableau en VHDL

    rho duuuuuuuuuuuuuuuuuuuuuuuuuuuuu uuuur
    bon baaaaah merci de m'eviter l'attente xD

  26. #21
    DAUDET78

    Re : RAM par un tableau en VHDL

    Citation Envoyé par yoann30 Voir le message
    bon baaaaah merci de m'eviter l'attente xD
    Tu aurais regardé son profil (ce que j'ai fait !), tu aurais évité de déterrer un vieux machin .
    J'aime pas le Grec

  27. #22
    yoann30

    Re : RAM par un tableau en VHDL

    jai la meme maitrise en vhdl qu'en utilisation de forum

  28. #23
    pitbuell94

    Re : RAM par un tableau en VHDL

    Bonsoir Yohann30,

    Last but least.

    Dès demain, je prendrai le temps de répondre.

    Le temps de me replonger dans ce code.

    C'est bien de celui-ci dont vous parlez?

    LIBRARY ieee;
    USE ieee.std_logic_1164.ALL;

    ENTITY Ma_RAM IS
    PORT
    (
    clock: IN std_logic;
    data: IN std_logic_vector (7 DOWNTO 0);
    write_address: IN integer RANGE 0 to 511;
    read_address: IN integer RANGE 0 to 511;
    we: IN std_logic;
    q: OUT std_logic_vector (7 DOWNTO 0)
    );
    END Ma_RAM;

    ARCHITECTURE rtl OF ram_infer IS

    TYPE mem IS ARRAY(0 TO 511) OF std_logic_vector(7 DOWNTO 0);

    SIGNAL ram_block : mem;
    SIGNAL read_address_reg : INTEGER RANGE 0 to 511;

    BEGIN

    PROCESS (clock)
    BEGIN
    IF (clock'event AND clock = '1') THEN
    IF (we = '1') THEN
    ram_block(write_address) <= data;
    END IF;
    read_address_reg <= read_address;
    END IF;
    END PROCESS;

    q <= ram_block(read_address_reg);

    END rtl;

    Bonne soirée.

    Pitbuell94.

  29. #24
    yoann30

    Re : RAM par un tableau en VHDL

    exact merci et re desolé pour le deterrage
    bonne soirée

  30. Publicité
  31. #25
    indri

    Re : RAM par un tableau en VHDL

    Citation Envoyé par yoann30 Voir le message

    jaurais besoin que tu m'explique des lignes sur ton code

    SIGNAL ram_block : mem; -- mem c'est un type ?
    c'est un type personnalisé défini juste au dessus:
    TYPE mem IS ARRAY(0 TO 511) OF std_logic_vector(7 DOWNTO 0);

    En gros un tableau de 512 octets

    q <= ram_block(read_address_reg); -- la j'arrive pas du tout lire cette ligne.
    si tu pouvais me la traduire ca serais super de ta part .
    il met dans le signal 'q' la valeur de la "case" 'read_address_reg' du tableau 'ram_block'
    En gros, à l'entrée de l'entité, il y a une addresse et ca sort le byte correspondant du tableau!

    Ceci-dit ce code n'utilise pas de "vrai" ram du fpga, et devrait synthétiser tout ça en n'utilisant que des Logics elements . Enfin je crois bien
    Dernière modification par indri ; 30/03/2015 à 12h02.
    Là où va le vent...

  32. #26
    yoann30

    Re : RAM par un tableau en VHDL

    merci beaucoup c'est bien ce que je pensais mais c'etait confus ^^
    pour cette histoire de "fausse ram" cest ce que j'expliquais a mon tuteur
    et quil ne serait pas possible d'emuler une ram d'1 mego :s
    du coup la je bosse sur les rams externe de la nexys3 .
    mais ca m'aura ete utile tout ca je vous remercie ^^
    Dernière modification par yoann30 ; 30/03/2015 à 12h38.

  33. #27
    pitbuell94

    Re : RAM par un tableau en VHDL

    Bonjour,

    Merci à Indri d'avoir répondu si rapidement.

    Effectivement, ce n'est pas une vraie RAM et il ne sera pas possible de créer une RAM d'aussi grosse capacité.

    Sur quelle platine le code va t-il servir?

    Simple curiosité: à quel projet va servir ce code?

    Bonne fin de journée.

    Pitbuell94.

  34. #28
    yoann30

    Re : RAM par un tableau en VHDL

    en gros : en amont jai un can qui me balance des pendant 500ms 5000 valeurs de 8 bits
    que je doit filtrer ou non ( 2 modes de fonctionnements ) et ensuite envoyer tout ca sur pc
    ça se développe sur nexys3 ( un sacré bordel la datasheet de la ram cela dit en passant )
    c’est pour un diagnostique rétinien.
    mais plus je me plonge dans le vhdl plus heuuuuuuu j’ai des projets qui me viennent c’est horrible :s

  35. #29
    indri

    Re : RAM par un tableau en VHDL

    Je te conseille l'utilisation des IP fournis dans le soft (que ce soit quartus ou celui de xilinx) qui permettent tout un tas de chose possible: fifo,différentes ram, filtres, etc..
    Par contre les conditions d'utilisation sont variables...
    Là où va le vent...

Discussions similaires

  1. [Divers] Par temps d'orage 1 phase diparaît au tableau électrique.
    Par ricousky dans le forum Dépannage
    Réponses: 11
    Dernier message: 07/06/2009, 18h39
  2. Point flottant en VHDL et vhdl-200x
    Par grel08128103 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 02/09/2008, 20h47
  3. Explication du tri d'1 tableau par insersion (joueur de carte)
    Par rmp dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 17/03/2008, 19h12
  4. changement voyant tableau de bord par led
    Par violaine-è dans le forum Électronique
    Réponses: 25
    Dernier message: 18/09/2007, 13h03
  5. Ram Ram Rameur.....
    Par Rasmus dans le forum Matériel - Hardware
    Réponses: 14
    Dernier message: 13/08/2004, 21h40
Découvrez nos comparatifs produits sur l'informatique et les technologies.