Peut-on utiliser les lignes : Use ieee.numeric_std.all; Use ieee.std_logic_unsigned.all; sans utiliser les opérations de conversion VHDL ? comme ca nous pouvons par exemple effectuer une addition entre un INTEGER et un STD_LOGIC_VECTOR !
Bonjour Eric, merci toujours passionnant et très didactique. Pouvez-vous fournir le code de simulation pour cet exercice? Egalement, comment obtenez vous le résultat après implémentation, je n'ai pas trouvé cette fonction avec ISE. merci!
Bonjour Patrick. Je suis un peu limité en temps pour ça mais je fais tenter de faire le nécessaire en proposant la possibilité de consulter les sources à partir de mon site internet.
@@EricPeronnin Bonjour Eric, merci beaucoup, finalement j'ai trouvé d'où venait mon problème, mon code fonctionne (je lançait la simulation en ayant sélectionné l'UUT et non le testbench _tb dans la hiérarchie ce qui me donnait des signaux undefined U. C'est assez piégeant). Vous nous consacrez déjà beaucoup de temps, merci.
Bonsoir. Il y a une chose essentielle à comprendre en VHDL : toutes les équations de l'architecture s'effectuent en même temps. Et quand le compilateur compile un process, même si c'est une description séquentielle, ce n'est finalement après compilation qu'un ensemble d'équations. Par conséquent, le process de ce programme et la ligne que vous pointez correspondent à des équations calculées en même temps. Le process fait évoluer le compteur sur le signal interne iCompteur à la fréquence imposée par le signal entrant clk. La valeur du compteur interne est rendue disponible à la sortie par l'affectation dont vous parlez compteur
@@EricPeronnin Beaucoup plus clair, merci pour votre retour rapide ! C'est effectivement un point important que je n'avais pas compris concernant la "périodicité" des équations de l'architecture. C'est un peu frustrant, venant du C (ou de tout autre langage algorithmique d'ailleurs), de voir qu'ici en VHDL cette affectation de signal est toujours effective alors qu'elle est en dehors de la boucle séquentielle qui fait évoluer la variable "tampon". Mais bon il va falloir que ça rentre ahah. Encore merci pour votre contenu très pédagogique, c'est un plaisir d'apprendre avec vos vidéos claires et concises !
Bonsoir comment le débordement de capacité, c'est à dire le 15+1 pour reprendre votre exemple, est-il censé être géré ? J'ai un petit soucis, j'ai recopié votre code dans IceCube2 de Lattice (je me remet au VHDL car j'ai un petit projet pour lequel je vais avoir besoin d'un de leur microFPGA de la série iCE40, donc j'en ai aussi profité pour apprendre ce logiciel à l'aide notamment de ce tuto th-cam.com/video/b0OaaIPoKE8/w-d-xo.html), et le problème c'est que le simulateur plante pour le passage de 15 à 0. ça m'oblige à utiliser un if iCompteur = 15 then iCompteur
Bonjour Yannick. La faute en revient certainement à votre simulateur dont j'ai l'impression qu'il ne gère pas convenablement le range 0 to 15 pour iCompteur. Je n'ai pas rencontré ce problème sur Quartus d'Altera, ISE ou Vivado de Xilinx. Sans passer par ce compteur interne, vous pouvez procéder de la façon suivante : entity compteur4bits is Port ( clk : in STD_LOGIC; compteur : inout STD_LOGIC_VECTOR(3 downto 0)); end compteur4bits; architecture Behavioral of compteur4bits is begin compteur
Dans ce cas il me semble plus facile d'utiliser Vivado HLS pour une description en C de votre filtre. C'est personnellement ce que j'ai fait en créant un IP de filtrage.
nice très beau cours , j'aime la façon dont ce cours se donne merci beaucoup frère
T le meilleure professeur!
Merci énormément , avec tes vidéos j'ai l'espoir de maîtriser VHDL
Merci pour cette nouvelle vidéo.
Beau travail. Très pédagogique. Merci.
Merci !
Super ! Grâce a vos cours ma programmation sera moins anarchique !!
Merci.
Bonjour merci pour cette vidéo. Quand la variable iCompteur dépasse 15 elle retombe à zéro automatiquement ?
Peut-on utiliser les lignes :
Use ieee.numeric_std.all;
Use ieee.std_logic_unsigned.all;
sans utiliser les opérations de conversion VHDL ? comme ca nous pouvons par exemple effectuer une addition entre un INTEGER et un STD_LOGIC_VECTOR !
On peut. Si vous ne travaillez qu'avec des non-signés, vous pouvez vous contenter de std_logic_unsigned.
Bonjour Eric, merci toujours passionnant et très didactique. Pouvez-vous fournir le code de simulation pour cet exercice? Egalement, comment obtenez vous le résultat après implémentation, je n'ai pas trouvé cette fonction avec ISE. merci!
Bonjour Patrick. Je suis un peu limité en temps pour ça mais je fais tenter de faire le nécessaire en proposant la possibilité de consulter les sources à partir de mon site internet.
@@EricPeronnin Bonjour Eric, merci beaucoup, finalement j'ai trouvé d'où venait mon problème, mon code fonctionne (je lançait la simulation en ayant sélectionné l'UUT et non le testbench _tb dans la hiérarchie ce qui me donnait des signaux undefined U. C'est assez piégeant). Vous nous consacrez déjà beaucoup de temps, merci.
Bonjour M. Peronnin, et merci pour vos vidéos très instructives !
J'ai une question concernant la ligne compteur
Bonsoir. Il y a une chose essentielle à comprendre en VHDL : toutes les équations de l'architecture s'effectuent en même temps. Et quand le compilateur compile un process, même si c'est une description séquentielle, ce n'est finalement après compilation qu'un ensemble d'équations. Par conséquent, le process de ce programme et la ligne que vous pointez correspondent à des équations calculées en même temps.
Le process fait évoluer le compteur sur le signal interne iCompteur à la fréquence imposée par le signal entrant clk. La valeur du compteur interne est rendue disponible à la sortie par l'affectation dont vous parlez compteur
@@EricPeronnin Beaucoup plus clair, merci pour votre retour rapide !
C'est effectivement un point important que je n'avais pas compris concernant la "périodicité" des équations de l'architecture. C'est un peu frustrant, venant du C (ou de tout autre langage algorithmique d'ailleurs), de voir qu'ici en VHDL cette affectation de signal est toujours effective alors qu'elle est en dehors de la boucle séquentielle qui fait évoluer la variable "tampon". Mais bon il va falloir que ça rentre ahah.
Encore merci pour votre contenu très pédagogique, c'est un plaisir d'apprendre avec vos vidéos claires et concises !
Bonsoir
comment le débordement de capacité, c'est à dire le 15+1 pour reprendre votre exemple, est-il censé être géré ?
J'ai un petit soucis, j'ai recopié votre code dans IceCube2 de Lattice (je me remet au VHDL car j'ai un petit projet pour lequel je vais avoir besoin d'un de leur microFPGA de la série iCE40, donc j'en ai aussi profité pour apprendre ce logiciel à l'aide notamment de ce tuto th-cam.com/video/b0OaaIPoKE8/w-d-xo.html), et le problème c'est que le simulateur plante pour le passage de 15 à 0. ça m'oblige à utiliser un
if iCompteur = 15 then iCompteur
Bonjour Yannick.
La faute en revient certainement à votre simulateur dont j'ai l'impression qu'il ne gère pas convenablement le range 0 to 15 pour iCompteur. Je n'ai pas rencontré ce problème sur Quartus d'Altera, ISE ou Vivado de Xilinx.
Sans passer par ce compteur interne, vous pouvez procéder de la façon suivante :
entity compteur4bits is
Port ( clk : in STD_LOGIC;
compteur : inout STD_LOGIC_VECTOR(3 downto 0));
end compteur4bits;
architecture Behavioral of compteur4bits is
begin
compteur
Excellente explication !! 👏 svp comment je peux faire un compteur(000-999) ?
ça marche pas avec test bench
Svp Comment. Peux écrire l évolution de cette équation en vhdl x(k+1)=a*x(n)*(1-x(n))
Vous voulez faire du filtrage numérique ?
@@EricPeronnin oui svp
Avec Vivado ?
@@EricPeronnin oui
Dans ce cas il me semble plus facile d'utiliser Vivado HLS pour une description en C de votre filtre. C'est personnellement ce que j'ai fait en créant un IP de filtrage.