From b5e35f20a4e144f909ed61023655e664990dba53 Mon Sep 17 00:00:00 2001 From: info-rchitect Date: Wed, 6 May 2020 12:22:45 -0500 Subject: [PATCH 01/10] added support for v93k for loop --- .../smartest_based_tester/base/flow.rb | 16 ++++++++++++++++ program/flow_control.rb | 6 ++++++ 2 files changed, 22 insertions(+) diff --git a/lib/origen_testers/smartest_based_tester/base/flow.rb b/lib/origen_testers/smartest_based_tester/base/flow.rb index ff3ee2c3..3ed111c7 100755 --- a/lib/origen_testers/smartest_based_tester/base/flow.rb +++ b/lib/origen_testers/smartest_based_tester/base/flow.rb @@ -264,6 +264,22 @@ def capture_lines @lines_buffer.pop end + def on_loop(node) + loop_start = node.children[0] + loop_end = node.children[1] + loop_inc = node.children[2] + loop_flag = node.children[3] if node.children[3].is_a?(String) + loop_end_str = loop_flag.nil? ? loop_end.to_s : "@#{loop_flag}" + line "for @index = 0; @index < #{loop_end_str} ; @index = @index + 1; do" + line "test_number_loop_increment = 0" + line "{" + @indent += 1 + children_start_index = loop_flag.nil? ? 3 : 4 + process_all(node.children[children_start_index..-1]) + @indent -= 1 + line "}" + end + def on_test(node) test_suite = node.find(:object).to_a[0] if test_suite.is_a?(String) diff --git a/program/flow_control.rb b/program/flow_control.rb index d7570071..7306e213 100644 --- a/program/flow_control.rb +++ b/program/flow_control.rb @@ -521,4 +521,10 @@ func :read1, id: :ta5, bin: 10, number: 60000 func :erase1, if_all_sites_passed: :ta5, bin: 12, number: 60010 end + + if tester.v93k? + loop from: 1, to: 5, step: 1, var: "loop" do + func :loop_check + end + end end From 3bfdc0caeb962aa9489f9086d0e485134815a042 Mon Sep 17 00:00:00 2001 From: info-rchitect Date: Wed, 6 May 2020 12:27:49 -0500 Subject: [PATCH 02/10] fixed increment hardcode --- lib/origen_testers/smartest_based_tester/base/flow.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/origen_testers/smartest_based_tester/base/flow.rb b/lib/origen_testers/smartest_based_tester/base/flow.rb index 3ed111c7..9db245a5 100755 --- a/lib/origen_testers/smartest_based_tester/base/flow.rb +++ b/lib/origen_testers/smartest_based_tester/base/flow.rb @@ -270,7 +270,7 @@ def on_loop(node) loop_inc = node.children[2] loop_flag = node.children[3] if node.children[3].is_a?(String) loop_end_str = loop_flag.nil? ? loop_end.to_s : "@#{loop_flag}" - line "for @index = 0; @index < #{loop_end_str} ; @index = @index + 1; do" + line "for @index = 0; @index < #{loop_end_str} ; @index = @index + #{loop_inc}; do" line "test_number_loop_increment = 0" line "{" @indent += 1 From 70f1a574e01ec3d75b01eb424ade4aeab3ed087e Mon Sep 17 00:00:00 2001 From: info-rchitect Date: Wed, 6 May 2020 12:35:44 -0500 Subject: [PATCH 03/10] updated references --- approved/v93k/flow_control.aiv | 1 + .../mfh.testflow.group/flow_control.tf | 19 +++++++++++++++++++ approved/v93k/vectors/flow_control.pmfl | 1 + .../OrigenTesters/flows/FLOW_CONTROL.flow | 12 ++++++++++++ .../limits/Main.FLOW_CONTROL_Tests.csv | 1 + 5 files changed, 34 insertions(+) diff --git a/approved/v93k/flow_control.aiv b/approved/v93k/flow_control.aiv index e8f7c4b0..16cf7c64 100644 --- a/approved/v93k/flow_control.aiv +++ b/approved/v93k/flow_control.aiv @@ -44,6 +44,7 @@ lev2_test5 .tmf long_test .tmf long_test1 .tmf long_test2 .tmf +loop_check .tmf nt1 .tmf nt2 .tmf nt3 .tmf diff --git a/approved/v93k/testflow/mfh.testflow.group/flow_control.tf b/approved/v93k/testflow/mfh.testflow.group/flow_control.tf index 92ad583f..cfc88b27 100644 --- a/approved/v93k/testflow/mfh.testflow.group/flow_control.tf +++ b/approved/v93k/testflow/mfh.testflow.group/flow_control.tf @@ -252,6 +252,9 @@ tm_172: tm_173: "output" = "None"; "testName" = "Functional"; +tm_174: + "output" = "None"; + "testName" = "Functional"; tm_18: "output" = "None"; "testName" = "Functional"; @@ -693,6 +696,8 @@ tm_172: "Functional" = "":"NA":"":"NA":"":"":""; tm_173: "Functional" = "":"NA":"":"NA":"":"":""; +tm_174: + "Functional" = "":"NA":"":"NA":"":"":""; tm_18: "Functional" = "":"NA":"":"NA":"":"":""; tm_19: @@ -1044,6 +1049,8 @@ tm_172: testmethod_class = "ac_tml.AcTest.FunctionalTest"; tm_173: testmethod_class = "ac_tml.AcTest.FunctionalTest"; +tm_174: + testmethod_class = "ac_tml.AcTest.FunctionalTest"; tm_18: testmethod_class = "ac_tml.AcTest.FunctionalTest"; tm_19: @@ -1481,6 +1488,13 @@ long_test_BEA7F3B: override_testf = tm_31; site_control = "parallel:"; site_match = 2; +loop_check_BEA7F3B: + local_flags = output_on_pass, output_on_fail, value_on_pass, value_on_fail, per_pin_on_pass, per_pin_on_fail; + override = 1; + override_seqlbl = "loop_check"; + override_testf = tm_174; + site_control = "parallel:"; + site_match = 2; nt1_BEA7F3B: local_flags = output_on_pass, output_on_fail, value_on_pass, value_on_fail, per_pin_on_pass, per_pin_on_fail; override = 1; @@ -3764,6 +3778,11 @@ test_flow else { } + for @index = 0; @index < @loop ; @index = @index + 1; do + test_number_loop_increment = 0 + { + run(loop_check_BEA7F3B); + } }, open,"Flow Control Testing","Flow to exercise the Flow Control API" diff --git a/approved/v93k/vectors/flow_control.pmfl b/approved/v93k/vectors/flow_control.pmfl index 2b83ca67..d378322e 100644 --- a/approved/v93k/vectors/flow_control.pmfl +++ b/approved/v93k/vectors/flow_control.pmfl @@ -39,6 +39,7 @@ lev2_test5.binl.gz long_test.binl.gz long_test1.binl.gz long_test2.binl.gz +loop_check.binl.gz nt1.binl.gz nt2.binl.gz nt3.binl.gz diff --git a/approved/v93k_smt8/OrigenTesters/flows/FLOW_CONTROL.flow b/approved/v93k_smt8/OrigenTesters/flows/FLOW_CONTROL.flow index edde488b..4c0c05d4 100644 --- a/approved/v93k_smt8/OrigenTesters/flows/FLOW_CONTROL.flow +++ b/approved/v93k_smt8/OrigenTesters/flows/FLOW_CONTROL.flow @@ -167,6 +167,13 @@ flow FLOW_CONTROL { testName = "Functional"; } + suite loop_check calls ac_tml.AcTest.FunctionalTest { + measurement.pattern = setupRef(OrigenTesters.patterns.loop_check); + measurement.specification = setupRef(OrigenTesters.specs.specs.Nominal); + output = "None"; + testName = "Functional"; + } + suite nt1 calls ac_tml.AcTest.FunctionalTest { measurement.pattern = setupRef(OrigenTesters.patterns.nt1); measurement.specification = setupRef(OrigenTesters.specs.specs.Nominal); @@ -1751,5 +1758,10 @@ flow FLOW_CONTROL { else { } + for @index = 0; @index < @loop ; @index = @index + 1; do + test_number_loop_increment = 0 + { + loop_check.execute(); + } } } diff --git a/approved/v93k_smt8/OrigenTesters/limits/Main.FLOW_CONTROL_Tests.csv b/approved/v93k_smt8/OrigenTesters/limits/Main.FLOW_CONTROL_Tests.csv index 0aef8d8a..b9b7e842 100644 --- a/approved/v93k_smt8/OrigenTesters/limits/Main.FLOW_CONTROL_Tests.csv +++ b/approved/v93k_smt8/OrigenTesters/limits/Main.FLOW_CONTROL_Tests.csv @@ -208,3 +208,4 @@ SMALL.test2,test2,54110,test2,0,0,, test_3lt5,test_3lt5,55000,test_3lt5,0,0,, test_5gt4_or_4gt5,test_5gt4_or_4gt5,55002,test_5gt4_or_4gt5,0,0,, test_5gt4_and_4gt3,test_5gt4_and_4gt3,55004,test_5gt4_and_4gt3,0,0,, +loop_check,loop_check,0,loop_check,0,0,, From 54a4580d489386df7c86cbd0abc989ac54c8ce3c Mon Sep 17 00:00:00 2001 From: info-rchitect Date: Wed, 6 May 2020 12:46:28 -0500 Subject: [PATCH 04/10] added second loop without variable passed --- program/flow_control.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/program/flow_control.rb b/program/flow_control.rb index 7306e213..16c3d713 100644 --- a/program/flow_control.rb +++ b/program/flow_control.rb @@ -524,7 +524,10 @@ if tester.v93k? loop from: 1, to: 5, step: 1, var: "loop" do - func :loop_check + func :loop_check, test_number: 60099 + end + loop from: 1, to: 5, step: 1 do + func :loop_check_no_var, test_number: 60099 end end end From 374648f7d0706693d17459a2fec21a3de3a96cad Mon Sep 17 00:00:00 2001 From: info-rchitect Date: Wed, 6 May 2020 12:51:18 -0500 Subject: [PATCH 05/10] updated approved --- approved/v93k/flow_control.aiv | 1 + approved/v93k/referenced.list | 34 ++----------------- .../mfh.testflow.group/flow_control.tf | 21 ++++++++++++ approved/v93k/vectors/flow_control.pmfl | 1 + 4 files changed, 25 insertions(+), 32 deletions(-) diff --git a/approved/v93k/flow_control.aiv b/approved/v93k/flow_control.aiv index 16cf7c64..c7ab9d80 100644 --- a/approved/v93k/flow_control.aiv +++ b/approved/v93k/flow_control.aiv @@ -45,6 +45,7 @@ long_test .tmf long_test1 .tmf long_test2 .tmf loop_check .tmf +loop_check_no_var .tmf nt1 .tmf nt2 .tmf nt3 .tmf diff --git a/approved/v93k/referenced.list b/approved/v93k/referenced.list index 5f58120c..67e0b72d 100644 --- a/approved/v93k/referenced.list +++ b/approved/v93k/referenced.list @@ -1,21 +1,10 @@ # Main patterns -another_not_p1_or_p2_test -bitcell_iv_0 -bitcell_iv_1 -bitcell_iv_2 -bitmap_all0 -cc_test_0 -cc_test_1 -cc_test_2 cold_test cz_test1 cz_test2 erase1 erase2 -erase_all extra_test -force_serial_false_test -force_serial_true_test ft_only_test1 ft_only_test2 grp1_test1 @@ -45,36 +34,20 @@ lev2_test5 long_test long_test1 long_test2 -margin_read0_ckbd -margin_read1_all1 -margin_read1_ckbd -meas_read_pump -mixed_flag_check -mrd_ckbd -normal_read_ckbd -not_p1_or_p2_test -not_p1_test +loop_check +loop_check_no_var nt1 nt2 nt3 nt4 outer_test -p1_only_test -p1_or_p2_only_test pgm pgm1 -pgm_ckbd -por_ins probe_only_test1 probe_only_test2 -program_ckbd -program_ckbd_b0 -program_ckbd_b1 -program_ckbd_b2 read0 read1 read2 -some_func_test test1 test10 test1n @@ -97,8 +70,5 @@ test8 test_3lt5 test_5gt4_and_4gt3 test_5gt4_or_4gt5 -test_with_flags -test_with_no_flags warmish_test -xcvr_fs_vilvih diff --git a/approved/v93k/testflow/mfh.testflow.group/flow_control.tf b/approved/v93k/testflow/mfh.testflow.group/flow_control.tf index cfc88b27..9e5cc814 100644 --- a/approved/v93k/testflow/mfh.testflow.group/flow_control.tf +++ b/approved/v93k/testflow/mfh.testflow.group/flow_control.tf @@ -255,6 +255,9 @@ tm_173: tm_174: "output" = "None"; "testName" = "Functional"; +tm_175: + "output" = "None"; + "testName" = "Functional"; tm_18: "output" = "None"; "testName" = "Functional"; @@ -698,6 +701,8 @@ tm_173: "Functional" = "":"NA":"":"NA":"":"":""; tm_174: "Functional" = "":"NA":"":"NA":"":"":""; +tm_175: + "Functional" = "":"NA":"":"NA":"":"":""; tm_18: "Functional" = "":"NA":"":"NA":"":"":""; tm_19: @@ -1051,6 +1056,8 @@ tm_173: testmethod_class = "ac_tml.AcTest.FunctionalTest"; tm_174: testmethod_class = "ac_tml.AcTest.FunctionalTest"; +tm_175: + testmethod_class = "ac_tml.AcTest.FunctionalTest"; tm_18: testmethod_class = "ac_tml.AcTest.FunctionalTest"; tm_19: @@ -1492,9 +1499,18 @@ loop_check_BEA7F3B: local_flags = output_on_pass, output_on_fail, value_on_pass, value_on_fail, per_pin_on_pass, per_pin_on_fail; override = 1; override_seqlbl = "loop_check"; + override_test_number = 60099; override_testf = tm_174; site_control = "parallel:"; site_match = 2; +loop_check_no_var_BEA7F3B: + local_flags = output_on_pass, output_on_fail, value_on_pass, value_on_fail, per_pin_on_pass, per_pin_on_fail; + override = 1; + override_seqlbl = "loop_check_no_var"; + override_test_number = 60099; + override_testf = tm_175; + site_control = "parallel:"; + site_match = 2; nt1_BEA7F3B: local_flags = output_on_pass, output_on_fail, value_on_pass, value_on_fail, per_pin_on_pass, per_pin_on_fail; override = 1; @@ -3783,6 +3799,11 @@ test_flow { run(loop_check_BEA7F3B); } + for @index = 0; @index < 5 ; @index = @index + 1; do + test_number_loop_increment = 0 + { + run(loop_check_no_var_BEA7F3B); + } }, open,"Flow Control Testing","Flow to exercise the Flow Control API" diff --git a/approved/v93k/vectors/flow_control.pmfl b/approved/v93k/vectors/flow_control.pmfl index d378322e..ed95fdcd 100644 --- a/approved/v93k/vectors/flow_control.pmfl +++ b/approved/v93k/vectors/flow_control.pmfl @@ -40,6 +40,7 @@ long_test.binl.gz long_test1.binl.gz long_test2.binl.gz loop_check.binl.gz +loop_check_no_var.binl.gz nt1.binl.gz nt2.binl.gz nt3.binl.gz From 626b0a3caef4b97663e67c349b95b98cc6eec0fe Mon Sep 17 00:00:00 2001 From: info-rchitect Date: Wed, 6 May 2020 12:56:29 -0500 Subject: [PATCH 06/10] removed unnecessary test numbers in examples --- approved/v93k/testflow/mfh.testflow.group/flow_control.tf | 2 -- program/flow_control.rb | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/approved/v93k/testflow/mfh.testflow.group/flow_control.tf b/approved/v93k/testflow/mfh.testflow.group/flow_control.tf index 9e5cc814..c9a90724 100644 --- a/approved/v93k/testflow/mfh.testflow.group/flow_control.tf +++ b/approved/v93k/testflow/mfh.testflow.group/flow_control.tf @@ -1499,7 +1499,6 @@ loop_check_BEA7F3B: local_flags = output_on_pass, output_on_fail, value_on_pass, value_on_fail, per_pin_on_pass, per_pin_on_fail; override = 1; override_seqlbl = "loop_check"; - override_test_number = 60099; override_testf = tm_174; site_control = "parallel:"; site_match = 2; @@ -1507,7 +1506,6 @@ loop_check_no_var_BEA7F3B: local_flags = output_on_pass, output_on_fail, value_on_pass, value_on_fail, per_pin_on_pass, per_pin_on_fail; override = 1; override_seqlbl = "loop_check_no_var"; - override_test_number = 60099; override_testf = tm_175; site_control = "parallel:"; site_match = 2; diff --git a/program/flow_control.rb b/program/flow_control.rb index 16c3d713..9217cd1a 100644 --- a/program/flow_control.rb +++ b/program/flow_control.rb @@ -524,10 +524,10 @@ if tester.v93k? loop from: 1, to: 5, step: 1, var: "loop" do - func :loop_check, test_number: 60099 + func :loop_check end loop from: 1, to: 5, step: 1 do - func :loop_check_no_var, test_number: 60099 + func :loop_check_no_var end end end From d643046e7b7d4dae3f485ed610fbb8c54269bf3b Mon Sep 17 00:00:00 2001 From: info-rchitect Date: Wed, 6 May 2020 12:59:21 -0500 Subject: [PATCH 07/10] added in unique test numbers --- approved/v93k/testflow/mfh.testflow.group/flow_control.tf | 2 ++ program/flow_control.rb | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/approved/v93k/testflow/mfh.testflow.group/flow_control.tf b/approved/v93k/testflow/mfh.testflow.group/flow_control.tf index c9a90724..d5b3f879 100644 --- a/approved/v93k/testflow/mfh.testflow.group/flow_control.tf +++ b/approved/v93k/testflow/mfh.testflow.group/flow_control.tf @@ -1499,6 +1499,7 @@ loop_check_BEA7F3B: local_flags = output_on_pass, output_on_fail, value_on_pass, value_on_fail, per_pin_on_pass, per_pin_on_fail; override = 1; override_seqlbl = "loop_check"; + override_test_number = 60001; override_testf = tm_174; site_control = "parallel:"; site_match = 2; @@ -1506,6 +1507,7 @@ loop_check_no_var_BEA7F3B: local_flags = output_on_pass, output_on_fail, value_on_pass, value_on_fail, per_pin_on_pass, per_pin_on_fail; override = 1; override_seqlbl = "loop_check_no_var"; + override_test_number = 60002; override_testf = tm_175; site_control = "parallel:"; site_match = 2; diff --git a/program/flow_control.rb b/program/flow_control.rb index 9217cd1a..63e747e7 100644 --- a/program/flow_control.rb +++ b/program/flow_control.rb @@ -524,10 +524,10 @@ if tester.v93k? loop from: 1, to: 5, step: 1, var: "loop" do - func :loop_check + func :loop_check, test_number: 60001 end loop from: 1, to: 5, step: 1 do - func :loop_check_no_var + func :loop_check_no_var, test_number: 60002 end end end From da4c60dd9dd5d1bff660d208d8c8d070ea508033 Mon Sep 17 00:00:00 2001 From: info-rchitect Date: Wed, 6 May 2020 13:05:58 -0500 Subject: [PATCH 08/10] lint --- lib/origen_testers/smartest_based_tester/base/flow.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/origen_testers/smartest_based_tester/base/flow.rb b/lib/origen_testers/smartest_based_tester/base/flow.rb index 9db245a5..89d7aaf7 100755 --- a/lib/origen_testers/smartest_based_tester/base/flow.rb +++ b/lib/origen_testers/smartest_based_tester/base/flow.rb @@ -271,13 +271,13 @@ def on_loop(node) loop_flag = node.children[3] if node.children[3].is_a?(String) loop_end_str = loop_flag.nil? ? loop_end.to_s : "@#{loop_flag}" line "for @index = 0; @index < #{loop_end_str} ; @index = @index + #{loop_inc}; do" - line "test_number_loop_increment = 0" - line "{" + line 'test_number_loop_increment = 0' + line '{' @indent += 1 children_start_index = loop_flag.nil? ? 3 : 4 process_all(node.children[children_start_index..-1]) @indent -= 1 - line "}" + line '}' end def on_test(node) From bac609fc7f7e8dbf0e7755578ee9530638ad92b6 Mon Sep 17 00:00:00 2001 From: info-rchitect Date: Wed, 6 May 2020 14:33:09 -0500 Subject: [PATCH 09/10] updated docs, may need some changes if API behavior changes --- .../origen_guides/program/flowapi.md.erb | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/templates/origen_guides/program/flowapi.md.erb b/templates/origen_guides/program/flowapi.md.erb index eb353910..ebd265b4 100644 --- a/templates/origen_guides/program/flowapi.md.erb +++ b/templates/origen_guides/program/flowapi.md.erb @@ -338,5 +338,35 @@ group :my_other_group, comment: "This is the other group" do end ~~~ +#### Looping + +A loop API exists, though it currently only generates content for the V93K platform. + +~~~ruby + loop from: 1, to: 5, step: 1, var: "loop" do + func :loop_check, test_number: 60001 + end + loop from: 1, to: 5, step: 1 do + func :loop_check_no_var, test_number: 60002 + end +~~~ + +If the optional `var` options is passed it will replace the `to` option. The user is expected to handle setting the flow variable to a proper value. + +~~~shell + for @index = 0; @index < @loop ; @index = @index + 1; do + test_number_loop_increment = 0 + { + run(loop_check_BEA7F3B); + } + for @index = 0; @index < 5 ; @index = @index + 1; do + test_number_loop_increment = 0 + { + run(loop_check_no_var_BEA7F3B); + } +~~~ + + + % end From 6fa686e699ef33ca97efb7406dee98675120c816 Mon Sep 17 00:00:00 2001 From: info-rchitect Date: Wed, 6 May 2020 14:56:00 -0500 Subject: [PATCH 10/10] minor docs edits --- templates/origen_guides/program/flowapi.md.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/origen_guides/program/flowapi.md.erb b/templates/origen_guides/program/flowapi.md.erb index ebd265b4..dcf2bbea 100644 --- a/templates/origen_guides/program/flowapi.md.erb +++ b/templates/origen_guides/program/flowapi.md.erb @@ -351,9 +351,9 @@ A loop API exists, though it currently only generates content for the V93K platf end ~~~ -If the optional `var` options is passed it will replace the `to` option. The user is expected to handle setting the flow variable to a proper value. +If the optional `var` option is passed it will replace the `to` option. The user is expected to handle setting the flow variable to a proper value. -~~~shell +~~~text for @index = 0; @index < @loop ; @index = @index + 1; do test_number_loop_increment = 0 {