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

Subversion Repositories raytrac

[/] [raytrac/] [branches/] [fp/] [arithpack.vhd] - Blame information for rev 151

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 151 jguarin200
library ieee;
2
use ieee.std_logic_1164.all;
3
 
4
--! Memory Compiler Library
5
library lpm;
6
use lpm.all;
7
 
8
 
9
 
10
package arithpack is
11
        --! Estados para la maquina de estados.
12
        type macState is (LOAD_INSTRUCTION,FLUSH_ARITH_PIPELINE,EXECUTE_INSTRUCTION);
13
        --! Estados para el controlador de interrupciones.
14
        type iCtrlState is (WAITING_FOR_AN_EVENT,FIRING_INTERRUPTIONS,SUSPEND);
15
        --! Constante de reseteo
16
        constant rstMasterValue : std_logic :='0';
17
        --! Constantes periodicas.
18
        constant tclk   : time := 20 ns;
19
        constant tclk_2 : time := tclk/2;
20
        constant tclk_4 : time := tclk/4;
21
 
22
        --! Contadores para la m&aacute:quina de estados.
23
        component customCounter
24
        generic (
25
                EOBFLAG         : string ;
26
                ZEROFLAG        : string ;
27
                BACKWARDS       : string ;
28
                EQUALFLAG       : string ;
29
                subwidth        : integer;
30
                width           : integer
31
 
32
        );
33
        port (
34
                clk,rst,go,set  : in std_logic;
35
                setValue,cmpBlockValue          : in std_Logic_vector(width-1 downto subwidth);
36
                zero_flag,eob_flag,eq_flag      : out std_logic;
37
                count                   : out std_logic_vector(width-1 downto 0)
38
        );
39
        end component;
40
 
41
        --! LPM Memory Compiler.
42
        component scfifo
43
        generic (
44
                add_ram_output_register :string;
45
                almost_full_value               :natural;
46
                allow_wrcycle_when_full :string;
47
                intended_device_family  :string;
48
                lpm_hint                                :string;
49
                lpm_numwords                    :natural;
50
                lpm_showahead                   :string;
51
                lpm_type                                :string;
52
                lpm_width                               :natural;
53
                lpm_widthu                              :natural;
54
                overflow_checking               :string;
55
                underflow_checking              :string;
56
                use_eab                                 :string
57
        );
58
        port(
59
                rdreq           : in std_logic;
60
                aclr            : in std_logic;
61
                empty           : out std_logic;
62
                clock           : in std_logic;
63
                q                       : out std_logic_vector(lpm_width-1 downto 0);
64
                wrreq           : in std_logic;
65
                data            : in std_logic_vector(lpm_width-1 downto 0);
66
                almost_full : out std_logic;
67
                full            : out std_logic
68
        );
69
        end component;
70
 
71
 
72
        component altsyncram
73
        generic (
74
                address_aclr_b                  : string;
75
                address_reg_b                   : string;
76
                clock_enable_input_a    : string;
77
                clock_enable_input_b    : string;
78
                clock_enable_output_b   : string;
79
                intended_device_family  : string;
80
                lpm_type                                : string;
81
                numwords_a                              : natural;
82
                numwords_b                              : natural;
83
                operation_mode                  : string;
84
                outdata_aclr_b                  : string;
85
                outdata_reg_b                   : string;
86
                power_up_uninitialized  : string;
87
                ram_block_type                  : string;
88
                rdcontrol_reg_b                 : string;
89
                read_during_write_mode_mixed_ports      : string;
90
                widthad_a                               : natural;
91
                widthad_b                               : natural;
92
                width_a                                 : natural;
93
                width_b                                 : natural;
94
                width_byteena_a                 : natural
95
        );
96
        port (
97
                wren_a          : in std_logic;
98
                clock0          : in std_logic;
99
                address_a       : in std_logic_vector(8 downto 0);
100
                address_b       : in std_logic_vector(8 downto 0);
101
                rden_b          : in std_logic;
102
                q_b                     : out std_logic_vector(31 downto 0);
103
                data_a          : in std_logic_vector(31 downto 0)
104
 
105
        );
