origen_testers 0.6.2 → 0.7.0.pre0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/config/version.rb +3 -3
- data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +35 -2
- data/lib/origen_testers/igxl_based_tester/base/generator.rb +139 -8
- data/lib/origen_testers/igxl_based_tester/base/global_specs.rb +83 -0
- data/lib/origen_testers/igxl_based_tester/base/job.rb +75 -0
- data/lib/origen_testers/igxl_based_tester/base/jobs.rb +44 -0
- data/lib/origen_testers/igxl_based_tester/base/references.rb +25 -0
- data/lib/origen_testers/igxl_based_tester/base/timesets.rb +4 -2
- data/lib/origen_testers/igxl_based_tester/base/timesets_basic.rb +49 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/global_specs.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/job.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/jobs.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/references.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +1 -1
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +1 -1
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/global_specs.txt.erb +16 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/jobs.txt.erb +27 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/references.txt.erb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +0 -3
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets_basic.txt.erb +149 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/timesets_basic.rb +10 -0
- data/lib/origen_testers/origen_ext/generator/flow.rb +8 -1
- data/lib/origen_testers/smartest_based_tester/base.rb +11 -2
- data/lib/origen_testers/test/ultraflex_interface.rb +43 -2
- data/program/uflex_resources.rb +41 -1
- metadata +17 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: a90943f4feeb9a5fd74e0660e8bbbc068d2b0aa0
         | 
| 4 | 
            +
              data.tar.gz: 0d0334819d9b766a4030e712ae4070074262b350
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 9813effc8d620fe3b6279b88d6ad0176449cb31712f0cfd4789fbc22005f1ea3f1c86fcd001f988189b2717fe9999c22d1ba462bb157638f1e207bcf881acba6
         | 
| 7 | 
            +
              data.tar.gz: 8f480ad0212eb967200d833ea721ed7d002326a6b7a08988b794afe379ee0766c3debdb8061d6844bd910f389675a62916a46526140e360ff2277140662e42a5
         | 
    
        data/config/version.rb
    CHANGED
    
    
| @@ -6,12 +6,14 @@ module OrigenTesters | |
| 6 6 |  | 
| 7 7 | 
             
                    attr_accessor :es
         | 
| 8 8 | 
             
                    attr_accessor :es_sheet_pins
         | 
| 9 | 
            +
                    attr_accessor :ts_basic
         | 
| 9 10 |  | 
| 10 11 | 
             
                    OUTPUT_PREFIX = 'ES'
         | 
| 11 12 | 
             
                    # OUTPUT_POSTFIX = 'ES'
         | 
| 12 13 |  | 
| 13 | 
            -
                    def initialize # :nodoc:
         | 
| 14 | 
            -
                      @es | 
| 14 | 
            +
                    def initialize(options = {}) # :nodoc:
         | 
| 15 | 
            +
                      @es       = {}
         | 
| 16 | 
            +
                      @ts_basic = options[:timeset_basic]
         | 
| 15 17 | 
             
                    end
         | 
| 16 18 |  | 
| 17 19 | 
             
                    def add(esname, pin, edge, options = {})
         | 
| @@ -91,6 +93,37 @@ module OrigenTesters | |
| 91 93 | 
             
                        data
         | 
| 92 94 | 
             
                      end
         | 
| 93 95 | 
             
                    end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                    # Prepare the edge information for TSB file output
         | 
| 98 | 
            +
                    def format_uflex_edge_tsb(data, line_cnt, options = {})
         | 
| 99 | 
            +
                      options = {
         | 
| 100 | 
            +
                        no_disable: false
         | 
| 101 | 
            +
                      }.merge(options)
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                      if data !~ /^\s*$/
         | 
| 104 | 
            +
                        data = data.gsub(/^/, '=')
         | 
| 105 | 
            +
                      end
         | 
| 106 | 
            +
                      data = data.gsub(/(\W)([a-zA-Z])/, '\1_\2')
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                      case data
         | 
| 109 | 
            +
                      when /_d0_edge|_d_on/
         | 
| 110 | 
            +
                        data = data.gsub(/_d0_edge|_d_on/, "I#{line_cnt}")
         | 
| 111 | 
            +
                      when /_d1_edge|_d_data/
         | 
| 112 | 
            +
                        data = data.gsub(/_d1_edge|_d_data/, "J#{line_cnt}")
         | 
| 113 | 
            +
                      when /_d2_edge|_dret/
         | 
| 114 | 
            +
                        data = data.gsub(/_d2_edge|_dret/, "K#{line_cnt}")
         | 
| 115 | 
            +
                      when /_d3_edge|_d_off/
         | 
| 116 | 
            +
                        data = data.gsub(/_d3_edge|_d_off/, "L#{line_cnt}")
         | 
| 117 | 
            +
                      when /_c1_edge|_c_open/
         | 
| 118 | 
            +
                        data = data.gsub(/_c1_edge|_c_open/, "N#{line_cnt}")
         | 
| 119 | 
            +
                      when /_c2_edge|_c_close/
         | 
| 120 | 
            +
                        data = data.gsub(/_c2_edge|_c_close/, "O#{line_cnt}")
         | 
| 121 | 
            +
                      when /^\s*$/
         | 
| 122 | 
            +
                        options[:no_disable] ? data = '' : data = 'disable'
         | 
| 123 | 
            +
                      else
         | 
| 124 | 
            +
                        data
         | 
| 125 | 
            +
                      end
         | 
| 126 | 
            +
                    end
         | 
| 94 127 | 
             
                  end
         | 
| 95 128 | 
             
                end
         | 
| 96 129 | 
             
              end
         | 
| @@ -36,6 +36,9 @@ module OrigenTesters | |
| 36 36 | 
             
                      @@levelsets_filename = nil
         | 
| 37 37 | 
             
                      @@ac_specsets_filename = nil
         | 
| 38 38 | 
             
                      @@dc_specsets_filename = nil
         | 
| 39 | 
            +
                      @@global_specs_filename = nil
         | 
| 40 | 
            +
                      @@jobs_filename = nil
         | 
| 41 | 
            +
                      @@references_filename = nil
         | 
| 39 42 | 
             
                    end
         | 
| 40 43 |  | 
| 41 44 | 
             
                    # @api private
         | 
| @@ -51,6 +54,9 @@ module OrigenTesters | |
| 51 54 | 
             
                      @@levelset_sheets = nil
         | 
| 52 55 | 
             
                      @@ac_specset_sheets = nil
         | 
| 53 56 | 
             
                      @@dc_specset_sheets = nil
         | 
| 57 | 
            +
                      @@global_spec_sheets = nil
         | 
| 58 | 
            +
                      @@job_sheets = nil
         | 
| 59 | 
            +
                      @@reference_sheets = nil
         | 
| 54 60 | 
             
                    end
         | 
| 55 61 | 
             
                    alias_method :reset_globals, :at_run_start
         | 
| 56 62 |  | 
| @@ -72,6 +78,9 @@ module OrigenTesters | |
| 72 78 | 
             
                    #   levelsets_filename = "common"
         | 
| 73 79 | 
             
                    #   ac_specsets_filename = "common"
         | 
| 74 80 | 
             
                    #   dc_specsets_filename = "common"
         | 
| 81 | 
            +
                    #   global_specs_filename = "common"
         | 
| 82 | 
            +
                    #   jobs_filename = "common"
         | 
| 83 | 
            +
                    #   references_filename = "common"
         | 
| 75 84 | 
             
                    def resources_filename=(name)
         | 
| 76 85 | 
             
                      self.pinmaps_filename = name
         | 
| 77 86 | 
             
                      self.test_instances_filename = name
         | 
| @@ -82,6 +91,9 @@ module OrigenTesters | |
| 82 91 | 
             
                      self.levelsets_filename = name
         | 
| 83 92 | 
             
                      self.ac_specsets_filename = name
         | 
| 84 93 | 
             
                      self.dc_specsets_filename = name
         | 
| 94 | 
            +
                      self.global_specs_filename = name
         | 
| 95 | 
            +
                      self.jobs_filename = name
         | 
| 96 | 
            +
                      self.references_filename = name
         | 
| 85 97 | 
             
                    end
         | 
| 86 98 |  | 
| 87 99 | 
             
                    # Set the name of the current pinmap sheet. This does not change
         | 
| @@ -156,6 +168,30 @@ module OrigenTesters | |
| 156 168 | 
             
                      @@dc_specsets_filename = name
         | 
| 157 169 | 
             
                    end
         | 
| 158 170 |  | 
| 171 | 
            +
                    # Set the name of the global specs sheet. This does not change
         | 
| 172 | 
            +
                    # the name of the current sheet, but rather sets the name of the sheet that
         | 
| 173 | 
            +
                    # will be generated the next time you access patgroups.
         | 
| 174 | 
            +
                    def global_specs_filename=(name)
         | 
| 175 | 
            +
                      @global_specs_filename = name
         | 
| 176 | 
            +
                      @@global_specs_filename = name
         | 
| 177 | 
            +
                    end
         | 
| 178 | 
            +
             | 
| 179 | 
            +
                    # Set the name of the jobs sheet. This does not change
         | 
| 180 | 
            +
                    # the name of the current sheet, but rather sets the name of the sheet that
         | 
| 181 | 
            +
                    # will be generated the next time you access patgroups.
         | 
| 182 | 
            +
                    def jobs_filename=(name)
         | 
| 183 | 
            +
                      @jobs_filename = name
         | 
| 184 | 
            +
                      @@jobs_filename = name
         | 
| 185 | 
            +
                    end
         | 
| 186 | 
            +
             | 
| 187 | 
            +
                    # Set the name of the references sheet. This does not change
         | 
| 188 | 
            +
                    # the name of the current sheet, but rather sets the name of the sheet that
         | 
| 189 | 
            +
                    # will be generated the next time you access patgroups.
         | 
| 190 | 
            +
                    def references_filename=(name)
         | 
| 191 | 
            +
                      @references_filename = name
         | 
| 192 | 
            +
                      @@references_filename = name
         | 
| 193 | 
            +
                    end
         | 
| 194 | 
            +
             | 
| 159 195 | 
             
                    # Returns the name of the current pinmaps sheet
         | 
| 160 196 | 
             
                    def pinmaps_filename
         | 
