vertigo_vhdl 0.8.3 → 0.8.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a89b29c8454b54463030839f3d4c48511ecc8adf3ff869a22d3a0c40e0255c05
4
- data.tar.gz: 974bdee997f8835d36bbcc8c63014ea238845ccb02b08d52f5d9bff9313481e1
3
+ metadata.gz: 74a318b6ff2aabefad1d87cde65a2bd2da79876f987feaf92eaffdd95c0e9429
4
+ data.tar.gz: 4a579a3012f0a2bcf6915f7ea33615f90f5b590219357ba1b44612ebe0fc593d
5
5
  SHA512:
6
- metadata.gz: ce1e5a6f2b6eec285b82f00285897d3f24ce5ac602b2fc38fc2b632f5200521c4f983359ea2e30918363669479f68bd5018573fe20d685b3161b71a329dc3f8c
7
- data.tar.gz: f71199e632d26cdecf13e6d0db8ed28f4cba9413ecb1c21bfffdd28ccb0bf30abf77c465f81c81959ef59a7ce869d2cd3255e758cc7f22c71336143e838a5da0
6
+ metadata.gz: a2cffee789933d35064fc383eb604e0167201d919d0681aff5becf2835e0b9c42d6e94dbf288072dd2404761b558aafad80703fd968d242ec878b34543a8b016
7
+ data.tar.gz: 0dbe98eaf0f744585d05ba699ff9097d3ef63753c366a3124d598e371cc34dd0813935e0369f4d6e55a518ca97d335aa7f0d15074e4876b4bc90df891e88828c
@@ -84,4 +84,11 @@ module Vertigo
84
84
  end
85
85
  end
86
86
 
87
+ class Architecture < AstNode
88
+ def << e
89
+ @body << e
90
+ end
91
+ end
92
+
93
+
87
94
  end
@@ -2,9 +2,9 @@
2
2
  # This code was generated by rkgen utility.
3
3
  # DO NOT MODIFY !
4
4
  # ============================================================
5
-
5
+
6
6
  module Vertigo
7
-
7
+
8
8
  class AstNode
9
9
  def accept(visitor, arg=nil)
10
10
  name = self.class.name.split(/::/).last
@@ -16,588 +16,588 @@ module Vertigo
16
16
  self.accept(ppr)
17
17
  end
18
18
  end
19
-
19
+
20
20
  class Root < AstNode
21
21
  attr_accessor :design_units
22
22
  def initialize design_units=[]
23
23
  @design_units=design_units
24
24
  end
25
25
  end
26
-
26
+
27
27
  class Comment < AstNode
28
28
  attr_accessor :str
29
29
  def initialize str=nil
30
30
  @str=str
31
31
  end
32
32
  end
33
-
33
+
34
34
  class Library < AstNode
35
35
  attr_accessor :name
36
36
  def initialize name=nil
37
37
  @name=name
38
38
  end
39
39
  end
40
-
40
+
41
41
  class Use < AstNode
42
42
  attr_accessor :library,:package,:element
43
43
  def initialize library=nil,package=nil,element=nil
44
44
  @library,@package,@element=library,package,element
45
45
  end
46
46
  end
47
-
47
+
48
48
  class Entity < AstNode
49
49
  attr_accessor :name,:generics,:ports
50
50
  def initialize name=nil,generics=[],ports=[]
51
51
  @name,@generics,@ports=name,generics,ports
52
52
  end
53
53
  end
54
-
54
+
55
55
  class Generic < AstNode
56
56
  attr_accessor :name,:type,:init
57
57
  def initialize name=nil,type=nil,init=nil
58
58
  @name,@type,@init=name,type,init
59
59
  end
60
60
  end
61
-
61
+
62
62
  class Input < AstNode
63
63
  attr_accessor :name,:type,:init
64
64
  def initialize name=nil,type=nil,init=nil
65
65
  @name,@type,@init=name,type,init
66
66
  end
67
67
  end
68
-
68
+
69
69
  class Output < AstNode
70
70
  attr_accessor :name,:type,:init
71
71
  def initialize name=nil,type=nil,init=nil
72
72
  @name,@type,@init=name,type,init
73
73
  end
74
74
  end
75
-
75
+
76
76
  class InOut < AstNode
77
77
  attr_accessor :name,:type,:init
78
78
  def initialize name=nil,type=nil,init=nil
79
79
  @name,@type,@init=name,type,init
80
80
  end
81
81
  end
82
-
82
+
83
83
  class Package < AstNode
84
84
  attr_accessor :name,:decls
85
85
  def initialize name=nil,decls=[]
86
86
  @name,@decls=name,decls
87
87
  end
