OpenCores
URL https://opencores.org/ocsvn/raytrac/raytrac/trunk

Subversion Repositories raytrac

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /raytrac
    from Rev 157 to Rev 158
    Reverse comparison

Rev 157 → Rev 158

/branches/fp/fadd32.vhd
34,8 → 34,8
port (
clk,dpc : in std_logic;
a32,b32 : in std_logic_vector (31 downto 0);
c32 : out std_logic_vector(31 downto 0)
a32,b32 : in xfloat32;
c32 : out xfloat32
);
end entity;
architecture fadd32_arch of fadd32 is
/branches/fp/raytrac.vhd
77,7 → 77,7
--! Señales de Memblock -> Interruption Machine
signal s_rfull_events : std_logic_vector (3 downto 0); --Estas señales tambien entran a DPC.
--! Señales de Memblock -> DPC.
signal s_q : std_logic_vector (12*32-1 downto 0);
signal s_q : vectorblock12;
signal s_normfifo_q : std_logic_vector (3*32-1 downto 0);
signal s_dpfifo_q : std_logic_vector (2*32-1 downto 0);
--!TBXEND
105,16 → 105,16
signal s_dpfifo_d : std_logic_vector (2*32-1 downto 0);
signal s_normfifo_w : std_logic;
signal s_normfifo_r : std_logic;
signal s_results_d : std_logic_vector (8*32-1 downto 0);
signal s_results_d : vectorblock08;
signal s_normfifo_d : std_logic_vector (3*32-1 downto 0);
--!Señales de DPC a Interruption Machine
signal s_eoi_events : std_logic_vector (3 downto 0);
--! Señales de DPC a ArithBlock
signal s_f : std_logic_vector (12*32-1 downto 0);
signal s_a : std_logic_vector (8*32-1 downto 0);
signal s_f : vectorblock12;
signal s_a : vectorblock08;
--! Parcialmente las señales de salida de los sumadores van al data path control.
signal s_s : std_logic_vector (4*32-1 downto 0);
signal s_p : std_logic_vector (6*32-1 downto 0);
signal s_s : vectorblock04;
signal s_p : vectorblock06;
--!TBXEND
--!TBXSTART:IM
--! Señales de Interruption Machine al testbench
133,8 → 133,6
MemoryBlock : memblock
generic map (
blocksize => 512,
external_writeable_blocks => 12,
external_readable_blocks => 8,
external_readable_widthad => 3,
external_writeable_widthad => 4
)
/branches/fp/arithpack.vhd
85,17 → 85,17
port (
clk : in std_logic;
dpc : in std_logic;
a32 : in std_logic_vector (31 downto 0);
b32 : in std_logic_vector (31 downto 0);
c32 : out std_logic_vector (31 downto 0)
a32 : in xfloat32;
b32 : in xfloat32;
c32 : out xfloat32
);
end component;
component fmul32
port (
clk : in std_logic;
a32 : in std_logic_vector (31 downto 0);
b32 : in std_logic_vector (31 downto 0);
p32 : out std_logic_vector (31 downto 0)
a32 : in xfloat32;
b32 : in xfloat32;
p32 : out xfloat32
);
end component;
245,8 → 245,6
component memblock
generic (
blocksize : integer;
external_writeable_blocks : integer;
external_readable_blocks : integer;
external_readable_widthad : integer;
external_writeable_widthad : integer
);
255,15 → 253,15
clk,rst,dpfifo_rd,normfifo_rd,dpfifo_wr,normfifo_wr : in std_logic;
instrfifo_rd : in std_logic;
resultfifo_wr: in std_logic_vector(external_readable_blocks-1 downto 0);
resultfifo_wr: in std_logic_vector(8-1 downto 0);
instrfifo_empty: out std_logic; ext_rd,ext_wr: in std_logic;
ext_wr_add : in std_logic_vector(external_writeable_widthad+widthadmemblock-1 downto 0);
ext_rd_add : in std_logic_vector(external_readable_widthad-1 downto 0);
ext_d: in std_logic_vector(floatwidth-1 downto 0);
int_d : in std_logic_vector(external_readable_blocks*floatwidth-1 downto 0);
int_d : in vectorblock08;
resultfifo_full : out std_logic_vector(3 downto 0);
ext_q,instrfifo_q : out std_logic_vector(floatwidth-1 downto 0);
int_q : out std_logic_vector(external_writeable_blocks*floatwidth-1 downto 0);
int_q : out vectorblock12;
int_rd_add : in std_logic_vector(2*widthadmemblock-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);
275,9 → 273,9
component dpc
port (
clk,rst : in std_logic;
paraminput : in std_logic_vector ((12*floatwidth)-1 downto 0); --! Vectores A,B,C,D
prd32blko : in std_logic_vector ((06*floatwidth)-1 downto 0); --! Salidas de los 6 multiplicadores.
add32blko : in std_logic_vector ((04*floatwidth)-1 downto 0); --! Salidas de los 4 sumadores.
paraminput : in vectorblock12; --! Vectores A,B,C,D
prd32blko : in vectorblock06; --! Salidas de los 6 multiplicadores.
add32blko : in vectorblock04; --! Salidas de los 4 sumadores.
sqr32blko,inv32blko : in std_logic_vector (floatwidth-1 downto 0); --! Salidas de la raiz cuadradas y el inversor.
fifo32x23_q : in std_logic_vector (03*floatwidth-1 downto 0); --! Salida de la cola intermedia.
fifo32x09_q : in std_logic_vector (02*floatwidth-1 downto 0); --! Salida de las colas de producto punto.
288,8 → 286,8
sqr32blki,inv32blki : out std_logic_vector (floatwidth-1 downto 0); --! Salidas de las 2 raices cuadradas y los 2 inversores.
fifo32x26_d : out std_logic_vector (03*floatwidth-1 downto 0); --! Entrada a la cola intermedia para la normalización.
fifo32x09_d : out std_logic_vector (02*floatwidth-1 downto 0); --! Entrada a las colas intermedias del producto punto.
prd32blki : out std_logic_vector ((12*floatwidth)-1 downto 0); --! Entrada de los 12 factores en el bloque de multiplicación respectivamente.
add32blki : out std_logic_vector ((08*floatwidth)-1 downto 0); --! Entrada de los 8 sumandos del bloque de 4 sumadores.
prd32blki : out vectorblock12; --! Entrada de los 12 factores en el bloque de multiplicación respectivamente.
add32blki : out vectorblock08; --! Entrada de los 8 sumandos del bloque de 4 sumadores.
resw : out std_logic_vector (4 downto 0); --! Salidas de escritura y lectura en las colas de resultados.
fifo32x09_w : out std_logic;
fifo32x23_w,fifo32x09_r : out std_logic;
296,7 → 294,7
fifo32x23_r : out std_logic;
resf_vector : in std_logic_vector(3 downto 0); --! Entradas de la señal de full de las colas de resultados.
resf_event : out std_logic; --! Salida decodificada que indica que la cola de resultados de la operación que está en curso.
resultoutput : out std_logic_vector ((08*floatwidth)-1 downto 0) --! 8 salidas de resultados, pues lo máximo que podrá calcularse por cada clock son 2 vectores.
resultoutput : out vectorblock08 --! 8 salidas de resultados, pues lo máximo que podrá calcularse por cada clock son 2 vectores.
);
end component;
--! Bloque Aritmetico de Sumadores y Multiplicadores (madd)
308,11 → 306,11
dpc : in std_logic;
f : in std_logic_vector (12*32-1 downto 0);
a : in std_logic_vector (8*32-1 downto 0);
f : in vectorblock12;
a : in vectorblock08;
s : out std_logic_vector (4*32-1 downto 0);
p : out std_logic_vector (6*32-1 downto 0)
s : out vectorblock04;
p : out vectorblock06
);
end component;
321,8 → 319,8
port (
clk : in std_logic;
rd32: in std_logic_vector(31 downto 0);
sq32: out std_logic_vector(31 downto 0)
rd32: in xfloat32;
sq32: out xfloat32
);
end component;
--! Bloque de Inversores.
330,8 → 328,8
port (
clk : in std_logic;
dvd32 : in std_logic_vector(31 downto 0);
qout32 : out std_logic_vector(31 downto 0)
dvd32 : in xfloat32;
qout32 : out xfloat32
);
end component;
471,7 → 469,7
 
