pantalla de 7 segmentos en VHDL?

1

Por lo tanto, actualmente estoy escribiendo el código VHDL para una pantalla de 7 segmentos que mostrará (0-F) una vez por segundo. Ya casi he hecho todo, lo único que me he quedado atascado es el controlador.

Necesito tener 4 botones, el primero inicia el contador, el segundo lo detiene, el tercero lo incrementa en uno y el último lo restablece a 0 (ya tengo el último hecho, solo necesito el primero tres)

Aquí está mi código general (tenga en cuenta que el componente del Problema 2 es mi contador):

entity SSD is
port (
   seg : out std_logic_vector (6 downto 0);
   an3 : out std_logic;
   btn1, btn2, btn3, btn4 : in std_logic;
   clk : in std_logic);
    end SSD;

    architecture Behavioral of SSD is

    component hex7seg is
    port (
        x : in std_logic_vector (3 downto 0);
        a_to_g : out std_logic_vector (6 downto 0));
    end component;

    component Problem2 is
    port (
        clr : in std_logic;
        ce : in std_logic;
        clk : in std_logic;
        b : out std_logic_vector (3 downto 0);
        tc : out std_logic);
    end component;

component clkdiv is
port (
    rst : in std_logic;
    clk : in std_logic;
    clkout : out std_logic);
end component;

component controller is
port (
    start : in std_logic;
    stop : in std_logic;
    inc : in std_logic;
    rst : in std_logic;
    clk : in std_logic;
    run : out std_logic);
end component;

signal b : std_logic_vector(3 downto 0);
signal run : std_logic;
signal clk_1sec : std_logic;
signal tc : std_logic;

begin

U1: hex7seg port map (x => b, a_to_g => seg);

U2: Problem2 port map (clr=>btn4, ce=>run, clk=>clk_1sec, b=>b, tc=>tc);

U3: controller port map (start => btn1, stop => btn2, inc => btn3, rst => btn4, clk => clk_1sec, run => run);

U4: clkdiv port map (rst => btn4, clk => clk, clkout => clk_1sec);

an3 <= '0';

end Behavioral;

Esto es lo que tengo hasta ahora para el código del controlador:

entity controller is
    Port ( start : in  STD_LOGIC;
           stop : in  STD_LOGIC;
           inc : in  STD_LOGIC;
           rst : in  STD_LOGIC;
           clk : in  STD_LOGIC;
           run : out  STD_LOGIC);
end controller;

architecture Behavioral of controller is

begin
    run <= '1';

end Behavioral;

No estoy realmente seguro de a dónde ir para hacer funcionar los otros 3 botones, cualquier ayuda o dirección sería muy apreciada.

    
pregunta VakarianWrex

1 respuesta

-1

No he codificado en VHDL en mucho tiempo, no sé por qué todavía lo enseñan, deberían enseñar Verilog, pero la respuesta a continuación sigue siendo válida.

Tu contador debe tener las siguientes entradas:

  1. Reloj - ya lo tienes
  2. Incremento: si la señal es alta, el contador debería incrementarse en uno en el siguiente flanco ascendente del reloj
  3. Borrar: ya lo tienes, debería restablecer el recuento a cero
  4. Habilitar contador: permite pausar / deshabilitar el contador, asegurarnos de que el 'incremento' todavía funciona aunque el Habilitar contador sea cero.

Su controlador admite 4 entradas de botón y genera 3 salidas. Para los botones 3 y 4 detecta un flanco ascendente de la entrada y genera un pulso para 1 ciclo de reloj, es decir,

          ____    ____    ____    ____
clock:  __|  |____|  |____|  |____|  |
               ____________________
input:  _______|                  |_____
                  ____
output: __________|  |__________________

La salida de "habilitación de contador" del controlador se controla mediante los botones 1 & 2. Un flanco ascendente en el botón 1 lo establece alto y un flanco ascendente en el botón 2 lo despeja al mínimo. En efecto, la habilitación del contador se controla mediante un pestillo SR donde la señal S es el botón 1 y R el botón 2.

Luego, conecta las 3 salidas del controlador a su contador (Problema 2).

    
respondido por el EEToronto

Lea otras preguntas en las etiquetas