88
88
  end
89
-
89
+
90
90
  class PackageBody < AstNode
91
91
  attr_accessor :name,:decls
92
92
  def initialize name=nil,decls=[]
93
93
  @name,@decls=name,decls
94
94
  end
95
95
  end
96
-
96
+
97
97
  class ProcedureDecl < AstNode
98
98
  attr_accessor :name,:formal_args,:decls,:body
99
99
  def initialize name=nil,formal_args=[],decls=[],body=nil
100
100
  @name,@formal_args,@decls,@body=name,formal_args,decls,body
101
101
  end
102
102
  end
103
-
103
+
104
104
  class FormalArg < AstNode
105
105
  attr_accessor :signal,:direction,:name,:type
106
106
  def initialize signal=nil,direction=nil,name=nil,type=nil
107
107
  @signal,@direction,@name,@type=signal,direction,name,type
108
108
  end
109
109
  end
110
-
110
+
111
111
  class ProcedureCall < AstNode
112
112
  attr_accessor :name,:actual_args
113
113
  def initialize name=nil,actual_args=[]
114
114
  @name,@actual_args=name,actual_args
115
115
  end
116
116
  end
117
-
117
+
118
118
  class Architecture < AstNode
119
119
  attr_accessor :name,:entity_name,:decls,:body
120
120
  def initialize name=nil,entity_name=nil,decls=[],body=nil
121
121
  @name,@entity_name,@decls,@body=name,entity_name,decls,body
122
122
  end
123
123
  end
124
-
124
+
125
125
  class Body < AstNode
126
126
  attr_accessor :elements
127
127
  def initialize elements=[]
128
128
  @elements=elements
129
129
  end
130
130
  end
131
-
131
+
132
132
  class Process < AstNode
133
133
  attr_accessor :sensitivity,:decls,:body
134
134
  def initialize sensitivity=nil,decls=[],body=nil
135
135
  @sensitivity,@decls,@body=sensitivity,decls,body
136
136
  end
137
137
  end
138
-
138
+
139
139
  class Sensitivity < AstNode
140
140
  attr_accessor :elements
141
141
  def initialize elements=[]
142
142
  @elements=elements
143
143
  end
144
144
  end
145
-
145
+
146
146
  class EntityInstance < AstNode
147
147
  attr_accessor :full_name,:arch_name,:generic_map,:port_map
148
148
  def initialize full_name=nil,arch_name=nil,generic_map=nil,port_map=nil
149
149
  @full_name,@arch_name,@generic_map,@port_map=full_name,arch_name,generic_map,port_map
150
150
  end
151
151
  end
152
-
152
+
153
153
  class ComponentDecl < AstNode
154
154
  attr_accessor :name,:generics,:ports
155
155
  def initialize name=nil,generics=[],ports=[]
156
156
  @name,@generics,@ports=name,generics,ports
157
157
  end
158
158
  end
159
-
159
+
160
160
  class ComponentInstance < AstNode
161
161
  attr_accessor :name,:generic_map,:port_map
162
162
  def initialize name=nil,generic_map=nil,port_map=nil
163
163
  @name,@generic_map,@port_map=name,generic_map,port_map
164
164
  end
165
165
  end
166
-
166
+
167
167
  class PortMap < AstNode
168
168
  attr_accessor :elements
169
169
  def initialize elements=[]
170
170
  @elements=elements
171
171
  end
172
172
  end
173
-
173
+
174
174
  class GenericMap < AstNode
175
175
  attr_accessor :elements
176
176
  def initialize elements=[]
177
177
  @elements=elements
178
178
  end
179
179
  end
180
-
180
+
181
181
  class Map < AstNode
182
182
  attr_accessor :lhs,:rhs
183
183
  def initialize lhs=nil,rhs=nil
184
184
  @lhs,@rhs=lhs,rhs
185
185
  end
186
186
  end
187
-
187
+
188
188
  class AttributeDecl < AstNode
189
189
  attr_accessor :name,:type
190
190
  def initialize name=nil,type=nil
191
191
  @name,@type=name,type
192
192
  end
193
193
  end
194
-
194
+
195
195
  class AttributeSpec < AstNode
196
196
  attr_accessor :name,:entity_spec,:expr
197
197
  def initialize name=nil,entity_spec=nil,expr=nil
198
198
  @name,@entity_spec,@expr=name,entity_spec,expr
199
199
  end
200
200
  end
201
-
201
+
202
202
  class EntitySpec < AstNode
203
203
  attr_accessor :elements,:entity_class
204
204
  def initialize elements=[],entity_class=nil
205
205
  @elements,@entity_class=elements,entity_class
206
206
  end
207
207
  end
