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ón interna y genera los mecanismos de sincronización con el exterior (interrupciones). |
--! @author Julián Andrés Guarín Reyes |
-------------------------------------------------------------- |
-- RAYTRAC |
32,9 → 32,9
|
--! Señales normales de secuencia. |
clk,rst: in std_logic; |
--! Vector con las instrucción codficada |
--! Vector con las instrucción codficada |
instrQq:in std_logic_vector(floatwidth-1 downto 0); |
--! Señal de cola vacia. |
--! Señ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ón para ejecutar. |
--! EXECUTE_INSTRUCTION: Estado en el que se ejecuta la instrucció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úmero específico de ciclos de reloj, para que se desocupe el pipeline aritmé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ódigo UCA, pero en la etapa DPC: La diferencia es que UCA en la etapa DPC, decodifica el datapath dentro del pipeline aritmé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ó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ón, para que el pipeline aritmé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ódigo con la instrucción a ejecutar. |
s_instr_uca <= instrQq(31 downto 29); |
|
--! Address Counters |
200,7 → 200,7
--!Señ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ón, "descargamos" esta de la má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ó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ón. |
s_state <= EXECUTE_INSTRUCTION; |
|
--! Asignar el código UCA para que comience la decodificación. |
--! Asignar el código UCA para que comience la decodificación. |
s_dpc_uca <= s_instr_uca; |
|
--! Validar el siguiente dato dentro del pipeline aritmético. |
--! Validar el siguiente dato dentro del pipeline aritmé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ó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é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é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ético. |
sync_chain_0 <= '0'; |
else |
sync_chain_0 <= '1'; |
end if; |
|
--! Ejecución de la instrucción |
--! Ejecución de la instrucción |
when FLUSH_ARITH_PIPELINE => |
--! Este estado permanece así hasta que, haya una instrucción |
--! Este estado permanece así hasta que, haya una instrucció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ñ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ñ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ñal de soporte |
185,9 → 183,10
sint_rd_add (1)<= int_rd_add(2*widthadmemblock-1 downto widthadmemblock); |
|
--! Instanciació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ón de señal escritura x bloque de memoria, selecciona la memoria en la que se va a escribir a partir de la direcció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 |