Mi aplicación básica consiste en enviar muestras de ADC a PC a través de Ethernet. El muestreo y almacenamiento de ADC se realiza en la sección VHDL, mientras que el código de programación del conector Ethernet está en el procesador Microblaze.
Microblaze está funcionando a 60MHz y el FPGA está a 100MHz (me he encargado del problema de los CDC). Para transferir datos 1k me lleva 740us. Tengo un BRAM de doble puerto donde se almacenan las muestras y, tras una interrupción, Microblaze lo leerá desde el segundo puerto. Para simplificar, he mantenido el BRAM leído en estado siempre habilitado y solo estoy leyendo los datos por dirección.
Cualquier idea sobre cómo puedo transferir los datos de una manera más rápida.
He agregado los detalles de la conexión BRAM para más referencia. He usado el tipo simple de doble puerto BRAM.
Buf_2k : Ethernet_test_data
PORT MAP (
clka => ADC_clock, --10MHz clock
wea(0) => BRAM_wr_en, --Write enable generated synchronously to ADC_clock
addra => buf_wr_addr(10 downto 0), --BRAM address generated similarly as write enable
dina => ADC_data_trig, --Registered ADC data to be stored in BRAM
clkb => CLK_50M, --50MHz clock generated from DCM
addrb => BRAM_addr(10 downto 0), --Address coming from Microblaze to read the data
doutb => BRAM_dout --This data out is directly connected to Microblaze
);