Rosemary - the Circuit Description and Simulation Package
August 22, 1984
DF file: /indigo/Rosemary/®/Rosemary.df (where the best ® is currently 2.5)
Documentation: see a maintainer or user
Maintainers: Spreitzer, Barth
Users (?): RosemaryUsers^.pa
The name "Rosemary" currently is applied to two (too) well integrated packages. One is for structural and behavioral descriptions of circuits. The other simulates such descriptions.
Rosemary descriptions are hierarchical, and use a type - instance paradigm. For every cell type, two descriptions may be independently given or elided: a structural description, and a behavioral description.
A structural description of a cell type says what cell instances such a type contains, and how they are interconnected. In the kernal, a structural description is a Cedar procedure that makes callbacks to describe each component. Other ways of describing structure can be accommodated by translating into Cedar.
A behavioral description of a cell type says how an instance of that type interacts with its environment, in terms the cell's ports. Again, in the kernal a behavioral description is a Cedar procedure, and it is hoped that other kinds of behavioral descriptions can be translated into procedures.
Making all the Cedar code necessary for a Rosemary circuit description is somewhat tedious, and somewhat stylized. Thus a new language was born, which provides a veneer of convenience on top of the kernal language. There is a translator from that language into the kernal language.
The simulator works at two levels: the switch level, and a simple unidirectional level. The switch level is Bryant's algorithm, adapted to work with general leaf cells (which represent, but aren't, collections of transistors). The unidirectional level uses an extensible "abstract" (a.k.a. "object oriented") approach to what kinds of values flow through the interconnection nets, and thus is useful for any level of abstraction at or above the Boolean.