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

Subversion Repositories highload

[/] [highload/] [trunk/] [lc_use.vhd] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 alexadmin
-- High load test project.
2
-- Alexey Fedorov, 2014
3
-- email: FPGA@nerudo.com
4
--
5
-- It implements 256 LUT/DFFs per one row (NUM_ROWS parameter) 
6
-- with default other parameters
7
 
8
library ieee;
9
use ieee.std_logic_1164.all;
10
use ieee.numeric_std.all;
11
 
12
 
13
entity lc_use is
14
        generic (
15
                DATA_WIDTH : positive := 128;
16
                ARITH_SIZE : positive := 16; -- Should be divider of DATA_WIDTH
17
                NUM_ROWS: positive := 6 -- Input pins
18
                );
19
        port
20
        (
21
                clk     : in  std_logic;
22
                inputs: in std_logic_vector(DATA_WIDTH-1 downto 0);
23
                dataout: out std_logic_vector(DATA_WIDTH-1 downto 0)
24
        );
25
end lc_use;
26
 
27
 
28
architecture rtl of lc_use is
29
type TArr is array (natural range <>) of unsigned(127 downto 0);
30
signal arr : TArr(0 to 2*NUM_ROWS) := (others => (others => '0'));
31
 
32
begin
33
 
34
assert DATA_WIDTH mod ARITH_SIZE = 0 report "ARITH_SIZE should be divider of DATA_WIDTH" severity error;
35
 
36
process(clk)
37
begin
38
if rising_edge(clk) then
39
        arr(0)(DATA_WIDTH-1 downto 0) <= unsigned(inputs);
40
        for i in 0 to NUM_ROWS-1 loop
41
                arr(2*i+1) <= arr(2*i) xor (arr(2*i) rol 1) xor (arr(2*i) rol 2) xor (arr(2*i) rol 3);
42
                for j in 0 to DATA_WIDTH/ARITH_SIZE-1 loop
43
                        arr(2*i+2)((j+1)*ARITH_SIZE - 1 downto j*ARITH_SIZE) <=
44
                                arr(2*i+0)((j+1)*ARITH_SIZE - 1 downto j*ARITH_SIZE) +
45
                                arr(2*i+1)((j+1)*ARITH_SIZE - 1 downto j*ARITH_SIZE);
46
                end loop;
47
        end loop;
48
 
49
        dataout <= std_logic_vector(arr(2*NUM_ROWS));
50
 
51
end if;
52
 
53
end process;
54
 
55
end rtl;

powered by: WebSVN 2.1.0

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