forked from GadgetFactory/OpenBench-Logic-Sniffer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
changelog.txt
executable file
·162 lines (117 loc) · 6.54 KB
/
changelog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
6/8/2011 Jawi's OLS Client 0.9.4
* 2011-03-17 Added updated device profiles for BusPirate, LogicShrimp and IrToy.
* Numerous Bug fixes
3/1/2011 Jawi's OLS Client 0.9.3 SP1
* February 7th, 2011, OLS version 0.9.3 SP1 released. This service pack fixes some severe bugs that crept into the last release. Use this release instead of the 0.9.3 release!;
* February 6th, 2011, OLS version 0.9.3 released. Major highlights: better support for RLE encoding, JTAG decoder tool added, generic device added;
3/1/2011 PIC Firmware 3.0
Fixes
*SPI speed increase in v2.6 tested ok with v3.xx Demon core, made permanent
*Updated to v3.0 to match v3.xx Demon core, this will help distinguish the full speed SPI versions for Demon core v3.xx from low-speed versions for SUMP core v2
*Fixed Winbond ROM read issue
3/1/2011 Release 3.07 of the Verilog "Demon" core.
Release7. Fixes problem with demux DDR captures causing bogus glitches, and issue with missed samples when armed. Also ensures the finish-now command works cleanly, and minor tweaks to the adv-trigger. Lastly, a full spec at last (see link)! Note: Please be sure to use Jawi's 0.9.3 release (or newer)!
2/8/2011 Release 3.06 of the Verilog "Demon" core.
-- Jan 25 Edit: Release3. Fixed SPI interface bug causing problems with PIC firmware 2.3.
-- Jan 28 Edit: Release4. Fixed Xilinx XISE to use correct speed grade. RLE now works!
-- Feb 2 Edit: Release5. Restored meta data, minor fixes to ensure ram writes what adv-trigger wants captured, & misc logic resets to known state. Documented the extra RLE-modes. Also, the verilog port is now on SVN!
-- Feb 8 Edit: Release6. Removed inclusive-RLE mode, since breaks older clients and is no longer used by Jawi's. Also fixed 24-bit RLE counts. Note: Please be sure to use Jawi's 0.9.3 release (or newer)!
I've been busy... A few weeks ago I ported the OLS FPGA into Verilog
(with which I'm more familiar), and started fixing things.
I design fpga's (big one's) for a living, so I quickly saw several areas
where the old design wasn't great.
My version meets timing trivially now. For fun I threw in a meta ROM &
fixed RLE for all combination's of channels. Even added that 0x05 command
to disable RLE mode.
I then decided to show you lot exactly what you can do with an fpga.
Too many remarks about difficulty in meeting timing, etc... :-)
My goal:
How much of a big HP 16550a timing logic analyzer can it handle?
Answer:
MOST of it. Really!
----
My version of the fpga uses 85% of the slices, keeps the legacy triggers,
meets timing easily (at 105Mhz), and adds:
Trigger Terms:
10 more 32-bit masked value comparisons.
2 range checks.
2 edge checks (rising, falling, both, neither).
2 36-bit timers (10ns to 600sec range).
States:
16 state FSM
Each state can use any combination (AND/NAND/OR/NOR/XOR/NXOR) of the
trigger terms for detecting a "hit" condition, and "else" condition, or
"capture" condition.
Each state also has a 20-bit hit count that must be reached before a full "hit"
occurs. Hit actions include setting trigger(run), starting/stopping timers,
and advancing to the next state.
The "else" condition lets you punt to another state. If neither hit or else
conditions match, then the state spins.
The "capture" condition lets you control what gets sampled into RAM,
until you flip the trigger.
Grab the 16550a user's guide (Google for "HP 16550a" - it's the first hit).
I think you'll be surprised how much got squeezed in.
The advanced trigger & basic trigger can be used in parallel, though you
lose the advanced trigger conditional "capture". Arming basic triggers
immediately starts filling the RAM.
----
Commands:
0x00 = Reset
0x01 = Arm basic trigger
0x02 = Query ID
0x04 = Query Meta Data*
0x05 = Disable RLE (fifo will fill at normal sampling speed)*
0x0F = Arm advanced trigger*
0x9E = Write trigger select*
0x9F = Write trigger data*
Additional flag register bits:
Bit 11: Internal test pattern mode (supplies data internally).
Bits[15:14]: RLE-Encoding Mode.
The RLE-Encoding modes are:
0 = Issue <values> & <rle-count> as pairs. Counts are exclusive of value. Backwards compatible.
1 = Same as mode 0.
2 = Periodic. <values> reissued approx every 256 <rle-count> fields.
3 = Unlimited. <values> can be followed by unlimited numbers of <rle-counts>.
----
A few details...
I use a low-level FPGA primitive called a LUT-RAM for most of this stuff.
An fpga is a large array of LUT's with a flop (optional) attached. LUT's
are 16-bit RAM's, and serially configured during bootstrap to describe
combinatorial logic. Think shift-register.
However... you can dynamically change the contents of LUT RAM's. Thus
a single LUT can evaluate 4 bits of indata directly.
I use them for the trigger terms, range checks -- in combination with a
fast-carry-chain primitive -- and edge checks. I also use them for
combining the results of the trigger terms.
Nothing is entirely free, and configuring this thing is... involved.
There is something like 10000 config bits. I've defined two long
commands, for selecting config addresses (0x9E) & writing data to the
trigger (0x9F). These pump data serially into the LUT RAM's.
As proof of concept, I revamped the legacy/basic triggers to use the
same LUT based logic. It remains fully client compatible, assuming said
client writes the data & masks for each trigger sequentially.
----
Compiling/Building:
Open "XISE\ols-verilog.xise" in Xilinx ISE. Click on "Generate Programming
File", and it should finish within a few minutes easily. In a tiny fpga like
this, meeting timing at high utilization -should- be easy.
The OLS had combinatorial logic between I/O & the first flops (big no-no in
an fpga), and was using negedge flops at the SRAM interface which cut the
timing budget in half. There was an asynchronous timing hazard between the
sampled data & core logic. Also various other places with smaller issues.
All fixed now.
Verilog Source Code on Gadget Factory SVN
----
Simulating:
I use Icarus-Verilog to simulate it. Scripts are provided to launch
simulations & view results in GTK.
----
I need to write a proper spec for this, but "testbench_adv.v" shows the
various options. The heavy lifter is in "trigger_adv.v"
My next big project is writing a client app to program the triggers.
In the meantime, I hope you like it! :-)
You can download the FPGA image to OLS using ols_loader (use *.MCS file), or my
Windows GUI Image downloader (use either MCS or BIT file). Available here:
-- Logic Sniffer Image Loader --
Enjoy!
-- IED