mirror of https://github.com/YosysHQ/yosys.git
106 lines
3.7 KiB
ReStructuredText
106 lines
3.7 KiB
ReStructuredText
.. role:: verilog(code)
|
|
:language: Verilog
|
|
|
|
Latch cells
|
|
-----------
|
|
|
|
The cell types `$_DLATCH_N_` and `$_DLATCH_P_` represent d-type latches.
|
|
|
|
.. table:: Cell types for basic latches
|
|
|
|
======================================= =============
|
|
Verilog Cell Type
|
|
======================================= =============
|
|
:verilog:`always @* if (!E) Q <= D` `$_DLATCH_N_`
|
|
:verilog:`always @* if (E) Q <= D` `$_DLATCH_P_`
|
|
======================================= =============
|
|
|
|
The cell types ``$_DLATCH_[NP][NP][01]_`` implement d-type latches with reset.
|
|
The values in the table for these cell types relate to the following Verilog
|
|
code template:
|
|
|
|
.. code-block:: verilog
|
|
:force:
|
|
|
|
always @*
|
|
if (R == RST_LVL)
|
|
Q <= RST_VAL;
|
|
else if (E == EN_LVL)
|
|
Q <= D;
|
|
|
|
.. table:: Cell types for gate level logic networks (latches with reset)
|
|
:name: tab:CellLib_gates_adlatch
|
|
|
|
============= ============== ============== ===============
|
|
:math:`EnLvl` :math:`RstLvl` :math:`RstVal` Cell Type
|
|
============= ============== ============== ===============
|
|
``0`` ``0`` ``0`` `$_DLATCH_NN0_`
|
|
``0`` ``0`` ``1`` `$_DLATCH_NN1_`
|
|
``0`` ``1`` ``0`` `$_DLATCH_NP0_`
|
|
``0`` ``1`` ``1`` `$_DLATCH_NP1_`
|
|
``1`` ``0`` ``0`` `$_DLATCH_PN0_`
|
|
``1`` ``0`` ``1`` `$_DLATCH_PN1_`
|
|
``1`` ``1`` ``0`` `$_DLATCH_PP0_`
|
|
``1`` ``1`` ``1`` `$_DLATCH_PP1_`
|
|
============= ============== ============== ===============
|
|
|
|
The cell types ``$_DLATCHSR_[NP][NP][NP]_`` implement d-type latches with set
|
|
and reset. The values in the table for these cell types relate to the following
|
|
Verilog code template:
|
|
|
|
.. code-block:: verilog
|
|
:force:
|
|
|
|
always @*
|
|
if (R == RST_LVL)
|
|
Q <= 0;
|
|
else if (S == SET_LVL)
|
|
Q <= 1;
|
|
else if (E == EN_LVL)
|
|
Q <= D;
|
|
|
|
.. table:: Cell types for gate level logic networks (latches with set and reset)
|
|
:name: tab:CellLib_gates_dlatchsr
|
|
|
|
============= ============== ============== =================
|
|
:math:`EnLvl` :math:`SetLvl` :math:`RstLvl` Cell Type
|
|
============= ============== ============== =================
|
|
``0`` ``0`` ``0`` `$_DLATCHSR_NNN_`
|
|
``0`` ``0`` ``1`` `$_DLATCHSR_NNP_`
|
|
``0`` ``1`` ``0`` `$_DLATCHSR_NPN_`
|
|
``0`` ``1`` ``1`` `$_DLATCHSR_NPP_`
|
|
``1`` ``0`` ``0`` `$_DLATCHSR_PNN_`
|
|
``1`` ``0`` ``1`` `$_DLATCHSR_PNP_`
|
|
``1`` ``1`` ``0`` `$_DLATCHSR_PPN_`
|
|
``1`` ``1`` ``1`` `$_DLATCHSR_PPP_`
|
|
============= ============== ============== =================
|
|
|
|
The cell types ``$_SR_[NP][NP]_`` implement sr-type latches. The values in the
|
|
table for these cell types relate to the following Verilog code template:
|
|
|
|
.. code-block:: verilog
|
|
:force:
|
|
|
|
always @*
|
|
if (R == RST_LVL)
|
|
Q <= 0;
|
|
else if (S == SET_LVL)
|
|
Q <= 1;
|
|
|
|
.. table:: Cell types for gate level logic networks (SR latches)
|
|
:name: tab:CellLib_gates_sr
|
|
|
|
============== ============== ==========
|
|
:math:`SetLvl` :math:`RstLvl` Cell Type
|
|
============== ============== ==========
|
|
``0`` ``0`` `$_SR_NN_`
|
|
``0`` ``1`` `$_SR_NP_`
|
|
``1`` ``0`` `$_SR_PN_`
|
|
``1`` ``1`` `$_SR_PP_`
|
|
============== ============== ==========
|
|
|
|
.. autocellgroup:: reg_latch
|
|
:members:
|
|
:source:
|
|
:linenos:
|