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