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

Subversion Repositories xmatchpro

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 9 eejlny
--------------------------------------------------------------------------------
2
--
3
-- FIFO Generator Core Demo Testbench 
4
--
5
--------------------------------------------------------------------------------
6
--
7
-- (c) Copyright 2009 - 2010 Xilinx, Inc. All rights reserved.
8
-- 
9
-- This file contains confidential and proprietary information
10
-- of Xilinx, Inc. and is protected under U.S. and
11
-- international copyright and other intellectual property
12
-- laws.
13
-- 
14
-- DISCLAIMER
15
-- This disclaimer is not a license and does not grant any
16
-- rights to the materials distributed herewith. Except as
17
-- otherwise provided in a valid license issued to you by
18
-- Xilinx, and to the maximum extent permitted by applicable
19
-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
20
-- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES
21
-- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
22
-- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
23
-- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
24
-- (2) Xilinx shall not be liable (whether in contract or tort,
25
-- including negligence, or under any other theory of
26
-- liability) for any loss or damage of any kind or nature
27
-- related to, arising under or in connection with these
28
-- materials, including for any direct, or any indirect,
29
-- special, incidental, or consequential loss or damage
30
-- (including loss of data, profits, goodwill, or any type of
31
-- loss or damage suffered as a result of any action brought
32
-- by a third party) even if such damage or loss was
33
-- reasonably foreseeable or Xilinx had been advised of the
34
-- possibility of the same.
35
-- 
36
-- CRITICAL APPLICATIONS
37
-- Xilinx products are not designed or intended to be fail-
38
-- safe, or for use in any application requiring fail-safe
39
-- performance, such as life-support or safety devices or
40
-- systems, Class III medical devices, nuclear facilities,
41
-- applications related to the deployment of airbags, or any
42
-- other applications that could lead to death, personal
43
-- injury, or severe property or environmental damage
44
-- (individually and collectively, "Critical
45
-- Applications"). Customer assumes the sole risk and
46
-- liability of any use of Xilinx products in Critical
47
-- Applications, subject only to applicable laws and
48
-- regulations governing limitations on product liability.
49
-- 
50
-- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
51
-- PART OF THIS FILE AT ALL TIMES.
52
--------------------------------------------------------------------------------
53
--
54
-- Filename: fifo_32x512_synth.vhd
55
--
56
-- Description:
57
--   This is the demo testbench for fifo_generator core.
58
--
59
--------------------------------------------------------------------------------
60
-- Library Declarations
61
--------------------------------------------------------------------------------
62
 
63
 
64
LIBRARY ieee;
65
USE ieee.STD_LOGIC_1164.ALL;
66
USE ieee.STD_LOGIC_unsigned.ALL;
67
USE IEEE.STD_LOGIC_arith.ALL;
68
USE ieee.numeric_std.ALL;
69
USE ieee.STD_LOGIC_misc.ALL;
70
 
71
LIBRARY std;
72
USE std.textio.ALL;
73
 
74
LIBRARY work;
75
USE work.fifo_32x512_pkg.ALL;
76
 
77
--------------------------------------------------------------------------------
78
-- Entity Declaration
79
--------------------------------------------------------------------------------
80
ENTITY fifo_32x512_synth IS
81
  GENERIC(
82
           FREEZEON_ERROR : INTEGER := 0;
83
           TB_STOP_CNT    : INTEGER := 0;
84
           TB_SEED        : INTEGER := 1
85
         );
86
  PORT(
87
        WR_CLK     :  IN  STD_LOGIC;
88
        RD_CLK     :  IN  STD_LOGIC;
89
        RESET      :  IN  STD_LOGIC;
90
        SIM_DONE   :  OUT STD_LOGIC;
91
        STATUS     :  OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
92
      );
93
END ENTITY;
94
 
95
ARCHITECTURE simulation_arch OF fifo_32x512_synth IS
96
 
97
    -- FIFO interface signal declarations
98
    SIGNAL wr_clk_i                       :   STD_LOGIC;
99
    SIGNAL rd_clk_i                       :   STD_LOGIC;
100
    SIGNAL almost_full                    :   STD_LOGIC;
101
    SIGNAL rst                            :   STD_LOGIC;
102
    SIGNAL wr_en                          :   STD_LOGIC;
103
    SIGNAL rd_en                          :   STD_LOGIC;
104
    SIGNAL din                            :   STD_LOGIC_VECTOR(32-1 DOWNTO 0);
105
    SIGNAL dout                           :   STD_LOGIC_VECTOR(32-1 DOWNTO 0);
106
    SIGNAL full                           :   STD_LOGIC;
107
    SIGNAL empty                          :   STD_LOGIC;
108
   -- TB Signals
109
    SIGNAL wr_data                        :   STD_LOGIC_VECTOR(32-1 DOWNTO 0);
110
    SIGNAL dout_i                         :   STD_LOGIC_VECTOR(32-1 DOWNTO 0);
111
    SIGNAL wr_en_i                        :   STD_LOGIC := '0';
112
    SIGNAL rd_en_i                        :   STD_LOGIC := '0';
113
    SIGNAL full_i                         :   STD_LOGIC := '0';
114
    SIGNAL empty_i                        :   STD_LOGIC := '0';
115
    SIGNAL almost_full_i                  :   STD_LOGIC := '0';
116
    SIGNAL almost_empty_i                 :   STD_LOGIC := '0';
117
    SIGNAL prc_we_i                       :   STD_LOGIC := '0';
118
    SIGNAL prc_re_i                       :   STD_LOGIC := '0';
119
    SIGNAL dout_chk_i                     :   STD_LOGIC := '0';
120
    SIGNAL rst_int_rd                     :   STD_LOGIC := '0';
121
    SIGNAL rst_int_wr                     :   STD_LOGIC := '0';
122
    SIGNAL rst_s_wr1                      :   STD_LOGIC := '0';
123
    SIGNAL rst_s_wr2                      :   STD_LOGIC := '0';
124
    SIGNAL rst_gen_rd                     :   STD_LOGIC_VECTOR(7 DOWNTO 0) := (OTHERS => '0');
125
    SIGNAL rst_s_wr3                      :   STD_LOGIC := '0';
126
    SIGNAL rst_s_rd                       :   STD_LOGIC := '0';
127
    SIGNAL reset_en                       :   STD_LOGIC := '0';
128
    SIGNAL rst_async_wr1                  :   STD_LOGIC := '0';
129
    SIGNAL rst_async_wr2                  :   STD_LOGIC := '0';
130
    SIGNAL rst_async_wr3                  :   STD_LOGIC := '0';
131
    SIGNAL rst_async_rd1                  :   STD_LOGIC := '0';
132
    SIGNAL rst_async_rd2                  :   STD_LOGIC := '0';
133
    SIGNAL rst_async_rd3                  :   STD_LOGIC := '0';
134
 
135
 
136
 BEGIN
137
 
138
   ---- Reset generation logic -----
139
   rst_int_wr          <= rst_async_wr3 OR rst_s_wr3;
140
   rst_int_rd          <= rst_async_rd3 OR rst_s_rd;
141
 
142
   --Testbench reset synchronization
143
   PROCESS(rd_clk_i,RESET)
144
   BEGIN
145
     IF(RESET = '1') THEN
146
       rst_async_rd1    <= '1';
147
       rst_async_rd2    <= '1';
148
       rst_async_rd3    <= '1';
149
     ELSIF(rd_clk_i'event AND rd_clk_i='1') THEN
150
       rst_async_rd1    <= RESET;
151
       rst_async_rd2    <= rst_async_rd1;
152
       rst_async_rd3    <= rst_async_rd2;
153
     END IF;
154
   END PROCESS;
155
 
156
   PROCESS(wr_clk_i,RESET)
157
   BEGIN
158
     IF(RESET = '1') THEN
159
       rst_async_wr1  <= '1';
160
       rst_async_wr2  <= '1';
161
       rst_async_wr3  <= '1';
162
     ELSIF(wr_clk_i'event AND wr_clk_i='1') THEN
163
       rst_async_wr1  <= RESET;
164
       rst_async_wr2  <= rst_async_wr1;
165
       rst_async_wr3  <= rst_async_wr2;
166
     END IF;
167
   END PROCESS;
168
 
169
   --Soft reset for core and testbench
170
   PROCESS(rd_clk_i)
171
   BEGIN
172
     IF(rd_clk_i'event AND rd_clk_i='1') THEN
173
       rst_gen_rd      <= rst_gen_rd + "1";
174
       IF(reset_en = '1' AND AND_REDUCE(rst_gen_rd) = '1') THEN
175
         rst_s_rd      <= '1';
176
         assert false
177
         report "Reset applied..Memory Collision checks are not valid"
178
         severity note;
179
       ELSE
180
         IF(AND_REDUCE(rst_gen_rd)  = '1' AND rst_s_rd = '1') THEN
181
           rst_s_rd    <= '0';
182
         END IF;
183
       END IF;
184
     END IF;
185
   END PROCESS;
186
 
187
   PROCESS(wr_clk_i)
188
   BEGIN
189
       IF(wr_clk_i'event AND wr_clk_i='1') THEN
190
         rst_s_wr1   <= rst_s_rd;
191
         rst_s_wr2   <= rst_s_wr1;
192
         rst_s_wr3   <= rst_s_wr2;
193
         IF(rst_s_wr3 = '1' AND rst_s_wr2 = '0') THEN
194
           assert false
195
           report "Reset removed..Memory Collision checks are valid"
196
           severity note;
197
         END IF;
198
       END IF;
199
   END PROCESS;
200
   ------------------
201
 
202
   ---- Clock buffers for testbench ----
203
  wr_clk_i <= WR_CLK;
204
  rd_clk_i <= RD_CLK;
205
   ------------------
206
 
207
    rst                       <=   RESET OR rst_s_rd AFTER 12 ns;
208
    din                       <=   wr_data;
209
    dout_i                    <=   dout;
210
    wr_en                     <=   wr_en_i;
211
    rd_en                     <=   rd_en_i;
212
    full_i                    <=   full;
213
    empty_i                   <=   empty;
214
    almost_full_i             <=   almost_full;
215
 
216
    fg_dg_nv: fifo_32x512_dgen
217
      GENERIC MAP (
218
                C_DIN_WIDTH       => 32,
219
                C_DOUT_WIDTH      => 32,
220
                TB_SEED           => TB_SEED,
221
                C_CH_TYPE         => 0
222
                 )
223
      PORT MAP (  -- Write Port
224
                RESET             => rst_int_wr,
225
                WR_CLK            => wr_clk_i,
226
                PRC_WR_EN         => prc_we_i,
227
                FULL              => full_i,
228
                WR_EN             => wr_en_i,
229
                WR_DATA           => wr_data
230
               );
231
 
232
   fg_dv_nv: fifo_32x512_dverif
233
    GENERIC MAP (
234
               C_DOUT_WIDTH       => 32,
235
               C_DIN_WIDTH        => 32,
236
               C_USE_EMBEDDED_REG => 0,
237
               TB_SEED            => TB_SEED,
238
               C_CH_TYPE          => 0
239
                )
240
     PORT MAP(
241
              RESET               => rst_int_rd,
242
              RD_CLK              => rd_clk_i,
243
              PRC_RD_EN           => prc_re_i,
244
              RD_EN               => rd_en_i,
245
              EMPTY               => empty_i,
246
              DATA_OUT            => dout_i,
247
              DOUT_CHK            => dout_chk_i
248
            );
249
 
250
    fg_pc_nv: fifo_32x512_pctrl
251
    GENERIC MAP (
252
              AXI_CHANNEL         => "Native",
253
              C_APPLICATION_TYPE  => 0,
254
              C_DOUT_WIDTH        => 32,
255
              C_DIN_WIDTH         => 32,
256
              C_WR_PNTR_WIDTH     => 20,
257
              C_RD_PNTR_WIDTH     => 20,
258
              C_CH_TYPE           => 0,
259
              FREEZEON_ERROR      => FREEZEON_ERROR,
260
              TB_SEED             => TB_SEED,
261
              TB_STOP_CNT         => TB_STOP_CNT
262
                )
263
     PORT MAP(
264
              RESET_WR            => rst_int_wr,
265
              RESET_RD            => rst_int_rd,
266
              RESET_EN            => reset_en,
267
              WR_CLK              => wr_clk_i,
268
              RD_CLK              => rd_clk_i,
269
              PRC_WR_EN           => prc_we_i,
270
              PRC_RD_EN           => prc_re_i,
271
              FULL                => full_i,
272
              ALMOST_FULL         => almost_full_i,
273
              ALMOST_EMPTY        => almost_empty_i,
274
              DOUT_CHK            => dout_chk_i,
275
              EMPTY               => empty_i,
276
              DATA_IN             => wr_data,
277
              DATA_OUT            => dout,
278
              SIM_DONE            => SIM_DONE,
279
              STATUS              => STATUS
280
            );
281
 
282
 
283
 
284
 
285
 
286
  fifo_32x512_inst : fifo_32x512_exdes
287
    PORT MAP (
288
           WR_CLK                    => wr_clk_i,
289
           RD_CLK                    => rd_clk_i,
290
           ALMOST_FULL               => almost_full,
291
           RST                       => rst,
292
           WR_EN                     => wr_en,
293
           RD_EN                     => rd_en,
294
           DIN                       => din,
295
           DOUT                      => dout,
296
           FULL                      => full,
297
           EMPTY                     => empty);
298
 
299
END ARCHITECTURE;

powered by: WebSVN 2.1.0

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