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

Subversion Repositories npigrctrl

[/] [npigrctrl/] [trunk/] [npi_vga_v1_00_b/] [hdl/] [vhdl/] [user_logic.vhd] - Blame information for rev 7

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

Line No. Rev Author Line
1 2 slavek
------------------------------------------------------------------------------
2
-- user_logic.vhd - entity/architecture pair
3
------------------------------------------------------------------------------
4
--
5
-- ***************************************************************************
6
-- ** Copyright (c) 1995-2007 Xilinx, Inc.  All rights reserved.            **
7
-- **                                                                       **
8
-- ** Xilinx, Inc.                                                          **
9
-- ** XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"         **
10
-- ** AS A COURTESY TO YOU, SOLELY FOR USE IN DEVELOPING PROGRAMS AND       **
11
-- ** SOLUTIONS FOR XILINX DEVICES.  BY PROVIDING THIS DESIGN, CODE,        **
12
-- ** OR INFORMATION AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE,        **
13
-- ** APPLICATION OR STANDARD, XILINX IS MAKING NO REPRESENTATION           **
14
-- ** THAT THIS IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,     **
15
-- ** AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE      **
16
-- ** FOR YOUR IMPLEMENTATION.  XILINX EXPRESSLY DISCLAIMS ANY              **
17
-- ** WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE               **
18
-- ** IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR        **
19
-- ** REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF       **
20
-- ** INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS       **
21
-- ** FOR A PARTICULAR PURPOSE.                                             **
22
-- **                                                                       **
23
-- ***************************************************************************
24
--
25
------------------------------------------------------------------------------
26
-- Filename:          user_logic.vhd
27
-- Version:           1.00.a
28
-- Description:       User logic.
29
-- Date:              Sun Apr 13 14:29:06 2008 (by Create and Import Peripheral Wizard)
30
-- VHDL Standard:     VHDL'93
31
 
32
library ieee;
33
use ieee.std_logic_1164.all;
34
use ieee.std_logic_arith.all;
35
use ieee.std_logic_unsigned.all;
36
 
37
entity user_logic is
38
generic (
39
   C_SLV_AWIDTH            : integer := 32;
40
   C_SLV_DWIDTH            : integer := 32;
41
   C_NUM_MEM               : integer := 2);
42
port (
43
   GR_DATA_O               : out    std_logic_vector(31 downto 0);
44
   GR_DATA_I0              : in     std_logic_vector(31 downto 0);
45
   GR_DATA_I1              : in     std_logic_vector(31 downto 0);
46
   GR_ADDR                 : out    std_logic_vector(15 downto 2);
47
   GR_RNW                  : out    std_logic;
48
   GR_CS                   : out    std_logic_vector(1 downto 0);
49
   Bus2IP_Clk              : in  std_logic;
50
   Bus2IP_Reset            : in  std_logic;
51
   Bus2IP_Addr             : in  std_logic_vector(0 to C_SLV_AWIDTH-1);
52
   Bus2IP_CS               : in  std_logic_vector(0 to C_NUM_MEM-1);
53
   Bus2IP_RNW              : in  std_logic;
54
   Bus2IP_Data             : in  std_logic_vector(0 to C_SLV_DWIDTH-1);
55
   Bus2IP_BE               : in  std_logic_vector(0 to C_SLV_DWIDTH/8-1);
56
   Bus2IP_RdCE             : in  std_logic_vector(0 to C_NUM_MEM-1);
57
   Bus2IP_WrCE             : in  std_logic_vector(0 to C_NUM_MEM-1);
58
   IP2Bus_Data             : out std_logic_vector(0 to C_SLV_DWIDTH-1);
59
   IP2Bus_RdAck            : out std_logic;
60
   IP2Bus_WrAck            : out std_logic;
61
   IP2Bus_Error            : out std_logic);
62
 
63
attribute SIGIS : string;
64
attribute SIGIS of Bus2IP_Clk    : signal is "CLK";
65
attribute SIGIS of Bus2IP_Reset  : signal is "RST";
66
 
67
end entity user_logic;
68
 
69
------------------------------------------------------------------------------
70
-- Architecture section
71
------------------------------------------------------------------------------
72
 