| 161 197 | 
             
                      @@pinmaps_filename ||= @pinmaps_filename || 'global'
         | 
| @@ -201,6 +237,21 @@ module OrigenTesters | |
| 201 237 | 
             
                      @@dc_specsets_filename ||= @dc_specsets_filename || 'global'
         | 
| 202 238 | 
             
                    end
         | 
| 203 239 |  | 
| 240 | 
            +
                    # Returns the name of the current global spec sheet
         | 
| 241 | 
            +
                    def global_specs_filename
         | 
| 242 | 
            +
                      @@global_specs_filename ||= @global_specs_filename || 'global'
         | 
| 243 | 
            +
                    end
         | 
| 244 | 
            +
             | 
| 245 | 
            +
                    # Returns the name of the current job sheet
         | 
| 246 | 
            +
                    def jobs_filename
         | 
| 247 | 
            +
                      @@jobs_filename ||= @jobs_filename || 'global'
         | 
| 248 | 
            +
                    end
         | 
| 249 | 
            +
             | 
| 250 | 
            +
                    # Returns the name of the current references sheet
         | 
| 251 | 
            +
                    def references_filename
         | 
| 252 | 
            +
                      @@references_filename ||= @references_filename || 'global'
         | 
| 253 | 
            +
                    end
         | 
| 254 | 
            +
             | 
| 204 255 | 
             
                    # Returns a hash containing all pinmap sheets
         | 
| 205 256 | 
             
                    def pinmap_sheets
         | 
| 206 257 | 
             
                      @@pinmap_sheets ||= {}
         | 
| @@ -251,18 +302,43 @@ module OrigenTesters | |
| 251 302 | 
             
                      @@dc_specset_sheets ||= {}
         | 
| 252 303 | 
             
                    end
         | 
| 253 304 |  | 
| 305 | 
            +
                    # Returns a hash containing all global spec sheets
         | 
| 306 | 
            +
                    def global_spec_sheets
         | 
| 307 | 
            +
                      @@global_spec_sheets ||= {}
         | 
| 308 | 
            +
                    end
         | 
| 309 | 
            +
             | 
| 310 | 
            +
                    # Returns a hash containing all job sheets
         | 
| 311 | 
            +
                    def job_sheets
         | 
| 312 | 
            +
                      @@job_sheets ||= {}
         | 
| 313 | 
            +
                    end
         | 
| 314 | 
            +
             | 
| 315 | 
            +
                    # Returns a hash containing all reference sheets
         | 
| 316 | 
            +
                    def reference_sheets
         | 
| 317 | 
            +
                      @@reference_sheets ||= {}
         | 
| 318 | 
            +
                    end
         | 
| 319 | 
            +
             | 
| 254 320 | 
             
                    # Returns an array containing all sheet generators where a sheet generator is a flow,
         | 
| 255 | 
            -
                    # test instance, patset, pat group, edgeset, timeset,  | 
| 321 | 
            +
                    # test instance, patset, pat group, edgeset, timeset, AC/DC/Global spec, job,
         | 
| 322 | 
            +
                    # or reference sheet.
         | 
| 256 323 | 
             
                    # All Origen program generators must implement this method
         | 
| 257 324 | 
             
                    def sheet_generators # :nodoc:
         | 
| 258 325 | 
             
                      g = []
         | 
| 326 | 
            +
                      # Generate all of these sheets verbatim
         | 
| 259 327 | 
             
                      [pinmap_sheets, flow_sheets, test_instance_sheets, patset_sheets,
         | 
| 260 | 
            -
                       patgroup_sheets,  | 
| 261 | 
            -
                        | 
| 328 | 
            +
                       patgroup_sheets, levelset_sheets, ac_specset_sheets, dc_specset_sheets,
         | 
| 329 | 
            +
                       global_spec_sheets, job_sheets, reference_sheets].each do |sheets|
         | 
| 262 330 | 
             
                        sheets.each do |name, sheet|
         | 
| 263 331 | 
             
                          g << sheet
         | 
| 264 332 | 
             
                        end
         | 
| 265 333 | 
             
                      end
         | 
| 334 | 
            +
                      # Choose whether to generate edgeset/timset or timeset_basic sheets
         | 
| 335 | 
            +
                      #  * Skip edgeset sheet generation when timeset_basic is selected
         | 
| 336 | 
            +
                      [edgeset_sheets, timeset_sheets].each do |sheets|
         | 
| 337 | 
            +
                        sheets.each do |name, sheet|
         | 
| 338 | 
            +
                          next if sheet.class.name =~ /Edgesets$/ && sheet.ts_basic
         | 
| 339 | 
            +
                          g << sheet
         | 
| 340 | 
            +
                        end
         | 
| 341 | 
            +
                      end
         | 
| 266 342 | 
             
                      g
         | 
| 267 343 | 
             
                    end
         | 
| 268 344 |  | 
| @@ -386,25 +462,38 @@ module OrigenTesters | |
| 386 462 | 
             
                    # Pass in a filename argument to have a specific sheet returned instead.
         | 
| 387 463 | 
             
                    #
         | 
| 388 464 | 
             
                    # If the sheet does not exist yet it will be created.
         | 
| 389 | 
            -
                    def edgesets(filename = edgesets_filename)
         | 
| 465 | 
            +
                    def edgesets(filename = edgesets_filename, options = {})
         | 
| 466 | 
            +
                      options = {
         | 
| 467 | 
            +
                        timeset_basic: false
         | 
| 468 | 
            +
                      }.merge(options)
         | 
| 469 | 
            +
             | 
| 390 470 | 
             
                      f = filename.to_sym
         | 
| 391 471 | 
             
                      return edgeset_sheets[f] if edgeset_sheets[f]
         | 
| 392 | 
            -
                      e = platform::Edgesets.new
         | 
| 472 | 
            +
                      e = platform::Edgesets.new(options)
         | 
| 393 473 | 
             
                      e.filename = f
         | 
| 394 474 | 
             
                      edgeset_sheets[f] = e
         | 
| 395 475 | 
             
                    end
         | 
| 396 476 | 
             
                    alias_method :edge_sets, :edgesets
         | 
| 397 477 |  | 
| 398 | 
            -
                    # Returns the current timesets sheet (as defined by the current value of
         | 
| 478 | 
            +
                    # Returns the current timesets or timesets_basic sheet (as defined by the current value of
         | 
| 399 479 | 
             
                    # timesets_filename).
         | 
| 400 480 | 
             
                    #
         | 
| 401 481 | 
             
                    # Pass in a filename argument to have a specific sheet returned instead.
         | 
| 402 482 | 
             
                    #
         | 
| 403 483 | 
             
                    # If the sheet does not exist yet it will be created.
         | 
| 404 | 
            -
                    def timesets(filename = timesets_filename)
         | 
| 484 | 
            +
                    def timesets(filename = timesets_filename, options = {})
         | 
| 485 | 
            +
                      options = {
         | 
| 486 | 
            +
                        timeset_basic: false
         | 
| 487 | 
            +
                      }.merge(options)
         | 
| 488 | 
            +
             | 
| 405 489 | 
             
                      f = filename.to_sym
         | 
| 406 490 | 
             
                      return timeset_sheets[f] if timeset_sheets[f]
         | 
| 407 | 
            -
                       | 
| 491 | 
            +
                      case options[:timeset_basic]
         | 
| 492 | 
            +
                      when true
         | 
| 493 | 
            +
                        t = platform::TimesetsBasic.new(options)
         | 
| 494 | 
            +
                      when false
         | 
| 495 | 
            +
                        t = platform::Timesets.new(options)
         | 
| 496 | 
            +
                      end
         | 
| 408 497 | 
             
                      t.filename = f
         | 
| 409 498 | 
             
                      timeset_sheets[f] = t
         | 
| 410 499 | 
             
                    end
         | 
| @@ -463,6 +552,48 @@ module OrigenTesters | |
| 463 552 | 
             
                      dc_specset_sheets[f] = s
         | 
| 464 553 | 
             
                    end
         | 
| 465 554 |  | 
| 555 | 
            +
                    # Returns the current global spec sheet (as defined by the current value of
         | 
| 556 | 
            +
                    # global_specs_filename).
         | 
| 557 | 
            +
                    #
         | 
| 558 | 
            +
                    # Pass in a filename argument to have a specific sheet returned instead.
         | 
| 559 | 
            +
                    #
         | 
| 560 | 
            +
                    # If the sheet does not exist yet it will be created.
         | 
| 561 | 
            +
                    def global_specs(filename = global_specs_filename)
         | 
| 562 | 
            +
                      f = filename.to_sym
         | 
| 563 | 
            +
                      return global_spec_sheets[f] if global_spec_sheets[f]
         | 
| 564 | 
            +
                      s = platform::GlobalSpecs.new
         | 
| 565 | 
            +
                      s.filename = f
         | 
| 566 | 
            +
                      global_spec_sheets[f] = s
         | 
| 567 | 
            +
                    end
         | 
| 568 | 
            +
             | 
| 569 | 
            +
                    # Returns the current job sheet (as defined by the current value of
         | 
| 570 | 
            +
                    # jobs_filename).
         | 
| 571 | 
            +
                    #
         | 
| 572 | 
            +
                    # Pass in a filename argument to have a specific sheet returned instead.
         | 
| 573 | 
            +
                    #
         | 
| 574 | 
            +
                    # If the sheet does not exist yet it will be created.
         | 
| 575 | 
            +
                    def program_jobs(filename = jobs_filename)
         | 
| 576 | 
            +
                      f = filename.to_sym
         | 
| 577 | 
            +
                      return job_sheets[f] if job_sheets[f]
         | 
| 578 | 
            +
                      j = platform::Jobs.new
         | 
| 579 | 
            +
                      j.filename = f
         | 
| 580 | 
            +
                      job_sheets[f] = j
         | 
| 581 | 
            +
                    end
         | 
| 582 | 
            +
             | 
| 583 | 
            +
                    # Returns the current reference sheet (as defined by the current value of
         | 
| 584 | 
            +
                    # references_filename).
         | 
| 585 | 
            +
                    #
         | 
| 586 | 
            +
                    # Pass in a filename argument to have a specific sheet returned instead.
         | 
| 587 | 
            +
                    #
         | 
| 588 | 
            +
                    # If the sheet does not exist yet it will be created.
         | 
