Line 305... |
Line 305... |
sflood_condition <= '1';
|
sflood_condition <= '1';
|
else
|
else
|
--! Flow Control : La saturación de la cola de resultados debe parar porque está casí llena.
|
--! Flow Control : La saturación de la cola de resultados debe parar porque está casí llena.
|
sflood_condition <= '0';
|
sflood_condition <= '0';
|
end if;
|
end if;
|
if sreg_block(reg_nfetch)(reg_nfetch_high downto 0+mb)/=zero(reg_nfetch_high downto 0+mb) then
|
|
|
if sreg_block(reg_nfetch)(reg_nfetch_high downto mb)/=zero(reg_nfetch_high downto mb) then
|
--! Flow Control: Si el número de descargas pendientes es mayor o igual al max burst length, entonces cargar max burst en el contador.
|
--! Flow Control: Si el número de descargas pendientes es mayor o igual al max burst length, entonces cargar max burst en el contador.
|
sflood_burstcount <= '1'&zero(mb-1 downto 0);
|
sflood_burstcount <= '1'&zero(mb-1 downto 0);
|
else
|
else
|
--! Flow Control: Si le número de descargas pendientes es inferior a Max Burst Count entonces cargar los bits menos significativos del registro de descargas pendientes.
|
--! Flow Control: Si le número de descargas pendientes es inferior a Max Burst Count entonces cargar los bits menos significativos del registro de descargas pendientes.
|
sflood_burstcount <= '0'&sreg_block(reg_ctrl)(0+mb-1 downto 0);
|
sflood_burstcount <= '0'&sreg_block(reg_nfetch)(mb-1 downto 0);
|
end if;
|
end if;
|
|
|
--! Se debe iniciar una transacción de carga de datos hacia la memoria externa?
|
--! Se debe iniciar una transacción de carga de datos hacia la memoria externa?
|
if soutb_ae='1' then
|
if soutb_ae='1' then
|
--! Flow Control : Cuando se esté drenando la cola de resultados, si la cola está casí vac&iaute;a, la longitud del burst serán los bits menos significativos del contador de la cola.
|
--! Flow Control : Cuando se esté drenando la cola de resultados, si la cola está casí vac&iaute;a, la longitud del burst serán los bits menos significativos del contador de la cola.
|
Line 473... |
Line 474... |
end if;
|
end if;
|
end if;
|
end if;
|
end if;
|
end if;
|
|
|
when IDLE =>
|
when IDLE =>
|
|
|
--! ******************************************************************************************************************************************************
|
--! ******************************************************************************************************************************************************
|
--! Programming the pipeline
|
--! Programming the pipeline
|
--! ******************************************************************************************************************************************************
|
--! ******************************************************************************************************************************************************
|
--! El registro de control en sus campos fetch e irq, es escribile solo cuando estamos en estado IDLE.
|
--! El registro de control en sus campos fetch e irq, es escribile solo cuando estamos en estado IDLE.
|
if sslave_write='1' then
|
if sslave_write='1' then
|
case sslave_address is
|
case sslave_address is
|
when x"0" =>
|
when x"0" =>
|
--! Solo se permitira escribir en el registro de control si no hay una interrupción activa o si la hay solamente si se esta intentando desactivar la interrupci´n
|
--! Solo se permitira escribir en el registro de control si no hay una interrupción activa o si la hay solamente si se esta intentando desactivar la interrupci´n
|
if sreg_block(reg_ctrl)(reg_ctrl_irq)='0' or sslave_writedata(reg_ctrl_irq)='0' then
|
if sreg_block(reg_ctrl)(reg_ctrl_irq)='0' or sslave_writedata(reg_ctrl_irq)='0' then
|
sreg_block(reg_ctrl)(reg_ctrl_irq downto 0) <= sslave_writedata(reg_ctrl_irq downto 0);
|
sreg_block(reg_ctrl)<= sslave_writedata;
|
sreg_block(reg_ctrl)(reg_ctrl_flags_wp-1 downto reg_ctrl_cmb) <= sslave_writedata(reg_ctrl_flags_wp-1 downto reg_ctrl_cmb);
|
|
sreg_block(reg_ctrl)(reg_ctrl_rlsc) <= sslave_writedata(reg_ctrl_rlsc);
|
|
sreg_block(reg_ctrl)(reg_ctrl_ageb downto reg_ctrl_alb) <=sslave_writedata(reg_ctrl_ageb downto reg_ctrl_alb);
|
|
end if;
|
end if;
|
when x"5" => sreg_block(reg_nfetch) <= sslave_writedata;
|
when x"5" => sreg_block(reg_nfetch) <= sslave_writedata;
|
when x"6" => sreg_block(reg_outputcounter) <= sslave_writedata;
|
when x"6" => sreg_block(reg_outputcounter) <= sslave_writedata;
|
when x"7" => sreg_block(reg_inputcounter) <= sslave_writedata;
|
when x"7" => sreg_block(reg_inputcounter) <= sslave_writedata;
|
when x"8" => sreg_block(reg_fetchstart) <= sslave_writedata;
|
when x"8" => sreg_block(reg_fetchstart) <= sslave_writedata;
|