Technical context
The provided evidence documents AMD in the context of microprocessor verification methodology. In the article “Generating AMD microcode stimuli using VCS constraint solver,” Gregory Tang and Rajat Bahl are identified as authors from AMD, Inc., alongside Alex Wakefield and Padmaraj Ramachandran from Synopsys Inc. [C1]
Microcode-stimulus generation
The article states that increasing microprocessor-design complexity has reduced reliance on hand-written directed verification tests and increased use of automated random test generators. These generators create microcode test sequences intended to cover meaningful opcode and instruction-attribute values more efficiently. [C2]
The described AMD microcode-stimulus approach uses a hierarchical constrained-random method with the Synopsys VCS constraint solver. The stated goals are to accelerate generation, reduce memory consumption, improve distribution control, and bias generation toward corner cases. [C3]
SystemVerilog constraint modeling
The article describes SystemVerilog constraint-language constructs as a concise way to express legal combinations of microcode-instruction attributes and to control value distributions for individual fields. An initial prototype used a single class containing constraints for all opcodes, which addressed limitations of sequential field randomization. [C4]
Generator architecture
The opcode generator is described as a two-layer architecture:
- An upper layer implemented with a SystemVerilog random-sequence construct and weighted knobs to control high-level item distribution.
- A lower layer consisting of an opcode class randomized with additional constraints and weights supplied by the upper layer.
The tests provide weighted values that guide the instruction mix, and the constraint solver applies those weights to control opcode-type distribution. [C5]
Single-class randomization
The article identifies a single opcode class containing all opcodes as the simplest instruction-generation style. This structure is flexible because constraints can be applied across any data members in the opcode class, but it can slow randomization because the constraint solver must handle many random variables and a large constraint set. The cited opcode class contained approximately 100 random variables and 800 constraint equations. [C6]
Hierarchical and multi-class randomization
To reduce the randomization problem size, the article describes splitting the opcode class into multiple smaller classes. It also describes an object-oriented structure in which a base class contains global constraints shared by all opcodes, while subclasses define related opcode groups with similar constraints. Partitioning constraints hierarchically into smaller opcode groups is reported to have drastically reduced memory requirements and increased performance. [C7]