208
-
208
+
209
209
  class SigAssign < AstNode
210
210
  attr_accessor :lhs,:rhs
211
211
  def initialize lhs=nil,rhs=nil
212
212
  @lhs,@rhs=lhs,rhs
213
213
  end
214
214
  end
215
-
215
+
216
216
  class VarAssign < AstNode
217
217
  attr_accessor :lhs,:rhs
218
218
  def initialize lhs=nil,rhs=nil
219
219
  @lhs,@rhs=lhs,rhs
220
220
  end
221
221
  end
222
-
222
+
223
223
  class Wait < AstNode
224
224
  attr_accessor :until_,:for_
225
225
  def initialize until_=nil,for_=nil
226
226
  @until_,@for_=until_,for_
227
227
  end
228
228
  end
229
-
229
+
230
230
  class If < AstNode
231
231
  attr_accessor :cond,:body,:elsifs,:else_
232
232
  def initialize cond=nil,body=nil,elsifs=[],else_=nil
233
233
  @cond,@body,@elsifs,@else_=cond,body,elsifs,else_
234
234
  end
235
235
  end
236
-
236
+
237
237
  class Elsif < AstNode
238
238
  attr_accessor :cond,:body
239
239
  def initialize cond=nil,body=nil
240
240
  @cond,@body=cond,body
241
241
  end
242
242
  end
243
-
243
+
244
244
  class Else < AstNode
245
245
  attr_accessor :body
246
246
  def initialize body=nil
247
247
  @body=body
248
248
  end
249
249
  end
250
-
250
+
251
251
  class Case < AstNode
252
252
  attr_accessor :expr,:whens
253
253
  def initialize expr=nil,whens=[]
254
254
  @expr,@whens=expr,whens
255
255
  end
256
256
  end
257
-
257
+
258
258
  class CaseWhen < AstNode
259
259
  attr_accessor :expr,:body
260
260
  def initialize expr=nil,body=nil
261
261
  @expr,@body=expr,body
262
262
  end
263
263
  end
264
-
264
+
265
265
  class Alternative < AstNode
266
266
  attr_accessor :elements
267
267
  def initialize elements=[]
268
268
  @elements=elements
269
269
  end
270
270
  end
271
-
271
+
272
272
  class NullStmt < AstNode
273
273
  attr_accessor :dummy
274
274
  def initialize dummy=nil
275
275
  @dummy=dummy
276
276
  end
277
277
  end
278
-
278
+
279
279
  class Assert < AstNode
280
280
  attr_accessor :cond,:report,:severity
281
281
  def initialize cond=nil,report=nil,severity=nil
282
282
  @cond,@report,@severity=cond,report,severity
283
283
  end
284
284
  end
285
-
285
+
286
286
  class Report < AstNode
287
287
  attr_accessor :expr,:severity
288
288
  def initialize expr=nil,severity=nil
289
289
  @expr,@severity=expr,severity
290
290
  end
291
291
  end
292
-
292
+
293
293
  class Severity < AstNode
294
294
  attr_accessor :type
295
295
  def initialize type=nil
296
296
  @type=type
297
297
  end
298
298
  end
299
-
299
+
300
300
  class Return < AstNode
301
301
  attr_accessor :expr
302
302
  def initialize expr=nil
303
303
  @expr=expr
304
304
  end
305
305
  end
306
-
306
+
307
307
  class WithSelect < AstNode
308
308
  attr_accessor :with_expr,:assigned,:selected_whens
309
309
  def initialize with_expr=nil,assigned=nil,selected_whens=[]
310
310
  @with_expr,@assigned,@selected_whens=with_expr,assigned,selected_whens
311
311
  end
312
312
  end
313
-
313
+
314
314
  class SelectedWhen < AstNode
315
315
  attr_accessor :lhs,:rhs
316
316
  def initialize lhs=nil,rhs=nil
317
317
  @lhs,@rhs=lhs,rhs
318
318
  end
319
319
  end
320
-
320
+
321
321
  class IfGenerate < AstNode
322
322
  attr_accessor :cond,:body
323
323
  def initialize cond=nil,body=nil
324
324
  @cond,@body=cond,body
325
325
  end
326
326
  end
327
-
327
+
328
328
  class ForGenerate < AstNode
329
329
  attr_accessor :index,:range,:decls,:body
330
330
  def initialize index=nil,range=nil,decls=[],body=nil
331
331
  @index,@range,@decls,@body=index,range,decls,body
332
332
  end
333
333
  end
334
-
334
+
335
335
  class IsolatedRange < AstNode
336
336
  attr_accessor :lhs,:rhs
337
337
  def initialize lhs=nil,rhs=nil