| 589 | 
            +
                    def references(filename = references_filename)
         | 
| 590 | 
            +
                      f = filename.to_sym
         | 
| 591 | 
            +
                      return reference_sheets[f] if reference_sheets[f]
         | 
| 592 | 
            +
                      r = platform::References.new
         | 
| 593 | 
            +
                      r.filename = f
         | 
| 594 | 
            +
                      reference_sheets[f] = r
         | 
| 595 | 
            +
                    end
         | 
| 596 | 
            +
             | 
| 466 597 | 
             
                    private
         | 
| 467 598 |  | 
| 468 599 | 
             
                    # Custom test instance libraries
         | 
| @@ -0,0 +1,83 @@ | |
| 1 | 
            +
            module OrigenTesters
         | 
| 2 | 
            +
              module IGXLBasedTester
         | 
| 3 | 
            +
                class Base
         | 
| 4 | 
            +
                  class GlobalSpecs
         | 
| 5 | 
            +
                    include ::OrigenTesters::Generator
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                    attr_accessor :global_specs
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                    OUTPUT_PREFIX = 'SpecsGlobal'
         | 
| 10 | 
            +
                    # OUTPUT_POSTFIX = 'SpecsGlobal'
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                    def initialize # :nodoc:
         | 
| 13 | 
            +
                      ## Hash Autovivification
         | 
| 14 | 
            +
                      l = ->(h, k) { h[k] = Hash.new(&l) }
         | 
| 15 | 
            +
                      @global_specs = Hash.new(&l)
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                    # Assigns a global spec value object to the given variable
         | 
| 19 | 
            +
                    #   The attrs hash is expected to defined as follows:
         | 
| 20 | 
            +
                    #     attrs = {
         | 
| 21 | 
            +
                    #       job:    nil,
         | 
| 22 | 
            +
                    #       value:  0
         | 
| 23 | 
            +
                    #     }
         | 
| 24 | 
            +
                    def add(spec, attrs = {})
         | 
| 25 | 
            +
                      attrs = {
         | 
| 26 | 
            +
                        job:   :nil,
         | 
| 27 | 
            +
                        value: 0
         | 
| 28 | 
            +
                      }.merge(attrs)
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                      @global_specs[spec][attrs.delete(:job)] = attrs
         | 
| 31 | 
            +
                    end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    # Prepare the spec information for file output
         | 
| 34 | 
            +
                    def format_uflex_global_spec(data, options = {})
         | 
| 35 | 
            +
                      options = {
         | 
| 36 | 
            +
                        spec: nil
         | 
| 37 | 
            +
                      }.update(options)
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                      case options[:spec]
         | 
| 40 | 
            +
                      when /fgb_/i
         | 
| 41 | 
            +
                        spec_type = 'freq'
         | 
| 42 | 
            +
                      when /vgb_/i
         | 
| 43 | 
            +
                        spec_type = 'volt'
         | 
| 44 | 
            +
                      else
         | 
| 45 | 
            +
                        spec_type = nil
         | 
| 46 | 
            +
                      end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                      case data
         | 
| 49 | 
            +
                      when NilClass
         | 
| 50 | 
            +
                        data_new = 0
         | 
| 51 | 
            +
                      when Fixnum, Float
         | 
| 52 | 
            +
                        case
         | 
| 53 | 
            +
                        when data == 0
         | 
| 54 | 
            +
                          data_new = data.to_s
         | 
| 55 | 
            +
                        when data.abs < 1e-6
         | 
| 56 | 
            +
                          data_new = (data * 1_000_000_000).round(4).to_s + '*nV' if spec_type == 'volt'
         | 
| 57 | 
            +
                          data_new = data.to_s if spec_type.nil?
         | 
| 58 | 
            +
                        when data.abs < 1e-3
         | 
| 59 | 
            +
                          data_new = (data * 1_000_000).round(4).to_s + '*uV' if spec_type == 'volt'
         | 
| 60 | 
            +
                          data_new = data.to_s if spec_type.nil?
         | 
| 61 | 
            +
                        when data.abs < 1
         | 
| 62 | 
            +
                          data_new = (data * 1_000).round(4).to_s + '*mV' if spec_type == 'volt'
         | 
| 63 | 
            +
                          data_new = data.to_s if spec_type.nil?
         | 
| 64 | 
            +
                        else
         | 
| 65 | 
            +
                          data_new = data.to_s + '*V' if spec_type == 'volt'
         | 
| 66 | 
            +
                          data_new = data.to_s if spec_type.nil?
         | 
| 67 | 
            +
                        end
         | 
| 68 | 
            +
                        data_new = data_new.gsub(/^/, '=')
         | 
| 69 | 
            +
                      when String
         | 
| 70 | 
            +
                        data_new = data.gsub(/^/, '=').gsub(/(\W)([a-zA-Z])/, '\1_\2')
         | 
| 71 | 
            +
                        # Remove underscores from unit designations
         | 
| 72 | 
            +
                        data_new.gsub!(/(\W)_(nV|uV|mV|V|nA|uA|mA|A)(\W)/i, '\1\2\3')
         | 
| 73 | 
            +
                        data_new.gsub!(/(\W)_(nV|uV|mV|V|nA|uA|mA|A)$/i, '\1\2')
         | 
| 74 | 
            +
                      else
         | 
| 75 | 
            +
                        Origen.log.error "Unknown class type (#{data.class}) for spec value:  #{data}"
         | 
| 76 | 
            +
                        fail
         | 
| 77 | 
            +
                      end
         | 
| 78 | 
            +
                      data_new
         | 
| 79 | 
            +
                    end
         | 
| 80 | 
            +
                  end
         | 
| 81 | 
            +
                end
         | 
| 82 | 
            +
              end
         | 
| 83 | 
            +
            end
         | 
| @@ -0,0 +1,75 @@ | |
| 1 | 
            +
            module OrigenTesters
         | 
| 2 | 
            +
              module IGXLBasedTester
         | 
| 3 | 
            +
                class Base
         | 
| 4 | 
            +
                  class Job
         | 
| 5 | 
            +
                    attr_accessor :name
         | 
| 6 | 
            +
                    attr_accessor :pinmap
         | 
| 7 | 
            +
                    attr_accessor :instances
         | 
| 8 | 
            +
                    attr_accessor :flows
         | 
| 9 | 
            +
                    attr_accessor :ac_specs
         | 
| 10 | 
            +
                    attr_accessor :dc_specs
         | 
| 11 | 
            +
                    attr_accessor :patsets
         | 
| 12 | 
            +
                    attr_accessor :patgroups
         | 
| 13 | 
            +
                    attr_accessor :bintables
         | 
| 14 | 
            +
                    attr_accessor :cz
         | 
| 15 | 
            +
                    attr_accessor :test_procs
         | 
| 16 | 
            +
                    attr_accessor :mix_sig_timing
         | 
| 17 | 
            +
                    attr_accessor :wave_defs
         | 
| 18 | 
            +
                    attr_accessor :psets
         | 
| 19 | 
            +
                    attr_accessor :signals
         | 
| 20 | 
            +
                    attr_accessor :port_map
         | 
| 21 | 
            +
                    attr_accessor :fract_bus
         | 
| 22 | 
            +
                    attr_accessor :concurrent_seq
         | 
| 23 | 
            +
                    attr_accessor :comment
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    def initialize(jname, options = {}) # :nodoc:
         | 
| 26 | 
            +
                      @name = jname
         | 
| 27 | 
            +
                      options[:pinmap] ? @pinmap         = [options[:pinmap]] : @pinmap         = []
         | 
| 28 | 
            +
                      options[:instances] ? @instances      = [options[:instances]] : @instances      = []
         | 
| 29 | 
            +
                      options[:flows] ? @flows          = [options[:flows]] : @flows          = []
         | 
| 30 | 
            +
                      options[:ac_specs] ? @ac_specs       = [options[:ac_specs]] : @ac_specs       = []
         | 
| 31 | 
            +
                      options[:dc_specs] ? @dc_specs       = [options[:dc_specs]] : @dc_specs       = []
         | 
| 32 | 
            +
                      options[:patsets] ? @patsets        = [options[:patsets]] : @patsets        = []
         | 
| 33 | 
            +
                      options[:patgroups] ? @patgroups      = [options[:patgroups]] : @patgroups      = []
         | 
| 34 | 
            +
                      options[:bintables] ? @bintables      = [options[:bintables]] : @bintables      = []
         | 
| 35 | 
            +
                      options[:cz] ? @cz             = [options[:cz]] : @cz             = []
         | 
| 36 | 
            +
                      options[:test_procs] ? @test_procs     = [options[:test_procs]] : @test_procs     = []
         | 
| 37 | 
            +
                      options[:mix_sig_timing] ? @mix_sig_timing = [options[:mix_sig_timing]] : @mix_sig_timing = []
         | 
| 38 | 
            +
                      options[:wave_defs] ? @wave_defs      = [options[:wave_defs]] : @wave_defs      = []
         | 
| 39 | 
            +
                      options[:psets] ? @psets          = [options[:psets]] : @psets          = []
         | 
| 40 | 
            +
                      options[:signals] ? @signals        = [options[:signals]] : @signals        = []
         | 
| 41 | 
            +
                      options[:port_map] ? @port_map       = [options[:port_map]] : @port_map       = []
         | 
| 42 | 
            +
                      options[:fract_bus] ? @fract_bus      = [options[:fract_bus]] : @fract_bus      = []
         | 
| 43 | 
            +
                      options[:concurrent_seq] ? @concurrent_seq = [options[:concurrent_seq]] : @concurrent_seq = []
         | 
| 44 | 
            +
                      options[:comment] ? @comment        = options[:instances] : @comment        = nil
         | 
| 45 | 
            +
                    end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                    # Assigns job information for the given object
         | 
| 48 | 
            +
                    def add_job_info(jname, options = {})
         | 
| 49 | 
            +
                      @pinmap.push(options[:pinmap]) if options[:pinmap]
         | 
| 50 | 
            +
                      @instances.push(options[:instances]) if options[:instances]
         | 
| 51 | 
            +
                      @flows.push(options[:flows]) if options[:flows]
         | 
| 52 | 
            +
                      @ac_specs.push(options[:ac_specs]) if options[:ac_specs]
         | 
| 53 | 
            +
                      @dc_specs.push(options[:dc_specs]) if options[:dc_specs]
         | 
