mirror of
https://github.com/YosysHQ/yosys
synced 2025-08-19 01:32:20 +00:00
Docs: Reflow line length
This commit is contained in:
parent
829e02ec5b
commit
40ba92e956
20 changed files with 782 additions and 785 deletions
|
@ -73,16 +73,16 @@ also have the following parameters:
|
|||
:verilog:`Y = !A` $logic_not
|
||||
================== ============
|
||||
|
||||
For the unary cells that output a logical value (`$reduce_and`,
|
||||
`$reduce_or`, `$reduce_xor`, `$reduce_xnor`, `$reduce_bool`,
|
||||
`$logic_not`), when the ``\Y_WIDTH`` parameter is greater than 1, the output
|
||||
is zero-extended, and only the least significant bit varies.
|
||||
For the unary cells that output a logical value (`$reduce_and`, `$reduce_or`,
|
||||
`$reduce_xor`, `$reduce_xnor`, `$reduce_bool`, `$logic_not`), when the
|
||||
``\Y_WIDTH`` parameter is greater than 1, the output is zero-extended, and only
|
||||
the least significant bit varies.
|
||||
|
||||
Note that `$reduce_or` and `$reduce_bool` actually represent the same logic
|
||||
function. But the HDL frontends generate them in different situations. A
|
||||
`$reduce_or` cell is generated when the prefix ``|`` operator is being used. A
|
||||
`$reduce_bool` cell is generated when a bit vector is used as a condition in
|
||||
an ``if``-statement or ``?:``-expression.
|
||||
`$reduce_bool` cell is generated when a bit vector is used as a condition in an
|
||||
``if``-statement or ``?:``-expression.
|
||||
|
||||
Binary operators
|
||||
~~~~~~~~~~~~~~~~
|
||||
|
@ -91,15 +91,15 @@ All binary RTL cells have two input ports ``\A`` and ``\B`` and one output port
|
|||
``\Y``. They also have the following parameters:
|
||||
|
||||
``\A_SIGNED``
|
||||
Set to a non-zero value if the input ``\A`` is signed and therefore
|
||||
should be sign-extended when needed.
|
||||
Set to a non-zero value if the input ``\A`` is signed and therefore should be
|
||||
sign-extended when needed.
|
||||
|
||||
``\A_WIDTH``
|
||||
The width of the input port ``\A``.
|
||||
|
||||
``\B_SIGNED``
|
||||
Set to a non-zero value if the input ``\B`` is signed and therefore
|
||||
should be sign-extended when needed.
|
||||
Set to a non-zero value if the input ``\B`` is signed and therefore should be
|
||||
sign-extended when needed.
|
||||
|
||||
``\B_WIDTH``
|
||||
The width of the input port ``\B``.
|
||||
|
@ -130,29 +130,28 @@ All binary RTL cells have two input ports ``\A`` and ``\B`` and one output port
|
|||
:verilog:`Y = A ** B` $pow ``N/A`` $modfloor
|
||||
======================= ============= ======================= =========
|
||||
|
||||
The `$shl` and `$shr` cells implement logical shifts, whereas the `$sshl`
|
||||
and `$sshr` cells implement arithmetic shifts. The `$shl` and `$sshl`
|
||||
cells implement the same operation. All four of these cells interpret the second
|
||||
The `$shl` and `$shr` cells implement logical shifts, whereas the `$sshl` and
|
||||
`$sshr` cells implement arithmetic shifts. The `$shl` and `$sshl` cells
|
||||
implement the same operation. All four of these cells interpret the second
|
||||
operand as unsigned, and require ``\B_SIGNED`` to be zero.
|
||||
|
||||
Two additional shift operator cells are available that do not directly
|
||||
correspond to any operator in Verilog, `$shift` and `$shiftx`. The
|
||||
`$shift` cell performs a right logical shift if the second operand is positive
|
||||
(or unsigned), and a left logical shift if it is negative. The `$shiftx` cell
|
||||
performs the same operation as the `$shift` cell, but the vacated bit
|
||||
positions are filled with undef (x) bits, and corresponds to the Verilog indexed
|
||||
part-select expression.
|
||||
correspond to any operator in Verilog, `$shift` and `$shiftx`. The `$shift` cell
|
||||
performs a right logical shift if the second operand is positive (or unsigned),
|
||||
and a left logical shift if it is negative. The `$shiftx` cell performs the same
|
||||
operation as the `$shift` cell, but the vacated bit positions are filled with
|
||||
undef (x) bits, and corresponds to the Verilog indexed part-select expression.
|
||||
|
||||
For the binary cells that output a logical value (`$logic_and`, `$logic_or`,
|
||||
`$eqx`, `$nex`, `$lt`, `$le`, `$eq`, `$ne`, `$ge`, `$gt`), when
|
||||
the ``\Y_WIDTH`` parameter is greater than 1, the output is zero-extended, and
|
||||
only the least significant bit varies.
|
||||
`$eqx`, `$nex`, `$lt`, `$le`, `$eq`, `$ne`, `$ge`, `$gt`), when the ``\Y_WIDTH``
|
||||
parameter is greater than 1, the output is zero-extended, and only the least
|
||||
significant bit varies.
|
||||
|
||||
Division and modulo cells are available in two rounding modes. The original
|
||||
`$div` and `$mod` cells are based on truncating division, and correspond to
|
||||
the semantics of the verilog ``/`` and ``%`` operators. The `$divfloor` and
|
||||
`$modfloor` cells represent flooring division and flooring modulo, the latter
|
||||
of which is also known as "remainder" in several languages. See
|
||||
`$div` and `$mod` cells are based on truncating division, and correspond to the
|
||||
semantics of the verilog ``/`` and ``%`` operators. The `$divfloor` and
|
||||
`$modfloor` cells represent flooring division and flooring modulo, the latter of
|
||||
which is also known as "remainder" in several languages. See
|
||||
:numref:`tab:CellLib_divmod` for a side-by-side comparison between the different
|
||||
semantics.
|
||||
|
||||
|
@ -187,9 +186,9 @@ all of the specified width. This cell also has a single bit control input
|
|||
it is 1 the value from the ``\B`` input is sent to the output. So the `$mux`
|
||||
cell implements the function :verilog:`Y = S ? B : A`.
|
||||
|
||||
The `$pmux` cell is used to multiplex between many inputs using a one-hot
|
||||
select signal. Cells of this type have a ``\WIDTH`` and a ``\S_WIDTH`` parameter
|
||||
and inputs ``\A``, ``\B``, and ``\S`` and an output ``\Y``. The ``\S`` input is
|
||||
The `$pmux` cell is used to multiplex between many inputs using a one-hot select
|
||||
signal. Cells of this type have a ``\WIDTH`` and a ``\S_WIDTH`` parameter and
|
||||
inputs ``\A``, ``\B``, and ``\S`` and an output ``\Y``. The ``\S`` input is
|
||||
``\S_WIDTH`` bits wide. The ``\A`` input and the output are both ``\WIDTH`` bits
|
||||
wide and the ``\B`` input is ``\WIDTH*\S_WIDTH`` bits wide. When all bits of
|
||||
``\S`` are zero, the value from ``\A`` input is sent to the output. If the
|
||||
|
@ -199,8 +198,8 @@ from ``\S`` is set the output is undefined. Cells of this type are used to model
|
|||
"parallel cases" (defined by using the ``parallel_case`` attribute or detected
|
||||
by an optimization).
|
||||
|
||||
The `$tribuf` cell is used to implement tristate logic. Cells of this type
|
||||
have a ``\WIDTH`` parameter and inputs ``\A`` and ``\EN`` and an output ``\Y``. The
|
||||
The `$tribuf` cell is used to implement tristate logic. Cells of this type have
|
||||
a ``\WIDTH`` parameter and inputs ``\A`` and ``\EN`` and an output ``\Y``. The
|
||||
``\A`` input and ``\Y`` output are ``\WIDTH`` bits wide, and the ``\EN`` input
|
||||
is one bit wide. When ``\EN`` is 0, the output is not driven. When ``\EN`` is 1,
|
||||
the value from ``\A`` input is sent to the ``\Y`` output. Therefore, the
|
||||
|
@ -224,27 +223,27 @@ parameters:
|
|||
The width of inputs ``\SET`` and ``\CLR`` and output ``\Q``.
|
||||
|
||||
``\SET_POLARITY``
|
||||
The set input bits are active-high if this parameter has the value
|
||||
``1'b1`` and active-low if this parameter is ``1'b0``.
|
||||
The set input bits are active-high if this parameter has the value ``1'b1``
|
||||
and active-low if this parameter is ``1'b0``.
|
||||
|
||||
``\CLR_POLARITY``
|
||||
The reset input bits are active-high if this parameter has the value
|
||||
``1'b1`` and active-low if this parameter is ``1'b0``.
|
||||
The reset input bits are active-high if this parameter has the value ``1'b1``
|
||||
and active-low if this parameter is ``1'b0``.
|
||||
|
||||
Both set and reset inputs have separate bits for every output bit. When both the
|
||||
set and reset inputs of an `$sr` cell are active for a given bit index, the
|
||||
reset input takes precedence.
|
||||
|
||||
D-type flip-flops are represented by `$dff` cells. These cells have a clock
|
||||
port ``\CLK``, an input port ``\D`` and an output port ``\Q``. The following
|
||||
D-type flip-flops are represented by `$dff` cells. These cells have a clock port
|
||||
``\CLK``, an input port ``\D`` and an output port ``\Q``. The following
|
||||
parameters are available for `$dff` cells:
|
||||
|
||||
``\WIDTH``
|
||||
The width of input ``\D`` and output ``\Q``.
|
||||
|
||||
``\CLK_POLARITY``
|
||||
Clock is active on the positive edge if this parameter has the value
|
||||
``1'b1`` and on the negative edge if this parameter is ``1'b0``.
|
||||
Clock is active on the positive edge if this parameter has the value ``1'b1``
|
||||
and on the negative edge if this parameter is ``1'b0``.
|
||||
|
||||
D-type flip-flops with asynchronous reset are represented by `$adff` cells. As
|
||||
the `$dff` cells they have ``\CLK``, ``\D`` and ``\Q`` ports. In addition they
|
||||
|
@ -258,8 +257,8 @@ additional two parameters:
|
|||
``\ARST_VALUE``
|
||||
The state of ``\Q`` will be set to this value when the reset is active.
|
||||
|
||||
Usually these cells are generated by the `proc` pass using the
|
||||
information in the designs RTLIL::Process objects.
|
||||
Usually these cells are generated by the `proc` pass using the information in
|
||||
the designs RTLIL::Process objects.
|
||||
|
||||
D-type flip-flops with synchronous reset are represented by `$sdff` cells. As
|
||||
the `$dff` cells they have ``\CLK``, ``\D`` and ``\Q`` ports. In addition they
|
||||
|
@ -267,14 +266,14 @@ also have a single-bit ``\SRST`` input port for the reset pin and the following
|
|||
additional two parameters:
|
||||
|
||||
``\SRST_POLARITY``
|
||||
The synchronous reset is active-high if this parameter has the value
|
||||
``1'b1`` and active-low if this parameter is ``1'b0``.
|
||||
The synchronous reset is active-high if this parameter has the value ``1'b1``
|
||||
and active-low if this parameter is ``1'b0``.
|
||||
|
||||
``\SRST_VALUE``
|
||||
The state of ``\Q`` will be set to this value when the reset is active.
|
||||
|
||||
Note that the `$adff` and `$sdff` cells can only be used when the reset
|
||||
value is constant.
|
||||
Note that the `$adff` and `$sdff` cells can only be used when the reset value is
|
||||
constant.
|
||||
|
||||
D-type flip-flops with asynchronous load are represented by `$aldff` cells. As
|
||||
the `$dff` cells they have ``\CLK``, ``\D`` and ``\Q`` ports. In addition they
|
||||
|
@ -283,25 +282,24 @@ also have a single-bit ``\ALOAD`` input port for the async load enable pin, a
|
|||
following additional parameter:
|
||||
|
||||
``\ALOAD_POLARITY``
|
||||
The asynchronous load is active-high if this parameter has the value
|
||||
``1'b1`` and active-low if this parameter is ``1'b0``.
|
||||
The asynchronous load is active-high if this parameter has the value ``1'b1``
|
||||
and active-low if this parameter is ``1'b0``.
|
||||
|
||||
D-type flip-flops with asynchronous set and reset are represented by `$dffsr`
|
||||
cells. As the `$dff` cells they have ``\CLK``, ``\D`` and ``\Q`` ports. In
|
||||
addition they also have multi-bit ``\SET`` and ``\CLR`` input ports and the
|
||||
corresponding polarity parameters, like `$sr` cells.
|
||||
|
||||
D-type flip-flops with enable are represented by `$dffe`, `$adffe`,
|
||||
`$aldffe`, `$dffsre`, `$sdffe`, and `$sdffce` cells, which are enhanced
|
||||
variants of `$dff`, `$adff`, `$aldff`, `$dffsr`, `$sdff` (with reset
|
||||
over enable) and `$sdff` (with enable over reset) cells, respectively. They
|
||||
have the same ports and parameters as their base cell. In addition they also
|
||||
have a single-bit ``\EN`` input port for the enable pin and the following
|
||||
parameter:
|
||||
D-type flip-flops with enable are represented by `$dffe`, `$adffe`, `$aldffe`,
|
||||
`$dffsre`, `$sdffe`, and `$sdffce` cells, which are enhanced variants of `$dff`,
|
||||
`$adff`, `$aldff`, `$dffsr`, `$sdff` (with reset over enable) and `$sdff` (with
|
||||
enable over reset) cells, respectively. They have the same ports and parameters
|
||||
as their base cell. In addition they also have a single-bit ``\EN`` input port
|
||||
for the enable pin and the following parameter:
|
||||
|
||||
``\EN_POLARITY``
|
||||
The enable input is active-high if this parameter has the value ``1'b1``
|
||||
and active-low if this parameter is ``1'b0``.
|
||||
The enable input is active-high if this parameter has the value ``1'b1`` and
|
||||
active-low if this parameter is ``1'b0``.
|
||||
|
||||
D-type latches are represented by `$dlatch` cells. These cells have an enable
|
||||
port ``\EN``, an input port ``\D``, and an output port ``\Q``. The following
|
||||
|
@ -311,14 +309,14 @@ parameters are available for `$dlatch` cells:
|
|||
The width of input ``\D`` and output ``\Q``.
|
||||
|
||||
``\EN_POLARITY``
|
||||
The enable input is active-high if this parameter has the value ``1'b1``
|
||||
and active-low if this parameter is ``1'b0``.
|
||||
The enable input is active-high if this parameter has the value ``1'b1`` and
|
||||
active-low if this parameter is ``1'b0``.
|
||||
|
||||
The latch is transparent when the ``\EN`` input is active.
|
||||
|
||||
D-type latches with reset are represented by `$adlatch` cells. In addition to
|
||||
`$dlatch` ports and parameters, they also have a single-bit ``\ARST`` input
|
||||
port for the reset pin and the following additional parameters:
|
||||
`$dlatch` ports and parameters, they also have a single-bit ``\ARST`` input port
|
||||
for the reset pin and the following additional parameters:
|
||||
|
||||
``\ARST_POLARITY``
|
||||
The asynchronous reset is active-high if this parameter has the value
|
||||
|
@ -363,56 +361,53 @@ parameters:
|
|||
The number of address bits (width of the ``\ADDR`` input port).
|
||||
|
||||
``\WIDTH``
|
||||
The number of data bits (width of the ``\DATA`` output port). Note that
|
||||
this may be a power-of-two multiple of the underlying memory's width --
|
||||
such ports are called wide ports and access an aligned group of cells at
|
||||
once. In this case, the corresponding low bits of ``\ADDR`` must be
|
||||
tied to 0.
|
||||
The number of data bits (width of the ``\DATA`` output port). Note that this
|
||||
may be a power-of-two multiple of the underlying memory's width -- such ports
|
||||
are called wide ports and access an aligned group of cells at once. In this
|
||||
case, the corresponding low bits of ``\ADDR`` must be tied to 0.
|
||||
|
||||
``\CLK_ENABLE``
|
||||
When this parameter is non-zero, the clock is used. Otherwise this read
|
||||
port is asynchronous and the ``\CLK`` input is not used.
|
||||
When this parameter is non-zero, the clock is used. Otherwise this read port
|
||||
is asynchronous and the ``\CLK`` input is not used.
|
||||
|
||||
``\CLK_POLARITY``
|
||||
Clock is active on the positive edge if this parameter has the value
|
||||
``1'b1`` and on the negative edge if this parameter is ``1'b0``.
|
||||
Clock is active on the positive edge if this parameter has the value ``1'b1``
|
||||
and on the negative edge if this parameter is ``1'b0``.
|
||||
|
||||
``\TRANSPARENCY_MASK``
|
||||
This parameter is a bitmask of write ports that this read port is
|
||||
transparent with. The bits of this parameter are indexed by the write
|
||||
port's ``\PORTID`` parameter. Transparency can only be enabled between
|
||||
synchronous ports sharing a clock domain. When transparency is enabled
|
||||
for a given port pair, a read and write to the same address in the same
|
||||
cycle will return the new value. Otherwise the old value is returned.
|
||||
This parameter is a bitmask of write ports that this read port is transparent
|
||||
with. The bits of this parameter are indexed by the write port's ``\PORTID``
|
||||
parameter. Transparency can only be enabled between synchronous ports sharing
|
||||
a clock domain. When transparency is enabled for a given port pair, a read
|
||||
and write to the same address in the same cycle will return the new value.
|
||||
Otherwise the old value is returned.
|
||||
|
||||
``\COLLISION_X_MASK``
|
||||
This parameter is a bitmask of write ports that have undefined collision
|
||||
behavior with this port. The bits of this parameter are indexed by the
|
||||
write port's ``\PORTID`` parameter. This behavior can only be enabled
|
||||
between synchronous ports sharing a clock domain. When undefined
|
||||
collision is enabled for a given port pair, a read and write to the same
|
||||
address in the same cycle will return the undefined (all-X) value.This
|
||||
option is exclusive (for a given port pair) with the transparency
|
||||
option.
|
||||
behavior with this port. The bits of this parameter are indexed by the write
|
||||
port's ``\PORTID`` parameter. This behavior can only be enabled between
|
||||
synchronous ports sharing a clock domain. When undefined collision is enabled
|
||||
for a given port pair, a read and write to the same address in the same cycle
|
||||
will return the undefined (all-X) value.This option is exclusive (for a given
|
||||
port pair) with the transparency option.
|
||||
|
||||
``\ARST_VALUE``
|
||||
Whenever the ``\ARST`` input is asserted, the data output will be reset
|
||||
to this value. Only used for synchronous ports.
|
||||
Whenever the ``\ARST`` input is asserted, the data output will be reset to
|
||||
this value. Only used for synchronous ports.
|
||||
|
||||
``\SRST_VALUE``
|
||||
Whenever the ``\SRST`` input is synchronously asserted, the data output
|
||||
will be reset to this value. Only used for synchronous ports.
|
||||
Whenever the ``\SRST`` input is synchronously asserted, the data output will
|
||||
be reset to this value. Only used for synchronous ports.
|
||||
|
||||
``\INIT_VALUE``
|
||||
The initial value of the data output, for synchronous ports.
|
||||
|
||||
``\CE_OVER_SRST``
|
||||
If this parameter is non-zero, the ``\SRST`` input is only recognized
|
||||
when ``\EN`` is true. Otherwise, ``\SRST`` is recognized regardless of
|
||||
``\EN``.
|
||||
If this parameter is non-zero, the ``\SRST`` input is only recognized when
|
||||
``\EN`` is true. Otherwise, ``\SRST`` is recognized regardless of ``\EN``.
|
||||
|
||||
The `$memwr_v2` cells have a clock input ``\CLK``, an enable input ``\EN``
|
||||
(one enable bit for each data bit), an address input ``\ADDR`` and a data input
|
||||
The `$memwr_v2` cells have a clock input ``\CLK``, an enable input ``\EN`` (one
|
||||
enable bit for each data bit), an address input ``\ADDR`` and a data input
|
||||
``\DATA``. They also have the following parameters:
|
||||
|
||||
``\MEMID``
|
||||
|
@ -424,16 +419,16 @@ The `$memwr_v2` cells have a clock input ``\CLK``, an enable input ``\EN``
|
|||
|
||||
``\WIDTH``
|
||||
The number of data bits (width of the ``\DATA`` output port). Like with
|
||||
`$memrd_v2` cells, the width is allowed to be any power-of-two
|
||||
multiple of memory width, with the corresponding restriction on address.
|
||||
`$memrd_v2` cells, the width is allowed to be any power-of-two multiple of
|
||||
memory width, with the corresponding restriction on address.
|
||||
|
||||
``\CLK_ENABLE``
|
||||
When this parameter is non-zero, the clock is used. Otherwise this write
|
||||
port is asynchronous and the ``\CLK`` input is not used.
|
||||
When this parameter is non-zero, the clock is used. Otherwise this write port
|
||||
is asynchronous and the ``\CLK`` input is not used.
|
||||
|
||||
``\CLK_POLARITY``
|
||||
Clock is active on positive edge if this parameter has the value
|
||||
``1'b1`` and on the negative edge if this parameter is ``1'b0``.
|
||||
Clock is active on positive edge if this parameter has the value ``1'b1`` and
|
||||
on the negative edge if this parameter is ``1'b0``.
|
||||
|
||||
``\PORTID``
|
||||
An identifier for this write port, used to index write port bit mask
|
||||
|
@ -442,16 +437,16 @@ The `$memwr_v2` cells have a clock input ``\CLK``, an enable input ``\EN``
|
|||
``\PRIORITY_MASK``
|
||||
This parameter is a bitmask of write ports that this write port has priority
|
||||
over in case of writing to the same address. The bits of this parameter are
|
||||
indexed by the other write port's ``\PORTID`` parameter. Write ports can
|
||||
only have priority over write ports with lower port ID. When two ports write
|
||||
to the same address and neither has priority over the other, the result is
|
||||
indexed by the other write port's ``\PORTID`` parameter. Write ports can only
|
||||
have priority over write ports with lower port ID. When two ports write to
|
||||
the same address and neither has priority over the other, the result is
|
||||
undefined. Priority can only be set between two synchronous ports sharing
|
||||
the same clock domain.
|
||||
|
||||
The `$meminit_v2` cells have an address input ``\ADDR``, a data input
|
||||
``\DATA``, with the width of the ``\DATA`` port equal to ``\WIDTH`` parameter
|
||||
times ``\WORDS`` parameter, and a bit enable mask input ``\EN`` with width equal
|
||||
to ``\WIDTH`` parameter. All three of the inputs must resolve to a constant for
|
||||
The `$meminit_v2` cells have an address input ``\ADDR``, a data input ``\DATA``,
|
||||
with the width of the ``\DATA`` port equal to ``\WIDTH`` parameter times
|
||||
``\WORDS`` parameter, and a bit enable mask input ``\EN`` with width equal to
|
||||
``\WIDTH`` parameter. All three of the inputs must resolve to a constant for
|
||||
synthesis to succeed.
|
||||
|
||||
``\MEMID``
|
||||
|
@ -472,19 +467,18 @@ synthesis to succeed.
|
|||
initialization conflict.
|
||||
|
||||
The HDL frontend models a memory using ``RTLIL::Memory`` objects and
|
||||
asynchronous `$memrd_v2` and `$memwr_v2` cells. The `memory` pass
|
||||
(i.e. its various sub-passes) migrates `$dff` cells into the `$memrd_v2` and
|
||||
`$memwr_v2` cells making them synchronous, then converts them to a single
|
||||
`$mem_v2` cell and (optionally) maps this cell type to `$dff` cells for the
|
||||
individual words and multiplexer-based address decoders for the read and write
|
||||
interfaces. When the last step is disabled or not possible, a `$mem_v2` cell
|
||||
is left in the design.
|
||||
asynchronous `$memrd_v2` and `$memwr_v2` cells. The `memory` pass (i.e. its
|
||||
various sub-passes) migrates `$dff` cells into the `$memrd_v2` and `$memwr_v2`
|
||||
cells making them synchronous, then converts them to a single `$mem_v2` cell and
|
||||
(optionally) maps this cell type to `$dff` cells for the individual words and
|
||||
multiplexer-based address decoders for the read and write interfaces. When the
|
||||
last step is disabled or not possible, a `$mem_v2` cell is left in the design.
|
||||
|
||||
The `$mem_v2` cell provides the following parameters:
|
||||
|
||||
``\MEMID``
|
||||
The name of the original ``RTLIL::Memory`` object that became this
|
||||
`$mem_v2` cell.
|
||||
The name of the original ``RTLIL::Memory`` object that became this `$mem_v2`
|
||||
cell.
|
||||
|
||||
``\SIZE``
|
||||
The number of words in the memory.
|
||||
|
@ -502,19 +496,19 @@ The `$mem_v2` cell provides the following parameters:
|
|||
The number of read ports on this memory cell.
|
||||
|
||||
``\RD_WIDE_CONTINUATION``
|
||||
This parameter is ``\RD_PORTS`` bits wide, containing a bitmask of
|
||||
"wide continuation" read ports. Such ports are used to represent the
|
||||
extra data bits of wide ports in the combined cell, and must have all
|
||||
control signals identical with the preceding port, except for address,
|
||||
which must have the proper sub-cell address encoded in the low bits.
|
||||
This parameter is ``\RD_PORTS`` bits wide, containing a bitmask of "wide
|
||||
continuation" read ports. Such ports are used to represent the extra data
|
||||
bits of wide ports in the combined cell, and must have all control signals
|
||||
identical with the preceding port, except for address, which must have the
|
||||
proper sub-cell address encoded in the low bits.
|
||||
|
||||
``\RD_CLK_ENABLE``
|
||||
This parameter is ``\RD_PORTS`` bits wide, containing a clock enable bit
|
||||
for each read port.
|
||||
This parameter is ``\RD_PORTS`` bits wide, containing a clock enable bit for
|
||||
each read port.
|
||||
|
||||
``\RD_CLK_POLARITY``
|
||||
This parameter is ``\RD_PORTS`` bits wide, containing a clock polarity
|
||||
bit for each read port.
|
||||
This parameter is ``\RD_PORTS`` bits wide, containing a clock polarity bit
|
||||
for each read port.
|
||||
|
||||
``\RD_TRANSPARENCY_MASK``
|
||||
This parameter is ``\RD_PORTS*\WR_PORTS`` bits wide, containing a
|
||||
|
@ -523,62 +517,62 @@ The `$mem_v2` cell provides the following parameters:
|
|||
|
||||
``\RD_COLLISION_X_MASK``
|
||||
This parameter is ``\RD_PORTS*\WR_PORTS`` bits wide, containing a
|
||||
concatenation of all ``\COLLISION_X_MASK`` values of the original
|
||||
`$memrd_v2` cells.
|
||||
concatenation of all ``\COLLISION_X_MASK`` values of the original `$memrd_v2`
|
||||
cells.
|
||||
|
||||
``\RD_CE_OVER_SRST``
|
||||
This parameter is ``\RD_PORTS`` bits wide, determining relative
|
||||
synchronous reset and enable priority for each read port.
|
||||
This parameter is ``\RD_PORTS`` bits wide, determining relative synchronous
|
||||
reset and enable priority for each read port.
|
||||
|
||||
``\RD_INIT_VALUE``
|
||||
This parameter is ``\RD_PORTS*\WIDTH`` bits wide, containing the initial
|
||||
value for each synchronous read port.
|
||||
|
||||
``\RD_ARST_VALUE``
|
||||
This parameter is ``\RD_PORTS*\WIDTH`` bits wide, containing the
|
||||
asynchronous reset value for each synchronous read port.
|
||||
This parameter is ``\RD_PORTS*\WIDTH`` bits wide, containing the asynchronous
|
||||
reset value for each synchronous read port.
|
||||
|
||||
``\RD_SRST_VALUE``
|
||||
This parameter is ``\RD_PORTS*\WIDTH`` bits wide, containing the
|
||||
synchronous reset value for each synchronous read port.
|
||||
This parameter is ``\RD_PORTS*\WIDTH`` bits wide, containing the synchronous
|
||||
reset value for each synchronous read port.
|
||||
|
||||
``\WR_PORTS``
|
||||
The number of write ports on this memory cell.
|
||||
|
||||
``\WR_WIDE_CONTINUATION``
|
||||
This parameter is ``\WR_PORTS`` bits wide, containing a bitmask of
|
||||
"wide continuation" write ports.
|
||||
This parameter is ``\WR_PORTS`` bits wide, containing a bitmask of "wide
|
||||
continuation" write ports.
|
||||
|
||||
``\WR_CLK_ENABLE``
|
||||
This parameter is ``\WR_PORTS`` bits wide, containing a clock enable bit
|
||||
for each write port.
|
||||
This parameter is ``\WR_PORTS`` bits wide, containing a clock enable bit for
|
||||
each write port.
|
||||
|
||||
``\WR_CLK_POLARITY``
|
||||
This parameter is ``\WR_PORTS`` bits wide, containing a clock polarity
|
||||
bit for each write port.
|
||||
This parameter is ``\WR_PORTS`` bits wide, containing a clock polarity bit
|
||||
for each write port.
|
||||
|
||||
``\WR_PRIORITY_MASK``
|
||||
This parameter is ``\WR_PORTS*\WR_PORTS`` bits wide, containing a
|
||||
concatenation of all ``\PRIORITY_MASK`` values of the original
|
||||
`$memwr_v2` cells.
|
||||
concatenation of all ``\PRIORITY_MASK`` values of the original `$memwr_v2`
|
||||
cells.
|
||||
|
||||
The `$mem_v2` cell has the following ports:
|
||||
|
||||
``\RD_CLK``
|
||||
This input is ``\RD_PORTS`` bits wide, containing all clock signals for
|
||||
the read ports.
|
||||
This input is ``\RD_PORTS`` bits wide, containing all clock signals for the
|
||||
read ports.
|
||||
|
||||
``\RD_EN``
|
||||
This input is ``\RD_PORTS`` bits wide, containing all enable signals for
|
||||
the read ports.
|
||||
This input is ``\RD_PORTS`` bits wide, containing all enable signals for the
|
||||
read ports.
|
||||
|
||||
``\RD_ADDR``
|
||||
This input is ``\RD_PORTS*\ABITS`` bits wide, containing all address
|
||||
signals for the read ports.
|
||||
This input is ``\RD_PORTS*\ABITS`` bits wide, containing all address signals
|
||||
for the read ports.
|
||||
|
||||
``\RD_DATA``
|
||||
This output is ``\RD_PORTS*\WIDTH`` bits wide, containing all data
|
||||
signals for the read ports.
|
||||
This output is ``\RD_PORTS*\WIDTH`` bits wide, containing all data signals
|
||||
for the read ports.
|
||||
|
||||
``\RD_ARST``
|
||||
This input is ``\RD_PORTS`` bits wide, containing all asynchronous reset
|
||||
|
@ -593,26 +587,25 @@ The `$mem_v2` cell has the following ports:
|
|||
the write ports.
|
||||
|
||||
``\WR_EN``
|
||||
This input is ``\WR_PORTS*\WIDTH`` bits wide, containing all enable
|
||||
signals for the write ports.
|
||||
This input is ``\WR_PORTS*\WIDTH`` bits wide, containing all enable signals
|
||||
for the write ports.
|
||||
|
||||
``\WR_ADDR``
|
||||
This input is ``\WR_PORTS*\ABITS`` bits wide, containing all address
|
||||
signals for the write ports.
|
||||
This input is ``\WR_PORTS*\ABITS`` bits wide, containing all address signals
|
||||
for the write ports.
|
||||
|
||||
``\WR_DATA``
|
||||
This input is ``\WR_PORTS*\WIDTH`` bits wide, containing all data
|
||||
signals for the write ports.
|
||||
This input is ``\WR_PORTS*\WIDTH`` bits wide, containing all data signals for
|
||||
the write ports.
|
||||
|
||||
The `memory_collect` pass can be used to convert discrete
|
||||
`$memrd_v2`, `$memwr_v2`, and `$meminit_v2` cells belonging to the same
|
||||
memory to a single `$mem_v2` cell, whereas the `memory_unpack` pass
|
||||
performs the inverse operation. The `memory_dff` pass can combine
|
||||
asynchronous memory ports that are fed by or feeding registers into synchronous
|
||||
memory ports. The `memory_bram` pass can be used to recognize
|
||||
`$mem_v2` cells that can be implemented with a block RAM resource on an FPGA.
|
||||
The `memory_map` pass can be used to implement `$mem_v2` cells as
|
||||
basic logic: word-wide DFFs and address decoders.
|
||||
The `memory_collect` pass can be used to convert discrete `$memrd_v2`,
|
||||
`$memwr_v2`, and `$meminit_v2` cells belonging to the same memory to a single
|
||||
`$mem_v2` cell, whereas the `memory_unpack` pass performs the inverse operation.
|
||||
The `memory_dff` pass can combine asynchronous memory ports that are fed by or
|
||||
feeding registers into synchronous memory ports. The `memory_bram` pass can be
|
||||
used to recognize `$mem_v2` cells that can be implemented with a block RAM
|
||||
resource on an FPGA. The `memory_map` pass can be used to implement `$mem_v2`
|
||||
cells as basic logic: word-wide DFFs and address decoders.
|
||||
|
||||
Finite state machines
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
@ -622,15 +615,17 @@ Add a brief description of the `$fsm` cell type.
|
|||
Coarse arithmetics
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The `$macc` cell type represents a generalized multiply and accumulate operation. The cell is purely combinational. It outputs the result of summing up a sequence of products and other injected summands.
|
||||
The `$macc` cell type represents a generalized multiply and accumulate
|
||||
operation. The cell is purely combinational. It outputs the result of summing up
|
||||
a sequence of products and other injected summands.
|
||||
|
||||
.. code-block::
|
||||
|
||||
Y = 0 +- a0factor1 * a0factor2 +- a1factor1 * a1factor2 +- ...
|
||||
+ B[0] + B[1] + ...
|
||||
|
||||
The A port consists of concatenated pairs of multiplier inputs ("factors").
|
||||
A zero length factor2 acts as a constant 1, turning factor1 into a simple summand.
|
||||
The A port consists of concatenated pairs of multiplier inputs ("factors"). A
|
||||
zero length factor2 acts as a constant 1, turning factor1 into a simple summand.
|
||||
|
||||
In this pseudocode, ``u(foo)`` means an unsigned int that's foo bits long.
|
||||
|
||||
|
@ -644,8 +639,8 @@ In this pseudocode, ``u(foo)`` means an unsigned int that's foo bits long.
|
|||
...
|
||||
};
|
||||
|
||||
The cell's ``CONFIG`` parameter determines the layout of cell port ``A``.
|
||||
The CONFIG parameter carries the following information:
|
||||
The cell's ``CONFIG`` parameter determines the layout of cell port ``A``. The
|
||||
CONFIG parameter carries the following information:
|
||||
|
||||
.. code-block::
|
||||
|
||||
|
@ -714,8 +709,8 @@ Formal verification cells
|
|||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Add information about `$check`, `$assert`, `$assume`, `$live`, `$fair`,
|
||||
`$cover`, `$equiv`, `$initstate`, `$anyconst`, `$anyseq`,
|
||||
`$anyinit`, `$allconst`, `$allseq` cells.
|
||||
`$cover`, `$equiv`, `$initstate`, `$anyconst`, `$anyseq`, `$anyinit`,
|
||||
`$allconst`, `$allseq` cells.
|
||||
|
||||
Add information about `$ff` and `$_FF_` cells.
|
||||
|
||||
|
@ -733,8 +728,8 @@ has the following parameters:
|
|||
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.
|
||||
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:
|
||||
|
||||
|
@ -792,12 +787,13 @@ 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`)
|
||||
* ``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:
|
||||
|
||||
|
@ -1042,14 +1038,13 @@ Tables :numref:`%s <tab:CellLib_gates>`, :numref:`%s <tab:CellLib_gates_dffe>`,
|
|||
:numref:`%s <tab:CellLib_gates_adlatch>`, :numref:`%s
|
||||
<tab:CellLib_gates_dlatchsr>` and :numref:`%s <tab:CellLib_gates_sr>` list all
|
||||
cell types used for gate level logic. The cell types `$_BUF_`, `$_NOT_`,
|
||||
`$_AND_`, `$_NAND_`, `$_ANDNOT_`, `$_OR_`, `$_NOR_`, `$_ORNOT_`,
|
||||
`$_XOR_`, `$_XNOR_`, `$_AOI3_`, `$_OAI3_`, `$_AOI4_`, `$_OAI4_`,
|
||||
`$_MUX_`, `$_MUX4_`, `$_MUX8_`, `$_MUX16_` and `$_NMUX_` are used to
|
||||
model combinatorial logic. The cell type `$_TBUF_` is used to model tristate
|
||||
logic.
|
||||
`$_AND_`, `$_NAND_`, `$_ANDNOT_`, `$_OR_`, `$_NOR_`, `$_ORNOT_`, `$_XOR_`,
|
||||
`$_XNOR_`, `$_AOI3_`, `$_OAI3_`, `$_AOI4_`, `$_OAI4_`, `$_MUX_`, `$_MUX4_`,
|
||||
`$_MUX8_`, `$_MUX16_` and `$_NMUX_` are used to model combinatorial logic. The
|
||||
cell type `$_TBUF_` is used to model tristate logic.
|
||||
|
||||
The `$_MUX4_`, `$_MUX8_` and `$_MUX16_` cells are used to model wide
|
||||
muxes, and correspond to the following Verilog code:
|
||||
The `$_MUX4_`, `$_MUX8_` and `$_MUX16_` cells are used to model wide muxes, and
|
||||
correspond to the following Verilog code:
|
||||
|
||||
.. code-block:: verilog
|
||||
:force:
|
||||
|
@ -1114,8 +1109,8 @@ following Verilog code template:
|
|||
|
||||
The cell types ``$_DFFE_[NP][NP][01][NP]_`` implement d-type flip-flops with
|
||||
asynchronous reset and enable. The values in the table for these cell types
|
||||
relate to the following Verilog code template, where ``RST_EDGE`` is
|
||||
``posedge`` if ``RST_LVL`` if ``1``, and ``negedge`` otherwise.
|
||||
relate to the following Verilog code template, where ``RST_EDGE`` is ``posedge``
|
||||
if ``RST_LVL`` if ``1``, and ``negedge`` otherwise.
|
||||
|
||||
.. code-block:: verilog
|
||||
:force:
|
||||
|
@ -1156,8 +1151,8 @@ in the table for these cell types relate to the following Verilog code template:
|
|||
The cell types ``$_DFFSR_[NP][NP][NP]_`` implement d-type flip-flops with
|
||||
asynchronous set and reset. The values in the table for these cell types relate
|
||||
to the following Verilog code template, where ``RST_EDGE`` is ``posedge`` if
|
||||
``RST_LVL`` if ``1``, ``negedge`` otherwise, and ``SET_EDGE`` is ``posedge``
|
||||
if ``SET_LVL`` if ``1``, ``negedge`` otherwise.
|
||||
``RST_LVL`` if ``1``, ``negedge`` otherwise, and ``SET_EDGE`` is ``posedge`` if
|
||||
``SET_LVL`` if ``1``, ``negedge`` otherwise.
|
||||
|
||||
.. code-block:: verilog
|
||||
:force:
|
||||
|
@ -1173,8 +1168,8 @@ if ``SET_LVL`` if ``1``, ``negedge`` otherwise.
|
|||
The cell types ``$_DFFSRE_[NP][NP][NP][NP]_`` implement d-type flip-flops with
|
||||
asynchronous set and reset and enable. The values in the table for these cell
|
||||
types relate to the following Verilog code template, where ``RST_EDGE`` is
|
||||
``posedge`` if ``RST_LVL`` if ``1``, ``negedge`` otherwise, and ``SET_EDGE``
|
||||
is ``posedge`` if ``SET_LVL`` if ``1``, ``negedge`` otherwise.
|
||||
``posedge`` if ``RST_LVL`` if ``1``, ``negedge`` otherwise, and ``SET_EDGE`` is
|
||||
``posedge`` if ``SET_LVL`` if ``1``, ``negedge`` otherwise.
|
||||
|
||||
.. code-block:: verilog
|
||||
:force:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue