sv2v/Convert.hs

40 lines
860 B
Haskell
Raw Normal View History

{- sv2v
- Author: Zachary Snow <zach@zachjs.com>
-
- SystemVerilog to Verilog conversion
-}
module Convert (convert) where
import Language.SystemVerilog.AST
import qualified Convert.AlwaysKW
import qualified Convert.CaseKW
import qualified Convert.Logic
2019-02-18 09:59:17 +01:00
import qualified Convert.Typedef
import qualified Convert.PackedArrayFlatten
2019-02-20 21:22:26 +01:00
import qualified Convert.StarPort
2019-02-18 09:59:17 +01:00
type Phase = AST -> AST
phases :: [Phase]
phases =
[ Convert.AlwaysKW.convert
, Convert.CaseKW.convert
, Convert.Logic.convert
2019-02-18 09:59:17 +01:00
, Convert.Typedef.convert
, Convert.PackedArrayFlatten.convert
2019-02-20 21:22:26 +01:00
, Convert.StarPort.convert
]
run :: Phase
run = foldr (.) id phases
convert :: Phase
2019-02-18 09:59:17 +01:00
convert descriptions =
let descriptions' = run descriptions
in
2019-02-18 09:59:17 +01:00
if descriptions == descriptions'
then descriptions
else convert descriptions'