| 54 | 
            +
                      @patsets.push(options[:patsets]) if options[:patsets]
         | 
| 55 | 
            +
                      @patgroups.push(options[:patgroups]) if options[:patgroups]
         | 
| 56 | 
            +
                      @bintables.push(options[:bintables]) if options[:bintables]
         | 
| 57 | 
            +
                      @cz.push(options[:cz]) if options[:cz]
         | 
| 58 | 
            +
                      @test_procs.push(options[:test_procs]) if options[:test_procs]
         | 
| 59 | 
            +
                      @mix_sig_timing.push(options[:mix_sig_timing]) if options[:mix_sig_timing]
         | 
| 60 | 
            +
                      @wave_defs.push(options[:wave_defs]) if options[:wave_defs]
         | 
| 61 | 
            +
                      @psets.push(options[:psets]) if options[:psets]
         | 
| 62 | 
            +
                      @signals.push(options[:signals]) if options[:signals]
         | 
| 63 | 
            +
                      @port_map.push(options[:port_map]) if options[:port_map]
         | 
| 64 | 
            +
                      @fract_bus.push(options[:fract_bus]) if options[:fract_bus]
         | 
| 65 | 
            +
                      @concurrent_seq.push(options[:concurrent_seq]) if options[:concurrent_seq]
         | 
| 66 | 
            +
                      @comment = options[:instances] if options[:instances]
         | 
| 67 | 
            +
                    end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                    def platform
         | 
| 70 | 
            +
                      Origen.interface.platform
         | 
| 71 | 
            +
                    end
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
            end
         | 
| @@ -0,0 +1,44 @@ | |
| 1 | 
            +
            module OrigenTesters
         | 
| 2 | 
            +
              module IGXLBasedTester
         | 
| 3 | 
            +
                class Base
         | 
| 4 | 
            +
                  class Jobs
         | 
| 5 | 
            +
                    include ::OrigenTesters::Generator
         | 
| 6 | 
            +
                    attr_accessor :jobs
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                    OUTPUT_PREFIX = nil
         | 
| 9 | 
            +
                    OUTPUT_POSTFIX = nil
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    def initialize # :nodoc:
         | 
| 12 | 
            +
                      @jobs = {}
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    def add(jname, options = {})
         | 
| 16 | 
            +
                      @jobs.key?(jname) ? @jobs[jname].add_job_info(jname, options) : @jobs[jname] = platform::Job.new(jname, options)
         | 
| 17 | 
            +
                      @jobs[jname]
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    def finalize(options = {})
         | 
| 21 | 
            +
                      @jobs.each do |_key, job|
         | 
| 22 | 
            +
                        job.pinmap         = job.pinmap.flatten.uniq
         | 
| 23 | 
            +
                        job.instances      = job.instances.flatten.uniq
         | 
| 24 | 
            +
                        job.flows          = job.flows.flatten.uniq
         | 
| 25 | 
            +
                        job.ac_specs       = job.ac_specs.flatten.uniq
         | 
| 26 | 
            +
                        job.dc_specs       = job.dc_specs.flatten.uniq
         | 
| 27 | 
            +
                        job.patsets        = job.patsets.flatten.uniq
         | 
| 28 | 
            +
                        job.patgroups      = job.patgroups.flatten.uniq
         | 
| 29 | 
            +
                        job.bintables      = job.bintables.flatten.uniq
         | 
| 30 | 
            +
                        job.cz             = job.cz.flatten.uniq
         | 
| 31 | 
            +
                        job.test_procs     = job.test_procs.flatten.uniq
         | 
| 32 | 
            +
                        job.mix_sig_timing = job.mix_sig_timing.flatten.uniq
         | 
| 33 | 
            +
                        job.wave_defs      = job.wave_defs.flatten.uniq
         | 
| 34 | 
            +
                        job.psets          = job.psets.flatten.uniq
         | 
| 35 | 
            +
                        job.signals        = job.signals.flatten.uniq
         | 
| 36 | 
            +
                        job.port_map       = job.port_map.flatten.uniq
         | 
| 37 | 
            +
                        job.fract_bus      = job.fract_bus.flatten.uniq
         | 
| 38 | 
            +
                        job.concurrent_seq = job.concurrent_seq.flatten.uniq
         | 
| 39 | 
            +
                      end
         | 
| 40 | 
            +
                    end
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
            end
         | 
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            module OrigenTesters
         | 
| 2 | 
            +
              module IGXLBasedTester
         | 
| 3 | 
            +
                class Base
         | 
| 4 | 
            +
                  class References
         | 
| 5 | 
            +
                    include ::OrigenTesters::Generator
         | 
| 6 | 
            +
                    attr_accessor :references
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                    OUTPUT_PREFIX = nil
         | 
| 9 | 
            +
                    OUTPUT_POSTFIX = nil
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    def initialize # :nodoc:
         | 
| 12 | 
            +
                      @references = []
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    def add(reference, options = {})
         | 
| 16 | 
            +
                      options = {
         | 
| 17 | 
            +
                        comment: nil
         | 
| 18 | 
            +
                      }.merge(options)
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                      @references << { ref: reference, comment: options[:comment] }
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
            end
         | 
| @@ -6,12 +6,14 @@ module OrigenTesters | |
| 6 6 |  | 
| 7 7 | 
             
                    attr_accessor :ts
         | 
| 8 8 | 
             
                    attr_accessor :ts_sheet_pins
         | 
| 9 | 
            +
                    attr_accessor :ts_basic
         | 
| 9 10 |  | 
| 10 11 | 
             
                    OUTPUT_PREFIX = 'TS'
         | 
| 11 12 | 
             
                    # OUTPUT_POSTFIX = 'TS'
         | 
| 12 13 |  | 
| 13 | 
            -
                    def initialize # :nodoc:
         | 
| 14 | 
            -
                      @ts | 
| 14 | 
            +
                    def initialize(options = {}) # :nodoc:
         | 
| 15 | 
            +
                      @ts       = {}
         | 
| 16 | 
            +
                      @ts_basic = options[:timeset_basic]
         | 
| 15 17 | 
             
                    end
         | 
| 16 18 |  | 
| 17 19 | 
             
                    def add(tsname, pin, esname, options = {})
         | 
| @@ -0,0 +1,49 @@ | |
| 1 | 
            +
            module OrigenTesters
         | 
| 2 | 
            +
              module IGXLBasedTester
         | 
| 3 | 
            +
                class Base
         | 
| 4 | 
            +
                  class TimesetsBasic
         | 
| 5 | 
            +
                    include ::OrigenTesters::Generator
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                    attr_accessor :ts
         | 
| 8 | 
            +
                    attr_accessor :ts_sheet_pins
         | 
| 9 | 
            +
                    attr_accessor :ts_basic
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    OUTPUT_PREFIX = 'TSB'
         | 
| 12 | 
            +
                    # OUTPUT_POSTFIX = 'TS'
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    def initialize(options = {}) # :nodoc:
         | 
| 15 | 
            +
                      @ts       = {}
         | 
| 16 | 
            +
                      @ts_basic = options[:timeset_basic]
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    def add(tsname, pin, esname, options = {})
         | 
| 20 | 
            +
                      tsname = tsname.to_sym unless tsname.is_a? Symbol
         | 
| 21 | 
            +
                      pin = pin.to_sym unless pin.is_a? Symbol
         | 
| 22 | 
            +
                      esname = pin.to_sym unless esname.is_a? Symbol
         | 
| 23 | 
            +
                      @ts.key?(tsname) ? @ts[tsname].add_edge(pin, esname) : @ts[tsname] = platform::Timeset.new(tsname, pin, esname, options)
         | 
| 24 | 
            +
                      @ts_sheet_pins = options[:ts_sheet_pins] unless @ts_sheet_pins
         | 
| 25 | 
            +
                      @ts[tsname]
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                    def finalize(options = {})
         | 
| 29 | 
            +
                    end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                    # Populate an array of pins based on the pin or pingroup
         | 
| 32 | 
            +
                    def get_pin_objects(grp)
         | 
| 33 | 
            +
                      pins = []
         | 
| 34 | 
            +
                      if Origen.top_level.pin(grp).is_a?(Origen::Pins::Pin) ||
         | 
| 35 | 
            +
                         Origen.top_level.pin(grp).is_a?(Origen::Pins::FunctionProxy)
         | 
| 36 | 
            +
                        pins << Origen.top_level.pin(grp)
         | 
| 37 | 
            +
                      elsif Origen.top_level.pin(grp).is_a?(Origen::Pins::PinCollection)
         | 
| 38 | 
            +
                        Origen.top_level.pin(grp).each do |pin|
         | 
| 39 | 
            +
                          pins << pin
         | 
| 40 | 
            +
                        end
         | 
| 41 | 
            +
                      else
         | 
| 42 | 
            +
                        Origen.log.error "Could not find pin class: #{grp}  #{Origen.top_level.pin(grp).class}"
         | 
| 43 | 
            +
                      end
         | 
| 44 | 
            +
                      pins
         | 
| 45 | 
            +
                    end
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
            end
         | 
| @@ -0,0 +1,10 @@ | |
| 1 | 
            +
            module OrigenTesters
         | 
| 2 | 
            +
              module IGXLBasedTester
         | 
| 3 | 
            +
                class UltraFLEX
         | 
| 4 | 
            +
                  require 'origen_testers/igxl_based_tester/base/global_specs'
         | 
| 5 | 
            +
                  class GlobalSpecs < Base::GlobalSpecs
         | 
| 6 | 
            +
                    TEMPLATE = "#{Origen.root!}/lib/origen_testers/igxl_based_tester/ultraflex/templates/global_specs.txt.erb"
         | 
| 7 | 
            +
                  end
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
            end
         | 
| @@ -0,0 +1,10 @@ | |
| 1 | 
            +
            module OrigenTesters
         | 
| 2 | 
            +
              module IGXLBasedTester
         | 
| 3 | 
            +
                class UltraFLEX
         | 
| 4 | 
            +
                  require 'origen_testers/igxl_based_tester/base/jobs'
         | 
| 5 | 
            +
                  class Jobs < Base::Jobs
         | 
| 6 | 
            +
                    TEMPLATE = "#{Origen.root!}/lib/origen_testers/igxl_based_tester/ultraflex/templates/jobs.txt.erb"
         | 
