aboutsummaryrefslogtreecommitdiffstats
path: root/src/VeriFuzz/Verilog/Gen.hs
diff options
context:
space:
mode:
authorYann Herklotz <git@ymhg.org>2019-04-21 07:19:23 +0100
committerYann Herklotz <git@ymhg.org>2019-04-21 07:19:35 +0100
commit879d1d3522d5693d8621164cfb09fb830ea2ef0c (patch)
treedb52e8a9ce21e7c4233a859d2f45e6af5f8ce755 /src/VeriFuzz/Verilog/Gen.hs
parent8f7d6e4ee2941c592a33510687a724c4c733d403 (diff)
downloadverismith-879d1d3522d5693d8621164cfb09fb830ea2ef0c.tar.gz
verismith-879d1d3522d5693d8621164cfb09fb830ea2ef0c.zip
Add support for more event lists
Diffstat (limited to 'src/VeriFuzz/Verilog/Gen.hs')
-rw-r--r--src/VeriFuzz/Verilog/Gen.hs28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/VeriFuzz/Verilog/Gen.hs b/src/VeriFuzz/Verilog/Gen.hs
index 8ff63ef..6159766 100644
--- a/src/VeriFuzz/Verilog/Gen.hs
+++ b/src/VeriFuzz/Verilog/Gen.hs
@@ -28,7 +28,7 @@ import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Reader hiding (local)
import Control.Monad.Trans.State.Strict
import Data.Foldable (fold)
-import Data.List.NonEmpty (toList)
+import Data.List.NonEmpty (NonEmpty (..), toList)
import qualified Data.Text as T
import Hedgehog (Gen)
import qualified Hedgehog.Gen as Hog
@@ -319,6 +319,32 @@ statement = do
]
where onDepth c n = if c ^. stmntDepth > 0 then n else 0
+recEventList :: NonEmpty Identifier -> Hog.Size -> Gen Event
+recEventList ids size
+ | size <= 0 = idgen
+ | size > 0 = Hog.choice
+ [ idgen
+ , EOr <$> recCall <*> recCall
+ ]
+ where
+ idgen = fmap EId . Hog.element $ toList ids
+ recCall = (recEventList ids (size `div` 2))
+
+eventList :: StateGen Event
+eventList = do
+ prob <- askProbability
+ context <- get
+ let defProb i = prob ^. probEventList . i
+ gen $ Hog.frequency
+ [ (defProb probEventListAll, return EAll)
+ , (defProb probEventListVar, case context ^. variables of
+ [] -> return EAll
+ x:xs -> Hog.sized . recEventList $ fmap toId (x :| xs))
+ , (defProb probEventListClk, return $ EPosEdge "clk")
+ ]
+ where
+ toId (Port _ _ _ i) = i
+
always :: StateGen ModItem
always = do
stat <- SeqBlock <$> some statement