LIBPAT(3)

πŸ“¦ version 5.1.1, in fedora 43, fedora 44

🌸 LIBPAT β€” the PAT manual page, bestie edition πŸ’…

ok so before we even get into it: this whole thing lives in the cao-vlsi reference manual family of pages, and it's literally the glow-up guide to PAT. stay with me, it's giving very "foundational data structure" energy and we're gonna slay it together. 🫢


✨ ORIGIN ✨

This software is part of the ALLIANCE CAD SYSTEM, which was built by the ASIM</super> team at the LIP6 laboratory of UniversitΓ© Pierre et Marie CURIE, in Paris, France. πŸ‡«πŸ‡· iconic.


πŸ’– NAME πŸ’–

PAT β€” the Generic pattern data structure. yes bestie, that's the whole name. short, sweet, main character. πŸ‘‘


🌈 DESCRIPTION 🌈

So PAT is a generic data structure that supports vlsi concepts. Its whole thing is that it lets you represent a sequence of simulation patterns inside one data structure. no cap.

The goal of PAT β€” and this is the vibe check that matters β€” is to define one ad hoc single data structure (an object) where every concept you manipulate in pattern description has a well known, fixed meaning. So literally any tool that needs to get at simulation patterns can be built on top of it, using these structures. it's the foundation, the base layer, the blueprint. πŸ’…

For each object (data structure), there's a whole set of functions defined so you can add, delete, or access it. Here's the tea on where they live:

  • The low-level ones are defined in the low-level library libPat106.a.
  • Some other functions are higher level, and they live in the high-level library libPhl106.a.
  • There are also some parsers-drivers. A parser reads a pattern description file in a given format and builds up a complete PAT data base. A driver creates a text file in a given format from a PAT data base. A pat format parser-driver is available in the libPpt106.a library.

Pattern description envolves the following notions β€” and for further details bestie you gotta see pat(5):

  • input β€” port controlled by the user
  • output β€” signal or port observed by the user
  • initialization β€” forcing the value of a register
  • pattern sequence β€” list of values to be forced on inputs or to be checked as the result of the simulation on outputs

Now, the input-output list is represented by two data structures:

  • pagrp β€” holds informations relative to actual or virtual arraies
  • paiol β€” represents a one-bit input-output

Both of them are just simply chained lists. BUT β€” and this is the clever part β€” to make access to paiol structures more efficient, they're organized in a table. So a paiol can also be addressed using an offset. efficiency queen. ✨

Another whole group of data structures is used to represent a pattern:

  • paini β€” contains values to be forced into registers before processing the pattern
  • paev... wait no β€” an event (a modification of value) on an input-output is given by a paevt structure
  • papat β€” the third structure, which gathers all information concerning a pattern (including initializations β€” paini β€” and events β€” paevt)

A pacom is used to represent a comment. πŸ’¬

And finally β€” the moment we've all been waiting for β€” all these structures can be accessed through a unique structure, paseq, designed to represent a complete sequence of simulation patterns. she's the final boss and the group chat admin simultaneously. πŸ‘‘


πŸŽ€ ORGANIZATION πŸŽ€

In order to use PAT, you need concepts on the use of libraries. And since these libraries are under development, the code is subject to change. (yes, bestie, it's a moving target, we deal.)

To enable work, a static version of each library is always present for the user. Libraries and header files are suffixed by a number β€” that number is the library's version. The programmer can prefer to work with an earlier version of a library rather than the most recent one. However β€” and hear me out β€” it's recommended to adapt softwares to libraries as soon as possible, so you can spotlight potential compatibility problems before old libraries are removed. 🫢

A makefile is necessary for all PAT applications. This is required because any soft must be easily recompilable, and knowing the needed libraries for a PAT based program is not an easy matter. It can't be achieved by an other way, so do use makefile. periodt.

In terms of software organization, PAT is splitted into two libraries for the basic functions, a header file for structures and variable declarations, and β€” up to now β€” one parser-driver library for pat format.

It is to be noticed that library's version number is incremented when, at least, one function composing the library has been modified. Therefore, PAT libraries may evolve independently form each other. no drama, they just grow separately. 🌱

Here follows the list of the libraries and their contents:

  • libPat106.a:
    • pat_addpaseq
    • pat_addpagrp
    • pat_addpaiol
    • pat_addpapat
    • pat_addpaevt
    • pat_addpaini
    • pat_addpacom
    • pat_frepaini
    • pat_frepaiol
    • pat_frepacom
    • pat_frepapat
    • pat_frepaevt
    • pat_crtpaiol
  • libPhl106.a:
    • pat_debug
    • pat_getcount
  • libPpt106.a:
    • pat_lodpaseq
    • pat_savpaseq
    • pat_drvpat
    • pat_prspat

The libraries are organized in such a way that no cycle can appear through calls. It means that, if in a given library a function calls another function in another library, then none of the functions of this one does call any function that belongs to the first library. it's giving strictly one-way traffic, and honestly? respect. 🚦


🌟 EXAMPLE 🌟

In order to use PAT libraries, one needs something like this in its makefile:

HEADER = -I/labo/include
LIB = -L/labo/lib -lPat106 -lPhl106 -lPpt106 -lMut315

copy that exactly bestie, don't get creative with the flags. πŸ’–


πŸ‘€ SEE ALSO πŸ‘€

go read those too, they're the supporting cast and they ate. πŸ”₯


😭 BUG REPORT 😭

This tool is under development at the ASIM department of the LIP6 laboratory.

We need your feedback to improve documentation and tools. fr fr, tell us what's broken, we're literally asking. πŸ™ˆ


and that's the whole page, bestie β€” written by ASIM/LIP6, dated October 1, 1997, and filed under LIBPAT(3) in the cao-vlsi reference manual. yes it's old, yes it still serves. mwah. πŸ’‹βœ¨πŸ¦‹