| 7 | 
            +
                  end
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
            end
         | 
| @@ -0,0 +1,10 @@ | |
| 1 | 
            +
            module OrigenTesters
         | 
| 2 | 
            +
              module IGXLBasedTester
         | 
| 3 | 
            +
                class UltraFLEX
         | 
| 4 | 
            +
                  require 'origen_testers/igxl_based_tester/base/references'
         | 
| 5 | 
            +
                  class References < Base::References
         | 
| 6 | 
            +
                    TEMPLATE = "#{Origen.root!}/lib/origen_testers/igxl_based_tester/ultraflex/templates/references.txt.erb"
         | 
| 7 | 
            +
                  end
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
            end
         | 
| @@ -6,7 +6,7 @@ | |
| 6 6 | 
             
            <%= "DTACSpecSheet,version=2.0:platform=Jaguar:toprow=-1:leftcol=-1:rightcol=-1\tAC Specs" %>
         | 
| 7 7 | 
             
            <%= "" %>
         | 
| 8 8 | 
             
            <%= "\t\t\tSelector\t\t#{specset_names}" %>
         | 
| 9 | 
            -
            <%= "\tSymbol\tValue\tName\tVal\t#{categories}" %>
         | 
| 9 | 
            +
            <%= "\tSymbol\tValue\tName\tVal\t#{categories}Comment" %>
         | 
| 10 10 | 
             
            %
         | 
| 11 11 | 
             
            % # Gather spec selectors
         | 
| 12 12 | 
             
            % selectors = []
         | 
| @@ -6,7 +6,7 @@ | |
| 6 6 | 
             
            <%= "DTDCSpecSheet,version=2.0:platform=Jaguar:toprow=-1:leftcol=-1:rightcol=-1\tDC Specs" %>
         | 
| 7 7 | 
             
            <%= "" %>
         | 
| 8 8 | 
             
            <%= "\t\t\tSelector\t\t#{specset_names}" %>
         | 
| 9 | 
            -
            <%= "\tSymbol\tValue\tName\tVal\t#{categories}" %>
         | 
| 9 | 
            +
            <%= "\tSymbol\tValue\tName\tVal\t#{categories}Comment" %>
         | 
| 10 10 | 
             
            %
         | 
| 11 11 | 
             
            % # Gather spec selectors
         | 
| 12 12 | 
             
            % selectors = []
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            <%= "DTGlobalSpecSheet,version=2.0:platform=Jaguar:toprow=-1:leftcol=-1:rightcol=-1\tGlobal Specs" %>
         | 
| 2 | 
            +
            <%= "" %>
         | 
| 3 | 
            +
            <%= "\tSymbol\tJob\tValue\tComment" %>
         | 
| 4 | 
            +
            <%= "\tVcl_default\t\t-1\tDetector clamp voltage low" %>
         | 
| 5 | 
            +
            <%= "\tVch_default\t\t6\tDetector clamp voltage high" %>
         | 
| 6 | 
            +
            <%= "\tVph_default\t\t5\t" %>
         | 
| 7 | 
            +
            %
         | 
| 8 | 
            +
            % # Gather spec values per category for each spec/specset
         | 
| 9 | 
            +
            % global_specs.sort.each do |next_spec, jobs|
         | 
| 10 | 
            +
            %   jobs.each do |job, attrs|
         | 
| 11 | 
            +
            %   value = format_uflex_global_spec(attrs[:value], spec: next_spec)
         | 
| 12 | 
            +
            %   comnt = attrs[:comment]
         | 
| 13 | 
            +
            <%= "\t#{next_spec}\t#{job}\t#{value}\t#{comnt}" %>
         | 
| 14 | 
            +
            %   end
         | 
| 15 | 
            +
            % end
         | 
| 16 | 
            +
            %
         | 
| @@ -0,0 +1,27 @@ | |
| 1 | 
            +
            <%= "DTJobListSheet,version=2.5:platform=Jaguar:toprow=-1:leftcol=-1:rightcol=-1\tJob List" %>
         | 
| 2 | 
            +
            <%= "" %>
         | 
| 3 | 
            +
            <%= "\t\tSheet Parameters\t" %>
         | 
| 4 | 
            +
            <%= "\tJob Name\tPin Map\tTest Instances\tFlow Table\tAC Specs\tDC Specs\tPattern Sets\tPattern Groups\tBin Table\tCharacterization\tTest Procedures\tMixed Signal Timing\tWave Definitions\tPsets\tSignals\tPort Map\tFractional Bus\tConcurrent Sequence\tComment" %>
         | 
| 5 | 
            +
            % @jobs.each do |_key, job|
         | 
| 6 | 
            +
            %   name = job.name
         | 
| 7 | 
            +
            %   pinmap = job.pinmap.join(',')
         | 
| 8 | 
            +
            %   instances = job.instances.join(',')
         | 
| 9 | 
            +
            %   flows = job.flows.join(',')
         | 
| 10 | 
            +
            %   ac_specs = job.ac_specs.join(',')
         | 
| 11 | 
            +
            %   dc_specs = job.dc_specs.join(',')
         | 
| 12 | 
            +
            %   patsets = job.patsets.join(',')
         | 
| 13 | 
            +
            %   patgroups = job.patgroups.join(',')
         | 
| 14 | 
            +
            %   bintables = job.bintables.join(',')
         | 
| 15 | 
            +
            %   cz = job.cz.join(',')
         | 
| 16 | 
            +
            %   test_procs = job.test_procs.join(',')
         | 
| 17 | 
            +
            %   mix_sig_timing = job.mix_sig_timing.join(',')
         | 
| 18 | 
            +
            %   wave_defs = job.wave_defs.join(',')
         | 
| 19 | 
            +
            %   psets = job.psets.join(',')
         | 
| 20 | 
            +
            %   signals = job.signals.join(',')
         | 
| 21 | 
            +
            %   port_map = job.port_map.join(',')
         | 
| 22 | 
            +
            %   fract_bus = job.fract_bus.join(',')
         | 
| 23 | 
            +
            %   concurrent_seq = job.concurrent_seq.join(',')
         | 
| 24 | 
            +
            %   comment = job.comment
         | 
| 25 | 
            +
            <%= "\t#{name}\t#{pinmap}\t#{instances}\t#{flows}\t#{ac_specs}\t#{dc_specs}\t#{patsets}\t#{patgroups}\t#{bintables}\t#{cz}\t#{test_procs}\t#{mix_sig_timing}\t#{wave_defs}\t#{signals}\t#{port_map}\t#{fract_bus}\t#{concurrent_seq}\t#{comment}" %>
         | 
| 26 | 
            +
            % end
         | 
| 27 | 
            +
            %
         | 
| @@ -0,0 +1,9 @@ | |
| 1 | 
            +
            <%= "DTReferencesSheet,version=2.0:platform=Jaguar:toprow=-1:leftcol=-1:rightcol=-1\tReferences" %>
         | 
| 2 | 
            +
            <%= "" %>
         | 
| 3 | 
            +
            <%= "\tFile Path\tComment\t" %>
         | 
| 4 | 
            +
            % @references.each do |reference|
         | 
| 5 | 
            +
            %   ref     = reference[:ref]
         | 
| 6 | 
            +
            %   comment = reference[:comment]
         | 
| 7 | 
            +
            <%= "\t#{ref}\t#{comment}" %>
         | 
| 8 | 
            +
            % end
         | 
| 9 | 
            +
            %
         | 
| @@ -0,0 +1,149 @@ | |
| 1 | 
            +
            % line_cnt = 8
         | 
| 2 | 
            +
            % print_hdr = true
         | 
| 3 | 
            +
            %
         | 
| 4 | 
            +
            % ## Hash Autovivification
         | 
| 5 | 
            +
            % l = ->(h, k) { h[k] = Hash.new(&l) }
         | 
| 6 | 
            +
            % eset_eqns = Hash.new(&l)
         | 
| 7 | 
            +
            % eset_eqns_print = Hash.new(&l)
         | 
| 8 | 
            +
            % tset_eqns = Hash.new(&l)
         | 
| 9 | 
            +
            % tset_pin_list = []
         | 
| 10 | 
            +
            %
         | 
| 11 | 
            +
            % # Look up edge information in the corresponding Edgesets sheet
         | 
| 12 | 
            +
            % edgesets = Origen.interface.edgeset_sheets[@filename]
         | 
| 13 | 
            +
            % @ts_sheet_pins.each do |grp|
         | 
| 14 | 
            +
            %   if Origen.top_level.has_pin?(grp)
         | 
| 15 | 
            +
            %     pin_ary = get_pin_objects(grp)
         | 
| 16 | 
            +
            %     pin_ary.each do |next_pin|
         | 
| 17 | 
            +
            %       pin_nam = Origen.top_level.pin(next_pin.id).name
         | 
| 18 | 
            +
            %       found_pin_eqn = false
         | 
| 19 | 
            +
            %       edgesets.es.keys.each do |eset|
         | 
| 20 | 
            +
            %         if edgesets.es[eset].pins.key?(pin_nam)
         | 
| 21 | 
            +
            %           eset_eqns[grp][eset][pin_nam] = edgesets.es[eset].pins[pin_nam]
         | 
| 22 | 
            +
            %           eset_eqns_print[grp][pin_nam][eset] = edgesets.es[eset].pins[pin_nam]
         | 
| 23 | 
            +
            %           found_pin_eqn = true
         | 
| 24 | 
            +
            %         end
         | 
| 25 | 
            +
            %       end
         | 
| 26 | 
            +
            %       unless found_pin_eqn
         | 
| 27 | 
            +
            %         Origen.log.error "GRP #{grp}, PIN #{pin_nam}:  Pin timing is not defined in any edgesets"
         | 
| 28 | 
            +
            %         next
         | 
| 29 | 
            +
            %       end
         | 
| 30 | 
            +
            %     end
         | 
| 31 | 
            +
            %   else
         | 
| 32 | 
            +
            %     Origen.log.error "Undefined pin/pingroup in pattern header (#{grp})"
         | 
| 33 | 
            +
            %   end
         | 
| 34 | 
            +
            % end
         | 
| 35 | 
            +
            %
         | 
| 36 | 
            +
            % eset_eqns.keys.each do |grp|
         | 
