common modules: eos-s3: add analysis stage
Signed-off-by: Paweł Czarnecki <pczarnecki@antmicro.com>
This commit is contained in:
parent
6dafe0b6d1
commit
e88f714877
|
@ -8,7 +8,8 @@
|
||||||
"eos-s3/btn_counter/btn_counter.v"
|
"eos-s3/btn_counter/btn_counter.v"
|
||||||
],
|
],
|
||||||
"synth_log": "synth.log",
|
"synth_log": "synth.log",
|
||||||
"pack_log": "pack.log"
|
"pack_log": "pack.log",
|
||||||
|
"analysis_log": "analysis.log"
|
||||||
},
|
},
|
||||||
"EOS3FF512-PDN64": {
|
"EOS3FF512-PDN64": {
|
||||||
"default_target": "bitstream",
|
"default_target": "bitstream",
|
||||||
|
@ -18,8 +19,7 @@
|
||||||
"sdc-in": "eos-s3/btn_counter/dummy.sdc"
|
"sdc-in": "eos-s3/btn_counter/dummy.sdc"
|
||||||
},
|
},
|
||||||
"values": {
|
"values": {
|
||||||
"part": "ql-eos-s3",
|
"part": "ql-eos-s3"
|
||||||
"package": "PD64"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,6 +174,8 @@ def vpr(mode: str, vprargs: VprArgs, cwd=None):
|
||||||
modeargs = ['--place']
|
modeargs = ['--place']
|
||||||
elif mode == 'route':
|
elif mode == 'route':
|
||||||
modeargs = ['--route']
|
modeargs = ['--route']
|
||||||
|
elif mode == 'analysis':
|
||||||
|
modeargs = ['--analysis']
|
||||||
|
|
||||||
return sub(*([
|
return sub(*([
|
||||||
'vpr',
|
'vpr',
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# Copyright (C) 2022 F4PGA Authors
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
from shutil import move as sh_mv
|
||||||
|
|
||||||
|
from f4pga.common import *
|
||||||
|
from f4pga.module import Module, ModuleContext
|
||||||
|
|
||||||
|
|
||||||
|
def analysis_merged_post_implementation_file(ctx: ModuleContext):
|
||||||
|
return str(Path(ctx.takes.eblif).with_suffix('')) + '_merged_post_implementation.v'
|
||||||
|
|
||||||
|
|
||||||
|
def analysis_post_implementation_file(ctx: ModuleContext):
|
||||||
|
return str(Path(ctx.takes.eblif).with_suffix('')) + '_post_synthesis.v'
|
||||||
|
|
||||||
|
|
||||||
|
class analysisModule(Module):
|
||||||
|
def map_io(self, ctx: ModuleContext):
|
||||||
|
return {
|
||||||
|
'merged_post_implementation_v': analysis_merged_post_implementation_file(ctx),
|
||||||
|
'post_implementation_v': analysis_post_implementation_file(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
def execute(self, ctx: ModuleContext):
|
||||||
|
build_dir = str(Path(ctx.takes.eblif).parent)
|
||||||
|
|
||||||
|
vpr_options = []
|
||||||
|
if ctx.values.vpr_options:
|
||||||
|
vpr_options = options_dict_to_list(ctx.values.vpr_options)
|
||||||
|
|
||||||
|
yield 'Analysis with VPR...'
|
||||||
|
vpr(
|
||||||
|
'analysis',
|
||||||
|
VprArgs(
|
||||||
|
ctx.share,
|
||||||
|
ctx.takes.eblif,
|
||||||
|
ctx.values,
|
||||||
|
sdc_file=ctx.takes.sdc
|
||||||
|
),
|
||||||
|
cwd=build_dir
|
||||||
|
)
|
||||||
|
|
||||||
|
if ctx.is_output_explicit('merged_post_implementation_v'):
|
||||||
|
sh_mv(analysis_merged_post_implementation_file(ctx), ctx.outputs.merged_post_implementation_v)
|
||||||
|
|
||||||
|
if ctx.is_output_explicit('post_implementation_v'):
|
||||||
|
sh_mv(analysis_post_implementation_file(ctx), ctx.outputs.post_implementation_v)
|
||||||
|
|
||||||
|
yield 'Saving log...'
|
||||||
|
save_vpr_log('analysis.log', build_dir=build_dir)
|
||||||
|
|
||||||
|
def __init__(self, _):
|
||||||
|
self.name = 'analysis'
|
||||||
|
self.no_of_phases = 2
|
||||||
|
self.takes = [
|
||||||
|
'eblif',
|
||||||
|
'route',
|
||||||
|
'sdc?'
|
||||||
|
]
|
||||||
|
self.produces = [
|
||||||
|
'merged_post_implementation_v',
|
||||||
|
'post_implementation_v',
|
||||||
|
'analysis_log'
|
||||||
|
]
|
||||||
|
self.values = [
|
||||||
|
'device',
|
||||||
|
'vpr_options?'
|
||||||
|
] + vpr_specific_values()
|
||||||
|
|
||||||
|
ModuleClass = analysisModule
|
|
@ -11,6 +11,7 @@
|
||||||
"iomux_binary": "common:generic_script_wrapper",
|
"iomux_binary": "common:generic_script_wrapper",
|
||||||
"place": "common:place",
|
"place": "common:place",
|
||||||
"route": "common:route",
|
"route": "common:route",
|
||||||
|
"analysis": "common:analysis",
|
||||||
"fasm": "common:fasm",
|
"fasm": "common:fasm",
|
||||||
"bitstream": "common:generic_script_wrapper"
|
"bitstream": "common:generic_script_wrapper"
|
||||||
},
|
},
|
||||||
|
@ -270,6 +271,45 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"analysis": {
|
||||||
|
"values": {
|
||||||
|
"device": "ql-eos-s3",
|
||||||
|
"device_alt": "ql-eos-s3_wlcsp",
|
||||||
|
"pinmap": "${shareDir}/arch/ql-eos-s3_wlcsp/pinmap_PD64.csv",
|
||||||
|
"arch_def": "${shareDir}/arch/ql-eos-s3_wlcsp/arch.timing.xml",
|
||||||
|
"rr_graph_lookahead_bin": "${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.lookahead.bin",
|
||||||
|
"rr_graph_real_bin": "${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.rr_graph.real.bin",
|
||||||
|
"vpr_place_delay": "${shareDir}/arch/ql-eos-s3_wlcsp/rr_graph_ql-eos-s3_wlcsp.place_delay.bin",
|
||||||
|
"vpr_grid_layout_name": "ql-eos-s3",
|
||||||
|
"vpr_options": {
|
||||||
|
"gen_post_synthesis_netlist": "on",
|
||||||
|
"gen_post_implementation_merged_netlist": "on",
|
||||||
|
"post_synth_netlist_unconn_inputs": "nets",
|
||||||
|
"post_synth_netlist_unconn_outputs": "nets",
|
||||||
|
"verify_file_digests": "off",
|
||||||
|
"max_router_iterations": 500,
|
||||||
|
"routing_failure_predictor": "off",
|
||||||
|
"router_high_fanout_threshold": -1,
|
||||||
|
"constant_net_method": "route",
|
||||||
|
"route_chan_width": 100,
|
||||||
|
"clock_modeling": "route",
|
||||||
|
"place_delay_model": "delta_override",
|
||||||
|
"router_lookahead": "extended_map",
|
||||||
|
"check_route": "quick",
|
||||||
|
"strict_checks": "off",
|
||||||
|
"allow_dangling_combinational_nodes": "on",
|
||||||
|
"disable_errors": "check_unbuffered_edges:check_route",
|
||||||
|
"congested_routing_iteration_threshold": "0.8",
|
||||||
|
"incremental_reroute_delay_ripup": "off",
|
||||||
|
"base_cost_type": "delay_normalized_length_bounded",
|
||||||
|
"bb_factor": "10",
|
||||||
|
"initial_pres_fac": "4.0",
|
||||||
|
"check_rr_graph": "off",
|
||||||
|
"pack_high_fanout_threshold": "PB-lOGIC:18",
|
||||||
|
"suppress_warnings": "${noisyWarnings},sum_pin_class:check_unbuffered_edges:load_rr_indexed_data_T_values:check_rr_node:trans_per_R:check_route:set_rr_graph_tool_comment "
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"bitstream": {
|
"bitstream": {
|
||||||
"params": {
|
"params": {
|
||||||
"stage_name": "bitstream",
|
"stage_name": "bitstream",
|
||||||
|
|
Loading…
Reference in New Issue