338
338
  @lhs,@rhs=lhs,rhs
339
339
  end
340
340
  end
341
-
341
+
342
342
  class TypeDecl < AstNode
343
343
  attr_accessor :name,:spec
344
344
  def initialize name=nil,spec=nil
345
345
  @name,@spec=name,spec
346
346
  end
347
347
  end
348
-
348
+
349
349
  class SubTypeDecl < AstNode
350
350
  attr_accessor :name,:spec
351
351
  def initialize name=nil,spec=nil
352
352
  @name,@spec=name,spec
353
353
  end
354
354
  end
355
-
355
+
356
356
  class EnumDecl < AstNode
357
357
  attr_accessor :elements
358
358
  def initialize elements=[]
359
359
  @elements=elements
360
360
  end
361
361
  end
362
-
362
+
363
363
  class RecordDecl < AstNode
364
364
  attr_accessor :elements
365
365
  def initialize elements=[]
366
366
  @elements=elements
367
367
  end
368
368
  end
369
-
369
+
370
370
  class RecordItem < AstNode
371
371
  attr_accessor :name,:type
372
372
  def initialize name=nil,type=nil
373
373
  @name,@type=name,type
374
374
  end
375
375
  end
376
-
376
+
377
377
  class ArrayDecl < AstNode
378
378
  attr_accessor :dim_decls,:type
379
379
  def initialize dim_decls=[],type=nil
380
380
  @dim_decls,@type=dim_decls,type
381
381
  end
382
382
  end
383
-
383
+
384
384
  class ArrayDimDecl < AstNode
385
385
  attr_accessor :type_mark,:range
386
386
  def initialize type_mark=nil,range=nil
387
387
  @type_mark,@range=type_mark,range
388
388
  end
389
389
  end
390
-
390
+
391
391
  class Constant < AstNode
392
392
  attr_accessor :name,:type,:expr
393
393
  def initialize name=nil,type=nil,expr=nil
394
394
  @name,@type,@expr=name,type,expr
395
395
  end
396
396
  end
397
-
397
+
398
398
  class Signal < AstNode
399
399
  attr_accessor :name,:type,:init
400
400
  def initialize name=nil,type=nil,init=nil
401
401
  @name,@type,@init=name,type,init
402
402
  end
403
403
  end
404
-
404
+
405
405
  class Variable < AstNode
406
406
  attr_accessor :name,:type,:init
407
407
  def initialize name=nil,type=nil,init=nil
408
408
  @name,@type,@init=name,type,init
409
409
  end
410
410
  end
411
-
411
+
412
412
  class Alias < AstNode
413
413
  attr_accessor :designator,:type,:name,:signature
414
414
  def initialize designator=nil,type=nil,name=nil,signature=nil
415
415
  @designator,@type,@name,@signature=designator,type,name,signature
416
416
  end
417
417
  end
418
-
418
+
419
419
  class StdType < AstNode
420
420
  attr_accessor :ident
421
421
  def initialize ident=nil
422
422
  @ident=ident
423
423
  end
424
424
  end
425
-
425
+
426
426
  class RangedType < AstNode
427
427
  attr_accessor :type,:range
428
428
  def initialize type=nil,range=nil
429
429
  @type,@range=type,range
430
430
  end
431
431
  end
432
-
432
+
433
433
  class NamedType < AstNode
434
434
  attr_accessor :ident
435
435
  def initialize ident=nil
436
436
  @ident=ident
437
437
  end
438
438
  end
439
-
439
+
440
440
  class ArrayType < AstNode
441
441
  attr_accessor :name,:discrete_ranges
442
442
  def initialize name=nil,discrete_ranges=[]
443
443
  @name,@discrete_ranges=name,discrete_ranges
444
444
  end
445
445
  end
446
-
446
+
447
447
  class DiscreteRange < AstNode
448
448
  attr_accessor :lhs,:dir,:rhs
449
449
  def initialize lhs=nil,dir=nil,rhs=nil
450
450
  @lhs,@dir,@rhs=lhs,dir,rhs
451
451
  end
452
452
  end
453
-
453
+
454
454
  class Parenth < AstNode
455
455
  attr_accessor :expr
456
456
  def initialize expr=nil
457
457
  @expr=expr
458
458
  end
459
459
  end
460
-
460
+
461
461
  class Waveform < AstNode
462
462
  attr_accessor :elements
463
463
  def initialize elements=[]
464
464
  @elements=elements
465
465
  end
466
466
  end
467
-
467
+
468
468
  class CondExpr < AstNode
469
469
  attr_accessor :whens,:else_
470
470
  def initialize whens=[],else_=nil
