HDLRuby 2.5.0 → 2.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 99c77fd470dae8d84cb066923fc8ed89d18e2aafa8bc826df85e03cae674c4e2
4
- data.tar.gz: 4ef6902aec739f56c398bd653dc30f0dc03227799e1f54a9900b762d1a077aaa
3
+ metadata.gz: 53e83131d2fb3a3f03c085a3139a69d70f4422ade7be950d009e97e17bb92490
4
+ data.tar.gz: dcbbcbf3bd1e5aa43ac359e502dc0da6dec886d115371f3b2fceead01bcaa9d3
5
5
  SHA512:
6
- metadata.gz: 8c9972c8567cb1fd496268c4385b7f3caa0bd8718769254542adeceafafdc26ed09d5ce7c47430e0b0732ecbcda4ea5d0220cf4bc7be9721faf5b99bf47057cf
7
- data.tar.gz: d300640fdc354ed55f9210c95d4aee10e52768a59ac39a993b402d8da78dd091f31d97fe307fe96b729d9194b532bf958761070224663e3bf2cd37e165877c21
6
+ metadata.gz: 1656a5763fef86bd1b8c01eff8d377cc94ff3145889fd486fac99ac7d86b6f6671a30e040679f81da6a76bc08ee09ff5babd11cae72fc8adb721f0258e724fb9
7
+ data.tar.gz: 8f83372948477da9374abf302ab3910d73b434b22aa020b25071f2ed9127dc7ee95b3c6959952bd9ec008f1ff17327c7edc9e1b9584d1437a530a753b0886f4d
@@ -0,0 +1,54 @@
1
+ # Testing HDLRuby unit test.
2
+ # require 'hruby_unit.rb'
3
+
4
+ # Declare multiple simple dff-systems and their corresponding test.
5
+
6
+ 1.times do |i|
7
+
8
+ # A simple D-FF
9
+ system:"dff#{i}" do
10
+ input :clk, :rst, :d
11
+ output :q, :qb
12
+
13
+ qb <= ~q
14
+
15
+ par(clk.posedge) { q <= d & ~rst }
16
+ end
17
+
18
+ # Code for testing it.
19
+ Unit.system :"test_dff#{i}" do
20
+ inner :clk, :rst, :d, :q, :qb
21
+
22
+ send(:"dff#{i}",:dffI).(clk,rst,d,q,qb)
23
+
24
+ timed do
25
+ clk <= 0
26
+ rst <= 0
27
+ d <= 0
28
+ !10.ns
29
+ clk <= 1
30
+ !10.ns
31
+ clk <= 0
32
+ rst <= 1
33
+ !10.ns
34
+ clk <= 1
35
+ !10.ns
36
+ clk <= 0
37
+ rst <= 0
38
+ !10.ns
39
+ clk <= 1
40
+ !10.ns
41
+ clk <= 0
42
+ d <= 1
43
+ !10.ns
44
+ clk <= 1
45
+ !10.ns
46
+ clk <= 0
47
+ d <= 0
48
+ !10.ns
49
+ clk <= 1
50
+ !10.ns
51
+ end
52
+ end
53
+ end
54
+
data/lib/HDLRuby/hdrcc.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/ruby
2
2
 
3
3
  require 'fileutils'
4
+ require 'tempfile'
4
5
  require 'HDLRuby'
5
6
  require 'HDLRuby/hruby_check.rb'
6
7
  # require 'ripper'
@@ -50,12 +51,21 @@ module HDLRuby
50
51
  # The required files.
51
52
  attr_reader :requires
52
53
 
53
- # Creates a new loader for a +top_system+ system in file +top_file+
54
+ # Creates a new loader for a +top_system+ system in file +top_file_name+
54
55
  # from directory +dir+ with generic parameters +params+.
56
+ #
57
+ # NOTE: +top_file+ can either be a file or a file name.
55
58
  def initialize(top_system,top_file,dir,*params)
56
59
  # Sets the top and the looking directory.
57
60
  @top_system = top_system.to_s
58
- @top_file = top_file.to_s
61
+ # @top_file can either be a file or a string giving the file name.
62
+ if top_file.respond_to?(:path) then
63
+ @top_file = top_file
64
+ @top_file_name = top_file.path
65
+ else
66
+ @top_file = nil
67
+ @top_file_name = top_file.to_s
68
+ end
59
69
  @dir = dir.to_s
