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

Subversion Repositories heap_sorter

[/] [heap_sorter/] [trunk/] [high_speed_pipelined_4clk_per_word/] [src/] [dp_ram_scl_sorter_distributed.vhd] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 wzab
-- A parameterized, inferable, true dual-port, common-clock block RAM in VHDL.
2
-- Original file was taken from: http://danstrother.com/2010/09/11/inferring-rams-in-fpgas/
3
-- No license information were provided by the original author.
4
-- Minimal modifications were introduced by me to make it suitable for my sorter.
5
 
6
library ieee;
7
use ieee.std_logic_1164.all;
8
use ieee.std_logic_unsigned.all;
9
 
10
entity dp_ram_scl_sorter_distributed is
11
  generic (
12
    DATA_WIDTH : integer := 72;
13
    ADDR_WIDTH : integer := 10
14
    );
15
  port (
16
-- common clock
17
    clk    : in  std_logic;
18
    -- Port A
19
    we_a   : in  std_logic;
20
    addr_a : in  std_logic_vector(ADDR_WIDTH-1 downto 0);
21
    data_a : in  std_logic_vector(DATA_WIDTH-1 downto 0);
22
    q_a    : out std_logic_vector(DATA_WIDTH-1 downto 0);
23
 
24
    -- Port B
25
    we_b   : in  std_logic;
26
    addr_b : in  std_logic_vector(ADDR_WIDTH-1 downto 0);
27
    data_b : in  std_logic_vector(DATA_WIDTH-1 downto 0);
28
    q_b    : out std_logic_vector(DATA_WIDTH-1 downto 0)
29
    );
30
end dp_ram_scl_sorter_distributed;
31
 
32
architecture rtl of dp_ram_scl_sorter_distributed is
33
  -- Shared memory
34
  type mem_type is array ((2**ADDR_WIDTH)-1 downto 0) of std_logic_vector(DATA_WIDTH-1 downto 0);
35
 
36
  signal mem           : mem_type;
37
  signal tmp_a    : std_logic_vector(DATA_WIDTH-1 downto 0);
38
  signal tmp_b    : std_logic_vector(DATA_WIDTH-1 downto 0);
39
 
40
begin
41
 
42
-- Port A
43
  process(clk)
44
  begin
45
    if(clk'event and clk = '1') then
46
      if(we_a = '1') then
47
        mem(conv_integer(addr_a)) <= data_a;
48
 
49
      elsif(we_b = '1') then
50
        mem(conv_integer(addr_b)) <= data_b;
51
 
52
      end if;
53
 
54
      tmp_a <= mem(conv_integer(addr_a));
55
      q_a <= tmp_a;
56
      tmp_b <= mem(conv_integer(addr_b));
57
      q_b <= tmp_b;
58
    end if;
59
  end process;
60
 
61
end rtl;

powered by: WebSVN 2.1.0

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