| 37 | 
            +
            %   grp_edge_same = true
         | 
| 38 | 
            +
            %   eset_eqns[grp].keys.each do |eset_key|
         | 
| 39 | 
            +
            %     grp_edge = nil
         | 
| 40 | 
            +
            %     pin_ary = get_pin_objects(grp)
         | 
| 41 | 
            +
            %     pin_ary.each do |next_pin|
         | 
| 42 | 
            +
            %       pin_nam = Origen.top_level.pin(next_pin.id).name
         | 
| 43 | 
            +
            %       if eset_eqns[grp][eset_key].key?(pin_nam)
         | 
| 44 | 
            +
            %         if grp_edge.nil?
         | 
| 45 | 
            +
            %           grp_edge = eset_eqns[grp][eset_key][pin_nam]
         | 
| 46 | 
            +
            %         elsif !edgesets.edges_eql?(grp_edge, eset_eqns[grp][eset_key][pin_nam])
         | 
| 47 | 
            +
            %           grp_edge_same = false
         | 
| 48 | 
            +
            %         end
         | 
| 49 | 
            +
            %       else
         | 
| 50 | 
            +
            %         grp_edge_same = false
         | 
| 51 | 
            +
            %       end
         | 
| 52 | 
            +
            %     end
         | 
| 53 | 
            +
            %   end
         | 
| 54 | 
            +
            %
         | 
| 55 | 
            +
            %   pin_grp_done = false
         | 
| 56 | 
            +
            %   eset_eqns_print[grp].keys.each do |pin_nam|
         | 
| 57 | 
            +
            %     pin_grp_done ? break : nil
         | 
| 58 | 
            +
            %     eset_eqns_print[grp][pin_nam].keys.each do |eset|
         | 
| 59 | 
            +
            %       clk_per   = edgesets.es[eset].pins[pin_nam].clk_per
         | 
| 60 | 
            +
            %       clk_per   = edgesets.format_uflex_edge(clk_per, line_cnt)
         | 
| 61 | 
            +
            %       if print_hdr
         | 
| 62 | 
            +
            %         print_hdr = false
         | 
| 63 | 
            +
            %         tim_mode  = edgesets.es[eset].t_mode
         | 
| 64 | 
            +
            %       end
         | 
| 65 | 
            +
            %       if grp_edge_same
         | 
| 66 | 
            +
            %         tset_pin_list.push(grp) unless tset_pin_list.include?(grp)
         | 
| 67 | 
            +
            %         pin_grp_done = true
         | 
| 68 | 
            +
            %       else
         | 
| 69 | 
            +
            %         tset_pin_list.push(pin_nam) unless tset_pin_list.include?(pin_nam)
         | 
| 70 | 
            +
            %       end
         | 
| 71 | 
            +
            %     end
         | 
| 72 | 
            +
            %   end
         | 
| 73 | 
            +
            % end
         | 
| 74 | 
            +
            %
         | 
| 75 | 
            +
            % # Print equations for all pins and pingroups in the pin header
         | 
| 76 | 
            +
            % @ts.keys.each do |tset|
         | 
| 77 | 
            +
            %   t_mode = ''
         | 
| 78 | 
            +
            %   period = ''
         | 
| 79 | 
            +
            %   @ts_sheet_pins.each do |grp|
         | 
| 80 | 
            +
            %     if Origen.top_level.has_pin?(grp)
         | 
| 81 | 
            +
            %       pin_ary = get_pin_objects(grp)
         | 
| 82 | 
            +
            %       pin_ary.each do |next_pin|
         | 
| 83 | 
            +
            %         pin_nam = Origen.top_level.pin(next_pin.id).name
         | 
| 84 | 
            +
            %         # If the edgeset for this pin is already specified within the timeset- apply it here
         | 
| 85 | 
            +
            %         if @ts[tset].pins.key?(pin_nam)
         | 
| 86 | 
            +
            %           tset_eqns[tset][grp][pin_nam] = @ts[tset].pins[pin_nam]
         | 
| 87 | 
            +
            %         else
         | 
| 88 | 
            +
            %           Origen.log.error "TSET #{tset},  PIN #{pin_nam}:  Pin timing cannot be found"
         | 
| 89 | 
            +
            %           next
         | 
| 90 | 
            +
            %         end
         | 
| 91 | 
            +
            %       end
         | 
| 92 | 
            +
            %     else
         | 
| 93 | 
            +
            %       Origen.log.error "Undefined pin/pingroup in pattern header (#{grp})"
         | 
| 94 | 
            +
            %     end
         | 
| 95 | 
            +
            %   end
         | 
| 96 | 
            +
            % end
         | 
| 97 | 
            +
            %
         | 
| 98 | 
            +
            % print_hdr = true
         | 
| 99 | 
            +
            % tset_eqns.keys.each do |tset_key|
         | 
| 100 | 
            +
            %   tset_eqns[tset_key].keys.each do |grp|
         | 
| 101 | 
            +
            %     tset_eqns[tset_key][grp].keys.each do |pin_nam|
         | 
| 102 | 
            +
            %       eset = @ts[tset_key].pins[pin_nam]
         | 
| 103 | 
            +
            %       edge = edgesets.es[eset].pins[pin_nam]
         | 
| 104 | 
            +
            %       data_src  = edge.d_src
         | 
| 105 | 
            +
            %       data_fmt  = edge.d_fmt
         | 
| 106 | 
            +
            %       drv_on    = edge.d0_edge
         | 
| 107 | 
            +
            %       drv_data  = edge.d1_edge
         | 
| 108 | 
            +
            %       drv_ret   = edge.d2_edge
         | 
| 109 | 
            +
            %       drv_off   = edge.d3_edge
         | 
| 110 | 
            +
            %       cmp_mode  = edge.c_mode
         | 
| 111 | 
            +
            %       cmp_open  = edge.c1_edge
         | 
| 112 | 
            +
            %       cmp_close = edge.c2_edge
         | 
| 113 | 
            +
            %       tim_res   = edge.t_res
         | 
| 114 | 
            +
            %       clk_per   = edge.clk_per
         | 
| 115 | 
            +
            %       drv_on    = edgesets.format_uflex_edge_tsb(drv_on, line_cnt)
         | 
| 116 | 
            +
            %       drv_data  = edgesets.format_uflex_edge_tsb(drv_data, line_cnt)
         | 
| 117 | 
            +
            %       drv_ret   = edgesets.format_uflex_edge_tsb(drv_ret, line_cnt)
         | 
| 118 | 
            +
            %       drv_off   = edgesets.format_uflex_edge_tsb(drv_off, line_cnt)
         | 
| 119 | 
            +
            %       cmp_open  = edgesets.format_uflex_edge_tsb(cmp_open, line_cnt)
         | 
| 120 | 
            +
            %       cmp_close = edgesets.format_uflex_edge_tsb(cmp_close, line_cnt)
         | 
| 121 | 
            +
            %       clk_per   = edgesets.format_uflex_edge_tsb(clk_per, line_cnt, no_disable: true)
         | 
| 122 | 
            +
            %       clk_per == '' ? setup = 'i/o' : setup = 'clock'
         | 
| 123 | 
            +
            %
         | 
| 124 | 
            +
            %       tset_per  = edgesets.es[eset].period
         | 
| 125 | 
            +
            %       tset_per  = edgesets.format_uflex_edge_tsb(tset_per, line_cnt)
         | 
| 126 | 
            +
            %       if print_hdr
         | 
| 127 | 
            +
            %         print_hdr = false
         | 
| 128 | 
            +
            %         tim_mode  = @ts[tset_key].t_mode
         | 
| 129 | 
            +
            %         master_ts  = @ts[tset_key].master_ts
         | 
| 130 | 
            +
            <%= "DTTimesetBasicSheet,version=2.3:platform=Jaguar:toprow=-1:leftcol=-1:rightcol=-1\tTime Sets (Basic)" %>
         | 
| 131 | 
            +
            <%= "" %>
         | 
| 132 | 
            +
            <%= "\tTiming Mode:\t#{tim_mode}\t\tMaster Timeset Name:\t" %>
         | 
| 133 | 
            +
            <%= "\tTime Domain:\t\t\tStrobe Ref Setup Name:" %>
         | 
| 134 | 
            +
            <%= "" %>
         | 
| 135 | 
            +
            <%= "\t\tCycle\tPin/Group\t\t\tData\t\tDrive\t\t\t\tCompare\t\t\t\tEdge Resolution" %>
         | 
| 136 | 
            +
            <%= "\tTime Set\tPeriod\tName\tClock Period\tSetup\tSrc\tFmt\tOn\tData\tReturn\tOff\tMode\tOpen\tClose\tRef Offset\tMode\tComment" %>
         | 
| 137 | 
            +
            %       end
         | 
| 138 | 
            +
            %       if tset_pin_list.include?(grp)
         | 
| 139 | 
            +
            <%= "\t#{tset_key}\t#{tset_per}\t#{grp}\t#{clk_per}\t#{setup}\t#{data_src}\t#{data_fmt}\t#{drv_on}\t#{drv_data}\t#{drv_ret}\t#{drv_off}\t#{cmp_mode}\t#{cmp_open}\t#{cmp_close}\t\t#{tim_res}\t" %>
         | 
| 140 | 
            +
            %         line_cnt += 1
         | 
| 141 | 
            +
            %         break
         | 
| 142 | 
            +
            %       elsif tset_pin_list.include?(pin_nam)
         | 
| 143 | 
            +
            <%= "\t#{tset_key}\t#{tset_per}\t#{pin_nam}\t#{clk_per}\t#{setup}\t#{data_src}\t#{data_fmt}\t#{drv_on}\t#{drv_data}\t#{drv_ret}\t#{drv_off}\t#{cmp_mode}\t#{cmp_open}\t#{cmp_close}\t\t#{tim_res}\t" %>
         | 
| 144 | 
            +
            %         line_cnt += 1
         | 
| 145 | 
            +
            %       end
         | 
| 146 | 
            +
            %     end
         | 
| 147 | 
            +
            %   end
         | 
| 148 | 
            +
            % end
         | 
| 149 | 
            +
            %
         | 
| @@ -0,0 +1,10 @@ | |
| 1 | 
            +
            module OrigenTesters
         | 
| 2 | 
            +
              module IGXLBasedTester
         | 