function ap_iCtrlState2string(i:iCtrlState) return string is
variable tmp:string (1 to 1024);
variable tmp:string (1 to 9);
begin
483,7 → 481,7
when SUSPEND =>
tmp:="SUSPENDED";
when others =>
tmp:="Pandora Box Opened -- Illegal iCtrlState value";
tmp:="ILGL__VAL";
end case;
return tmp;
531,7 → 529,7
function ap_macState2string(s:macState) return string is
variable tmp:string (1 to 1024);
variable tmp:string (1 to 6);
begin
case s is
when LOAD_INSTRUCTION =>
541,7 → 539,7
when EXECUTE_INSTRUCTION =>
tmp:="EX_INS";
when others =>
tmp:="macStateException:HELL_ON_EARTH";
tmp:="HEL_ON";
end case;
return tmp;
end function;
/branches/fp/dpc.vhd
22,15 → 22,17
 
library ieee;
use ieee.std_logic_1164.all;
 
use work.arithpack.all;
 
 
entity dpc is
port (
clk,rst : in std_logic;
paraminput : in std_logic_vector ((12*floatwidth)-1 downto 0); --! Vectores A,B,C,D
prd32blko : in std_logic_vector ((06*floatwidth)-1 downto 0); --! Salidas de los 6 multiplicadores.
add32blko : in std_logic_vector ((04*floatwidth)-1 downto 0); --! Salidas de los 4 sumadores.
paraminput : in vectorblock12; --! Vectores A,B,C,D
prd32blko : in vectorblock06; --! Salidas de los 6 multiplicadores.
add32blko : in vectorblock04; --! Salidas de los 4 sumadores.
sqr32blko,inv32blko : in std_logic_vector (floatwidth-1 downto 0); --! Salidas de la raiz cuadradas y el inversor.
fifo32x23_q : in std_logic_vector (03*floatwidth-1 downto 0); --! Salida de la cola intermedia.
fifo32x09_q : in std_logic_vector (02*floatwidth-1 downto 0); --! Salida de las colas de producto punto.
41,8 → 43,8
sqr32blki,inv32blki : out std_logic_vector (floatwidth-1 downto 0); --! Salidas de las 2 raices cuadradas y los 2 inversores.
fifo32x26_d : out std_logic_vector (03*floatwidth-1 downto 0); --! Entrada a la cola intermedia para la normalización.
fifo32x09_d : out std_logic_vector (02*floatwidth-1 downto 0); --! Entrada a las colas intermedias del producto punto.
prd32blki : out std_logic_vector ((12*floatwidth)-1 downto 0); --! Entrada de los 12 factores en el bloque de multiplicación respectivamente.
add32blki : out std_logic_vector ((08*floatwidth)-1 downto 0); --! Entrada de los 8 sumandos del bloque de 4 sumadores.
prd32blki : out vectorblock12; --! Entrada de los 12 factores en el bloque de multiplicación respectivamente.
add32blki : out vectorblock08; --! Entrada de los 8 sumandos del bloque de 4 sumadores.
resw : out std_logic_vector (4 downto 0); --! Salidas de escritura y lectura en las colas de resultados.
fifo32x09_w : out std_logic;
fifo32x23_w,fifo32x09_r : out std_logic;
49,7 → 51,7
fifo32x23_r : out std_logic;
resf_vector : in std_logic_vector (3 downto 0); --! Entradas de la señal de full de las colas de resultados.
resf_event : out std_logic; --! Salida decodificada que indica que la cola de resultados de la operación que está en curso.
resultoutput : out std_logic_vector ((08*floatwidth)-1 downto 0) --! 8 salidas de resultados, pues lo máximo que podrá calcularse por cada clock son 2 vectores.
resultoutput : out vectorblock08 --! 8 salidas de resultados, pues lo máximo que podrá calcularse por cada clock son 2 vectores.
);
end entity;
 
