VHDL Exercice 7 Segments - Forum Futura Sciences
Maybe your like
- Se souvenir de moi ?
- Retour sur Futura
- S'inscrire

- Forum
- Futura-Techno : les forums de l'informatique et des technologies
- Électronique
- VHDL exercice 7 segments
- 01/11/2014, 12h04 #1 invited5729797
Date d'inscription janvier 1970 Messages 13 VHDL exercice 7 segments
------Bonjour à tout le monde
-----
! Je suis actuellement en train de faire un petit exercice de VHDL assez simple. Mais je bug sur certain points depuis un moment :/ si quelqu'un aurait la gentillesse de m'aider sa serais super
Voici les données L'affichage 7 segments de votre carte doit afficher le nombre (en décimal) entré en binaire sur les switches S5 (MSB) à S8(LSB). =>Si s1 est actif, l'affichage affiche un tiret. =>Si s2 est actif, l'affichage est éteint. s2 est prioritaire sur s1. Mon idée était la suivante : J'ai voulais mettre le tout dans un process. Après est'il possible de mettre mon switch select dans mon process ? je vous remercie d'avance =) --Déclaration des librairies-- Library IEEE; use IEEE.Std_Logic_1164.all; --Déclaration des entrées et sorties-- entity EX is port(s1,s2,s5,s6,s7,s8: in std_logic; a,b,c,d,e,f,g : out std_logic); end EX; -------------------------------------- --Déclaration des signaux-- architecture EX_arch of EX is signal segments : Std_logic_vector (7 downto 1); signal switch : std_logic_vector (4 downto 1); --------------------------- begin process(s1,s2, segments) begin if(s2 = '1' and (s1 = '1' or s1 = '0')) then--s2 prend la priorité sur s1 segments <= "1111111"; elsif(s1 = '1' and s2 = '0') then--s1 actif si s2 = 0 segments <= "1111110"; else end if; end process; --gestions de segments en fonction de switch-- with switch select segments <= "0000001" when "0000", "1001111" when "0001", "0010010" when "0010", "0000110" when "0011", "1001100" when "0100", "0100100" when "0101", "0100000" when "0110", "0001111" when "0111", "0000000" when "1000", "0000100" when "1001", "0001000" when "1010", "1100000" when "1011", "0110001" when "1100", "1000010" when "1101", "0110000" when "1110", "0111000" when "1111"; --gestion des sorties-- (a,b,c,d,e,f,g) <= segments; switch <= (s5,s6,s7,s8); end EX_Arch; - 01/11/2014, 14h12 #2 Jack Modérateur Date d'inscription avril 2003 Localisation Metz Messages 17 806
Re : VHDL exercice 7 segments
Il est pourtant clairement spécifié dans les règles participatives du forum info programmation que les problèmes de VHDL doivent être postés dans le forum électronique. http://forums.futura-sciences.com/pr...ves-forum.html
- 01/11/2014, 17h18 #3 jiherve Date d'inscription juin 2006 Localisation gironde Âge 73 Messages 27 954
Re : VHDL exercice 7 segments
Bonsoir, on va faire çà par étapes: Code: process(s1,s2, segments) begin -- if(s2 = '1' and (s1 = '1' or s1 = '0')) then--s2 prend la priorité sur s1 if(s2 = '1') then segments <= "1111111"; --elsif(s1 = '1' and s2 = '0') then--s1 actif si s2 = 0 elsif(s1 = '1' ) then--s1 actif si s2 = 0 segments <= "1111110"; else end if; end process; as tu compris ? JR
l'électronique c'est pas du vaudou!
- 01/11/2014, 17h44 #4 invited5729797
Date d'inscription janvier 1970 Messages 13 Re : VHDL exercice 7 segments
Bonsoir, Merci pour la réponse. En fait, j'avais commencer avec ta solution. Mais dans ce cas là, la condition quand S1 = '1' et S2 = '1' n'est pas gérée non. ?Vu que S2 doit prendre la priorité et éteindre l'affichage. Est'il possible,de mettre mon switch select. Dans la condition else dans mon process ? Je voudrais pouvoir, afficher avec mon switch (S5 à S8) donc 4 bits. Les valeurs de 0 à 15 en héxa (0 à F). Uniquement quand S1 et S2 = '0'. Je pensais, faire un switch select en fonction de (S5 à S8).Pour afficher mes différente valeurs sur mon afficheur. Et si s1 = '1' l'afficheur affiche un tiret. Et si s2 = '1' l'afficheur est éteint. Et si s1 et s2 = '0' alors là, il affiche les valeurs obtenues en fonction du switch (S5 à S8) Merci bien de l'aide ^^
- Aujourd'hui A voir en vidéo sur Futura
- 01/11/2014, 20h38 #5 jiherve Date d'inscription juin 2006 Localisation gironde Âge 73 Messages 27 954
Re : VHDL exercice 7 segments
Bonsoir, lorsque l'on écrit une séquence if ,elsif, else il y a une priorité implicite qui fait que le elsif n'est pris en compte que si la condition du if est fausse, de même le else ne sera pris en compte que si le if et le elsif sont faux tous les deux. ensuite bien que le VHDL autorise les affectations concurrentes il faut que le décodage du "switch " soit fait dans le process au moyen d'un CASE et pas d'un Switch, un CASE se termine toujours par un "when others" qui capture à la fois le dernier cas explicite du choix mais aussi tous ceux auxquels on ne pense pas le VHDL autorisant 9 etats possible pour un std_logic (H,L,X etc etc) , par ailleurs une concaténation s'effectue avec le signe "&" et n'est possible que dans un sens. le code avec les bons commentaires Code: --Déclaration des librairies-- Library IEEE; use IEEE.Std_Logic_1164.all; --Déclaration des entrées et sorties-- entity EX is port(s1,s2,s5,s6,s7,s8: in std_logic; a,b,c,d,e,f,g : out std_logic); end EX; -------------------------------------- --Déclaration des signaux-- architecture EX_arch of EX is --------------------------- begin process(s1,s2,s5,s6,s7,s8) variable switch : std_logic_vector (3 downto 0); variable segments : std_logic_vector (6 downto 0); begin if(s2 = '1') then -- si s2 = 1 quelque soit la valeur de s1 segments := "1111111"; elsif(s1 = '1' ) then-- si s1 =1 et s2 = 0 segments := "1111110"; else -- si s1 = 0 et s2 = 0 switch := (s5 & s6 & s7 & s8);-- ici on lit les signaux d'entrée de l'entité case switch is when "0000" => segments := "0000001"; when "0001" => segments := "1001111"; when "0010" => segments := "0010010"; when "0011" => segments := "0000110"; when "0100" => segments := "1001100"; when "0101" => segments := "0100100"; when "0110" => segments := "0100000"; when "0111" => segments := "0001111"; when "1000" => segments := "0000000"; when "1001" => segments := "0000100"; when "1010" => segments := "0001000"; when "1011" => segments := "1100000"; when "1100" => segments := "0110001"; when "1101" => segments := "1000010"; when "1110" => segments := "0100000"; when others => -- "1111" segments := "0111000"; end case; end if; -- affectations des sorties de l'entité a <= segments(6); b <= segments(5); c <= segments(4); d <= segments(3); e <= segments(2); f <= segments(1); g <= segments(0); end process; end; utilise Notepad++ pour écrire ton code et respecte les indentations(ne pas utiliser de tabulation mais des espaces) cela sera plus lisible si tu as des questions je reste à l'écoute JR
Dernière modification par jiherve ; 01/11/2014 à 20h42.
l'électronique c'est pas du vaudou!
- 01/11/2014, 23h06 #6 invited5729797
Date d'inscription janvier 1970 Messages 13 Re : VHDL exercice 7 segments
Re bonsoir
Merci beaucoup pour le coup de main. Sa marche bien, et désoler pour la présentation. J'utilise notepad et ensuite je fais print screen du code ? Juste une dernière question, dans le process pourquoi, je n'ai pas besoin de mettre la variable segments ? Par contre, j'utilise quartus d'Altera pour la programmation. Et il n'accepte pas la forme d'écriture ":=" j'utilise "=>"je ne sais pas trop pourquoi. Le case et très semblable au switch non ? Bonne soirée - 01/11/2014, 23h21 #7 jiherve Date d'inscription juin 2006 Localisation gironde Âge 73 Messages 27 954
Re : VHDL exercice 7 segments
Bonsoir, cela compile très bien sous quartus!!! Si tu doit écrire <= c'est que tu n as pas gardé mon code car "segment" est déclaré comme une variable et pas comme un signal et c'est pour çà que "segment" n'est pas dans la liste de sensibilité du process. CASE est beaucoup plus puissant que Switch. pour publier du code : "aller en mode avancé" puis balise "code" (le #) et un classique ctrl C, ctrl V entre les balises JR
l'électronique c'est pas du vaudou!
- 02/11/2014, 15h54 #8 stefjm Date d'inscription avril 2008 Localisation Zut! C'est pas homogène! Ben t'as qu'à mélanger... Messages 18 411
Re : VHDL exercice 7 segments
Bonjour, C'est purement combinatoire, du coup, je ne vois pas l'intérêt d'une description séquentielle par process. Une bête affectation conditionnelle suffit . <= ... when (...) else... Non? Je rate un truc?
Moi ignare et moi pas comprendre langage avec «hasard», «réalité» et «existe».
- 02/11/2014, 16h27 #9 jiherve Date d'inscription juin 2006 Localisation gironde Âge 73 Messages 27 954
Re : VHDL exercice 7 segments
Bonjour, Ici le process est, comme tout process, implicitement séquentiel mais au final cela ne se traduit que par du combinatoire, entre l'entrée et la sortie il n'y a qu'un delta. On pourrait effectivement l'écrire de façon différente mais cela sera beaucoup plus lourd et à mon avis moins clair, une unique séquence when .. else serait illisible, bien sur on pourrait jouer avec la concurrence en parallélisant des séquences de ce type, il faudra alors faire très attention à l'ordre d’écriture, the last to talk win. JR
l'électronique c'est pas du vaudou!
- 02/11/2014, 16h36 #10 stefjm Date d'inscription avril 2008 Localisation Zut! C'est pas homogène! Ben t'as qu'à mélanger... Messages 18 411
Re : VHDL exercice 7 segments
Envoyé par jiherve
Bonjour, Ici le process est, comme tout process, implicitement séquentiel mais au final cela ne se traduit que par du combinatoire, entre l'entrée et la sortie il n'y a qu'un delta. On pourrait effectivement l'écrire de façon différente mais cela sera beaucoup plus lourd et à mon avis moins clair, une unique séquence when .. else serait illisible, bien sur on pourrait jouer avec la concurrence en parallélisant des séquences de ce type, il faudra alors faire très attention à l'ordre d’écriture, the last to talk win. JR Ouf, c'est bien ce qu'il me semblait! Par contre, je ne vois pas trop pourquoi la séquence "when else" serait plus illisible que la séquence "case when" : les informations sont les mêmes et la mise en forme du code aussi... Moi ignare et moi pas comprendre langage avec «hasard», «réalité» et «existe».
- 02/11/2014, 16h46 #11 jiherve Date d'inscription juin 2006 Localisation gironde Âge 73 Messages 27 954
Re : VHDL exercice 7 segments
Re le début : segments <= "1111111" when (s2 = '1') else "1111110" when (s1 = '1') else "0000001" when (switch ="0000") else "1001111" (when switch ="0001")else "0010010" when (switch ="0010") else "0000110" when (switch ="0011") else.... Cela fait bien sur exactement la même chose mais c'est moins joli à mon gout, l'emballage dans un process aide à la structuration du code. JR
l'électronique c'est pas du vaudou!
- 02/11/2014, 16h54 #12 stefjm Date d'inscription avril 2008 Localisation Zut! C'est pas homogène! Ben t'as qu'à mélanger... Messages 18 411
Re : VHDL exercice 7 segments
On peut l'écrire joli
: Code: segments <= "1111111" when (s2 = '1') else "1111110" when (s1 = '1') else "0000001" when (switch = "0000") else "1001111" when (switch = "0001") else "0010010" when (switch = "0010") else "0000110" when (switch =" 0011") else....; Moi ignare et moi pas comprendre langage avec «hasard», «réalité» et «existe».
- 02/11/2014, 17h09 #13 jiherve Date d'inscription juin 2006 Localisation gironde Âge 73 Messages 27 954
Re : VHDL exercice 7 segments
Re tu as gagné !
JR l'électronique c'est pas du vaudou!
- 03/11/2014, 07h46 #14 invited5729797
Date d'inscription janvier 1970 Messages 13 Re : VHDL exercice 7 segments
Hello, En faite, j'ai l'habitude de tout mettre dans un process. On devait faire un exercice avec un compteur. Du coup quand il y a pas de clock, je n'ai pas besoin de mettre dans un process ? Le when else est propre et simple en faite =). MC
- 03/11/2014, 10h38 #15 stefjm Date d'inscription avril 2008 Localisation Zut! C'est pas homogène! Ben t'as qu'à mélanger... Messages 18 411
Re : VHDL exercice 7 segments
Bonjour, La description par process est séquentielle, et on peut décrire séquentiellement une fonction combinatoire. A priori, si le process est bien écrit, les deux descriptions donnent exactement le même résultat. jiherve complétera si besoin. Cordialement.
Moi ignare et moi pas comprendre langage avec «hasard», «réalité» et «existe».
Discussions similaires
-
commande d'ascenseur avec VHDL la carte vhdl
Par invite2b1f3b55 dans le forum Électronique Réponses: 6 Dernier message: 02/06/2014, 03h41 -
Segments LCD
Par gcortex dans le forum Électronique Réponses: 5 Dernier message: 01/10/2013, 17h45 -
LCD 7 segments
Par invited99eaf40 dans le forum Électronique Réponses: 3 Dernier message: 09/02/2010, 23h11 -
Câblage Afficheur 7 segments sur 8051 via un décodeur BCD 7 Segments
Par invite79668502 dans le forum Électronique Réponses: 5 Dernier message: 24/09/2009, 20h53 -
Point flottant en VHDL et vhdl-200x
Par invite6eee6b27 dans le forum Logiciel - Software - Open Source Réponses: 0 Dernier message: 02/09/2008, 20h47
Tag » Code Vhdl Afficheur 7 Segment
-
[PDF] Exemple De Code VHDL Pour Un Compteur Connecte A Un Afficheur 7 ...
-
(PDF) Solution VHDL(Transcodeur Binaire 7 Segments+ Mux 8x1+ ...
-
Projet électronique FPGA #2 : Gestion De L'afficheur 7 Segments
-
Décodeur BCD 7 Segments - Technologue Pro
-
7segments VHDL | PDF | VHDL | Domaines De L'informatique - Scribd
-
BCD Vers 7 Segments Décodeur - AskCodez
-
AmelBENAIDA/Afficheur-7-segments-VHDL - GitHub
-
Exemple De Code VHDL Pour Un Compteur Connecte A ...
-
VHDL Code For Seven-Segment Display On Basys 3 FPGA
-
Driving Seven Segment Display With VHDL - YouTube
-
FPGA Et Afficheur 7 Segments: Compteur à Afficheur Unique - C. Boyer
-
[PDF] TD1 : VHDL, Tables De Vérité, Diagramme D'évolution
-
[PDF] Prise En Main De La Partie Schématique
Affichage des résultats 1 à 15 sur 15