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

Subversion Repositories fft_fir_filter

[/] [fft_fir_filter/] [trunk/] [rtl/] [rom_cosi.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 unicore
---------------------------------------------------------------------
2
----                                                             ----
3
----  FFT Filter IP core                                         ----
4
----                                                             ----
5
----  Authors: Anatoliy Sergienko, Volodya Lepeha                ----
6
----  Company: Unicore Systems http://unicore.co.ua              ----
7
----                                                             ----
8
----  Downloaded from: http://www.opencores.org                  ----
9
----                                                             ----
10
---------------------------------------------------------------------
11
----                                                             ----
12
---- Copyright (C) 2006-2010 Unicore Systems LTD                 ----
13
---- www.unicore.co.ua                                           ----
14
---- o.uzenkov@unicore.co.ua                                     ----
15
----                                                             ----
16
---- This source file may be used and distributed without        ----
17
---- restriction provided that this copyright statement is not   ----
18
---- removed from the file and that any derivative work contains ----
19
---- the original copyright notice and the associated disclaimer.----
20
----                                                             ----
21
---- THIS SOFTWARE IS PROVIDED "AS IS"                           ----
22
---- AND ANY EXPRESSED OR IMPLIED WARRANTIES,                    ----
23
---- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED                  ----
24
---- WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT              ----
25
---- AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.        ----
26
---- IN NO EVENT SHALL THE UNICORE SYSTEMS OR ITS                ----
27
---- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,            ----
28
---- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL            ----
29
---- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT         ----
30
---- OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,               ----
31
---- DATA, OR PROFITS; OR BUSINESS INTERRUPTION)                 ----
32
---- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,              ----
33
---- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT              ----
34
---- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING                 ----
35
---- IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,                 ----
36
---- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.          ----
37
----                                                             ----
38
---------------------------------------------------------------------
39
 
40
library IEEE;
41
use IEEE.std_logic_1164.all;
42
use IEEE.std_logic_arith.all;
43
use IEEE.STD_LOGIC_UNSIGNED.all;
44
 
45
entity ROM_COSI is
46
        generic(n: integer; --- FFT factor= 6,7,8,9,10,11
47
                wwdth: integer:=15;-- output word width =8...15  , cos>0
48
                wnd:integer);
49
        port  ( SELW:in STD_LOGIC_vector(1 downto 0);
50
                ADDRROM :in std_logic_vector(n-2 downto 0);
51
                COS : out std_logic_vector(wwdth-1 downto 0)
52
                );
53
end  ROM_COSI ;
54
-----------
55
architecture DISTR of  ROM_COSI  is
56
 
57
        type ARR17 is array (0 to 31) of STD_LOGIC_VECTOR(15 downto  0);
58
        constant black:arr17:=(
59
        X"0000",X"0685",X"1268",X"2665",X"3fff",X"5999",X"6d96",X"797a",
60
        X"7fff",X"797a",X"6d96",X"5999",X"3fff",X"2665",X"1268",X"0685",
61
        X"0000",X"0000",X"0000",X"0000",X"0000",X"0000",X"0000",X"0000",
62
        X"0000",X"0000",X"0000",X"0000",X"0000",X"0000",X"0000",X"0000");
63
 
64
        --signal hanns:STD_LOGIC_VECTOR(wwdth-1 downto 0);
65
        signal addrful:STD_LOGIC_VECTOR(8 downto 0);
66
        signal wind:std_logic_vector(wwdth-1 downto 0);
67
        constant nulls: STD_LOGIC_VECTOR(wwdth-1 downto 0):=(others=>'0');
68
 
69
 
70
 
71
        signal ADDR :std_logic_vector(n-3 downto 0);
72
        type ROM16_16 is array(0 to 15 ) of std_logic_vector(15 downto 0);
73
        type ROM128_8 is array(0 to 127 ) of std_logic_vector(7 downto 0);
74
 
75
        constant ROM0000:ROM16_16:=     (
76
        X"7FFF",X"7F61",X"7D89",X"7A7C",X"7641",X"70E2",X"6A6D",X"62F1",
77
        X"5A82",X"5133",X"471C",X"3C56", X"30FB",X"2528",X"18F9",X"0C8C");
