File: cell_fuzzers.py

package info (click to toggle)
prjtrellis 1.4-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 83,000 kB
  • sloc: cpp: 20,813; python: 16,246; sh: 375; makefile: 262; asm: 80; ansic: 58
file content (43 lines) | stat: -rw-r--r-- 1,625 bytes parent folder | download
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
"""
Utilities for fuzzing cell timing
"""
from fuzzconfig import FuzzConfig
import fuzzloops
import cell_timings
import timing_dbs
from os import path


def timing_configs(job, design, density="45"):
    # speedgrade, fuzzconfig
    return [
        ("6", FuzzConfig(job + "_6", "ECP5", "LFE5U-{}F".format(density), [], design, "-s 6")),
        ("7", FuzzConfig(job + "_7", "ECP5", "LFE5U-{}F".format(density), [], design, "-s 7")),
        ("8", FuzzConfig(job + "_8", "ECP5", "LFE5U-{}F".format(density), [], design, "-s 8")),
        ("8_5G", FuzzConfig(job + "_8_5G", "ECP5", "LFE5UM5G-{}F".format(density), [], design, "-s 8"))
    ]


def build_and_add(designs, density="45", inc_cell=cell_timings.include_cell, rw_cell_func=cell_timings.rewrite_celltype,
                  rw_pin_func=cell_timings.rewrite_pin):
    jobs = []
    sdfs = dict()
    for des in designs:
        jobs += timing_configs(path.basename(des).replace(".v", ""), des, density)
    for job in jobs:
        grade, cfg = job
        sdfs[grade] = []

    def per_job(job):
        grade, cfg = job
        cfg.setup(skip_specimen=True)
        bitf = cfg.build_design(cfg.ncl, {}, backanno=True, substitute=False)
        sdf = bitf.replace(".bit", ".sdf")
        sdfs[grade].append(sdf)

    fuzzloops.parallel_foreach(jobs, per_job)
    for grade in sdfs.keys():
        db = timing_dbs.cells_db_path("ECP5", grade)
        for sdf in sdfs[grade]:
            cell_timings.add_sdf_to_database(db, sdf, include_cell_predicate=inc_cell, rewrite_cell_func=rw_cell_func,
                                             rewrite_pin_func=rw_pin_func)