Bonjour,
Je voudrais implémenter du code VHDL sur la carte Zynq-7 de la famille Xilinx.
Cette carte ne possède que 17000 LUTs et 60 RAM de 36Kbits.
Mon code VHDL demande plus de 17000 ressources, l'implémentation ne marche donc pas.
Je sais quel partie de mon code demande le plus de ressources mais je ne vois pas comment faire pour diminuer le nombre.
Voici la partie du code :
A chaque coup d'horloge, je soustrais toutes les valeurs du tableau src_cdf à une valeur du tableau ref_cdf. Le signal s_cpt est incrémenté à chaque coup d'horloge jusqu'à la valeur 255, valeur qui correspond à la taille des 2 tableaux.Code:calcul_M : for i in 0 to 255 generate Proc_calcul_M : process (reset_n, clk) --A chaque coup d'horloge on compare un niveau de la CDF ref avec tous les niveaux de la CDF src --On conserve la position 'cpt' du niveau de la CDF ref le plus proche de chaque niveau 'i' de la CDF src dans un autre tableau M à la position 'i' --En 256 coups d'horloge on a notre tableau M fini begin if(reset_n = '0') then test(i) <= (others =>'1'); --Signal de test, initialisé tout à 1 pour effectuer des comparaisons successives et trouver une valeur minimum M(i) <= (others =>'0'); elsif rising_edge(clk) then if(cpt_running = '1' and cpt_max = '0') then -- On effectue une opération à chaque coup d'horloge en synchro avec le compteur if(std_logic_vector(abs(signed(unsigned(src_cdf(i)) - unsigned(ref_cdf(to_integer(s_cpt)))))) < test(i)) then --Si la différence est inférieure au signal test test(i) <= std_logic_vector(abs(signed(unsigned(src_cdf(i)) - unsigned(ref_cdf(to_integer(s_cpt)))))); --on actualise Test M(i) <= s_cpt; end if; end if; end if; end process Proc_calcul_M; end generate calcul_M;
Le signal test me permet de garder en mémoire la soustraction pour le coup d'horloge suivant.
Je suis contrainte de garder le generate car cela me prendrait trop de coups d'horloge pour remplir mon tableau M (Il me faut dejà 256 coups d'horloge pour le compléter).
Les signaux M et test sont de cette forme :
J'ai essayé de remplacer mon tableau M avec des RAM mais cela n'a pas vraiment eu d'effets sur le nombre de ressources. De plus la carte ne possède que 60 BRAM, ce qui me limite grandement.Code:type M_tab is array (0 to 255) of unsigned(7 downto 0); type tab is array (0 to 255) of std_logic_vector(20 downto 0); signal M : M_tab; signal test : tab;
Est-ce que quelqu’un aurait une idée pour que mon code utilise beaucoup moins de ressources ?
Merci !
-----