471
471
  @whens,@else_=whens,else_
472
472
  end
473
473
  end
474
-
474
+
475
475
  class When < AstNode
476
476
  attr_accessor :expr,:cond
477
477
  def initialize expr=nil,cond=nil
478
478
  @expr,@cond=expr,cond
479
479
  end
480
480
  end
481
-
481
+
482
482
  class Binary < AstNode
483
483
  attr_accessor :lhs,:op,:rhs
484
484
  def initialize lhs=nil,op=nil,rhs=nil
485
485
  @lhs,@op,@rhs=lhs,op,rhs
486
486
  end
487
487
  end
488
-
488
+
489
489
  class After < AstNode
490
490
  attr_accessor :lhs,:rhs
491
491
  def initialize lhs=nil,rhs=nil
492
492
  @lhs,@rhs=lhs,rhs
493
493
  end
494
494
  end
495
-
495
+
496
496
  class Timed < AstNode
497
497
  attr_accessor :lhs,:rhs
498
498
  def initialize lhs=nil,rhs=nil
499
499
  @lhs,@rhs=lhs,rhs
500
500
  end
501
501
  end
502
-
502
+
503
503
  class Attributed < AstNode
504
504
  attr_accessor :lhs,:rhs
505
505
  def initialize lhs=nil,rhs=nil
506
506
  @lhs,@rhs=lhs,rhs
507
507
  end
508
508
  end
509
-
509
+
510
510
  class Concat < AstNode
511
511
  attr_accessor :lhs,:rhs
512
512
  def initialize lhs=nil,rhs=nil
513
513
  @lhs,@rhs=lhs,rhs
514
514
  end
515
515
  end
516
-
516
+
517
517
  class Qualified < AstNode
518
518
  attr_accessor :lhs,:rhs
519
519
  def initialize lhs=nil,rhs=nil
520
520
  @lhs,@rhs=lhs,rhs
521
521
  end
522
522
  end
523
-
523
+
524
524
  class Sliced < AstNode
525
525
  attr_accessor :expr,:lhs,:dir,:rhs
526
526
  def initialize expr=nil,lhs=nil,dir=nil,rhs=nil
527
527
  @expr,@lhs,@dir,@rhs=expr,lhs,dir,rhs
528
528
  end
529
529
  end
530
-
530
+
531
531
  class Ident < AstNode
532
532
  attr_accessor :tok
533
533
  def initialize tok=nil
534
534
  @tok=tok
535
535
  end
536
536
  end
537
-
537
+
538
538
  class IntLit < AstNode
539
539
  attr_accessor :tok
540
540
  def initialize tok=nil
541
541
  @tok=tok
542
542
  end
543
543
  end
544
-
544
+
545
545
  class CharLit < AstNode
546
546
  attr_accessor :tok
547
547
  def initialize tok=nil
548
548
  @tok=tok
549
549
  end
550
550
  end
551
-
551
+
552
552
  class BoolLit < AstNode
553
553
  attr_accessor :tok
554
554
  def initialize tok=nil
555
555
  @tok=tok
556
556
  end
557
557
  end
558
-
558
+
559
559
  class SelectedName < AstNode
560
560
  attr_accessor :lhs,:rhs
561
561
  def initialize lhs=nil,rhs=nil
562
562
  @lhs,@rhs=lhs,rhs
563
563
  end
564
564
  end
565
-
565
+
566
566
  class FuncProtoDecl < AstNode
567
567
  attr_accessor :name,:formal_args,:return_type
568
568
  def initialize name=nil,formal_args=[],return_type=nil
569
569
  @name,@formal_args,@return_type=name,formal_args,return_type
570
570
  end
571
571
  end
572
-
572
+
573
573
  class FuncDecl < AstNode
574
574
  attr_accessor :name,:formal_args,:return_type,:decls,:body
575
575
  def initialize name=nil,formal_args=[],return_type=nil,decls=nil,body=nil
576
576
  @name,@formal_args,@return_type,@decls,@body=name,formal_args,return_type,decls,body
577
577
  end
578
578
  end
579
-
579
+
580
580
  class FuncCall < AstNode
581
581
  attr_accessor :name,:actual_args
582
582
  def initialize name=nil,actual_args=[]
583
583
  @name,@actual_args=name,actual_args
584
584
  end
585
585
  end
586
-
586
+
587
587
  class Aggregate < AstNode
588
588
  attr_accessor :elements
589
589
  def initialize elements=[]
590
590
  @elements=elements
591
591
  end
592
592
  end
593
-
593
+
594
594
  class Label < AstNode
595
595
  attr_accessor :ident
596
596
  def initialize ident=nil
597
597
  @ident=ident
