class ClassHDL::GenerateBlock
Attributes
block_index[RW]
Public Class Methods
new(belong_to_module)
click to toggle source
Calls superclass method
# File lib/tdl/class_hdl/hdl_generate.rb, line 20 def initialize(belong_to_module) @belong_to_module = belong_to_module super("genblk#{globle_random_name_flag()}") unless @belong_to_module raise TdlError.new("GenerateBlock must have belong_to_module") end end
Public Instance Methods
ELSE(&block)
click to toggle source
Calls superclass method
# File lib/tdl/class_hdl/hdl_generate.rb, line 95 def ELSE(&block) if ClassHDL::AssignDefOpertor.curr_assign_block.is_a? HDLAssignGenerateBlock head_str = "else begin\n" # yield tmp_sm = ClearGenerateSlaverBlock.new(self) tmp_sm.module_name = "generate_sub_block_#{self.block_index}" inst_obj = tmp_sm.instanced("genblk#{self.block_index}",tmp_sm) inst_obj.belong_to_module = tmp_sm add_children_modules(inst_obj:inst_obj ,module_poit: tmp_sm) tmp_sm.instance_exec(&block) ClassHDL::AssignDefOpertor.with_rollback_opertors(:old) do body_str = tmp_sm.instance_draw + tmp_sm.vars_exec_inst gbody_str = body_str.gsub(/^./){ |m| " #{m}"} self.Logic_inst.push(head_str+gbody_str+"end\n") end else super(&block) end end
ELSIF(cond,&block)
click to toggle source
Calls superclass method
# File lib/tdl/class_hdl/hdl_generate.rb, line 70 def ELSIF(cond,&block) if ClassHDL::AssignDefOpertor.curr_assign_block.is_a? HDLAssignGenerateBlock if cond.respond_to?(:instance) head_str = "else if(#{cond.instance(:cond,@belong_to_module)})begin\n" else head_str = "else if(#{cond})begin\n" end # yield tmp_sm = ClearGenerateSlaverBlock.new(self) tmp_sm.module_name = "generate_sub_block_#{self.block_index}" inst_obj = tmp_sm.instanced("genblk#{self.block_index}",tmp_sm) inst_obj.belong_to_module = tmp_sm add_children_modules(inst_obj:inst_obj ,module_poit: tmp_sm) tmp_sm.instance_exec(&block) ClassHDL::AssignDefOpertor.with_rollback_opertors(:old) do body_str = tmp_sm.instance_draw + tmp_sm.vars_exec_inst gbody_str = body_str.gsub(/^./){ |m| " #{m}"} self.Logic_inst.push(head_str+gbody_str+"end\n") end else super(cond,&block) end end
IF(cond,&block)
click to toggle source
Calls superclass method
# File lib/tdl/class_hdl/hdl_generate.rb, line 44 def IF(cond,&block) if ClassHDL::AssignDefOpertor.curr_assign_block.is_a? HDLAssignGenerateBlock if cond.respond_to?(:instance) head_str = "\nif(#{cond.instance(:cond, @belong_to_module)})begin\n" else head_str = "\nif(#{cond})begin\n" end # yield tmp_sm = ClearGenerateSlaverBlock.new(self) tmp_sm.module_name = "generate_sub_block_#{self.block_index}" inst_obj = tmp_sm.instanced("genblk#{self.block_index}",tmp_sm) inst_obj.belong_to_module = tmp_sm add_children_modules(inst_obj:inst_obj ,module_poit: tmp_sm) tmp_sm.instance_exec(&block) ClassHDL::AssignDefOpertor.with_rollback_opertors(:old) do body_str = tmp_sm.instance_draw + tmp_sm.vars_exec_inst gbody_str = body_str.gsub(/^./){ |m| " #{m}"} self.Logic_inst.push(head_str+gbody_str+"end ") end else super(cond,&block) end end
method_missing(name,*args,&block)
click to toggle source
# File lib/tdl/class_hdl/hdl_generate.rb, line 29 def method_missing(name,*args,&block) ClassHDL::AssignDefOpertor.with_rollback_opertors(:old) do ## 优先判断 belong_to_module 有没有定义此方法 if root_sdlmodule.respond_to? name root_sdlmodule.send(name,*args,&block) elsif SdlModule.exist_module?(name) # puts root_sdlmodule # if SdlModule.exist_module?(name) ClassHDL::ImplicitInstModule.new(name,self) else @belong_to_module.send(name,*args,&block) end end end