mirror of
				https://github.com/YosysHQ/yosys
				synced 2025-10-30 19:22:31 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			105 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			105 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:
 |