78
 
79
        constant ROM1000:ROM16_16:=     (
80
        X"7FD8",X"7E9C",X"7C29",X"7884",X"73B5",X"6DC9",X"66CF",X"5ED7",
81
        X"55F5",X"4C3F",X"41CE",X"36BA",X"2B1F",X"1F1A",X"12C8",X"0648");
82
 
83
        constant ROM0100:ROM16_16:=     (
84
        X"7FF5",X"7F09",X"7CE3",X"7989",X"7504",X"6F5E",X"68A6",X"60EB",
85
        X"5842",X"4EBF",X"447A",X"398C",X"2E11",X"2223",X"15E2",X"096A");
86
        constant ROM1100:ROM16_16:=     (
87
        X"7FA6",X"7E1D",X"7B5C",X"776B",X"7254",X"6C23",X"64E8",X"5CB3",
88
        X"539B",X"49B4",X"3F17",X"33DF",X"2826",X"1C0B",X"0FAB",X"0324");
89
 
90
 
91
        constant ROM0010:ROM16_16:=     (
92
        X"7FFD",X"7F37",X"7D39",X"7A05",X"75A5",X"7022",X"698B",X"61F0",
93
        X"5964",X"4FFB",X"45CD",X"3AF2",X"2F87",X"23A6",X"176E",X"0AFB");
94
        constant ROM1010:ROM16_16:=     (
95
        X"7FC1",X"7E5F",X"7BC5",X"77FA",X"7307",X"6CF8",X"65DD",X"5DC7",
96
        X"54C9",X"4AFB",X"4073",X"354D",X"29A3",X"1D93",X"113A",X"04B6");
97
        constant ROM0110:ROM16_16:=     (
98
        X"7FE9",X"7ED5",X"7C88",X"7909",X"745F",X"6E96",X"67BC",X"5FE3",
99
        X"571D",X"4D81",X"4325",X"3824",X"2C99",X"209F",X"1455",X"07D9");
100
        constant ROM1110:ROM16_16:=     (
101
        X"7F86",X"7DD5",X"7AEE",X"76D8",X"719D",X"6B4A",X"63EE",X"5B9C",
102
        X"5268",X"4869",X"3DB8",X"326E",X"26A8",X"1A82",X"0E1C",X"0192");
103
 
104
        constant ROM0001:ROM16_16:=     (
105
        X"7FFE",X"7F4D",X"7D62",X"7A41",X"75F3",X"7083",X"69FD",X"6271",
106
        X"59F3",X"5097",X"4675",X"3BA5",X"3041",X"2467",X"1833",X"0BC4");
107
        constant ROM0011:ROM16_16:=     (
108
        X"7FF9",X"7F21",X"7D0E",X"79C8",X"7555",X"6FC1",X"6919",X"616E",
109
        X"58D3",X"4F5D",X"4524",X"3A40",X"2ECC",X"22E5",X"16A8",X"0A33");
110
        constant ROM0101:ROM16_16:=     (
111
        X"7FF0",X"7EEF",X"7CB6",X"794A",X"74B2",X"6EFB",X"6832",X"6068",
112
        X"57B0",X"4E20",X"43D0",X"38D9",X"2D55",X"2161",X"151C",X"08A2");
113
        constant ROM0111:ROM16_16:=     (
114
        X"7FE1",X"7EB9",X"7C59",X"78C7",X"740A",X"6E30",X"6746",X"5F5D",
115
        X"568A",X"4CE0",X"427A",X"376F",X"2BDC",X"1FDD",X"138F",X"0711");
116
        constant ROM1001:ROM16_16:=     (
117
        X"7FCD",X"7E7E",X"7BF8",X"783F",X"735E",X"6D61",X"6656",X"5E4F",
118
        X"5560",X"4B9D",X"4121",X"3604",X"2A61",X"1E57",X"1201",X"057F");
119
        constant ROM1011:ROM16_16:=     (
120
        X"7FB4",X"7E3E",X"7B91",X"77B3",X"72AE",X"6C8E",X"6563",X"5D3E",
121
        X"5432",X"4A58",X"3FC5",X"3496",X"28E5",X"1CCF",X"1072",X"03ED");
