lib/ruby-vpi.rb in ruby-vpi-12.0.2 vs lib/ruby-vpi.rb in ruby-vpi-12.1.0

- old
+ new

@@ -31,64 +31,89 @@ testName = $1 else raise 'Unable to determine name of test.' end - # set up the VPI utility layer - require 'ruby-vpi/vpi' + useDebugger = !(ENV['DEBUG'] || '').empty? + useCoverage = !(ENV['COVERAGE'] || '').empty? + usePrototype = !(ENV['PROTOTYPE'] || '').empty? - Object.class_eval do - include Vpi - end - # service the $ruby_init() task - relay_verilog + Vpi::relay_verilog # set up code coverage analysis - unless (ENV['COVERAGE'] || '').empty? + if useCoverage require 'ruby-vpi/rcov' RubyVpi.with_coverage_analysis do |a| a.dump_coverage_info [ Rcov::TextReport.new, Rcov::HTMLCoverage.new(:destdir => "#{testName}_coverage") ] end + + Vpi::vpi_printf "#{Config::PROJECT_NAME}: coverage analysis is enabled for test #{testName.inspect}\n" end # set up the specification library case aSpecFormat when :xUnit require 'test/unit' when :rSpec ARGV.concat %w[-f s] - require 'ruby-vpi/rspec' + require 'spec' when :tSpec ARGV << '-rs' require 'test/spec' end + # set up the interactive debugger + if useDebugger + require 'ruby-debug' + + Debugger.start + Debugger.post_mortem + + Vpi::vpi_printf "#{Config::PROJECT_NAME}: debugger is enabled for test #{testName.inspect}\n" + end + + # suppress undefined method errors when debugger is not enabled + unless Kernel.respond_to? :debugger + Kernel.class_eval do + define_method :debugger do + # this is a dummy method! + end + end + end + + # set up the VPI utility layer + require 'ruby-vpi/vpi' + + Object.class_eval do + include Vpi + end + # load the design under test unless design = vpi_handle_by_name("#{testName}_bench", nil) raise "Verilog bench for test #{testName.inspect} is inaccessible." end Kernel.const_set(aDesignId, design) require "#{testName}_design.rb" # load the design's prototype - unless (ENV['PROTOTYPE'] || '').empty? + if usePrototype require "#{testName}_proto.rb" Vpi.class_eval do define_method :relay_verilog do design.simulate! end end - puts "#{Config::PROJECT_NAME}: prototype has been enabled for test #{testName.inspect}" + Vpi::vpi_printf "#{Config::PROJECT_NAME}: prototype is enabled for test #{testName.inspect}\n" end # load the design's specification require "#{testName}_spec.rb" end