aboutsummaryrefslogtreecommitdiffstats
path: root/src/VeriFuzz/Verilog/Gen.hs
diff options
context:
space:
mode:
authorYann Herklotz <git@ymhg.org>2019-04-23 13:31:21 +0100
committerYann Herklotz <git@ymhg.org>2019-04-23 13:31:21 +0100
commit66fc5b01be2011fa8f753231b1fc2243163c5bb8 (patch)
tree3ef7edb1f8ff0392dc2e617ce895926dc4c363da /src/VeriFuzz/Verilog/Gen.hs
parent08277fe043ae29296ce4a32bab569f524f88b859 (diff)
downloadverismith-66fc5b01be2011fa8f753231b1fc2243163c5bb8.tar.gz
verismith-66fc5b01be2011fa8f753231b1fc2243163c5bb8.zip
Fine tune the generation
Diffstat (limited to 'src/VeriFuzz/Verilog/Gen.hs')
-rw-r--r--src/VeriFuzz/Verilog/Gen.hs28
1 files changed, 13 insertions, 15 deletions
diff --git a/src/VeriFuzz/Verilog/Gen.hs b/src/VeriFuzz/Verilog/Gen.hs
index bf9f84d..592b4e7 100644
--- a/src/VeriFuzz/Verilog/Gen.hs
+++ b/src/VeriFuzz/Verilog/Gen.hs
@@ -218,12 +218,12 @@ exprWithContext prob l n
some :: StateGen a -> StateGen [a]
some f = do
- amount <- gen $ Hog.int (Hog.linear 1 100)
+ amount <- gen $ Hog.int (Hog.linear 1 50)
replicateM amount f
many :: StateGen a -> StateGen [a]
many f = do
- amount <- gen $ Hog.int (Hog.linear 0 100)
+ amount <- gen $ Hog.int (Hog.linear 0 50)
replicateM amount f
makeIdentifier :: T.Text -> StateGen Identifier
@@ -322,13 +322,10 @@ statement = do
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))
+ | 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
@@ -337,18 +334,19 @@ eventList = do
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 probEventListVar
+ , case context ^. variables of
+ [] -> return EAll
+ x : xs -> Hog.sized . recEventList $ toIds <$> (x :| xs)
+ )
, (defProb probEventListClk, return $ EPosEdge "clk")
]
- where
- toId (Port _ _ _ i) = i
+ where toIds (Port _ _ _ i) = i
always :: StateGen ModItem
always = do
events <- eventList
- stat <- SeqBlock <$> some statement
+ stat <- SeqBlock <$> some statement
return $ Always (EventCtrl events (Just stat))
instantiate :: ModDecl -> StateGen ModItem