diff --git a/clash-prelude-hedgehog.cabal b/clash-prelude-hedgehog.cabal
--- a/clash-prelude-hedgehog.cabal
+++ b/clash-prelude-hedgehog.cabal
@@ -1,7 +1,7 @@
 cabal-version:      2.2
 
 name:               clash-prelude-hedgehog
-version:            1.6.6
+version:            1.8.0
 synopsis:           Hedgehog Generators for clash-prelude
 description:        Hedgehog Generators for clash-prelude
 bug-reports:        https://github.com/clash-lang/clash-compiler/issues
@@ -37,17 +37,18 @@
   hs-source-dirs: src
 
   exposed-modules:
+    Clash.Hedgehog.Annotations.SynthesisAttributes
     Clash.Hedgehog.Signal
     Clash.Hedgehog.Sized.BitVector
     Clash.Hedgehog.Sized.Index
+    Clash.Hedgehog.Sized.RTree
     Clash.Hedgehog.Sized.Signed
     Clash.Hedgehog.Sized.Unsigned
-    Clash.Hedgehog.Sized.RTree
     Clash.Hedgehog.Sized.Vector
 
   build-depends:
     ghc-typelits-knownnat     >= 0.7.2   && < 0.8,
     ghc-typelits-natnormalise >= 0.7.2   && < 0.8,
-    text                      >= 1.2.2   && < 1.4,
+    text                      >= 1.2.2   && < 2.1,
 
-    clash-prelude             == 1.6.6,
+    clash-prelude             == 1.8.0,
diff --git a/src/Clash/Hedgehog/Annotations/SynthesisAttributes.hs b/src/Clash/Hedgehog/Annotations/SynthesisAttributes.hs
new file mode 100644
--- /dev/null
+++ b/src/Clash/Hedgehog/Annotations/SynthesisAttributes.hs
@@ -0,0 +1,18 @@
+module Clash.Hedgehog.Annotations.SynthesisAttributes where
+
+import Clash.Annotations.SynthesisAttributes (Attr(..))
+
+import Hedgehog
+import qualified Hedgehog.Gen as Gen
+
+genAttr :: forall m. MonadGen m => Range Int -> m (Attr String)
+genAttr range =
+  Gen.choice
+    [ BoolAttr <$> genAlphaNum <*> Gen.bool
+    , IntegerAttr <$> genAlphaNum <*> genInteger
+    , StringAttr <$> genAlphaNum <*> genAlphaNum
+    , Attr <$> genAlphaNum
+    ]
+ where
+  genAlphaNum = Gen.string range Gen.alphaNum
+  genInteger  = toInteger <$> Gen.integral range
diff --git a/src/Clash/Hedgehog/Signal.hs b/src/Clash/Hedgehog/Signal.hs
--- a/src/Clash/Hedgehog/Signal.hs
+++ b/src/Clash/Hedgehog/Signal.hs
@@ -6,6 +6,8 @@
 Random generation of types from "Clash.Signal.Internal".
 -}
 