598
598
  end
599
599
  end
600
-
600
+
601
601
  class Assoc < AstNode
602
602
  attr_accessor :lhs,:rhs
603
603
  def initialize lhs=nil,rhs=nil
@@ -197,11 +197,16 @@ module Vertigo
197
197
  }
198
198
  end
199
199
 
200
+ # do accept :: signal a_outputs : A_lib.A_pkg.outputs_t;
200
201
  def parse_type
201
202
  case showNext.kind
202
203
  when :ident
203
204
  type=NamedType.new
204
205
  type.ident=Ident.new(acceptIt)
206
+ while selected_name=selected_name?
207
+ selected_name.lhs=type.ident
208
+ type.ident=selected_name
209
+ end
205
210
  else
206
211
  type=StdType.new
207
212
  type.ident=Ident.new(acceptIt) # natural,...
@@ -723,7 +728,12 @@ module Vertigo
723
728
  def parse_entity_instanciation
724
729
  ret=EntityInstance.new
725
730
  expect :entity
726
- ret.full_name=parse_term # ENSURE :selected_name
731
+ ret.full_name=parse_term # now ENSURE :selected_name
732
+ case fc=ret.full_name
733
+ when FuncCall
734
+ ret.full_name=fc.name
735
+ ret.arch_name=fc.actual_args.first
736
+ end
727
737
  if showNext.is_a?(:lparen)
728
738
  acceptIt
729
739
  ret.arch_name=Ident.new(expect :ident)
@@ -427,6 +427,7 @@ module Vertigo
427
427
  label=inst.label.accept(self) if inst.label
428
428
  full_name=inst.full_name.accept(self)
429
429
  arch_name=inst.arch_name.accept(self) if inst.arch_name
430
+ arch_name="(#{arch_name})" if inst.arch_name
430
431
  gen_map =inst.generic_map.accept(self) if inst.generic_map
431
432
  port_map =inst.port_map.accept(self) if inst.port_map
432
433
  code << "#{label}entity #{full_name}#{arch_name}"
@@ -1,5 +1,3 @@
1
- require 'erb'
2
-
3
1
  module Vertigo
4
2
 
5
3
  class TestBenchGenerator
@@ -13,16 +11,131 @@ module Vertigo
13
11
 
14
12
  def generate_from ast
15
13
  @ast=ast
16
- entity_arch=find_entity_arch
17
- detecting_clk_and_reset entity_arch
18
- @tb_name=entity_arch.first.name.str+'_tb'
19
- erb=ERB.new(IO.read "#{__dir__}/template.tb.vhd")
20
- vhdl_tb=erb.result(binding)
14
+ entity_arch=find_entity_arch()
15
+ detecting_clk_and_reset(entity_arch)
16
+ vhdl_tb=gen_code()
17
+ @tb_name=@entity_name+"_tb"
21
18
  tb_filename=@tb_name+".vhd"
22
- File.open(tb_filename,'w'){|f| f.puts vhdl_tb}
19
+ File.open(tb_filename,'w'){|f| f.puts vhdl_tb.finalize}
23
20
  puts "=> generated testbench : #{tb_filename}"
24
21
  end
25
22
 
