1 |
7 |
hellwig |
|
2 |
|
|
Welcome to LogicProbe!
|
3 |
|
|
|
4 |
|
|
|
5 |
|
|
1) What is it?
|
6 |
|
|
|
7 |
|
|
LogicProbe is a very simple logic analyzer which can be run on
|
8 |
|
|
an FPGA in parallel with the "device under test". The analyzer
|
9 |
|
|
has a width of 128 data channels, and is 512 samples deep. It
|
10 |
|
|
has a trigger (i.e., it starts catching the channels when this
|
11 |
|
|
signal got active once), and a sample enable (i.e., it does only
|
12 |
|
|
sample the channels when this line is 1). It uses the block RAM
|
13 |
|
|
on the FPGA to store the samples in real-time. When the sample
|
14 |
|
|
buffer is full, it begins to transmit the samples through a UART
|
15 |
|
|
(also included in the code) over the serial line to a PC where
|
16 |
|
|
the sample values are stored in a file. A simple listing program
|
17 |
|
|
allows to view the samples as hexadecimal values.
|
18 |
|
|
|
19 |
|
|
|
20 |
|
|
2) How do I use it?
|
21 |
|
|
|
22 |
|
|
You simply have to instanciate the module described below and setup
|
23 |
|
|
the constraints file so that "serial_out" is connected to the transmit
|
24 |
|
|
data line of an RS232 connector (via appropriate level shifters, of
|
25 |
|
|
course). The line speed is fixed at 38400 bps; this should certainly
|
26 |
|
|
be made a parameter of the design in the next version. Connect a PC
|
27 |
|
|
to the other end of the serial line and run the "receive" program,
|
28 |
|
|
which stores the transmitted samples into a file. You can then use
|
29 |
|
|
the "display" program to examine the samples as hexadecimal numbers.
|
30 |
|
|
|
31 |
|
|
Here is the interface to the analyzer module:
|
32 |
|
|
|
33 |
|
|
module LogicProbe(clock, reset, trigger, sample, channels, serial_out);
|
34 |
|
|
|
35 |
|
|
input clock; // master clock, also used for sampling
|
36 |
|
|
input reset; // master reset
|
37 |
|
|
input trigger; // start sampling when this line is 1
|
38 |
|
|
input sample; // enable sampling when this line is 1
|
39 |
|
|
input [127:0] channels; // the data to be sampled
|
40 |
|
|
output serial_out; // serial line to the PC
|
41 |
|
|
|
42 |
|
|
|
43 |
|
|
3) What do the directories and files in this package contain?
|
44 |
|
|
|
45 |
|
|
README this file
|
46 |
|
|
COPYING BSD license
|
47 |
|
|
Makefile Makefile for building the project
|
48 |
|
|
src source files
|
49 |
|
|
Makefile controls the build process on this level
|
50 |
|
|
fpga synthesizable Verilog (for running on the FPGA)
|
51 |
|
|
LogicProbe.v the logic analyzer proper
|
52 |
|
|
pc C source files (for running on the PC)
|
53 |
|
|
Makefile for building the analyzer programs
|
54 |
|
|
receive.c RS232 receiver program
|
55 |
|
|
display.c sample value viewer
|
56 |
|
|
tst test case, simulated as well as running on FPGAs
|
57 |
|
|
Makefile controls the build process on this level
|
58 |
|
|
sim-c simulation program in C
|
59 |
|
|
Makefile runs the simulation, generates reference data
|
60 |
|
|
lfsr128.c 128 bit LFSR
|
61 |
|
|
sim-v Verilog source to be simulated with Icarus Verilog
|
62 |
|
|
Makefile controls the simulation
|
63 |
|
|
top.v top-level simulation environment
|
64 |
|
|
top.cfg config file for GTK wave viewer
|
65 |
|
|
lfsr128.v same LFSR as in C, but now in Verilog
|
66 |
|
|
boards same LFSR as in sim-v, with LogicProbe attached,
|
67 |
|
|
configured for different FPGA evaluation boards
|
68 |
|
|
|
69 |
|
|
|
70 |
|
|
4) What else do I need?
|
71 |
|
|
|
72 |
|
|
If you want to run the tests, you need a Verilog simulator (I used
|
73 |
|
|
Icarus Verilog) and a VCD wave viewer (I used GTK-Wave). If you want
|
74 |
|
|
to use the analyzer in an FPGA, you must synthesize it (I used Xilinx
|
75 |
9 |
hellwig |
ISE 14.5). And you need a C compiler, preferably on a Linux system,
|
76 |
7 |
hellwig |
to receive and display the sample values.
|
77 |
|
|
|
78 |
|
|
|
79 |
|
|
5) Has the analyzer been used outside the test case?
|
80 |
|
|
|
81 |
|
|
Yes, it was instrumental in finding an error in my 32-bit CPU
|
82 |
|
|
which prohibited even the first instruction fetch from memory.
|
83 |
|
|
Simulation was of no help; the error didn't show up there. As
|
84 |
|
|
it turned out, I used initialization statements, which of course
|
85 |
|
|
couldn't be synthesized - so the start conditions inside the FPGA
|
86 |
|
|
differed from those of the simulation.
|
87 |
|
|
|
88 |
|
|
|
89 |
|
|
If you have any questions, write to
|
90 |
|
|
Hellwig.Geisse@mni.thm.de
|
91 |
|
|
|
92 |
|
|
Enjoy!
|
93 |
|
|
Hellwig
|
94 |
|
|
|