122
        constant ROM1101:ROM16_16:=     (
123
        X"7F97",X"7DFA",X"7B26",X"7722",X"71F9",X"6BB7",X"646C",X"5C28",
124
        X"5302",X"490F",X"3E68",X"3326",X"2767",X"1B47",X"0EE3",X"025B");
125
        constant ROM1111:ROM16_16:=     (
126
        X"7F74",X"7DB0",X"7AB6",X"768D",X"7140",X"6ADC",X"6370",X"5B0F",
127
        X"51CE",X"47C3",X"3D07",X"31B5",X"25E8",X"19BE",X"0D54",X"00C9");
128
        constant ROMINCR:ROM128_8:=     (
129
        X"00",X"01",X"02",X"04",X"05",X"06",X"07",X"09",
130
        X"0a",X"0b",X"0d",X"0e",X"0f",X"10",X"11",X"12",
131
        X"13",X"15",X"16",X"17",X"19",X"1a",X"1b",X"1c",
132
        X"1d",X"1e",X"1f",X"21",X"22",X"23",X"24",X"25",
133
 
134
        X"27",X"28",X"29",X"2a",X"2b",X"2c",X"2d",X"2e",
135
        X"2f",X"30",X"32",X"33",X"34",X"35",X"36",X"37",
136
        X"38",X"39",X"3a",X"3b",X"3c",X"3d",X"3e",X"3f",
137
        X"40",X"41",X"42",X"43",X"44",X"45",X"45",X"46",
138
 
139
        X"47",X"48",X"49",X"4a",X"4b",X"4c",X"4d",X"4d",
140
        X"4e",X"4f",X"4f",X"50",X"51",X"52",X"53",X"53",
141
        X"54",X"55",X"55",X"56",X"56",X"57",X"58",X"58",
142
        X"58",X"59",X"59",X"5a",X"5b",X"5b",X"5c",X"5d",
143
 
144
        X"5d",X"5d",X"5e",X"5f",X"5f",X"5f",X"5f",X"60",
145
        X"60",X"60",X"61",X"61",X"62",X"62",X"62",X"62",
146
        X"63",X"63",X"63",X"63",X"64",X"64",X"64",X"64",
147
        X"64",X"64",X"64",X"64",X"64",X"64",X"64",X"64");
148
 
149
 
150
        signal MUX:std_logic_vector(wwdth-1 downto 0);
151
        signal MUXi:std_logic_vector(15 downto 0);
152
        signal AD: std_logic_vector(1 downto 0);
153
 
154
begin
155
 
156
        ADDR<=ADDRROM(n-3 downto 0);
157
 
158
        N16: if n=4 generate
159
                AD<=ADDR;
160
                with AD select
161
                MUXi<=X"7FFF" when "00",
162
                X"7641" when "01" ,
163
                X"5A82" when "10" ,
164
                X"30FB"  when others;
165
 
166
                MUX<=MUXi(14 downto 15- wwdth);
167
        end generate;
168
 
169
        N32: if n=5  generate
170
                process (ADDR) is
171
                        variable B:std_logic_vector(15 downto 0);
172
                begin
173
                        B:=ROM0000(conv_integer(ADDR&'0'));
174
                        MUX<=B(14 downto 15- wwdth);
175
                end process;
176
        end generate;
177
 
178
        N64: if n=6  generate
179
                process (ADDR) is
180
                        variable B:std_logic_vector(15 downto 0);
181
                begin
182
                        B:=ROM0000(conv_integer(ADDR));
183
                        MUX<=B(14 downto 15- wwdth);
184
                end process;
185
        end generate;
186
 
187
        N128: if n=7  generate
188
                process (ADDR) is
189
                        variable B0,B1:std_logic_vector(15 downto 0);
190
 
191
                begin
192
                        B0:=ROM0000(conv_integer(ADDR(4 downto 1)));
193
                        B1:=ROM1000(conv_integer(ADDR(4 downto 1)));
194
 
