mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	Most of the word/coarse level cells have an assigned group and individual page. The gate/fine level cells are all on one page. Fix links to `cell_library.rst`.
		
			
				
	
	
		
			138 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
	
		
			4.1 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
.. role:: verilog(code)
 | 
						|
   :language: Verilog
 | 
						|
 | 
						|
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
 | 
						|
   whenever ``ARGS`` or ``EN`` change and ``EN`` 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.
 | 
						|
 | 
						|
.. autocellgroup:: debug
 | 
						|
   :members:
 | 
						|
   :source:
 | 
						|
   :linenos:
 | 
						|
 | 
						|
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/strings
 | 
						|
   * ``t`` and ``r`` for simulation time (corresponding to :verilog:`$time` and
 | 
						|
     :verilog:`$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``.
 |