diff options
author | Yann Herklotz <git@ymhg.org> | 2019-04-21 07:19:23 +0100 |
---|---|---|
committer | Yann Herklotz <git@ymhg.org> | 2019-04-21 07:19:35 +0100 |
commit | 879d1d3522d5693d8621164cfb09fb830ea2ef0c (patch) | |
tree | db52e8a9ce21e7c4233a859d2f45e6af5f8ce755 /src/VeriFuzz/Verilog/Gen.hs | |
parent | 8f7d6e4ee2941c592a33510687a724c4c733d403 (diff) | |
download | verismith-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.hs | 28 |
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 |