{-# OPTIONS --safe --cubical #-}
module Spartan6.Primitive.FDRE where
open import Spartan6.Prelude
open import Spartan6.Netlist.Expression
fdreStep : Bit → Bit → Bit → Bit → Bit
fdreStep data-in enable reset current =
mux reset (mux enable current data-in) low
fdreNext : ∀ {inputs registers}
→ Expr inputs registers
→ Expr inputs registers
→ Expr inputs registers
→ Expr inputs registers
→ Expr inputs registers
fdreNext data-in enable reset current =
select reset (select enable current data-in) (constant low)
eval-fdreNext : ∀ {inputs registers} external state data-in enable reset current
→ eval {inputs} {registers} external state
(fdreNext data-in enable reset current)
≡ fdreStep (eval external state data-in)
(eval external state enable)
(eval external state reset)
(eval external state current)
eval-fdreNext external state data-in enable reset current = refl
fdre-reset : ∀ data-in enable current
→ fdreStep data-in enable high current ≡ low
fdre-reset data-in enable current = refl
fdre-hold : ∀ data-in current
→ fdreStep data-in low low current ≡ current
fdre-hold data-in current = refl
fdre-load : ∀ data-in current
→ fdreStep data-in high low current ≡ data-in
fdre-load data-in current = refl