195
                        case ADDR(0) is
196
                                when '0' =>  MUX<=B0(14 downto 15- wwdth);
197
                                when '1' =>  MUX<=B1(14 downto 15- wwdth);
198
                                when others => null      ;
199
                        end case;
200
                end process;
201
        end generate;
202
 
203
        N256: if n=8  generate
204
                process (ADDR) is
205
                        variable B00:std_logic_vector(15 downto 0);
206
                        variable B01:std_logic_vector(15 downto 0);
207
                        variable B10:std_logic_vector(15 downto 0);
208
                        variable B11:std_logic_vector(15 downto 0);
209
                        variable sel:std_logic_vector(1 downto 0);
210
                begin
211
                        B00:=ROM0000(conv_integer(ADDR(5 downto 2)));
212
                        B01:=ROM0100(conv_integer(ADDR(5 downto 2)));
213
                        B10:=ROM1000(conv_integer(ADDR(5 downto 2)));
214
                        B11:=ROM1100(conv_integer(ADDR(5 downto 2)));
215
                        sel:=ADDR(1 downto 0) ;
216
                        case sel is
217
                                when "00" => MUX<=B00(14 downto 15- wwdth);
218
                                when "01" => MUX<=B01(14 downto 15- wwdth);
219
                                when "10" => MUX<=B10(14 downto 15- wwdth);
220
                                when "11" => MUX<=B11(14 downto 15- wwdth);
221
                                when others => null      ;
222
                        end case;
223
                end process;
224
        end generate;
225
 
226
        N512: if n=9  generate
227
                process (ADDR) is
228
                        variable B000,B001:std_logic_vector(15 downto 0);
229
                        variable B010,B011:std_logic_vector(15 downto 0);
230
                        variable B100,B101:std_logic_vector(15 downto 0);
231
                        variable B110,B111:std_logic_vector(15 downto 0);
232
                        variable sel:std_logic_vector(2 downto 0);
233
 
234
                begin
235
                        B000:=ROM0000(conv_integer(ADDR(6 downto 3)));
236
                        B001:=ROM0010(conv_integer(ADDR(6 downto 3)));
237
                        B010:=ROM0100(conv_integer(ADDR(6 downto 3)));
238
                        B011:=ROM0110(conv_integer(ADDR(6 downto 3)));
239
                        B100:=ROM1000(conv_integer(ADDR(6 downto 3)));
240
                        B101:=ROM1010(conv_integer(ADDR(6 downto 3)));
241
                        B110:=ROM1100(conv_integer(ADDR(6 downto 3)));
242
                        B111:=ROM1110(conv_integer(ADDR(6 downto 3)));
243
                        sel:=ADDR(2 downto 0) ;
244
 
245
                        case sel is
246
                                when "000" =>MUX<=B000(14 downto 15- wwdth);
247
                                when "001" =>MUX<=B001(14 downto 15- wwdth);
248
                                when "010" =>MUX<=B010(14 downto 15- wwdth);
249
                                when "011" =>MUX<=B011(14 downto 15- wwdth);
250
                                when "100" =>MUX<=B100(14 downto 15- wwdth);
251
                                when "101" =>MUX<=B101(14 downto 15- wwdth);
252
                                when "110" =>MUX<=B110(14 downto 15- wwdth);
253
                                when "111" =>MUX<=B111(14 downto 15- wwdth);
254
                                when others => null      ;
255
                        end case;
256
                end process;
257
        end generate;
258
 
259
        N1024: if n=10  generate
260
                process (ADDR) is
261
                        variable B0000:std_logic_vector(15 downto 0);
262
                        variable B0001:std_logic_vector(15 downto 0);
263
                        variable B0010:std_logic_vector(15 downto 0);
264
                        variable B0011:std_logic_vector(15 downto 0);
265
                        variable B0100,B0101,B0110,B0111:std_logic_vector(15 downto 0);
266
                        variable B1000,B1001,B1010,B1011:std_logic_vector(15 downto 0);
267
                        variable B1100,B1101,B1110,B1111:std_logic_vector(15 downto 0);
268
                        variable sel:std_logic_vector(3 downto 0);
