blob: 6f8cd639cfa67f251d73bf7cc1e72e391504ad5b [file] [log] [blame] [edit]
import edalize
import os
work_root = 'build'
pins = {
'clk': os.environ['URAY_PIN_00'],
'stb': os.environ['URAY_PIN_01'],
'di': os.environ['URAY_PIN_02'],
'do': os.environ['URAY_PIN_03'],
}
xdc_file = os.path.realpath(os.path.join(work_root, 'top.xdc'))
pre_imp_file = os.path.realpath(os.path.join(work_root, 'pre.tcl'))
post_imp_file = os.path.realpath(os.path.join(work_root, 'post.tcl'))
os.makedirs(work_root, exist_ok=True)
synth_tool = 'yosys' if 'USE_YOSYS' in os.environ else 'vivado'
with open(xdc_file, 'w') as f:
f.write('set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets *]\n')
for key, val in pins.items():
f.write('set_property PACKAGE_PIN {} [get_ports {}]\n'.format(
val, key))
f.write(
'set_property IOSTANDARD LVCMOS33 [get_ports {}]\n'.format(key))
with open(pre_imp_file, 'w') as f:
f.write('create_pblock roi\n')
f.write('add_cells_to_pblock [get_pblocks roi] [get_cells roi]\n')
f.write('resize_pblock [get_pblocks roi] -add "{}"\n'.format(
os.environ['URAY_ROI']))
f.write(
'set_property BITSTREAM.GENERAL.PERFRAMECRC YES [current_design]\n')
with open(post_imp_file, 'w') as f:
f.write('write_checkpoint -force design.dcp')
files = [
{
'name': os.path.realpath('top.v'),
'file_type': 'verilogSource'
},
{
'name': xdc_file,
'file_type': 'xdc'
},
]
tool = 'vivado'
edam = {
'files': files,
'name': 'design',
'toplevel': 'top',
'tool_options': {
'vivado': {
'part': os.environ['URAY_PART'],
'pre_imp': pre_imp_file,
'post_imp': post_imp_file,
'synth': synth_tool
}
}
}
backend = edalize.get_edatool(tool)(edam=edam, work_root=work_root)
backend.configure("")
backend.build()