Hola, he hecho la placa Spartan 6 y ahora estoy tratando de que funcione, he logrado que la programación del flash SPI funcione, así que puedo cargar flujos de bits, pero tengo un problema que algunos de los pines IO no permanecer en el estado deseado.
Por ejemplo, tengo 4 IO usadas para controlar los relés de los atenuadores (usados en el módulo del osciloscopio) y cuando configuro el estado de reinicio, lo retiene durante 40 nanosegundos y luego vuelve a cero. Incluso tengo un protocolo de comunicación en el que Puedo establecer el estado de E / S programáticamente a través del software y cambiar el estado, pero nuevamente solo por 40 ns y luego volver al cero lógico.
En la simulación, todo funciona como se esperaba, también la temporización par estática muestra que se cumplieron mis limitaciones de tiempo (reloj de 60MHz del FT24 FTDI y 150MHz del oscilador ADC). He revisado tres veces mi UCF si no he usado pines incorrectos, pero es lo mismo.
Estaba pensando que de alguna manera estoy reiniciando el diseño (uso FTDI para eso) en FPGA, pero no es el caso porque me enganché el alcance en el pin de reinicio de mi diseño y no se activó. También otras cosas en mi diseño funcionan, por ejemplo, puedo establecer con éxito voltajes de referencia de valores de ADC (controlados por DAC) a través de la interfaz en serie (que es lenta - 100kHz), de modo que el restablecimiento que acabaría con el estado IO después de 40 ns también detendría la configuración de DAC.
¿Sabe qué podría obligar a FPGA a ignorar los estados de IO del conjunto de diseño?
// editar: agregar código:
esta es la parte que establece los IO: (el led1 parpadea levemente cuando esto sucede)
when SET_ATTENUATORS =>
led1 <= '0';
adc1relatt <= commandData(71);
adc2relatt <= commandData(63);
state <= IDLE;
y este es el estado IDLE:
when IDLE =>
ft245rw <= '0';
ft245strobe <= '1';
ft245dataWaitIn <= '0';
if (to_boolean(ft245busy) and (ft245oe = '0')) then
state <= READ_COMMAND;
ft245strobe <= '0';
else
state <= IDLE;
end if;
y este es el estado de configuración del voltaje de referencia:
when SET_VREF0 =>
led1 <= '0';
dacVrefTopA <= commandData(72-1 downto 64);
dacVrefBotA <= commandData(64-1 downto 56);
dacVrefTopB <= commandData(56-1 downto 48);
dacVrefBotB <= commandData(48-1 downto 40);
if to_boolean(dacBusy) then
dacStrobe <= '0';
state <= SET_VREF1;
else
state <= SET_VREF0;
dacStrobe <= '1';
end if;
when SET_VREF1 =>
if to_boolean(dacBusy) then
state <= SET_VREF1;
else
state <= IDLE;
end if;
En este estado, el led1 también parpadea levemente (debería permanecer encendido, no parpadea), sino que también se restablece el estado de cambio de LED, lo que no podría suceder, ya que el reinicio también restablecería el módulo DAC, lo que evitaría El módulo de configuración de DAC establece valores de DAC (lo hace con éxito).