Class: Origen::CodeGenerators::Block
- Includes:
- BlockCommon
- Defined in:
- lib/origen/code_generators/block.rb
Class Method Summary collapse
-
.banner ⇒ Object
class_option :duts, type: :boolean, desc: 'Instantiate the new sub-block in all DUT models', default: true class_option :instance, desc: 'The main NAME argument will be the name given to the model and the instantiated sub-block, optionally provide a different name for the instance'.
Instance Method Summary collapse
Methods included from BlockCommon
#class_name, #create_files, #extract_model_name, #validate_args_common
Methods inherited from Base
Methods included from Actions
#add_acronyms, #add_autoload, #add_config, #add_source, #camelcase, #comment_config, #config, #environment, #gem, #gem_group, #generate, #git, #initialize, #lib, #rakefile, #readme, #underscored_app_namespace
Methods included from Actions::Helpers
#add_type_to_namespaces, #class_name_to_blocks_dir, #class_name_to_lib_file, #internal_depth, #resource_path, #resource_path_to_blocks_dir, #resource_path_to_class, #resource_path_to_lib_file, #unless_has_method, #unless_valid_underscored_identifier, #validate_resource_path
Class Method Details
.banner ⇒ Object
class_option :duts, type: :boolean, desc: 'Instantiate the new sub-block in all DUT models', default: true class_option :instance, desc: 'The main NAME argument will be the name given to the model and the instantiated sub-block, optionally provide a different name for the instance'
9 10 11 |
# File 'lib/origen/code_generators/block.rb', line 9 def self. 'origen new block [TYPE/]DERIVATIVE [BLOCK]' end |
Instance Method Details
#completed ⇒ Object
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/origen/code_generators/block.rb', line 144 def completed add_acronyms puts if @nested puts 'New sub-block created and instantiated.'.green else if @sub_block_instantiated puts 'New sub-block created and instantiated within your DUT(s) as:'.green + " dut.#{@final_namespaces[1]}" else puts 'New sub-block created, you can instantiate it within your blocks like this:'.green puts puts " #{@line}" end end puts end |
#instantiate_sub_block ⇒ Object
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/origen/code_generators/block.rb', line 79 def instantiate_sub_block if @nested # First create the parent's sub_blocks.rb file if it doesn't exist f = "#{@dir.parent}.rb" unless File.exist?(f) @nested = false orig_fullname = @fullname orig_resouce_path = @resource_path @fullname = @fullname.split('::') @fullname.pop @fullname = @fullname.join('::') @resource_path = @resource_path.split('/') @resource_path.pop @resource_path = @resource_path.join('/') template 'templates/code_generators/sub_blocks.rb', f @fullname = orig_fullname @resource_path = orig_resouce_path @nested = true end line = "sub_block :#{@final_name}, class_name: '#{@fullname}'#, base_address: 0x4000_0000" append_to_file f, "\n#{line}" else @line = "sub_block :#{@final_namespaces[1]}, class_name: '#{class_name}'#, base_address: 0x4000_0000" unless duts.empty? puts @dut_index = [nil] index = 1 duts.each do |name, children| index = print_dut(name, index, children, 0) end puts puts 'DO YOU WANT TO INSTANTIATE THIS SUB-BLOCK IN YOUR DUT MODELS?' puts puts 'If so enter the number(s) of the DUT(s) you wish to add it to from the list above, separating multiple entries with a space' puts '(note that adding it to a parent DUT in the hierarchy will already be adding it to all of its children).' puts response = ask 'Enter the DUT number(s), or just press return to skip:' done = [] response.strip.split(/\s+/).each do |index| index = index.to_i target = @dut_index[index] if target # Don't add the sub-block to children if we've already added it to the parent, this will # cause an already defined sub-block error since it will be added by both instantiations unless done.any? { |c| target =~ /^#{c}::/ } done << target sub_blocks = class_name_to_blocks_dir(target).join('sub_blocks.rb') unless sub_blocks.exist? orig = @fullname @fullname = target template 'templates/code_generators/sub_blocks.rb', sub_blocks @fullname = orig end @sub_block_instantiated = true append_to_file sub_blocks, "\n#{@line}" end end end end end end |
#setup ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/origen/code_generators/block.rb', line 63 def setup @generate_model = true @generate_pins = false @generate_timesets = !@nested @generate_parameters = !@nested if @nested @final_name = args.last @fullname = resource_path_to_class(args.first) @dir = resource_path_to_blocks_dir(args.first).join('sub_blocks', @final_name) @namespaces = add_type_to_namespaces(@fullname.split('::').map(&:underscore)) else extract_model_name end create_files end |
#validate_args ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/origen/code_generators/block.rb', line 36 def validate_args if args.size > 2 || args.size == 0 msg = args.size == 0 ? 'At least one argument is' : 'No more than two arguments are' msg << " expected by the block generator, e.g. 'origen new block atd/atd16bit', 'origen new block sampler app/blocks/atd/derivatives/atd16bit" puts msg exit 1 end if args.size == 2 validate_args_common(args.last) else validate_args_common end @nested = args.size == 2 if !@nested && args.first.split('/').size == 1 msg = "You must supply a leading type to the name of the block, e.g. 'origen new block atd/atd16bit'" puts msg exit 1 end if @nested && args.last.split('/').size != 1 msg = "No leading type is allowed when generating a nested block, e.g. 'origen new block sampler app/blocks/atd/derivatives/atd16bit" puts msg exit 1 end end |