library(retention) {
  cell("retention_cell") {
    ff(Q1, QN1) {
      clocked_on : "CK" ;
      next_state : "(D * !SE + SI * SE)" ;
      clear : "(((!B2B) * !Q2) + !RD)" ;
      preset : "((!B2B) * Q2)" ;
      clear_preset_var1 : "L" ;
      clear_preset_var2 : "H" ;
    }
    latch(Q2, QN2) {
      enable : "B1" ;
      data_in : "Q1" ;
    }
    pin(B1) {
      direction : input ;
    }
    pin(B2B) {
      direction : input ;
    }
    pin(CK) {
      clock : true ;
      direction : input ;
    }
    pin(D) {
      direction : input ;
    }
    pin(Q) {
      direction : output ;
      function : "Q1" ;
    }
    pin(RD) {
      direction : input ;
    }
    pin(SE) {
      direction : input ;
    }
    pin(SI) {
      direction : input ;
    }
  }
}
