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

Subversion Repositories socwire

[/] [socwire/] [trunk/] [CODEC/] [dp_ram.vhd] - Blame information for rev 16

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

Line No. Rev Author Line
1 8 bjoerno
 
2
---====================== Start Copyright Notice ========================---
3
--==                                                                    ==--
4
--== Filename ..... dp_ram.vhd                                   ==--
5
--== Download ..... http://www.ida.ing.tu-bs.de                         ==--
6
--== Company ...... IDA TU Braunschweig, Prof. Dr.-Ing. Harald Michalik ==--
7
--== Authors ...... Björn Osterloh, Karel Kotarowski                    ==--
8
--== Contact ...... Björn Osterloh (b.osterloh@tu-bs.de)                ==--
9
--== Copyright .... Copyright (c) 2008 IDA                              ==--
10
--== Project ...... SoCWire CODEC                                       ==--
11
--== Version ...... 1.00                                                ==--
12
--== Conception ... 11 November 2008                                    ==--
13
--== Modified ..... N/A                                                 ==--
14
--==                                                                    ==--
15
---======================= End Copyright Notice =========================---
16
 
17
LIBRARY IEEE;
18
USE IEEE.STD_LOGIC_1164.ALL;
19
 
20
LIBRARY UNISIM;
21
USE UNISIM.ALL;
22
 
23
 
24
ENTITY dp_ram IS
25
  GENERIC( datawidth : NATURAL RANGE 8 TO 8192);
26
  PORT(
27
       --== General Interface ==--
28
 
29
       rst     : IN  STD_LOGIC;
30
       clk     : IN  STD_LOGIC;
31
 
32
       --== Write Interface ==--
33
 
34
       wr_en   : IN  STD_LOGIC;
35
       wr_addr : IN  STD_LOGIC_VECTOR(9 DOWNTO 0);
36
       wr_din  : IN  STD_LOGIC_VECTOR(datawidth DOWNTO 0);
37
 
38
       --== Read Interface ==--
39
 
40
       rd_en   : IN  STD_LOGIC;
41
       rd_addr : IN  STD_LOGIC_VECTOR(9 DOWNTO 0);
42
       rd_dout : OUT STD_LOGIC_VECTOR(datawidth DOWNTO 0)
43
      );
44
END dp_ram;
45
 
46
 
47
ARCHITECTURE rtl OF dp_ram IS
48
 
49
---==========================---
50
--== Component Declarations ==--
51
---==========================---
52
 
53
COMPONENT RAMB16_S18_S18
54
port (
55
      DOA        : out STD_LOGIC_VECTOR (15 downto 0);
56
          DOB    : out STD_LOGIC_VECTOR (15 downto 0);
57
          DOPA   : out STD_LOGIC_VECTOR (1 downto 0);
58
          DOPB   : out STD_LOGIC_VECTOR (1 downto 0);
59
          ADDRA  : in  STD_LOGIC_VECTOR (9 downto 0);
60
          ADDRB  : in  STD_LOGIC_VECTOR (9 downto 0);
61
          CLKA   : in  STD_LOGIC;
62
          CLKB   : in  STD_LOGIC;
63
          DIA    : in  STD_LOGIC_VECTOR (15 downto 0);
64
          DIB    : in  STD_LOGIC_VECTOR (15 downto 0);
65
          DIPA   : in  STD_LOGIC_VECTOR (1 downto 0);
66
          DIPB   : in  STD_LOGIC_VECTOR (1 downto 0);
67
          ENA    : in  STD_LOGIC;
68
          ENB    : in  STD_LOGIC;
69
          SSRA   : in  STD_LOGIC;
70
          SSRB   : in  STD_LOGIC;
71
          WEA    : in  STD_LOGIC;
72
          WEB    : in  STD_LOGIC
73
         );
74
END COMPONENT;
75
 
76
---=======================---
77
--== Signal Declarations ==--
78
---=======================---
79
 
80
SIGNAL logic_0      : STD_LOGIC;
81
SIGNAL logic_1      : STD_LOGIC;
82
SIGNAL logic_0_bus  : STD_LOGIC_VECTOR(15 DOWNTO 0);
83
SIGNAL addra_i          : STD_LOGIC_VECTOR(9 DOWNTO 0);
84
SIGNAL addrb_i          : STD_LOGIC_VECTOR(9 DOWNTO 0);
85
SIGNAL logic_00         : STD_LOGIC_VECTOR(1 DOWNTO 0);
86
SIGNAL ramin            : STD_LOGIC_VECTOR(((datawidth / 16) + 1)*16-1 DOWNTO 0) := (others => '0');
87
SIGNAL ramout           : STD_LOGIC_VECTOR(((datawidth / 16) + 1)*16-1 DOWNTO 0) := (others => '0');
88
SIGNAL ENA                      : STD_LOGIC;
89
SIGNAL ENB                      : STD_LOGIC;
90
SIGNAL rst_buf          : STD_LOGIC;
91
BEGIN
92
 
93
  ---===================---
94
  --== Tie-Off Signals ==--
95
  ---===================---
96
 
97
  logic_0     <= '0';
98
  logic_1     <= '1';
99
  logic_0_bus <= (OTHERS => '0');
100
  logic_00    <= (OTHERS => '0');
101
 
102
  ---=================---
103
  --== Dual Port RAM ==--
104
  ---=================---
105
 
106
 
107
  addra_i <= wr_addr;
108
  addrb_i <= rd_addr;
109
  ena <= wr_en;
110
  enb <= rd_en OR rst;
111
 
112
 
113
  G0 : FOR a IN 0 TO (datawidth) GENERATE
114
    ramin(a) <= wr_din(a);
115
  END GENERATE G0;
116
 
117
  G1 : FOR b IN 0 TO (datawidth) GENERATE
118
    rd_dout(b) <= ramout(b);
119
  END GENERATE G1;
120
 
121
  G2 : FOR i IN 0 TO (datawidth / 16) GENERATE
122
  U0 : RAMB16_S18_S18
123
    port map(
124
             DOA => OPEN, -- Port A 16-bit Data Output
125
                         DOB => ramout((i+1)*16-1 DOWNTO i*16), -- Port B 16-bit Data Output
126
                         DOPA => OPEN, -- Port A 2-bit Parity Output
127
                         DOPB => OPEN, -- Port B 2-bit Parity Output
128
                         ADDRA => addra_i, -- Port A 10-bit Address Input
129
                         ADDRB => addrb_i, -- Port B 10-bit Address Input
130
                         CLKA => clk, -- Port A Clock
131
                         CLKB => clk, -- Port B Clock
132
                         DIA => ramin((i+1)*16-1 DOWNTO i*16), -- Port A 16-bit Data Input
133
                         DIB => logic_0_bus, -- Port B 16-bit Data Input
134
                         DIPA => logic_00, -- Port A 2-bit parity Input
135
                         DIPB => logic_00, -- Port-B 2-bit parity Input
136
                         ENA => ena, -- Port A RAM Enable Input
137
                         ENB => enb, -- PortB RAM Enable Input
138
                         SSRA => rst, -- Port A Synchronous Set/Reset Input
139
                         SSRB => rst, -- Port B Synchronous Set/Reset Input
140
                         WEA => logic_1, -- Port A Write Enable Input
141
                         WEB => logic_0  -- Port B Write Enable Input
142
);
143
 
144
END GENERATE G2;
145
 
146
END rtl;
147
 
148
 
149
 
150
 

powered by: WebSVN 2.1.0

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