Module: HDLRuby::High::HBlock
Overview
Module giving the properties of a high-level block.
Constant Summary collapse
Constants included from Hmissing
HDLRuby::High::Hmissing::NAMES
Instance Attribute Summary collapse
-
#namespace ⇒ Object
readonly
The namespace.
-
#return_value ⇒ Object
readonly
The return value when building the scope.
Instance Method Summary collapse
-
#add_block(mode = nil, name = :"", &ruby_block) ⇒ Object
Creates and adds a new block executed in +mode+, with possible +name+ and built by executing +ruby_block+.
-
#build(&ruby_block) ⇒ Object
(also: #open)
Build the block by executing +ruby_block+.
-
#cur_behavior ⇒ Object
Gets the current behavior.
-
#cur_block ⇒ Object
Gets the current block.
-
#cur_scope ⇒ Object
Gets the current scope.
-
#cur_system ⇒ Object
Gets the current system.
-
#hcase(value) ⇒ Object
Creates a new case statement with a +value+ used for deciding which block to execute.
-
#helse(mode = nil, &ruby_block) ⇒ Object
Sets the block executed when the condition is not met to the block in +mode+ generated by the execution of +ruby_block+.
-
#helsif(condition, mode = nil, &ruby_block) ⇒ Object
Sets the condition check when the condition is not met to the block, with a +condition+ that when met lead to the execution of the block in +mode+ generated by the +ruby_block+.
-
#hif(condition, mode = self.mode, &ruby_block) ⇒ Object
Creates a new if statement with a +condition+ that when met lead to the execution of the block in +mode+ generated by the +ruby_block+.
-
#hprint(*args) ⇒ Object
Prints.
-
#hwhen(match, mode = nil, &ruby_block) ⇒ Object
Sets the block of a case structure executed when the +match+ is met to the block in +mode+ generated by the execution of +ruby_block+.
-
#par(name = :"", &ruby_block) ⇒ Object
Creates a new parallel block with possible +name+ and built from +ruby_block+.
-
#seq(name = :"", &ruby_block) ⇒ Object
Creates a new sequential block with possible +name+ and built from +ruby_block+.
-
#sub(name = HDLRuby.uniq_name, &ruby_block) ⇒ Object
Creates a new block with the current mode with possible +name+ and built from +ruby_block+.
-
#terminate ⇒ Object
Terminate the simulation.
-
#to_ref ⇒ Object
Converts to a new reference.
-
#top_block ⇒ Object
Gets the top block of the current behavior.
-
#unshift(&ruby_block) ⇒ Object
Adds statements at the top of the block.
Methods included from Hmux
Methods included from HScope_missing
Methods included from Hmissing
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class HDLRuby::High::HScope_missing
Instance Attribute Details
#namespace ⇒ Object (readonly)
The namespace
4403 4404 4405 |
# File 'lib/HDLRuby/hruby_high.rb', line 4403 def namespace @namespace end |
#return_value ⇒ Object (readonly)
The return value when building the scope.
4406 4407 4408 |
# File 'lib/HDLRuby/hruby_high.rb', line 4406 def return_value @return_value end |
Instance Method Details
#add_block(mode = nil, name = :"", &ruby_block) ⇒ Object
Creates and adds a new block executed in +mode+, with possible +name+ and built by executing +ruby_block+.
4437 4438 4439 4440 4441 4442 4443 4444 |
# File 'lib/HDLRuby/hruby_high.rb', line 4437 def add_block(mode = nil, name = :"", &ruby_block) # Creates the block. block = High.make_block(mode,name,&ruby_block) # Adds it as a statement. self.add_statement(block) # Use its return value. return block.return_value end |
#build(&ruby_block) ⇒ Object Also known as: open
Build the block by executing +ruby_block+.
4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 |
# File 'lib/HDLRuby/hruby_high.rb', line 4409 def build(&ruby_block) High.space_push(@namespace) @return_value = High.top_user.instance_eval(&ruby_block) High.space_pop # if @return_value.is_a?(HExpression) then # res = @return_value # High.space_push(@namespace) # @return_value = res.type.inner(HDLRuby.uniq_name) # puts "@return_value name=#{@return_value.name}" # @return_value <= res # High.space_pop # @return_value = RefObject.new(self,@return_value) # end @return_value end |
#cur_behavior ⇒ Object
Gets the current behavior.
4500 4501 4502 |
# File 'lib/HDLRuby/hruby_high.rb', line 4500 def cur_behavior return HDLRuby::High.cur_behavior end |
#cur_block ⇒ Object
Gets the current block.
4490 4491 4492 |
# File 'lib/HDLRuby/hruby_high.rb', line 4490 def cur_block return HDLRuby::High.cur_block end |
#cur_scope ⇒ Object
Gets the current scope.
4505 4506 4507 |
# File 'lib/HDLRuby/hruby_high.rb', line 4505 def cur_scope return HDLRuby::High.cur_scope end |
#cur_system ⇒ Object
Gets the current system.
4510 4511 4512 |
# File 'lib/HDLRuby/hruby_high.rb', line 4510 def cur_system return HDLRuby::High.cur_system end |
#hcase(value) ⇒ Object
Creates a new case statement with a +value+ used for deciding which block to execute.
NOTE: the when part is defined through the hwhen method.
4586 4587 4588 4589 4590 |
# File 'lib/HDLRuby/hruby_high.rb', line 4586 def hcase(value) # return if self.metacase(value) # Creates the case statement. self.add_statement(Case.new(value)) end |
#helse(mode = nil, &ruby_block) ⇒ Object
Sets the block executed when the condition is not met to the block in +mode+ generated by the execution of +ruby_block+.
Can only be used once.
4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 |
# File 'lib/HDLRuby/hruby_high.rb', line 4542 def helse(mode = nil, &ruby_block) # return if self.metaelse(&ruby_block) # Ensure there is a block. ruby_block = proc {} unless block_given? # There is a ruby_block: the helse is assumed to be with # the hif in the same block. # Completes the hif or the hcase statement. statement = @statements.last unless statement.is_a?(If) or statement.is_a?(Case) then raise AnyError, "Error: helse statement without hif nor hcase (#{statement.class})." end statement.helse(mode, &ruby_block) end |
#helsif(condition, mode = nil, &ruby_block) ⇒ Object
Sets the condition check when the condition is not met to the block, with a +condition+ that when met lead to the execution of the block in +mode+ generated by the +ruby_block+.
4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 |
# File 'lib/HDLRuby/hruby_high.rb', line 4559 def helsif(condition, mode = nil, &ruby_block) # meta = self.metaelsif(condition,&ruby_block) # if meta == :toif then # # Must be converted to hif. # return self.hif(condition,mode, &ruby_block) # elsif meta then # return # end # Ensure there is a block. ruby_block = proc {} unless block_given? # There is a ruby_block: the helse is assumed to be with # the hif in the same block. # Completes the hif statement. statement = @statements.last unless statement.is_a?(If) then raise AnyError, "Error: helsif statement without hif (#{statement.class})." end statement.helsif(condition, mode, &ruby_block) end |
#hif(condition, mode = self.mode, &ruby_block) ⇒ Object
Creates a new if statement with a +condition+ that when met lead to the execution of the block in +mode+ generated by the +ruby_block+.
NOTE: the else part is defined through the helse method. def hif(condition, mode = nil, &ruby_block)
4530 4531 4532 4533 4534 4535 4536 |
# File 'lib/HDLRuby/hruby_high.rb', line 4530 def hif(condition, mode = self.mode, &ruby_block) # return if self.metaif(condition,&ruby_block) # Ensure there is a block. ruby_block = proc {} unless block_given? # Creates the if statement. self.add_statement(If.new(condition,mode,&ruby_block)) end |
#hprint(*args) ⇒ Object
Prints.
4613 4614 4615 |
# File 'lib/HDLRuby/hruby_high.rb', line 4613 def hprint(*args) self.add_statement(Print.new(*args)) end |
#hwhen(match, mode = nil, &ruby_block) ⇒ Object
Sets the block of a case structure executed when the +match+ is met to the block in +mode+ generated by the execution of +ruby_block+.
Can only be used once.
4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 |
# File 'lib/HDLRuby/hruby_high.rb', line 4596 def hwhen(match, mode = nil, &ruby_block) # return if self.metawhen(match,&ruby_block) # Ensure there is a block. ruby_block = proc {} unless block_given? # There is a ruby_block: the helse is assumed to be with # the hif in the same block. # Completes the hcase statement. statement = @statements.last unless statement.is_a?(Case) then raise AnyError, "Error: hwhen statement without hcase (#{statement.class})." end statement.hwhen(match, mode, &ruby_block) end |
#par(name = :"", &ruby_block) ⇒ Object
Creates a new parallel block with possible +name+ and built from +ruby_block+.
4448 4449 4450 4451 4452 4453 4454 4455 |
# File 'lib/HDLRuby/hruby_high.rb', line 4448 def par(name = :"", &ruby_block) return :par unless ruby_block unless name.is_a?(::Symbol) or name.is_a?(::String) then raise AnyError, "Events can only be used at top level seq blocks." end self.add_block(:par,name,&ruby_block) end |
#seq(name = :"", &ruby_block) ⇒ Object
Creates a new sequential block with possible +name+ and built from +ruby_block+.
4459 4460 4461 4462 4463 4464 4465 4466 |
# File 'lib/HDLRuby/hruby_high.rb', line 4459 def seq(name = :"", &ruby_block) return :seq unless ruby_block unless name.is_a?(::Symbol) or name.is_a?(::String) then raise AnyError, "Events can only be used at top level seq blocks." end self.add_block(:seq,name,&ruby_block) end |
#sub(name = HDLRuby.uniq_name, &ruby_block) ⇒ Object
Creates a new block with the current mode with possible +name+ and built from +ruby_block+. def sub(name = :"", &ruby_block)
4471 4472 4473 4474 4475 |
# File 'lib/HDLRuby/hruby_high.rb', line 4471 def sub(name = HDLRuby.uniq_name, &ruby_block) # Ensure there is a block. ruby_block = proc {} unless block_given? self.add_block(self.mode,name,&ruby_block) end |
#terminate ⇒ Object
Terminate the simulation.
4618 4619 4620 |
# File 'lib/HDLRuby/hruby_high.rb', line 4618 def terminate self.add_statement(TimeTerminate.new) end |
#to_ref ⇒ Object
Converts to a new reference.
4429 4430 4431 |
# File 'lib/HDLRuby/hruby_high.rb', line 4429 def to_ref return RefObject.new(this,self) end |
#top_block ⇒ Object
Gets the top block of the current behavior.
4495 4496 4497 |
# File 'lib/HDLRuby/hruby_high.rb', line 4495 def top_block return HDLRuby::High.top_block end |
#unshift(&ruby_block) ⇒ Object
Adds statements at the top of the block.
4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 |
# File 'lib/HDLRuby/hruby_high.rb', line 4478 def unshift(&ruby_block) # Ensure there is a block. ruby_block = proc {} unless block_given? # Create a sub block for the statements. block = High.make_block(self.mode,:"",&ruby_block) # Unshifts it. self.unshift_statement(block) # Use its return value. return block.return_value end |