138,19 → 140,15
--! El siguiente código sirve para conectar arreglos a señales std_logic_1164, simplemente son abstracciones a nivel de código y no representará cambios en la síntesis.
stuff12:
for i in 11 downto 0 generate
sparaminput(i) <= paraminput(i*floatwidth+floatwidth-1 downto i*floatwidth);
prd32blki(i*floatwidth+floatwidth-1 downto i*floatwidth) <= sfactor(i);
end generate stuff12;
stuff08:
for i in 07 downto 0 generate
add32blki(i*floatwidth+floatwidth-1 downto i*floatwidth) <= ssumando(i);
resultoutput(i*floatwidth+floatwidth-1 downto i*floatwidth) <= sresult(i);
end generate stuff08;
sparaminput <= paraminput;
prd32blki <= sfactor;
add32blki <= ssumando;
resultoutput<= sresult;
stuff04:
for i in 02 downto 1 generate
sadd32blk(i) <= add32blko(i*floatwidth+floatwidth-1 downto i*floatwidth);
sadd32blk(i) <= add32blko(i);
end generate stuff04;
170,9 → 168,7
process (clk)
begin
if clk'event and clk='1' then
for i in 05 downto 0 loop
sprd32blk(i) <= prd32blko(i*floatwidth+floatwidth-1 downto i*floatwidth);
end loop;
sprd32blk <= prd32blko;
end if;
end process;
--! Los productos del multiplicador 2 y 3, ya registrados dentro de dpc van a la cola intermedia del producto punto (fifo32x09_d)
183,8 → 179,8
process (clk)
begin
if clk'event and clk='1' then
sadd32blk(a0) <= add32blko(a0*floatwidth+floatwidth-1 downto a0*floatwidth);
sadd32blk(aa) <= add32blko(aa*floatwidth+floatwidth-1 downto aa*floatwidth);
sadd32blk(a0) <= add32blko(a0);
sadd32blk(aa) <= add32blko(aa);
sinv32blk <= inv32blko;
end if;
end process;
/branches/fp/fmul32.vhd
32,8 → 32,8
port (
clk : in std_logic;
a32,b32 : in std_logic_vector(31 downto 0);
p32 : out std_logic_vector(31 downto 0)
a32,b32 : in xfloat32;
p32 : out xfloat32
);
end entity;
/branches/fp/sm.vhd
1,5 → 1,5
--! @file sm.vhd
--! @brief Maquina de Estados. Controla la operación interna y genera los mecanismos de sincronización con el exterior (interrupciones).
--! @brief Maquina de Estados. Controla la operaci&oacute;n interna y genera los mecanismos de sincronizaci&oacute;n con el exterior (interrupciones).
--! @author Juli&aacute;n Andr&eacute;s Guar&iacute;n Reyes
--------------------------------------------------------------
-- RAYTRAC
32,9 → 32,9
--! Se&ntilde;ales normales de secuencia.
clk,rst: in std_logic;
--! Vector con las instrucción codficada
--! Vector con las instrucci&oacute;n codficada
instrQq:in std_logic_vector(floatwidth-1 downto 0);
--! Señal de cola vacia.
--! Se&ntilde;al de cola vacia.
instrQ_empty:in std_logic;
61,9 → 61,9
architecture sm_arch of sm is
 
