origen_app_generators 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +5 -5
  2. data/bin/boot.rb +4 -2
  3. data/config/commands.rb +3 -3
  4. data/config/shared_commands.rb +11 -6
  5. data/config/version.rb +2 -2
  6. data/lib/origen_app_generators.rb +6 -4
  7. data/lib/origen_app_generators/application.rb +12 -12
  8. data/lib/origen_app_generators/base.rb +34 -8
  9. data/lib/origen_app_generators/new.rb +17 -9
  10. data/lib/{tasks/new_app_tests.rake → origen_app_generators/new_app_tests.rb} +1 -5
  11. data/lib/origen_app_generators/origen_infrastructure/app_generator_plugin.rb +6 -8
  12. data/lib/origen_app_generators/plugin.rb +4 -7
  13. data/lib/origen_app_generators/test_engineering/common.rb +29 -0
  14. data/lib/origen_app_generators/test_engineering/stand_alone_application.rb +9 -181
  15. data/lib/origen_app_generators/test_engineering/test_block.rb +4 -105
  16. data/templates/app_generators/application/Gemfile +12 -2
  17. data/templates/app_generators/application/{lib → app/blocks}/top_level.rb +1 -1
  18. data/templates/app_generators/application/app/lib/module.rb +6 -0
  19. data/templates/app_generators/application/{templates → app/templates}/web/index.md.erb +0 -0
  20. data/templates/app_generators/application/{templates → app/templates}/web/layouts/_basic.html.erb +0 -0
  21. data/templates/app_generators/application/{templates → app/templates}/web/partials/_navbar.html.erb +0 -0
  22. data/templates/app_generators/application/{templates → app/templates}/web/release_notes.md.erb +0 -0
  23. data/templates/app_generators/application/config/application.rb +51 -55
  24. data/templates/app_generators/origen_infrastructure/app_generator_plugin/{lib → app/lib}/application.rb +0 -0
  25. data/templates/app_generators/origen_infrastructure/app_generator_plugin/{lib → app/lib}/base.rb +0 -0
  26. data/templates/app_generators/origen_infrastructure/app_generator_plugin/{lib → app/lib}/module.rb +0 -0
  27. data/templates/app_generators/origen_infrastructure/app_generator_plugin/{lib → app/lib}/plugin.rb +0 -0
  28. data/templates/app_generators/origen_infrastructure/app_generator_plugin/config/load_generators.rb +1 -1
  29. data/templates/app_generators/plugin/Gemfile +3 -2
  30. data/templates/app_generators/plugin/{templates → app/templates}/web/index.md.erb +0 -0
  31. data/templates/app_generators/plugin/{templates → app/templates}/web/partials/_navbar_external.html.erb +0 -0
  32. data/templates/app_generators/plugin/{templates → app/templates}/web/partials/_navbar_internal.html.erb +0 -0
  33. data/templates/app_generators/plugin/gemspec.rb +4 -3
  34. data/templates/app_generators/test_engineering/{stand_alone_application/environment → environment}/j750.rb +0 -0
  35. data/templates/app_generators/test_engineering/{stand_alone_application/environment → environment}/uflex.rb +0 -0
  36. data/templates/app_generators/test_engineering/{stand_alone_application/environment → environment}/v93k.rb +0 -0
  37. data/templates/app_generators/test_engineering/stand_alone_application/.keep +0 -0
  38. data/templates/app_generators/test_engineering/test_block/.keep +0 -0
  39. metadata +25 -47
  40. data/bin/fix_my_workspace +0 -100
  41. data/lib/origen_app_generators/sub_block_parser.rb +0 -81
  42. data/lib/tasks/app_generators.rake +0 -6
  43. data/templates/app_generators/application/lib/app.rake +0 -6
  44. data/templates/app_generators/application/lib/module.rb +0 -22
  45. data/templates/app_generators/plugin/lib/README +0 -4
  46. data/templates/app_generators/plugin/lib_dev/README +0 -5
  47. data/templates/app_generators/test_engineering/stand_alone_application/Gemfile +0 -23
  48. data/templates/app_generators/test_engineering/stand_alone_application/environment/jlink.rb +0 -1
  49. data/templates/app_generators/test_engineering/stand_alone_application/lib/ip_block.rb +0 -23
  50. data/templates/app_generators/test_engineering/stand_alone_application/lib/ip_block_controller.rb +0 -5
  51. data/templates/app_generators/test_engineering/stand_alone_application/lib/top_level.rb +0 -33
  52. data/templates/app_generators/test_engineering/stand_alone_application/lib/top_level_controller.rb +0 -21
  53. data/templates/app_generators/test_engineering/stand_alone_application/pattern/example.rb +0 -4
  54. data/templates/app_generators/test_engineering/stand_alone_application/target/top_level.rb +0 -4
  55. data/templates/app_generators/test_engineering/test_block/environment/j750.rb +0 -2
  56. data/templates/app_generators/test_engineering/test_block/environment/ultraflex.rb +0 -2
  57. data/templates/app_generators/test_engineering/test_block/environment/v93k.rb +0 -2
  58. data/templates/app_generators/test_engineering/test_block/lib/controller.rb +0 -12
  59. data/templates/app_generators/test_engineering/test_block/lib/interface.rb +0 -21
  60. data/templates/app_generators/test_engineering/test_block/lib/model.rb +0 -18
  61. data/templates/app_generators/test_engineering/test_block/lib_dev/dut.rb +0 -27
  62. data/templates/app_generators/test_engineering/test_block/lib_dev/dut_controller.rb +0 -26
  63. data/templates/app_generators/test_engineering/test_block/pattern/example.rb +0 -5
  64. data/templates/app_generators/test_engineering/test_block/program/prb1.rb +0 -11
  65. data/templates/app_generators/test_engineering/test_block/target/default.rb +0 -2
