diff options
Diffstat (limited to 'src/Verismith/Fuzz.hs')
-rw-r--r-- | src/Verismith/Fuzz.hs | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/src/Verismith/Fuzz.hs b/src/Verismith/Fuzz.hs index 42c667e..c2c30a9 100644 --- a/src/Verismith/Fuzz.hs +++ b/src/Verismith/Fuzz.hs @@ -324,10 +324,6 @@ equivalence src = do where dir = fromText $ "equiv_" <> toText a <> "_" <> toText b -equivalenceEMI :: (MonadBaseControl IO m, MonadSh m, Show ann) => (SourceInfo ann) -> Fuzz m () -equivalenceEMI src = do - datadir <- fmap _fuzzDataDir askOpts - simulation :: (MonadIO m, MonadSh m, Show ann) => (SourceInfo ann) -> Fuzz m () simulation src = do datadir <- fmap _fuzzDataDir askOpts @@ -365,6 +361,31 @@ simulation src = do where dir = fromText $ "countereg_sim_" <> toText a +simulationEMI :: (MonadIO m, MonadSh m, Show ann) => (SourceInfo ann) -> Fuzz m () +simulationEMI src = do + datadir <- fmap _fuzzDataDir askOpts + synth <- passedSynthesis + counterEgs <- failEquivWithIdentityCE + vals <- liftIO $ generateByteString Nothing 32 20 + ident <- liftSh $ sim datadir vals Nothing defaultIdentitySynth + resTimes <- liftSh $ mapM (sim datadir vals (justPass $ snd ident)) synth + fuzzSimResults .= toSimResult defaultIcarusSim vals synth resTimes + liftSh + . inspect + $ (\(_, r) -> bimap show (T.unpack . T.take 10 . showBS) r) + <$> (ident : resTimes) + where + sim datadir b i a = toolRun ("simulation for " <> toText a) . runResultT $ do + make dir + pop dir $ do + liftSh $ do + cp (fromText ".." </> fromText (toText a) </> synthOutput a) $ + synthOutput a + writefile "rtl.v" $ genSource src + runSimIc datadir defaultIcarus a src b i + where + dir = fromText $ "countereg_sim_" <> toText a + failEquivWithIdentity :: (MonadSh m) => Fuzz m [SynthResult] failEquivWithIdentity = filter withIdentity . _fuzzSynthResults <$> get where @@ -610,24 +631,13 @@ fuzzEMI gen = do . propSeed ?~ seed' (tsynth, _) <- titleRun "Synthesis" $ synthesis src - (tequiv, _) <- - if (_fuzzOptsNoEquiv opts) - then return (0, mempty) - else titleRun "Equivalence Check" $ equivalenceEMI src (_, _) <- if (_fuzzOptsNoSim opts) then return (0, mempty) - else titleRun "Simulation" $ simulation src + else titleRun "Simulation" $ simulationEMI src fails <- failEquivWithIdentity failedSim <- failedSimulations synthFails <- failedSynthesis - redResult <- - whenMaybe - ( not (null failedSim && null fails && null synthFails) - && not (_fuzzOptsNoReduction opts) - ) - . titleRun "Reduction" - $ reduction src state_ <- get currdir <- liftSh pwd let vi = flip view state_ @@ -639,6 +649,6 @@ fuzzEMI gen = do (vi fuzzSynthStatus) size tsynth - tequiv - (getTime redResult) + 0 + 0 return report |