source: FPGA/FTU/spi_interface/spi_interface_16.vhd @ 156

Last change on this file since 156 was 156, checked in by qweitzel, 11 years ago
First check-in of VHDL code for FTU: counters, dcm, spi
File size: 9.1 KB
Line 
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---------------------------------------------------------------------------------------------
24library IEEE;
25library UNISIM;
26use IEEE.STD_LOGIC_1164.ALL;
27use IEEE.NUMERIC_STD.ALL;
28use UNISIM.Vcomponents.ALL;
29
30entity 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  );
56end spi_interface_16;
57
58ARCHITECTURE 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
153BEGIN
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
226END SCHEMATIC;
Note: See TracBrowser for help on using the repository browser.