origen_link 0.1.0.pre0
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 +7 -0
- data/config/application.rb +105 -0
- data/config/boot.rb +7 -0
- data/config/commands.rb +74 -0
- data/config/version.rb +8 -0
- data/lib/origen_link/includes_vector_based.rb +76 -0
- data/lib/origen_link/test/regression_tests.rb +68 -0
- data/lib/origen_link/test/test_dut.rb +46 -0
- data/lib/origen_link/test/test_dut_controller.rb +42 -0
- data/lib/origen_link/test/vector_based_redefs.rb +17 -0
- data/lib/origen_link/vector_based.rb +254 -0
- data/lib/origen_link.rb +18 -0
- data/lib/origen_link_server/LinkSequencer.rb +333 -0
- data/lib/origen_link_server/LinkTCPServer.rb +45 -0
- data/lib/origen_link_server/jtag_interface.rb +177 -0
- data/lib/origen_link_server/pin_interface.rb +134 -0
- data/lib/origen_link_server/test/test_Sequencer.rb +51 -0
- data/lib/tasks/origen_link.rake +6 -0
- data/pattern/example.rb +4 -0
- data/pattern/jtag_100_operations.rb +14 -0
- data/pattern/jtag_comm_fail_test.rb +13 -0
- data/pattern/jtag_comm_test.rb +11 -0
- data/templates/web/index.md.erb +19 -0
- data/templates/web/layouts/_basic.html.erb +13 -0
- data/templates/web/partials/_navbar.html.erb +20 -0
- data/templates/web/release_notes.md.erb +5 -0
- metadata +125 -0
@@ -0,0 +1,177 @@
|
|
1
|
+
# rubocop:disable Style/For: Prefer each over for.
|
2
|
+
require_relative 'pin_interface'
|
3
|
+
|
4
|
+
class OrigenLinkJtag
|
5
|
+
attr_reader :tdoval
|
6
|
+
attr_accessor :verbose_enable
|
7
|
+
attr_accessor :anytdofail
|
8
|
+
|
9
|
+
def initialize(tdiio = 16, tdoio = 23, tmsio = 19, tckio = 26, tck_period = 0.000001)
|
10
|
+
@tdipin = OrigenLinkPin.new(tdiio, :out_low)
|
11
|
+
@tdopin = OrigenLinkPin.new(tdoio, :in)
|
12
|
+
@tmspin = OrigenLinkPin.new(tmsio, :out_low)
|
13
|
+
@tckpin = OrigenLinkPin.new(tckio, :out_low)
|
14
|
+
@tck_half_period = tck_period / 2
|
15
|
+
@tdoval = 0
|
16
|
+
@tdostr = ''
|
17
|
+
@verbose_enable = true
|
18
|
+
@anytdofail = false
|
19
|
+
end
|
20
|
+
|
21
|
+
def tck_period=(value)
|
22
|
+
@tck_half_period = value / 2
|
23
|
+
end
|
24
|
+
|
25
|
+
def destroy
|
26
|
+
@tdipin.destroy
|
27
|
+
@tdopin.destroy
|
28
|
+
@tmspin.destroy
|
29
|
+
@tckpin.destroy
|
30
|
+
@tdipin = nil
|
31
|
+
@tdopin = nil
|
32
|
+
@tmspin = nil
|
33
|
+
@tckpin = nil
|
34
|
+
end
|
35
|
+
|
36
|
+
def do_cycle(tdival, tmsval, capturetdo = false)
|
37
|
+
@tdipin.out(tdival)
|
38
|
+
@tmspin.out(tmsval)
|
39
|
+
sleep @tck_half_period
|
40
|
+
@tckpin.out(1)
|
41
|
+
sleep @tck_half_period
|
42
|
+
|
43
|
+
if capturetdo
|
44
|
+
@tdostr = @tdopin.in + @tdostr
|
45
|
+
end
|
46
|
+
@tckpin.out(0)
|
47
|
+
end
|
48
|
+
|
49
|
+
def do_tlr
|
50
|
+
for step in 1..8 do do_cycle(0, 1) end
|
51
|
+
do_cycle(0, 0)
|
52
|
+
end
|
53
|
+
|
54
|
+
def do_shift(numbits, value, capturetdo = false, suppresscomments = false, tdocompare = '')
|
55
|
+
@tdoval = 0
|
56
|
+
@tdostr = ''
|
57
|
+
for bit in 0..numbits - 2 do
|
58
|
+
do_cycle(value[bit], 0, capturetdo)
|
59
|
+
end
|
60
|
+
do_cycle(value[numbits - 1], 1, capturetdo)
|
61
|
+
|
62
|
+
@tdoval = @tdostr.to_i(2) if capturetdo
|
63
|
+
|
64
|
+
if !(suppresscomments) && @verbose_enable && capturetdo
|
65
|
+
puts 'TDO output = 0x' + @tdoval.to_s(16)
|
66
|
+
end
|
67
|
+
|
68
|
+
if capturetdo && tdocompare != ''
|
69
|
+
thiscomparefail = false
|
70
|
+
for bit in 0..numbits - 1 do
|
71
|
+
if tdocompare[numbits - 1 - bit] == 'H'
|
72
|
+
compareval = 1
|
73
|
+
elsif tdocompare[numbits - 1 - bit] == 'L'
|
74
|
+
compareval = 0
|
75
|
+
else
|
76
|
+
compareval = @tdoval[bit]
|
77
|
+
end
|
78
|
+
|
79
|
+
if @tdoval[bit] != compareval
|
80
|
+
@anytdofail = true
|
81
|
+
thiscomparefail = true
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
tdovalstr = @tdoval.to_s(2)
|
86
|
+
tdovalstr = '0' * (numbits - tdovalstr.length) + tdovalstr
|
87
|
+
|
88
|
+
if thiscomparefail
|
89
|
+
puts '****************************>>>>>>>>>>>>>>>>> TDO failure <<<<<<<<<<<<<<<<<<****************************'
|
90
|
+
puts 'expected: ' + tdocompare
|
91
|
+
puts 'received: ' + tdovalstr
|
92
|
+
else
|
93
|
+
puts 'TDO compare pass'
|
94
|
+
puts 'expected: ' + tdocompare
|
95
|
+
puts 'received: ' + tdovalstr
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def do_ir(numbits, value, options = {})
|
101
|
+
defaults = {
|
102
|
+
capturetdo: false,
|
103
|
+
suppresscomments: false,
|
104
|
+
tdocompare: ''
|
105
|
+
}
|
106
|
+
options = defaults.merge(options)
|
107
|
+
|
108
|
+
if !(options[:suppresscomments]) && @verbose_enable
|
109
|
+
puts " shift IR, #{numbits} bits, value = 0x" + value.to_s(16)
|
110
|
+
end
|
111
|
+
|
112
|
+
if options[:tdocompare] != ''
|
113
|
+
capturetdo = true
|
114
|
+
else
|
115
|
+
capturetdo = options[:capturetdo]
|
116
|
+
end
|
117
|
+
|
118
|
+
# Assume starting from run test idle
|
119
|
+
# Advance to shift IR
|
120
|
+
do_cycle(0, 1)
|
121
|
+
do_cycle(0, 1)
|
122
|
+
do_cycle(0, 0)
|
123
|
+
do_cycle(0, 0)
|
124
|
+
|
125
|
+
do_shift(numbits, value, capturetdo, options[:suppresscomments], options[:tdocompare])
|
126
|
+
|
127
|
+
# Return to run test idle
|
128
|
+
do_cycle(0, 1)
|
129
|
+
do_cycle(0, 0)
|
130
|
+
end
|
131
|
+
|
132
|
+
def do_dr(numbits, value, options = {})
|
133
|
+
defaults = {
|
134
|
+
capturetdo: true,
|
135
|
+
suppresscomments: false,
|
136
|
+
tdocompare: ''
|
137
|
+
}
|
138
|
+
options = defaults.merge(options)
|
139
|
+
if !(options[:suppresscomments]) && @verbose_enable
|
140
|
+
puts " shift DR, #{numbits} bits, value = 0x" + value.to_s(16)
|
141
|
+
end
|
142
|
+
|
143
|
+
if options[:tdocompare] != ''
|
144
|
+
capturetdo = true
|
145
|
+
else
|
146
|
+
capturetdo = options[:tdocompare]
|
147
|
+
end
|
148
|
+
|
149
|
+
# Assume starting from run test idle
|
150
|
+
# Advance to shift DR
|
151
|
+
do_cycle(0, 1)
|
152
|
+
do_cycle(0, 0)
|
153
|
+
do_cycle(0, 0)
|
154
|
+
|
155
|
+
do_shift(numbits, value, capturetdo, options[:suppresscomments], options[:tdocompare])
|
156
|
+
|
157
|
+
# Return to run test idle
|
158
|
+
do_cycle(0, 1)
|
159
|
+
do_cycle(0, 0)
|
160
|
+
end
|
161
|
+
|
162
|
+
def pause_dr
|
163
|
+
do_cycle(0, 1)
|
164
|
+
do_cycle(0, 0)
|
165
|
+
do_cycle(0, 0)
|
166
|
+
do_cycle(0, 1)
|
167
|
+
do_cycle(0, 0)
|
168
|
+
do_cycle(0, 1)
|
169
|
+
do_cycle(0, 1)
|
170
|
+
do_cycle(0, 0)
|
171
|
+
end
|
172
|
+
|
173
|
+
def pause_ir
|
174
|
+
do_cycle(0, 1)
|
175
|
+
pause_dr
|
176
|
+
end
|
177
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
# OrigenLinkPin class manipulate input/output pins of the Udoo
|
2
|
+
# using exported file objects. If the pin is not exported, it
|
3
|
+
# will be exported when a pin is initialized
|
4
|
+
#
|
5
|
+
# initialize:
|
6
|
+
# description - This method will execute system command
|
7
|
+
# "sudo echo ionumber > /sys/class/gpio/export"
|
8
|
+
# to create the IO file interface. It will
|
9
|
+
# set the direction, initial pin state and initialize
|
10
|
+
# instance variables
|
11
|
+
# ionumber - required, value indicating the pin number (BCM IO number,
|
12
|
+
# not the header pin number)
|
13
|
+
# direction - optional, specifies the pin direction. A pin is
|
14
|
+
# initialized as an input if a direction isn't specified.
|
15
|
+
#
|
16
|
+
#
|
17
|
+
# out:
|
18
|
+
# description - Sets the output state of the pin. If the pin
|
19
|
+
# is setup as an input, the direction will first
|
20
|
+
# be changed to output.
|
21
|
+
#
|
22
|
+
#
|
23
|
+
# in:
|
24
|
+
# description - Reads and returns state of the pin. If the pin
|
25
|
+
# is setup as an output, the direction will first
|
26
|
+
# be changed to input.
|
27
|
+
#
|
28
|
+
#
|
29
|
+
# update_direction:
|
30
|
+
# description - Sets the pin direction
|
31
|
+
#
|
32
|
+
# direction - specifies the pin direction. A pin is
|
33
|
+
# initialized as an input if a direction isn't specified.
|
34
|
+
#
|
35
|
+
# Valid direction values:
|
36
|
+
# :in - input
|
37
|
+
# :out - output
|
38
|
+
# :out_high - output, initialized high
|
39
|
+
# :out_low - output, initialized low
|
40
|
+
class OrigenLinkPin
|
41
|
+
@@pin_setup = {
|
42
|
+
in: 'in',
|
43
|
+
out: 'out',
|
44
|
+
out_high: 'high',
|
45
|
+
out_low: 'low'
|
46
|
+
}
|
47
|
+
|
48
|
+
attr_reader :gpio_valid
|
49
|
+
|
50
|
+
def initialize(ionumber, direction = :in)
|
51
|
+
@ionumber = Integer(ionumber)
|
52
|
+
@pin_dir_name = "/sys/class/gpio/gpio#{@ionumber}/direction"
|
53
|
+
@pin_val_name = "/sys/class/gpio/gpio#{@ionumber}/value"
|
54
|
+
if notFile.exist?(@pin_dir_name)
|
55
|
+
system("echo #{@ionumber} > /sys/class/gpio/export")
|
56
|
+
sleep 0.05
|
57
|
+
if $CHILD_STATUS == 0
|
58
|
+
@gpio_valid = true
|
59
|
+
else
|
60
|
+
@gpio_valid = false
|
61
|
+
end
|
62
|
+
else
|
63
|
+
@gpio_valid = true
|
64
|
+
end
|
65
|
+
if @gpio_valid
|
66
|
+
if File.writable?(@pin_dir_name)
|
67
|
+
@pin_dir_obj = File.open(@pin_dir_name, 'w')
|
68
|
+
update_direction(direction)
|
69
|
+
else
|
70
|
+
@gpio_valid = false
|
71
|
+
puts "#{@pin_dir_name} is not writable. Fix permissions or run as super user."
|
72
|
+
end
|
73
|
+
@pin_val_obj = File.open(@pin_val_name, 'r+') if @gpio_valid
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def destroy
|
78
|
+
if @gpio_valid
|
79
|
+
@pin_dir_obj.close
|
80
|
+
@pin_val_obj.close
|
81
|
+
system("echo #{@ionumber} > /sys/class/gpio/unexport")
|
82
|
+
puts "pin #{@ionumber} is no longer exported"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def out(value)
|
87
|
+
if @gpio_valid
|
88
|
+
if @direction == :in
|
89
|
+
if value == 1
|
90
|
+
update_direction(:out_high)
|
91
|
+
else
|
92
|
+
update_direction(:out_low)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
@pin_val_obj.write(value)
|
96
|
+
@pin_val_obj.flush
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# rubocop:disable Style/EmptyElse: Redundant else-clause.
|
101
|
+
def in
|
102
|
+
if @gpio_valid
|
103
|
+
if @direction == :out
|
104
|
+
update_direction(:in)
|
105
|
+
end
|
106
|
+
# below is original read - slow to reopen every time
|
107
|
+
# File.open(@pin_val_name, 'r') do |file|
|
108
|
+
# file.read#.chomp
|
109
|
+
# end
|
110
|
+
# end original read
|
111
|
+
@pin_val_obj.pos = 0
|
112
|
+
@pin_val_obj.getc
|
113
|
+
else
|
114
|
+
nil
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def update_direction(direction)
|
119
|
+
if @gpio_valid
|
120
|
+
@pin_dir_obj.pos = 0
|
121
|
+
@pin_dir_obj.write(@@pin_setup[direction])
|
122
|
+
@pin_dir_obj.flush
|
123
|
+
if direction == :in
|
124
|
+
@direction = direction
|
125
|
+
else
|
126
|
+
@direction = :out
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def to_s
|
132
|
+
'OrigenLinkPin' + @ionumber.to_s
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# rubocop:disable Style/FileName: Use snake_case for source file names.
|
2
|
+
require_relative '../LinkSequencer'
|
3
|
+
require 'test/unit'
|
4
|
+
|
5
|
+
class TestLinkSequencer < Test::Unit::TestCase
|
6
|
+
def test_pinmap
|
7
|
+
test_obj = OrigenLinkSequencer.new
|
8
|
+
assert_equal('P:', test_obj.processmessage('pin_assign:tck,23'))
|
9
|
+
assert_equal('OrigenLinkPin23', test_obj.pinmap['tck'].to_s)
|
10
|
+
assert_equal('F:pin tdo gpio1900 is invalid', test_obj.processmessage('pin_assign:tdo,1900'))
|
11
|
+
assert_equal('P:', test_obj.processmessage('pin_assign:tck,23'))
|
12
|
+
assert_equal('OrigenLinkPin23', test_obj.pinmap['tck'].to_s)
|
13
|
+
assert_equal(-1, test_obj.pinmap['tdo'])
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_pinorder
|
17
|
+
test_obj2 = OrigenLinkSequencer.new
|
18
|
+
assert_equal('P:', test_obj2.processmessage('pin_patternorder:tdi,tdo,tms'))
|
19
|
+
assert_equal(%w(tdi tdo tms), test_obj2.patternorder)
|
20
|
+
assert_equal({ 'tdi' => 0, 'tdo' => 1, 'tms' => 2 }, test_obj2.patternpinindex)
|
21
|
+
assert_equal([%w(tdi tdo tms), [], []], test_obj2.cycletiming[0]['timing'])
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_clear
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_pinformat_timing
|
28
|
+
test_obj3 = OrigenLinkSequencer.new
|
29
|
+
assert_equal('P:', test_obj3.processmessage('pin_format:1,tck,rl'))
|
30
|
+
assert_equal(['tck'], test_obj3.cycletiming[1]['rl'])
|
31
|
+
assert_equal(nil, test_obj3.cycletiming[1]['rh'])
|
32
|
+
|
33
|
+
assert_equal('P:', test_obj3.processmessage('pin_format:1,xtal,rh'))
|
34
|
+
assert_equal(nil, test_obj3.cycletiming[1]['rl'])
|
35
|
+
assert_equal(['xtal'], test_obj3.cycletiming[1]['rh'])
|
36
|
+
|
37
|
+
assert_equal('P:', test_obj3.processmessage('pin_format:2,tck,rl'))
|
38
|
+
assert_equal(['tck'], test_obj3.cycletiming[2]['rl'])
|
39
|
+
assert_equal(nil, test_obj3.cycletiming[2]['rh'])
|
40
|
+
assert_equal(nil, test_obj3.cycletiming[1]['rl'])
|
41
|
+
assert_equal(['xtal'], test_obj3.cycletiming[1]['rh'])
|
42
|
+
|
43
|
+
assert_equal('P:', test_obj3.processmessage('pin_timing:1,tdi,0,tms,1,tdo,2'))
|
44
|
+
assert_equal(['tck'], test_obj3.cycletiming[2]['rl'])
|
45
|
+
assert_equal(nil, test_obj3.cycletiming[2]['rh'])
|
46
|
+
assert_equal(nil, test_obj3.cycletiming[1]['rl'])
|
47
|
+
assert_equal(['xtal'], test_obj3.cycletiming[1]['rh'])
|
48
|
+
assert_equal([['tdi'], ['tms'], ['tdo']], test_obj3.cycletiming[1]['timing'])
|
49
|
+
assert_equal([[], [], []], test_obj3.cycletiming[2]['timing'])
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
# You can define any Rake tasks to support your application here (or in any file
|
2
|
+
# ending in .rake in this directory).
|
3
|
+
#
|
4
|
+
# Rake (Ruby Make) is very useful for creating build scripts, see this short video
|
5
|
+
# for a quick introduction:
|
6
|
+
# http://railscasts.com/episodes/66-custom-rake-tasks
|
data/pattern/example.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
Pattern.create(options={:name => "JTAG_Test"})do
|
2
|
+
$dut.jtag.reset
|
3
|
+
$dut.jtag.idle
|
4
|
+
1.upto(50) do
|
5
|
+
ss "reading Halo debugger ID"
|
6
|
+
$dut.jtag.write_ir 0xe, size: 4
|
7
|
+
$dut.reg(:testreg).read(0x5ba00477)
|
8
|
+
$dut.jtag.read_dr $dut.reg(:testreg), size: 32
|
9
|
+
$dut.jtag.write_ir 0, size: 4
|
10
|
+
ss "reading Halo JTAG ID"
|
11
|
+
$dut.reg(:testreg).read(0x1984101d)
|
12
|
+
$dut.jtag.read_dr $dut.reg(:testreg), size: 32
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Pattern.create(options={:name => "JTAG_Test_Force_Fail"})do
|
2
|
+
$dut.jtag.reset
|
3
|
+
$dut.jtag.idle
|
4
|
+
ss "reading Halo debugger ID - setting wrong compare value"
|
5
|
+
#$dut.reg(:testreg).read(0x5ba00477)
|
6
|
+
$dut.reg(:testreg).read(0x5bd00477)
|
7
|
+
$dut.jtag.read_dr $dut.reg(:testreg), size: 32
|
8
|
+
$dut.jtag.write_ir 0, size: 4
|
9
|
+
ss "reading Halo JTAG ID - setting wrong compare value"
|
10
|
+
#$dut.reg(:testreg).read(0x1984101d)
|
11
|
+
$dut.reg(:testreg).read(0x1984101a)
|
12
|
+
$dut.jtag.read_dr $dut.reg(:testreg), size: 32
|
13
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Pattern.create(options={:name => "JTAG_Test"})do
|
2
|
+
$dut.jtag.reset
|
3
|
+
$dut.jtag.idle
|
4
|
+
ss "reading Halo debugger ID"
|
5
|
+
$dut.reg(:testreg).read(0x5ba00477)
|
6
|
+
$dut.jtag.read_dr $dut.reg(:testreg), size: 32
|
7
|
+
$dut.jtag.write_ir 0, size: 4
|
8
|
+
ss "reading Halo JTAG ID"
|
9
|
+
$dut.reg(:testreg).read(0x1984101d)
|
10
|
+
$dut.jtag.read_dr $dut.reg(:testreg), size: 32
|
11
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
% render "layouts/basic.html" do
|
2
|
+
|
3
|
+
%# HTML tags can be embedded in mark down files if you want to do specific custom
|
4
|
+
%# formatting like this, but in most cases that is not required.
|
5
|
+
<h1><%= Origen.app.namespace %> <span style="font-size: 14px">(<%= Origen.app.version %>)</span></h1>
|
6
|
+
|
7
|
+
### Purpose
|
8
|
+
|
9
|
+
This application...
|
10
|
+
|
11
|
+
### How To Use
|
12
|
+
|
13
|
+
Add quickstart documentation here...
|
14
|
+
|
15
|
+
### How To Setup the Application Environment
|
16
|
+
|
17
|
+
Describe how a user would setup a new workspace for this application...
|
18
|
+
|
19
|
+
% end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
---
|
2
|
+
title: <%= options[:title] || Origen.config.name %>
|
3
|
+
---
|
4
|
+
<%= render "partials/navbar.html", tab: options[:tab] %>
|
5
|
+
|
6
|
+
<div class="row">
|
7
|
+
%# The markdown attribute is important if you are going to include content written
|
8
|
+
%# in markdown, without this is will be included verbatim
|
9
|
+
<div class="span12" markdown="1">
|
10
|
+
<%= yield %>
|
11
|
+
|
12
|
+
</div>
|
13
|
+
</div>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<nav class="navbar navbar-inverse navbar-fixed-top">
|
2
|
+
<div class="container">
|
3
|
+
<div class="navbar-header">
|
4
|
+
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
|
5
|
+
<span class="sr-only">Toggle navigation</span>
|
6
|
+
<span class="icon-bar"></span>
|
7
|
+
<span class="icon-bar"></span>
|
8
|
+
<span class="icon-bar"></span>
|
9
|
+
</button>
|
10
|
+
<a class="navbar-brand" href="<%= path "/" %>">Home</a>
|
11
|
+
</div>
|
12
|
+
<div id="navbar" class="collapse navbar-collapse">
|
13
|
+
<ul class="nav navbar-nav">
|
14
|
+
<li class="<%= options[:tab] == :api ? 'active' : '' %>"><a href="<%= path "/api/" %>">API</a></li>
|
15
|
+
<li class="<%= options[:tab] == :release ? 'active' : '' %>"><a href="<%= path "/release_notes" %>">Release Notes</a></li>
|
16
|
+
</ul>
|
17
|
+
<%= import "origen/web/logo.html" %>
|
18
|
+
</div><!--/.nav-collapse -->
|
19
|
+
</div>
|
20
|
+
</nav>
|
metadata
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: origen_link
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0.pre0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Paul Derouen
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-03-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: origen
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.6.6
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.6.6
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: origen_testers
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: origen_jtag
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.12.0
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.12.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: origen_doc_helpers
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description:
|
70
|
+
email:
|
71
|
+
- paul.derouen@nxp.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- config/application.rb
|
77
|
+
- config/boot.rb
|
78
|
+
- config/commands.rb
|
79
|
+
- config/version.rb
|
80
|
+
- lib/origen_link.rb
|
81
|
+
- lib/origen_link/includes_vector_based.rb
|
82
|
+
- lib/origen_link/test/regression_tests.rb
|
83
|
+
- lib/origen_link/test/test_dut.rb
|
84
|
+
- lib/origen_link/test/test_dut_controller.rb
|
85
|
+
- lib/origen_link/test/vector_based_redefs.rb
|
86
|
+
- lib/origen_link/vector_based.rb
|
87
|
+
- lib/origen_link_server/LinkSequencer.rb
|
88
|
+
- lib/origen_link_server/LinkTCPServer.rb
|
89
|
+
- lib/origen_link_server/jtag_interface.rb
|
90
|
+
- lib/origen_link_server/pin_interface.rb
|
91
|
+
- lib/origen_link_server/test/test_Sequencer.rb
|
92
|
+
- lib/tasks/origen_link.rake
|
93
|
+
- pattern/example.rb
|
94
|
+
- pattern/jtag_100_operations.rb
|
95
|
+
- pattern/jtag_comm_fail_test.rb
|
96
|
+
- pattern/jtag_comm_test.rb
|
97
|
+
- templates/web/index.md.erb
|
98
|
+
- templates/web/layouts/_basic.html.erb
|
99
|
+
- templates/web/partials/_navbar.html.erb
|
100
|
+
- templates/web/release_notes.md.erb
|
101
|
+
homepage: http://origen-sdk.org/OrigenLink
|
102
|
+
licenses: []
|
103
|
+
metadata: {}
|
104
|
+
post_install_message:
|
105
|
+
rdoc_options: []
|
106
|
+
require_paths:
|
107
|
+
- lib
|
108
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 1.9.3
|
113
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 1.8.11
|
118
|
+
requirements: []
|
119
|
+
rubyforge_project:
|
120
|
+
rubygems_version: 2.2.2
|
121
|
+
signing_key:
|
122
|
+
specification_version: 4
|
123
|
+
summary: Origen interface to a live DUT tester
|
124
|
+
test_files: []
|
125
|
+
has_rdoc:
|