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

Subversion Repositories wbscope

[/] [wbscope/] [trunk/] [doc/] [src/] [spec.tex] - Blame information for rev 13

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dgisselq
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
%%
3
%% Filename:    spec.tex
4
%%
5
%% Project:     Wishbone scope
6
%%
7
%% Purpose:     This LaTeX file contains all of the documentation/description
8
%%              currently provided with this Wishbone scope core.  It's not
9
%%              nearly as interesting as the PDF file it creates, so I'd
10
%%              recommend reading that before diving into this file.  You
11
%%              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 13 dgisselq
%% Copyright (C) 2015,2017, Gisselquist Technology, LLC
23 2 dgisselq
%%
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{Wishbone Scope}
46
\title{Specification}
47
\author{Dan Gisselquist, Ph.D.}
48 12 dgisselq
\email{dgisselq (at) ieee.org}
49 13 dgisselq
\revision{Rev.~0.4}
50 2 dgisselq
\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 12 dgisselq
with this program.  If not, see \texttt{http://www.gnu.org/licenses/} for a
68 2 dgisselq
copy.
69
\end{license}
70
\begin{revisionhistory}
71 13 dgisselq
0.4 & 6/2/2017 & Gisselquist & Added Compressed scope and TB's\\\hline
72 7 dgisselq
0.3 & 6/22/2015 & Gisselquist & Minor updates to enhance readability \\\hline
73 4 dgisselq
0.2 & 6/22/2015 & Gisselquist & Finished Draft \\\hline
74 2 dgisselq
0.1 & 6/22/2015 & Gisselquist & First Draft \\\hline
75
\end{revisionhistory}
76
% Revision History
77
% Table of Contents, named Contents
78
\tableofcontents
79
% \listoffigures
80
\listoftables
81
\begin{preface}
82 4 dgisselq
This project began, years ago, for all the wrong reasons.  Rather than pay a
83
high price to purchase a Verilog simulator and then to learn how to use it,
84
I took working Verilog code, to include a working bus, added features and
85
used the FPGA system as my testing platform.  I arranged the FPGA to step
86
internal registers upon command, and to make many of those registers
87
available via the bus.
88 2 dgisselq
 
89 4 dgisselq
When I then needed to make the project run in real-time, as opposed to the
90
manually stepped approach, I generated a scope like this one.  I had already
91 6 dgisselq
bench tested the components on the hardware itself.  Thus, testing and
92 4 dgisselq
development continued on the hardware, and the scope helped me see what was
93
going right or wrong.  The great advantage of the approach was that, at the
94 13 dgisselq
end of the project, I didn't need to switch from simulation to hardware in the
95
loop testing, since all my testing had been done with the hardware in the loop.
96 4 dgisselq
 
97
When I left that job, I took this concept with me and rebuilt this piece of
98 13 dgisselq
infrastructure using a Wishbone Bus.  I am not going to recommend that others
99
use this approach for bench testing, but I have found it very valuable for
100
debugging on the hardware.
101 2 dgisselq
\end{preface}
102
 
103
\chapter{Introduction}
104
\pagenumbering{arabic}
105
\setcounter{page}{1}
106
 
107 5 dgisselq
The Wishbone Scope is a debugging tool for reading results from the chip after
108 13 dgisselq
events have taken place.  It designed to be a peripheral on an already
109
existing wishbone bus--pushing the complicated task of getting a bus up
110
and running elsewhere.  In general, the scope records data until some
111 4 dgisselq
some (programmable) holdoff number of data samples after a trigger has taken
112
place.  Once the holdoff has been reached, the scope stops recording and
113
asserts an interrupt.  At this time, data may be read from the scope in order
114
from oldest to most recent.  That's the basics, now for two extra details.
115
 
116
First, the trigger and the data that the scope records are both implementation
117
dependent.  The scope itself is designed to be easily reconfigurable from one
118
build to the next so that the actual configuration may even be build dependent.
119
 
120 13 dgisselq
Second, the scope is built to be able to run synchronously with the bus clock,
121
or off of a separate data clock.  Whether or not the two are synchronous is
122
controlled by the ``SYNCHRONOUS'' parameter.  When running off of two
123
clocks, the actions associated with commands issued to the scope,
124
such as manual triggering, as well as disabling or releasing the trigger, will
125
not act synchronously with the scope itself--but this is to be expected.
126 2 dgisselq
 
127
Third, the data clock associated with the scope has a clock enable line
128
associated with it.  Depending on how often the clock enable line is enabled
129 13 dgisselq
may determine how fast the scope is {\tt PRIMED}, {\tt TRIGGERED}, and then
130
eventually completes its collection.
131 2 dgisselq
 
132 4 dgisselq
Finally, and in conclusion, this scope has been an invaluable tool for
133
testing, for figuring out what is going on internal to a chip, and for fixing
134 13 dgisselq
such things.  I have diagnosed PS/2 interactions, Internal
135 4 dgisselq
Configuration Access Port (ICAPE2) interfaces, mouse controller interactions,
136 13 dgisselq
bus errors, quad-SPI flash interactions, SD--card interface, VGA, HDMI, and
137
even the internals of a CPU all using this scope.
138 4 dgisselq
 
139 13 dgisselq
\chapter{Architecture}
140
 
141
The wishbone scope package comes with two separate scopes: the regular scope,
142
and a run-length encoded scope.
143
 
144
Both scopes are designed to be a component of a larger design.  They depend upon
145
the existence of a reliable wishbone bus which can be accessed independent of
146
the portion of the design under test.
147
 
148
Both scopes exist as a slave peripheral on this wishbone bus.
149
 
150
The bus master still needs to interact with this slave to first configure it,
151
and second to read any data off of it.
152
 
153
Interaction with the scopes is identical, save for two differences.  First, the
154
run-length encoded scope uses the high order bit to specify the number of
155
times to repeat the last data item.  This means that the run-length encoded
156
scope can only store 31~bits per time interval, versus the 32~bits per time
157
interval of the regular scope.
158
 
159
Since the two scopes are so similar, they will collectively be called the
160
Wishbone Scope, and differences will only be mentioned where appropriate.
161
 
162 2 dgisselq
\chapter{Operation}
163 4 dgisselq
 
164
So how shall one use the scope?  The scope itself supports a series of
165
states:
166
\begin{enumerate}
167 5 dgisselq
\item {\tt RESET}
168 2 dgisselq
 
169 5 dgisselq
        Any write to the control register, without setting the high order bit,
170
        will automatically reset the scope.  Once reset, the scope will
171
        immediately start collecting.
172
\item {\tt PRIMED}
173 4 dgisselq
 
174 5 dgisselq
        Following a reset, once the scope has filled its memory, it enters the
175
        {\tt PRIMED} state.  Once it reaches this state, it will be sensitive
176
        to a trigger.
177
\item {\tt TRIGGERED}
178 4 dgisselq
 
179 5 dgisselq
    The scope may be {\tt TRIGGERED} either automatically, via an input port to
180 4 dgisselq
    the core, or manually, via a wishbone bus command.  Once a trigger
181
    has been received, the core will record a user configurable number of
182
    further samples before stopping.
183
 
184 5 dgisselq
\item {\tt STOPPED}
185 4 dgisselq
 
186 5 dgisselq
    Once the core has {\tt STOPPED}, the data within it may be read back off.
187 4 dgisselq
\end{enumerate}
188
 
189
Let's go through that list again.  First, before using the scope, the holdoff
190 2 dgisselq
needs to be set.  The scope is designed so that setting the scope control value
191 6 dgisselq
to the holdoff alone, with all other bits set to zero, will reset the scope
192
from whatever condition it was in,
193 2 dgisselq
freeing it to run.  Once running, then upon every clock enabled clock, one
194
sample of data is read into the scope and recorded.  Once every memory value
195
is filled, the scope has been {\tt PRIMED}.  Once the scope has been
196
{\tt PRIMED}, it will then be responsive to its trigger.  Should the trigger be
197 6 dgisselq
active on an input clock with the clock--enable line set, the scope will then
198
be {\tt TRIGGERED}.  It
199 4 dgisselq
will then count for the number of clocks in the holdoff before stopping
200 13 dgisselq
collection, placing it in the {\tt STOPPED} state.\footnote{You can even
201 6 dgisselq
change the holdoff while the scope is running by writing a new holdoff value
202
together with setting the {\tt RESET\_n} bit of the control register.  However,
203
if you do this after the core has triggered it may stop at some other
204
non--holdoff value!}  If the holdoff is zero, the last sample in the buffer
205
will be the sample containing the trigger.  Likewise if the holdoff is one
206
less than the size of the memory, the first sample in the buffer will be the
207
one containing the trigger.
208 4 dgisselq
 
209 2 dgisselq
There are two further commands that will affect the operation of the scope.  The
210 4 dgisselq
first is the {\tt MANUAL} trigger command/bit.  This bit may be set by writing
211
the holdoff to the control register while setting this bit high.  This will
212 6 dgisselq
cause the scope to trigger as soon as it is primed.  If the {\tt RESET\_n}
213
bit is also set so as to prevent an internal reset, and if the scope was already
214
primed, then manual trigger command will cause it to trigger immediately.
215 2 dgisselq
 
216
The last command that can affect the operation of the scope is the {\tt DISABLE}
217 4 dgisselq
command/bit in the control register.  Setting this bit will prevent the scope
218 5 dgisselq
from triggering, or if {\tt TRIGGERED}, it will prevent the scope from
219
generating an interrupt.
220 2 dgisselq
 
221 4 dgisselq
Finally, be careful how you set the clock enable line.  If the clock enable
222
line leaves the clock too often disabled, the scope might never prime in any
223
reasonable amount of time.
224
 
225
So, in summary, to use this scope you first set the holdoff value in the
226 6 dgisselq
control register.  Second, you wait until the scope has been {\tt TRIGGERED}
227
and {\tt STOPPED}.  Finally, you read from the data register once for every
228
memory value in the buffer and you can then sit back, relax, and study what
229
took place within the FPGA.  Additional modes allow you to manually trigger
230
the scope, or to disable the automatic trigger entirely.
231 4 dgisselq
 
232 2 dgisselq
\chapter{Registers}
233
 
234
This scope core supports two registers, as listed in
235 4 dgisselq
Tbl.~\ref{tbl:reglist}: a control register and a data register.
236 2 dgisselq
\begin{table}[htbp]
237
\begin{center}
238
\begin{reglist}
239 5 dgisselq
CONTROL & 0 & 32 & R/W & Configuration, control, and status of the
240 4 dgisselq
        scope.\\\hline
241 13 dgisselq
DATA    & 4 & 32 & R(/W) & Read out register, to read out the data
242 4 dgisselq
        from the core.  Writes to this register reset the read address
243
        to the beginning of the buffer, but are otherwise ignored.
244
        \\\hline
245 2 dgisselq
\end{reglist}\caption{List of Registers}\label{tbl:reglist}
246
\end{center}\end{table}
247
Each register will be discussed in detail in this chapter.
248
 
249
\section{Control Register}
250
The bits in the control register are defined in Tbl.~\ref{tbl:control}.
251
\begin{table}[htbp]
252
\begin{center}
253
\begin{bitlist}
254 5 dgisselq
31 & R/W & {\tt RESET\_n}.  Write a `0' to this register to command a reset.
255 2 dgisselq
        Reading a `1' from this register means the reset has not finished
256
        crossing clock domains and is still pending.\\\hline
257 5 dgisselq
30 & R & {\tt STOPPED}, indicates that all collection has stopped.\\\hline
258
29 & R & {\tt TRIGGERED}, indicates that a trigger has been recognized, and that
259 2 dgisselq
        the scope is counting for holdoff samples before stopping.\\\hline
260 5 dgisselq
28 & R & {\tt PRIMED}, indicates that the memory has been filled, and that the
261 2 dgisselq
        scope is now waiting on a trigger.\\\hline
262 5 dgisselq
27 & R/W & {\tt MANUAL}, set to invoke a manual trigger.\\\hline
263
26 & R/W & {\tt DISABLE}, set to disable the internal trigger.  The scope may still
264
        be {\tt TRIGGERED} manually.\\\hline
265
25 & R & {\tt RZERO}, this will be true whenever the scope's internal address
266 2 dgisselq
        register is pointed at the beginning of the memory.\\\hline
267 5 dgisselq
20--24 & R & {\tt LGMEMLEN}, the base two logarithm of the memory length.  Thus,
268
        the memory internal to the scope is given by 1$<<$LGMEMLEN. \\\hline
269 2 dgisselq
0--19 & R/W & Unsigned holdoff\\\hline
270
\end{bitlist}
271
\caption{Control Register}\label{tbl:control}
272
\end{center}\end{table}
273 4 dgisselq
The register has been designed so that one need only write the holdoff value to
274
it, while leaving the other bits zero, to get the scope going.  On such a write,
275
the RESET\_n bit will be a zero, causing the scope to internally reset itself.
276
Further, during normal operation, the high order nibble will go from 4'h8
277 5 dgisselq
(a nearly instantaneous reset state) to 4'h0 (running), to 4'h1 ({\tt PRIMED}),
278
to 4'h3 ({\tt TRIGGERED}), and then stop at 4'h7 ({\tt PRIMED}, {\tt TRIGGERED},
279
and {\tt STOPPED}).
280 4 dgisselq
Finally, user's are cautioned not to adjust the holdoff between the time the
281
scope triggers and the time it stops--just to guarantee data coherency.
282 2 dgisselq
 
283 13 dgisselq
The scope also has some other capabilities.  For example,
284 5 dgisselq
if you set the {\tt MANUAL} bit, the scope will trigger as soon as it is {\tt PRIMED}.
285
If you set the {\tt MANUAL} bit and the {\tt RESET\_n} bit, it will trigger
286
immediately if the scope was already {\tt PRIMED}.  However, if the
287
{\tt RESET\_n} bit was not also set, a reset will take place and the scope
288
will start over by first collecting enough data to be {\tt PRIMED}, and only
289
then will the {\tt MANUAL} trigger take effect.
290 4 dgisselq
 
291
A second optional capability is to disable the scope entirely.  This might be
292
useful if, for example, certain irrelevant things might trigger the scope.
293 5 dgisselq
By setting the {\tt DISABLE} bit, the scope will not automatically trigger.  It
294
will still record into its memory, and it will still prime itself, it will just
295
not trigger automatically.  The scope may still be manually {\tt TRIGGERED}
296
while the {\tt DISABLE} bit is set.  Likewise, if the {\tt DISABLE} bit is set
297
after the scope has been {\tt TRIGGERED}, the scope will continue to its
298
natural stopped state--it just won't generate an interrupt.
299 4 dgisselq
 
300 5 dgisselq
There are two other interesting bits in this control register.  The {\tt RZERO}
301
bit indicates that the next read from the data register will read from the first
302
value in the memory, while the {\tt LGMEMLEN} bits indicate how long the memory is.  Thus, if {\tt LGMEMLEN} is 10, the FIFO will be (1$<<$10) or 1024 words
303
long, whereas if {\tt LGMEMLEN} is 14, the FIFO will be (1$<<$14) or 16,384 words
304
long.
305 4 dgisselq
 
306 2 dgisselq
\section{Data Register}
307
 
308
This is perhaps the simplest register to explain.  Before the core stops
309
recording, reads from this register will produce reads of the bits going into
310
the core, save only that they have not been protected from any meta-stability
311 13 dgisselq
issues.  This may be useful for reading what's going on when the various lines
312
are stuck, although there are potential race conditions when using this feature.
313
After the core stops recording, reads from this register return values
314 5 dgisselq
from the stored memory, beginning at the oldest and ending with the value
315
holdoff clocks after the trigger.  Further, after recording has stopped, every
316
read increments an internal memory address, so that after (1$<<$LGMEMLEN)
317
reads (for however long the internal memory is), the entire memory has been
318
returned over the bus.
319 2 dgisselq
If you would like some assurance that you are reading from the beginning of the
320 4 dgisselq
memory, you may either check the control register's {\tt RZERO} flag which will
321
be `1' for the first value in the buffer, or you may write to the data register.
322
Such writes will be ignored, save that they will reset the read address back
323
to the beginning of the buffer.
324 13 dgisselq
 
325
If the holdoff is set to zero, the last data value will be the value recorded
326
when the trigger took place.  As the holdoff increases, the trigger will move
327
earlier and earlier into the buffer.
328
 
329
The data register for the compressed scope will indicate the presence of a
330
run in the high order bit.  If the high order bit is set, the last value
331
will be repeated one plus the value held in the register.  Hence, a
332
data value of {\tt 0x80000000} indicates a value repeated once, while
333
{\tt 0x80000001 } indicates the value has been repeated twice and so on.
334 4 dgisselq
 
335 2 dgisselq
\chapter{Clocks}
336
 
337
This scope supports two clocks: a wishbone bus clock, and a data clock.
338
If the internal parameter ``SYNCHRONOUS'' is set to zero, proper transfers
339
will take place between these two clocks.  Setting this parameter to a one
340 4 dgisselq
will save some flip flops and logic in implementation.  The speeds of the
341
respective clocks are based upon the speed of your device, and not specific
342
to this core.
343 13 dgisselq
 
344
That said, I have run the core up to 200~MHz on a Xilinx Artix-7, and so
345
it has been modified to match that speed.
346 4 dgisselq
 
347 2 dgisselq
\chapter{Wishbone Datasheet}\label{chap:wishbone}
348
Tbl.~\ref{tbl:wishbone}
349
\begin{table}[htbp]
350
\begin{center}
351
\begin{wishboneds}
352
Revision level of wishbone & WB B4 spec \\\hline
353
Type of interface & Slave, Read/Write, pipeline reads supported \\\hline
354
Port size & 32--bit \\\hline
355
Port granularity & 32--bit \\\hline
356
Maximum Operand Size & 32--bit \\\hline
357
Data transfer ordering & (Irrelevant) \\\hline
358
Clock constraints & None.\\\hline
359
Signal Names & \begin{tabular}{ll}
360
                Signal Name & Wishbone Equivalent \\\hline
361
                {\tt i\_wb\_clk} & {\tt CLK\_I} \\
362
                {\tt i\_wb\_cyc} & {\tt CYC\_I} \\
363
                {\tt i\_wb\_stb} & {\tt STB\_I} \\
364
                {\tt i\_wb\_we} & {\tt WE\_I} \\
365
                {\tt i\_wb\_addr} & {\tt ADR\_I} \\
366
                {\tt i\_wb\_data} & {\tt DAT\_I} \\
367
                {\tt o\_wb\_ack} & {\tt ACK\_O} \\
368
                {\tt o\_wb\_stall} & {\tt STALL\_O} \\
369
                {\tt o\_wb\_data} & {\tt DAT\_O}
370
                \end{tabular}\\\hline
371
\end{wishboneds}
372
\caption{Wishbone Datasheet}\label{tbl:wishbone}
373
\end{center}\end{table}
374
is required by the wishbone specification, and so
375
it is included here.  The big thing to notice is that this core
376
acts as a wishbone slave, and that all accesses to the wishbone scope
377 4 dgisselq
registers become 32--bit reads and writes to this interface.  You may also wish
378
to note that the scope supports pipeline reads from the data port, to speed
379
up reading the results out.
380 6 dgisselq
 
381 13 dgisselq
The {\tt o\_wb\_stall} line is tied to zero.
382
 
383
The {\tt i\_wb\_cyc} line is assumed any time {\tt i\_wb\_stb} is high, and so
384
the core ignores {\tt i\_wb\_cyc}.
385
 
386
The core does not implement the {\tt i\_wb\_sel} lines.  Writes to the core
387
of values less than a word are undefined.  Reads of less than a word in
388
size will act as whole word reads.
389
 
390
 
391 12 dgisselq
\chapter{I/O Ports}\label{ch:ioports}
392 2 dgisselq
 
393 13 dgisselq
The external I/O ports for both cores are listed in Table.~\ref{tbl:ioports}.
394 2 dgisselq
\begin{table}[htbp]
395
\begin{center}
396
\begin{portlist}
397 13 dgisselq
{\tt i\_data\_clk} & 1 & Input & The clock the data lines, clock enable, and
398
        trigger are synchronous to. \\\hline
399 5 dgisselq
{\tt i\_ce} & 1 & Input & Clock Enable.  Set this high to clock data in and
400 13 dgisselq
        out.  No data will move through the core if this is low. \\\hline
401 5 dgisselq
{\tt i\_trigger} & 1 & Input & An active high trigger line.  If this trigger is
402 4 dgisselq
        set to one on any clock enabled data clock cycle, once
403 5 dgisselq
        the scope has been {\tt PRIMED}, it will then enter into its
404
        {\tt TRIGGERED} state.
405 4 dgisselq
        \\\hline
406 13 dgisselq
{\tt i\_data} & 32 & Input & \parbox{3.3in}{{\tt WBSCOPE ONLY: } 32--wires of
407
        ... whatever you
408
        are interested in recording and later examining.  These can be anything,
409
        only they should be synchronous with the data clock.
410
 
411
        {\tt WBSCOPC: } The data width is only 31 wide instead of 32}
412 4 dgisselq
        \\\hline
413 5 dgisselq
{\tt i\_wb\_clk} & 1 & Input & The clock that the wishbone interface runs on.
414 2 dgisselq
                \\\hline
415 5 dgisselq
{\tt i\_wb\_cyc} & 1 & Input & Indicates a wishbone bus cycle is active when
416
                high.  \\\hline
417
{\tt i\_wb\_stb} & 1 & Input & Indicates a wishbone bus cycle for this
418
        peripheral when high.  (See the wishbone spec for more details) \\\hline
419
{\tt i\_wb\_we} & 1 & Input & Write enable, allows indicates a write to one of
420
        the two registers when {\tt i\_wb\_stb} is also high.
421 4 dgisselq
        \\\hline
422 5 dgisselq
{\tt i\_wb\_addr} & 1 & Input & A single address line, set to zero to access the
423
                configuration and control register, to one to access the data
424 2 dgisselq
                register.  \\\hline
425 5 dgisselq
{\tt i\_wb\_data} & 32 & Input & Data used when writing to the control register,
426 2 dgisselq
                ignored otherwise.  \\\hline
427 5 dgisselq
{\tt o\_wb\_ack} & 1 & Output & Wishbone acknowledgement.  This line will go
428 13 dgisselq
                high two clocks after any wishbone access, as long as the
429 5 dgisselq
                wishbone {\tt i\_wb\_cyc} line remains high (i.e., no ack's if
430
                you terminate the cycle early).
431 2 dgisselq
                \\\hline
432 5 dgisselq
{\tt o\_wb\_stall} & 1 & Output & Required by the wishbone spec, but always
433
                set to zero in this implementation.
434 2 dgisselq
                \\\hline
435 5 dgisselq
{\tt o\_wb\_data} & 32 & Output & Values read, either control or data, headed
436
        back to the wishbone bus.  These values will be valid during any
437 4 dgisselq
        read cycle when the {\tt i\_wb\_ack} line is high.
438
        \\\hline
439 2 dgisselq
\end{portlist}
440
\caption{List of IO ports}\label{tbl:ioports}
441
\end{center}\end{table}
442 4 dgisselq
At this point, most of these ports should have been well defined and described
443
earlier in this document.  The only new things are the data clock, {\tt i\_clk},
444
the clock enable for the data, {\tt i\_ce}, the trigger, {\tt i\_trigger}, and
445
the data of interest itself, {\tt i\_data}.  Hopefully these are fairly self
446
explanatory by this point.  If not, just remember the data, {\tt i\_data},
447
are synchronous to the clock, {\tt i\_clk}.  On every clock where the clock
448
enable line is high, {\tt i\_ce}, the data will be recorded until the scope
449
has stopped.  Further, the scope will stop some programmable holdoff number
450
of clock enabled data clocks after {\tt i\_trigger} goes high.  Further,
451
{\tt i\_trigger} need only be high for one clock cycle to be noticed by the
452
scope.
453
 
454 2 dgisselq
% Appendices
455
% Index
456
\end{document}
457
 
458
 

powered by: WebSVN 2.1.0

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