aboutsummaryrefslogtreecommitdiffstats
path: root/src/VeriFuzz/Verilog/Mutate.hs
diff options
context:
space:
mode:
authorYann Herklotz <git@ymhg.org>2019-04-14 20:22:50 +0100
committerYann Herklotz <git@ymhg.org>2019-04-14 20:22:50 +0100
commit0cdf9599b83fd20e297903b0204aec4f390ee98d (patch)
tree6b83b0687beb681d2821e340bd26d8bda807cc91 /src/VeriFuzz/Verilog/Mutate.hs
parent8125f2c36d6306e20ce78f4056ef1b2fb6de61a2 (diff)
downloadverismith-0cdf9599b83fd20e297903b0204aec4f390ee98d.tar.gz
verismith-0cdf9599b83fd20e297903b0204aec4f390ee98d.zip
Add Bit vector instead of using numbers
Diffstat (limited to 'src/VeriFuzz/Verilog/Mutate.hs')
-rw-r--r--src/VeriFuzz/Verilog/Mutate.hs60
1 files changed, 29 insertions, 31 deletions
diff --git a/src/VeriFuzz/Verilog/Mutate.hs b/src/VeriFuzz/Verilog/Mutate.hs
index 536ebef..5fd007d 100644
--- a/src/VeriFuzz/Verilog/Mutate.hs
+++ b/src/VeriFuzz/Verilog/Mutate.hs
@@ -44,6 +44,7 @@ import qualified Data.Text as T
import VeriFuzz.Circuit.Internal
import VeriFuzz.Internal
import VeriFuzz.Verilog.AST
+import VeriFuzz.Verilog.BitVec
import VeriFuzz.Verilog.Internal
-- | Return if the 'Identifier' is in a 'ModDecl'.
@@ -172,10 +173,7 @@ instantiateModSpec_ outChar m = ModInst (m ^. modId) (m ^. modId) conns
filterChar :: Text -> [Identifier] -> [Identifier]
filterChar t ids =
- ids
- & traverse
- . getIdentifier
- %~ (\x -> fromMaybe x . safe head $ T.splitOn t x)
+ ids & traverse . _Wrapped %~ (\x -> fromMaybe x . safe head $ T.splitOn t x)
-- | Initialise all the inputs and outputs to a module.
--
@@ -221,8 +219,8 @@ declareMod :: [Port] -> ModDecl -> ModDecl
declareMod ports = initMod . (modItems %~ (decl ++))
where
decl = declf <$> ports
- declf p@(Port Reg _ _ _ _) = Decl Nothing p (Just 0)
- declf p = Decl Nothing p Nothing
+ declf p@(Port Reg _ _ _) = Decl Nothing p (Just 0)
+ declf p = Decl Nothing p Nothing
-- | Simplify an 'Expr' by using constants to remove 'BinaryOperator' and
-- simplify expressions. To make this work effectively, it should be run until
@@ -234,30 +232,30 @@ declareMod ports = initMod . (modItems %~ (decl ++))
-- >>> GenVerilog . simplify $ (Id "y") + (Id "x")
-- (y + x)
simplify :: Expr -> Expr
-simplify (BinOp (Number _ 1) BinAnd e) = e
-simplify (BinOp e BinAnd (Number _ 1)) = e
-simplify (BinOp (Number _ 0) BinAnd _) = Number 1 0
-simplify (BinOp _ BinAnd (Number _ 0)) = Number 1 0
-simplify (BinOp e BinPlus (Number _ 0)) = e
-simplify (BinOp (Number _ 0) BinPlus e) = e
-simplify (BinOp e BinMinus (Number _ 0)) = e
-simplify (BinOp (Number _ 0) BinMinus e) = e
-simplify (BinOp e BinTimes (Number _ 1)) = e
-simplify (BinOp (Number _ 1) BinTimes e) = e
-simplify (BinOp _ BinTimes (Number _ 0)) = Number 1 0
-simplify (BinOp (Number _ 0) BinTimes _) = Number 1 0
-simplify (BinOp e BinOr (Number _ 0)) = e
-simplify (BinOp (Number _ 0) BinOr e) = e
-simplify (BinOp e BinLSL (Number _ 0)) = e
-simplify (BinOp (Number _ 0) BinLSL e) = e
-simplify (BinOp e BinLSR (Number _ 0)) = e
-simplify (BinOp (Number _ 0) BinLSR e) = e
-simplify (BinOp e BinASL (Number _ 0)) = e
-simplify (BinOp (Number _ 0) BinASL e) = e
-simplify (BinOp e BinASR (Number _ 0)) = e
-simplify (BinOp (Number _ 0) BinASR e) = e
-simplify (UnOp UnPlus e) = e
-simplify e = e
+simplify (BinOp (Number (BitVec _ 1)) BinAnd e) = e
+simplify (BinOp e BinAnd (Number (BitVec _ 1))) = e
+simplify (BinOp (Number (BitVec _ 0)) BinAnd _) = Number 0
+simplify (BinOp _ BinAnd (Number (BitVec _ 0))) = Number 0
+simplify (BinOp e BinPlus (Number (BitVec _ 0))) = e
+simplify (BinOp (Number (BitVec _ 0)) BinPlus e) = e
+simplify (BinOp e BinMinus (Number (BitVec _ 0))) = e
+simplify (BinOp (Number (BitVec _ 0)) BinMinus e) = e
+simplify (BinOp e BinTimes (Number (BitVec _ 1))) = e
+simplify (BinOp (Number (BitVec _ 1)) BinTimes e) = e
+simplify (BinOp _ BinTimes (Number (BitVec _ 0))) = Number 0
+simplify (BinOp (Number (BitVec _ 0)) BinTimes _) = Number 0
+simplify (BinOp e BinOr (Number (BitVec _ 0))) = e
+simplify (BinOp (Number (BitVec _ 0)) BinOr e) = e
+simplify (BinOp e BinLSL (Number (BitVec _ 0))) = e
+simplify (BinOp (Number (BitVec _ 0)) BinLSL e) = e
+simplify (BinOp e BinLSR (Number (BitVec _ 0))) = e
+simplify (BinOp (Number (BitVec _ 0)) BinLSR e) = e
+simplify (BinOp e BinASL (Number (BitVec _ 0))) = e
+simplify (BinOp (Number (BitVec _ 0)) BinASL e) = e
+simplify (BinOp e BinASR (Number (BitVec _ 0))) = e
+simplify (BinOp (Number (BitVec _ 0)) BinASR e) = e
+simplify (UnOp UnPlus e) = e
+simplify e = e
-- | Remove all 'Identifier' that do not appeare in the input list from an
-- 'Expr'. The identifier will be replaced by @1'b0@, which can then later be
@@ -268,7 +266,7 @@ simplify e = e
removeId :: [Identifier] -> Expr -> Expr
removeId i = transform trans
where
- trans (Id ident) | ident `notElem` i = Number 1 0
+ trans (Id ident) | ident `notElem` i = Number 0
| otherwise = Id ident
trans e = e