1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.ALL;
|
3 | use IEEE.STD_LOGIC_ARITH.ALL;
|
4 | use IEEE.STD_LOGIC_UNSIGNED.ALL;
|
5 | --use ieee.numeric_std.all;
|
6 | library UNISIM;
|
7 | use UNISIM.VCOMPONENTS.ALL;
|
8 | entity spi_top is
|
9 | port (
|
10 |
|
11 | XADC_GPIO_0 : in std_logic; --mosi
|
12 | XADC_GPIO_2 : in std_logic; --slave select
|
13 | XADC_GPIO_3 : in std_logic; --slave clock
|
14 |
|
15 | XADC_GPIO_1 : out std_logic; --miso
|
16 | reset : in STD_LOGIC;
|
17 | rs232_uart_rxd : in STD_LOGIC;
|
18 | rs232_uart_txd : out STD_LOGIC;
|
19 | sys_diff_clock_clk_n : in STD_LOGIC;
|
20 | sys_diff_clock_clk_p : in STD_LOGIC
|
21 | );
|
22 | end spi_top;
|
23 | architecture STRUCTURE of spi_top is
|
24 | component design_1 is
|
25 | port (
|
26 | rs232_uart_rxd : in STD_LOGIC;
|
27 | rs232_uart_txd : out STD_LOGIC;
|
28 | dip_switches_4bits_tri_i : in STD_LOGIC_VECTOR ( 7 downto 0 );
|
29 | dip_switches_4bits_0_tri_o : out STD_LOGIC_VECTOR ( 7 downto 0 );
|
30 | out_clk : out STD_LOGIC;
|
31 | out_clk_1 : out STD_LOGIC;
|
32 | gpio_rtl_tri_i : in STD_LOGIC_VECTOR ( 0 to 0 );
|
33 | gpio_rtl_0_tri_i : in STD_LOGIC_VECTOR ( 0 to 0 );
|
34 | -- reset_gpio : out STD_LOGIC_VECTOR ( 0 to 0 );
|
35 | sys_diff_clock_clk_n : in STD_LOGIC;
|
36 | sys_diff_clock_clk_p : in STD_LOGIC;
|
37 | reset : in STD_LOGIC
|
38 | );
|
39 | end component design_1;
|
40 | signal clock_rtl1 : std_logic:='0';
|
41 | signal clock_rtl2 : std_logic;
|
42 | signal out_clk_p : std_logic;
|
43 | signal out_clk_p1 : std_logic:='0';
|
44 | signal count1m : std_logic_vector(3 downto 0):="0000";
|
45 | signal count1mp : std_logic_vector(3 downto 0):="0000";
|
46 | signal mosi_8bit: std_logic_vector (7 downto 0);
|
47 | signal miso_8bit: std_logic_vector (7 downto 0);
|
48 | signal miso_8bit_new: std_logic_vector (7 downto 0);
|
49 | signal miso_int: std_logic_vector (7 downto 0);
|
50 | signal count :STD_LOGIC_VECTOR (2 downto 0) := "000";
|
51 | signal control, control1, clk_out, clk_out1: std_logic;
|
52 | signal gpio1: std_logic;
|
53 | signal gpio2: std_logic;
|
54 | signal gpio3: std_logic;
|
55 | signal gpio4: std_logic;
|
56 | signal gpio_int: std_logic;
|
57 | signal int_ctrl:std_logic;
|
58 | signal reset_gpio_int : STD_LOGIC_VECTOR ( 0 to 0 );
|
59 | signal count_natural : natural:=7;
|
60 | signal XADC_GPIO_0_dly1: std_logic;
|
61 | signal XADC_GPIO_1_dly1: std_logic;
|
62 | signal XADC_GPIO_2_dly1: std_logic;
|
63 | signal XADC_GPIO_3_dly1: std_logic;
|
64 | begin
|
65 | gpio1 <= XADC_GPIO_0;
|
66 |
|
67 | XADC_GPIO_1 <= gpio2;
|
68 |
|
69 | spi_slave_mosi:process(XADC_GPIO_3)
|
70 | begin
|
71 | if rising_edge(XADC_GPIO_3) then
|
72 | -- gpio1 <= XADC_GPIO_0;
|
73 | if XADC_GPIO_2 = '0' then
|
74 | mosi_8bit(0) <= gpio1;
|
75 | mosi_8bit(1) <= mosi_8bit(0);
|
76 | mosi_8bit(2) <= mosi_8bit(1);
|
77 | mosi_8bit(3) <= mosi_8bit(2);
|
78 | mosi_8bit(4) <= mosi_8bit(3);
|
79 | mosi_8bit(5) <= mosi_8bit(4);
|
80 | mosi_8bit(6) <= mosi_8bit(5);
|
81 | mosi_8bit(7) <= mosi_8bit(6);
|
82 | end if;
|
83 | end if;
|
84 | end process;
|
85 |
|
86 | control_slave_mosi:process(clock_rtl1)
|
87 | begin
|
88 | if rising_edge(clock_rtl1) then
|
89 | int_ctrl <= XADC_GPIO_2;
|
90 | if (int_ctrl = '0' and XADC_GPIO_2 = '1' ) then
|
91 | control <= '1';
|
92 | else
|
93 | control <= '0';
|
94 | end if;
|
95 | end if;
|
96 | end process;
|
97 |
|
98 |
|
99 | spi_slave_miso:process(XADC_GPIO_3)
|
100 | begin
|
101 | if rising_edge(XADC_GPIO_3) then
|
102 |
|
103 | if XADC_GPIO_2 = '0' then
|
104 |
|
105 | gpio2 <= miso_8bit(count_natural);
|
106 |
|
107 | count_natural <= count_natural - 1;
|
108 | if (count_natural=0) then
|
109 |
|
110 | count_natural <= 7;
|
111 | end if;
|
112 | end if;
|
113 | end if;
|
114 | end process;
|
115 |
|
116 |
|
117 |
|
118 | clk_1mhz:process (clock_rtl2)
|
119 | begin
|
120 | if rising_edge (clock_rtl2) then
|
121 | if count1m=4 then
|
122 | clock_rtl1 <= not clock_rtl1;
|
123 | count1m <= "0000";
|
124 | else
|
125 | count1m <= count1m + '1';
|
126 | end if;
|
127 |
|
128 | end if;
|
129 |
|
130 | end process;
|
131 |
|
132 |
|
133 | design_inst: design_1
|
134 | port map (
|
135 | dip_switches_4bits_tri_i(7 downto 0) => mosi_8bit,
|
136 | dip_switches_4bits_0_tri_o(7 downto 0) => miso_8bit,
|
137 | gpio_rtl_tri_i(0) => control,
|
138 | gpio_rtl_0_tri_i(0) => XADC_GPIO_3,
|
139 | reset => reset,
|
140 | -- reset_gpio(0) => reset_gpio_int(0),
|
141 | rs232_uart_rxd => rs232_uart_rxd,
|
142 | rs232_uart_txd => rs232_uart_txd,
|
143 | sys_diff_clock_clk_n => sys_diff_clock_clk_n,
|
144 | sys_diff_clock_clk_p => sys_diff_clock_clk_p,
|
145 | out_clk => clock_rtl2,
|
146 | out_clk_1 => out_clk_p
|
147 | );
|
148 |
|
149 |
|
150 | end STRUCTURE;
|