106
        end component;
107
 
108
        --! Maquina de Estados.
109
        component sm
110
        generic (
111
                width : integer ;
112
                widthadmemblock : integer
113
                --!external_readable_widthad :                          
114
        );
115
        port (
116
 
117
                --! Señales normales de secuencia.
118
                clk,rst:                        in std_logic;
119
                --! Vector con las instrucción codficada
120
                instrQq:in std_logic_vector(31 downto 0);
121
                --! Señal de cola vacia.
122
                instrQ_empty:in std_logic;
123
                adda,addb:out std_logic_vector (8 downto 0);
124
                sync_chain_0,instrRdAckd:out std_logic;
125
                full_r:         in std_logic;   --! Indica que la cola de resultados no puede aceptar mas de 32 elementos.
126
                --! End Of Instruction Event
127
                eoi     : out std_logic;
128
 
129
                --! DataPath Control uca code.
130
                dpc_uca : out std_logic_vector (2 downto 0);
131
                state   : out macState
132
        );
133
        end component;
134
        --! Maquina de Interrupciones
135
        component im
136
        generic (
137
                num_events : integer ;
138
                cycles_to_wait : integer
139
        );
140
        port (
141
                clk,rst:                in std_logic;
142
                rfull_events:   in std_logic_vector(num_events-1 downto 0);      --! full results queue events
143
                eoi_events:             in std_logic_vector(num_events-1 downto 0);      --! end of instruction related events
144
                eoi_int:                out std_logic_vector(num_events-1 downto 0);--! end of instruction related interruptions
145
                rfull_int:              out std_logic_vector(num_events-1downto 0);      --! full results queue related interruptions
146
                state:                  out iCtrlState
147
        );
148
        end component;
149
        --! Bloque de memorias
150
        component memblock
151
        generic (
152
                width                                           : integer;
153
                blocksize                                       : integer;
154
                widthadmemblock                         : integer;
155
                external_writeable_blocks       : integer;
156
                external_readable_blocks        : integer;
157
                external_readable_widthad       : integer;
158
                external_writeable_widthad      : integer
159
        );
160
        port (
161
 
162
 
163
                clk,rst,dpfifo_rd,normfifo_rd,dpfifo_wr,normfifo_wr : in std_logic;
164
                instrfifo_rd : in std_logic;
165
                resultfifo_wr: in std_logic_vector(external_readable_blocks-1 downto 0);
166
                instrfifo_empty: out std_logic; ext_rd,ext_wr: in std_logic;
167
                ext_wr_add : in std_logic_vector(external_writeable_widthad+widthadmemblock-1 downto 0);
168
                ext_rd_add : in std_logic_vector(external_readable_widthad-1 downto 0);
169
                ext_d: in std_logic_vector(width-1 downto 0);
170
                int_d : in std_logic_vector(external_readable_blocks*width-1 downto 0);
171
                resultfifo_full  : out std_logic_vector(3 downto 0);
172
                ext_q,instrfifo_q : out std_logic_vector(width-1 downto 0);
173
                int_q : out std_logic_vector(external_writeable_blocks*width-1 downto 0);
174
                int_rd_add : in std_logic_vector(2*widthadmemblock-1 downto 0);
175
                dpfifo_d : in std_logic_vector(width*2-1 downto 0);
176
                normfifo_d : in std_logic_vector(width*3-1 downto 0);
177
                dpfifo_q : out std_logic_vector(width*2-1 downto 0);
178
                normfifo_q : out std_logic_vector(width*3-1 downto 0)
179
        );
180
        end component;
181
        --! Bloque decodificacion DataPath Control.
182
        component dpc
183
        generic (
184
                width : integer
185
        );