60
70
  @params = params
61
71
 
@@ -82,31 +92,48 @@ module HDLRuby
82
92
  end
83
93
 
84
94
  # Loads a single +file+.
95
+ #
96
+ # NOTE: +file+ can either be a file or a file name.
85
97
  def read(file)
86
98
  # Resolve the file.
87
- found = File.join(@dir,file)
88
- unless File.exist?(found) then
89
- founds = Dir.glob(@std_dirs.map {|path| File.join(path,file) })
90
- if founds.empty? then
91
- # No standard file with this name, this is an error.
92
- raise "Unknown required file: #{file}."
93
- else
94
- # A standard file is found, skip it since it does not
95
- # need to be read.
96
- # puts "Standard files: #{founds}"
97
- return false
99
+ if file.respond_to?(:read) then
100
+ found = file
101
+ else
102
+ found = File.join(@dir,file)
103
+ unless File.exist?(found) then
104
+ founds = Dir.glob(@std_dirs.map do |path|
105
+ File.join(path,file)
106
+ end)
107
+ if founds.empty? then
108
+ # No standard file with this name, this is an error.
109
+ raise "Unknown required file: #{file}."
110
+ else
111
+ # A standard file is found, skip it since it does not
112
+ # need to be read.
113
+ # puts "Standard files: #{founds}"
114
+ return false
115
+ end
98
116
  end
99
117
  end
100
118
  # Load the file.
101
- # @texts << File.read(File.join(@dir,file) )
102
119
  @texts << File.read(found)
103
- # @checks << Checker.new(@texts[-1],file)
104
- @checks << Checker.new(@texts[-1],found)
120
+ if found.respond_to?(:path) then
121
+ @checks << Checker.new(@texts[-1],found.path)
122
+ else
123
+ @checks << Checker.new(@texts[-1])
124
+ end
105
125
  return true
106
126
  end
107
127
 
108
128
  # Loads all the files from +file+.
109
- def read_all(file = @top_file)
129
+ def read_all(file = nil)
130
+ unless file then
131
+ if @top_file then
132
+ file = @top_file
133
+ else
134
+ file = @top_file_name
135
+ end
136
+ end
110
137
  # puts "read_all with file=#{file}"
111
138
  # Read the file
112
139
  # read(file)
@@ -174,7 +201,7 @@ module HDLRuby
174
201
  # Maybe it is a parse error, look for it.
175
202
  bind = TOPLEVEL_BINDING.clone
176
203
  eval("require 'HDLRuby'\n\nconfigure_high\n\n",bind)
177
- eval(@texts[0],bind,@top_file,1)
204
+ eval(@texts[0],bind,@top_file_name,1)
178
205
  # No parse error found.
179
206
  raise "Cannot find a top system." unless @top_system
180
207
  end
@@ -183,7 +210,7 @@ module HDLRuby
183
210
  bind = TOPLEVEL_BINDING.clone
184
211
  eval("require 'HDLRuby'\n\nconfigure_high\n\n",bind)
185
212
  # Process it.
186
- eval(@texts[0],bind,@top_file,1)
213
+ eval(@texts[0],bind,@top_file_name,1)
187
214
  # Get the resulting instance
188
215
  if @params.empty? then
189
216
  # There is no generic parameter
@@ -310,6 +337,9 @@ $optparse = OptionParser.new do |opts|
310
337
  opts.on("-D", "--debug","Set the HDLRuby debug mode") do |d|
311
338
  $options[:debug] = d
312
339
  end
340
+ opts.on("-T","--test","Compile the unit tests.") do |t|
341
+ $options[:test] = t
342
+ end
313
343
  opts.on("-t", "--top system", "Specify the top system to process") do|t|
314
344
  $options[:top] = t
315
345
  end
@@ -370,6 +400,19 @@ if $input == nil then
370
400
  exit
371
401
  end
372
402
 
403
+ if ($options[:test]) then
404
+ $top = "__test__"
405
+ # Generate the unit test file.
406
+ $test_file = Tempfile.new('tester.rb',Dir.getwd)
407
+ $test_file.write("require 'hruby_unit.rb'\nrequire_relative '#{$input}'\n\n" +
408
+ "HDLRuby::Unit.test(\"#{$top}\")\n")
409
+ # $test_file.rewind
410
+ # puts $test_file.read
411
+ $test_file.rewind
412
+ # It is the new input file.
413
+ $input = $test_file
414
+ end
415
+
373
416
  # Open the output.