data/bin/fix_my_workspace DELETED
@@ -1,100 +0,0 @@
1
- #!/usr/bin/env ruby
2
- $VERBOSE = nil # Don't care about world writable dir warnings and the like
3
-
4
- if $_fix_my_workspace_version_check
5
- $_fix_my_workspace_version = '0.7.0'
6
- else
7
- if File.exist?(File.expand_path('../../lib/origen.rb', __FILE__))
8
- # If this script is being run from within an origen-core workspace, use that Origen-core,
9
- # not the system-installed origen-core version.
10
- $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
11
- require 'origen'
12
- else
13
- # Use system-installed Origen (the gem in system Ruby)
14
- require 'origen'
15
- end
16
-
17
- if !Origen.site_config.gem_manage_bundler
18
- puts 'Sorry but you have opted to manage Bundler yourself via your Origen site config, and this means'
19
- puts 'that I cannot make certain assumptions about how your workspace is configured.'
20
- puts 'You will need to either resolve this problem yourself, or else change the value of'
21
- puts 'gem_mange_bundler to true.'
22
- puts 'See here for more details on how to do that: http://origen-sdk.org/origen/guides/starting/company/'
23
-
24
- else
25
- ENV['BUNDLE_GEMFILE'] = File.join(Origen.root, 'Gemfile')
26
- ENV['BUNDLE_PATH'] = File.expand_path(Origen.site_config.gem_install_dir)
27
- ENV['BUNDLE_BIN'] = File.join(Origen.root, 'lbin')
28
-
29
- # Force copy system gems to local gems
30
- if Origen.site_config.gem_use_from_system
31
- local_gem_dir = "#{ENV['BUNDLE_PATH']}/ruby/#{Pathname.new(Gem.dir).basename}"
32
- gem_dir = Pathname.new(Gem.dir)
33
-
34
- Origen.site_config.gem_use_from_system.each do |gem, version|
35
- begin
36
- # This will raise an error if the system doesn't have this gem installed, that
37
- # will be rescued below
38
- spec = Gem::Specification.find_by_name(gem, version)
39
-
40
- local_dir = File.join(local_gem_dir, Pathname.new(spec.gem_dir).relative_path_from(gem_dir))
41
- FileUtils.mkdir_p local_dir
42
- FileUtils.cp_r("#{spec.gem_dir}/.", local_dir)
43
-
44
- local_file = Pathname.new(File.join(local_gem_dir, Pathname.new(spec.cache_file).relative_path_from(gem_dir)))
45
- FileUtils.mkdir_p local_file.dirname
46
- FileUtils.cp(spec.cache_file, local_file)
47
-
48
- if spec.extension_dir && File.exist?(spec.extension_dir)
49
- local_dir = File.join(local_gem_dir, Pathname.new(spec.extension_dir).relative_path_from(gem_dir))
50
- FileUtils.mkdir_p local_dir
51
- FileUtils.cp_r("#{spec.extension_dir}/.", local_dir)
52
- end
53
-
54
- local_file = Pathname.new(File.join(local_gem_dir, Pathname.new(spec.spec_file).relative_path_from(gem_dir)))
55
- FileUtils.mkdir_p local_file.dirname
56
- FileUtils.cp(spec.spec_file, local_file)
57
-
58
- rescue Gem::LoadError
59
- # This just means that one of the gems that should be copied from the system
60
- # was not actually installed in the system, so nothing we can do about that here
61
- end
62
- end
63
- end
64
-
65
- # Delete lbin
66
- FileUtils.rm_rf(ENV['BUNDLE_BIN']) if File.exist?(ENV['BUNDLE_BIN'])
67
-
68
- # Run bundler with correct switches
69
- cmd = "bundle install --gemfile #{ENV['BUNDLE_GEMFILE']} --binstubs #{ENV['BUNDLE_BIN']} --path #{ENV['BUNDLE_PATH']}"
70
- `chmod o-w #{Origen.root}` # Stops some annoying world writable warnings during install
71
- `chmod o-w #{Origen.root}/bin` if File.exist?("#{Origen.root}/bin")
72
- `chmod o-w #{Origen.root}/.bin` if File.exist?("#{Origen.root}/.bin")
73
-
74
- # Try again, this time updating the bundle
75
- if system(cmd)
76
- fixed = true
77
- elsif system 'bundle update'
78
- fixed = true
79
- end
80
-
81
- if File.exist?(ENV['BUNDLE_BIN'])
82
- `chmod o-w #{ENV['BUNDLE_BIN']}`
83
-
84
- # Make .bat versions of all executables, Bundler should really be doing this when running
85
- # on windows
86
- if Origen.os.windows?
87
- Dir.glob("#{ENV['BUNDLE_BIN']}/*").each do |bin|
88
- unless bin =~ /.bat$/
89
- bat = "#{bin}.bat"
90
- unless File.exist?(bat)
91
- File.open(bat, 'w') { |f| f.write('@"ruby.exe" "%~dpn0" %*') }
92
- end
93
- end
94
- end
95
- end
96
- end
97
-
98
- system 'origen -v' if fixed
99
- end
100
- end
@@ -1,81 +0,0 @@
1
- module OrigenAppGenerators
2
- require 'strscan'
3
- # Responsible for parsing something like this:
4
- #
5
- # "ram, osc, pll, atd(2), comms[ram(2), osc](3)"
6
- #
7
- # into this:
8
- #
9
- # {
10
- # "RAM"=>{}, "Osc"=>{}, "PLL"=>{}, "ATD"=> {:instances=>2},
11
- # "Comms"=>{:instances=>3, :children=>{"RAM"=>{:instances=>2}, "Osc"=>{}}}
12
- # }
13
- #
14
- class SubBlockParser
15
- def parse(str)
16
- r = {}
17
- split(str).each do |tag|
18
- tag, i = extract_instances(tag)
19
- name, children = extract_children(tag)
20
- name = camelize(name)
21
- r[name] = {}
22
- r[name][:instances] = i if i
23
- r[name][:children] = children if children
24
- end
25
- r
26
- end
27
-
28
- private
29
-
30
- # Splits the given string by comma, but understands that nested
31
- # commas should not be split on
32
- def split(str)
33
- r = []
34
- str = StringScanner.new(str)
35
- r << next_tag(str) until str.eos?
36
- r
37
- end
38
-
39
- def next_tag(str)
40
- v = str.scan_until(/,|\[|$/)
41
- if v[-1] == ','
42
- v.chop.strip
43
- elsif v[-1] == '['
44
- open = 1
45
- while open > 0
46
- v += str.scan_until(/\[|\]/)
47
- if v[-1] == '['
48
- open += 1
49
- else
50
- open -= 1
51
- end
52
- end
53
- v += next_tag(str)
54
- # End of line
55
- else
56
- v.strip
57
- end
58
- end
59
-
60
- def extract_children(tag)
61
- # http://rubular.com/r/plGILY2e2U
62
- if tag.strip =~ /([^\[]*)\[(.*)\]/
63
- [Regexp.last_match(1), parse(Regexp.last_match(2))]
64
- else
65
- [tag.strip, nil]
66
- end
67
- end
68
-
69
- def extract_instances(tag)
70
- if tag.strip =~ /(.*)\((\d+)\)$/
71
- [Regexp.last_match(1), Regexp.last_match(2).to_i]
72
- else
73
- [tag.strip, nil]
74
- end
75
- end
76
-
77
- def camelize(val)
78
- val.strip.gsub(/\s+/, '_').camelize
79
- end
80
- end
81
- end
@@ -1,6 +0,0 @@
1
- # You can define any Rake tasks to support your application here (or in any file
2
- # ending in .rake in this directory).
3
- #
4
- # Rake (Ruby Make) is very useful for creating build scripts, see this short video
5
- # for a quick introduction:
6
- # http://railscasts.com/episodes/66-custom-rake-tasks
@@ -1,6 +0,0 @@
1
- # You can define any Rake tasks to support your application here (or in any file
2
- # ending in .rake in this directory).
3
- #
4
- # Rake (Ruby Make) is very useful for creating build scripts, see this short video
5
- # for a quick introduction:
6
- # http://railscasts.com/episodes/66-custom-rake-tasks
@@ -1,22 +0,0 @@
1
- require 'origen'
2
- <% if @type == :plugin -%>
3
- require_relative '../config/application.rb'
4
- <% end -%>
5
- module <%= @namespace %>
6
- <% if @type == :plugin -%>
7
- # THIS FILE SHOULD ONLY BE USED TO LOAD RUNTIME DEPENDENCIES
8
- # If this plugin has any development dependencies (e.g. dummy DUT or other models that are only used
9
- # for testing), then these should be loaded from config/boot.rb
10
-
11
- <% end -%>
12
- # Example of how to explicitly require a file
13
- # require "<%= @name %>/my_file"
14
-
15
- # Load all files in the lib/<%= @name %> directory.
16
- # Note that there is no problem from requiring a file twice (Ruby will ignore
17
- # the second require), so if you have a file that must be required first, then
18
- # explicitly require it up above and then let this take care of the rest.
19
- Dir.glob("#{File.dirname(__FILE__)}/<%= @name %>/**/*.rb").sort.each do |file|
20
- require file
21
- end
22
- end
@@ -1,4 +0,0 @@
1
- This directory should include all of the code that will be required by this plugin whenever
2
- it is used within a 3rd party application.
3
-
4
- Any code that is only for testing, should be placed in lib/<%= @name %>_dev instead.
@@ -1,5 +0,0 @@
1
- This directory should include any code related to testing, documentation, etc., but which
2
- will not be required whenever this plugin is actually used within a 3rd party application.
3
-
4
- Any code that will be required when used within a 3rd party application, should be placed
5
- in lib/<%= @name %> instead.
@@ -1,23 +0,0 @@
1
- <% if (@audience != :external) && Origen.site_config.gem_server -%>
2
- <% Array(Origen.site_config.gem_server).each do |server| -%>
3
- source '<%= server %>'
4
- <% end -%>
5
- <% else %>
6
- source 'https://rubygems.org'
7
- <% end -%>
8
-
9
- gem 'origen', '>= <%= @latest_origen_version %>'
10
-
11
- gem 'origen_testers'
12
-
13
- gem 'origen_debuggers'
14
-
15
- gem 'origen_doc_helpers'
16
-
17
- gem 'byebug'
18
-
19
- gem 'origen_updater'
20
-
21
- # Uncomment these if you want to use a visual debugger (e.g. Visual Studio Code) to debug your app
22
- #gem 'ruby-debug-ide'
23
- #gem 'debase'
@@ -1,23 +0,0 @@
1
- module <%= @namespace %>
2
- class <%= @options[:name] %>
3
- include Origen::Model
4
-
5
- def initialize(options = {})
6
- instantiate_registers(options)
7
- instantiate_sub_blocks(options)
8
- end
9
-
10
- def instantiate_registers(options = {})
11
- end
12
-
13
- def instantiate_sub_blocks(options = {})
14
- <% @options[:sub_blocks].each do |name, attrs| -%>
15
- <% if attrs[:instances] -%>
16
- sub_block :<%= name.underscore %>, instances: <%= attrs[:instances] %>, class_name: '<%= name.camelize %>'
17
- <% else -%>
18
- sub_block :<%= name.underscore %>, class_name: '<%= name.camelize %>'
19
- <% end -%>
20
- <% end -%>
21
- end
22
- end
23
- end
@@ -1,5 +0,0 @@
1
- module <%= @namespace %>
2
- class ATDController
3
- include Origen::Controller
4
- end
5
- end
@@ -1,33 +0,0 @@
1
- module <%= @namespace %>
2
- class <%= @options[:name] || 'TopLevel' %>
3
- include Origen::TopLevel
4
-
5
- def initialize(options = {})
6
- instantiate_pins(options)
7
- instantiate_registers(options)
8
- instantiate_sub_blocks(options)
9
- end
10
-
11
- def instantiate_pins(options = {})
12
- add_pin :tclk
13
- add_pin :tdi
14
- add_pin :tdo
15
- add_pin :tms
16
- add_pin :resetb
17
- add_pins :port_a, size: 8
18
- end
19
-
20
- def instantiate_registers(options = {})
21
- end
22
-
23
- def instantiate_sub_blocks(options = {})
24
- <% @options[:sub_blocks].each do |name, attrs| -%>
25
- <% if attrs[:instances] -%>
26
- sub_block :<%= name.underscore %>, instances: <%= attrs[:instances] %>, class_name: '<%= name.camelize %>'
27
- <% else -%>
28
- sub_block :<%= name.underscore %>, class_name: '<%= name.camelize %>'
29
- <% end -%>
30
- <% end -%>
31
- end
32
- end
33
- end
@@ -1,21 +0,0 @@
1
- module <%= @namespace %>
2
- class <%= @options[:name] || 'TopLevel' %>Controller
3
- include Origen::Controller
4
-
5
- def startup(options)
6
- pp 'Enter test mode' do
7
- tester.set_timeset('func_25mhz', 40) # Where 40 is the period in ns
8
- pin(:tclk).drive!(1)
9
- pin(:resetb).drive!(1)
10
- tester.wait time_in_us: 100
11
- end
12
- end
13
-
14
- def shutdown(options)
15
- pp 'Reset the device' do
16
- pin(:resetb).drive!(0)
17
- pin(:tclk).drive!(0)
18
- end
19
- end
20
- end
21
- end
@@ -1,4 +0,0 @@
1
- Pattern.create do
2
- # Call controller methods from here...
3
- # $dut.atd.convert
4
- end
@@ -1,4 +0,0 @@
1
- # The target file is run before *every* Origen operation and is used to instantiate
2
- # the runtime environment - usually this means instantiating a top-level SoC or
3
- # IP model.
4
- <%= @namespace %>::<%= @options[:name] || "TopLevel" %>.new # Instantiate a DUT instance
@@ -1,2 +0,0 @@
1
- # Instantiate a tester driver, this will be globally available as 'tester'
2
- OrigenTesters::J750.new
@@ -1,2 +0,0 @@
1
- # Instantiate a tester driver, this will be globally available as 'tester'
2
- OrigenTesters::UltraFLEX.new
@@ -1,2 +0,0 @@
1
- # Instantiate a tester driver, this will be globally available as 'tester'
2
- OrigenTesters::V93K.new
@@ -1,12 +0,0 @@
1
- module <%= @namespace %>
2
- class <%= @options[:name] %>Controller
3
- include Origen::Controller
4
-
5
- def do_something
6
- # The config register is defined in the corresponding model
7
- config.mode.write!(0x14)
8
- tester.wait(time_in_us: 100)
9
- config.secure.read!(0)
10
- end
11
- end
12
- end
@@ -1,21 +0,0 @@
1
- module <%= @namespace %>
2
- class Interface
3
- include OrigenTesters::ProgramGenerators
4
-
5
- # This will be called at the start of every flow or sub-flow (whenever Flow.create
6
- # is called).
7
- # Any options passed to Flow.create will be passed in here.
8
- # The options will contain top_level: true, whenever this is called at the start of
9
- # a new top-level flow.
10
- def startup(options = {})
11
- end
12
-
13
- # This will be called at the end of every flow or sub-flow (at the end of every
14
- # Flow.create block).
15
- # Any options passed to Flow.create will be passed in here.
16
- # The options will contain top_level: true, whenever this is called at the end of a
17
- # top-level flow file.
18
- def shutdown(options = {})
19
- end
20
- end
21
- end
@@ -1,18 +0,0 @@
1
- module <%= @namespace %>
2
- class <%= @options[:name] %>
3
- include Origen::Model
4
-
5
- def initialize(options = {})
6
- instantiate_registers(options)
7
- end
8
-
9
- def instantiate_registers(options)
10
- # Define your IP's registers here
11
- reg :config, 0x0, size: 32 do |reg|
12
- reg.bits 15..8, :mode
13
- reg.bit 1, :ext_clk, reset: 1
14
- reg.bit 0, :secure, access: :ro
15
- end
16
- end
17
- end
18
- end
@@ -1,27 +0,0 @@
1
- module <%= @namespace %>Dev
2
- # This is a dummy DUT class that should be used to test that your test module can
3
- # integrate into a top-level app
4
- class DUT
5
- include Origen::TopLevel
6
- include OrigenJTAG
7
- include OrigenARMDebug
8
-
9
- def initialize(options = {})
10
- instantiate_pins(options)
11
- instantiate_sub_blocks(options)
12
- end
13
-
14
- def instantiate_pins(options)
15
- add_pin :tclk
16
- add_pin :tdi
17
- add_pin :tdo
18
- add_pin :tms
19
- add_pin :resetb
20
- end
21
-
22
- def instantiate_sub_blocks(options)
23
- sub_block :arm_debug, class_name: 'OrigenARMDebug::DAP', mem_aps: { mem_ap: 0x0, mdmap: 0x0100_0000 }
24
- sub_block :<%= options[:sub_block_name] %>, class_name: '<%= @namespace %>::<%= options[:class_name] %>', base_address: 0x1000_0000
25
- end
26
- end
27
- end