2020-08-03 17:44:47 +02:00
|
|
|
<?xml version="1.0" ?>
|
|
|
|
|
<!-- DESCRIPTION: Verilator output: XML representation of netlist -->
|
|
|
|
|
<verilator_xml>
|
|
|
|
|
<files>
|
2024-03-02 15:01:37 +01:00
|
|
|
<file id="a" filename="<built-in>" language="1800-2023"/>
|
|
|
|
|
<file id="b" filename="<command-line>" language="1800-2023"/>
|
|
|
|
|
<file id="c" filename="input.vc" language="1800-2023"/>
|
|
|
|
|
<file id="d" filename="t/t_xml_flat_vlvbound.v" language="1800-2023"/>
|
2020-08-03 17:44:47 +02:00
|
|
|
</files>
|
|
|
|
|
<module_files>
|
2024-03-02 15:01:37 +01:00
|
|
|
<file id="d" filename="t/t_xml_flat_vlvbound.v" language="1800-2023"/>
|
2020-08-03 17:44:47 +02:00
|
|
|
</module_files>
|
|
|
|
|
<cells>
|
2022-01-17 22:22:07 +01:00
|
|
|
<cell loc="d,7,8,7,21" name="$root" submodname="$root" hier="$root"/>
|
2020-08-03 17:44:47 +02:00
|
|
|
</cells>
|
|
|
|
|
<netlist>
|
2022-01-17 22:22:07 +01:00
|
|
|
<module loc="d,7,8,7,21" name="$root" origName="$root" topModule="1" public="true">
|
|
|
|
|
<var loc="d,9,25,9,28" name="i_a" dtype_id="1" dir="input" pinIndex="1" vartype="logic" origName="i_a" public="true"/>
|
|
|
|
|
<var loc="d,10,25,10,28" name="i_b" dtype_id="1" dir="input" pinIndex="2" vartype="logic" origName="i_b" public="true"/>
|
|
|
|
|
<var loc="d,11,25,11,28" name="o_a" dtype_id="2" dir="output" pinIndex="3" vartype="logic" origName="o_a" public="true"/>
|
|
|
|
|
<var loc="d,12,25,12,28" name="o_b" dtype_id="2" dir="output" pinIndex="4" vartype="logic" origName="o_b" public="true"/>
|
|
|
|
|
<var loc="d,9,25,9,28" name="vlvbound_test.i_a" dtype_id="1" vartype="logic" origName="i_a"/>
|
|
|
|
|
<var loc="d,10,25,10,28" name="vlvbound_test.i_b" dtype_id="1" vartype="logic" origName="i_b"/>
|
|
|
|
|
<var loc="d,11,25,11,28" name="vlvbound_test.o_a" dtype_id="2" vartype="logic" origName="o_a"/>
|
|
|
|
|
<var loc="d,12,25,12,28" name="vlvbound_test.o_b" dtype_id="2" vartype="logic" origName="o_b"/>
|
|
|
|
|
<topscope loc="d,7,8,7,21">
|
|
|
|
|
<scope loc="d,7,8,7,21" name="TOP">
|
|
|
|
|
<varscope loc="d,9,25,9,28" name="i_a" dtype_id="1"/>
|
|
|
|
|
<varscope loc="d,10,25,10,28" name="i_b" dtype_id="1"/>
|
|
|
|
|
<varscope loc="d,11,25,11,28" name="o_a" dtype_id="2"/>
|
|
|
|
|
<varscope loc="d,12,25,12,28" name="o_b" dtype_id="2"/>
|
|
|
|
|
<varscope loc="d,9,25,9,28" name="vlvbound_test.i_a" dtype_id="1"/>
|
Internals: Make AstAssignW a procedural statement (#6280) (#6556)
Initial idea was to remodel AssignW as Assign under Alway. Trying that
uncovered some issues, the most difficult of them was that a delay
attached to a continuous assignment behaves differently from a delay
attached to a blocking assignment statement, so we need to keep the
knowledge of which flavour an assignment was until V3Timing.
So instead of removing AstAssignW, we always wrap it in an AstAlways,
with a special `keyword()` type. This makes it into a proper procedural
statement, which is almost equivalent to AstAssign, except for the case
when they contain a delay. We still gain the benefits of #6280 and can
simplify some code. Every AstNodeStmt should now be under an
AstNodeProcedure - which we should rename to AstProcess, or an
AstNodeFTask). As a result, V3Table can now handle AssignW for free.
Also uncovered and fixed a bug in handling intra-assignment delays if
a function is present on the RHS of an AssignW.
There is more work to be done towards #6280, and potentially simplifying
AssignW handing, but this is the minimal change required to tick it off
the TODO list for #6280.
2025-10-14 10:05:19 +02:00
|
|
|
<always loc="d,9,25,9,28">
|
|
|
|
|
<contassign loc="d,9,25,9,28" dtype_id="1">
|
|
|
|
|
<varref loc="d,9,25,9,28" name="i_a" dtype_id="1"/>
|
|
|
|
|
<varref loc="d,9,25,9,28" name="vlvbound_test.i_a" dtype_id="1"/>
|
|
|
|
|
</contassign>
|
|
|
|
|
</always>
|
2025-09-26 15:19:48 +02:00
|
|
|
<varscope loc="d,10,25,10,28" name="vlvbound_test.i_b" dtype_id="1"/>
|
Internals: Make AstAssignW a procedural statement (#6280) (#6556)
Initial idea was to remodel AssignW as Assign under Alway. Trying that
uncovered some issues, the most difficult of them was that a delay
attached to a continuous assignment behaves differently from a delay
attached to a blocking assignment statement, so we need to keep the
knowledge of which flavour an assignment was until V3Timing.
So instead of removing AstAssignW, we always wrap it in an AstAlways,
with a special `keyword()` type. This makes it into a proper procedural
statement, which is almost equivalent to AstAssign, except for the case
when they contain a delay. We still gain the benefits of #6280 and can
simplify some code. Every AstNodeStmt should now be under an
AstNodeProcedure - which we should rename to AstProcess, or an
AstNodeFTask). As a result, V3Table can now handle AssignW for free.
Also uncovered and fixed a bug in handling intra-assignment delays if
a function is present on the RHS of an AssignW.
There is more work to be done towards #6280, and potentially simplifying
AssignW handing, but this is the minimal change required to tick it off
the TODO list for #6280.
2025-10-14 10:05:19 +02:00
|
|
|
<always loc="d,10,25,10,28">
|
|
|
|
|
<contassign loc="d,10,25,10,28" dtype_id="1">
|
|
|
|
|
<varref loc="d,10,25,10,28" name="i_b" dtype_id="1"/>
|
|
|
|
|
<varref loc="d,10,25,10,28" name="vlvbound_test.i_b" dtype_id="1"/>
|
|
|
|
|
</contassign>
|
|
|
|
|
</always>
|
2025-09-26 15:19:48 +02:00
|
|
|
<varscope loc="d,11,25,11,28" name="vlvbound_test.o_a" dtype_id="2"/>
|
Internals: Make AstAssignW a procedural statement (#6280) (#6556)
Initial idea was to remodel AssignW as Assign under Alway. Trying that
uncovered some issues, the most difficult of them was that a delay
attached to a continuous assignment behaves differently from a delay
attached to a blocking assignment statement, so we need to keep the
knowledge of which flavour an assignment was until V3Timing.
So instead of removing AstAssignW, we always wrap it in an AstAlways,
with a special `keyword()` type. This makes it into a proper procedural
statement, which is almost equivalent to AstAssign, except for the case
when they contain a delay. We still gain the benefits of #6280 and can
simplify some code. Every AstNodeStmt should now be under an
AstNodeProcedure - which we should rename to AstProcess, or an
AstNodeFTask). As a result, V3Table can now handle AssignW for free.
Also uncovered and fixed a bug in handling intra-assignment delays if
a function is present on the RHS of an AssignW.
There is more work to be done towards #6280, and potentially simplifying
AssignW handing, but this is the minimal change required to tick it off
the TODO list for #6280.
2025-10-14 10:05:19 +02:00
|
|
|
<always loc="d,11,25,11,28">
|
|
|
|
|
<contassign loc="d,11,25,11,28" dtype_id="2">
|
|
|
|
|
<varref loc="d,11,25,11,28" name="o_a" dtype_id="2"/>
|
|
|
|
|
<varref loc="d,11,25,11,28" name="vlvbound_test.o_a" dtype_id="2"/>
|
|
|
|
|
</contassign>
|
|
|
|
|
</always>
|
2025-09-26 15:19:48 +02:00
|
|
|
<varscope loc="d,12,25,12,28" name="vlvbound_test.o_b" dtype_id="2"/>
|
Internals: Make AstAssignW a procedural statement (#6280) (#6556)
Initial idea was to remodel AssignW as Assign under Alway. Trying that
uncovered some issues, the most difficult of them was that a delay
attached to a continuous assignment behaves differently from a delay
attached to a blocking assignment statement, so we need to keep the
knowledge of which flavour an assignment was until V3Timing.
So instead of removing AstAssignW, we always wrap it in an AstAlways,
with a special `keyword()` type. This makes it into a proper procedural
statement, which is almost equivalent to AstAssign, except for the case
when they contain a delay. We still gain the benefits of #6280 and can
simplify some code. Every AstNodeStmt should now be under an
AstNodeProcedure - which we should rename to AstProcess, or an
AstNodeFTask). As a result, V3Table can now handle AssignW for free.
Also uncovered and fixed a bug in handling intra-assignment delays if
a function is present on the RHS of an AssignW.
There is more work to be done towards #6280, and potentially simplifying
AssignW handing, but this is the minimal change required to tick it off
the TODO list for #6280.
2025-10-14 10:05:19 +02:00
|
|
|
<always loc="d,12,25,12,28">
|
|
|
|
|
<contassign loc="d,12,25,12,28" dtype_id="2">
|
|
|
|
|
<varref loc="d,12,25,12,28" name="o_b" dtype_id="2"/>
|
|
|
|
|
<varref loc="d,12,25,12,28" name="vlvbound_test.o_b" dtype_id="2"/>
|
|
|
|
|
</contassign>
|
|
|
|
|
</always>
|
2025-09-26 15:19:48 +02:00
|
|
|
<varscope loc="d,15,34,15,37" name="__Vfunc_vlvbound_test.foo__0__Vfuncout" dtype_id="2"/>
|
|
|
|
|
<varscope loc="d,15,57,15,60" name="__Vfunc_vlvbound_test.foo__0__val" dtype_id="1"/>
|
|
|
|
|
<varscope loc="d,16,17,16,20" name="__Vfunc_vlvbound_test.foo__0__ret" dtype_id="2"/>
|
|
|
|
|
<varscope loc="d,17,13,17,14" name="__Vfunc_vlvbound_test.foo__0__i" dtype_id="3"/>
|
|
|
|
|
<varscope loc="d,15,34,15,37" name="__Vfunc_vlvbound_test.foo__1__Vfuncout" dtype_id="2"/>
|
|
|
|
|
<varscope loc="d,15,57,15,60" name="__Vfunc_vlvbound_test.foo__1__val" dtype_id="1"/>
|
|
|
|
|
<varscope loc="d,16,17,16,20" name="__Vfunc_vlvbound_test.foo__1__ret" dtype_id="2"/>
|
|
|
|
|
<varscope loc="d,17,13,17,14" name="__Vfunc_vlvbound_test.foo__1__i" dtype_id="3"/>
|
2022-01-17 22:22:07 +01:00
|
|
|
<always loc="d,24,14,24,15">
|
|
|
|
|
<comment loc="d,24,16,24,19" name="Function: foo"/>
|
|
|
|
|
<assign loc="d,24,20,24,23" dtype_id="1">
|
|
|
|
|
<varref loc="d,24,20,24,23" name="i_a" dtype_id="1"/>
|
|
|
|
|
<varref loc="d,15,57,15,60" name="__Vfunc_vlvbound_test.foo__0__val" dtype_id="1"/>
|
2020-08-03 17:44:47 +02:00
|
|
|
</assign>
|
2025-02-26 04:48:53 +01:00
|
|
|
<creset loc="d,16,17,16,20">
|
|
|
|
|
<varref loc="d,16,17,16,20" name="__Vfunc_vlvbound_test.foo__0__ret" dtype_id="2"/>
|
|
|
|
|
</creset>
|
|
|
|
|
<creset loc="d,17,13,17,14">
|
|
|
|
|
<varref loc="d,17,13,17,14" name="__Vfunc_vlvbound_test.foo__0__i" dtype_id="3"/>
|
|
|
|
|
</creset>
|
2022-01-17 22:22:07 +01:00
|
|
|
<assign loc="d,18,11,18,12" dtype_id="3">
|
|
|
|
|
<const loc="d,18,12,18,13" name="32'sh0" dtype_id="4"/>
|
|
|
|
|
<varref loc="d,18,10,18,11" name="__Vfunc_vlvbound_test.foo__0__i" dtype_id="3"/>
|
2020-08-03 17:44:47 +02:00
|
|
|
</assign>
|
2025-09-29 16:25:25 +02:00
|
|
|
<loop loc="d,18,5,18,8">
|
2021-07-25 03:06:06 +02:00
|
|
|
<begin>
|
2025-09-29 16:25:25 +02:00
|
|
|
<looptest loc="d,18,16,18,17">
|
|
|
|
|
<gts loc="d,18,18,18,19" dtype_id="5">
|
|
|
|
|
<const loc="d,18,20,18,21" name="32'sh7" dtype_id="4"/>
|
|
|
|
|
<varref loc="d,18,16,18,17" name="__Vfunc_vlvbound_test.foo__0__i" dtype_id="3"/>
|
|
|
|
|
</gts>
|
|
|
|
|
</looptest>
|
2022-01-17 22:22:07 +01:00
|
|
|
<assign loc="d,19,14,19,15" dtype_id="5">
|
|
|
|
|
<eq loc="d,19,31,19,33" dtype_id="5">
|
|
|
|
|
<const loc="d,19,34,19,39" name="2'h0" dtype_id="6"/>
|
2025-06-24 17:59:09 +02:00
|
|
|
<sel loc="d,19,20,19,21" dtype_id="6" widthConst="2">
|
2022-01-17 22:22:07 +01:00
|
|
|
<varref loc="d,19,17,19,20" name="__Vfunc_vlvbound_test.foo__0__val" dtype_id="1"/>
|
2025-06-24 17:59:09 +02:00
|
|
|
<sel loc="d,19,22,19,23" dtype_id="7" widthConst="4">
|
2022-01-17 22:22:07 +01:00
|
|
|
<muls loc="d,19,22,19,23" dtype_id="4">
|
|
|
|
|
<const loc="d,19,23,19,24" name="32'sh2" dtype_id="4"/>
|
|
|
|
|
<varref loc="d,19,21,19,22" name="__Vfunc_vlvbound_test.foo__0__i" dtype_id="3"/>
|
2021-07-25 03:06:06 +02:00
|
|
|
</muls>
|
2022-01-17 22:22:07 +01:00
|
|
|
<const loc="d,19,22,19,23" name="32'h0" dtype_id="8"/>
|
2021-07-25 03:06:06 +02:00
|
|
|
</sel>
|
2020-08-03 17:44:47 +02:00
|
|
|
</sel>
|
2021-07-25 03:06:06 +02:00
|
|
|
</eq>
|
2025-06-24 17:59:09 +02:00
|
|
|
<sel loc="d,19,10,19,11" dtype_id="5" widthConst="1">
|
2022-01-17 22:22:07 +01:00
|
|
|
<varref loc="d,19,7,19,10" name="__Vfunc_vlvbound_test.foo__0__ret" dtype_id="2"/>
|
2025-06-24 17:59:09 +02:00
|
|
|
<sel loc="d,19,11,19,12" dtype_id="9" widthConst="3">
|
2022-01-17 22:22:07 +01:00
|
|
|
<varref loc="d,19,11,19,12" name="__Vfunc_vlvbound_test.foo__0__i" dtype_id="3"/>
|
|
|
|
|
<const loc="d,19,11,19,12" name="32'h0" dtype_id="8"/>
|
2021-07-25 03:06:06 +02:00
|
|
|
</sel>
|
2020-08-03 17:44:47 +02:00
|
|
|
</sel>
|
2021-07-25 03:06:06 +02:00
|
|
|
</assign>
|
2022-01-17 22:22:07 +01:00
|
|
|
<assign loc="d,18,24,18,26" dtype_id="3">
|
|
|
|
|
<add loc="d,18,24,18,26" dtype_id="8">
|
|
|
|
|
<const loc="d,18,24,18,26" name="32'h1" dtype_id="8"/>
|
|
|
|
|
<varref loc="d,18,23,18,24" name="__Vfunc_vlvbound_test.foo__0__i" dtype_id="3"/>
|
2021-07-25 03:06:06 +02:00
|
|
|
</add>
|
2022-01-17 22:22:07 +01:00
|
|
|
<varref loc="d,18,23,18,24" name="__Vfunc_vlvbound_test.foo__0__i" dtype_id="3"/>
|
2021-07-25 03:06:06 +02:00
|
|
|
</assign>
|
|
|
|
|
</begin>
|
2025-09-29 16:25:25 +02:00
|
|
|
</loop>
|
2022-01-17 22:22:07 +01:00
|
|
|
<assign loc="d,21,5,21,11" dtype_id="2">
|
|
|
|
|
<varref loc="d,21,12,21,15" name="__Vfunc_vlvbound_test.foo__0__ret" dtype_id="2"/>
|
|
|
|
|
<varref loc="d,21,5,21,11" name="__Vfunc_vlvbound_test.foo__0__Vfuncout" dtype_id="2"/>
|
2020-08-03 17:44:47 +02:00
|
|
|
</assign>
|
Internals: Make AstAssignW a procedural statement (#6280) (#6556)
Initial idea was to remodel AssignW as Assign under Alway. Trying that
uncovered some issues, the most difficult of them was that a delay
attached to a continuous assignment behaves differently from a delay
attached to a blocking assignment statement, so we need to keep the
knowledge of which flavour an assignment was until V3Timing.
So instead of removing AstAssignW, we always wrap it in an AstAlways,
with a special `keyword()` type. This makes it into a proper procedural
statement, which is almost equivalent to AstAssign, except for the case
when they contain a delay. We still gain the benefits of #6280 and can
simplify some code. Every AstNodeStmt should now be under an
AstNodeProcedure - which we should rename to AstProcess, or an
AstNodeFTask). As a result, V3Table can now handle AssignW for free.
Also uncovered and fixed a bug in handling intra-assignment delays if
a function is present on the RHS of an AssignW.
There is more work to be done towards #6280, and potentially simplifying
AssignW handing, but this is the minimal change required to tick it off
the TODO list for #6280.
2025-10-14 10:05:19 +02:00
|
|
|
<contassign loc="d,24,14,24,15" dtype_id="2">
|
2022-01-17 22:22:07 +01:00
|
|
|
<varref loc="d,24,16,24,19" name="__Vfunc_vlvbound_test.foo__0__Vfuncout" dtype_id="2"/>
|
|
|
|
|
<varref loc="d,24,10,24,13" name="o_a" dtype_id="2"/>
|
Internals: Make AstAssignW a procedural statement (#6280) (#6556)
Initial idea was to remodel AssignW as Assign under Alway. Trying that
uncovered some issues, the most difficult of them was that a delay
attached to a continuous assignment behaves differently from a delay
attached to a blocking assignment statement, so we need to keep the
knowledge of which flavour an assignment was until V3Timing.
So instead of removing AstAssignW, we always wrap it in an AstAlways,
with a special `keyword()` type. This makes it into a proper procedural
statement, which is almost equivalent to AstAssign, except for the case
when they contain a delay. We still gain the benefits of #6280 and can
simplify some code. Every AstNodeStmt should now be under an
AstNodeProcedure - which we should rename to AstProcess, or an
AstNodeFTask). As a result, V3Table can now handle AssignW for free.
Also uncovered and fixed a bug in handling intra-assignment delays if
a function is present on the RHS of an AssignW.
There is more work to be done towards #6280, and potentially simplifying
AssignW handing, but this is the minimal change required to tick it off
the TODO list for #6280.
2025-10-14 10:05:19 +02:00
|
|
|
</contassign>
|
2020-08-03 17:44:47 +02:00
|
|
|
</always>
|
2022-01-17 22:22:07 +01:00
|
|
|
<always loc="d,25,14,25,15">
|
|
|
|
|
<comment loc="d,25,16,25,19" name="Function: foo"/>
|
|
|
|
|
<assign loc="d,25,20,25,23" dtype_id="1">
|
|
|
|
|
<varref loc="d,25,20,25,23" name="i_b" dtype_id="1"/>
|
|
|
|
|
<varref loc="d,15,57,15,60" name="__Vfunc_vlvbound_test.foo__1__val" dtype_id="1"/>
|
2020-08-03 17:44:47 +02:00
|
|
|
</assign>
|
2025-02-26 04:48:53 +01:00
|
|
|
<creset loc="d,16,17,16,20">
|
|
|
|
|
<varref loc="d,16,17,16,20" name="__Vfunc_vlvbound_test.foo__1__ret" dtype_id="2"/>
|
|
|
|
|
</creset>
|
|
|
|
|
<creset loc="d,17,13,17,14">
|
|
|
|
|
<varref loc="d,17,13,17,14" name="__Vfunc_vlvbound_test.foo__1__i" dtype_id="3"/>
|
|
|
|
|
</creset>
|
2022-01-17 22:22:07 +01:00
|
|
|
<assign loc="d,18,11,18,12" dtype_id="3">
|
|
|
|
|
<const loc="d,18,12,18,13" name="32'sh0" dtype_id="4"/>
|
|
|
|
|
<varref loc="d,18,10,18,11" name="__Vfunc_vlvbound_test.foo__1__i" dtype_id="3"/>
|
2020-08-03 17:44:47 +02:00
|
|
|
</assign>
|
2025-09-29 16:25:25 +02:00
|
|
|
<loop loc="d,18,5,18,8">
|
2021-07-25 03:06:06 +02:00
|
|
|
<begin>
|
2025-09-29 16:25:25 +02:00
|
|
|
<looptest loc="d,18,16,18,17">
|
|
|
|
|
<gts loc="d,18,18,18,19" dtype_id="5">
|
|
|
|
|
<const loc="d,18,20,18,21" name="32'sh7" dtype_id="4"/>
|
|
|
|
|
<varref loc="d,18,16,18,17" name="__Vfunc_vlvbound_test.foo__1__i" dtype_id="3"/>
|
|
|
|
|
</gts>
|
|
|
|
|
</looptest>
|
2022-01-17 22:22:07 +01:00
|
|
|
<assign loc="d,19,14,19,15" dtype_id="5">
|
|
|
|
|
<eq loc="d,19,31,19,33" dtype_id="5">
|
|
|
|
|
<const loc="d,19,34,19,39" name="2'h0" dtype_id="6"/>
|
2025-06-24 17:59:09 +02:00
|
|
|
<sel loc="d,19,20,19,21" dtype_id="6" widthConst="2">
|
2022-01-17 22:22:07 +01:00
|
|
|
<varref loc="d,19,17,19,20" name="__Vfunc_vlvbound_test.foo__1__val" dtype_id="1"/>
|
2025-06-24 17:59:09 +02:00
|
|
|
<sel loc="d,19,22,19,23" dtype_id="7" widthConst="4">
|
2022-01-17 22:22:07 +01:00
|
|
|
<muls loc="d,19,22,19,23" dtype_id="4">
|
|
|
|
|
<const loc="d,19,23,19,24" name="32'sh2" dtype_id="4"/>
|
|
|
|
|
<varref loc="d,19,21,19,22" name="__Vfunc_vlvbound_test.foo__1__i" dtype_id="3"/>
|
2021-07-25 03:06:06 +02:00
|
|
|
</muls>
|
2022-01-17 22:22:07 +01:00
|
|
|
<const loc="d,19,22,19,23" name="32'h0" dtype_id="8"/>
|
2021-07-25 03:06:06 +02:00
|
|
|
</sel>
|
2020-08-03 17:44:47 +02:00
|
|
|
</sel>
|
2021-07-25 03:06:06 +02:00
|
|
|
</eq>
|
2025-06-24 17:59:09 +02:00
|
|
|
<sel loc="d,19,10,19,11" dtype_id="5" widthConst="1">
|
2022-01-17 22:22:07 +01:00
|
|
|
<varref loc="d,19,7,19,10" name="__Vfunc_vlvbound_test.foo__1__ret" dtype_id="2"/>
|
2025-06-24 17:59:09 +02:00
|
|
|
<sel loc="d,19,11,19,12" dtype_id="9" widthConst="3">
|
2022-01-17 22:22:07 +01:00
|
|
|
<varref loc="d,19,11,19,12" name="__Vfunc_vlvbound_test.foo__1__i" dtype_id="3"/>
|
|
|
|
|
<const loc="d,19,11,19,12" name="32'h0" dtype_id="8"/>
|
2021-07-25 03:06:06 +02:00
|
|
|
</sel>
|
2020-08-03 17:44:47 +02:00
|
|
|
</sel>
|
2021-07-25 03:06:06 +02:00
|
|
|
</assign>
|
2022-01-17 22:22:07 +01:00
|
|
|
<assign loc="d,18,24,18,26" dtype_id="3">
|
|
|
|
|
<add loc="d,18,24,18,26" dtype_id="8">
|
|
|
|
|
<const loc="d,18,24,18,26" name="32'h1" dtype_id="8"/>
|
|
|
|
|
<varref loc="d,18,23,18,24" name="__Vfunc_vlvbound_test.foo__1__i" dtype_id="3"/>
|
2021-07-25 03:06:06 +02:00
|
|
|
</add>
|
2022-01-17 22:22:07 +01:00
|
|
|
<varref loc="d,18,23,18,24" name="__Vfunc_vlvbound_test.foo__1__i" dtype_id="3"/>
|
2021-07-25 03:06:06 +02:00
|
|
|
</assign>
|
|
|
|
|
</begin>
|
2025-09-29 16:25:25 +02:00
|
|
|
</loop>
|
2022-01-17 22:22:07 +01:00
|
|
|
<assign loc="d,21,5,21,11" dtype_id="2">
|
|
|
|
|
<varref loc="d,21,12,21,15" name="__Vfunc_vlvbound_test.foo__1__ret" dtype_id="2"/>
|
|
|
|
|
<varref loc="d,21,5,21,11" name="__Vfunc_vlvbound_test.foo__1__Vfuncout" dtype_id="2"/>
|
2020-08-03 17:44:47 +02:00
|
|
|
</assign>
|
Internals: Make AstAssignW a procedural statement (#6280) (#6556)
Initial idea was to remodel AssignW as Assign under Alway. Trying that
uncovered some issues, the most difficult of them was that a delay
attached to a continuous assignment behaves differently from a delay
attached to a blocking assignment statement, so we need to keep the
knowledge of which flavour an assignment was until V3Timing.
So instead of removing AstAssignW, we always wrap it in an AstAlways,
with a special `keyword()` type. This makes it into a proper procedural
statement, which is almost equivalent to AstAssign, except for the case
when they contain a delay. We still gain the benefits of #6280 and can
simplify some code. Every AstNodeStmt should now be under an
AstNodeProcedure - which we should rename to AstProcess, or an
AstNodeFTask). As a result, V3Table can now handle AssignW for free.
Also uncovered and fixed a bug in handling intra-assignment delays if
a function is present on the RHS of an AssignW.
There is more work to be done towards #6280, and potentially simplifying
AssignW handing, but this is the minimal change required to tick it off
the TODO list for #6280.
2025-10-14 10:05:19 +02:00
|
|
|
<contassign loc="d,25,14,25,15" dtype_id="2">
|
2022-01-17 22:22:07 +01:00
|
|
|
<varref loc="d,25,16,25,19" name="__Vfunc_vlvbound_test.foo__1__Vfuncout" dtype_id="2"/>
|
|
|
|
|
<varref loc="d,25,10,25,13" name="o_b" dtype_id="2"/>
|
Internals: Make AstAssignW a procedural statement (#6280) (#6556)
Initial idea was to remodel AssignW as Assign under Alway. Trying that
uncovered some issues, the most difficult of them was that a delay
attached to a continuous assignment behaves differently from a delay
attached to a blocking assignment statement, so we need to keep the
knowledge of which flavour an assignment was until V3Timing.
So instead of removing AstAssignW, we always wrap it in an AstAlways,
with a special `keyword()` type. This makes it into a proper procedural
statement, which is almost equivalent to AstAssign, except for the case
when they contain a delay. We still gain the benefits of #6280 and can
simplify some code. Every AstNodeStmt should now be under an
AstNodeProcedure - which we should rename to AstProcess, or an
AstNodeFTask). As a result, V3Table can now handle AssignW for free.
Also uncovered and fixed a bug in handling intra-assignment delays if
a function is present on the RHS of an AssignW.
There is more work to be done towards #6280, and potentially simplifying
AssignW handing, but this is the minimal change required to tick it off
the TODO list for #6280.
2025-10-14 10:05:19 +02:00
|
|
|
</contassign>
|
2020-08-03 17:44:47 +02:00
|
|
|
</always>
|
|
|
|
|
</scope>
|
|
|
|
|
</topscope>
|
2022-01-17 22:22:07 +01:00
|
|
|
<var loc="d,15,34,15,37" name="__Vfunc_vlvbound_test.foo__0__Vfuncout" dtype_id="2" vartype="logic" origName="__Vfunc_vlvbound_test__DOT__foo__0__Vfuncout"/>
|
|
|
|
|
<var loc="d,15,57,15,60" name="__Vfunc_vlvbound_test.foo__0__val" dtype_id="1" vartype="logic" origName="__Vfunc_vlvbound_test__DOT__foo__0__val"/>
|
|
|
|
|
<var loc="d,16,17,16,20" name="__Vfunc_vlvbound_test.foo__0__ret" dtype_id="2" vartype="logic" origName="__Vfunc_vlvbound_test__DOT__foo__0__ret"/>
|
|
|
|
|
<var loc="d,17,13,17,14" name="__Vfunc_vlvbound_test.foo__0__i" dtype_id="3" vartype="integer" origName="__Vfunc_vlvbound_test__DOT__foo__0__i"/>
|
|
|
|
|
<var loc="d,15,34,15,37" name="__Vfunc_vlvbound_test.foo__1__Vfuncout" dtype_id="2" vartype="logic" origName="__Vfunc_vlvbound_test__DOT__foo__1__Vfuncout"/>
|
|
|
|
|
<var loc="d,15,57,15,60" name="__Vfunc_vlvbound_test.foo__1__val" dtype_id="1" vartype="logic" origName="__Vfunc_vlvbound_test__DOT__foo__1__val"/>
|
|
|
|
|
<var loc="d,16,17,16,20" name="__Vfunc_vlvbound_test.foo__1__ret" dtype_id="2" vartype="logic" origName="__Vfunc_vlvbound_test__DOT__foo__1__ret"/>
|
|
|
|
|
<var loc="d,17,13,17,14" name="__Vfunc_vlvbound_test.foo__1__i" dtype_id="3" vartype="integer" origName="__Vfunc_vlvbound_test__DOT__foo__1__i"/>
|
2020-08-03 17:44:47 +02:00
|
|
|
</module>
|
2022-01-17 22:22:07 +01:00
|
|
|
<typetable loc="a,0,0,0,0">
|
|
|
|
|
<basicdtype loc="d,18,18,18,19" id="5" name="logic"/>
|
|
|
|
|
<basicdtype loc="d,19,34,19,39" id="6" name="logic" left="1" right="0"/>
|
|
|
|
|
<basicdtype loc="d,9,11,9,16" id="1" name="logic" left="15" right="0"/>
|
|
|
|
|
<basicdtype loc="d,11,12,11,17" id="2" name="logic" left="6" right="0"/>
|
|
|
|
|
<basicdtype loc="d,17,5,17,12" id="3" name="integer" left="31" right="0" signed="true"/>
|
|
|
|
|
<basicdtype loc="d,19,10,19,11" id="9" name="logic" left="2" right="0" signed="true"/>
|
|
|
|
|
<basicdtype loc="d,19,11,19,12" id="8" name="logic" left="31" right="0"/>
|
|
|
|
|
<basicdtype loc="d,19,20,19,21" id="7" name="logic" left="3" right="0" signed="true"/>
|
|
|
|
|
<basicdtype loc="d,18,12,18,13" id="4" name="logic" left="31" right="0" signed="true"/>
|
2025-09-07 21:38:50 +02:00
|
|
|
<voiddtype loc="a,0,0,0,0" id="10"/>
|
2020-08-03 17:44:47 +02:00
|
|
|
</typetable>
|
|
|
|
|
</netlist>
|
|
|
|
|
</verilator_xml>
|