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

Subversion Repositories xmatchpro

[/] [xmatchpro/] [trunk/] [xmw4-comdec/] [xmatch_sim7/] [ipcore_dir/] [DP_RAM_XILINX_MASK/] [simulation/] [DP_RAM_XILINX_MASK_synth.vhd] - Blame information for rev 9

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 9 eejlny
 
2
 
3
 
4
 
5
 
6
 
7
 
8
 
9
 
10
--------------------------------------------------------------------------------
11
--
12
-- BLK MEM GEN v7_3 Core - Synthesizable Testbench
13
--
14
--------------------------------------------------------------------------------
15
--
16
-- (c) Copyright 2006_3010 Xilinx, Inc. All rights reserved.
17
--
18
-- This file contains confidential and proprietary information
19
-- of Xilinx, Inc. and is protected under U.S. and
20
-- international copyright and other intellectual property
21
-- laws.
22
--
23
-- DISCLAIMER
24
-- This disclaimer is not a license and does not grant any
25
-- rights to the materials distributed herewith. Except as
26
-- otherwise provided in a valid license issued to you by
27
-- Xilinx, and to the maximum extent permitted by applicable
28
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
29
-- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES
30
-- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
31
-- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
32
-- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
33
-- (2) Xilinx shall not be liable (whether in contract or tort,
34
-- including negligence, or under any other theory of
35
-- liability) for any loss or damage of any kind or nature
36
-- related to, arising under or in connection with these
37
-- materials, including for any direct, or any indirect,
38
-- special, incidental, or consequential loss or damage
39
-- (including loss of data, profits, goodwill, or any type of
40
-- loss or damage suffered as a result of any action brought
41
-- by a third party) even if such damage or loss was
42
-- reasonably foreseeable or Xilinx had been advised of the
43
-- possibility of the same.
44
--
45
-- CRITICAL APPLICATIONS
46
-- Xilinx products are not designed or intended to be fail-
47
-- safe, or for use in any application requiring fail-safe
48
-- performance, such as life-support or safety devices or
49
-- systems, Class III medical devices, nuclear facilities,
50
-- applications related to the deployment of airbags, or any
51
-- other applications that could lead to death, personal
52
-- injury, or severe property or environmental damage
53
-- (individually and collectively, "Critical
54
-- Applications"). Customer assumes the sole risk and
55
-- liability of any use of Xilinx products in Critical
56
-- Applications, subject only to applicable laws and
57
-- regulations governing limitations on product liability.
58
--
59
-- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
60
-- PART OF THIS FILE AT ALL TIMES.
61
 
62
--------------------------------------------------------------------------------
63
--
64
-- Filename: DP_RAM_XILINX_MASK_synth.vhd
65
--
66
-- Description:
67
--  Synthesizable Testbench
68
--------------------------------------------------------------------------------
69
-- Author: IP Solutions Division
70
--
71
-- History: Sep 12, 2011 - First Release
72
--------------------------------------------------------------------------------
73
--
74
--------------------------------------------------------------------------------
75
-- Library Declarations
76
--------------------------------------------------------------------------------
77
 
78
LIBRARY IEEE;
79
USE IEEE.STD_LOGIC_1164.ALL;
80
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
81
USE IEEE.STD_LOGIC_ARITH.ALL;
82
USE IEEE.NUMERIC_STD.ALL;
83
USE IEEE.STD_LOGIC_MISC.ALL;
84
 
85
LIBRARY STD;
86
USE STD.TEXTIO.ALL;
87
 
88
--LIBRARY unisim;
89
--USE unisim.vcomponents.ALL;
90
 
91
LIBRARY work;
92
USE work.ALL;
93
USE work.BMG_TB_PKG.ALL;
94
 
95
ENTITY DP_RAM_XILINX_MASK_synth IS
96
PORT(
97
        CLK_IN     : IN  STD_LOGIC;
98
        CLKB_IN     : IN  STD_LOGIC;
99
    RESET_IN   : IN  STD_LOGIC;
100
    STATUS     : OUT STD_LOGIC_VECTOR(8 DOWNTO 0) := (OTHERS => '0')   --ERROR STATUS OUT OF FPGA
101
    );
102
END ENTITY;
103
 
104
ARCHITECTURE DP_RAM_XILINX_MASK_synth_ARCH OF DP_RAM_XILINX_MASK_synth IS
105
 
106
 
107
COMPONENT DP_RAM_XILINX_MASK_exdes
108
  PORT (
109
      --Inputs - Port A
110
    WEA            : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
111
    ADDRA          : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
112
    DINA           : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
113
    DOUTA          : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
114
    CLKA       : IN STD_LOGIC;
115
 
116
      --Inputs - Port B
117
    ENB            : IN STD_LOGIC;  --opt port
118
    WEB            : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
119
    ADDRB          : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
120
    DINB           : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
121
    DOUTB          : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
122
    CLKB           : IN STD_LOGIC
123
 
124
  );
125
 
126
END COMPONENT;
127
 
128
 
129
  SIGNAL CLKA: STD_LOGIC := '0';
130
  SIGNAL RSTA: STD_LOGIC := '0';
131
  SIGNAL WEA: STD_LOGIC_VECTOR(0 DOWNTO 0) := (OTHERS => '0');
132
  SIGNAL WEA_R: STD_LOGIC_VECTOR(0 DOWNTO 0) := (OTHERS => '0');
133
  SIGNAL ADDRA: STD_LOGIC_VECTOR(7 DOWNTO 0) := (OTHERS => '0');
134
  SIGNAL ADDRA_R: STD_LOGIC_VECTOR(7 DOWNTO 0) := (OTHERS => '0');
135
  SIGNAL DINA: STD_LOGIC_VECTOR(3 DOWNTO 0) := (OTHERS => '0');
136
  SIGNAL DINA_R: STD_LOGIC_VECTOR(3 DOWNTO 0) := (OTHERS => '0');
137
  SIGNAL DOUTA: STD_LOGIC_VECTOR(3 DOWNTO 0);
138
  SIGNAL CLKB: STD_LOGIC := '0';
139
  SIGNAL RSTB: STD_LOGIC := '0';
140
  SIGNAL ENB: STD_LOGIC := '0';
141
  SIGNAL ENB_R: STD_LOGIC := '0';
142
 
143
  SIGNAL WEB: STD_LOGIC_VECTOR(0 DOWNTO 0) := (OTHERS => '0');
144
  SIGNAL WEB_R: STD_LOGIC_VECTOR(0 DOWNTO 0) := (OTHERS => '0');
145
  SIGNAL ADDRB: STD_LOGIC_VECTOR(7 DOWNTO 0) := (OTHERS => '0');
146
  SIGNAL ADDRB_R: STD_LOGIC_VECTOR(7 DOWNTO 0) := (OTHERS => '0');
147
  SIGNAL DINB: STD_LOGIC_VECTOR( 3 DOWNTO 0) := (OTHERS => '0');
148
  SIGNAL DINB_R: STD_LOGIC_VECTOR( 3 DOWNTO 0) := (OTHERS => '0');
149
  SIGNAL DOUTB: STD_LOGIC_VECTOR(3 DOWNTO 0);
150
  SIGNAL CHECKER_EN : STD_LOGIC:='0';
151
  SIGNAL CHECKER_EN_R : STD_LOGIC:='0';
152
  SIGNAL CHECK_DATA_TDP : STD_LOGIC_VECTOR(1 DOWNTO 0) := (OTHERS => '0');
153
  SIGNAL CHECKER_ENB_R : STD_LOGIC :=  '0';
154
  SIGNAL STIMULUS_FLOW : STD_LOGIC_VECTOR(22 DOWNTO 0) := (OTHERS =>'0');
155
  SIGNAL clk_in_i: STD_LOGIC;
156
 
157
  SIGNAL RESET_SYNC_R1 : STD_LOGIC:='1';
158
  SIGNAL RESET_SYNC_R2 : STD_LOGIC:='1';
159
  SIGNAL RESET_SYNC_R3 : STD_LOGIC:='1';
160
 
161
  SIGNAL clkb_in_i: STD_LOGIC;
162
  SIGNAL RESETB_SYNC_R1 : STD_LOGIC := '1';
163
  SIGNAL RESETB_SYNC_R2 : STD_LOGIC := '1';
164
  SIGNAL RESETB_SYNC_R3 : STD_LOGIC := '1';
165
  SIGNAL ITER_R0 : STD_LOGIC := '0';
166
  SIGNAL ITER_R1 : STD_LOGIC := '0';
167
  SIGNAL ITER_R2 : STD_LOGIC := '0';
168
 
169
  SIGNAL ISSUE_FLAG : STD_LOGIC_VECTOR(7 DOWNTO 0) := (OTHERS => '0');
170
  SIGNAL ISSUE_FLAG_STATUS : STD_LOGIC_VECTOR(7 DOWNTO 0) := (OTHERS => '0');
171
 
172
  BEGIN
173
 
174
--  clk_buf: bufg
175
--    PORT map(
176
--      i => CLK_IN,
177
--      o => clk_in_i
178
--    );
179
   clk_in_i <= CLK_IN;
180
   CLKA <= clk_in_i;
181
 
182
--  clkb_buf: bufg
183
--    PORT map(
184
--      i => CLKB_IN,
185
--      o => clkb_in_i
186
--    );
187
   clkb_in_i <= CLKB_IN;
188
   CLKB <= clkb_in_i;
189
   RSTA <= RESET_SYNC_R3 AFTER 50 ns;
190
 
191
 
192
   PROCESS(clk_in_i)
193
   BEGIN
194
      IF(RISING_EDGE(clk_in_i)) THEN
195
                 RESET_SYNC_R1 <= RESET_IN;
196
                 RESET_SYNC_R2 <= RESET_SYNC_R1;
197
                 RESET_SYNC_R3 <= RESET_SYNC_R2;
198
          END IF;
199
   END PROCESS;
200
 
201
   RSTB <= RESETB_SYNC_R3 AFTER 50 ns;
202
 
203
   PROCESS(clkb_in_i)
204
   BEGIN
205
      IF(RISING_EDGE(clkb_in_i)) THEN
206
                 RESETB_SYNC_R1 <= RESET_IN;
207
                 RESETB_SYNC_R2 <= RESETB_SYNC_R1;
208
                 RESETB_SYNC_R3 <= RESETB_SYNC_R2;
209
          END IF;
210
   END PROCESS;
211
 
212
PROCESS(CLKA)
213
BEGIN
214
  IF(RISING_EDGE(CLKA)) THEN
215
    IF(RESET_SYNC_R3='1') THEN
216
        ISSUE_FLAG_STATUS<= (OTHERS => '0');
217
          ELSE
218
        ISSUE_FLAG_STATUS <= ISSUE_FLAG_STATUS OR ISSUE_FLAG;
219
   END IF;
220
  END IF;
221
END PROCESS;
222
 
223
STATUS(7 DOWNTO 0) <= ISSUE_FLAG_STATUS;
224
 
225
 
226
   BMG_DATA_CHECKER_INST_A: ENTITY work.CHECKER
227
      GENERIC MAP (
228
         WRITE_WIDTH => 4,
229
                 READ_WIDTH  => 4      )
230
      PORT MAP (
231
         CLK     => CLKA,
232
         RST     => RSTA,
233
         EN      => CHECKER_EN_R,
234
         DATA_IN => DOUTA,
235
         STATUS  => ISSUE_FLAG(0)
236
           );
237
   PROCESS(CLKA)
238
   BEGIN
239
      IF(RISING_EDGE(CLKA)) THEN
240
         IF(RSTA='1') THEN
241
                    CHECKER_EN_R <= '0';
242
             ELSE
243
                    CHECKER_EN_R <= CHECK_DATA_TDP(0) AFTER 50 ns;
244
         END IF;
245
      END IF;
246
   END PROCESS;
247
 
248
   BMG_DATA_CHECKER_INST_B: ENTITY work.CHECKER
249
      GENERIC MAP (
250
         WRITE_WIDTH => 4,
251
                 READ_WIDTH  => 4      )
252
      PORT MAP (
253
         CLK     => CLKB,
254
         RST     => RSTB,
255
         EN      => CHECKER_ENB_R,
256
         DATA_IN => DOUTB,
257
         STATUS  => ISSUE_FLAG(1)
258
           );
259
   PROCESS(CLKB)
260
   BEGIN
261
      IF(RISING_EDGE(CLKB)) THEN
262
         IF(RSTB='1') THEN
263
                    CHECKER_ENB_R <= '0';
264
             ELSE
265
                    CHECKER_ENB_R <= CHECK_DATA_TDP(1) AFTER 50 ns;
266
         END IF;
267
      END IF;
268
   END PROCESS;
269
 
270
 
271
 
272
    BMG_STIM_GEN_INST:ENTITY work.BMG_STIM_GEN
273
      PORT MAP(
274
        CLKA => CLKA,
275
        CLKB => CLKB,
276
        TB_RST => RSTA,
277
        ADDRA  => ADDRA,
278
        DINA => DINA,
279
        WEA => WEA,
280
        WEB => WEB,
281
        ADDRB => ADDRB,
282
        DINB => DINB,
283
        ENB => ENB,
284
        CHECK_DATA => CHECK_DATA_TDP
285
      );
286
 
287
      PROCESS(CLKA)
288
      BEGIN
289
        IF(RISING_EDGE(CLKA)) THEN
290
                  IF(RESET_SYNC_R3='1') THEN
291
                        STATUS(8) <= '0';
292
                        iter_r2 <= '0';
293
                        iter_r1 <= '0';
294
                        iter_r0 <= '0';
295
                  ELSE
296
                        STATUS(8) <= iter_r2;
297
                        iter_r2 <= iter_r1;
298
                        iter_r1 <= iter_r0;
299
                        iter_r0 <= STIMULUS_FLOW(8);
300
              END IF;
301
            END IF;
302
      END PROCESS;
303
 
304
 
305
      PROCESS(CLKA)
306
      BEGIN
307
        IF(RISING_EDGE(CLKA)) THEN
308
                  IF(RESET_SYNC_R3='1') THEN
309
                      STIMULUS_FLOW <= (OTHERS => '0');
310
           ELSIF(WEA(0)='1') THEN
311
                      STIMULUS_FLOW <= STIMULUS_FLOW+1;
312
         END IF;
313
            END IF;
314
      END PROCESS;
315
 
316
 
317
      PROCESS(CLKA)
318
      BEGIN
319
        IF(RISING_EDGE(CLKA)) THEN
320
                  IF(RESET_SYNC_R3='1') THEN
321
            WEA_R  <= (OTHERS=>'0') AFTER 50 ns;
322
            DINA_R <= (OTHERS=>'0') AFTER 50 ns;
323
            ENB_R <= '0' AFTER 50 ns;
324
 
325
            WEB_R <= (OTHERS=>'0') AFTER 50 ns;
326
            DINB_R <= (OTHERS=>'0') AFTER 50 ns;
327
 
328
 
329
           ELSE
330
            WEA_R  <= WEA AFTER 50 ns;
331
            DINA_R <= DINA AFTER 50 ns;
332
          ENB_R <= ENB AFTER 50 ns;
333
 
334
            WEB_R <= WEB AFTER 50 ns;
335
            DINB_R <= DINB AFTER 50 ns;
336
 
337
         END IF;
338
            END IF;
339
      END PROCESS;
340
 
341
 
342
      PROCESS(CLKA)
343
      BEGIN
344
        IF(RISING_EDGE(CLKA)) THEN
345
                  IF(RESET_SYNC_R3='1') THEN
346
            ADDRA_R <= (OTHERS=> '0') AFTER 50 ns;
347
            ADDRB_R <= (OTHERS=> '0') AFTER 50 ns;
348
          ELSE
349
            ADDRA_R <= ADDRA AFTER 50 ns;
350
            ADDRB_R <= ADDRB AFTER 50 ns;
351
          END IF;
352
            END IF;
353
      END PROCESS;
354
 
355
 
356
    BMG_PORT: DP_RAM_XILINX_MASK_exdes PORT MAP (
357
      --Port A
358
      WEA        => WEA_R,
359
      ADDRA      => ADDRA_R,
360
      DINA       => DINA_R,
361
      DOUTA      => DOUTA,
362
      CLKA       => CLKA,
363
      --Port B
364
      ENB        => ENB_R,
365
 
366
      WEB        => WEB_R,
367
      ADDRB      => ADDRB_R,
368
 
369
      DINB       => DINB_R,
370
      DOUTB      => DOUTB,
371
      CLKB       => CLKB
372
 
373
    );
374
END ARCHITECTURE;

powered by: WebSVN 2.1.0

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