From ae15e41658a2097b0b1b7b35c97e346f76dbe657 Mon Sep 17 00:00:00 2001 From: Priyavadan Kumar Date: Wed, 6 May 2020 15:32:44 -0500 Subject: [PATCH 1/4] Changes as suggested by info-architect in his PR --- approved/v93k/flow_control.aiv | 2 + approved/v93k/referenced.list | 2 + .../mfh.testflow.group/flow_control.tf | 40 +++++++++++++++++++ approved/v93k/vectors/flow_control.pmfl | 2 + .../OrigenTesters/flows/FLOW_CONTROL.flow | 24 +++++++++++ .../limits/Main.FLOW_CONTROL_Tests.csv | 2 + approved/v93k_smt8/referenced.list | 2 + .../smartest_based_tester/base/flow.rb | 16 ++++++++ program/flow_control.rb | 9 +++++ .../origen_guides/program/flowapi.md.erb | 30 ++++++++++++++ 10 files changed, 129 insertions(+) diff --git a/approved/v93k/flow_control.aiv b/approved/v93k/flow_control.aiv index e8f7c4b0..c7ab9d80 100644 --- a/approved/v93k/flow_control.aiv +++ b/approved/v93k/flow_control.aiv @@ -44,6 +44,8 @@ lev2_test5 .tmf 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..ffedc00a 100644 --- a/approved/v93k/referenced.list +++ b/approved/v93k/referenced.list @@ -45,6 +45,8 @@ lev2_test5 long_test long_test1 long_test2 +loop_check +loop_check_no_var margin_read0_ckbd margin_read1_all1 margin_read1_ckbd diff --git a/approved/v93k/testflow/mfh.testflow.group/flow_control.tf b/approved/v93k/testflow/mfh.testflow.group/flow_control.tf index 92ad583f..d5b3f879 100644 --- a/approved/v93k/testflow/mfh.testflow.group/flow_control.tf +++ b/approved/v93k/testflow/mfh.testflow.group/flow_control.tf @@ -252,6 +252,12 @@ tm_172: tm_173: "output" = "None"; "testName" = "Functional"; +tm_174: + "output" = "None"; + "testName" = "Functional"; +tm_175: + "output" = "None"; + "testName" = "Functional"; tm_18: "output" = "None"; "testName" = "Functional"; @@ -693,6 +699,10 @@ tm_172: "Functional" = "":"NA":"":"NA":"":"":""; tm_173: "Functional" = "":"NA":"":"NA":"":"":""; +tm_174: + "Functional" = "":"NA":"":"NA":"":"":""; +tm_175: + "Functional" = "":"NA":"":"NA":"":"":""; tm_18: "Functional" = "":"NA":"":"NA":"":"":""; tm_19: @@ -1044,6 +1054,10 @@ 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_175: + testmethod_class = "ac_tml.AcTest.FunctionalTest"; tm_18: testmethod_class = "ac_tml.AcTest.FunctionalTest"; tm_19: @@ -1481,6 +1495,22 @@ 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_test_number = 60001; + 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 = 60002; + 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; @@ -3764,6 +3794,16 @@ test_flow else { } + 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); + } }, 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..ed95fdcd 100644 --- a/approved/v93k/vectors/flow_control.pmfl +++ b/approved/v93k/vectors/flow_control.pmfl @@ -39,6 +39,8 @@ lev2_test5.binl.gz 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 diff --git a/approved/v93k_smt8/OrigenTesters/flows/FLOW_CONTROL.flow b/approved/v93k_smt8/OrigenTesters/flows/FLOW_CONTROL.flow index edde488b..81324452 100644 --- a/approved/v93k_smt8/OrigenTesters/flows/FLOW_CONTROL.flow +++ b/approved/v93k_smt8/OrigenTesters/flows/FLOW_CONTROL.flow @@ -167,6 +167,20 @@ 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 loop_check_no_var calls ac_tml.AcTest.FunctionalTest { + measurement.pattern = setupRef(OrigenTesters.patterns.loop_check_no_var); + 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 +1765,15 @@ flow FLOW_CONTROL { else { } + for @index = 0; @index < @loop ; @index = @index + 1; do + test_number_loop_increment = 0 + { + loop_check.execute(); + } + for @index = 0; @index < 5 ; @index = @index + 1; do + test_number_loop_increment = 0 + { + loop_check_no_var.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..7db10662 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,5 @@ 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,60001,loop_check,0,0,, +loop_check_no_var,loop_check_no_var,60002,loop_check_no_var,0,0,, diff --git a/approved/v93k_smt8/referenced.list b/approved/v93k_smt8/referenced.list index c23c4b6c..7728eec1 100644 --- a/approved/v93k_smt8/referenced.list +++ b/approved/v93k_smt8/referenced.list @@ -43,6 +43,8 @@ lev2_test5 long_test long_test1 long_test2 +loop_check +loop_check_no_var margin_read0_ckbd margin_read1_all1 margin_read1_ckbd diff --git a/lib/origen_testers/smartest_based_tester/base/flow.rb b/lib/origen_testers/smartest_based_tester/base/flow.rb index ff3ee2c3..89d7aaf7 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 + #{loop_inc}; 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..63e747e7 100644 --- a/program/flow_control.rb +++ b/program/flow_control.rb @@ -521,4 +521,13 @@ 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, test_number: 60001 + end + loop from: 1, to: 5, step: 1 do + func :loop_check_no_var, test_number: 60002 + end + end end diff --git a/templates/origen_guides/program/flowapi.md.erb b/templates/origen_guides/program/flowapi.md.erb index eb353910..dcf2bbea 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` option is passed it will replace the `to` option. The user is expected to handle setting the flow variable to a proper value. + +~~~text + 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 e99b5422af337c65e151800b3cbe076393e969a5 Mon Sep 17 00:00:00 2001 From: info-rchitect Date: Thu, 7 May 2020 12:08:13 -0500 Subject: [PATCH 2/4] updated as per core team review --- .../smartest_based_tester/base/flow.rb | 17 ++++++++++------- program/flow_control.rb | 4 ++-- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/lib/origen_testers/smartest_based_tester/base/flow.rb b/lib/origen_testers/smartest_based_tester/base/flow.rb index 89d7aaf7..09ae0ac3 100755 --- a/lib/origen_testers/smartest_based_tester/base/flow.rb +++ b/lib/origen_testers/smartest_based_tester/base/flow.rb @@ -268,16 +268,19 @@ 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 + #{loop_inc}; do" - line 'test_number_loop_increment = 0' - line '{' + index_flag = node.children[3] if node.children[3].is_a?(String) + if index_flag.is_a?(String) + line "for @#{index_flag} = #{loop_start}; @#{index_flag} < #{loop_end} ; @#{index_flag} = @#{index_flag} + #{loop_inc}; do" + else + line "for @index = #{loop_start}; @index < #{loop_end} ; @index = @index + #{loop_inc}; do" + end + line "test_number_loop_increment = 0" + line "{" @indent += 1 - children_start_index = loop_flag.nil? ? 3 : 4 + children_start_index = index_flag.nil? ? 3 : 4 process_all(node.children[children_start_index..-1]) @indent -= 1 - line '}' + line "}" end def on_test(node) diff --git a/program/flow_control.rb b/program/flow_control.rb index 63e747e7..967d4432 100644 --- a/program/flow_control.rb +++ b/program/flow_control.rb @@ -521,8 +521,8 @@ func :read1, id: :ta5, bin: 10, number: 60000 func :erase1, if_all_sites_passed: :ta5, bin: 12, number: 60010 end - - if tester.v93k? + + if tester.smt7? loop from: 1, to: 5, step: 1, var: "loop" do func :loop_check, test_number: 60001 end From a5708948cf68d0c1dee5291a4f0a7ea1ac4b03bd Mon Sep 17 00:00:00 2001 From: info-rchitect Date: Thu, 7 May 2020 12:10:41 -0500 Subject: [PATCH 3/4] forgot a file --- approved/v93k/testflow/mfh.testflow.group/flow_control.tf | 4 ++-- 1 file changed, 2 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 d5b3f879..28ddf150 100644 --- a/approved/v93k/testflow/mfh.testflow.group/flow_control.tf +++ b/approved/v93k/testflow/mfh.testflow.group/flow_control.tf @@ -3794,12 +3794,12 @@ test_flow else { } - for @index = 0; @index < @loop ; @index = @index + 1; do + for @loop = 1; @loop < 5 ; @loop = @loop + 1; do test_number_loop_increment = 0 { run(loop_check_BEA7F3B); } - for @index = 0; @index < 5 ; @index = @index + 1; do + for @index = 1; @index < 5 ; @index = @index + 1; do test_number_loop_increment = 0 { run(loop_check_no_var_BEA7F3B); From fa61ab05fea473abe460ee880d0a81712327d92c Mon Sep 17 00:00:00 2001 From: info-rchitect Date: Thu, 7 May 2020 12:16:47 -0500 Subject: [PATCH 4/4] 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 09ae0ac3..e556c345 100755 --- a/lib/origen_testers/smartest_based_tester/base/flow.rb +++ b/lib/origen_testers/smartest_based_tester/base/flow.rb @@ -274,13 +274,13 @@ def on_loop(node) else line "for @index = #{loop_start}; @index < #{loop_end} ; @index = @index + #{loop_inc}; do" end - line "test_number_loop_increment = 0" - line "{" + line 'test_number_loop_increment = 0' + line '{' @indent += 1 children_start_index = index_flag.nil? ? 3 : 4 process_all(node.children[children_start_index..-1]) @indent -= 1 - line "}" + line '}' end def on_test(node)