73
architecture IMP of user_logic is
74
 
75
signal mem_select             : std_logic_vector(0 to 1);
76
signal mem_read_enable        : std_logic;
77
signal mem_read_enable_dly1   : std_logic;
78
signal mem_read_req           : std_logic;
79
signal mem_ip2bus_data        : std_logic_vector(0 to C_SLV_DWIDTH-1);
80
signal mem_read_ack_dly1      : std_logic;
81
signal mem_read_ack           : std_logic;
82
signal mem_write_ack          : std_logic;
83
signal gr_cs_i                : std_logic_vector(1 downto 0);
84
signal gr_rnw_i               : std_logic;
85
 
86
begin
87
 
88
  mem_select      <= Bus2IP_CS;
89
  mem_read_enable <= ( Bus2IP_CS(0) or Bus2IP_CS(1) ) and Bus2IP_RNW;
90
  mem_read_ack    <= mem_read_ack_dly1;
91
  mem_write_ack   <= ( Bus2IP_CS(0) or Bus2IP_CS(1) ) and not(Bus2IP_RNW);
92
 
93
  -- implement single clock wide read request
94
  mem_read_req    <= mem_read_enable and not(mem_read_enable_dly1);
95
  BRAM_RD_REQ_PROC : process( Bus2IP_Clk ) is
96
  begin
97
 
98
    if ( Bus2IP_Clk'event and Bus2IP_Clk = '1' ) then
99
      if ( Bus2IP_Reset = '1' ) then
100
        mem_read_enable_dly1 <= '0';
101
      else
102
        mem_read_enable_dly1 <= mem_read_enable;
103
      end if;
104
    end if;
105
 
106
  end process BRAM_RD_REQ_PROC;
107
 
108
  -- this process generates the read acknowledge 1 clock after read enable
109
  -- is presented to the BRAM block. The BRAM block has a 1 clock delay
110
  -- from read enable to data out.
111
  BRAM_RD_ACK_PROC : process( Bus2IP_Clk ) is
112
  begin
113
 
114
    if ( Bus2IP_Clk'event and Bus2IP_Clk = '1' ) then
115
      if ( Bus2IP_Reset = '1' ) then
116
        mem_read_ack_dly1 <= '0';
117
      else
118
        mem_read_ack_dly1 <= mem_read_req;
119
      end if;
120
    end if;
121
 
122
  end process BRAM_RD_ACK_PROC;
123
 
124
PROCESS(Bus2IP_Clk)
125
BEGIN
126
   If Bus2IP_Clk'event And Bus2IP_Clk = '1' Then
127
      If Bus2IP_Reset = '1' Then
128
         gr_cs_i <= (Others => '0');
129
         gr_rnw_i <= '0';
130
      Else
131
         If mem_write_ack = '1' Then
132
            gr_cs_i <= Bus2IP_CS;
133
            gr_rnw_i <= '0';
134
            gr_data_o <= Bus2IP_Data;
135
            gr_addr <= Bus2IP_Addr(16 to 29);
136
         ElsIf mem_read_enable = '1' Then
137
            gr_cs_i <= Bus2IP_CS;
138
            gr_rnw_i <= '1';
139
            gr_addr <= Bus2IP_Addr(16 to 29);
140
         Else
141
            gr_cs_i <= (Others => '0');
142
         End If;
143
      End If;
144
   End If;
145
END PROCESS;
146
 
147
GR_CS <= gr_cs_i;
148
GR_RNW <= gr_rnw_i;
149
 
150
mem_ip2bus_data <= GR_DATA_I0 When Bus2IP_CS(0) = '1' Else
151
                   GR_DATA_I1 When Bus2IP_CS(1) = '1' Else
152
                   (Others => '0');
153
 
154
IP2Bus_Data  <= (others => '0');--mem_ip2bus_data when mem_read_ack = '1' else
155
 
156
 
157
 IP2Bus_WrAck <= mem_write_ack;
158
  IP2Bus_RdAck <= mem_read_ack;
159
  IP2Bus_Error <= '0';
160
 
161
end IMP;

powered by: WebSVN 2.1.0

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