| 3 | 
            +
                class UltraFLEX
         | 
| 4 | 
            +
                  require 'origen_testers/igxl_based_tester/base/timesets_basic'
         | 
| 5 | 
            +
                  class TimesetsBasic < Base::TimesetsBasic
         | 
| 6 | 
            +
                    TEMPLATE = "#{Origen.root!}/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets_basic.txt.erb"
         | 
| 7 | 
            +
                  end
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
            end
         | 
| @@ -13,7 +13,14 @@ module Origen | |
| 13 13 | 
             
                  # Create a call stack of flows so that we can work out where the nodes
         | 
| 14 14 | 
             
                  # of the ATP AST originated from
         | 
| 15 15 | 
             
                  def create(options = {}, &block)
         | 
| 16 | 
            -
                     | 
| 16 | 
            +
                    # Patch for Windows operation since the path can start with something like "C:/"
         | 
| 17 | 
            +
                    if caller[0] =~ /(:(\/|\\))/
         | 
| 18 | 
            +
                      orig_separator = Regexp.last_match(1)
         | 
| 19 | 
            +
                      file, line = *caller[0].sub(/:(\/|\\)/, '_ORIG_SEPARATOR_').split(':')
         | 
| 20 | 
            +
                      file = file.sub('_ORIG_SEPARATOR_', orig_separator)
         | 
| 21 | 
            +
                    else
         | 
| 22 | 
            +
                      file, line = *caller[0].split(':')
         | 
| 23 | 
            +
                    end
         | 
| 17 24 | 
             
                    OrigenTesters::Flow.callstack << file
         | 
| 18 25 | 
             
                    flow_comments, comments = *_extract_comments(OrigenTesters::Flow.callstack.last, line.to_i)
         | 
| 19 26 | 
             
                    OrigenTesters::Flow.comment_stack << comments
         | 
| @@ -338,9 +338,18 @@ module OrigenTesters | |
| 338 338 | 
             
                    }.merge(options)
         | 
| 339 339 | 
             
                    pin_list = ordered_pins.map do |p|
         | 
| 340 340 | 
             
                      if Origen.app.pin_pattern_order.include?(p.id)
         | 
| 341 | 
            -
                         | 
| 341 | 
            +
                        # specified name overrides pin name
         | 
| 342 | 
            +
                        if (p.is_a?(Origen::Pins::PinCollection) && p.size > 1) || p.id != p.name
         | 
| 343 | 
            +
                          p.id.to_s # groups or aliases can be lower case
         | 
| 344 | 
            +
                        else
         | 
| 345 | 
            +
                          p.id.to_s.upcase # pins must be uppercase
         | 
| 346 | 
            +
                        end
         | 
| 342 347 | 
             
                      else
         | 
| 343 | 
            -
                        p. | 
| 348 | 
            +
                        if (p.is_a?(Origen::Pins::PinCollection) && p.size > 1) || p.id != p.name
         | 
| 349 | 
            +
                          p.name.to_s # groups or aliases can be lower case
         | 
| 350 | 
            +
                        else
         | 
| 351 | 
            +
                          p.name.to_s.upcase # pins must be uppercase
         | 
| 352 | 
            +
                        end
         | 
| 344 353 | 
             
                      end
         | 
| 345 354 | 
             
                    end.join(' ')
         | 
| 346 355 | 
             
                    microcode "FORMAT #{pin_list};"
         | 
| @@ -169,7 +169,7 @@ module OrigenTesters | |
| 169 169 | 
             
                    pin = options.delete(:pin)
         | 
| 170 170 | 
             
                    edge = options.delete(:edge)
         | 
| 171 171 |  | 
| 172 | 
            -
                    @edgeset = edgesets(sheet_name)
         | 
| 172 | 
            +
                    @edgeset = edgesets(sheet_name, options)
         | 
| 173 173 | 
             
                    @edgeset.add(edgeset, pin, edge, options)
         | 
| 174 174 | 
             
                    collect_ac_specs(@edgeset.es[edgeset].spec_sheet, edge)
         | 
| 175 175 | 
             
                  end
         | 
| @@ -183,7 +183,7 @@ module OrigenTesters | |
| 183 183 | 
             
                    pin = options.delete(:pin)
         | 
| 184 184 | 
             
                    eset = options.delete(:eset)
         | 
| 185 185 |  | 
| 186 | 
            -
                    @timeset = timesets(sheet_name)
         | 
| 186 | 
            +
                    @timeset = timesets(sheet_name, options)
         | 
| 187 187 | 
             
                    @timeset.add(timeset, pin, eset, options)
         | 
| 188 188 | 
             
                  end
         | 
| 189 189 |  | 
| @@ -331,6 +331,47 @@ module OrigenTesters | |
| 331 331 | 
             
                      ss.add(var, options)
         | 
| 332 332 | 
             
                    end
         | 
| 333 333 | 
             
                  end
         | 
| 334 | 
            +
             | 
| 335 | 
            +
                  def global_spec(var, options = {})
         | 
| 336 | 
            +
                    options = {
         | 
| 337 | 
            +
                      job:     nil,
         | 
| 338 | 
            +
                      value:   nil,
         | 
| 339 | 
            +
                      comment: nil
         | 
| 340 | 
            +
                    }.merge(options)
         | 
| 341 | 
            +
             | 
| 342 | 
            +
                    global_specs('SpecsGlobal').add(var, job: options[:job], value: options[:value], comment: options[:comment])
         | 
| 343 | 
            +
                  end
         | 
| 344 | 
            +
             | 
| 345 | 
            +
                  def job_def(jname, options = {})
         | 
| 346 | 
            +
                    options = {
         | 
| 347 | 
            +
                      pinmap:         pinmap_sheets.map { |k, v| v.filename.gsub(/\.txt$/, '') },
         | 
| 348 | 
            +
                      instances:      test_instance_sheets.map { |k, v| v.filename.gsub(/\.txt$/, '') },
         | 
| 349 | 
            +
                      flows:          flow_sheets.map { |k, v| v.filename.gsub(/\.txt$/, '') },
         | 
| 350 | 
            +
                      ac_specs:       ac_specset_sheets.map { |k, v| v.filename.gsub(/\.txt$/, '') },
         | 
| 351 | 
            +
                      dc_specs:       dc_specset_sheets.map { |k, v| v.filename.gsub(/\.txt$/, '') },
         | 
| 352 | 
            +
                      patsets:        patset_sheets.map { |k, v| v.filename.gsub(/\.txt$/, '') },
         | 
| 353 | 
            +
                      patgroups:      patgroup_sheets.map { |k, v| v.filename.gsub(/\.txt$/, '') },
         | 
| 354 | 
            +
                      bintables:      [],
         | 
| 355 | 
            +
                      cz:             [],
         | 
| 356 | 
            +
                      test_procs:     [],
         | 
| 357 | 
            +
                      mix_sig_timing: [],
         | 
| 358 | 
            +
                      wave_defs:      [],
         | 
| 359 | 
            +
                      psets:          [],
         | 
| 360 | 
            +
                      sigs_port_map:  [],
         | 
| 361 | 
            +
                      fract_bus:      [],
         | 
| 362 | 
            +
                      comment:        nil
         | 
| 363 | 
            +
                    }.merge(options)
         | 
| 364 | 
            +
             | 
| 365 | 
            +
                    program_jobs('Jobs').add(jname, options)
         | 
| 366 | 
            +
                  end
         | 
| 367 | 
            +
             | 
| 368 | 
            +
                  def reference(reference, options = {})
         | 
| 369 | 
            +
                    options = {
         | 
| 370 | 
            +
                      comment:        nil
         | 
| 371 | 
            +
                    }.merge(options)
         | 
| 372 | 
            +
             | 
| 373 | 
            +
                    references('Refs').add(reference, options)
         | 
| 374 | 
            +
                  end
         | 
| 334 375 | 
             
                end
         | 
| 335 376 | 
             
              end
         | 
| 336 377 | 
             
            end
         | 
    
        data/program/uflex_resources.rb
    CHANGED
    
    | @@ -93,6 +93,30 @@ Resources.create do | |
| 93 93 | 
             
              timeset :func, timeset: :jtag, pin: :tdi,  eset: :es_jtag
         | 
| 94 94 | 
             
              timeset :func, timeset: :jtag, pin: :tdo,  eset: :es_jtag
         | 
| 95 95 |  | 
| 96 | 
            +
              # Now repeat the timing generation process to create a timeset_basic sheet
         | 
| 97 | 
            +
              edgeset :func_tsb, edgeset: :default, pin: :tclk, edge: edge_collection.edges[:default][:default], spec_sheet: :func, es_sheet_pins: timing_sheet_pins, timeset_basic: true
         | 
| 98 | 
            +
              edgeset :func_tsb, edgeset: :default, pin: :tms,  edge: edge_collection.edges[:default][:default], spec_sheet: :func
         | 
| 99 | 
            +
              edgeset :func_tsb, edgeset: :default, pin: :tdi,  edge: edge_collection.edges[:default][:default], spec_sheet: :func
         | 
| 100 | 
            +
              edgeset :func_tsb, edgeset: :default, pin: :tdo,  edge: edge_collection.edges[:default][:default], spec_sheet: :func
         | 
| 101 | 
            +
              #   * now assign pins some more meaningful timing for JTAG operation...
         | 
| 102 | 
            +
              edgeset :func_tsb, edgeset: :es_jtag, pin: :tclk, edge: edge_collection.edges[:clock][:clk], spec_sheet: :func, es_sheet_pins: timing_sheet_pins, timeset_basic: true
         | 
| 103 | 
            +
              edgeset :func_tsb, edgeset: :es_jtag, pin: :tms,  edge: edge_collection.edges[:input][:default], spec_sheet: :func
         | 
| 104 | 
            +
              edgeset :func_tsb, edgeset: :es_jtag, pin: :tdi,  edge: edge_collection.edges[:input][:default], spec_sheet: :func
         | 
| 105 | 
            +
              edgeset :func_tsb, edgeset: :es_jtag, pin: :tdo,  edge: edge_collection.edges[:output][:default], spec_sheet: :func
         | 
| 106 | 
            +
             | 
| 107 | 
            +
              # Assign edges to the pins for timeset sheet ':func'
         | 
| 108 | 
            +
              #   * first a :default timeset
         | 
