The <strong>Spec</strong>man Elite <strong>verification</strong> flow is very similar to the traditional flow, but is enhanced with theenabling technologies described above. As always, the input to the <strong>functional</strong> <strong>verification</strong> process isthe design spec (which defines the device’s architecture, <strong>functional</strong>ity, and protocols) and the interfacespec (which defines the target system and the protocols between the DUT and the rest of the system).These specs are used to develop the <strong>functional</strong> test plan, which defines the <strong>verification</strong> strategy, the testenvironment, and the <strong>functional</strong>ity and user scenarios that are to be tested. These tests should includetypical tests, stress tests, error tests, and corner-case tests.Once the test plan is defined, the test environment is developed. Existing code from previous projectswritten in Verilog, VHDL, or C can be used and linked into the system. The test environment includesstructs, which define the data to be generated, and spec constraints (from the interface specification,see Figure 5). <strong>Spec</strong> constraints constrain the generator to generate only legal values. The <strong>verification</strong>environment also includes the data and temporal checks (see Figure 6), which define how to checkprotocols and monitor the simulations <strong>for</strong> correct behavior.Interface spec: An instruction consists of an opcode representingthe instruction set, op1, which can access registers zero throughthree, and op2, which is a byte.type command: [ADD, ADDI, SUB, SUBI, JMP, JMPR, JMPC, CALL, RETURN];type register: [REG0, REG1, REG2, REG3];struct instruction {opcode: command;op1: register;op2: byte;};Interface spec: If the opcode is jump to an address in a register (JMPR),the second operand must be zero.extend instruction {keep (opcode == JMPR) => op2 == 0;};Figure 5: Struct and spec constraint from the interface specificationInterface spec: An acknowledge must be received after 3 to 5 cyclesof when a request is seen.expect rise ('top.req') => {[3..5]; rise('top.ack')};Note: signals that are quoted represent DUT signals from the HDL.Figure 6: Temporal check from the interface specificationAt this point, a few deterministic tests can be written and run to verify that the device is getting outof reset and per<strong>for</strong>ming the basic operations correctly. Once this is done, instead of writing manydeterministic tests and checking them, constraint-driven tests can now be generated. <strong>Spec</strong>man Elitetestbench automation can generate many tests, drive them into the device, and check that the deviceresponded according to the spec. But more importantly, the <strong>Spec</strong>man Elite system collects the <strong>functional</strong>coverage in<strong>for</strong>mation, showing what <strong>functional</strong>ity was actually exercised. With this in<strong>for</strong>mation, it isnow easy to know what <strong>functional</strong>ity has not been covered and to write more specific test constraints(see Figure 7) that target the generator to focus on the untested <strong>functional</strong>ity. This process ensures anefficient <strong>verification</strong> cycle and guarantees that each test adds <strong>new</strong> coverage.10
Functional test plan: Test the jump on carry (JMPC) opcode when thecarry bit is high.extend instruction {keep ('top.cpu.carry'== 1) => opcode == JMPC;};Note: signals that are quoted represent DUTsignals from the HDL.Figure 7: Test constraint from the <strong>functional</strong> test planCONCLUSIONThe ineffectiveness of current <strong>verification</strong> <strong>method</strong>ologies is apparent both in the proportion of timespent verifying a design versus the time spent designing it, and in the number of re-spins most designsrequire to become fully <strong>functional</strong>. The enormous resource expenditures required to verify today’scomplex designs will more than double in the next generation of complexity. Verification teams alreadyfind themselves backed into a no-win situation with only two options — miss the schedule by anindeterminate amount, or abort <strong>verification</strong> and risk an almost certain re-spin.<strong>Spec</strong>-<strong>based</strong> <strong>verification</strong> provides an effective composite of enabling technologies that automate resourceintensivemanual processes and establish qualitative metrics to ensure sufficient <strong>functional</strong> coverage.Using these technologies increases the quality of the design while reducing the resources needed toimplement a powerful <strong>verification</strong> <strong>method</strong>ology. Verification engineers report experiencing a two- tofour-fold reduction in the <strong>verification</strong> schedule, while achieving significantly higher <strong>verification</strong> quality.11