aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/gather_data.rkt
blob: b2aa9c5880b83d17deb76120ae03bebaa3a4b513 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#lang racket

(require xml)
(require xml/path)
(require racket/match)

(require csv-reading)
(require csv-writing)

(require graphite)
(require data-frame)
(require sawzall)

(require threading)

(permissive-xexprs #t)

(define (parse-vivado-report f)
  (let* ([encode-xml-port (open-input-file f)]
         [report (xml->xexpr (document-element (read-xml encode-xml-port)))])
    (close-input-port encode-xml-port)
    report))

(define (list->hash l)
  (foldr (lambda (v l)
           (hash-set l (car v) (string->number (cadr v))))
         (hash) l))

(define (process-vivado-report report)
  (let ([maps (map (lambda (x) (match x [(list e (list (list a b) (list c d))) (list b d)]))
                   (filter-not string? (se-path*/list '(section) report)))])
    (list->hash maps)))

(define (parse-sim-report f)
  (let* ([exec-csv (open-input-file f)]
         [report (csv->list exec-csv)])
    (close-input-port exec-csv)
    report))

(define sim-report (list->hash (parse-sim-report "exec.csv")))
(define vivado-report (process-vivado-report (parse-vivado-report "encode_report.xml")))
(define cycles (hash-ref sim-report "covariance"))
(define delay (hash-ref vivado-report "XILINX_DESIGN_DELAY"))

(* cycles delay)

(define gss (df-read/csv "exec.csv"))

(df-add-series gss (make-series "tool" #:data (make-vector (df-row-count gss) "vericert")))

(df-add-series gss (make-series "delay" #:data (list->vector (map (lambda (x)
                     (~> "/encode_report.xml"
                         (string-append x _)
                         parse-vivado-report
                         process-vivado-report
                         (hash-ref "XILINX_DESIGN_DELAY")))
                   (filter-not (lambda (x) (equal? x "test-case")) (map car (hash->list sim-report)))))))

(show gss everything #:n-rows 'all)

(graph #:data gss
       #:title "Chart"
       #:mapping (aes #:x "test-case" #:y "cycle count")
       (col #:gap 0.25))

;(define csv (open-output-file "out.csv"))