374
417
  if $output then
375
418
  if $options[:multiple] then
@@ -394,6 +437,12 @@ $loader = HDRLoad.new($top,$input,$options[:directory].to_s,*$params)
394
437
  $loader.read_all
395
438
  $loader.check_all
396
439
 
440
+ # Remove the test file if any, it is not needed any longer.
441
+ if $test_file then
442
+ $test_file.close
443
+ $test_file.unlink
444
+ end
445
+
397
446
  if $options[:syntax] then
398
447
  if $options[:multiple] then
399
448
  raise "Multiple files generation mode not supported for syntax tree output."
@@ -3810,7 +3810,7 @@ module HDLRuby::High
3810
3810
  timeBehaviorL = HDLRuby::Low::TimeBehavior.new(blockL)
3811
3811
  # For debugging: set the source high object
3812
3812
  timeBehaviorL.properties[:low2high] = self.hdr_id
3813
- eventLs.each(&behaviorL.method(:add_event))
3813
+ eventLs.each(&timeBehaviorL.method(:add_event))
3814
3814
  return timeBehaviorL
3815
3815
  end
3816
3816
  end
@@ -0,0 +1,43 @@
1
+ require "HDLRuby/hruby_high"
2
+
3
+
4
+
5
+ ##
6
+ # Library for building unit test systems.
7
+ #
8
+ ########################################################################
9
+ module HDLRuby::Unit
10
+
11
+ ## The HDLRuby unit test error class.
12
+ class UnitError < ::StandardError
13
+ end
14
+
15
+ # The set of the unit systems by name.
16
+ @@unit_systems = {}
17
+
18
+ # Declares system +name+ for unit testing.
19
+ # The system is built by executing +ruby_block+.
20
+ #
21
+ # NOTE: the name of the system is not registered within the HDLRuby
22
+ # namespace since it is not meant to be used directly.
23
+ def self.system(name,&ruby_block)
24
+ # Ensure name is a symbol.
25
+ name = name.to_s.to_sym
26
+ # Check if the name is already used or not.
27
+ if @@unit_systems.key?(name) then
28
+ raise UnitError, "Unit test system #{name} already declared."
29
+ end
30
+ @@unit_systems[name] = HDLRuby::High.system(&ruby_block)
31
+ end
32
+
33
+
34
+ # Create a system named +test_name+ executing all the unit tests.
35
+ def self.test(test_name = "test")
36
+ # Declare the system.
37
+ HDLRuby::High.system test_name do
38
+ @@unit_systems.each do |name,sys|
39
+ sys.instantiate(name)
40
+ end
41
+ end
42
+ end
43
+ end
@@ -1,3 +1,3 @@
1
1
  module HDLRuby
2
- VERSION = "2.5.0"
2
+ VERSION = "2.5.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: HDLRuby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 2.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lovic Gauthier
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-03-15 00:00:00.000000000 Z
11
+ date: 2021-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -88,6 +88,7 @@ files:
88
88
  - lib/HDLRuby/hdr_samples/dff_bench.rb
89
89
  - lib/HDLRuby/hdr_samples/dff_counter.rb
90
90
  - lib/HDLRuby/hdr_samples/dff_properties.rb
91
+ - lib/HDLRuby/hdr_samples/dff_unit.rb
91
92
  - lib/HDLRuby/hdr_samples/include.rb
92
93
  - lib/HDLRuby/hdr_samples/instance_open.rb
93
94
  - lib/HDLRuby/hdr_samples/linear_test.rb
@@ -231,6 +232,7 @@ files:
231
232
  - lib/HDLRuby/hruby_serializer.rb
232
233
  - lib/HDLRuby/hruby_tools.rb
233
234
  - lib/HDLRuby/hruby_types.rb
235
+ - lib/HDLRuby/hruby_unit.rb
234
236
  - lib/HDLRuby/hruby_values.rb
235
237
  - lib/HDLRuby/hruby_verilog.rb
236
238
  - lib/HDLRuby/hruby_verilog_name.rb