From 698e3b0b54f79ccb9199813314aab3083ae3feb5 Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Mon, 27 Jul 2020 19:04:41 -0600 Subject: [PATCH] fix unbased unsized binding conversion for instances with type parameters --- src/Convert/UnbasedUnsized.hs | 8 +++++++- test/basic/unbased_unsized.sv | 9 +++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Convert/UnbasedUnsized.hs b/src/Convert/UnbasedUnsized.hs index 465aee8..8e52ebb 100644 --- a/src/Convert/UnbasedUnsized.hs +++ b/src/Convert/UnbasedUnsized.hs @@ -47,13 +47,19 @@ collectPartsM _ = return () convertModuleItem :: Parts -> ModuleItem -> ModuleItem convertModuleItem parts (Instance moduleName params instanceName [] bindings) = - convertModuleItem' $ Instance moduleName params instanceName [] bindings' + if Map.member moduleName parts && not (any isTypeParam moduleItems) + then convertModuleItem' $ + Instance moduleName params instanceName [] bindings' + else Instance moduleName params instanceName [] bindings where bindings' = zipWith convertBinding bindings [0..] (portNames, moduleItems) = case Map.lookup moduleName parts of Nothing -> error $ "could not find module: " ++ moduleName Just partInfo -> partInfo + isTypeParam :: ModuleItem -> Bool + isTypeParam (MIPackageItem (Decl ParamType{})) = True + isTypeParam _ = False tag = Ident "~~uub~~" convertBinding :: PortBinding -> Int -> PortBinding convertBinding (portName, expr) idx = diff --git a/test/basic/unbased_unsized.sv b/test/basic/unbased_unsized.sv index b50305d..3f66bfd 100644 --- a/test/basic/unbased_unsized.sv +++ b/test/basic/unbased_unsized.sv @@ -130,9 +130,10 @@ endmodule module M(a, b, c, d); parameter W = 1; - input logic [W+0:1] a; - input logic [W+1:1] b; - input logic [W+2:1] c; - input logic [W+3:1] d; + parameter type T = logic; + input T [W+0:1] a; + input T [W+1:1] b; + input T [W+2:1] c; + input T [W+3:1] d; initial $display("M W=%0d %b %b %b %b", W, a, b, c, d); endmodule