mirror of https://github.com/zachjs/sv2v.git
Merge 519dbbeee1 into 7808819c48
This commit is contained in:
commit
00ee892109
|
|
@ -17,7 +17,7 @@ import Language.SystemVerilog.AST.ShowHelp
|
|||
import Language.SystemVerilog.AST.Expr (Expr)
|
||||
import Language.SystemVerilog.AST.Op (AsgnOp)
|
||||
import Language.SystemVerilog.AST.Type (Identifier)
|
||||
import {-# SOURCE #-} Language.SystemVerilog.AST.ModuleItem (ModuleItem)
|
||||
import {-# SOURCE #-} Language.SystemVerilog.AST.ModuleItem (ModuleItem, showGenModuleItem)
|
||||
|
||||
data GenItem
|
||||
= GenBlock Identifier [GenItem]
|
||||
|
|
@ -36,21 +36,23 @@ instance Show GenItem where
|
|||
printf "case (%s)\n%s\nendcase" (show e) bodyStr
|
||||
where bodyStr = indent $ unlines' $ map showGenCase cs
|
||||
show (GenIf e a GenNull) = printf "if (%s) %s" (show e) (showBareBlock a)
|
||||
-- showBlockedBranch avoids dangling else ambiguity
|
||||
show (GenIf e a b ) = printf "if (%s) %s\nelse %s" (show e) (showBlockedBranch a) (showBareBlock b)
|
||||
show (GenFor (x1, e1) c (x2, o2, e2) s) =
|
||||
printf "for (%s = %s; %s; %s %s %s) %s"
|
||||
x1 (show e1)
|
||||
(show c)
|
||||
x2 (show o2) (show e2)
|
||||
(showBareBlock s)
|
||||
show (GenNull) = ";"
|
||||
show (GenModuleItem item) = show item
|
||||
(showBlockedBranch s) -- Verilog 2001 requires this to be a block
|
||||
show (GenNull) = ""
|
||||
show (GenModuleItem item) = showGenModuleItem item
|
||||
|
||||
showBareBlock :: GenItem -> String
|
||||
showBareBlock (GenBlock x i) =
|
||||
printf "begin%s\n%s\nend"
|
||||
(if null x then "" else " : " ++ x)
|
||||
(indent $ show i)
|
||||
showBareBlock (GenNull) = ";"
|
||||
showBareBlock item = show item
|
||||
|
||||
showBlockedBranch :: GenItem -> String
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ module Language.SystemVerilog.AST.ModuleItem
|
|||
, NOutputGateKW (..)
|
||||
, AssignOption (..)
|
||||
, AssertionItem (..)
|
||||
, showGenModuleItem
|
||||
) where
|
||||
|
||||
import Data.List (intercalate)
|
||||
|
|
@ -94,6 +95,10 @@ showModportDecl (dir, ident, e) =
|
|||
then printf "%s %s" (show dir) ident
|
||||
else printf "%s .%s(%s)" (show dir) ident (show e)
|
||||
|
||||
showGenModuleItem :: ModuleItem -> String
|
||||
showGenModuleItem (Generate genItems) = show genItems
|
||||
showGenModuleItem item = show item
|
||||
|
||||
type PortBinding = (Identifier, Expr)
|
||||
|
||||
type ModportDecl = (Direction, Identifier, Expr)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,10 @@
|
|||
module Language.SystemVerilog.AST.ModuleItem
|
||||
( ModuleItem
|
||||
, showGenModuleItem
|
||||
) where
|
||||
|
||||
data ModuleItem
|
||||
instance Eq ModuleItem
|
||||
instance Show ModuleItem
|
||||
|
||||
showGenModuleItem :: ModuleItem -> String
|
||||
|
|
|
|||
|
|
@ -705,7 +705,11 @@ ModuleItem :: { [ModuleItem] }
|
|||
: NonGenerateModuleItem { $1 }
|
||||
| ConditionalGenerateConstruct { [Generate [$1]] }
|
||||
| LoopGenerateConstruct { [Generate [$1]] }
|
||||
| AttributeInstance ModuleItem { map (addMIAttr $1) $2 }
|
||||
| "generate" GenItems endgenerate { [Generate $2] }
|
||||
NonGenerateModuleItemA :: { [ModuleItem] }
|
||||
: NonGenerateModuleItem { $1 }
|
||||
| AttributeInstance NonGenerateModuleItemA { map (addMIAttr $1) $2 }
|
||||
NonGenerateModuleItem :: { [ModuleItem] }
|
||||
-- This item covers module instantiations and all declarations
|
||||
: ModuleDeclTokens(";") {% mapM recordPartUsed $ parseDTsAsModuleItems $1 }
|
||||
|
|
@ -721,7 +725,6 @@ NonGenerateModuleItem :: { [ModuleItem] }
|
|||
| TaskOrFunction { [MIPackageItem $1] }
|
||||
| NInputGateKW NInputGates ";" { map (\(a, b, c, d) -> NInputGate $1 a b c d) $2 }
|
||||
| NOutputGateKW NOutputGates ";" { map (\(a, b, c, d) -> NOutputGate $1 a b c d) $2 }
|
||||
| AttributeInstance ModuleItem { map (addMIAttr $1) $2 }
|
||||
| AssertionItem { [AssertionItem $1] }
|
||||
|
||||
AssignOption :: { AssignOption }
|
||||
|
|
@ -1469,8 +1472,7 @@ GenItems :: { [GenItem] }
|
|||
|
||||
GenItem :: { GenItem }
|
||||
: MITrace GenBlock { uncurry GenBlock $2 }
|
||||
| MITrace NonGenerateModuleItem { genItemsToGenItem $ map GenModuleItem $ addMITrace $1 $2 }
|
||||
| MITrace "generate" GenItems "endgenerate" { genItemsToGenItem $3 }
|
||||
| MITrace NonGenerateModuleItemA { genItemsToGenItem $ map GenModuleItem $ addMITrace $1 $2 }
|
||||
| MITrace ConditionalGenerateConstruct { $2 }
|
||||
| MITrace LoopGenerateConstruct { $2 }
|
||||
ConditionalGenerateConstruct :: { GenItem }
|
||||
|
|
|
|||
Loading…
Reference in New Issue