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.
- checksums.yaml +4 -4
- data/bin/origen +14 -2
- data/config/version.rb +2 -2
- data/lib/origen.rb +72 -45
- data/lib/origen/application.rb +29 -19
- data/lib/origen/application/deployer.rb +3 -1
- data/lib/origen/application/runner.rb +10 -8
- data/lib/origen/chip_mode.rb +1 -1
- data/lib/origen/commands.rb +24 -12
- data/lib/origen/commands/version.rb +1 -1
- data/lib/origen/commands_global.rb +32 -8
- data/lib/origen/core_ext.rb +1 -2
- data/lib/origen/core_ext/enumerable.rb +2 -2
- data/lib/origen/core_ext/integer.rb +85 -0
- data/lib/origen/core_ext/numeric.rb +28 -4
- data/lib/origen/global_app.rb +9 -0
- data/lib/origen/log.rb +1 -1
- data/lib/origen/model_initializer.rb +6 -1
- data/lib/origen/netlist/list.rb +2 -2
- data/lib/origen/org_file.rb +125 -0
- data/lib/origen/org_file/interceptable.rb +44 -0
- data/lib/origen/org_file/interceptor.rb +100 -0
- data/lib/origen/parameters/set.rb +1 -1
- data/lib/origen/pins.rb +4 -0
- data/lib/origen/pins/function_proxy.rb +8 -0
- data/lib/origen/pins/pin.rb +90 -38
- data/lib/origen/pins/pin_collection.rb +61 -21
- data/lib/origen/ports/port.rb +1 -1
- data/lib/origen/registers.rb +1 -1
- data/lib/origen/registers/reg.rb +1 -1
- data/lib/origen/remote_manager.rb +25 -15
- data/lib/origen/site_config.rb +140 -13
- data/lib/origen/specs/checkers.rb +2 -2
- data/lib/origen/sub_blocks.rb +6 -1
- data/lib/origen/value.rb +119 -0
- data/lib/origen/value/bin_str_val.rb +72 -0
- data/lib/origen/value/hex_str_val.rb +100 -0
- data/origen_site_config.yml +15 -8
- metadata +12 -6
- data/lib/origen/core_ext/bignum.rb +0 -38
- 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
|
data/origen_site_config.yml
CHANGED
@@ -21,12 +21,22 @@
|
|
21
21
|
# user (recommended)
|
22
22
|
gem_manage_bundler: true
|
23
23
|
|
24
|
-
#
|
25
|
-
home_dir: ~/.origen
|
24
|
+
# WORKSPACE DIRECTORY SETUP
|
26
25
|
|
27
|
-
#
|
28
|
-
#
|
29
|
-
|
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.
|
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:
|
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:
|
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.
|
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
|