--! LOAD_INSTRUCTION: Estado en el que se espera que en la cola de instrucciones haya una instrucción para ejecutar.
--! LOAD_INSTRUCTION: Estado en el que se espera que en la cola de instrucciones haya una instrucci&oacute;n para ejecutar.
--! EXECUTE_INSTRUCTION: Estado en el que se ejecuta la instrucci&oacute;n de la cola de instrucciones.
--! FLUSH_ARITH_PIPELINE: Estado en el que se espera un número específico de ciclos de reloj, para que se desocupe el pipeline aritmético.
--! FLUSH_ARITH_PIPELINE: Estado en el que se espera un n&uacute;mero espec&iacute;fico de ciclos de reloj, para que se desocupe el pipeline aritm&eacute;tico.
signal s_state : macState;
91,7 → 91,7
state <= s_state;
 
--! Código UCA, pero en la etapa DPC: La diferencia es que UCA en la etapa DPC, decodifica el datapath dentro del pipeline aritmético.
--! C&oacute;digo UCA, pero en la etapa DPC: La diferencia es que UCA en la etapa DPC, decodifica el datapath dentro del pipeline aritm&eacute;tico.
dpc_uca <= s_dpc_uca;
 
 
102,13 → 102,13
s_block_start_b <= instrQq(floatwidth-14 downto floatwidth-18);
s_block_end_b <= instrQq(floatwidth-19 downto floatwidth-23);
--! Campo que define si la instrucción es combinatoria
--! Campo que define si la instrucci&oacute;n es combinatoria
s_combinatory <= instrQq(floatwidth-24);
--! Campo que define cuantos clocks debe esperar el sistema, despues de que se ejecuta una instrucción, para que el pipeline aritmético quede vacio.
--! Campo que define cuantos clocks debe esperar el sistema, despues de que se ejecuta una instrucci&oacute;n, para que el pipeline aritm&eacute;tico quede vacio.
s_delay_field <= instrQq(floatwidth-25 downto floatwidth-32);
--! UCA code, código con la instrucción a ejecutar.
--! UCA code, c&oacute;digo con la instrucci&oacute;n a ejecutar.
s_instr_uca <= instrQq(31 downto 29);
--! Address Counters
200,7 → 200,7
--!Se&ntilde;al de play/pause del contador del arithmetic pipeline flush counter.
s_go_delay <= not(s_zeroFlag_delay);
--! Si estamos en el final de la instrucción, "descargamos" esta de la máquina de estados con acknowledge read.
--! Si estamos en el final de la instrucci&oacute;n, "descargamos" esta de la m&aacute;quina de estados con acknowledge read.
if s_eb_b='1' and s_eq_b='1' and s_eb_a='1' and s_eq_a='1' and s_state=EXECUTE_INSTRUCTION then
instrRdAckd <= '1';
else
240,7 → 240,7
case s_state is
--! Cargar la siguiente instrucción.
--! Cargar la siguiente instrucci&oacute;n.
when LOAD_INSTRUCTION =>
eoi <= '0';
247,13 → 247,13
if instrQ_empty='0' and full_r='0' then
--! Siguiente estado: Ejecutar la instrucción.
--! Siguiente estado: Ejecutar la instrucci&oacute;n.
s_state <= EXECUTE_INSTRUCTION;
--! Asignar el código UCA para que comience la decodificación.
--! Asignar el c&oacute;digo UCA para que comience la decodificaci&oacute;n.
s_dpc_uca <= s_instr_uca;
--! Validar el siguiente dato dentro del pipeline aritmético.
--! Validar el siguiente dato dentro del pipeline aritm&eacute;tico.
sync_chain_0 <= '1';
--! En el estado EXECUTE, el valor del contador de delay se debe mantener fijo, y puesto en el valor de delay que contiene la instruccion.
263,7 → 263,7
end if;
--! Ejecución de la instruccion
--! Ejecuci&oacute;n de la instruccion
when EXECUTE_INSTRUCTION =>
 