23
+ def line n=80
24
+ "-"*n
25
+ end
26
+
27
+ def comment str
28
+ "-- #{str}"
29
+ end
30
+
31
+ def gen_code
32
+ code=Code.new
33
+ code << gen_header
34
+ code << "library ieee;"
35
+ code << "use ieee.std_logic_1164.all;"
36
+ code << "use ieee.numeric_std.all;"
37
+ code.newline
38
+ code << "entity #{@entity_name}_tb is"
39
+ code << "end entity;"
40
+ code.newline
41
+ code << "architecture bhv of #{@entity_name}_tb is"
42
+ code.indent=2
43
+ code << "constant HALF_PERIOD : time :=5 ns;"
44
+ code.newline
45
+ code << "signal #{@clk_name} : std_logic := '0';"
46
+ code << "signal #{@reset_name} : std_logic := '0';"
47
+ code.newline
48
+ code << "signal running : boolean := true;"
49
+ code.newline
50
+ code << "procedure wait_cycles(n : natural) is "
51
+ code << "begin"
52
+ code.indent=4
53
+ code << "for i in 0 to n loop"
54
+ code.indent=6
55
+ code << "wait until rising_edge(#{@clk_name});"
56
+ code.indent=4
57
+ code << "end loop;"
58
+ code.indent=2
59
+ code << "end procedure;"
60
+ @entity.ports.each do |port|
61
+ port_name=port.name.str.ljust(@max_length_str)
62
+ port_type=port.type.str
63
+ code << "signal #{port_name} : #{port_type};" unless @excluded.include?(port)
64
+ end
65
+ code.indent=0
66
+ code << "begin"
67
+ code.indent=2
68
+ code << gen_clock_and_reset
69
+ code << instanciate_dut
70
+ code << gen_stim_process
71
+ code.indent=0
72
+ code << "end bhv;"
73
+ code
74
+ end
75
+
76
+ def gen_header
77
+ code=Code.new
78
+ code << line
79
+ code << "-- this file was generated automatically by Vertigo Ruby utility"
80
+ code << "-- date : (d/m/y h:m) #{Time.now.strftime("%d/%m/%Y %k:%M")}"
81
+ code << "-- author : Jean-Christophe Le Lann - 2014"
82
+ code << line
83
+ code.newline
84
+ code
85
+ end
86
+
87
+ def gen_clock_and_reset
88
+ code=Code.new
89
+ code << line
90
+ code << comment("clock and reset")
91
+ code << line
92
+ code << "#{@reset_name} <= '0','1' after 666 ns;"
93
+ code.newline
94
+ code << "#{@clk_name} <= not(#{@clk_name}) after HALF_PERIOD when running else #{@clk_name};"
95
+ code
96
+ end
97
+
98
+ def instanciate_dut
99
+ code=Code.new
100
+ code << line
101
+ code << comment("Design Under Test")
102
+ code << line
103
+ code << "dut : entity work.#{@entity_name}(#{@arch_name})"
104
+ code.indent=2
105
+ code << "port map ("
106
+ code.indent=4
107
+
108
+ @entity.ports.each do |port|
109
+ port_name=port.name.str.ljust(@max_length_str)
110
+ port_type=port.type.str
111
+ code << "#{port_name} => #{port_name},"
112
+ end
113
+ code.indent=2
114
+ code << ");"
115
+ code.indent=0
116
+ code
117
+ end
118
+
119
+ def gen_stim_process
120
+ code=Code.new
121
+ code << line
122
+ code << comment("sequential stimuli")
123
+ code << line
124
+ code << "stim : process"
125
+ code << "begin"
126
+ code.indent=2
127
+ code << "report \"running testbench for #{@entity_name}(#{@arch_name})\";"
128
+ code << "report \"waiting for asynchronous reset\";"
129
+ code << "wait until #{@reset_name}='1';"
130
+ code << "wait_cycles(100);"
131
+ code << "report \"end of simulation\";"
132
+ code << "running <= false;"
133
+ code << "wait;"
134
+ code.indent=0
135
+ code << "end process;"
136
+ code
137
+ end
138
+
26
139
  private
27
140
  def find_entity_arch
28
141
  @entity=ast.design_units.find{|du| du.is_a? Entity}
@@ -38,6 +151,8 @@ module Vertigo
38
151
  end
39
152
 
40
153
  puts "=> found architecture '#{arch.name.str}'"
154
+ @entity_name=@entity.name.str
155
+ @arch_name=@arch.name.str
41
156
  [@entity,@arch]
42
157
  end
43
158
 
@@ -46,11 +161,13 @@ module Vertigo
46
161
  entity,arch=entity_arch
47
162
  inputs=entity.ports.select{|port| port.is_a?(Input)}
48
163
  @clk = inputs.sort_by{|input| levenshtein_distance(input.name.str,"clk")}.first
49
- @rst = inputs.sort_by{|input| levenshtein_distance(input.name.str,"reset")}.first
164
+ @rst = inputs.sort_by{|input| levenshtein_distance(input.name.str,"reset_n")}.first
50
165
  puts "\t-most probable clk : #{@clk.name.str}"
51
166
  puts "\t-most probable reset : #{@rst.name.str}"
52
167
  @max_length_str=entity.ports.map{|port| port.name.str.size}.max
53
168
  @excluded=[@clk,@rst]
169
+ @reset_name=@rst.name.str
170
+ @clk_name=@clk.name.str
54
171
  end
55
172
 
56
173
  def levenshtein_distance(s, t)
@@ -1,3 +1,3 @@
1
1
  module Vertigo
2
- VERSION="0.8.3"
2
+ VERSION="0.8.4"
3
3
  end
