Calcul VHDL, différent mais toujours le même
Question
Difficile d'expliquer le problème dans le titre, veuillez donc lire sur.
J'ai un projet où nous mettons en œuvre un filtre SOBEL.Au début, l'image n'a pas fonctionné comme elle devrait le faire, avec les calculs de SOBEL
Gx <= ("000" & p3-p1)+(("00" & p6 & '0')-("00" & p4 & '0'))+("000" & p9-p7);
Gy <= ("000" & p7-p1)+(("00" & p8 & '0')-("00" & p2 & '0'))+("000" & p9-p3);
mais avec la même calulation exprimée d'une manière différente
Gx <= ("000" & p3)+("00" & p6 & '0')+("000" & p9)-("000" & p1)-("00" & p4 & '0')-("000"
& p7);
Gy <= ("000" & p7)+("00" & p8 & '0')+("000" & p9)-("000" & p1)-("00" & p2 & '0')-("000"
& p3);
Cela a fonctionné parfaitement.Néanmoins, les simulations du filtre seul sont exactement les mêmes. A-t-il quelque chose à voir avec la façon dont je pads les zéros avant les vecteurs?
La solution
Sans connaître les types de données, je ne suis pas totalement sûr que ceci est la cause, mais je suppose que si p1 > p3
(et certains des autres aussi), vous obtiendrez différents résultats des deux types de calculs.Exemple pseudo-code:
p1 = "010";
p3 = "001";
--Method1:
res = "000" & p3-p1 = "000" & "111" = "000111";
--Method2
res = ("000" & p3) - ("000" & p1) = "000001" - "000010" = "111111";