From 382a44aac8457c3ced7d13e5b2517ce54e308891 Mon Sep 17 00:00:00 2001 From: Benjamin Chausse Date: Sun, 4 May 2025 15:41:34 -0400 Subject: 1.3.7 new 7Segment symbols --- .../sources_1/imports/src/AppCombi_top.vhd | 20 +-- .../sources_1/imports/src/septSegments_Top.vhd | 30 ++-- .../imports/src/septSegments_encodeur.vhd | 155 ++++++++++----------- 3 files changed, 101 insertions(+), 104 deletions(-) diff --git a/pb_APP_log_comb.srcs/sources_1/imports/src/AppCombi_top.vhd b/pb_APP_log_comb.srcs/sources_1/imports/src/AppCombi_top.vhd index c5145de..2b2c8e3 100644 --- a/pb_APP_log_comb.srcs/sources_1/imports/src/AppCombi_top.vhd +++ b/pb_APP_log_comb.srcs/sources_1/imports/src/AppCombi_top.vhd @@ -48,11 +48,11 @@ architecture BEHAVIORAL of AppCombi_top is signal d_opa : std_logic_vector (3 downto 0):= "0000"; -- operande A signal d_opb : std_logic_vector (3 downto 0):= "0000"; -- operande B signal d_cin : std_logic := '0'; -- retenue entree - signal d_sum : std_logic_vector (3 downto 0):= "0000"; -- somme + signal d_sum : std_logic_vector (4 downto 0):= "00000"; -- somme signal d_cout : std_logic := '0'; -- retenue sortie -- - signal d_AFF0 : std_logic_vector (3 downto 0):= "0000"; - signal d_AFF1 : std_logic_vector (3 downto 0):= "0000"; + signal d_AFF0 : std_logic_vector (4 downto 0):= "00000"; + signal d_AFF1 : std_logic_vector (4 downto 0):= "00000"; component Add4Bits is Port ( @@ -74,8 +74,8 @@ architecture BEHAVIORAL of AppCombi_top is component septSegments_Top is Port ( clk : in STD_LOGIC; -- horloge systeme, typique 100 MHz (preciser par le constante) - i_AFF0 : in STD_LOGIC_VECTOR (3 downto 0); -- donnee a afficher sur 8 bits : chiffre hexa position 1 et 0 - i_AFF1 : in STD_LOGIC_VECTOR (3 downto 0); -- donnee a afficher sur 8 bits : chiffre hexa position 1 et 0 + i_AFF0 : in STD_LOGIC_VECTOR (4 downto 0); -- donnee a afficher sur 8 bits : chiffre hexa position 1 et 0 + i_AFF1 : in STD_LOGIC_VECTOR (4 downto 0); -- donnee a afficher sur 8 bits : chiffre hexa position 1 et 0 o_AFFSSD_Sim : out string(1 to 2); o_AFFSSD : out STD_LOGIC_VECTOR (7 downto 0) ); @@ -109,12 +109,12 @@ begin A => d_opa, B => d_opb, C => d_cin, - R => d_sum, + R => d_sum(3 downto 0), Rc => d_cout ); - + led_test_btn <= i_btn(2 downto 0); - + ledTest : Decodeur_3_8 port map ( control_bits => led_test_btn, bus_out => o_pmodled @@ -124,8 +124,8 @@ begin d_opb <= i_btn; -- operande B sur boutons d_cin <= '0'; -- la retenue d'entrée alterne 0 1 a 1 Hz - d_AFF0 <= d_sum(3 downto 0); -- Le resultat de votre additionneur affiché sur PmodSSD(0) - d_AFF1 <= '0' & '0' & '0' & d_Cout; -- La retenue de sortie affichée sur PmodSSD(1) (0 ou 1) + d_AFF0 <= d_sum(4 downto 0); -- Le resultat de votre additionneur affiché sur PmodSSD(0) + d_AFF1 <= '0' & '0' & '0' & '0' & d_Cout; -- La retenue de sortie affichée sur PmodSSD(1) (0 ou 1) o_led6_r <= d_Cout; -- La led couleur représente aussi la retenue en sortie Cout --o_pmodled <= d_opa & d_opb; -- Les opérandes d'entrés reproduits combinés sur Pmod8LD o_led (3 downto 0) <= '0' & '0' & '0' & d_S_1Hz; -- La LED0 sur la carte représente la retenue d'entrée diff --git a/pb_APP_log_comb.srcs/sources_1/imports/src/septSegments_Top.vhd b/pb_APP_log_comb.srcs/sources_1/imports/src/septSegments_Top.vhd index 3f72b23..369248c 100644 --- a/pb_APP_log_comb.srcs/sources_1/imports/src/septSegments_Top.vhd +++ b/pb_APP_log_comb.srcs/sources_1/imports/src/septSegments_Top.vhd @@ -11,9 +11,9 @@ -- Outils : vivado 2016.1 64 bits, vivado 2018.2 --------------------------------------------------------------------------------------------- -- Description: --- Affichage sur module de 2 chiffes (7 segments) sur PmodSSD --- reference https://reference.digilentinc.com/reference/pmod/pmodssd/start --- PmodSSD™ Reference Manual Doc: 502-126 Digilent, Inc. +-- Affichage sur module de 2 chiffes (7 segments) sur PmodSSD +-- reference https://reference.digilentinc.com/reference/pmod/pmodssd/start +-- PmodSSD Reference Manual Doc: 502-126 Digilent, Inc. -- -- Revisions -- mise a jour D Dalle 22 octobre 2018 corrections, simplifications @@ -26,16 +26,16 @@ -- Daniel Dalle 30 juillet 2018: -- revision pour une seule entre sur 8 bits affichee sur les deux chiffres Hexa -- --- Creation selon affhex7segx4v3.vhd +-- Creation selon affhex7segx4v3.vhd -- (Daniel Dalle, Réjean Fontaine Universite de Sherbrooke, Departement GEGI) -- 26 septembre 2011, revision 12 juin 2012, 25 janvier 2013, 7 mai 2015 -- Contrôle de l'afficheur a sept segment (BASYS2 - NEXYS2) -- horloge 100MHz et diviseur interne --------------------------------------------------------------------------------------------- -- À faire : --- --- --- +-- +-- +-- --------------------------------------------------------------------------------------------- library IEEE; @@ -44,12 +44,12 @@ use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity septSegments_Top is -generic (const_CLK_MHz: integer := 100); -- horloge en MHz, typique 100 MHz +generic (const_CLK_MHz: integer := 100); -- horloge en MHz, typique 100 MHz Port ( clk : in STD_LOGIC; -- horloge systeme, typique 100 MHz (preciser par le constante) - i_AFF0 : in STD_LOGIC_VECTOR (3 downto 0); -- donnee a afficher sur 4 bits : chiffre hexa position 0 - i_AFF1 : in STD_LOGIC_VECTOR (3 downto 0); -- donnee a afficher sur 4 bits : chiffre hexa position 1 + i_AFF0 : in STD_LOGIC_VECTOR (4 downto 0); -- donnee a afficher sur 4 bits : chiffre hexa position 0 + i_AFF1 : in STD_LOGIC_VECTOR (4 downto 0); -- donnee a afficher sur 4 bits : chiffre hexa position 1 o_AFFSSD_Sim : out string(2 downto 1); - o_AFFSSD : out STD_LOGIC_VECTOR (7 downto 0) + o_AFFSSD : out STD_LOGIC_VECTOR (7 downto 0) ); end septSegments_Top; -- sorties directement adaptees au connecteur PmodSSD @@ -57,18 +57,18 @@ architecture Behavioral of septSegments_Top is component septSegments_encodeur is Port( - i_AFF : in STD_LOGIC_VECTOR(3 downto 0); -- caractère à afficher + i_AFF : in STD_LOGIC_VECTOR(4 downto 0); -- caractère à afficher o_CharacterePourSim : out string(1 to 1); -- pour simulation seulement o_Seg : out STD_LOGIC_VECTOR(6 downto 0) -- encodage 7-segments ); end component; component septSegments_refreshPmod is -generic(const_CLK_MHz : integer := 100); -- horloge en MHz, typique 100 MHz +generic(const_CLK_MHz : integer := 100); -- horloge en MHz, typique 100 MHz Port( clk : in STD_LOGIC; -- horloge systeme, typique 100 MHz (preciser par le constante) i_SSD0 : in STD_LOGIC_VECTOR(6 downto 0); -- donnee a afficher sur 1er chiffre - i_SSD1 : in STD_LOGIC_VECTOR(6 downto 0); -- donnee a afficher sur 2e chiffre + i_SSD1 : in STD_LOGIC_VECTOR(6 downto 0); -- donnee a afficher sur 2e chiffre JPmod : out STD_LOGIC_VECTOR(7 downto 0) -- sorties directement adaptees au connecteur PmodSSD ); end component; @@ -95,7 +95,7 @@ Port map( ); inst_refresh : septSegments_refreshPmod ---generic(const_CLK_MHz : integer := 100); -- horloge en MHz, typique 100 MHz +--generic(const_CLK_MHz : integer := 100); -- horloge en MHz, typique 100 MHz Port map( clk => clk, i_SSD0 => s_segment_lsb, diff --git a/pb_APP_log_comb.srcs/sources_1/imports/src/septSegments_encodeur.vhd b/pb_APP_log_comb.srcs/sources_1/imports/src/septSegments_encodeur.vhd index 5419a0c..13f4ca0 100644 --- a/pb_APP_log_comb.srcs/sources_1/imports/src/septSegments_encodeur.vhd +++ b/pb_APP_log_comb.srcs/sources_1/imports/src/septSegments_encodeur.vhd @@ -2,18 +2,18 @@ -- circuit affhex_pmodssd.vhd --------------------------------------------------------------------------------------------- -- Université de Sherbrooke - Département de GEGI --- Version : 2.0 --- Nomenclature : 0.8 GRAMS --- Date : revision 23 octobre 2018 --- Auteur(s) : Réjean Fontaine, Daniel Dalle --- Technologies : FPGA Zynq (carte ZYBO Z7-10 ZYBO Z7-20) +-- Version : 2.0 +-- Nomenclature : 0.8 GRAMS +-- Date : revision 23 octobre 2018 +-- Auteur(s) : Réjean Fontaine, Daniel Dalle +-- Technologies : FPGA Zynq (carte ZYBO Z7-10 ZYBO Z7-20) -- --- Outils : vivado 2016.1 64 bits, vivado 2018.2 +-- Outils : vivado 2016.1 64 bits, vivado 2018.2 --------------------------------------------------------------------------------------------- -- Description: --- Affichage sur module de 2 chiffes (7 o_Segents) sur PmodSSD --- reference https://reference.digilentinc.com/reference/pmod/pmodssd/start --- PmodSSD™ Reference Manual Doc: 502-126 Digilent, Inc. +-- Affichage sur module de 2 chiffes (7 o_Segents) sur PmodSSD +-- reference https://reference.digilentinc.com/reference/pmod/pmodssd/start +-- PmodSSD Reference Manual Doc: 502-126 Digilent, Inc. -- -- Revisions -- mise a jour D Dalle 22 octobre 2018 corrections, simplifications @@ -26,95 +26,92 @@ -- Daniel Dalle 30 juillet 2018: -- revision pour une seule entre sur 8 bits affichee sur les deux chiffres Hexa -- --- Creation selon affhex7segx4v3.vhd +-- Creation selon affhex7segx4v3.vhd -- (Daniel Dalle, Réjean Fontaine Universite de Sherbrooke, Departement GEGI) -- 26 septembre 2011, revision 12 juin 2012, 25 janvier 2013, 7 mai 2015 -- Contrôle de l'afficheur a sept o_Segent (BASYS2 - NEXYS2) -- horloge 100MHz et diviseur interne --------------------------------------------------------------------------------------------- -- À faire : --- --- --- +-- +-- +-- --------------------------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; -entity septSegments_encodeur is - Port( - i_AFF : in STD_LOGIC_VECTOR(3 downto 0); -- caractère à afficher - o_CharacterePourSim : out string(1 to 1); -- pour simulation seulement - o_Seg : out STD_LOGIC_VECTOR(6 downto 0) -- encodage 7-segments - ); +entity septSegments_encodeur is Port( + i_AFF : in STD_LOGIC_VECTOR(4 downto 0); -- caractère à afficher + o_CharacterePourSim : out string(1 to 1); -- pour simulation seulement + o_Seg : out STD_LOGIC_VECTOR(6 downto 0)); -- encodage 7-segments end septSegments_encodeur; architecture Behavioral of septSegments_encodeur is + -- fonction réservée pour l'affichage en simulation seulement + function segment2String(display : std_logic_vector( 6 downto 0)) + return string is variable v_ReturnString : string(1 to 1); + begin + case display is + when "0111111" => v_ReturnString := "0"; -- 0 + when "0000110" => v_ReturnString := "1"; -- 1 + when "1011011" => v_ReturnString := "2"; -- 2 + when "1001111" => v_ReturnString := "3"; -- 3 + when "1100110" => v_ReturnString := "4"; -- 4 + when "1101101" => v_ReturnString := "5"; -- 5 + when "1111101" => v_ReturnString := "6"; -- 6 + when "0000111" => v_ReturnString := "7"; -- 7 + when "1111111" => v_ReturnString := "8"; -- 8 + when "1101111" => v_ReturnString := "9"; -- 9 + when "1110111" => v_ReturnString := "A"; -- A + when "1111100" => v_ReturnString := "B"; -- b + when "0111001" => v_ReturnString := "C"; -- C + when "1011110" => v_ReturnString := "D"; -- d + when "1111001" => v_ReturnString := "E"; -- E + when "1110001" => v_ReturnString := "F"; -- F + when "1000000" => v_ReturnString := "-"; -- négatif + when "1010000" => v_ReturnString := "r"; -- r pour erreur + when others => v_ReturnString := "_"; -- code non reconnu + end case; + return v_ReturnString; + end segment2String; --- fonction réservée pour l'affichage en simulation seulement -function segment2String(display : std_logic_vector( 6 downto 0)) - return string is - variable v_ReturnString : string(1 to 1); - begin - case display is - when "0111111" => v_ReturnString := "0"; -- 0 - when "0000110" => v_ReturnString := "1"; -- 1 - when "1011011" => v_ReturnString := "2"; -- 2 - when "1001111" => v_ReturnString := "3"; -- 3 - when "1100110" => v_ReturnString := "4"; -- 4 - when "1101101" => v_ReturnString := "5"; -- 5 - when "1111101" => v_ReturnString := "6"; -- 6 - when "0000111" => v_ReturnString := "7"; -- 7 - when "1111111" => v_ReturnString := "8"; -- 8 - when "1101111" => v_ReturnString := "9"; -- 9 - when "1110111" => v_ReturnString := "A"; -- A - when "1111100" => v_ReturnString := "B"; -- b - when "0111001" => v_ReturnString := "C"; -- C - when "1011110" => v_ReturnString := "D"; -- d - when "1111001" => v_ReturnString := "E"; -- E - when "1110001" => v_ReturnString := "F"; -- F - when "1000000" => v_ReturnString := "-"; -- négatif - when "1010000" => v_ReturnString := "r"; -- r pour erreur - when others => v_ReturnString := "_"; -- code non reconnu - end case; - return v_ReturnString; - end segment2String; - -- fin de la fonction - - - signal s_Seg : STD_LOGIC_VECTOR(6 downto 0); + signal s_Seg : STD_LOGIC_VECTOR(6 downto 0); begin --- correspondance des o_Segents des afficheurs -o_Segent: process (i_AFF) - begin - case i_AFF is - -- "gfedcba" - when "0000" => s_Seg <= "0111111"; -- 0 - when "0001" => s_Seg <= "0000110"; -- 1 - when "0010" => s_Seg <= "1011011"; -- 2 - when "0011" => s_Seg <= "1001111"; -- 3 - when "0100" => s_Seg <= "1100110"; -- 4 - when "0101" => s_Seg <= "1101101"; -- 5 - when "0110" => s_Seg <= "1111101"; -- 6 - when "0111" => s_Seg <= "0000111"; -- 7 - when "1000" => s_Seg <= "1111111"; -- 8 - when "1001" => s_Seg <= "1101111"; -- 9 - when "1010" => s_Seg <= "1110111"; -- A - when "1011" => s_Seg <= "1111100"; -- B - when "1100" => s_Seg <= "0111001"; -- C - when "1101" => s_Seg <= "1011110"; -- D - when "1110" => s_Seg <= "1111001"; -- E - when "1111" => s_Seg <= "1110001"; -- F - when others => s_Seg <= "0000000"; - end case; - end process; - - - o_CharacterePourSim <= segment2String(s_Seg); - o_Seg <= s_Seg ; + -- correspondance des o_Segents des afficheurs + o_Segent: process (i_AFF) + begin + case i_AFF is + -- "gfedcba" + when "00000" => s_Seg <= "0111111"; -- 0 + when "00001" => s_Seg <= "0000110"; -- 1 + when "00010" => s_Seg <= "1011011"; -- 2 + when "00011" => s_Seg <= "1001111"; -- 3 + when "00100" => s_Seg <= "1100110"; -- 4 + when "00101" => s_Seg <= "1101101"; -- 5 + when "00110" => s_Seg <= "1111101"; -- 6 + when "00111" => s_Seg <= "0000111"; -- 7 + when "01000" => s_Seg <= "1111111"; -- 8 + when "01001" => s_Seg <= "1101111"; -- 9 + when "01010" => s_Seg <= "1110111"; -- A + when "01011" => s_Seg <= "1111100"; -- B + when "01100" => s_Seg <= "0111001"; -- C + when "01101" => s_Seg <= "1011110"; -- D + when "01110" => s_Seg <= "1111001"; -- E + when "01111" => s_Seg <= "1110001"; -- F + when "10000" => s_Seg <= "1000000"; -- neg. (-) + when "10001" => s_Seg <= "1010000"; -- Err. (r) + when "10010" => s_Seg <= "0001000"; -- invalid (_) + when others => s_Seg <= "0000000"; + end case; + end process; + + + o_CharacterePourSim <= segment2String(s_Seg); + o_Seg <= s_Seg ; end Behavioral; -- cgit v1.2.3