Add optional signal filter predicate
This commit is contained in:
parent
7a88f6a05f
commit
f9f22f4f31
@ -123,8 +123,9 @@
|
||||
;;;
|
||||
;;; Parse VCD header
|
||||
;;; Returns values of timescale and association list (tag . (<signal> ...))
|
||||
;;; Predicate: (need-signal? <signal>)
|
||||
;;;
|
||||
(define (read-header port)
|
||||
(define* (read-header port need-signal?)
|
||||
(let next-cmd ((timescale #f)
|
||||
(scope '())
|
||||
(tags+signals '()))
|
||||
@ -149,18 +150,20 @@
|
||||
(else 'bits)))
|
||||
(width (string->number (third cmd)))
|
||||
(tag (fourth cmd))
|
||||
(vname (string-concatenate
|
||||
(name (string-concatenate
|
||||
(insert-between
|
||||
(cddddr cmd) " "))))
|
||||
(next-cmd timescale scope
|
||||
(let ((tag+sig (assoc tag tags+signals))
|
||||
(sig (signal-new (reverse scope)
|
||||
vname type width '())))
|
||||
(let ((sig (signal-new (reverse scope)
|
||||
name type width '())))
|
||||
(if (need-signal? sig)
|
||||
(let ((tag+sig (assoc tag tags+signals)))
|
||||
(if tag+sig
|
||||
(begin
|
||||
(set-cdr! tag+sig (cons sig (cdr tag+sig)))
|
||||
tags+signals)
|
||||
(cons (cons tag `(,sig)) tags+signals))))))
|
||||
(cons (cons tag `(,sig)) tags+signals)))
|
||||
tags+signals)))))
|
||||
|
||||
((string-ci= "$upscope" (first cmd))
|
||||
(next-cmd timescale (cdr scope) tags+signals))
|
||||
@ -299,9 +302,9 @@
|
||||
;;; Parse whole VCD
|
||||
;;; Returns list of time stamps and list of lists (<signal> valuse ...)
|
||||
;;;
|
||||
(define (vcd-parse port)
|
||||
(define* (vcd-parse port #:optional (need-signal? (lambda (s) #t)))
|
||||
(call-with-values
|
||||
(lambda () (read-header port))
|
||||
(lambda () (read-header port need-signal?))
|
||||
(cut read-data port <...>)))
|
||||
|
||||
;;;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user