coriolis/cumulus/src/designflow/pnrcheck.py

63 lines
2.3 KiB
Python

from .copy import Copy
from .yosys import Yosys
from .blif2vst import Blif2Vst
from .cougar import Cougar
from .lvx import Lvx
from .druc import Druc
from .pnr import PnR
from .alias import Alias
from .clean import Clean
PnR.textMode = True
UseClockTree = 0x0001
NoSynthesis = 0x0002
IsChip = 0x0004
def mkRuleSet ( callerGlobals, vlogDesignName, flags=0, extraRtlDepends=[], extrasClean=[] ):
from doDesign import scriptMain
vhdlDesignName = vlogDesignName.lower()
if flags & IsChip:
routedName = 'chip'
else:
routedName = vhdlDesignName
if flags & UseClockTree:
routedName = vhdlDesignName + '_cts'
if not (flags & NoSynthesis):
ruleYosys = Yosys .mkRule( 'yosys', vlogDesignName+'.v' )
ruleB2V = Blif2Vst.mkRule( 'b2v' , [ vhdlDesignName+'.vst'
, vlogDesignName+'.spi' ]
, [ruleYosys]
, flags=0 )
rtlDepends = [ ruleB2V ]
pnrTargets = [ routedName+'_r.ap'
, routedName+'_r.vst'
, routedName+'_r.spi' ]
else:
rtlDepends = [ vhdlDesignName+'.vst' ]
pnrTargets = [ routedName+'_r.ap'
, routedName+'_r.vst'
, routedName+'_r.spi'
, routedName+'.vst'
, routedName+'.spi' ]
rtlDepends += extraRtlDepends
rulePnR = PnR .mkRule( 'pnr', pnrTargets, rtlDepends, scriptMain )
ruleCougar = Cougar.mkRule( 'cougar', routedName+'_r_ext.vst', [rulePnR], flags=Cougar.Verbose )
ruleLvx = Lvx .mkRule( 'lvx'
, [ rulePnR.file_target(1)
, ruleCougar.file_target(0) ]
, flags=Lvx.Flatten )
ruleDruc = Druc .mkRule( 'druc' , [rulePnR], flags=0 )
ruleLayout = Alias .mkRule( 'layout', [rulePnR] )
ruleCgt = PnR .mkRule( 'cgt' )
ruleClean = Clean .mkRule( extrasClean )
for tag in [ 'Yosys', 'B2V', 'PnR', 'Cougar', 'Lvx', 'Druc', 'Cgt', 'Layout', 'Clean' ]:
rule = 'rule' + tag
if rule in locals():
callerGlobals[ rule ] = locals()[ rule ]