It looks like we always use a non-blocking assignment to write signals within a tick block even if the user uses the value attribute. The following model works with our pure-Python simulation tool, but fails when we use translation. The generated Verilog is also shown below.
from pymtl import *
class RegIncr2( Model ):
def __init__( s ):
s.in_ = InPort (8)
s.out = OutPort (8)
s.temp = Wire(8)
# Concurrent block
@s.tick_rtl
def concurrent_block():
s.temp.value = s.in_
s.out.next = s.temp + 1
def line_trace( s ):
return "{} (+1) {}".format( s.in_, s.out )
It looks like we always use a non-blocking assignment to write signals within a tick block even if the user uses the
value
attribute. The following model works with our pure-Python simulation tool, but fails when we use translation. The generated Verilog is also shown below.