origen 0.28.2 → 0.29.0

Sign up to get free protection for your applications and to get access to all the features.
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