1 |
2 |
dgisselq |
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2 |
|
|
%%
|
3 |
|
|
%% Filename: spec.tex
|
4 |
|
|
%%
|
5 |
|
|
%% Project: Wishbone to ICAPE2 interface conversion
|
6 |
|
|
%%
|
7 |
|
|
%% Purpose: This LaTeX file contains all of the documentation/description
|
8 |
|
|
%% currently provided with this FPGA Real-time Clock Core.
|
9 |
|
|
%% It's not nearly as interesting as the PDF file it creates,
|
10 |
|
|
%% so I'd recommend reading that before diving into this file.
|
11 |
|
|
%% You should be able to find the PDF file in the SVN distribution
|
12 |
|
|
%% together with this PDF file and a copy of the GPL-3.0 license
|
13 |
|
|
%% this file is distributed under. If not, just type 'make'
|
14 |
|
|
%% in the doc directory and it (should) build without a problem.
|
15 |
|
|
%%
|
16 |
|
|
%%
|
17 |
|
|
%% Creator: Dan Gisselquist
|
18 |
|
|
%% Gisselquist Technology, LLC
|
19 |
|
|
%%
|
20 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
21 |
|
|
%%
|
22 |
|
|
%% Copyright (C) 2015, Gisselquist Technology, LLC
|
23 |
|
|
%%
|
24 |
|
|
%% This program is free software (firmware): you can redistribute it and/or
|
25 |
|
|
%% modify it under the terms of the GNU General Public License as published
|
26 |
|
|
%% by the Free Software Foundation, either version 3 of the License, or (at
|
27 |
|
|
%% your option) any later version.
|
28 |
|
|
%%
|
29 |
|
|
%% This program is distributed in the hope that it will be useful, but WITHOUT
|
30 |
|
|
%% ANY WARRANTY; without even the implied warranty of MERCHANTIBILITY or
|
31 |
|
|
%% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
32 |
|
|
%% for more details.
|
33 |
|
|
%%
|
34 |
|
|
%% You should have received a copy of the GNU General Public License along
|
35 |
|
|
%% with this program. (It's in the $(ROOT)/doc directory, run make with no
|
36 |
|
|
%% target there if the PDF file isn't present.) If not, see
|
37 |
|
|
%% <http://www.gnu.org/licenses/> for a copy.
|
38 |
|
|
%%
|
39 |
|
|
%% License: GPL, v3, as defined and found on www.gnu.org,
|
40 |
|
|
%% http://www.gnu.org/licenses/gpl.html
|
41 |
|
|
%%
|
42 |
|
|
%%
|
43 |
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
44 |
|
|
\documentclass{gqtekspec}
|
45 |
|
|
\project{Real-Time Clock}
|
46 |
|
|
\title{Specification}
|
47 |
|
|
\author{Dan Gisselquist, Ph.D.}
|
48 |
|
|
\email{dgisselq\at opencores.org}
|
49 |
|
|
\revision{Rev.~0.1}
|
50 |
|
|
\begin{document}
|
51 |
|
|
\pagestyle{gqtekspecplain}
|
52 |
|
|
\titlepage
|
53 |
|
|
\begin{license}
|
54 |
|
|
Copyright (C) \theyear\today, Gisselquist Technology, LLC
|
55 |
|
|
|
56 |
|
|
This project is free software (firmware): you can redistribute it and/or
|
57 |
|
|
modify it under the terms of the GNU General Public License as published
|
58 |
|
|
by the Free Software Foundation, either version 3 of the License, or (at
|
59 |
|
|
your option) any later version.
|
60 |
|
|
|
61 |
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
62 |
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTIBILITY or
|
63 |
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
64 |
|
|
for more details.
|
65 |
|
|
|
66 |
|
|
You should have received a copy of the GNU General Public License along
|
67 |
|
|
with this program. If not, see \hbox{<http://www.gnu.org/licenses/>} for a
|
68 |
|
|
copy.
|
69 |
|
|
\end{license}
|
70 |
|
|
\begin{revisionhistory}
|
71 |
|
|
0.1 & 5/25/2015 & Gisselquist & First Draft \\\hline
|
72 |
|
|
\end{revisionhistory}
|
73 |
|
|
% Revision History
|
74 |
|
|
% Table of Contents, named Contents
|
75 |
|
|
\tableofcontents
|
76 |
|
|
% \listoffigures
|
77 |
|
|
\listoftables
|
78 |
|
|
\begin{preface}
|
79 |
|
|
My thanks to those helpers on the Xilinx Forum who helped me get the final
|
80 |
|
|
step to getting this working.
|
81 |
|
|
\end{preface}
|
82 |
|
|
|
83 |
|
|
\chapter{Introduction}
|
84 |
|
|
\pagenumbering{arabic}
|
85 |
|
|
\setcounter{page}{1}
|
86 |
|
|
|
87 |
|
|
This core makes the ICAPE2 FPGA configuration registers available to be read
|
88 |
|
|
or written from a wishbone bus. As the documentation of this capability could
|
89 |
|
|
use a bit to be desired, I have put this file together to help document
|
90 |
|
|
what works.
|
91 |
|
|
|
92 |
|
|
The interface itself is very valuable for a couple of purposes---from my humble
|
93 |
|
|
and personal perspective. The first is the user configurable watchdog timer
|
94 |
|
|
which can be used to automatically reset an FPGA after it locks up. The second
|
95 |
|
|
is the warm boot start capability, which makes it possible to create a fall
|
96 |
|
|
back configuration image and test it without compromising the ability of the
|
97 |
|
|
FPGA to be started in a known good image. The third valuable capability is that
|
98 |
|
|
of commanding a reconfiguration. All of these capabilities are available
|
99 |
|
|
through this interface. Further details are available from Xilinx's "7-Series
|
100 |
|
|
FPGAs Configuration" User Guide.
|
101 |
|
|
|
102 |
|
|
This introduction is the first chapter. Beyond this introduction, most
|
103 |
|
|
of the capabilities are documented elsewhere. Hence, the register chapter
|
104 |
|
|
will be omitted and the reader will be gently pointed to the User's Guide.
|
105 |
|
|
This leaves the Wishbone chapter and the I/O Port's chapter which follow.
|
106 |
|
|
|
107 |
|
|
As always, write me if you have any questions or problems.
|
108 |
|
|
|
109 |
|
|
\chapter{Architecture}\label{chap:arch}
|
110 |
|
|
|
111 |
|
|
If I understand correctly, every one of Xilinx's 7--Series FPGA's contains
|
112 |
|
|
two ICAPE2 interface modules. These modules allow user logic to communicate
|
113 |
|
|
with the configuration interface of the chip. This interface, however, isn't
|
114 |
|
|
well documented. According to the User's Guide, it matches the SelectMAP
|
115 |
|
|
interface, yet in practice \ldots it doesn't.
|
116 |
|
|
|
117 |
|
|
This core encapsulates the difficulty of matching that interface. Register
|
118 |
|
|
addresses match those in the User's Guide, as do register definitions.
|
119 |
|
|
|
120 |
|
|
\chapter{Operation}\label{chap:ops}
|
121 |
|
|
|
122 |
|
|
Consider the warm boot reload operation. To do this, write the address in
|
123 |
|
|
configuration memory of an FPGA image to the warm boot start address (WBSTAR).
|
124 |
|
|
In this case, that is address 5'h10 within this interface. A second write to
|
125 |
|
|
the configuration command address (CMD), 5'h4 in this interface, will issue the
|
126 |
|
|
IPROG command to the FPGA and cause it to configure itself from the address
|
127 |
|
|
you just gave it.
|
128 |
|
|
|
129 |
|
|
There, wasn't that simple?
|
130 |
|
|
|
131 |
|
|
Now I can, from the comfort of my home, reconfigure an FPGA in my office without
|
132 |
|
|
needing to press the power button or connect to a JTAG cable. Not bad, no?
|
133 |
|
|
|
134 |
|
|
\chapter{Wishbone Datasheet}\label{chap:wishbone}
|
135 |
|
|
Tbl.~\ref{tbl:wishbone}
|
136 |
|
|
\begin{table}[htbp]
|
137 |
|
|
\begin{center}
|
138 |
|
|
\begin{wishboneds}
|
139 |
|
|
Revision level of wishbone & WB B4 spec \\\hline
|
140 |
|
|
Type of interface & Slave, Read/Write \\\hline
|
141 |
|
|
Port size & 32--bit \\\hline
|
142 |
|
|
Port granularity & 32--bit \\\hline
|
143 |
|
|
Maximum Operand Size & 32--bit \\\hline
|
144 |
|
|
Data transfer ordering & (Irrelevant) \\\hline
|
145 |
|
|
Clock constraints & See the Datasheet for your part\\\hline
|
146 |
|
|
Signal Names & \begin{tabular}{ll}
|
147 |
|
|
Signal Name & Wishbone Equivalent \\\hline
|
148 |
|
|
{\tt i\_clk} & {\tt CLK\_I} \\
|
149 |
|
|
{\tt i\_wb\_cyc} & {\tt CYC\_I} \\
|
150 |
|
|
{\tt i\_wb\_stb} & {\tt STB\_I} \\
|
151 |
|
|
{\tt i\_wb\_we} & {\tt WE\_I} \\
|
152 |
|
|
{\tt i\_wb\_addr} & {\tt ADR\_I} \\
|
153 |
|
|
{\tt i\_wb\_data} & {\tt DAT\_I} \\
|
154 |
|
|
{\tt o\_wb\_ack} & {\tt ACK\_O} \\
|
155 |
|
|
{\tt o\_wb\_stall} & {\tt STALL\_O} \\
|
156 |
|
|
{\tt o\_wb\_data} & {\tt DAT\_O}
|
157 |
|
|
\end{tabular}\\\hline
|
158 |
|
|
\end{wishboneds}
|
159 |
|
|
\caption{Wishbone Datasheet}\label{tbl:wishbone}
|
160 |
|
|
\end{center}\end{table}
|
161 |
|
|
is required by the wishbone specification, and so
|
162 |
|
|
it is included here. The big thing to notice is that this ICAPE2 interface
|
163 |
|
|
acts as a wishbone slave, and that all accesses to the ICAPE2 registers become
|
164 |
|
|
32--bit reads and writes to this interface. Bit ordering is the normal
|
165 |
|
|
ordering where bit~31 is the most significant bit and so forth. (Bit reversal
|
166 |
|
|
is accomplished internally to match Xilinx's definition.) The {\tt o\_stall}
|
167 |
|
|
and {\tt o\_ack} lines are necessarily used to deal with the fact that
|
168 |
|
|
operations to the device take many clocks to complete (14 for writes, 21 for
|
169 |
|
|
reads), so be prepared to wait a couple of clocks for your access to complete.
|
170 |
|
|
Further, the {\tt o\_ack} line will go high while the bus is stalled in many
|
171 |
|
|
cases, indicating that the operation is complete but that the core is not
|
172 |
|
|
yet ready to handle a subsequent request.
|
173 |
|
|
|
174 |
|
|
\chapter{I/O Ports}\label{chap:ioports}
|
175 |
|
|
This core offers no I/O ports beyond those of the wishbone discussed in
|
176 |
|
|
Chapt.~\ref{chap:wishbone}. The I/O ports associated with the ICAPE2 interface
|
177 |
|
|
are captured internally, and not brought to the output of this core.
|
178 |
|
|
|
179 |
|
|
% Appendices
|
180 |
|
|
% Index
|
181 |
|
|
\end{document}
|
182 |
|
|
|
183 |
|
|
|