Line 85... |
Line 85... |
--!TBXSTART:ARITHMETIC_RESULTS
|
--!TBXSTART:ARITHMETIC_RESULTS
|
signal sresult : vectorblock08;
|
signal sresult : vectorblock08;
|
signal sprd32blk : vectorblock06;
|
signal sprd32blk : vectorblock06;
|
signal sadd32blk : vectorblock04;
|
signal sadd32blk : vectorblock04;
|
signal ssqr32blk,sinv32blk : xfloat32;
|
signal ssqr32blk,sinv32blk : xfloat32;
|
|
signal snormfifo_q,snormfifo_d : vectorblock03;
|
--!TBXEND
|
--!TBXEND
|
|
|
signal snormfifo_q,snormfifo_d : vectorblock03;
|
|
|
|
--!TBXSTART:SYNC_CHAIN
|
--!TBXSTART:SYNC_CHAIN
|
signal ssync_chain : std_logic_vector(28 downto 1);
|
signal ssync_chain : std_logic_vector(25 downto 1);
|
--!TBXEND
|
|
signal sres567w,sres123w,sres2w : std_logic;
|
signal sres567w,sres123w,sres2w : std_logic;
|
signal sres0w,sres4w : std_logic;
|
signal sres0w,sres4w : std_logic;
|
|
--!TBXEND
|
|
|
--! Entradas de la señal de full de las colas de resultados.
|
--! Entradas de la señal de full de las colas de resultados.
|
signal sres567f,sres123f : std_logic;
|
signal sres567f,sres123f : std_logic;
|
signal sres24f,sres0f : std_logic;
|
signal sres24f,sres0f : std_logic;
|
|
|
Line 109... |
Line 109... |
--! Cadena de sincronización: 29 posiciones.
|
--! Cadena de sincronización: 29 posiciones.
|
sync_chain_proc:
|
sync_chain_proc:
|
process(clk,rst,sync_chain_0)
|
process(clk,rst,sync_chain_0)
|
begin
|
begin
|
if rst=rstMasterValue then
|
if rst=rstMasterValue then
|
ssync_chain(28 downto 1) <= (others => '0');
|
ssync_chain(25 downto 1) <= (others => '0');
|
elsif clk'event and clk='1' then
|
elsif clk'event and clk='1' then
|
for i in 28 downto 2 loop
|
for i in 25 downto 2 loop
|
ssync_chain(i) <= ssync_chain(i-1);
|
ssync_chain(i) <= ssync_chain(i-1);
|
end loop;
|
end loop;
|
ssync_chain(1) <= sync_chain_0;
|
ssync_chain(1) <= sync_chain_0;
|
end if;
|
end if;
|
end process sync_chain_proc;
|
end process sync_chain_proc;
|
|
|
--! Escritura en las colas de resultados y escritura/lectura en las colas intermedias mediante cadena de resultados.
|
--! Escritura en las colas de resultados y escritura/lectura en las colas intermedias mediante cadena de resultados.
|
fifo32x09_w <= ssync_chain(5);
|
fifo32x09_w <= ssync_chain(5);
|
fifo32x23_w <= ssync_chain(1);
|
fifo32x23_w <= ssync_chain(1);
|
fifo32x09_r <= ssync_chain(14);
|
fifo32x09_r <= ssync_chain(12);
|
fifo32x23_r <= ssync_chain(25);
|
fifo32x23_r <= ssync_chain(21);
|
|
|
|
|
resw <= sres567w&sres4w&sres123w&sres2w&sres0w;
|
resw <= sres567w&sres4w&sres123w&sres2w&sres0w;
|
sync_chain_comb:
|
sync_chain_comb:
|
process (ssync_chain,addsub,crossprod,unary)
|
process (ssync_chain,addsub,crossprod,unary)
|
Line 136... |
Line 136... |
--!Desconectar los canales de Suma, Resta, Producto Punto y Producto Cruz
|
--!Desconectar los canales de Suma, Resta, Producto Punto y Producto Cruz
|
sres123w <= '0';
|
sres123w <= '0';
|
sres2w <= '0';
|
sres2w <= '0';
|
sres4w <= '0';
|
sres4w <= '0';
|
|
|
--! Producto Escalar, Normalización o Magnitusd
|
--! Producto Escalar, Normalización o Magnitud
|
sres567w <= ssync_chain(4) and crossprod and addsub;
|
sres567w <= ssync_chain(4) and crossprod and addsub;
|
sres0w <= ssync_chain(23) and not(addsub) and not(crossprod);
|
sres0w <= ssync_chain(19) and not(addsub) and not(crossprod);
|
|
|
elsif addsub='1' then
|
elsif addsub='1' then
|
|
|
--! Desconectar los canales de Normalización, Producto Escalar, Producto Punto C.D y Magnitud
|
--! Desconectar los canales de Normalización, Producto Escalar, Producto Punto C.D y Magnitud
|
sres567w <= '0';
|
sres567w <= '0';
|
sres0w <= '0';
|
sres0w <= '0';
|
sres4w <= '0';
|
sres4w <= '0';
|
|
|
|
|
--! Suma o Resta.
|
--! Suma o Resta.
|
sres123w <= ssync_chain(9);
|
sres123w <= ssync_chain(7);
|
sres2w <= ssync_chain(9);
|
sres2w <= ssync_chain(7);
|
|
|
else
|
else
|
|
|
--! Desconectar la escritura en los canales de Normalización, Producto Escalar, Suma, Resta y Magnitud.
|
--! Desconectar la escritura en los canales de Normalización, Producto Escalar, Suma, Resta y Magnitud.
|
sres567w <= '0';
|
sres567w <= '0';
|
sres0w <= '0';
|
sres0w <= '0';
|
|
|
--! Producto Punto o Cruz.
|
--! Producto Punto o Cruz.
|
sres2w <= (ssync_chain(22) and not(crossprod)) or (ssync_chain(13) and crossprod);
|
sres2w <= (ssync_chain(18) and not(crossprod)) or (ssync_chain(11) and crossprod);
|
sres4w <= ssync_chain(22) and not(crossprod);
|
sres4w <= ssync_chain(17) and not(crossprod);
|
sres123w <= ssync_chain(13) and crossprod;
|
sres123w <= ssync_chain(11) and crossprod;
|
|
|
end if;
|
end if;
|
end process sync_chain_comb;
|
end process sync_chain_comb;
|
|
|
|
|
Line 175... |
Line 175... |
add32blki <= ssumando;
|
add32blki <= ssumando;
|
resultoutput<= sresult;
|
resultoutput<= sresult;
|
|
|
|
|
stuff04:
|
stuff04:
|
for i in 02 downto 1 generate
|
for i in aa downto a1 generate
|
sadd32blk(i) <= add32blko(i);
|
sadd32blk(i) <= add32blko(i);
|
end generate stuff04;
|
end generate stuff04;
|
|
|
|
|
stuff03:
|
stuff03:
|
Line 201... |
Line 201... |
sprd32blk <= prd32blko;
|
sprd32blk <= prd32blko;
|
end if;
|
end if;
|
end process;
|
end process;
|
--! Los productos del multiplicador 2 y 3, ya registrados dentro de dpc van a la cola intermedia del producto punto (fifo32x09_d)
|
--! Los productos del multiplicador 2 y 3, ya registrados dentro de dpc van a la cola intermedia del producto punto (fifo32x09_d)
|
--! Los unicos resultados de sumandos que de nuevo entran al DataPathControl (observar la pestaña del documento de excel)
|
--! Los unicos resultados de sumandos que de nuevo entran al DataPathControl (observar la pestaña del documento de excel)
|
|
|
fifo32x09_d <= sprd32blk(p3)&sprd32blk(p2);
|
fifo32x09_d <= sprd32blk(p3)&sprd32blk(p2);
|
|
|
register_adder0_and_inversor_output:
|
register_adder0_and_inversor_output:
|
process (clk)
|
process (clk)
|
begin
|
begin
|
if clk'event and clk='1' then
|
if clk'event and clk='1' then
|
sadd32blk(a0) <= add32blko(a0);
|
sadd32blk(a0) <= add32blko(a0);
|
sadd32blk(aa) <= add32blko(aa);
|
|
sinv32blk <= inv32blko;
|
sinv32blk <= inv32blko;
|
end if;
|
end if;
|
end process;
|
end process;
|
|
|
|
|
Line 221... |
Line 220... |
--! Raiz Cuadrada.
|
--! Raiz Cuadrada.
|
ssqr32blk <= sqr32blko;
|
ssqr32blk <= sqr32blko;
|
|
|
--! Colas de salida de los distintos resultados;
|
--! Colas de salida de los distintos resultados;
|
sresult(0) <= ssqr32blk;
|
sresult(0) <= ssqr32blk;
|
sresult(1) <= sadd32blk(a0);
|
sresult(1) <= add32blko(a0);
|
sresult(2) <= sadd32blk(a1);
|
sresult(2) <= sadd32blk(a1);
|
sresult(3) <= sadd32blk(a2);
|
sresult(3) <= sadd32blk(a2);
|
sresult(4) <= sadd32blk(aa);
|
sresult(4) <= sadd32blk(aa);
|
sresult(5) <= sprd32blk(p3);
|
sresult(5) <= prd32blko(p3);
|
sresult(6) <= sprd32blk(p4);
|
sresult(6) <= prd32blko(p4);
|
sresult(7) <= sprd32blk(p5);
|
sresult(7) <= prd32blko(p5);
|
|
|
--! Cola de normalizacion
|
--! Cola de normalizacion
|
snormfifo_d(qx) <= sparaminput(ax);
|
snormfifo_d(qx) <= sparaminput(ax);
|
snormfifo_d(qy) <= sparaminput(ay);
|
snormfifo_d(qy) <= sparaminput(ay);
|
snormfifo_d(qz) <= sparaminput(az);
|
snormfifo_d(qz) <= sparaminput(az);
|
|
|
|
|
|
|
--! La entrada al inversor SIEMPRE viene con la salida de la raiz cuadrada
|
--! La entrada al inversor SIEMPRE viene con la salida de la raiz cuadrada
|
inv32blki <= sqr32blko;
|
inv32blki <= ssqr32blk;
|
--! La entrada de la raíz cuadrada SIEMPRE viene con la salida del sumador 1.
|
--! La entrada de la raíz cuadrada SIEMPRE viene con la salida del sumador 1.
|
sqr32blki <= sadd32blk(a1);
|
sqr32blki <= sadd32blk(a1);
|
|
|
|
|
|
|
Line 377... |
Line 376... |
ssumando(s0) <= sprd32blk(p0);
|
ssumando(s0) <= sprd32blk(p0);
|
ssumando(s1) <= sprd32blk(p1);
|
ssumando(s1) <= sprd32blk(p1);
|
if crossprod='0' then
|
if crossprod='0' then
|
ssumando(s2) <= sadd32blk(a0);
|
ssumando(s2) <= sadd32blk(a0);
|
ssumando(s3) <= sdpfifo_q(dpfifoab);
|
ssumando(s3) <= sdpfifo_q(dpfifoab);
|
else
|
elsif unary='0' then
|
ssumando(s2) <= sprd32blk(p2);
|
ssumando(s2) <= sprd32blk(p2);
|
ssumando(s3) <= sprd32blk(p3);
|
ssumando(s3) <= sprd32blk(p3);
|
|
else
|
|
ssumando(s2) <= sadd32blk(a0);
|
|
ssumando(s3) <= sdpfifo_q(dpfifoab);
|
|
|
end if;
|
end if;
|
ssumando(s4) <= sprd32blk(p4);
|
ssumando(s4) <= sprd32blk(p4);
|
ssumando(s5) <= sprd32blk(p5);
|
ssumando(s5) <= sprd32blk(p5);
|
end if;
|
end if;
|
end process;
|
end process;
|