program/prb1.rb in origen_testers-0.9.9 vs program/prb1.rb in origen_testers-0.10.0

- old
+ new

@@ -1,219 +1,219 @@ -# An instance of the interface is -# passed in here, iterators and other -# argument passing will be supported -# similar to Pattern.create. -Flow.create interface: 'OrigenTesters::Test::Interface' do - - self.resources_filename = 'prb1' - - # Instantiate tests via the - # interface - func 'program_ckbd', :tname => 'PGM_CKBD', :tnum => 1000, :bin => 100, :soft_bin => 1100 - func 'margin_read1_ckbd' - - # Control the build process based on - # the current target - if $dut.has_margin0_bug? - func 'normal_read_ckbd' - else - func 'margin_read0_ckbd' - end - - # Include a sub flow, example of - # parameter passing - import 'erase', :pulses => 6 - - # Render an ERB template, or raw - # text file - if $tester.j750? - flow.render 'templates/j750/vt_flow', :include_tifr => true - end - - log 'Should be v1' - func :program_ckbd - log 'Should be v2' - func :program_ckbd, :duration => :dynamic - log 'Should be v1' - func :program_ckbd - log 'Should be v2' - func :program_ckbd, :duration => :dynamic - - log 'Should be a v1 test instance group' - func :program_ckbd, :by_block => true - log 'Should be a v2 test instance group' - func :program_ckbd, :by_block => true, :duration => :dynamic - log 'Should be a v1 test instance group' - func :program_ckbd, :by_block => true - log 'Should be a v2 test instance group' - func :program_ckbd, :by_block => true, :duration => :dynamic - - # Test job conditions - func :p1_only_test, :if_job => :p1 - if_job [:p1, :p2] do - func :p1_or_p2_only_test - end - func :not_p1_test, :unless_job => :p1 - func :not_p1_or_p2_test, :unless_job => [:p1, :p2] - unless_job [:p1, :p2] do - func :another_not_p1_or_p2_test - end - - log 'Verify that a test with an external instance works' - por - - log 'Verify that a request to use the current context works' - func :erase_all, :if_job => :p1 # Job should be P1 - func :erase_all, :context => :current # Job should be P1 - unless_job :p2 do - func :erase_all, :context => :current # Job should be P1 - func :erase_all # Job should be !P2 - end - - # Deliver an initial erase pulse - func :erase_all - - # Deliver additional erase pulses as required until it verifies, maximum of 5 additional pulses - 5.times do |x| - # Assign a unique id attribute to each verify so that we know which one we are talking about when - # making other tests dependent on it. - # When Origen sees the if_failed dependency on a future test it will be smart enough to inhibit the binning - # on this test without having to explicitly declare that. - func :margin_read1_all1, :id => "erase_vfy_#{x}" - # Run this test only if the given verify failed - func :erase_all, :if_failed => "erase_vfy_#{x}" - end - - # A final verify to set the binning - func :margin_read1_all1 - - log 'Test if enable' - func :erase_all, :if_enable => 'do_erase' - - if_enable 'do_erase' do - func :erase_all - end - - log 'Test unless enable' - func :erase_all, :unless_enable => 'no_extra_erase' - - unless_enable 'no_extra_erase' do - func :erase_all - func :erase_all - end - - func :erase_all - func :erase_all - - log 'Test if_passed' - func :erase_all, :id => 'erase_passed_1' - func :erase_all, :id => 'erase_passed_2' - - func :margin_read1_all1, :if_passed => 'erase_passed_1' - if_passed 'erase_passed_2' do - func :margin_read1_all1 - end - - log 'Test unless_passed' - func :erase_all, :id => 'erase_passed_3' - func :erase_all, :id => 'erase_passed_4' - - func :margin_read1_all1, :unless_passed => 'erase_passed_3' - unless_passed 'erase_passed_4' do - func :margin_read1_all1 - end - - log 'Test if_failed' - func :erase_all, :id => 'erase_failed_1' - func :erase_all, :id => 'erase_failed_2' - - func :margin_read1_all1, :if_failed => 'erase_failed_1' - if_failed 'erase_failed_2' do - func :margin_read1_all1 - end - - log 'Test unless_failed' - func :erase_all, :id => 'erase_failed_3' - func :erase_all, :id => 'erase_failed_4' - - func :margin_read1_all1, :unless_failed => 'erase_failed_3' - unless_failed 'erase_failed_4' do - func :margin_read1_all1 - end - - log 'Test if_ran' - func :erase_all, :id => 'erase_ran_1' - func :erase_all, :id => 'erase_ran_2' - - func :margin_read1_all1, :if_ran => 'erase_ran_1' - if_ran 'erase_ran_2' do - func :margin_read1_all1 - end - - log 'Test unless_ran' - func :erase_all, :id => 'erase_ran_3' - func :erase_all, :id => 'erase_ran_4' - - func :margin_read1_all1, :unless_ran => 'erase_ran_3' - unless_ran 'erase_ran_4' do - func :margin_read1_all1 - end - - log 'Verify that job context wraps import' - if_job :fr do - import 'erase' - end - - log 'Verify that job context wraps enable block within an import' - if_job :fr do - import 'additional_erase' - import 'additional_erase', :force => true - end - - log 'Verify that flow.cz works...' - func :margin_read1_all1, :pin_levels => :cz, :cz_setup => 'vbplus_sweep' - - log 'Verify that flow.cz works with enable words' - if_enable 'usb_xcvr_cz' do - func :xcvr_fs_vilvih, cz_setup: 'usb_fs_vil_cz' - func :xcvr_fs_vilvih, cz_setup: 'usb_fs_vih_cz' - end - - func :xcvr_fs_vilvih, cz_setup: 'usb_fs_vil_cz', if_enable: 'usb_xcvr_cz' - func :xcvr_fs_vilvih, cz_setup: 'usb_fs_vih_cz', if_enable: 'usb_xcvr_cz' - - log 'Verify that MTO template works...' - mto_memory :mto_read1_all1 - - if tester.uflex? - log 'import statement' - import 'components/temp' - - log 'direct call' - - meas :bgap_voltage_meas, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45 - meas :bgap_voltage_meas1 - end - - if tester.j750? - meas :lo_voltage, tnum: 1150, bin: 95, soft_bin: 5 - meas :hi_voltage, pins: :hi_v, tnum: 1160, bin: 96, soft_bin: 6 - meas :ps_leakage, pins: :power, tnum: 1170, bin: 97, soft_bin: 6 - end - - log 'Speed binning example bug from video 5' - group "200Mhz Tests", id: :g200 do - test :test200_1 - test :test200_2 - test :test200_3 - end - - group "100Mhz Tests", if_failed: :g200, id: :g100 do - test :test100_1, bin: 5 - test :test100_2, bin: 5 - test :test100_3, bin: 5 - end - - pass 2, if_ran: :g100 - - pass 1, description: "Good die!", softbin: 1 -end +# An instance of the interface is +# passed in here, iterators and other +# argument passing will be supported +# similar to Pattern.create. +Flow.create interface: 'OrigenTesters::Test::Interface' do + + self.resources_filename = 'prb1' + + # Instantiate tests via the + # interface + func 'program_ckbd', :tname => 'PGM_CKBD', :tnum => 1000, :bin => 100, :soft_bin => 1100 + func 'margin_read1_ckbd' + + # Control the build process based on + # the current target + if $dut.has_margin0_bug? + func 'normal_read_ckbd' + else + func 'margin_read0_ckbd' + end + + # Include a sub flow, example of + # parameter passing + import 'erase', :pulses => 6 + + # Render an ERB template, or raw + # text file + if $tester.j750? + flow.render 'templates/j750/vt_flow', :include_tifr => true + end + + log 'Should be v1' + func :program_ckbd + log 'Should be v2' + func :program_ckbd, :duration => :dynamic + log 'Should be v1' + func :program_ckbd + log 'Should be v2' + func :program_ckbd, :duration => :dynamic + + log 'Should be a v1 test instance group' + func :program_ckbd, :by_block => true + log 'Should be a v2 test instance group' + func :program_ckbd, :by_block => true, :duration => :dynamic + log 'Should be a v1 test instance group' + func :program_ckbd, :by_block => true + log 'Should be a v2 test instance group' + func :program_ckbd, :by_block => true, :duration => :dynamic + + # Test job conditions + func :p1_only_test, :if_job => :p1 + if_job [:p1, :p2] do + func :p1_or_p2_only_test + end + func :not_p1_test, :unless_job => :p1 + func :not_p1_or_p2_test, :unless_job => [:p1, :p2] + unless_job [:p1, :p2] do + func :another_not_p1_or_p2_test + end + + log 'Verify that a test with an external instance works' + por + + log 'Verify that a request to use the current context works' + func :erase_all, :if_job => :p1 # Job should be P1 + func :erase_all, :context => :current # Job should be P1 + unless_job :p2 do + func :erase_all, :context => :current # Job should be P1 + func :erase_all # Job should be !P2 + end + + # Deliver an initial erase pulse + func :erase_all + + # Deliver additional erase pulses as required until it verifies, maximum of 5 additional pulses + 5.times do |x| + # Assign a unique id attribute to each verify so that we know which one we are talking about when + # making other tests dependent on it. + # When Origen sees the if_failed dependency on a future test it will be smart enough to inhibit the binning + # on this test without having to explicitly declare that. + func :margin_read1_all1, :id => "erase_vfy_#{x}" + # Run this test only if the given verify failed + func :erase_all, :if_failed => "erase_vfy_#{x}" + end + + # A final verify to set the binning + func :margin_read1_all1 + + log 'Test if enable' + func :erase_all, :if_enable => 'do_erase' + + if_enable 'do_erase' do + func :erase_all + end + + log 'Test unless enable' + func :erase_all, :unless_enable => 'no_extra_erase' + + unless_enable 'no_extra_erase' do + func :erase_all + func :erase_all + end + + func :erase_all + func :erase_all + + log 'Test if_passed' + func :erase_all, :id => 'erase_passed_1' + func :erase_all, :id => 'erase_passed_2' + + func :margin_read1_all1, :if_passed => 'erase_passed_1' + if_passed 'erase_passed_2' do + func :margin_read1_all1 + end + + log 'Test unless_passed' + func :erase_all, :id => 'erase_passed_3' + func :erase_all, :id => 'erase_passed_4' + + func :margin_read1_all1, :unless_passed => 'erase_passed_3' + unless_passed 'erase_passed_4' do + func :margin_read1_all1 + end + + log 'Test if_failed' + func :erase_all, :id => 'erase_failed_1' + func :erase_all, :id => 'erase_failed_2' + + func :margin_read1_all1, :if_failed => 'erase_failed_1' + if_failed 'erase_failed_2' do + func :margin_read1_all1 + end + + log 'Test unless_failed' + func :erase_all, :id => 'erase_failed_3' + func :erase_all, :id => 'erase_failed_4' + + func :margin_read1_all1, :unless_failed => 'erase_failed_3' + unless_failed 'erase_failed_4' do + func :margin_read1_all1 + end + + log 'Test if_ran' + func :erase_all, :id => 'erase_ran_1' + func :erase_all, :id => 'erase_ran_2' + + func :margin_read1_all1, :if_ran => 'erase_ran_1' + if_ran 'erase_ran_2' do + func :margin_read1_all1 + end + + log 'Test unless_ran' + func :erase_all, :id => 'erase_ran_3' + func :erase_all, :id => 'erase_ran_4' + + func :margin_read1_all1, :unless_ran => 'erase_ran_3' + unless_ran 'erase_ran_4' do + func :margin_read1_all1 + end + + log 'Verify that job context wraps import' + if_job :fr do + import 'erase' + end + + log 'Verify that job context wraps enable block within an import' + if_job :fr do + import 'additional_erase' + import 'additional_erase', :force => true + end + + log 'Verify that flow.cz works...' + func :margin_read1_all1, :pin_levels => :cz, :cz_setup => 'vbplus_sweep' + + log 'Verify that flow.cz works with enable words' + if_enable 'usb_xcvr_cz' do + func :xcvr_fs_vilvih, cz_setup: 'usb_fs_vil_cz' + func :xcvr_fs_vilvih, cz_setup: 'usb_fs_vih_cz' + end + + func :xcvr_fs_vilvih, cz_setup: 'usb_fs_vil_cz', if_enable: 'usb_xcvr_cz' + func :xcvr_fs_vilvih, cz_setup: 'usb_fs_vih_cz', if_enable: 'usb_xcvr_cz' + + log 'Verify that MTO template works...' + mto_memory :mto_read1_all1 + + if tester.uflex? + log 'import statement' + import 'components/temp' + + log 'direct call' + + meas :bgap_voltage_meas, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45 + meas :bgap_voltage_meas1 + end + + if tester.j750? + meas :lo_voltage, tnum: 1150, bin: 95, soft_bin: 5 + meas :hi_voltage, pins: :hi_v, tnum: 1160, bin: 96, soft_bin: 6 + meas :ps_leakage, pins: :power, tnum: 1170, bin: 97, soft_bin: 6 + end + + log 'Speed binning example bug from video 5' + group "200Mhz Tests", id: :g200 do + test :test200_1 + test :test200_2 + test :test200_3 + end + + group "100Mhz Tests", if_failed: :g200, id: :g100 do + test :test100_1, bin: 5 + test :test100_2, bin: 5 + test :test100_3, bin: 5 + end + + pass 2, if_ran: :g100 + + pass 1, description: "Good die!", softbin: 1 +end