269
 
270
                begin
271
                        B0000:=ROM0000(conv_integer(ADDR(7 downto 4)));
272
                        B0001:=ROM0001(conv_integer(ADDR(7 downto 4)));
273
                        B0010:=ROM0010(conv_integer(ADDR(7 downto 4)));
274
                        B0011:=ROM0011(conv_integer(ADDR(7 downto 4)));
275
                        B0100:=ROM0100(conv_integer(ADDR(7 downto 4)));
276
                        B0101:=ROM0101(conv_integer(ADDR(7 downto 4)));
277
                        B0110:=ROM0110(conv_integer(ADDR(7 downto 4)));
278
                        B0111:=ROM0111(conv_integer(ADDR(7 downto 4)));
279
                        B1000:=ROM1000(conv_integer(ADDR(7 downto 4)));
280
                        B1001:=ROM1001(conv_integer(ADDR(7 downto 4)));
281
                        B1010:=ROM1010(conv_integer(ADDR(7 downto 4)));
282
                        B1011:=ROM1011(conv_integer(ADDR(7 downto 4)));
283
                        B1100:=ROM1100(conv_integer(ADDR(7 downto 4)));
284
                        B1101:=ROM1101(conv_integer(ADDR(7 downto 4)));
285
                        B1110:=ROM1110(conv_integer(ADDR(7 downto 4)));
286
                        B1111:=ROM1111(conv_integer(ADDR(7 downto 4)));
287
 
288
                        sel:=ADDR(3 downto 0) ;
289
 
290
                        case sel is
291
                                when "0000" =>MUX<=B0000(14 downto 15- wwdth);
292
                                when "0001" =>MUX<=B0001(14 downto 15- wwdth);
293
                                when "0010" =>MUX<=B0010(14 downto 15- wwdth);
294
                                when "0011" =>MUX<=B0011(14 downto 15- wwdth);
295
                                when "0100" =>MUX<=B0100(14 downto 15- wwdth);
296
                                when "0101" =>MUX<=B0101(14 downto 15- wwdth);
297
                                when "0110" =>MUX<=B0110(14 downto 15- wwdth);
298
                                when "0111" =>MUX<=B0111(14 downto 15- wwdth);
299
                                when "1000" =>MUX<=B1000(14 downto 15- wwdth);
300
                                when "1001" =>MUX<=B1001(14 downto 15- wwdth);
301
                                when "1010" =>MUX<=B1010(14 downto 15- wwdth);
302
                                when "1011" =>MUX<=B1011(14 downto 15- wwdth);
303
                                when "1100" =>MUX<=B1100(14 downto 15- wwdth);
304
                                when "1101" =>MUX<=B1101(14 downto 15- wwdth);
305
                                when "1110" =>MUX<=B1110(14 downto 15- wwdth);
306
                                when "1111" =>MUX<=B1111(14 downto 15- wwdth);
307
                                when others => null      ;
308
                        end case;
309
                end process;
310
        end generate;
311
 
312
        N2048: if n=11  generate
313
                process (ADDR) is
314
                        variable B0000:std_logic_vector(15 downto 0);
315
                        variable B0001:std_logic_vector(15 downto 0);
316
                        variable B0010:std_logic_vector(15 downto 0);
317
                        variable B0011:std_logic_vector(15 downto 0);
318
                        variable B0100,B0101,B0110,B0111:std_logic_vector(15 downto 0);
319
                        variable B1000,B1001,B1010,B1011:std_logic_vector(15 downto 0);
320
                        variable B1100,B1101,B1110,B1111:std_logic_vector(15 downto 0);
321
                        variable MUXI:std_logic_vector(wwdth-1 downto 0);
322
                        variable INCI:std_logic_vector(wwdth-8 downto 0);
323
                        variable INC:std_logic_vector(7 downto 0);
324
                        variable sel:std_logic_vector(3 downto 0);
325
 
326
                begin
327
 
328
                        INC:=ROMINCR(conv_integer(ADDR(8 downto 2)));
329
                        INCI:=INC( 7 downto 15- wwdth);
330
 
