63 lines
2.3 KiB
Python
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 ]
|