| 109 | 
            +
              # FORMAT: timeset <timset sheet name>, timeset: <timeset>, pin: <pin_name>, eset: <edgeset name>, ts_sheet_pins: <array of pins>
         | 
| 110 | 
            +
              timeset :func_tsb, timeset: :default, pin: :tclk, eset: :default, ts_sheet_pins: timing_sheet_pins, timeset_basic: true
         | 
| 111 | 
            +
              timeset :func_tsb, timeset: :default, pin: :tms,  eset: :default
         | 
| 112 | 
            +
              timeset :func_tsb, timeset: :default, pin: :tdi,  eset: :default
         | 
| 113 | 
            +
              timeset :func_tsb, timeset: :default, pin: :tdo,  eset: :default
         | 
| 114 | 
            +
              #   * now a :jtag timeset
         | 
| 115 | 
            +
              timeset :func_tsb, timeset: :jtag, pin: :tclk, eset: :es_jtag, ts_sheet_pins: timing_sheet_pins, timeset_basic: true
         | 
| 116 | 
            +
              timeset :func_tsb, timeset: :jtag, pin: :tms,  eset: :es_jtag
         | 
| 117 | 
            +
              timeset :func_tsb, timeset: :jtag, pin: :tdi,  eset: :es_jtag
         | 
| 118 | 
            +
              timeset :func_tsb, timeset: :jtag, pin: :tdo,  eset: :es_jtag
         | 
| 119 | 
            +
             | 
| 96 120 | 
             
              #   * now define a few more AC specs and values
         | 
| 97 121 | 
             
              ac_specset :func, 'cycle', specset: :func_100MHz, nom: { min: '9*ns', typ: '10*ns', max: '11*ns' }
         | 
| 98 122 | 
             
              ac_specset :func, 'cycle', specset: :func_125MHz, nom: { min: '7*ns', typ: '8*ns', max: '9*ns' }
         | 
| @@ -151,9 +175,25 @@ Resources.create do | |
| 151 175 | 
             
              levelset :func, pin: :tdi,  level: level_collection.pin_group[:pin_type1], spec_sheet: :func
         | 
| 152 176 | 
             
              levelset :func, pin: :tdo,  level: level_collection.pin_group[:pin_type2], spec_sheet: :func
         | 
| 153 177 |  | 
| 154 | 
            -
              #   * now define a few more  | 
| 178 | 
            +
              #   * now define a few more DC specs and values
         | 
| 155 179 | 
             
              dc_specset :func, 'vdd_main_val', specset: :power_down_levels, min: { min: '0.1*V' }, nom: { typ: '0.2*V' }, max: { max: '0.3*V' }
         | 
| 156 180 | 
             
              dc_specset :func, 'vdd_alt_val',  specset: :power_down_levels, min: { min: '7*V' },   nom: { typ: '8*V' },   max: { max: '9*V' }
         | 
| 157 181 | 
             
              dc_specset :func, 'current1',     specset: :power_up_levels,   min: { min: '1*mA' },  nom: { typ: '2*mA' },  max: { max: '3*mA' }
         | 
| 158 182 | 
             
              dc_specset :func, 'voltage1',     specset: :power_up_levels,   min: { min: '4*mV' },  nom: { typ: '5*mV' },  max: { max: '6*mV' }
         | 
| 183 | 
            +
             | 
| 184 | 
            +
              # Define some global variables that will generate a Globals sheet
         | 
| 185 | 
            +
              global_spec :spec1, job: 'FT', value: '17', comment: 'entering spec1'
         | 
| 186 | 
            +
              global_spec :spec2, job: 'WT', value: '18', comment: 'entering spec2'
         | 
| 187 | 
            +
              global_spec :spec3, job: 'FT1', value: '19', comment: 'entering spec3'
         | 
| 188 | 
            +
              global_spec :spec4, job: 'WT1', value: '20', comment: 'entering spec4'
         | 
| 189 | 
            +
             | 
| 190 | 
            +
              # Collect all the currently generated sheets and include them in the FT job
         | 
| 191 | 
            +
              job_def   'FT'
         | 
| 192 | 
            +
             | 
| 193 | 
            +
              # Add a couple additional flow sheets to define the WT job
         | 
| 194 | 
            +
              job_def   'WT', flows: ['WT_flow1', 'WT_flow2']
         | 
| 195 | 
            +
             | 
| 196 | 
            +
              # Add a couple of files to the references sheet
         | 
| 197 | 
            +
              reference '.\inc\file1.xla', comment: 'Block1'
         | 
| 198 | 
            +
              reference '.\inc\file2.xla', comment: 'Block2'
         | 
| 159 199 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: origen_testers
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.7.0.pre0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Stephen McGinty
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016-04 | 
| 11 | 
            +
            date: 2016-05-04 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: origen
         | 
| @@ -151,6 +151,9 @@ files: | |
| 151 151 | 
             
            - lib/origen_testers/igxl_based_tester/base/flow.rb
         | 
| 152 152 | 
             
            - lib/origen_testers/igxl_based_tester/base/flow_line.rb
         | 
| 153 153 | 
             
            - lib/origen_testers/igxl_based_tester/base/generator.rb
         | 
| 154 | 
            +
            - lib/origen_testers/igxl_based_tester/base/global_specs.rb
         | 
| 155 | 
            +
            - lib/origen_testers/igxl_based_tester/base/job.rb
         | 
| 156 | 
            +
            - lib/origen_testers/igxl_based_tester/base/jobs.rb
         | 
| 154 157 | 
             
            - lib/origen_testers/igxl_based_tester/base/level_io_se.rb
         | 
| 155 158 | 
             
            - lib/origen_testers/igxl_based_tester/base/level_supply.rb
         | 
| 156 159 | 
             
            - lib/origen_testers/igxl_based_tester/base/levels.rb
         | 
| @@ -164,12 +167,14 @@ files: | |
| 164 167 | 
             
            - lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb
         | 
| 165 168 | 
             
            - lib/origen_testers/igxl_based_tester/base/patsubrs.rb
         | 
| 166 169 | 
             
            - lib/origen_testers/igxl_based_tester/base/pinmap.rb
         | 
| 170 | 
            +
            - lib/origen_testers/igxl_based_tester/base/references.rb
         | 
| 167 171 | 
             
            - lib/origen_testers/igxl_based_tester/base/test_instance.rb
         | 
| 168 172 | 
             
            - lib/origen_testers/igxl_based_tester/base/test_instance_group.rb
         | 
| 169 173 | 
             
            - lib/origen_testers/igxl_based_tester/base/test_instances.rb
         | 
| 170 174 | 
             
            - lib/origen_testers/igxl_based_tester/base/test_instances/custom_til.rb
         | 
| 171 175 | 
             
            - lib/origen_testers/igxl_based_tester/base/timeset.rb
         | 
| 172 176 | 
             
            - lib/origen_testers/igxl_based_tester/base/timesets.rb
         | 
| 177 | 
            +
            - lib/origen_testers/igxl_based_tester/base/timesets_basic.rb
         | 
| 173 178 | 
             
            - lib/origen_testers/igxl_based_tester/files.rb
         | 
| 174 179 | 
             
            - lib/origen_testers/igxl_based_tester/j750.rb
         | 
| 175 180 | 
             
            - lib/origen_testers/igxl_based_tester/j750/custom_test_instance.rb
         | 
| @@ -235,6 +240,9 @@ files: | |
| 235 240 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/flow.rb
         | 
| 236 241 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb
         | 
| 237 242 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/generator.rb
         | 
| 243 | 
            +
            - lib/origen_testers/igxl_based_tester/ultraflex/global_specs.rb
         | 
| 244 | 
            +
            - lib/origen_testers/igxl_based_tester/ultraflex/job.rb
         | 
| 245 | 
            +
            - lib/origen_testers/igxl_based_tester/ultraflex/jobs.rb
         | 
| 238 246 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb
         | 
| 239 247 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb
         | 
| 240 248 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/levels.rb
         | 
| @@ -248,22 +256,28 @@ files: | |
| 248 256 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb
         | 
| 249 257 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb
         | 
| 250 258 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb
         | 
| 259 | 
            +
            - lib/origen_testers/igxl_based_tester/ultraflex/references.rb
         | 
| 251 260 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb
         | 
| 252 261 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb
         | 
| 253 262 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb
         | 
| 254 263 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/templates/flow.txt.erb
         | 
| 264 | 
            +
            - lib/origen_testers/igxl_based_tester/ultraflex/templates/global_specs.txt.erb
         | 
| 255 265 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/templates/instances.txt.erb
         | 
| 266 | 
            +
            - lib/origen_testers/igxl_based_tester/ultraflex/templates/jobs.txt.erb
         | 
| 256 267 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb
         | 
| 257 268 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/templates/patgroups.txt.erb
         | 
| 258 269 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/templates/patsets.txt.erb
         | 
| 259 270 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/templates/patsubrs.txt.erb
         | 
| 260 271 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb
         | 
| 272 | 
            +
            - lib/origen_testers/igxl_based_tester/ultraflex/templates/references.txt.erb
         | 
| 261 273 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb
         | 
| 274 | 
            +
            - lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets_basic.txt.erb
         | 
| 262 275 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb
         | 
| 263 276 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb
         | 
| 264 277 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb
         | 
| 265 278 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb
         | 
| 266 279 | 
             
            - lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb
         | 
| 280 | 
            +
            - lib/origen_testers/igxl_based_tester/ultraflex/timesets_basic.rb
         | 
| 267 281 | 
             
            - lib/origen_testers/interface.rb
         | 
| 268 282 | 
             
            - lib/origen_testers/no_interface.rb
         | 
| 269 283 | 
             
            - lib/origen_testers/origen_ext/application/runner.rb
         | 
| @@ -385,7 +399,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 385 399 | 
             
                  version: 1.8.11
         | 
| 386 400 | 
             
            requirements: []
         | 
| 387 401 | 
             
            rubyforge_project: 
         | 
| 388 | 
            -
            rubygems_version: 2. | 
| 402 | 
            +
            rubygems_version: 2.2.2
         | 
| 389 403 | 
             
            signing_key: 
         | 
| 390 404 | 
             
            specification_version: 4
         | 
| 391 405 | 
             
            summary: This plugin provides Origen tester models to drive ATE type testers like
         |