Line 38... |
Line 38... |
instrfifo_rd : in std_logic;
|
instrfifo_rd : in std_logic;
|
resultfifo_wr: in std_logic_vector(8-1 downto 0);
|
resultfifo_wr: in std_logic_vector(8-1 downto 0);
|
instrfifo_empty: out std_logic;
|
instrfifo_empty: out std_logic;
|
ext_rd,ext_wr: in std_logic;
|
ext_rd,ext_wr: in std_logic;
|
ext_wr_add : in std_logic_vector(4+widthadmemblock-1 downto 0);
|
ext_wr_add : in std_logic_vector(4+widthadmemblock-1 downto 0);
|
ext_rd_add : in std_logic_vector(2 downto 0);
|
ext_rd_add : in std_logic_vector(3 downto 0);
|
ext_d: in std_logic_vector(floatwidth-1 downto 0);
|
ext_d: in std_logic_vector(floatwidth-1 downto 0);
|
resultfifo_full : out std_logic_vector(3 downto 0);
|
resultfifo_full : out std_logic_vector(3 downto 0);
|
int_d : in vectorblock08;
|
int_d : in vectorblock08;
|
|
|
--!Python
|
status_register : in std_logic_vector(3 downto 0);
|
|
|
ext_q,instrfifo_q : out std_logic_vector(floatwidth-1 downto 0);
|
ext_q,instrfifo_q : out std_logic_vector(floatwidth-1 downto 0);
|
int_q : out vectorblock12;
|
int_q : out vectorblock12;
|
int_rd_add : in std_logic_vector(2*widthadmemblock-1 downto 0);
|
int_rd_add : in std_logic_vector(2*widthadmemblock-1 downto 0);
|
dpfifo_d : in std_logic_vector(floatwidth*2-1 downto 0);
|
dpfifo_d : in std_logic_vector(floatwidth*2-1 downto 0);
|
normfifo_d : in std_logic_vector(floatwidth*3-1 downto 0);
|
normfifo_d : in std_logic_vector(floatwidth*3-1 downto 0);
|
Line 70... |
Line 71... |
--!TBXEND
|
--!TBXEND
|
--! Señal de soporte
|
--! Señal de soporte
|
signal s0ext_wr_add_choice : std_logic_vector(3 downto 0);
|
signal s0ext_wr_add_choice : std_logic_vector(3 downto 0);
|
|
|
--!TXBXSTART:MEMBLOCK_EXTERNAL_READ
|
--!TXBXSTART:MEMBLOCK_EXTERNAL_READ
|
signal s0ext_rd_add : std_logic_vector(2 downto 0);
|
signal s0status_register : std_logic_vector(7 downto 0);
|
|
signal s0ext_rd_add : std_logic_vector(3 downto 0);
|
signal s0ext_rd : std_logic;
|
signal s0ext_rd : std_logic;
|
signal s0ext_rd_ack : std_logic_vector(8-1 downto 0);
|
signal s0ext_rd_ack : std_logic_vector(8-1 downto 0);
|
signal s0ext_q : vectorblock08;
|
signal s0ext_q : vectorblock08;
|
--!TBXEND
|
--!TBXEND
|
--! Señal de soporte
|
|
signal s0ext_rd_add_choice : std_logic_vector(3 downto 0);
|
|
|
|
|
|
--!TBXSTART:MEMBLOCK_INTERNAL_READ
|
--!TBXSTART:MEMBLOCK_INTERNAL_READ
|
signal sint_rd_add : vectorblockadd02;
|
signal sint_rd_add : vectorblockadd02;
|
signal s1int_q : vectorblock12;
|
signal s1int_q : vectorblock12;
|
Line 91... |
Line 91... |
signal sresultfifo_full : std_logic_vector(7 downto 0);
|
signal sresultfifo_full : std_logic_vector(7 downto 0);
|
--!TBXEND
|
--!TBXEND
|
|
|
begin
|
begin
|
|
|
|
|
|
|
|
|
|
|
--! Colas internas de producto punto, ubicada en el pipe line aritméco. Paralelo a los sumadores a0 y a2.
|
--! Colas internas de producto punto, ubicada en el pipe line aritméco. Paralelo a los sumadores a0 y a2.
|
q0q1 : scfifo --! Debe ir registrada la salida.
|
q0q1 : scfifo --! Debe ir registrada la salida.
|
generic map (
|
generic map (
|
add_ram_output_register => "OFF",
|
add_ram_output_register => "OFF",
|
allow_rwcycle_when_full => "OFF",
|
allow_rwcycle_when_full => "OFF",
|
Line 310... |
Line 314... |
end case;
|
end case;
|
|
|
end process;
|
end process;
|
|
|
--! Decodificación para seleccionar que cola de resultados se conectar´ a la salida del RayTrac.
|
--! Decodificación para seleccionar que cola de resultados se conectar´ a la salida del RayTrac.
|
s0ext_rd_add_choice <= '0'&s0ext_rd_add;
|
|
results_block_proc: process(clk,rst)
|
results_block_proc: process(clk,rst)
|
begin
|
begin
|
if rst=rstMasterValue then
|
if rst=rstMasterValue then
|
s0ext_rd_add <= (others => '0');
|
s0ext_rd_add <= (others => '0');
|
s0ext_rd <= '0';
|
s0ext_rd <= '0';
|
elsif clk'event and clk='1' then
|
elsif clk'event and clk='1' then
|
--!Registrar entrada
|
--!Registrar entrada
|
s0ext_rd_add <= ext_rd_add;
|
s0ext_rd_add <= ext_rd_add;
|
s0ext_rd <= ext_rd;
|
s0ext_rd <= ext_rd;
|
--!Etapa 0: Decodificar la cola que se va a mover (rdack! fifo showahead mode) y por ende leer ese dato.
|
--!Etapa 0: Decodificar la cola que se va a mover (rdack! fifo showahead mode) y por ende leer ese dato.
|
case s0ext_rd_add_choice is
|
case s0ext_rd_add is
|
when x"0" => ext_q <= s0ext_q(0);
|
when x"0" => ext_q <= s0ext_q(0);
|
when x"1" => ext_q <= s0ext_q(1);
|
when x"1" => ext_q <= s0ext_q(1);
|
when x"2" => ext_q <= s0ext_q(2);
|
when x"2" => ext_q <= s0ext_q(2);
|
when x"3" => ext_q <= s0ext_q(3);
|
when x"3" => ext_q <= s0ext_q(3);
|
when x"4" => ext_q <= s0ext_q(4);
|
when x"4" => ext_q <= s0ext_q(4);
|
when x"5" => ext_q <= s0ext_q(5);
|
when x"5" => ext_q <= s0ext_q(5);
|
when x"6" => ext_q <= s0ext_q(6);
|
when x"6" => ext_q <= s0ext_q(6);
|
when others => ext_q <= s0ext_q(7);
|
when x"7" => ext_q <= s0ext_q(7);
|
|
when others => ext_q <= x"000000"&s0status_register;
|
end case;
|
end case;
|
end if;
|
end if;
|
end process;
|
end process;
|
|
|
--! rdack decoder para las colas de resultados de salida.
|
--! rdack decoder para las colas de resultados de salida.
|
results_block_proc_combinatorial_stage: process(s0ext_rd,s0ext_rd_add_choice)
|
results_block_proc_combinatorial_stage: process(s0ext_rd,s0ext_rd_add)
|
begin
|
begin
|
case s0ext_rd_add_choice is
|
case s0ext_rd_add(3 downto 0) is
|
when x"0" => s0ext_rd_ack <= x"0"&"000"&s0ext_rd;
|
when x"0" => s0ext_rd_ack <= x"0"&"000"&s0ext_rd;
|
when x"1" => s0ext_rd_ack <= x"0"&"00"&s0ext_rd&'0';
|
when x"1" => s0ext_rd_ack <= x"0"&"00"&s0ext_rd&'0';
|
when x"2" => s0ext_rd_ack <= x"0"&"0"&s0ext_rd&"00";
|
when x"2" => s0ext_rd_ack <= x"0"&"0"&s0ext_rd&"00";
|
when x"3" => s0ext_rd_ack <= x"0"&s0ext_rd&"000";
|
when x"3" => s0ext_rd_ack <= x"0"&s0ext_rd&"000";
|
when x"4" => s0ext_rd_ack <= "000"&s0ext_rd&x"0";
|
when x"4" => s0ext_rd_ack <= "000"&s0ext_rd&x"0";
|
when x"5" => s0ext_rd_ack <= "00"&s0ext_rd&'0'&x"0";
|
when x"5" => s0ext_rd_ack <= "00"&s0ext_rd&'0'&x"0";
|
when x"6" => s0ext_rd_ack <= "0"&s0ext_rd&"00"&x"0";
|
when x"6" => s0ext_rd_ack <= "0"&s0ext_rd&"00"&x"0";
|
when others => s0ext_rd_ack <= s0ext_rd&"000"&x"0";
|
when x"7" => s0ext_rd_ack <= s0ext_rd&"000"&x"0";
|
|
when others => s0ext_rd_ack <= (others => '0');
|
end case;
|
end case;
|
end process;
|
end process;
|
|
|
|
--!Proceso para escribir el status register.
|
|
|
|
--!Independiente del valor rfull(i) o si se lee o no, los bits correspondientes a los eventos de cola de resultados llena, se escriben reloj a reloj.
|
|
--!Final de Instrucción: Si ocurre un evento de final de instrucción se escribe el bit de registro correspondiente.
|
|
--!Si no hay un evento de final de instrucción entonces se verifica si hay un evento de lectura del status register, si es asi todos los bits correspondientes dentro del registro al evento de fin de instrucción se borran y quedan en cero.
|
|
--!Si no hay un evento de final de instrucci&oacite;n y tampoco de lectura del status register entonces se deja el mismo valor del estatus register.
|
|
sreg_proc: process (clk,rst,s0ext_rd_add,status_register(3 downto 0))
|
|
begin
|
|
if rst=rstMasterValue then
|
|
s0status_register(7 downto 0) <= (others => '0');
|
|
elsif clk'event and clk='1' then
|
|
|
|
--!Sin importar el valor de las señales de cola de resultados llena, escribir el registro.
|
|
s0status_register(7) <= sresultfifo_full(7) or sresultfifo_full(6) or sresultfifo_full(5);
|
|
s0status_register(6) <= sresultfifo_full(4) or sresultfifo_full(2);
|
|
s0status_register(5) <= sresultfifo_full(3) or sresultfifo_full(2) or sresultfifo_full(1);
|
|
s0status_register(4) <= sresultfifo_full(0);
|
|
|
|
for i in 3 downto 0 loop
|
|
--! Si hay evento de fin de instrucción entonces escribir en el bit correspondiente un uno.
|
|
if status_register(i)='1' then
|
|
s0status_register(i) <= '1';
|
|
--! Como no hubo final de instrucción revisar si hay lectura de Status Register y borrarlo.
|
|
elsif s0ext_rd_add(3)='1' then
|
|
s0status_register(i) <= '0';
|
|
--! No ocurrio nada de lo anterior, dejar entonces en el mismo valor el Status Register.
|
|
else
|
|
s0status_register(i) <= s0status_register(i);
|
|
end if;
|
|
end loop;
|
|
end if;
|
|
end process;
|
|
|
|
|
end architecture;
|
end architecture;
|
|
|
|
|
No newline at end of file
|
No newline at end of file
|