-
Notifications
You must be signed in to change notification settings - Fork 0
schreibubi/tolka
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Tolka, Version 0.15.1 (Codename: "Poing", SVN: $Rev: 121 $)
Written by Jörg Werner
(C) 2009 Jörg Werner
What is it?
-----------
The Tolka is a tool which allows you to
easily interpret the contents of any kind of bitstream (i.e. sequence of zeros and ones).
Why?
----
For analysis purposes we can read out different kind of information (i.e. Chip-Id,
e-fuse strings, temperature, seti-chains) from our DRAM-chips. This information is
typically obtained from the device by reading a sequence of bits (the "bitstream")
which is output by the device. In a second step this bitstream is typically converted
into a human readable form. For this a wide range of tools is used. On the one side there
are tools which can only decode one type of bitstream, because the layout of the bitstream
is hard-coded in the source-code. But these tools are very fast, efficient and due to this
are typically used in production. On the other side there are custom made Excel-Sheets
which are easy to use and can be adapted to any bitstream layout. But Excel can not be easily
used to process a huge amount of bitstreams and the creation and maintanance of these Excel
sheets is complex and error prone.
The Tolka tries to cover the middle ground. It is a command line tool
(but I'm thinking of adding a graphical interface) so it is easy to process a huge amount
if bitstreams. It is also completely configurable regarding how to interpret a bitstream, so it
can interpret bitstreams of any kind. The configuration is done through a config-file with a
simple syntax, which reflects the layout of the bitstream. So any kind of bitstream can be analyzed
easily (e.g how about interpreting UFDDR files?)! The Tolka can read the
bitstream data from different input formats, plain human readable formats (text file with zeros
and ones in each line) and common binary formats (BE chipid format, BE generic bitstream format,
MOD e-fuse format) are supported.
Okay, I want to try it!
-----------------------
To run the Tolka you need to have at least Java 5 installed. Then unpack the zip-file and run
the following command:
java -jar tolka.jar TestData/efrwdata.dat ConfigFiles/efuse.tolka
Usage:
------
java -jar tolka.jar input-file config-file
Possible options:
-----------------
-f,--format <format> format, either plain or chipid
-h,--help help
-v,--version version
-d,--dclog output results in dclog format
File formats supported:
-----------------------
The tool tries to autodetect the input file format if possible. For a plain file or the BE chipid
format this is not possible, so you need to specify the format by using the --format switch.
Supported formats in this version:
- BE chipid binary format, i.e. cbcsrc1.dat
- BE generic bitstream format used typically for e-fuse readout or ASDAP data, i.e. bs.dat or ef.dat
- MOD e-fuse binary format, i.e. efrwdata.dat
- plain format, each line contains one bitstring consisting out of zeros and ones, each line
starts with the LSB and ends with the MSB (see sample in TestData/plain.txt).
Config-File format:
-------------------
Samples of different config files can be found in the Config-Files directory.
Lets explain the format using a short example:
In the config file you define different rules (think of them as subroutines) which are applied
during the interpretation of the bitstream. The first rule in the config-file is taken as
starting rule:
st[var] {
var[0..3] = ( %000 : print "Zero";
| #1 : print "One";
| 2,3 : print "two or three";
| 4..6,7 : println "between 4 and 7";
| default : subrule1[var[10..0]];);
The bitstream value is passed to the variable declared in the rectangular brackets after the rule
name. The rule body (the part within the curly braces) can contain one or more statments, which are
terminated by semicolons. In the example above you see just one so called "switch" statement.
This switch statement is very similar to the switch statement found for example in Java, C++. The
var[0..3] on the left hand side of the equal sign, specifies the variable value (and in
rectangular brackets what bits of this variable, see below) which is used
for the decision. The different "cases" are specified within round brackets separated by "|". The
values for which each case should trigger are specified before the colon. After the colon the
statements to execute are listed. Values can be specified in decimal, binary (%) and hex (#)
notation. As in other languages there is also a default case.
Up to now we skipped over the bit-selections possible for each variable. In the rectangular
brackets after each variable only certain bits of this variable can be selected.
More than one bit can be selected by using commas, or you can specify ranges by using the
".." notation. Complex example: var[0,5,3,11..40,10..5], you can even reverse the direction of
the bits!
Possible statements are print, println and calls to other rules. A call to another rule is done
by stating the name of the rule and inside the rectangular brackets the variable to pass to the
subrule.
subrule1[var[1..8]];
subrule2[var[9..12]];
Unconditionally call a subrule
var[5] = ( 0: println ", Enable Half good option";
| 1: println ", Half good option disabled";
);
Another switch statment.
}
subrule1[add] {
add[0] = ( 0: print "Column: #" + hex(add[0..3]*5) + "Bank: %" + bin(add[4,5]);
| 1: print "disabled!";
);
}
In this subrule you see the usage of the hex and bin function to convert a number to a hex and
bin string. Additionally you see that calculations are possible.
A more detailed specification of the config-file syntax will be published in one of the next
versions.
Contact:
--------
Joerg Werner
Changelog:
----------
0.1: initial release
0.15: added dclog output functionality, bug-fixes
About
Automatically exported from code.google.com/p/tolka
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published