1 | ---------------------------------------------------------------------------------------------
|
---|
2 | ---------------------------------------------------------------------------------------------
|
---|
3 | -- File: spi_interface_16.vhd
|
---|
4 | --
|
---|
5 | --
|
---|
6 | -- Original file: spi_interface.vhd
|
---|
7 | --
|
---|
8 | -- Created: 12-12-02 JRH
|
---|
9 | -- This file contains the interconnect structure of the SPI interface portion of
|
---|
10 | -- the SPI Master design. It was originally created in schematic form, but was
|
---|
11 | -- converted to VHDL from the VHF file generated by the ECS tool.
|
---|
12 | --
|
---|
13 | ---------------------------------------------------------------------------------------------
|
---|
14 | ---------------------------------------------------------------------------------------------
|
---|
15 | -- Modified from 8 to 16 bit word size by Patrick Vogler
|
---|
16 | -- 18th November 2009
|
---|
17 | --
|
---|
18 | -- Modifications are marked by: *Mod: <modification>
|
---|
19 | --
|
---|
20 | -- Cleaned up by Quirin Weitzel
|
---|
21 | -- 20th January 2010
|
---|
22 | ---------------------------------------------------------------------------------------------
|
---|
23 | ---------------------------------------------------------------------------------------------
|
---|
24 | library IEEE;
|
---|
25 | library UNISIM;
|
---|
26 | use IEEE.STD_LOGIC_1164.ALL;
|
---|
27 | use IEEE.NUMERIC_STD.ALL;
|
---|
28 | use UNISIM.Vcomponents.ALL;
|
---|
29 |
|
---|
30 | entity spi_interface_16 is
|
---|
31 | port(
|
---|
32 | clk : IN STD_LOGIC;
|
---|
33 | clkdiv : IN STD_LOGIC_VECTOR (1 downto 0);
|
---|
34 | cpha : IN STD_LOGIC;
|
---|
35 | cpol : IN STD_LOGIC;
|
---|
36 | miso : IN STD_LOGIC;
|
---|
37 | rcv_cpol : IN STD_LOGIC;
|
---|
38 | rcv_full_reset : IN STD_LOGIC;
|
---|
39 | reset : IN STD_LOGIC;
|
---|
40 | ss_in_n : IN STD_LOGIC;
|
---|
41 | ss_mask_reg : IN STD_LOGIC_VECTOR (7 downto 0);-- slave select signals, caution! NO modification, slave select, not word size
|
---|
42 | start : IN STD_LOGIC;
|
---|
43 | xmit_data : IN STD_LOGIC_VECTOR (15 downto 0);-- *Mod: 15 instead of 7, transmit data word extended from 8 to 16 bit
|
---|
44 | xmit_empty_reset : IN STD_LOGIC;
|
---|
45 | done : OUT STD_LOGIC;
|
---|
46 | mosi : OUT STD_LOGIC;
|
---|
47 | rcv_data : OUT STD_LOGIC_VECTOR (15 downto 0);-- *Mod: 15 instead of 7, recieve data word extended from 8 to 16 bit
|
---|
48 | rcv_full : OUT STD_LOGIC;
|
---|
49 | ss_n : OUT STD_LOGIC_VECTOR (7 downto 0);-- slave select signals, caution! NO modification, slave select, not word size
|
---|
50 | rcv_load : INOUT STD_LOGIC;
|
---|
51 | sck : INOUT STD_LOGIC;
|
---|
52 | ss_in_int : INOUT STD_LOGIC;
|
---|
53 | ss_n_int : INOUT STD_LOGIC;
|
---|
54 | xmit_empty : INOUT STD_LOGIC
|
---|
55 | );
|
---|
56 | end spi_interface_16;
|
---|
57 |
|
---|
58 | ARCHITECTURE SCHEMATIC OF spi_interface_16 IS
|
---|
59 |
|
---|
60 | SIGNAL clk0_mask : STD_LOGIC;
|
---|
61 | SIGNAL clk1_mask : STD_LOGIC;
|
---|
62 | SIGNAL sck_1 : STD_LOGIC;
|
---|
63 | SIGNAL sck_fe : STD_LOGIC;
|
---|
64 | SIGNAL sck_int_fe : STD_LOGIC;
|
---|
65 | SIGNAL sck_int_re : STD_LOGIC;
|
---|
66 | SIGNAL sck_re : STD_LOGIC;
|
---|
67 | SIGNAL vcc : STD_LOGIC;
|
---|
68 | SIGNAL xmit_load : STD_LOGIC;
|
---|
69 | SIGNAL xmit_shift : STD_LOGIC;
|
---|
70 |
|
---|
71 | ATTRIBUTE fpga_dont_touch : STRING;
|
---|
72 | ATTRIBUTE fpga_dont_touch OF XLXI_9 : LABEL IS "true";
|
---|
73 |
|
---|
74 | COMPONENT sck_logic
|
---|
75 | PORT(
|
---|
76 | clk : IN STD_LOGIC;
|
---|
77 | clk0_mask : IN STD_LOGIC;
|
---|
78 | clk1_mask : IN STD_LOGIC;
|
---|
79 | clkdiv : IN STD_LOGIC_VECTOR (1 DOWNTO 0);
|
---|
80 | cpha : IN STD_LOGIC;
|
---|
81 | cpol : IN STD_LOGIC;
|
---|
82 | reset : IN STD_LOGIC;
|
---|
83 | ss_in_int : IN STD_LOGIC;
|
---|
84 | sck : INOUT STD_LOGIC;
|
---|
85 | sck_1 : INOUT STD_LOGIC;
|
---|
86 | sck_fe : OUT STD_LOGIC;
|
---|
87 | sck_int_fe : OUT STD_LOGIC;
|
---|
88 | sck_int_re : OUT STD_LOGIC;
|
---|
89 | sck_re : OUT STD_LOGIC
|
---|
90 | );
|
---|
91 | END COMPONENT;
|
---|
92 |
|
---|
93 | COMPONENT spi_control_sm
|
---|
94 | PORT(
|
---|
95 | clk : IN STD_LOGIC;
|
---|
96 | cpha : IN STD_LOGIC;
|
---|
97 | cpol : IN STD_LOGIC;
|
---|
98 | rcv_full_reset : IN STD_LOGIC;
|
---|
99 | rcv_load : IN STD_LOGIC;
|
---|
100 | reset : IN STD_LOGIC;
|
---|
101 | sck_fe : IN STD_LOGIC;
|
---|
102 | sck_int : IN STD_LOGIC;
|
---|
103 | sck_int_fe : IN STD_LOGIC;
|
---|
104 | sck_int_re : IN STD_LOGIC;
|
---|
105 | sck_re : IN STD_LOGIC;
|
---|
106 | ss_in_n : IN STD_LOGIC;
|
---|
107 | ss_mask_reg : IN STD_LOGIC_VECTOR (7 DOWNTO 0);-- slave select signals, caution, NO modification, slave select, not word size
|
---|
108 | start : IN STD_LOGIC;
|
---|
109 | xmit_empty_reset : IN STD_LOGIC;
|
---|
110 | ss_in_int : INOUT STD_LOGIC;
|
---|
111 | ss_n_int : INOUT STD_LOGIC;
|
---|
112 | xmit_empty : INOUT STD_LOGIC;
|
---|
113 | xmit_load : INOUT STD_LOGIC;
|
---|
114 | clk0_mask : OUT STD_LOGIC;
|
---|
115 | clk1_mask : OUT STD_LOGIC;
|
---|
116 | done : OUT STD_LOGIC;
|
---|
117 | rcv_full : OUT STD_LOGIC;
|
---|
118 | ss_n : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); -- slave select signals, caution! NO modification slave select, not word size
|
---|
119 | xmit_shift : OUT STD_LOGIC
|
---|
120 | );
|
---|
121 | END COMPONENT;
|
---|
122 |
|
---|
123 | COMPONENT spi_rcv_shift_reg
|
---|
124 | PORT(
|
---|
125 | cpol : IN STD_LOGIC;
|
---|
126 | miso : IN STD_LOGIC;
|
---|
127 | rcv_cpol : IN STD_LOGIC;
|
---|
128 | reset : IN STD_LOGIC;
|
---|
129 | sck_fe : IN STD_LOGIC;
|
---|
130 | sck_re : IN STD_LOGIC;
|
---|
131 | sclk : IN STD_LOGIC;
|
---|
132 | shift_en : IN STD_LOGIC;
|
---|
133 | ss_in_int : IN STD_LOGIC;
|
---|
134 | data_out : OUT STD_LOGIC_VECTOR (15 DOWNTO 0);-- *Mod: 15 instead of 7, recieve data word extended from 8 to 16 bit
|
---|
135 | rcv_load : OUT STD_LOGIC
|
---|
136 | );
|
---|
137 | END COMPONENT;
|
---|
138 |
|
---|
139 | COMPONENT spi_xmit_shift_reg
|
---|
140 | PORT(
|
---|
141 | data_in : IN STD_LOGIC_VECTOR (15 DOWNTO 0);-- *Mod: 15 instead of 7, transmit data word extended from 8 to 16 bit
|
---|
142 | data_ld : IN STD_LOGIC;
|
---|
143 | reset : IN STD_LOGIC;
|
---|
144 | sclk : IN STD_LOGIC;
|
---|
145 | shift_en : IN STD_LOGIC;
|
---|
146 | shift_in : IN STD_LOGIC;
|
---|
147 | ss_in_int : IN STD_LOGIC;
|
---|
148 | sys_clk : IN STD_LOGIC;
|
---|
149 | mosi : OUT STD_LOGIC
|
---|
150 | );
|
---|
151 | END COMPONENT;
|
---|
152 |
|
---|
153 | BEGIN
|
---|
154 |
|
---|
155 | XLXI_9 : NAND2B1
|
---|
156 | PORT MAP(
|
---|
157 | I0=>xmit_shift, I1=>xmit_shift, O=>vcc
|
---|
158 | );
|
---|
159 |
|
---|
160 | SCK_GEN : sck_logic
|
---|
161 | PORT MAP(
|
---|
162 | clk=>clk, clk0_mask=>clk0_mask, clk1_mask=>clk1_mask,
|
---|
163 | clkdiv(1)=>clkdiv(1), clkdiv(0)=>clkdiv(0), cpha=>cpha, cpol=>cpol,
|
---|
164 | reset=>reset, ss_in_int=>ss_in_int, sck=>sck, sck_1=>sck_1,
|
---|
165 | sck_fe=>sck_fe, sck_int_fe=>sck_int_fe, sck_int_re=>sck_int_re,
|
---|
166 | sck_re=>sck_re
|
---|
167 | );
|
---|
168 |
|
---|
169 | spi_ctrl_sm : spi_control_sm
|
---|
170 | PORT MAP(
|
---|
171 | clk=>clk, cpha=>cpha, cpol=>cpol,
|
---|
172 | rcv_full_reset=>rcv_full_reset, rcv_load=>rcv_load, reset=>reset,
|
---|
173 | sck_fe=>sck_fe, sck_int=>sck_1, sck_int_fe=>sck_int_fe,
|
---|
174 | sck_int_re=>sck_int_re, sck_re=>sck_re, ss_in_n=>ss_in_n,
|
---|
175 | ss_mask_reg(7)=>ss_mask_reg(7), ss_mask_reg(6)=>ss_mask_reg(6),
|
---|
176 | ss_mask_reg(5)=>ss_mask_reg(5), ss_mask_reg(4)=>ss_mask_reg(4),
|
---|
177 | ss_mask_reg(3)=>ss_mask_reg(3), ss_mask_reg(2)=>ss_mask_reg(2),
|
---|
178 | ss_mask_reg(1)=>ss_mask_reg(1), ss_mask_reg(0)=>ss_mask_reg(0),
|
---|
179 | start=>start, xmit_empty_reset=>xmit_empty_reset, ss_in_int=>ss_in_int,
|
---|
180 | ss_n_int=>ss_n_int, xmit_empty=>xmit_empty, xmit_load=>xmit_load,
|
---|
181 | clk0_mask=>clk0_mask, clk1_mask=>clk1_mask, done=>done,
|
---|
182 | rcv_full=>rcv_full, ss_n(7)=>ss_n(7), ss_n(6)=>ss_n(6), ss_n(5)=>ss_n(5),
|
---|
183 | ss_n(4)=>ss_n(4), ss_n(3)=>ss_n(3), ss_n(2)=>ss_n(2), ss_n(1)=>ss_n(1),
|
---|
184 | ss_n(0)=>ss_n(0), xmit_shift=>xmit_shift
|
---|
185 | );
|
---|
186 |
|
---|
187 | --------------------------------------------------------------------------
|
---|
188 | -- *Mod: recieve data word extended from 8 to 16 bit in this block ------
|
---|
189 | rcv_shift_reg : spi_rcv_shift_reg
|
---|
190 | PORT MAP(
|
---|
191 | cpol=>cpol, miso=>miso, rcv_cpol=>rcv_cpol, reset=>reset,
|
---|
192 | sck_fe=>sck_fe, sck_re=>sck_re, sclk=>sck, shift_en=>ss_n_int,
|
---|
193 | ss_in_int=>ss_in_int,
|
---|
194 | data_out(15)=>rcv_data(15), data_out(14)=>rcv_data(14),
|
---|
195 | data_out(13)=>rcv_data(13), data_out(12)=>rcv_data(12),
|
---|
196 | data_out(11)=>rcv_data(11), data_out(10)=>rcv_data(10),
|
---|
197 | data_out(9)=>rcv_data(9), data_out(8)=>rcv_data(8),
|
---|
198 | data_out(7)=>rcv_data(7), data_out(6)=>rcv_data(6),
|
---|
199 | data_out(5)=>rcv_data(5), data_out(4)=>rcv_data(4),
|
---|
200 | data_out(3)=>rcv_data(3), data_out(2)=>rcv_data(2),
|
---|
201 | data_out(1)=>rcv_data(1), data_out(0)=>rcv_data(0),
|
---|
202 | rcv_load=>rcv_load
|
---|
203 | );
|
---|
204 | -- *Mod: recieve data word extended from 8 to 16 bit in this block -----
|
---|
205 | -------------------------------------------------------------------------
|
---|
206 |
|
---|
207 | --------------------------------------------------------------------------
|
---|
208 | -- *Mod: transmit data word extended from 8 to 16 bit in this block -----
|
---|
209 | xmit_shift_reg : spi_xmit_shift_reg
|
---|
210 | PORT MAP(
|
---|
211 | data_in(15)=>xmit_data(15), data_in(14)=>xmit_data(14),
|
---|
212 | data_in(13)=>xmit_data(13), data_in(12)=>xmit_data(12),
|
---|
213 | data_in(11)=>xmit_data(11), data_in(10)=>xmit_data(10),
|
---|
214 | data_in(9)=>xmit_data(9), data_in(8)=>xmit_data(8),
|
---|
215 | data_in(7)=>xmit_data(7), data_in(6)=>xmit_data(6),
|
---|
216 | data_in(5)=>xmit_data(5), data_in(4)=>xmit_data(4),
|
---|
217 | data_in(3)=>xmit_data(3), data_in(2)=>xmit_data(2),
|
---|
218 | data_in(1)=>xmit_data(1), data_in(0)=>xmit_data(0),
|
---|
219 | data_ld=>xmit_load,
|
---|
220 | reset=>reset, sclk=>sck_1, shift_en=>xmit_shift, shift_in=>vcc,
|
---|
221 | ss_in_int=>ss_in_int, sys_clk=>clk, mosi=>mosi
|
---|
222 | );
|
---|
223 | -- *Mod: transmit data word extended from 8 to 16 bit in this block -----
|
---|
224 | --------------------------------------------------------------------------
|
---|
225 |
|
---|
226 | END SCHEMATIC;
|
---|