Quiero leer los datos de FT2232H utilizados en un modo FIFO síncrono de estilo FT245 ( enlace p.27) con placa DE0-Nano FPGA:
process(clk)
begin
if (rising_edge(clk)) then
next_state <= current_state;
case current_state IS
when POLL_UNTIL_RXF_LOW =>
if (rxf = '0') then
current_oe <= '0';
next_state <= WAIT_SET_RD_LOW;
else
current_oe <= '1';
end if;
current_rd <= '1';
when WAIT_SET_RD_LOW =>
current_oe <= '0';
current_rd <= '1';
next_state <= SET_RD_LOW;
when SET_RD_LOW =>
current_oe <= '0';
current_rd <= '0';
next_state <= READ_DATA;
when READ_DATA =>
if (rxf = '0') then
current_oe <= '0';
current_rd <= '0';
-- access data here
else
current_oe <= '1';
current_rd <= '1';
next_state <= POLL_UNTIL_RXF_LOW;
end if;
when others =>
null;
end case;
end if;
end process;
rd <= current_rd;
oe <= current_oe;
siwu <= '1';
wr <= '0';
Este código no funciona bien: aproximadamente el 51% de mis datos se pierden. Creo que esto está sucediendo porque clk
en este código es un reloj de 60 MHz provisto por FT2232H; sin embargo, el DE0-Nano tiene un oscilador integrado de 50 MHz conectado directamente a uno de los pines del reloj FPGA. ¿Es posible leer datos de 60 MHz con FPGA con reloj de 50 MHz en absoluto? ¿Cómo lo haces?