from plugins.alpha.core2chip.libresocio import CoreToChip
from plugins.alpha.chip.configuration import ChipConf
from plugins.alpha.chip.chip import Chip
+#from plugins.alpha.utils import rgetInstanceMatching
af = CRL.AllianceFramework.get()
"""The mandatory function to be called by Coriolis CGT/Unicorn."""
global af
#helpers.setTraceLevel( 550 )
- #Breakpoint.setStopLevel( 100 )
+ #Breakpoint.setStopLevel( 99 )
rvalue = True
coreSizeX = u(51*90.0)
coreSizeY = u(56*90.0)
- chipBorder = u(2*214.0 + 10*13.0)
+ chipBorder = u(2*214.0 + 8*13.0)
ioSpecs = IoSpecs()
#pinmuxFile = './non_generated/litex_pinpads.json'
#pinmuxFile = './coriolis2/ls180/litex_pinpads.json'
ioPadsSpec += doIoPinVector( (IoPin.EAST, None, 'sdram_dq_{}', 'sdram_dq({})', 'sdram_dq_i({})', 'sdram_dq_oe({})', 'sdram_dq_o({})'), range(0,16) )
ioPadsSpec += doIoPinVector( (IoPin.EAST, None, 'sdram_ba_{}', 'sdram_ba({})', 'sdram_ba({})'), 2 )
ioPadsSpec += doIoPowerCap( IoPin.EAST|IoPin.A_END )
+ ioPadsSpec += [ (IoPin.EAST , None, 'sys_pll_testout_o', 'sys_pll_testout_o', 'sys_pll_testout_o' )
+ , (IoPin.EAST|IoPin.ANALOG, None, 'sys_pll_vco_o' , 'sys_pll_vco_o' , 'sys_pll_vco_o' )
+ ]
# I/O pads, West side.
ioPadsSpec += doIoPowerCap( IoPin.WEST|IoPin.A_BEGIN )
- ioPadsSpec += doIoPinVector( (IoPin.WEST , None, 'nc_{}', ' nc({})', 'nc({})'), range(40) )
+ ioPadsSpec += doIoPinVector( (IoPin.WEST , None, 'nc_{}', ' nc({})', 'nc({})'), range(36) )
#ioPadsSpec += doIoPinVector( (IoPin.WEST , None, 'pwm_{}', 'pwm({})', 'pwm({})'), 2 )
ioPadsSpec += doIoPinVector( (IoPin.WEST , None, 'eint_{}', 'eint_{}', 'eint_{}'), 3 )
ioPadsSpec += [ (IoPin.WEST , None, 'spimaster_clk' , 'spimaster_clk' , 'spimaster_clk' )
, (IoPin.NORTH, None, 'jtag_tdo' , 'jtag_tdo' , 'jtag_tdo' )
, (IoPin.NORTH, None, 'jtag_tck' , 'jtag_tck' , 'jtag_tck' )
, (IoPin.NORTH, None, 'sys_clk' , 'sys_clk' , 'sys_clk' )
- , (IoPin.NORTH, None, 'sys_pll_testout_o' , 'sys_pll_testout_o' , 'sys_pll_testout_o' )
- , (IoPin.NORTH, None, 'sys_pll_vco_o', 'sys_pll_vco_o', 'sys_pll_vco_o' )
]
ioPadsSpec += doIoPinVector( (IoPin.NORTH, None, 'sys_clksel_i{}', 'sys_clksel_i({})', 'sys_clksel_i({})'), 2 )
ioPadsSpec += doIoPowerCap( IoPin.NORTH|IoPin.A_END )
if editor: editor.setCell( cell )
#ls180Conf = ChipConf( cell, ioPads=ioSpecs.ioPadsSpec )
ls180Conf = ChipConf( cell, ioPads=ioPadsSpec )
- ls180Conf.cfg.etesian.bloat = 'nsxlib'
+ ls180Conf.cfg.etesian.bloat = 'Flexlib'
ls180Conf.cfg.etesian.uniformDensity = True
ls180Conf.cfg.etesian.aspectRatio = 1.0
ls180Conf.cfg.etesian.spaceMargin = 0.05
ls180Conf.chipConf.ioPadGauge = 'LibreSOCIO'
ls180Conf.coreSize = (coreSizeX, coreSizeY)
ls180Conf.chipSize = (coreSizeX + chipBorder + u(5.0), coreSizeY + chipBorder - u(0.04) )
+ #ls180Conf.useHTree( 'core.subckt_12941_test_issuer.ti_coresync_clk' )
+ ls180Conf.useHTree( 'core.por_clk' )
+ ls180Conf.useHTree( 'jtag_tck_from_pad' )
- #`tiId & sramId are dependent on Yosys. They need to be adjusted whenever
- # the design changes.
- tiId = 12969
- sramId = 3482
- tiPath = 'subckt_{}_test_issuer.subckt_1_ti.'.format(tiId)
+ tiPath = 'test_issuer.ti.'
sramDatas \
- = [ [tiPath+'subckt_{}_sram4k_0.subckt_152_spblock512w64b8w_0.real_sram'.format(sramId ), -2]
- , [tiPath+'subckt_{}_sram4k_1.subckt_152_spblock512w64b8w_1.real_sram'.format(sramId+1), 3]
- , [tiPath+'subckt_{}_sram4k_2.subckt_152_spblock512w64b8w_2.real_sram'.format(sramId+2), 2]
- , [tiPath+'subckt_{}_sram4k_3.subckt_152_spblock512w64b8w_3.real_sram'.format(sramId+3), 3]
+ = [ ['test_issuer.ti.sram4k_0.spblock_512w64b8w', -2]
+ , ['test_issuer.ti.sram4k_1.spblock_512w64b8w', 3]
+ , ['test_issuer.ti.sram4k_2.spblock_512w64b8w', 2]
+ , ['test_issuer.ti.sram4k_3.spblock_512w64b8w', 3]
]
ls180ToChip = CoreToChip( ls180Conf )
)
if i+1 < len(sramDatas):
originX += sramAb.getWidth() + 2*sliceHeight + sramDatas[i+1][1]*sliceStep
- twoGrid = DbU.fromGrid( 2 )
- pll = DataBase.getDB().getCell( 'gds_PLL' )
- pllAb = pll.getAbutmentBox()
- pllInstance = Instance.create( cell, 'GDS_PLL', pll )
- position = Transformation( onGrid( coreAb.getXMax() - pllAb.getWidth () -pllAb.getXMin() )
- , onGrid( coreAb.getYMax() - pllAb.getHeight() -pllAb.getYMin() )
- , Transformation.Orientation.ID )
- pllInstance.setTransformation( position )
- pllInstance.setPlacementStatus( Instance.PlacementStatus.FIXED )
+ pllTransf = Transformation( coreAb.getXMax() # -u(234.0)
+ , coreAb.getYMax() - u(208.0)
+ , Transformation.Orientation.MX )
+ print( 'pllTransf={}'.format(pllTransf) )
+ chipBuilder.placeMacro( 'test_issuer.wrappll.pll' , pllTransf )
+ sys.stderr.flush()
+ sys.stdout.flush()
Breakpoint.stop( 99, 'After core placement.' )
rvalue = chipBuilder.doPnR()