FIFO para spartan 3AN: no hay almacenamiento a bordo pero está bien en la simulación

0

Hice una FIFO usando Core Generator y estoy tratando de implementar un código que lo use ...

1) Poniendo el interruptor (T9) en ON, comienzo a transmitir algunos datos a mi fifo (Aquí H-e-l-l-o para prueba)

2) Al presionar el botón T16, leí el FIFO

El código está trabajando en la simulación pero no en la implementación ... Aquí está el resultado de mi simulación:

Laslíneasestánenesteorden:

  1. CLK
  2. INTERRUPTOR
  3. BOTÓN
  4. RST
  5. Noesnecesario
  6. Noesnecesario
  7. Noesnecesario
  8. Data_out

Comopuedever,envíaunceroyluegoun72(HdesdeelcódigoASCIIporqueestoyenviandodatosusandoRS232),luego101(e),luego2veces108(l)yluego111(0)sevuelveagenerarporqueElfifoestáfuncionandodemaneraquesiestávacío,estáenviandoelúltimovalorparaquefuncionebien.

Aquíestáelresultadoquetengousandoputty(unlectorRS232)ypresionandoelbotónT16muchasveces:

Aquíhayunapartedemicódigo,puedoponerelarchivozipsilonecesitas,solopregúntaloenuncomentario.

LaparteenlaquegenerolosdatosenFIFO:

process(clk)beginifrising_edge(clk)thenifSW_T9='1'thenifcnt=10thenwr_en<='0';elsifcnt=11thenDATA<="010010000000000000";--H
        elsif cnt = 12 then
            wr_en <= '1';
        elsif cnt = 13 then
            wr_en <= '0';
        elsif cnt = 14 then
            DATA <= "011001010000000000";--e
        elsif cnt = 15 then
            wr_en <= '1';
        elsif cnt = 16 then
            wr_en <= '0';
        elsif cnt = 17 then
            DATA <= "011011000000000000";--l
        elsif cnt = 18 then
            wr_en <= '1';
        elsif cnt = 19 then
            wr_en <= '0';
        elsif cnt = 20 then
            DATA <= "011011000000000000";--l
        elsif cnt = 21 then
            wr_en <= '1';
        elsif cnt = 22 then
            wr_en <= '0';
        elsif cnt = 23 then
            DATA <= "011011110000000000";--o
        elsif cnt = 24 then
            wr_en <= '1';
        elsif cnt = 25 then
            wr_en <= '0';
        end if;
        if cnt <25 then
            cnt <= cnt+1;
        end if;
        end if;
end if;
end process;
end Behavioral;

Aquí están mis errores (solo durante la síntesis):

  

ADVERTENCIA: Xst: 2211 - "D: / Users /.../ TOP_MODULE.vhd" línea 135: Instanciación del módulo de caja negra.

     

ADVERTENCIA: Xst: 1710 - FF / Latch (sin valor de inicio) tiene un valor constante de 0 en bloque. Este FF / Latch se recortará durante el proceso de optimización.

     

ADVERTENCIA: Xst: 1710 - FF / Latch (sin valor de inicio) tiene un valor constante de 0 en bloque. Este FF / Latch se recortará durante el proceso de optimización.

No hay ninguna advertencia importante como puede ver (espero que tenga razón) ...

Mi pregunta es: ¿Sabe por qué no tengo el mismo resultado en la simulación y a bordo?

No dude en comentar y hacerme preguntas, es muy importante para mí resolver este problema ...

    
pregunta Cabs

1 respuesta

0

El problema viene del debouncing ... ¡Los botones no son perfectos y necesitan ser rebatidos, usé un reloj de 10Hz para rebotar y funciona perfectamente!

    
respondido por el Cabs

Lea otras preguntas en las etiquetas