270,7 → 270,7
if s_eb_b='1'and s_eq_b='1' and s_eb_a='1' and s_eq_a='1' then --! Revisar si es el fin de la instruccion
--!Ya no ingresaran mas datos al pipeline aritmético, invalidar.
--!Ya no ingresaran mas datos al pipeline aritm&eacute;tico, invalidar.
sync_chain_0 <= '0';
if s_zeroFlag_delay='1' then
288,17 → 288,17
end if;
--! Invalidar/validar datos dentro del pipeline aritmético.
--! Invalidar/validar datos dentro del pipeline aritm&eacute;tico.
elsif s_eb_b='1' and full_r='1' then
--! Invalidar el siguiente dato dentro del pipeline aritmético.
--! Invalidar el siguiente dato dentro del pipeline aritm&eacute;tico.
sync_chain_0 <= '0';
else
sync_chain_0 <= '1';
end if;
--! Ejecución de la instrucción
--! Ejecuci&oacute;n de la instrucci&oacute;n
when FLUSH_ARITH_PIPELINE =>
--! Este estado permanece así hasta que, haya una instrucción
--! Este estado permanece as&iacute; hasta que, haya una instrucci&oacute;n
if s_zeroFlag_delay='1' then
--! Notificar fin de procesamiento de la instruccion (End Of Instruction)
/branches/fp/arithblock.vhd
33,11 → 33,11
dpc : in std_logic;
f : in std_logic_vector (12*32-1 downto 0);
a : in std_logic_vector (8*32-1 downto 0);
f : in vectorblock12;
a : in vectorblock08;
s : out std_logic_vector (4*32-1 downto 0);
p : out std_logic_vector (6*32-1 downto 0)
s : out vectorblock04;
p : out vectorblock06
);
end entity;
76,9 → 76,9
port map (
clk => clk,
dpc => dpc,
a32 => a( 31 downto 0),
b32 => a( 63 downto 32),
c32 => s( 31 downto 0)
a32 => a(0),
b32 => a(1),
c32 => s(0)
);
--!TBXINSTANCESTART
adder_i_1 : fadd32
85,9 → 85,9
port map (
clk => clk,
dpc => dpc,
a32 => a( 95 downto 64),
b32 => a( 127 downto 96),
c32 => s( 63 downto 32)
a32 => a(2),
b32 => a(3),
c32 => s(1)
);
--!TBXINSTANCESTART
adder_i_2 : fadd32
94,9 → 94,9
port map (
clk => clk,
dpc => dpc,
a32 => a( 159 downto 128),
b32 => a( 191 downto 160),
c32 => s( 95 downto 64)
a32 => a(4),
b32 => a(5),
c32 => s(2)
);
--!TBXINSTANCESTART
adder_i_3 : fadd32
103,57 → 103,57
port map (
clk => clk,
dpc => dpc,
a32 => a( 223 downto 192),
b32 => a( 255 downto 224),
c32 => s( 127 downto 96)
a32 => a(6),
b32 => a(7),
c32 => s(3)
);
--!TBXINSTANCESTART
mul_i_0 : fmul32
port map (
clk => clk,
a32 => f( 31 downto 0),
b32 => f( 63 downto 32),
p32 => p( 31 downto 0)
a32 => f(0),
b32 => f(1),
p32 => p(0)
);
--!TBXINSTANCESTART
mul_i_1 : fmul32
port map (
clk => clk,
a32 => f( 95 downto 64),
b32 => f( 127 downto 96),
p32 => p( 63 downto 32)
a32 => f(2),
b32 => f(3),
p32 => p(1)
);
--!TBXINSTANCESTART
mul_i_2 : fmul32
port map (
clk => clk,
a32 => f( 159 downto 128),
b32 => f( 191 downto 160),
p32 => p( 95 downto 64)
a32 => f(4),
b32 => f(5),
p32 => p(2)
);
--!TBXINSTANCESTART
mul_i_3 : fmul32
port map (
clk => clk,
a32 => f( 223 downto 192),
b32 => f( 255 downto 224),
p32 => p( 127 downto 96)
a32 => f(6),
b32 => f(7),
p32 => p(3)
);
--!TBXINSTANCESTART
mul_i_4 : fmul32
port map (
clk => clk,
a32 => f( 287 downto 256),
b32 => f( 319 downto 288),
p32 => p( 159 downto 128)
a32 => f(8),
b32 => f(9),
p32 => p(4)
);
--!TBXINSTANCESTART
mul_i_5 : fmul32
port map (
clk => clk,
a32 => f( 351 downto 320),
b32 => f( 383 downto 352),
p32 => p( 191 downto 160)
a32 => f(10),
b32 => f(11),
p32 => p(5)
);
/branches/fp/invr32.vhd
25,14 → 25,14
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use work.arithpack.all;
 
 
entity invr32 is
port (
clk : in std_logic;
dvd32 : in std_logic_vector(31 downto 0);
qout32 : out std_logic_vector(31 downto 0)
dvd32 : in xfloat32;
qout32 : out xfloat32
);
end entity;
architecture invr32_arch of invr32 is
/branches/fp/memblock.vhd
29,8 → 29,6
blocksize : integer := 512;
external_writeable_blocks : integer := 12;
external_readable_blocks : integer := 8;
external_readable_widthad : integer := 3;
external_writeable_widthad : integer := 4
);
38,18 → 36,18
clk,rst,dpfifo_rd,normfifo_rd,dpfifo_wr,normfifo_wr : in std_logic;
instrfifo_rd : in std_logic;
resultfifo_wr: in std_logic_vector(external_readable_blocks-1 downto 0);
resultfifo_wr: in std_logic_vector(8-1 downto 0);
instrfifo_empty: out std_logic;
ext_rd,ext_wr: in std_logic;
ext_wr_add : in std_logic_vector(external_writeable_widthad+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_d: in std_logic_vector(floatwidth-1 downto 0);
resultfifo_full : out std_logic_vector(3 downto 0);
int_d : in std_logic_vector(external_readable_blocks*floatwidth-1 downto 0);
int_d : in vectorblock08;
--!Python
ext_q,instrfifo_q : out std_logic_vector(floatwidth-1 downto 0);
int_q : out std_logic_vector(external_writeable_blocks*floatwidth-1 downto 0);
int_q : out vectorblock12;
int_rd_add : in std_logic_vector(2*widthadmemblock-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);
65,8 → 63,8
--!TBXSTART:MEMBLOCK_EXTERNAL_WRITE
signal s0ext_wr_add_one_hot : std_logic_vector(external_writeable_blocks-1+1 downto 0); --! La se&ntilde;al extra es para la escritura de la cola de instrucciones.
signal s0ext_wr_add : std_logic_vector(external_writeable_widthad+widthadmemblock-1 downto 0);
signal s0ext_wr_add_one_hot : std_logic_vector(12-1+1 downto 0); --! La se&ntilde;al extra es para la escritura de la cola de instrucciones.
signal s0ext_wr_add : std_logic_vector(4+widthadmemblock-1 downto 0);
signal s0ext_wr : std_logic;
signal s0ext_d : std_logic_vector(floatwidth-1 downto 0);
--!TBXEND
76,7 → 74,7
--!TBXSTART:MEMBLOCK_EXTERNAL_READ
signal s0ext_rd_add : std_logic_vector(2 downto 0);
signal s0ext_rd : std_logic;
signal s0ext_rd_ack : std_logic_vector(external_readable_blocks-1 downto 0);
signal s0ext_rd_ack : std_logic_vector(8-1 downto 0);
signal s0ext_q : vectorblock08;
--!TBXEND
--! Se&ntilde;al de soporte
185,9 → 183,10
sint_rd_add (1)<= int_rd_add(2*widthadmemblock-1 downto widthadmemblock);
--! Instanciaci&oacute;n de la cola de resultados de salida.
int_q <= s1int_q;
operands_blocks:
for i in 11 downto 0 generate
int_q((i+1)*floatwidth-1 downto floatwidth*i) <= s1int_q(i);
--!int_q((i+1)*floatwidth-1 downto floatwidth*i) <= s1int_q(i);
operandsblock : altsyncram
generic map (
address_aclr_b => "NONE",
228,9 → 227,9
resultfifo_full(2) <= sresultfifo_full(4) or sresultfifo_full(2);
resultfifo_full(1) <= sresultfifo_full(3) or sresultfifo_full(2) or sresultfifo_full(1);
resultfifo_full(0) <= sresultfifo_full(0);
sint_d <= int_d;
results_blocks:
for i in 7 downto 0 generate
sint_d(i) <= int_d((i+1)*floatwidth-1 downto i*floatwidth);
resultsfifo : scfifo
generic map (
add_ram_output_register => "OFF",
276,7 → 275,7
end process;
--! Decodificaci&oacute;n de se&ntilde;al escritura x bloque de memoria, selecciona la memoria en la que se va a escribir a partir de la direcci&oacute;n de entrada.
s0ext_wr_add_choice <= s0ext_wr_add(external_writeable_widthad+widthadmemblock-1 downto widthadmemblock);
s0ext_wr_add_choice <= s0ext_wr_add(4+widthadmemblock-1 downto widthadmemblock);
operands_block_comb: process (s0ext_wr_add_choice,s0ext_wr)
begin
/branches/fp/sqrt32.vhd
25,14 → 25,14
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
 
use work.arithpack.all;
entity sqrt32 is
port (
clk : in std_logic;
rd32: in std_logic_vector(31 downto 0);
sq32: out std_logic_vector(31 downto 0)
rd32: in xfloat32;
sq32: out xfloat32
);
end entity;
architecture sqrt32_arch of sqrt32 is

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.