Give delay paths scope.
Delay paths need a scope. This helps the code generators bind the modpaths to the correct scope. This patch doesn't actually make use of the information, it just makes it available to code generators. Signed-off-by: Stephen Williams <steve@icarus.com>
This commit is contained in:
parent
148e6768f6
commit
0d9ed65e8c
|
|
@ -128,7 +128,7 @@ void NetDelaySrc::dump(ostream&o, unsigned ind) const
|
||||||
<< "/" << transition_delays_[IVL_PE_x0]
|
<< "/" << transition_delays_[IVL_PE_x0]
|
||||||
<< "," << transition_delays_[IVL_PE_xz]
|
<< "," << transition_delays_[IVL_PE_xz]
|
||||||
<< "," << transition_delays_[IVL_PE_zx]
|
<< "," << transition_delays_[IVL_PE_zx]
|
||||||
<< "): " << endl;
|
<< ") scope=" << scope_path(scope()) << endl;
|
||||||
dump_node_pins(o, ind+4);
|
dump_node_pins(o, ind+4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
1
ivl.def
1
ivl.def
|
|
@ -111,6 +111,7 @@ ivl_parameter_expr
|
||||||
|
|
||||||
ivl_path_condit
|
ivl_path_condit
|
||||||
ivl_path_delay
|
ivl_path_delay
|
||||||
|
ivl_path_scope
|
||||||
ivl_path_source
|
ivl_path_source
|
||||||
ivl_path_source_negedge
|
ivl_path_source_negedge
|
||||||
ivl_path_source_posedge
|
ivl_path_source_posedge
|
||||||
|
|
|
||||||
|
|
@ -385,6 +385,10 @@ typedef const struct ivl_attribute_s*ivl_attribute_t;
|
||||||
* block in the verilog source file. The destination signal references
|
* block in the verilog source file. The destination signal references
|
||||||
* the path object, which in turn points to the source for the path.
|
* the path object, which in turn points to the source for the path.
|
||||||
*
|
*
|
||||||
|
* ivl_path_scope
|
||||||
|
* This returns the scope of the delay path. This scope corresponds
|
||||||
|
* to the scope of the specify-block that led to this path.
|
||||||
|
*
|
||||||
* ivl_path_source
|
* ivl_path_source
|
||||||
* This returns the nexus that is the source end of the delay
|
* This returns the nexus that is the source end of the delay
|
||||||
* path. Transitions on the source are the start of the delay time
|
* path. Transitions on the source are the start of the delay time
|
||||||
|
|
@ -398,6 +402,7 @@ typedef const struct ivl_attribute_s*ivl_attribute_t;
|
||||||
* ivl_path_source_negedge
|
* ivl_path_source_negedge
|
||||||
* These functions return true if the source is edge sensitive.
|
* These functions return true if the source is edge sensitive.
|
||||||
*/
|
*/
|
||||||
|
extern ivl_scope_t ivl_path_scope(ivl_delaypath_t obj);
|
||||||
extern ivl_nexus_t ivl_path_source(ivl_delaypath_t obj);
|
extern ivl_nexus_t ivl_path_source(ivl_delaypath_t obj);
|
||||||
extern uint64_t ivl_path_delay(ivl_delaypath_t obj, ivl_path_edge_t pt);
|
extern uint64_t ivl_path_delay(ivl_delaypath_t obj, ivl_path_edge_t pt);
|
||||||
extern ivl_nexus_t ivl_path_condit(ivl_delaypath_t obj);
|
extern ivl_nexus_t ivl_path_condit(ivl_delaypath_t obj);
|
||||||
|
|
|
||||||
|
|
@ -1264,6 +1264,13 @@ extern uint64_t ivl_path_delay(ivl_delaypath_t obj, ivl_path_edge_t edg)
|
||||||
return obj->delay[edg];
|
return obj->delay[edg];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern ivl_scope_t ivl_path_scope(ivl_delaypath_t obj)
|
||||||
|
{
|
||||||
|
assert(obj);
|
||||||
|
assert(obj->scope);
|
||||||
|
return obj->scope;
|
||||||
|
}
|
||||||
|
|
||||||
extern ivl_nexus_t ivl_path_source(ivl_delaypath_t net)
|
extern ivl_nexus_t ivl_path_source(ivl_delaypath_t net)
|
||||||
{
|
{
|
||||||
return net->src;
|
return net->src;
|
||||||
|
|
|
||||||
1
t-dll.cc
1
t-dll.cc
|
|
@ -2242,6 +2242,7 @@ bool dll_target::signal_paths(const NetNet*net)
|
||||||
<< "." << endl;
|
<< "." << endl;
|
||||||
}
|
}
|
||||||
assert(nex->t_cookie());
|
assert(nex->t_cookie());
|
||||||
|
obj->path[ptr].scope = lookup_scope_(src->scope());
|
||||||
obj->path[ptr].src = nex->t_cookie();
|
obj->path[ptr].src = nex->t_cookie();
|
||||||
obj->path[ptr].condit = path_condit;
|
obj->path[ptr].condit = path_condit;
|
||||||
obj->path[ptr].posedge = src->is_posedge();
|
obj->path[ptr].posedge = src->is_posedge();
|
||||||
|
|
|
||||||
1
t-dll.h
1
t-dll.h
|
|
@ -175,6 +175,7 @@ struct dll_target : public target_t, public expr_scan_t {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct ivl_delaypath_s {
|
struct ivl_delaypath_s {
|
||||||
|
ivl_scope_t scope;
|
||||||
ivl_nexus_t src;
|
ivl_nexus_t src;
|
||||||
ivl_nexus_t condit;
|
ivl_nexus_t condit;
|
||||||
bool posedge;
|
bool posedge;
|
||||||
|
|
|
||||||
|
|
@ -1141,7 +1141,7 @@ static void show_signal(ivl_signal_t net)
|
||||||
fprintf(out, " %" PRIu64 ",%" PRIu64 ",%" PRIu64
|
fprintf(out, " %" PRIu64 ",%" PRIu64 ",%" PRIu64
|
||||||
" %" PRIu64 ",%" PRIu64 ",%" PRIu64
|
" %" PRIu64 ",%" PRIu64 ",%" PRIu64
|
||||||
" %" PRIu64 ",%" PRIu64 ",%" PRIu64
|
" %" PRIu64 ",%" PRIu64 ",%" PRIu64
|
||||||
" %" PRIu64 ",%" PRIu64 ",%" PRIu64 "\n",
|
" %" PRIu64 ",%" PRIu64 ",%" PRIu64,
|
||||||
ivl_path_delay(path, IVL_PE_01),
|
ivl_path_delay(path, IVL_PE_01),
|
||||||
ivl_path_delay(path, IVL_PE_10),
|
ivl_path_delay(path, IVL_PE_10),
|
||||||
ivl_path_delay(path, IVL_PE_0z),
|
ivl_path_delay(path, IVL_PE_0z),
|
||||||
|
|
@ -1154,6 +1154,7 @@ static void show_signal(ivl_signal_t net)
|
||||||
ivl_path_delay(path, IVL_PE_x0),
|
ivl_path_delay(path, IVL_PE_x0),
|
||||||
ivl_path_delay(path, IVL_PE_xz),
|
ivl_path_delay(path, IVL_PE_xz),
|
||||||
ivl_path_delay(path, IVL_PE_zx));
|
ivl_path_delay(path, IVL_PE_zx));
|
||||||
|
fprintf(out, " scope=%s\n", ivl_scope_name(ivl_path_scope(path)));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (idx = 0 ; idx < ivl_signal_attr_cnt(net) ; idx += 1) {
|
for (idx = 0 ; idx < ivl_signal_attr_cnt(net) ; idx += 1) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue