origen 0.28.2 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/bin/origen +14 -2
  3. data/config/version.rb +2 -2
  4. data/lib/origen.rb +72 -45
  5. data/lib/origen/application.rb +29 -19
  6. data/lib/origen/application/deployer.rb +3 -1
  7. data/lib/origen/application/runner.rb +10 -8
  8. data/lib/origen/chip_mode.rb +1 -1
  9. data/lib/origen/commands.rb +24 -12
  10. data/lib/origen/commands/version.rb +1 -1
  11. data/lib/origen/commands_global.rb +32 -8
  12. data/lib/origen/core_ext.rb +1 -2
  13. data/lib/origen/core_ext/enumerable.rb +2 -2
  14. data/lib/origen/core_ext/integer.rb +85 -0
  15. data/lib/origen/core_ext/numeric.rb +28 -4
  16. data/lib/origen/global_app.rb +9 -0
  17. data/lib/origen/log.rb +1 -1
  18. data/lib/origen/model_initializer.rb +6 -1
  19. data/lib/origen/netlist/list.rb +2 -2
  20. data/lib/origen/org_file.rb +125 -0
  21. data/lib/origen/org_file/interceptable.rb +44 -0
  22. data/lib/origen/org_file/interceptor.rb +100 -0
  23. data/lib/origen/parameters/set.rb +1 -1
  24. data/lib/origen/pins.rb +4 -0
  25. data/lib/origen/pins/function_proxy.rb +8 -0
  26. data/lib/origen/pins/pin.rb +90 -38
  27. data/lib/origen/pins/pin_collection.rb +61 -21
  28. data/lib/origen/ports/port.rb +1 -1
  29. data/lib/origen/registers.rb +1 -1
  30. data/lib/origen/registers/reg.rb +1 -1
  31. data/lib/origen/remote_manager.rb +25 -15
  32. data/lib/origen/site_config.rb +140 -13
  33. data/lib/origen/specs/checkers.rb +2 -2
  34. data/lib/origen/sub_blocks.rb +6 -1
  35. data/lib/origen/value.rb +119 -0
  36. data/lib/origen/value/bin_str_val.rb +72 -0
  37. data/lib/origen/value/hex_str_val.rb +100 -0
  38. data/origen_site_config.yml +15 -8
  39. metadata +12 -6
  40. data/lib/origen/core_ext/bignum.rb +0 -38
  41. data/lib/origen/core_ext/fixnum.rb +0 -56
