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_xz]
|
||||
<< "," << transition_delays_[IVL_PE_zx]
|
||||
<< "): " << endl;
|
||||
<< ") scope=" << scope_path(scope()) << endl;
|
||||
dump_node_pins(o, ind+4);
|
||||
}
|
||||
|
||||
|
|
|
|||
1
ivl.def
1
ivl.def
|
|
@ -111,6 +111,7 @@ ivl_parameter_expr
|
|||
|
||||
ivl_path_condit
|
||||
ivl_path_delay
|
||||
ivl_path_scope
|
||||
ivl_path_source
|
||||
ivl_path_source_negedge
|
||||
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
|
||||
* 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
|
||||
* This returns the nexus that is the source end of the delay
|
||||
* 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
|
||||
* 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 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);
|
||||
|
|
|
|||
|
|
@ -1264,6 +1264,13 @@ extern uint64_t ivl_path_delay(ivl_delaypath_t obj, ivl_path_edge_t 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)
|
||||
{
|
||||
return net->src;
|
||||
|
|
|
|||
1
t-dll.cc
1
t-dll.cc
|
|
@ -2242,6 +2242,7 @@ bool dll_target::signal_paths(const NetNet*net)
|
|||
<< "." << endl;
|
||||
}
|
||||
assert(nex->t_cookie());
|
||||
obj->path[ptr].scope = lookup_scope_(src->scope());
|
||||
obj->path[ptr].src = nex->t_cookie();
|
||||
obj->path[ptr].condit = path_condit;
|
||||
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 {
|
||||
ivl_scope_t scope;
|
||||
ivl_nexus_t src;
|
||||
ivl_nexus_t condit;
|
||||
bool posedge;
|
||||
|
|
|
|||
|
|
@ -1141,7 +1141,7 @@ static void show_signal(ivl_signal_t net)
|
|||
fprintf(out, " %" 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_10),
|
||||
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_xz),
|
||||
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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue