v64 setup version 0 1 0; /******************************************************************/ /* */ /* This is an example of a .msa file. It sets up a test on the */ /* lv512 tester (the one with the two-quadrant head). */ /* */ /******************************************************************/ /******************************************************************/ /* config section */ /******************************************************************/ /* This sets up the overall electrical specs */ /* for the tester. /* this is the highest resolution setting. It */ /* allows cycle times in the range 20ns-500ns */ /* with an increment of 4ns. */ /* The other choice for resolution is 20ns */ /* This allows a range of cycle times from */ /* 200ns - 5000ns in 40ns increments */ resolution = 500ps; /* this sets up the overall supply voltage and current */ /* Valid range is 1.00v-6.00v in 0.05v increments */ /* and 0.1a-2.0a in 0.1a increments */ dev_supply_voltage = 5.00v; dev_supply_current = 1.00a; /* The term supply is a secondary supply voltage */ /* Valid range is 0.5v-4.0v in 0.05v increments */ /* You probably won't use this unless you have */ /* signals that need to be terminated at a different */ /* voltage from the power supply */ term_supply_voltage = 3.00v; /* These are output and sense voltages labeled "u"*/ force_high_family_u = 2.40v; force_low_family_u = 0.50v; compare_family_u = 1.40v; /* These are output and sense voltages labeled "v" */ force_high_family_v = 4.50v; force_low_family_v = 0.50v; compare_family_v = 2.50v; /* The "v" setting is more appropriate for CMOS */ /* chips, "u" is for ttl. So, this is set for ttl */ /* since the 74F547 is a ttl part. For MOSIS chips */ /* this should use v. */ /* */ /* Note that this is correct for the lv512 */ /* (with the 2-quadrant head). If you're developing */ /* a .msa file for the lv514 (3 quadrant head), and */ /* a MOSIS CMOS chip, this line would be: */ /* v, v, v, v, v, v, v, v, v, v, v, v */ /* because 3 quadrants (12 sectors) are available. */ sector_logic_family = { u, u, u, u, , , , , u, u, u, u }; /******************************************************************/ /* group section */ /******************************************************************/ /* All signals should be defined as part of a group */ /* Each group has a radix and default settings for */ /* radix,force format, compare format, and phase */ /* */ /* Choices for radix are: hex, oct, and bin */ /* */ /* Choices for force_fmt are: */ /* dnrz_l - delayed nrz, leading edge */ /* dnrz_t - delyaed nrz, trailing edge */ /* r1 - return to 1 */ /* r0 - return to 0 */ /* ri - return to inhibit */ /* */ /* Choices for compare_fmt are: */ /* edge_l - leading edge */ /* edge_t - trailing edge */ /* window - compare during whole window */ /* */ /* Choices for phase are: quadrant-phase where */ /* quadrant is 0,1,2,3 and phase is A,B,C,D. */ /* The "lv514" tester (the one the 5710 DUT card */ /* is designed for) uses quadrants 1 and 2. */ /* Quadrant 1 = sectors 4,5,6,7 */ /* Quadrant 2 = sectors 8,9,A,B */ /* There are four phase per quadrant (A,B,C,D) */ /* So, a valid phase is 1A or 2C for example */ /* */ /* All chip signals need to be part of some group. */ /* Group names can be up to 14 characters long. */ /* Each group will be Force or Compare or Mask. */ /* Each group will be attached to one phase. */ /* The Force/Compare/Mask and phase definitions */ /* are in the template section... */ /* */ /* Signal names can be up to 16 characters */ /* */ /* The dut field of a signal is the pga chip pin number */ /* It's just a comment, so this can also be the pad */ /* number if that makes more sense to you. */ /* See the DUTmap.txt file for pad/pin/sec.chan map. */ /* */ /* The sector says what sector is connected to that pin */ /* (valid sectors for our DUT card are 4,5,6,7,8,9,A,B) */ /* the channel says what channel in that sector is */ /* connected to that pin (0-f in hex) */ /* */ /* address pins for the 74F547 */ group "a" { radix = bin; force_fmt = dnrz_l; compare_fmt = edge_t; phase = 0a; signal "a2" { dut = "17"; sector = 0h2; channel = 0he; } signal "a1" { dut = "7"; sector = 0h2; channel = 0hd; } signal "a0" { dut = "6"; sector = 0h2; channel = 0hc; } } /* Active-low output pins for the 74F547 */ group "q" { radix = bin; force_fmt = dnrz_l; compare_fmt = edge_t; phase = 0a; signal "q0~" { dut = "12"; sector = 0h3; channel = 0h6; } signal "q1~" { dut = "2"; sector = 0h3; channel = 0h7; } signal "q2~" { dut = "1"; sector = 0h3; channel = 0h8; } signal "q3~" { dut = "19"; sector = 0h3; channel = 0h9; } signal "q4~" { dut = "18"; sector = 0h3; channel = 0ha; } signal "q5~" { dut = "8"; sector = 0h3; channel = 0hb; } signal "q6~" { dut = "9"; sector = 0h3; channel = 0hc; } signal "q7~" { dut = "11"; sector = 0h3; channel = 0hd; } } /* enable pins for the 74F547 */ group "e" { radix = bin; force_fmt = dnrz_l; compare_fmt = edge_t; phase = 0a; signal "e1~" { dut = "15"; sector = 0h2; channel = 0hf; } signal "e2" { dut = "14"; sector = 0h3; channel = 0h0; } signal "e3" { dut = "13"; sector = 0h3; channel = 0h1; } } /* latch-enable pin for the 74F547 */ group "le" { radix = bin; force_fmt = dnrz_l; compare_fmt = edge_t; phase = 0a; signal "le" { dut = "16"; sector = 0h3; channel = 0h2; } } /******************************************************************/ /* template section */ /******************************************************************/ /* This section defines each template that the tester uses */ /* when performing a test. The tester can have 15 templates */ /* at the ready at any time. You can define more, but the test */ /* will pause before using those additional templates */ /* */ /* A template defines one set of operations on the groups. */ /* That is, for template_0 the cycle is set, the phases are */ /* defined (phase timing), and each of the groups is defined */ /* in terms of whether that group is force/compare/mask */ /* */ /* If you wans a group to be Force on one cycle, and Compare */ /* on another cycle (A bidirectional bus, for example), you'll */ /* need different templates. */ /* */ /* Each template can have different timing on cycle and */ /* all phases. */ /* */ /* You can "lock" a template into memory so it doesn't delay */ /* using the keyword locked after the template name */ /* for this example, you want to force the address, enable, */ /* and latch-enable, and see which output is asserted (low) */ template "template_0" { cycle = 100ns; phase 0a {delay = 0ns; width = 90ns;} group "a" { function = force; } group "q" { function = compare; } group "e" { function = force; } group "le" { function = force; } } /******************************************************************/ /* schmoo define section */ /******************************************************************/ /* */ /* This defines the schmoo. You can schmoo in 2 dimensions */ /* and defined what parameter you want to vary in each dimension. */ /* You can vary the voltages in the config section, or the */ /* times in the cycle or a phase of a template. */ /* */ /* If you don't want a schmoo, make both variables not_selected */ /* */ /* If you want to vary a voltage, your choices are: */ /* dev_supply_voltage */ /* term_supply_voltage */ /* force_high_voltage_[u,v] */ /* force_low_voltage_[u,v] */ /* compare_voltage_[u,v] */ /* dev_supply_current */ /* */ /* If you want to vary timing, your choices are: */ /* cycle_length (of a given template) */ /* phase_delay (delay time of a phase inside a template) */ /* phase_width (width of a phase inside a template) */ /* */ /* An example of each type follows: */ /* */ /* schmoo_var_x = dev_supply_voltage { */ /* from=1.00v; to=2.00v; by=0.10v; */ /* }; */ /* */ /* schmoo_var_y = phase_width { */ /* template="template_0"; */ /* clock_phase="0a"; */ /* from=20ns; to=150ns; by=10ns; */ /* }; */ /* */ schmoo_var_x = not_selected; schmoo_var_y = not_selected; /******************************************************************/ /* macro section */ /******************************************************************/ /* */ /* The lv500 allows macros in pattern definitions, but I've never */ /* looked at how to use them... */ macro macro_0() { * ""; } /******************************************************************/ /* define format info */ /******************************************************************/ /* */ /* This allows you to change how things look when they're */ /* printed to the screen. I've never messed with it... */ define_format { keymap = lf_cr_addline; } /******************************************************************/ /* pattern section */ /******************************************************************/ /* */ /* This is where you define your pattern data. Each line is a */ /* line of pattern data as it would appear on the lv500 display. */ /* Each line is terminated with a ";". A "*" in the first column */ /* means a comment. A template name means a "normal" pattern line.*/ /* I assume that the groups are listed in the order in which they */ /* are defined in the groups section. You can also use label, jmp,*/ /* and all the rest of the possible pattern lines from the lv500 */ /* pattern command set. */ /* */ /* This section must (I think) be the last section in the .msa */ /* file. */ pattern * "74F547 pattern data begins here"; "template_0" 000 01111111 011 1; "template_0" 001 10111111 011 1; "template_0" 010 11011111 011 1; "template_0" 011 11101111 011 1; "template_0" 100 11110111 011 1; "template_0" 101 11111011 011 1; "template_0" 110 11111101 011 1; "template_0" 111 11111110 011 1;