As a design gets bigger, simulation generates big data. As data gets bigger, so does the demand to post-process and to efficiently save big data on a disk.
Spectre has several features that output data in various formats. In this blog, the focus is on features such as circuit checks and asserts. In a big design, there could be thousands of violations from circuit checks and asserts. Each violation consists of a device name, node name and timing information. This is the leaf-level information (or data). There could be other violations with the same device name or node name, but with different timing. Storing such violation data in ASCII format consumes a lot of disk space because it writes the same device name or node name information multiple times.
SQLite stores this leaf-level information in separate tables. For example, device names are stored in a device table and node names are stored in a node table. SQLite uses the leaf-level tables to create a violation table by using a VIEW technology. VIEW is a pre-defined SQL query that links (also known as JOIN in database theory) several leaf-level tables to form a new higher-level table. This higher-level table has all the information that a user needs.
Spectre writes the SQLite database in the input.sqldb file, which can be found in a raw directory. In input.sqldb, all the tables whose names end with VIEW are higher-level tables. The following is an example of a VIEW from dyn_highz check. The dyn_highz_0View links leaf-level tables such as “dyn_highz_0”, “checker”, “node” and “analysis”.
In conclusion, big data stored in ASCII or SQLite format gives the same information to a user. However, SQLite stores the big data more efficiently on the disk, saving disk cost.
The demand to post-process big data is inevitable. With big data, users want to waive violations, sort violations and convert data to other formats.
Post-processing of the SQLite format is more efficient than the ASCII format. It can be done using scripts written in different programming languages, such as Perl, Python, and so on.
Post-processing of an ASCII format through a script is a two-step process:
Post-processing with SQLite removes the first step. Data is already stored in a structured way in an SQLite file. The script just opens the SQLite file and there is no need to parse as done in the ASCII format. This makes SQLite less sensitive to changes, such as addition of a column, a change in the location of a column or changes to the delimiter. In the ASCII format, such changes will break the script and require script updates. Therefore, post-processing of the SQLite format reduces the maintenance cost of a script.
There are several third-party tools that can read the SQLite format. The Linux operating system also has an SQLite reader called sqlite3. Type which sqlite3 in the Linux shell to see its path. It is usually located at /bin/sqlite3.
You may also contact your Cadence support AE for guidance.
For more information on Cadence products and services, visit www.cadence.com.
Spectre Tech Tips is a blog series aimed at exploring the capabilities and potential of Spectre®. In addition to providing insight into the useful features and enhancements in Spectre, this series broadcasts the voice of different bloggers and experts, who share their knowledge and experience on all things related to Spectre. Enter your email address in the Subscriptions box and click SUBSCRIBE NOW to receive notifications about