+{-# LANGUAGE CPP #-}
+
 module Clash.Hedgehog.Signal
   ( genSignal
   , genActiveEdge
@@ -14,7 +16,9 @@
   , genResetPolarity
   ) where
 
+#if !MIN_VERSION_base(4,18,0)
 import Control.Applicative (liftA2)
+#endif
 import Hedgehog (MonadGen)
 import qualified Hedgehog.Gen as Gen
 
diff --git a/src/Clash/Hedgehog/Sized/BitVector.hs b/src/Clash/Hedgehog/Sized/BitVector.hs
--- a/src/Clash/Hedgehog/Sized/BitVector.hs
+++ b/src/Clash/Hedgehog/Sized/BitVector.hs
@@ -8,6 +8,7 @@
 
 {-# OPTIONS_GHC -fplugin=GHC.TypeLits.KnownNat.Solver #-}
 
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE MagicHash #-}
 {-# LANGUAGE RankNTypes #-}
@@ -21,17 +22,23 @@
   , genSomeBitVector
   ) where
 
+#if !MIN_VERSION_base(4,16,0)
 import GHC.Natural (Natural)
+#endif
 import GHC.TypeNats
+#if MIN_VERSION_base(4,18,0)
+  hiding (SNat)
+#endif
 import Hedgehog (MonadGen, Range)
+import Hedgehog.Internal.Range (constantBounded, constant)
 import qualified Hedgehog.Gen as Gen
 
+import Clash.Class.BitPack (pack)
 import Clash.Promoted.Nat
 import Clash.Sized.Internal.BitVector
-import Clash.Sized.Vector (v2bv)
 import Clash.XException (errorX)
 
-import Clash.Hedgehog.Sized.Vector (genVec)
+import Clash.Hedgehog.Sized.Unsigned
 
 -- | Generate a bit which is guaranteed to be defined.
 -- This will either have the value 'low' or 'high'.
@@ -40,7 +47,7 @@
 genDefinedBit = Gen.element [low, high]
 
 -- | Generate a bit which is not guaranteed to be defined.
--- This will either have the value 'low' or 'high', or throw an 'XException'.
+-- This will either have the value 'low' or 'high', or throw an @XException@.
 --
 genBit :: (MonadGen m) => m Bit
 genBit = Gen.element [low, high, errorX "X"]
@@ -48,23 +55,20 @@
 -- | Generate a bit vector where all bits are defined.
 --
 genDefinedBitVector :: (MonadGen m, KnownNat n) => m (BitVector n)
-genDefinedBitVector =
-  Gen.frequency
-    [ (60, fmap v2bv (genVec genDefinedBit))
-    , (20, Gen.constant minBound)
-    , (20, Gen.constant maxBound)
-    ]
+genDefinedBitVector = pack <$> genUnsigned constantBounded
 
 -- | Generate a bit vector where some bits may be undefined.
 --
-genBitVector :: (MonadGen m, KnownNat n) => m (BitVector n)
+genBitVector :: forall m n . (MonadGen m, KnownNat n) => m (BitVector n)
 genBitVector =
   Gen.frequency
-    [ (55, fmap v2bv (genVec genBit))
-    , (15, Gen.constant minBound)
-    , (15, Gen.constant maxBound)
-    , (15, Gen.constant undefined#)
+    [ (70, BV <$> genNatural <*> genNatural)
+    , (10, Gen.constant minBound)
+    , (10, Gen.constant maxBound)
+    , (10, Gen.constant undefined#)
     ]
+ where
+  genNatural = Gen.integral $ constant 0 (2^natToNatural @n)
 
 data SomeBitVector atLeast where
   SomeBitVector :: SNat n -> BitVector (atLeast + n) -> SomeBitVector atLeast
diff --git a/src/Clash/Hedgehog/Sized/Index.hs b/src/Clash/Hedgehog/Sized/Index.hs
--- a/src/Clash/Hedgehog/Sized/Index.hs
+++ b/src/Clash/Hedgehog/Sized/Index.hs
@@ -8,6 +8,7 @@
 
 {-# OPTIONS_GHC -fplugin=GHC.TypeLits.KnownNat.Solver #-}
 
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE GADTs #-}
 
 module Clash.Hedgehog.Sized.Index
@@ -16,8 +17,13 @@
   , genSomeIndex
   ) where
 
+#if !MIN_VERSION_base(4,16,0)
 import GHC.Natural (Natural)
+#endif
 import GHC.TypeNats
+#if MIN_VERSION_base(4,18,0)
+  hiding (SNat)
+#endif
 import Hedgehog (MonadGen, Range)
 import qualified Hedgehog.Gen as Gen
 import qualified Hedgehog.Range as Range
diff --git a/src/Clash/Hedgehog/Sized/RTree.hs b/src/Clash/Hedgehog/Sized/RTree.hs
--- a/src/Clash/Hedgehog/Sized/RTree.hs
+++ b/src/Clash/Hedgehog/Sized/RTree.hs
@@ -8,6 +8,7 @@
 
 {-# OPTIONS_GHC -fplugin=GHC.TypeLits.KnownNat.Solver #-}
 
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE GADTs #-}
 
 module Clash.Hedgehog.Sized.RTree
@@ -17,8 +18,13 @@
   , genSomeRTree
   ) where
 
+#if !MIN_VERSION_base(4,16,0)
 import GHC.Natural (Natural)
+#endif
 import GHC.TypeNats
+#if MIN_VERSION_base(4,18,0)
+  hiding (SNat)
+#endif
 import Hedgehog (MonadGen, Range)
 import qualified Hedgehog.Gen as Gen
 
diff --git a/src/Clash/Hedgehog/Sized/Signed.hs b/src/Clash/Hedgehog/Sized/Signed.hs
--- a/src/Clash/Hedgehog/Sized/Signed.hs
+++ b/src/Clash/Hedgehog/Sized/Signed.hs
@@ -8,6 +8,7 @@
 
 {-# OPTIONS_GHC -fplugin=GHC.TypeLits.KnownNat.Solver #-}
 
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE GADTs #-}
 
 module Clash.Hedgehog.Sized.Signed
@@ -16,8 +17,13 @@
   , genSomeSigned
   ) where
 
+#if !MIN_VERSION_base(4,16,0)
 import GHC.Natural (Natural)
+#endif
 import GHC.TypeNats
+#if MIN_VERSION_base(4,18,0)
+  hiding (SNat)
+#endif
 import Hedgehog (MonadGen, Range)
 import qualified Hedgehog.Gen as Gen
 import qualified Hedgehog.Range as Range
diff --git a/src/Clash/Hedgehog/Sized/Unsigned.hs b/src/Clash/Hedgehog/Sized/Unsigned.hs
--- a/src/Clash/Hedgehog/Sized/Unsigned.hs
+++ b/src/Clash/Hedgehog/Sized/Unsigned.hs
@@ -8,6 +8,7 @@
 
 {-# OPTIONS_GHC -fplugin=GHC.TypeLits.KnownNat.Solver #-}
 
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE GADTs #-}
 
 module Clash.Hedgehog.Sized.Unsigned
@@ -16,8 +17,13 @@
   , genSomeUnsigned
   ) where
 
+#if !MIN_VERSION_base(4,16,0)
 import GHC.Natural (Natural)
+#endif
 import GHC.TypeNats
+#if MIN_VERSION_base(4,18,0)
+  hiding (SNat)
+#endif
 import Hedgehog (MonadGen, Range)
 import qualified Hedgehog.Gen as Gen
 import qualified Hedgehog.Range as Range
diff --git a/src/Clash/Hedgehog/Sized/Vector.hs b/src/Clash/Hedgehog/Sized/Vector.hs
--- a/src/Clash/Hedgehog/Sized/Vector.hs
+++ b/src/Clash/Hedgehog/Sized/Vector.hs
@@ -8,6 +8,7 @@
 
 {-# OPTIONS_GHC -fplugin=GHC.TypeLits.KnownNat.Solver #-}
 
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE GADTs #-}
 {-# LANGUAGE MagicHash #-}
 
@@ -20,8 +21,13 @@
 
 import Prelude hiding (repeat)
 
+#if !MIN_VERSION_base(4,16,0)
 import GHC.Natural (Natural)
+#endif
 import GHC.TypeNats
+#if MIN_VERSION_base(4,18,0)
+  hiding (SNat)
+#endif
 import Hedgehog (MonadGen, Range)
 import qualified Hedgehog.Gen as Gen
 