@@ -0,0 +1,34 @@
1
+ -- generated automatically by NewageHLS
2
+ library ieee;
3
+ use ieee.std_logic_1164.all;
4
+ use ieee.numeric_std.all;
5
+
6
+ library newage_lib;
7
+ use newage_lib.type_package.all;
8
+
9
+
10
+ entity PingPong_sys is
11
+ port(
12
+ reset_n : in std_logic;
13
+ clk : in std_logic;
14
+ sreset : in std_logic;
15
+ go : in std_logic;
16
+ done : out std_logic;
17
+ inputs : in inputs_t;
18
+ outputs : out outputs_t;
19
+ reqs : out reqs_t;
20
+ acks : in acks_t);
21
+ end entity PingPong_sys;
22
+
23
+ architecture RTL of PingPong_sys is
24
+ begin
25
+
26
+ inst_0 : entity Player1_lib.ping(RTL)
27
+ port map(
28
+ );
29
+
30
+ inst_1 : entity Player2_lib.pong(RTL)
31
+ port map(
32
+ );
33
+
34
+ end RTL;
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vertigo_vhdl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.3
4
+ version: 0.8.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean-Christophe Le Lann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-04 00:00:00.000000000 Z
11
+ date: 2020-05-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A Ruby handwritten VHDL parser and utilities
14
14
  email: jean-christophe.le_lann@ensta-bretagne.fr
@@ -31,7 +31,6 @@ files:
31
31
  - lib/vertigo/pretty_printer.rb
32
32
  - lib/vertigo/runner.rb
33
33
  - lib/vertigo/tb_generator.rb
34
- - lib/vertigo/template.tb.vhd
35
34
  - lib/vertigo/token.rb
36
35
  - lib/vertigo/version.rb
37
36
  - lib/vertigo/vertigo.rkg
@@ -40,6 +39,7 @@ files:
40
39
  - tests/ghdl_tests/fsm_synth.vhd
41
40
  - tests/ghdl_tests/test_fsm.vhd
42
41
  - tests/parser_tests/else.vhd
42
+ - tests/parser_tests/pingpong.vhd
43
43
  - tests/parser_tests/test_MUST_fail.vhd
44
44
  - tests/parser_tests/test_accelerator.vhd
45
45
  - tests/parser_tests/test_accelerator_pp.vhd
@@ -1,72 +0,0 @@
1
- -----------------------------------------------------------------
2
- -- This file was generated automatically by Vertigo Ruby utility
3
- -- date : <%=Time.now.strftime("(d/m/y) %d/%m/%Y %H:%M")%>
4
- -- Author : Jean-Christophe Le Lann - 2014
5
- -----------------------------------------------------------------
6
- library ieee;
7
- use ieee.std_logic_1164.all;
8
- use ieee.numeric_std.all;
9
- <%@supplemental_libs_h.each do |lib,packages|%>
10
- library <%=lib%>;
11
- <%packages.each do |package|%>
12
- use <%=lib%>.<%=package%>.all;
13
- <%end%>
14
- <%end%>
15
-
16
- entity <%=@tb_name%> is
17
- end entity;
18
-
19
- architecture bhv of <%=@tb_name%> is
20
-
21
- constant HALF_PERIOD : time := 5 ns;
22
-
23
- signal <%=clk.name.str%> : std_logic := '0';
24
- signal <%=rst.name.str%> : std_logic := '0';
25
-
26
- signal running : boolean := true;
27
-
28
- procedure wait_cycles(n : natural) is
29
- begin
30
- for i in 1 to n loop
31
- wait until rising_edge(clk);
32
- end loop;
33
- end procedure;
34
-
35
- <%=@entity.ports.collect do |port|
36
- " signal #{port.name.str.ljust(@max_length_str)} : #{port.type.str}" if not @excluded.include?(port)
37
- end.compact.join(";\n")%>;
38
-
39
- begin
40
- -------------------------------------------------------------------
41
- -- clock and reset
42
- -------------------------------------------------------------------
43
- reset_n <= '0','1' after 666 ns;
44
-
45
- clk <= not(clk) after HALF_PERIOD when running else clk;
46
-
47
- --------------------------------------------------------------------
48
- -- Design Under Test
49
- --------------------------------------------------------------------
50
- dut : entity work.<%=@entity.name.str%>(<%=@arch.name.str%>)
51
- <%=@generics%>
52
- port map ( <%map=@entity.ports.collect do |port| "\t #{port.name.str} => #{port.name.str}" end%>
53
- <%=map.join(",\n")%>
54
- );
55
-
56
- --------------------------------------------------------------------
57
- -- sequential stimuli
58
- --------------------------------------------------------------------
59
- stim : process
60
- begin
61
- report "running testbench for <%=@entity.name.str%>(<%=@arch.name.str%>)";
62
- report "waiting for asynchronous reset";
63
- wait until reset_n='1';
64
- wait_cycles(100);
65
- report "applying stimuli...";
66
- wait_cycles(100);
67
- report "end of simulation";
68
- running <=false;
69
- wait;
70
- end process;
71
-
72
- end bhv;