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