origen_sim 0.16.1 → 0.20.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/application.rb +2 -0
- data/config/commands.rb +29 -20
- data/config/version.rb +2 -2
- data/ext/bridge.c +72 -14
- data/ext/origen.c +29 -17
- data/ext/origen.h +6 -0
- data/ext/origen_tasks.tab +2 -0
- data/lib/origen_sim/commands/build.rb +90 -59
- data/lib/origen_sim/origen/pins/pin.rb +38 -0
- data/lib/origen_sim/origen/top_level.rb +8 -3
- data/lib/origen_sim/simulation.rb +1 -1
- data/lib/origen_sim/simulator/user_details.rb +0 -1
- data/lib/origen_sim/simulator.rb +70 -70
- data/lib/origen_sim/tester.rb +53 -10
- data/lib/origen_sim_dev/dut.rb +66 -46
- data/lib/origen_sim_dev/ip.rb +15 -8
- data/pattern/concurrent_ip.rb +17 -0
- data/pattern/test.rb +122 -10
- data/templates/empty.rc +16 -26
- data/templates/origen_guides/simulation/ams.md.erb +141 -0
- data/templates/origen_guides/simulation/compiling.md.erb +52 -7
- data/templates/origen_guides/simulation/debugging.md.erb +1 -1
- data/templates/origen_guides/simulation/direct.md.erb +112 -0
- data/templates/origen_guides/simulation/environment.md.erb +6 -3
- data/templates/origen_guides/simulation/patterns.md.erb +2 -7
- data/templates/rtl_v/origen.v.erb +114 -12
- metadata +13 -9
@@ -1,7 +1,17 @@
|
|
1
1
|
%#`include "<%= options[:top] %>"
|
2
2
|
|
3
|
+
// To create the big fonts - http://patorjk.com/software/taag/#p=display&f=Big
|
4
|
+
|
3
5
|
`timescale 1ns/1ns
|
4
6
|
|
7
|
+
// _____ _ _ _ _ _____ _ _____ _
|
8
|
+
// | __ \(_) (_) | | | | __ (_) | __ \ (_)
|
9
|
+
// | | | |_ __ _ _| |_ __ _| | | |__) | _ __ | | | |_ __ ___ _____ _ __
|
10
|
+
// | | | | |/ _` | | __/ _` | | | ___/ | '_ \ | | | | '__| \ \ / / _ \ '__|
|
11
|
+
// | |__| | | (_| | | || (_| | | | | | | | | | | |__| | | | |\ V / __/ |
|
12
|
+
// |_____/|_|\__, |_|\__\__,_|_| |_| |_|_| |_| |_____/|_| |_| \_/ \___|_|
|
13
|
+
// __/ |
|
14
|
+
// |___/
|
5
15
|
// 0 - Data
|
6
16
|
// 1 - Reserved
|
7
17
|
//
|
@@ -87,21 +97,85 @@ module pin_driver(pin, sync);
|
|
87
97
|
|
88
98
|
endmodule
|
89
99
|
|
100
|
+
|
101
|
+
`ifdef ORIGEN_WREAL
|
102
|
+
// _ _____ _ _____ _
|
103
|
+
// /\ | | | __ (_) | __ \ (_)
|
104
|
+
// / \ _ __ __ _| | ___ __ _ | |__) | _ __ | | | |_ __ ___ _____ _ __
|
105
|
+
// / /\ \ | '_ \ / _` | |/ _ \ / _` | | ___/ | '_ \ | | | | '__| \ \ / / _ \ '__|
|
106
|
+
// / ____ \| | | | (_| | | (_) | (_| | | | | | | | | | |__| | | | |\ V / __/ |
|
107
|
+
// /_/ \_\_| |_|\__,_|_|\___/ \__, | |_| |_|_| |_| |_____/|_| |_| \_/ \___|_|
|
108
|
+
// __/ |
|
109
|
+
// |___/
|
110
|
+
|
111
|
+
// A simple WREAL pin driver that can drive real value on a pin or else hi-Z, when the driver is in
|
112
|
+
// hi-Z mode the value applied by any other driver connected to the pin can be measured by peeking
|
113
|
+
// the value on pin
|
114
|
+
module ana_pin_driver(pin);
|
115
|
+
inout pin;
|
116
|
+
|
117
|
+
wreal pin;
|
118
|
+
|
119
|
+
reg drive_en = 0;
|
120
|
+
real drive = 0.0; // Value that will be driven on pin when drive is enabled
|
121
|
+
|
122
|
+
assign pin = drive_en ? drive : `wrealZState;
|
123
|
+
endmodule
|
124
|
+
`endif
|
125
|
+
|
126
|
+
|
127
|
+
// _____ _ __ __ _ _
|
128
|
+
// | __ (_) | \/ | | | | |
|
129
|
+
// | |__) | _ __ ___ | \ / | ___ __| |_ _| | ___
|
130
|
+
// | ___/ | '_ \/ __| | |\/| |/ _ \ / _` | | | | |/ _ \
|
131
|
+
// | | | | | | \__ \ | | | | (_) | (_| | |_| | | __/
|
132
|
+
// |_| |_|_| |_|___/ |_| |_|\___/ \__,_|\__,_|_|\___|
|
133
|
+
|
134
|
+
// This module groups all pin drivers together and will be instantiated as origen.pins, individual pin
|
135
|
+
// drivers are therefore accessible via origen.pins.my_pin_name
|
90
136
|
module pin_drivers(<%= dut.rtl_pins.map { |n, p, o| "#{p.id}_o" }.join(', ') %>);
|
91
137
|
|
92
138
|
% dut.rtl_pins.each do |name, pin, options|
|
139
|
+
% if pin.type == :analog
|
140
|
+
`ifdef ORIGEN_WREAL
|
141
|
+
inout <%= pin.id %>_o;
|
142
|
+
`else
|
93
143
|
output <%= pin.id %>_o;
|
144
|
+
`endif
|
145
|
+
% else
|
146
|
+
output <%= pin.id %>_o;
|
147
|
+
% end
|
94
148
|
% end
|
95
149
|
|
150
|
+
`ifdef ORIGEN_WREAL
|
151
|
+
% dut.rtl_pins(type: :analog).each do |name, pin, options|
|
152
|
+
wreal <%= pin.id %>_o;
|
153
|
+
% end
|
154
|
+
`endif
|
155
|
+
|
96
156
|
reg sync = 0;
|
97
157
|
|
98
158
|
% dut.rtl_pins.each do |name, pin, options|
|
159
|
+
% if pin.type == :analog
|
160
|
+
`ifdef ORIGEN_WREAL
|
161
|
+
ana_pin_driver <%= pin.id %>(.pin(<%= pin.id %>_o));
|
162
|
+
`else
|
99
163
|
pin_driver #(<%= pin.meta[:origen_sim_init_pin_state].nil? ? '' : ".init_drive(#{pin.meta[:origen_sim_init_pin_state]}), "%>.pin_name("<%= pin.id %>")) <%= pin.id %>(.pin(<%= pin.id %>_o), .sync(sync));
|
164
|
+
`endif
|
165
|
+
% else
|
166
|
+
pin_driver #(<%= pin.meta[:origen_sim_init_pin_state].nil? ? '' : ".init_drive(#{pin.meta[:origen_sim_init_pin_state]}), "%>.pin_name("<%= pin.id %>")) <%= pin.id %>(.pin(<%= pin.id %>_o), .sync(sync));
|
167
|
+
% end
|
100
168
|
% end
|
101
169
|
|
102
|
-
|
103
170
|
endmodule
|
104
171
|
|
172
|
+
// __ __ _ _ _
|
173
|
+
// | \/ | | | | | | |
|
174
|
+
// | \ / | ___| |_ __ _ __| | __ _| |_ __ _
|
175
|
+
// | |\/| |/ _ \ __/ _` |/ _` |/ _` | __/ _` |
|
176
|
+
// | | | | __/ || (_| | (_| | (_| | || (_| |
|
177
|
+
// |_| |_|\___|\__\__,_|\__,_|\__,_|\__\__,_|
|
178
|
+
|
105
179
|
// Placeholder for user notes. This will be an empty module if no notes were given
|
106
180
|
module user_details;
|
107
181
|
parameter _AVAILABLE_DETAILS_ = "<%= options[:user_details].empty? ? "" : options[:user_details].keys.join(',') %>";
|
@@ -132,6 +206,17 @@ module snapshot_details;
|
|
132
206
|
|
133
207
|
endmodule
|
134
208
|
|
209
|
+
// _____ _
|
210
|
+
// | __ \ | |
|
211
|
+
// | | | | ___| |__ _ _ __ _
|
212
|
+
// | | | |/ _ \ '_ \| | | |/ _` |
|
213
|
+
// | |__| | __/ |_) | |_| | (_| |
|
214
|
+
// |_____/ \___|_.__/ \__,_|\__, |
|
215
|
+
// __/ |
|
216
|
+
// |___/
|
217
|
+
|
218
|
+
// Instantiated as origen.debug, this module contains the error count, current pattern name and comments,
|
219
|
+
// metadata associated with the snapshot build, and other debug information
|
135
220
|
module debug;
|
136
221
|
reg [31:0] errors = 0;
|
137
222
|
reg [15:0] marker = 0;
|
@@ -145,15 +230,38 @@ module debug;
|
|
145
230
|
reg handshake;
|
146
231
|
|
147
232
|
snapshot_details snapshot_details();
|
233
|
+
|
234
|
+
`ifdef ORIGEN_WREAL
|
235
|
+
reg wreal_enabled = 1;
|
236
|
+
`else
|
237
|
+
reg wreal_enabled = 0;
|
238
|
+
`endif
|
148
239
|
|
149
240
|
endmodule
|
150
241
|
|
242
|
+
// _______ _ _ _______ ____
|
243
|
+
// |__ __| | | | | |__ __| _ \
|
244
|
+
// | | ___ _ __ ______| | _____ _____| | | | | |_) |
|
245
|
+
// | |/ _ \| '_ \______| | / _ \ \ / / _ \ | | | | _ <
|
246
|
+
// | | (_) | |_) | | |___| __/\ V / __/ | | | | |_) |
|
247
|
+
// |_|\___/| .__/ |______\___| \_/ \___|_| |_| |____/
|
248
|
+
// | |
|
249
|
+
// |_|
|
250
|
+
|
151
251
|
module origen;
|
152
252
|
|
153
253
|
reg finish = 0;
|
154
254
|
|
155
255
|
% dut.rtl_pins.each do |name, pin, options|
|
256
|
+
% if pin.type == :analog
|
257
|
+
`ifdef ORIGEN_WREAL
|
258
|
+
wreal <%= pin.id %>;
|
259
|
+
`else
|
156
260
|
wire <%= pin.id %>;
|
261
|
+
`endif
|
262
|
+
% else
|
263
|
+
wire <%= pin.id %>;
|
264
|
+
% end
|
157
265
|
% end
|
158
266
|
|
159
267
|
pin_drivers pins (
|
@@ -190,30 +298,24 @@ module origen;
|
|
190
298
|
|
191
299
|
debug debug ();
|
192
300
|
|
193
|
-
`ifdef ORIGEN_VCD
|
194
301
|
initial
|
195
302
|
begin
|
303
|
+
`ifdef ORIGEN_VCS
|
304
|
+
$origen_vcs_init;
|
305
|
+
`endif
|
306
|
+
`ifdef ORIGEN_VCD
|
196
307
|
$dumpvars(0,origen);
|
197
|
-
end
|
198
308
|
`endif
|
199
|
-
|
200
309
|
`ifdef ORIGEN_VPD
|
201
|
-
initial
|
202
|
-
begin
|
203
310
|
$vcdplusfile("origen.vpd");
|
204
311
|
$vcdpluson;
|
205
312
|
$vcdplusmemon;
|
206
|
-
end
|
207
313
|
`endif
|
208
|
-
|
209
314
|
`ifdef ORIGEN_FSDB
|
210
|
-
initial
|
211
|
-
begin
|
212
315
|
$fsdbDumpfile("origen.fsdb");
|
213
316
|
$fsdbDumpvars(0, "+all");
|
214
|
-
end
|
215
317
|
`endif
|
216
|
-
|
318
|
+
end
|
217
319
|
|
218
320
|
always @(posedge finish) begin
|
219
321
|
$finish(2);
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: origen_sim
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.20.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: 2019-
|
11
|
+
date: 2019-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: origen
|
@@ -16,42 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.44.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.44.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: origen_testers
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.21.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.21.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: origen_verilog
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.6.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.6.0
|
55
55
|
description:
|
56
56
|
email:
|
57
57
|
- stephen.f.mcginty@gmail.com
|
@@ -73,6 +73,7 @@ files:
|
|
73
73
|
- ext/defines.h.erb
|
74
74
|
- ext/origen.c
|
75
75
|
- ext/origen.h
|
76
|
+
- ext/origen_tasks.tab
|
76
77
|
- ext/vpi_user.h
|
77
78
|
- lib/origen_sim.rb
|
78
79
|
- lib/origen_sim/commands/build.rb
|
@@ -97,6 +98,7 @@ files:
|
|
97
98
|
- lib/origen_sim_dev/dut.rb
|
98
99
|
- lib/origen_sim_dev/ip.rb
|
99
100
|
- lib/tasks/origen_sim.rake
|
101
|
+
- pattern/concurrent_ip.rb
|
100
102
|
- pattern/ip1_test.rb
|
101
103
|
- pattern/ip2_test.rb
|
102
104
|
- pattern/test.rb
|
@@ -107,10 +109,12 @@ files:
|
|
107
109
|
- templates/empty.rc
|
108
110
|
- templates/empty.svcf
|
109
111
|
- templates/empty.tcl
|
112
|
+
- templates/origen_guides/simulation/ams.md.erb
|
110
113
|
- templates/origen_guides/simulation/app.md.erb
|
111
114
|
- templates/origen_guides/simulation/artifacts.md.erb
|
112
115
|
- templates/origen_guides/simulation/compiling.md.erb
|
113
116
|
- templates/origen_guides/simulation/debugging.md.erb
|
117
|
+
- templates/origen_guides/simulation/direct.md.erb
|
114
118
|
- templates/origen_guides/simulation/environment.md.erb
|
115
119
|
- templates/origen_guides/simulation/flows.md.erb
|
116
120
|
- templates/origen_guides/simulation/howitworks.md.erb
|
@@ -143,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
147
|
version: 1.8.11
|
144
148
|
requirements: []
|
145
149
|
rubyforge_project:
|
146
|
-
rubygems_version: 2.7.
|
150
|
+
rubygems_version: 2.7.7
|
147
151
|
signing_key:
|
148
152
|
specification_version: 4
|
149
153
|
summary: Plugin that provides a testbench environment to simulate Origen test patterns
|