331
                        B0000:=ROM0000(conv_integer(ADDR(8 downto 5)));
332
                        B0001:=ROM0001(conv_integer(ADDR(8 downto 5)));
333
                        B0010:=ROM0010(conv_integer(ADDR(8 downto 5)));
334
                        B0011:=ROM0011(conv_integer(ADDR(8 downto 5)));
335
                        B0100:=ROM0100(conv_integer(ADDR(8 downto 5)));
336
                        B0101:=ROM0101(conv_integer(ADDR(8 downto 5)));
337
                        B0110:=ROM0110(conv_integer(ADDR(8 downto 5)));
338
                        B0111:=ROM0111(conv_integer(ADDR(8 downto 5)));
339
                        B1000:=ROM1000(conv_integer(ADDR(8 downto 5)));
340
                        B1001:=ROM1001(conv_integer(ADDR(8 downto 5)));
341
                        B1010:=ROM1010(conv_integer(ADDR(8 downto 5)));
342
                        B1011:=ROM1011(conv_integer(ADDR(8 downto 5)));
343
                        B1100:=ROM1100(conv_integer(ADDR(8 downto 5)));
344
                        B1101:=ROM1101(conv_integer(ADDR(8 downto 5)));
345
                        B1110:=ROM1110(conv_integer(ADDR(8 downto 5)));
346
                        B1111:=ROM1111(conv_integer(ADDR(8 downto 5)));
347
 
348
                        sel:=ADDR(4 downto 1) ;
349
 
350
                        case sel is
351
                                when "0000" =>MUXI:=B0000(14 downto 15- wwdth);
352
                                when "0001" =>MUXI:=B0001(14 downto 15- wwdth);
353
                                when "0010" =>MUXI:=B0010(14 downto 15- wwdth);
354
                                when "0011" =>MUXI:=B0011(14 downto 15- wwdth);
355
                                when "0100" =>MUXI:=B0100(14 downto 15- wwdth);
356
                                when "0101" =>MUXI:=B0101(14 downto 15- wwdth);
357
                                when "0110" =>MUXI:=B0110(14 downto 15- wwdth);
358
                                when "0111" =>MUXI:=B0111(14 downto 15- wwdth);
359
                                when "1000" =>MUXI:=B1000(14 downto 15- wwdth);
360
                                when "1001" =>MUXI:=B1001(14 downto 15- wwdth);
361
                                when "1010" =>MUXI:=B1010(14 downto 15- wwdth);
362
                                when "1011" =>MUXI:=B1011(14 downto 15- wwdth);
363
                                when "1100" =>MUXI:=B1100(14 downto 15- wwdth);
364
                                when "1101" =>MUXI:=B1101(14 downto 15- wwdth);
365
                                when "1110" =>MUXI:=B1110(14 downto 15- wwdth);
366
                                when "1111" =>MUXI:=B1111(14 downto 15- wwdth);
367
                                when others => null      ;
368
                        end case;
369
 
370
                        if ADDR(0)='1' then
371
                                MUX<=CONV_STD_LOGIC_VECTOR((unsigned(MUXI)-unsigned(INCi)),wwdth);
372
                        else
373
                                MUX<=MUXI;
374
                        end if;
375
 
376
                end process;
377
        end generate;
378
 
379
        process(ADDRROM,addrful)
380
                variable windi: STD_LOGIC_VECTOR(15 downto 0);
381
        begin
382
 
383
                --addrful<=ADDRROM(n-3 downto 0); 
384
                if wnd=1  then
385
                        windi:=black(conv_integer(addrrom(4 downto 0)));
386
                        wind<=windi(14 downto 15-wwdth);
387
                else
388
                        --wind(wwdth-1)<='0' ;
389
                        wind(wwdth-1 downto 0)<=(others=>'1');
390
                end if;
391
        end process;
392
 
393
 
394
        COS<=MUX when SELW="00"
395
        else wind when SELW="01"
396
        else    addrrom & nulls(wwdth-n downto 0) when SELW="10"
397
        else (others=>'1');
398
 
399
end DISTR;
400
 

powered by: WebSVN 2.1.0

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