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

Subversion Repositories pcie_mini_axi4s_wb

[/] [pcie_mini_axi4s_wb/] [trunk/] [rtl/] [example_device_top.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 buenos
----------------------------------------------------------------------------------
2
-- Project name: pcie_mini_axi4s_wb, device top level file, EXAMPLE DESIGN
3
-- This is an example device top level file, where the pcie_mini_axi4s_wb is instantiated.
4
-- Functions: PCIe endpoint, a register block, 2 LED outputs.
5
--
6
-- YOU don't need this file in your own custom design !!! This file is only demonstration.
7
--
8
-- Engineer: Istvan Nagy, buenoshun@gmail.com
9
-- 
10
-- Create Date:    10/10/2019
11
-- Modify date:    10/10/2019
12
-- Design Name:    example_device_top encapsulating pcie_mini_axi4s_wb
13
-- Version:        1.0
14
-- Tool versions: Vivado 2019.1
15
--
16
-- Target Devices: Xilinx usc+ FPGAs. 
17
--------------------------------------------------------------------------------
18
 
19
library IEEE;
20
use IEEE.STD_LOGIC_1164.ALL;
21
use IEEE.STD_LOGIC_ARITH.ALL;
22
use IEEE.STD_LOGIC_UNSIGNED.ALL;
23
--entity header ----------------------------------------------------------------
24
entity example_device_top is
25
Port (
26
                         pci_exp_txp             : out std_logic;
27
                         pci_exp_txn             : out std_logic;
28
                         pci_exp_rxp             : in  std_logic;
29
                         pci_exp_rxn             : in  std_logic;
30
                         sys_clk_n                 : in  std_logic;
31
                         sys_clk_p                 : in  std_logic;
32
                         sys_reset_n             : in  std_logic;
33
                         debug_pins            : out std_logic_vector(31 downto 0);
34
                         scan_pins            : in std_logic_vector(31 downto 0);
35
                         led_out_1             : out std_logic;
36
                         led_out_2             : out std_logic
37
);
38
end example_device_top;
39
--architecture start ------------------------------------------------------------
40
architecture Behavioral of example_device_top is
41
 
42
-- INTERNAL SIGNALS -------------------------------------------------------------
43
        SIGNAL dummy0: std_logic;
44
        SIGNAL dummy1: std_logic_VECTOR(6 DOWNTO 0);
45
        SIGNAL           pcie_bar0_wb_data_o : std_logic_vector(31 downto 0);
46
        SIGNAL           pcie_bar0_wb_data_i : std_logic_vector(31 downto 0);
47
        SIGNAL           pcie_bar0_wb_addr_o : std_logic_vector(27 downto 0);
48
        SIGNAL           pcie_bar0_wb_cyc_o : std_logic;
49
        SIGNAL           pcie_bar0_wb_stb_o : std_logic;
50
        SIGNAL           pcie_bar0_wb_wr_o : std_logic;
51
        SIGNAL           pcie_bar0_wb_ack_i : std_logic;
52
        SIGNAL           pcie_bar0_wb_clk_o : std_logic; --62.5MHz                              
53
        SIGNAL           pcie_bar0_wb_sel_o : std_logic_vector(3 downto 0);
54
        SIGNAL           pcie_irq : std_logic;
55
        SIGNAL           pcie_msi_enabled : std_logic;
56
        SIGNAL           pcie_resetout  : std_logic;
57
        SIGNAL           register_one : std_logic_vector(31 downto 0);
58
        SIGNAL           register_two : std_logic_vector(31 downto 0);
59
        SIGNAL           register_three : std_logic_vector(31 downto 0);
60
        SIGNAL           register_four : std_logic_vector(31 downto 0);
61
        SIGNAL           regxx_scratchpad : std_logic_vector(31 downto 0);
62
        SIGNAL           scan_pins_latched1 : std_logic_vector(31 downto 0);
63
        SIGNAL           scan_pins_latched2 : std_logic_vector(31 downto 0);
64
        SIGNAL     wb_config_state :  std_logic_vector(7 downto 0);
65
        SIGNAL     ACK_copy : std_logic;
66
 
67
 
68
 
69
--------- COMPONENT DECLARATIONS (introducing the IPs) --------------------------
70
COMPONENT pcie_mini_axi4s_wb
71
  PORT ( --FPGA PINS(EXTERNAL):
72
                         pci_exp_txp             : out std_logic;
73
                         pci_exp_txn             : out std_logic;
74
                         pci_exp_rxp             : in  std_logic;
75
                         pci_exp_rxn             : in  std_logic;
76
                         sys_clk_n                 : in  std_logic;
77
                         sys_clk_p                 : in  std_logic;
78
                         sys_reset_n             : in  std_logic;
79
                         --ON CHIP PORTS:
80
                         --DATA BUS for BAR0 (wishbone):
81
                         pcie_bar0_wb_data_o : out std_logic_vector(31 downto 0);
82
                         pcie_bar0_wb_data_i : in std_logic_vector(31 downto 0);
83
                         pcie_bar0_wb_addr_o : out std_logic_vector(27 downto 0);
84
                         pcie_bar0_wb_cyc_o : out std_logic;
85
                         pcie_bar0_wb_stb_o : out std_logic;
86
                         pcie_bar0_wb_wr_o : out std_logic;
87
                         pcie_bar0_wb_ack_i : in std_logic;
88
                         pcie_bar0_wb_clk_o : out std_logic; --62.5MHz          
89
                         pcie_bar0_wb_sel_o : out std_logic_vector(3 downto 0);
90
                         --OTHER:
91
                         pcie_irq : in std_logic;
92
                         pcie_msi_enabled : out std_logic;      -- added to monitor if MSI interrupt is enabled
93
                         pcie_resetout  : out std_logic --active high
94
                        );
95
END COMPONENT;
96
 
97
 
98
--architecture body start -------------------------------------------------------
99
begin
100
--------- COMPONENT INSTALLATIONS (connecting the IPs to local signals) ---------
101
Inst_pcieaxiwbtop: pcie_mini_axi4s_wb
102
  PORT MAP (
103
         pci_exp_txp             =>      pci_exp_txp,
104
         pci_exp_txn             =>      pci_exp_txn,
105
     pci_exp_rxp         =>      pci_exp_rxp,
106
     pci_exp_rxn         =>      pci_exp_rxn,
107
         sys_clk_n               =>      sys_clk_n,
108
         sys_clk_p               =>      sys_clk_p,
109
         sys_reset_n             =>      sys_reset_n,
110
         pcie_bar0_wb_data_o     =>      pcie_bar0_wb_data_o,
111
         pcie_bar0_wb_data_i     =>      pcie_bar0_wb_data_i,
112
         pcie_bar0_wb_addr_o     =>      pcie_bar0_wb_addr_o,
113
         pcie_bar0_wb_cyc_o      =>      pcie_bar0_wb_cyc_o,
114
         pcie_bar0_wb_stb_o      =>      pcie_bar0_wb_stb_o,
115
         pcie_bar0_wb_wr_o       =>      pcie_bar0_wb_wr_o,
116
         pcie_bar0_wb_ack_i      =>      pcie_bar0_wb_ack_i,
117
         pcie_bar0_wb_clk_o      =>      pcie_bar0_wb_clk_o,
118
         pcie_bar0_wb_sel_o      =>      pcie_bar0_wb_sel_o,
119
         pcie_irq        =>      pcie_irq,
120
         pcie_msi_enabled        =>      pcie_msi_enabled,
121
         pcie_resetout           =>      pcie_resetout
122
  );
123
 
124
 
125
-- local Logic ------------------------------------------------------------------
126
debug_pins <= register_one; --check register content with TopJtag_Probe.
127
led_out_1 <= register_one(1);
128
led_out_2 <= register_one(2);
129
 
130
-- WISHB/SMB REGISTER SET 
131
wishbone: process (pcie_resetout , pcie_bar0_wb_clk_o) is
132
        begin
133
        if (pcie_resetout  ='0') then
134
                --DAT_R(7 downto 0) <= (others => '0'); 
135
                register_one  <=  (OTHERS => '0');
136
                register_two  <=  (OTHERS => '0');
137
                register_three <=   (OTHERS => '0');
138
                register_four <=  (OTHERS => '0');
139
                wb_config_state  <=  (OTHERS => '0');
140
                regxx_scratchpad <=  (OTHERS => '0');
141
                scan_pins_latched1 <=  (OTHERS => '0');
142
                scan_pins_latched2 <=  (OTHERS => '0');
143
                pcie_bar0_wb_data_i <= (OTHERS => '0');
144
        else
145
                if (pcie_bar0_wb_clk_o'event and pcie_bar0_wb_clk_o = '1') then
146
                  scan_pins_latched1 <= scan_pins;
147
                  scan_pins_latched2 <= scan_pins_latched1;
148
 
149
                         case ( wb_config_state ) is
150
 
151
                         --********** IDLE STATE  **********
152
                         when "00000000" =>   --state 0    
153
                                --WAIT FOR WISHBONE TRANSACTION:
154
                                pcie_bar0_wb_ack_i <= '0';
155
                                ACK_copy <= '0';
156
                                --writes:
157
                                if (pcie_bar0_wb_cyc_o = '1' and pcie_bar0_wb_wr_o = '1' and ACK_copy='0') then
158
                                        wb_config_state <= "00001001";
159
                                --reads:
160
                                elsif (pcie_bar0_wb_cyc_o = '1' and pcie_bar0_wb_wr_o = '0' and ACK_copy='0')     then --read
161
                                        wb_config_state <= "00001010";
162
                                end if;
163
 
164
                         --********** write STATE ********** 
165
                         when "00001001" =>   --state 1
166
                                  wb_config_state <= "00000000"; --no wait states, go back to idle
167
                                  pcie_bar0_wb_ack_i  <= '1';
168
                                  ACK_copy <= '1';
169
                                        case (pcie_bar0_wb_addr_o(7 downto 0)) is
170
                                                when X"00" =>           register_one  <=   pcie_bar0_wb_data_o(31 downto 0);
171
                                                when X"01" =>           register_two  <=   pcie_bar0_wb_data_o(31 downto 0);
172
                                                when X"02" =>           register_three <=   pcie_bar0_wb_data_o(31 downto 0);
173
                                                when X"03" =>           register_four <=   pcie_bar0_wb_data_o(31 downto 0);
174
                                                when others =>          regxx_scratchpad         <=   pcie_bar0_wb_data_o(31 downto 0);
175
                                        end case;
176
 
177
 
178
                         --********** read STATE **********
179
                         when "00001010" =>   --state 2: registers read-out
180
                                  wb_config_state <= "00000000"; --no wait states, go back to idle
181
                                  pcie_bar0_wb_ack_i  <= '1';
182
                                  ACK_copy <= '1';
183
                                        case (pcie_bar0_wb_addr_o(7 downto 0)) is
184
                                                when X"00" =>           pcie_bar0_wb_data_i(31 downto 0) <=      register_one  ;
185
                                                when X"01" =>           pcie_bar0_wb_data_i(31 downto 0) <=      register_two  ;
186
                                                when X"02" =>           pcie_bar0_wb_data_i(31 downto 0) <=      register_three ;
187
                                                when X"03" =>           pcie_bar0_wb_data_i(31 downto 0) <=      register_four ;
188
                                                when X"04" =>           pcie_bar0_wb_data_i(31 downto 0) <=      scan_pins_latched2 ;
189
                                                when others =>          pcie_bar0_wb_data_i(31 downto 0) <=      regxx_scratchpad ;
190
                                        end case;
191
 
192
                         when others => --error state
193
                                         wb_config_state <= "00000000"; --go to state 0
194
                         end case;
195
 
196
                end if;
197
        end if;
198
end process wishbone;
199
 
200
 
201
 
202
--end file ----------------------------------------------------------------------
203
end Behavioral;

powered by: WebSVN 2.1.0

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