@@ -0,0 +1,100 @@
1
+ module Origen
2
+ class Value
3
+ # Handles a value represented by a string of hex character(s) [0-9, a-f, x, X, z, Z]
4
+ #
5
+ # This is
6
+ #
7
+ # * x when all the bits in a nibble are x
8
+ # * X when some of the bits in a nibble are x, though the exact bit-level values are not known
9
+ # * z when all the bits in a nibble are z
10
+ # * Z when some of the bits in a nibble are z, though the exact bit-level values are not known
11
+ #
12
+ # Capital hex numbers will be accepted when defining the value, but they will be converted
13
+ # to lower case
14
+ class HexStrVal
15
+ attr_reader :val, :size
16
+
17
+ def initialize(value, options)
18
+ @val = clean(value)
19
+ if options[:size]
20
+ @size = options[:size]
21
+ # Trim any nibbles that are out of range...
22
+ @val = val.split(//).last(size_in_nibbles).join
23
+ else
24
+ @size = (val.size * 4)
25
+ end
26
+ end
27
+
28
+ def numeric?
29
+ !!(val =~ /^[0-9a-f]+$/)
30
+ end
31
+
32
+ def to_i
33
+ if numeric?
34
+ val.to_i(16) & size.bit_mask
35
+ end
36
+ end
37
+
38
+ def to_s
39
+ "h#{val}"
40
+ end
41
+
42
+ # Returns the value of the given bit.
43
+ # Return nil if out of range, otherwise 0, 1 or an X or Z object
44
+ def [](index)
45
+ unless index > (size - 1)
46
+ if numeric?
47
+ to_i[index]
48
+ else
49
+ # Get the nibble in question and re-align the index, if the bit falls in a numeric
50
+ # part of the string we can still resolve to an integer
51
+ nibble = nibble_of(index)
52
+ nibble = val[val.size - 1 - nibble]
53
+ if nibble.downcase == 'x'
54
+ X.new
55
+ elsif nibble.downcase == 'z'
56
+ Z.new
57
+ else
58
+ nibble.to_i[index % 4]
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+ private
65
+
66
+ def nibble_of(bit_number)
67
+ bit_number / 4
68
+ end
69
+
70
+ # Rounds up to the nearest whole nibble
71
+ def size_in_nibbles
72
+ adder = size % 4 == 0 ? 0 : 1
73
+ (size / 4) + adder
74
+ end
75
+
76
+ def clean(val)
77
+ val = val.to_s.strip.to_s[1..-1]
78
+ if valid?(val)
79
+ if val =~ /[A-F]/
80
+ val = val.gsub('A', 'a')
81
+ val = val.gsub('B', 'b')
82
+ val = val.gsub('C', 'c')
83
+ val = val.gsub('D', 'd')
84
+ val = val.gsub('E', 'e')
85
+ val = val.gsub('F', 'f')
86
+ end
87
+ val.gsub('_', '')
88
+ end
89
+ end
90
+
91
+ def valid?(val)
92
+ if val =~ /^[0-9a-fA-F_xXzZ]+$/
93
+ true
94
+ else
95
+ fail Origen::SyntaxError, 'Hex string values can only contain: 0-9, a-f, A-F, _, x, X, z, Z'
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -21,12 +21,22 @@
21
21
  # user (recommended)
22
22
  gem_manage_bundler: true
23
23
 
24
- # Define where a typical user's home directory will be, with a hidden directory for Origen.
25
- home_dir: ~/.origen
24
+ # WORKSPACE DIRECTORY SETUP
26
25
 
27
- # Define where the gems should be installed
28
- # By default, this will be at <home_dir>/gems but can be overridden here.
29
- #gem_install_dir: ~/.origen/gems
26
+ # Defines where the home directory is
27
+ #home_dir: ~/
28
+
29
+ # Defines where the user customization directory is
30
+ #user_install_dir:
31
+
32
+ # Defines the gems are to be installed
33
+ #user_gem_dir:
34
+
35
+ # Indicates whether '.origen' should be appended to home_dir
36
+ append_dot_origen: true
37
+
38
+ # Indicates whether 'gems' should be appended to the user_gem_dir
39
+ append_gems: true
30
40
 
31
41
  # ORIGEN STARTUP OPTIONS
32
42
  # These options define how and where Origen should boot.
@@ -36,9 +46,6 @@ home_dir: ~/.origen
36
46
  # control over their environment.
37
47
  user_install_enable: false
38
48
 
39
- # Default to the user's install dir being the .origen in their home directory but allow it to be overridden
40
- #user_install_dir: ~/.origen
41
-
42
49
  # Default 'tool_repo_install_dir' to nil, meaning no 'tool_repo_install_dir' is present. If neither this nor
43
50
  # 'user_install_enable' is present, the universal install will be used.
44
51
  #tool_repo_install_dir: nil
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: origen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.28.2
4
+ version: 0.29.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen McGinty
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-07 00:00:00.000000000 Z
11
+ date: 2018-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -457,10 +457,9 @@ files:
457
457
  - lib/origen/controller.rb
458
458
  - lib/origen/core_ext.rb
459
459
  - lib/origen/core_ext/array.rb
460
- - lib/origen/core_ext/bignum.rb
461
460
  - lib/origen/core_ext/enumerable.rb
462
- - lib/origen/core_ext/fixnum.rb
463
461
  - lib/origen/core_ext/hash.rb
462
+ - lib/origen/core_ext/integer.rb
464
463
  - lib/origen/core_ext/module.rb
465
464
  - lib/origen/core_ext/numeric.rb
466
465
  - lib/origen/core_ext/object.rb
@@ -491,6 +490,7 @@ files:
491
490
  - lib/origen/generator/renderer.rb
492
491
  - lib/origen/generator/resources.rb
493
492
  - lib/origen/generator/stage.rb
493
+ - lib/origen/global_app.rb
494
494
  - lib/origen/global_methods.rb
495
495
  - lib/origen/location.rb
496
496
  - lib/origen/location/base.rb
@@ -509,6 +509,9 @@ files:
509
509
  - lib/origen/netlist/connectable.rb
510
510
  - lib/origen/netlist/list.rb
511
511
  - lib/origen/operating_systems.rb
512
+ - lib/origen/org_file.rb
513
+ - lib/origen/org_file/interceptable.rb
514
+ - lib/origen/org_file/interceptor.rb
512
515
  - lib/origen/parameters.rb
513
516
  - lib/origen/parameters/live.rb
514
517
  - lib/origen/parameters/missing.rb
@@ -580,6 +583,9 @@ files:
580
583
  - lib/origen/utility/input_capture.rb
581
584
  - lib/origen/utility/mailer.rb
582
585
  - lib/origen/utility/time_and_date.rb
586
+ - lib/origen/value.rb
587
+ - lib/origen/value/bin_str_val.rb
588
+ - lib/origen/value/hex_str_val.rb
583
589
  - lib/origen/version_string.rb
584
590
  - lib/tasks/gem.rake
585
591
  - lib/tasks/private/build.rake
@@ -623,7 +629,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
623
629
  requirements:
624
630
  - - ">="
625
631
  - !ruby/object:Gem::Version
626
- version: 1.9.3
632
+ version: '2'
627
633
  required_rubygems_version: !ruby/object:Gem::Requirement
628
634
  requirements:
629
635
  - - ">="
@@ -631,7 +637,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
631
637
  version: 1.8.11
632
638
  requirements: []
633
639
  rubyforge_project:
634
- rubygems_version: 2.5.2
640
+ rubygems_version: 2.6.8
635
641
  signing_key:
636
642
  specification_version: 4
637
643
  summary: The Semiconductor Developer's Kit
@@ -1,38 +0,0 @@
1
- unless Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.4.0')
2
- class Bignum
3
- # Extend Fixnum to enable 10.cycles
4
- def cycles
5
- if block_given?
6
- times do
7
- yield
8
- Origen.app.tester.cycle
9
- end
10
- else
11
- Origen.app.tester.cycle(repeat: self)
12
- end
13
- end
14
- alias_method :cycle, :cycles
15
-
16
- alias_method :old_bit_select, :[]
17
- def [](*args)
18
- if args.length == 1 && !args.first.is_a?(Range)
19
- old_bit_select(args.first)
20
- else
21
- if args.first.is_a?(Range)
22
- msb = args.first.first
23
- lsb = args.first.last
24
- else
25
- msb = args.first
26
- lsb = args.last
27
- end
28
- (self >> lsb) & 0.ones_comp(msb - lsb + 1)
29
- end
30
- end
31
-
32
- def ones_comp(num_bits)
33
- self ^ ((1 << num_bits) - 1)
34
- end
35
- alias_method :ones_complement, :ones_comp
36
- alias_method :ones_compliment, :ones_comp
37
- end
38
- end
@@ -1,56 +0,0 @@
1
- class Fixnum
2
- # Extend Fixnum to enable 10.cycles
3
- def cycles
4
- if block_given?
5
- times do
6
- yield
7
- Origen.app.tester.cycle
8
- end
9
- else
10
- Origen.app.tester.cycle(repeat: self)
11
- end
12
- end
13
- alias_method :cycle, :cycles
14
-
15
- alias_method :old_bit_select, :[]
16
- def [](*args)
17
- if args.length == 1 && !args.first.is_a?(Range)
18
- old_bit_select(args.first)
19
- else
20
- if args.first.is_a?(Range)
21
- msb = args.first.first
22
- lsb = args.first.last
23
- else
24
- msb = args.first
25
- lsb = args.last
26
- end
27
- (self >> lsb) & 0.ones_comp(msb - lsb + 1)
28
- end
29
- end
30
-
31
- def ones_comp(num_bits)
32
- self ^ ((1 << num_bits) - 1)
33
- end
34
- alias_method :ones_complement, :ones_comp
35
- alias_method :ones_compliment, :ones_comp
36
-
37
- def to_bool
38
- if self == 1
39
- return true
40
- elsif self == 0
41
- return false
42
- else
43
- return nil
44
- end
45
- end
46
-
47
- def to_spreadsheet_column
48
- index_hash = Hash.new { |hash, key| hash[key] = hash[key - 1].next }.merge(0 => 'A')
49
- index_hash[self]
50
- end
51
- alias_method :to_xls_column, :to_spreadsheet_column
52
- alias_method :to_xlsx_column, :to_spreadsheet_column
53
- alias_method :to_xls_col, :to_spreadsheet_column
54
- alias_method :to_xlsx_col, :to_spreadsheet_column
55
- alias_method :to_spreadsheet_col, :to_spreadsheet_column
56
- end