186
        port (
187
                clk,rst                                 : in    std_logic;
188
                paraminput                              : in    std_logic_vector ((12*width)-1 downto 0);        --! Vectores A,B,C,D
189
                prd32blko                               : in    std_logic_vector ((06*width)-1 downto 0);        --! Salidas de los 6 multiplicadores.
190
                add32blko                               : in    std_logic_vector ((04*width)-1 downto 0);        --! Salidas de los 4 sumadores.
191
                sqr32blko,inv32blko             : in    std_logic_vector (width-1 downto 0);             --! Salidas de la raiz cuadradas y el inversor.
192
                fifo32x23_q                             : in    std_logic_vector (03*width-1 downto 0);          --! Salida de la cola intermedia.
193
                fifo32x09_q                             : in    std_logic_vector (02*width-1 downto 0);  --! Salida de las colas de producto punto. 
194
                unary,crossprod,addsub  : in    std_logic;                                                                      --! Bit con el identificador del bloque AB vs CD e identificador del sub bloque (A/B) o (C/D). 
195
                sync_chain_0                    : in    std_logic;                                                                      --! Señal de dato valido que se va por toda la cadena de sincronizacion.
196
                eoi_int                                 : in    std_logic;                                                                      --! Sennal de interrupción de final de instrucción.
197
                eoi_demuxed_int                 : out   std_logic_vector (3 downto 0);                           --! Señal de interrupción de final de instrucción pero esta vez va asociada a la instruccón UCA.
198
                sqr32blki,inv32blki             : out   std_logic_vector (width-1 downto 0);             --! Salidas de las 2 raices cuadradas y los 2 inversores.
199
                fifo32x26_d                             : out   std_logic_vector (03*width-1 downto 0);          --! Entrada a la cola intermedia para la normalización.
200
                fifo32x09_d                             : out   std_logic_vector (02*width-1 downto 0);          --! Entrada a las colas intermedias del producto punto.         
201
                prd32blki                               : out   std_logic_vector ((12*width)-1 downto 0);        --! Entrada de los 12 factores en el bloque de multiplicación respectivamente.
202
                add32blki                               : out   std_logic_vector ((08*width)-1 downto 0);        --! Entrada de los 8 sumandos del bloque de 4 sumadores.  
203
                resw                                    : out   std_logic_vector (4 downto 0);                           --! Salidas de escritura y lectura en las colas de resultados.
204
                fifo32x09_w                             : out   std_logic;
205
                fifo32x23_w,fifo32x09_r : out   std_logic;
206
                fifo32x23_r                             : out   std_logic;
207
                resf_vector                             : in    std_logic_vector(3 downto 0);                            --! Entradas de la señal de full de las colas de resultados. 
208
                resf_event                              : out   std_logic;                                                                      --! Salida decodificada que indica que la cola de resultados de la operación que está en curso.
209
                resultoutput                    : out   std_logic_vector ((08*width)-1 downto 0)         --! 8 salidas de resultados, pues lo máximo que podrá calcularse por cada clock son 2 vectores.
210
        );
211
        end component;
212
        --! Bloque Aritmetico de Sumadores y Multiplicadores (madd)
213
        component arithblock
214
        port (
215
 
216
                clk     : in std_logic;
217
                rst : in std_logic;
218
 
219
                dpc : in std_logic;
220
 
221
                f       : in std_logic_vector (12*32-1 downto 0);
222
                a       : in std_logic_vector (8*32-1 downto 0);
223
 
224
                s       : out std_logic_vector (4*32-1 downto 0);
225
                p       : out std_logic_vector (6*32-1 downto 0)
226
 
227
        );
228
        end component;
229
        --! Bloque de Raiz Cuadrada
230
        component sqrt32
231
        port (
232
 
233
                clk     : in std_logic;
234
                rd32: in std_logic_vector(31 downto 0);
235
                sq32: out std_logic_vector(31 downto 0)
236
        );
237
        end component;
238
        --! Bloque de Inversores.
239
        component invr32
240
        port (
241
 
242
                clk             : in std_logic;
243
                dvd32   : in std_logic_vector(31 downto 0);
244
                qout32  : out std_logic_vector(31 downto 0)
245
        );
246
        end component;
247
end package;
248
 

powered by: WebSVN 2.1.0

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