Debugging cells¶
The $print
cell is used to log the values of signals, akin to (and
translatable to) the $display
and $write
family of tasks in Verilog. It
has the following parameters:
FORMAT
The internal format string. The syntax is described below.
ARGS_WIDTH
The width (in bits) of the signal on the
ARGS
port.TRG_ENABLE
True if triggered on specific signals defined in
TRG
; false if triggered wheneverARGS
orEN
change andEN
is 1.
If TRG_ENABLE
is true, the following parameters also apply:
TRG_WIDTH
The number of bits in the
TRG
port.TRG_POLARITY
For each bit in
TRG
, 1 if that signal is positive-edge triggered, 0 if negative-edge triggered.PRIORITY
When multiple
$print
or$check
cells fire on the same trigger, they execute in descending priority order.
Ports:
TRG
The signals that control when this
$print
cell is triggered.If the width of this port is zero and
TRG_ENABLE
is true, the cell is triggered during initial evaluation (time zero) only.EN
Enable signal for the whole cell.
ARGS
The values to be displayed, in format string order.
- yosys> help $check¶
- Simulation model (verilog)¶
2128module \$check (A, EN, TRG, ARGS); 2129 2130 parameter FLAVOR = ""; 2131 parameter PRIORITY = 0; 2132 2133 parameter FORMAT = ""; 2134 parameter ARGS_WIDTH = 0; 2135 2136 parameter TRG_ENABLE = 1; 2137 parameter TRG_WIDTH = 0; 2138 parameter TRG_POLARITY = 0; 2139 2140 input A; 2141 input EN; 2142 input [TRG_WIDTH-1:0] TRG; 2143 input [ARGS_WIDTH-1:0] ARGS; 2144 2145endmodule
- yosys> help $print¶
- Simulation model (verilog)¶
2108module \$print (EN, TRG, ARGS); 2109 2110 parameter PRIORITY = 0; 2111 2112 parameter FORMAT = ""; 2113 parameter ARGS_WIDTH = 0; 2114 2115 parameter TRG_ENABLE = 1; 2116 parameter TRG_WIDTH = 0; 2117 parameter TRG_POLARITY = 0; 2118 2119 input EN; 2120 input [TRG_WIDTH-1:0] TRG; 2121 input [ARGS_WIDTH-1:0] ARGS; 2122 2123endmodule
- yosys> help $scopeinfo¶
- Simulation model (verilog)¶
3100module \$scopeinfo (); 3101 3102 parameter TYPE = ""; 3103 3104endmodule
Format string syntax¶
The format string syntax resembles Python f-strings. Regular text is passed
through unchanged until a format specifier is reached, starting with a {
.
Format specifiers have the following syntax. Unless noted, all items are required:
{
Denotes the start of the format specifier.
- size
Signal size in bits; this many bits are consumed from the
ARGS
port by this specifier.:
Separates the size from the remaining items.
- justify
>
for right-justified,<
for left-justified.- padding
0
for zero-padding, or a space for space-padding.- width?
(optional) The number of characters wide to pad to.
- base
b
for base-2 integers (binary)o
for base-8 integers (octal)d
for base-10 integers (decimal)h
for base-16 integers (hexadecimal)c
for ASCII characters/stringst
andr
for simulation time (corresponding to$time
and$realtime
)
For integers, this item may follow:
+
?(optional, decimals only) Include a leading plus for non-negative numbers. This can assist with symmetry with negatives in tabulated output.
- signedness
u
for unsigned,s
for signed. This distinction is only respected when rendering decimals.
ASCII characters/strings have no special options, but the signal size must be divisible by 8.
For simulation time, the signal size must be zero.
Finally:
}
Denotes the end of the format specifier.
Some example format specifiers:
{8:>02hu}
- 8-bit unsigned integer rendered as hexadecimal, right-justified, zero-padded to 2 characters wide.{32:< 15d+s}
- 32-bit signed integer rendered as decimal, left-justified, space-padded to 15 characters wide, positive values prefixed with+
.{16:< 10hu}
- 16-bit unsigned integer rendered as hexadecimal, left-justified, space-padded to 10 characters wide.{0:>010t}
- simulation time, right-justified, zero-padded to 10 characters wide.
To include literal {
and }
characters in your format string, use {{
and }}
respectively.
It is an error for a format string to consume more or less bits from ARGS
than the port width.
Values are never truncated, regardless of the specified width.
Note that further restrictions on allowable combinations of options may apply depending on the backend used.
For example, Verilog does not have a format specifier that allows zero-padding a string (i.e. more than 1 ASCII character), though zero-padding a single character is permitted.
Thus, while the RTLIL format specifier {8:>02c}
translates to %02c
,
{16:>02c}
cannot be represented in Verilog and will fail to emit. In this
case, {16:> 02c}
must be used, which translates to %2s
.