From 9bab0448e32504cef764692018914f0f2f314911 Mon Sep 17 00:00:00 2001 From: Zachary Snow Date: Sat, 7 Jan 2023 18:26:23 -0700 Subject: [PATCH] drop explicit string type from parameters --- CHANGELOG.md | 4 ++++ src/Convert.hs | 2 ++ src/Convert/StringType.hs | 23 +++++++++++++++++++++++ sv2v.cabal | 1 + test/core/string_type.sv | 2 ++ test/core/string_type.v | 2 ++ test/core/string_type.vh | 19 +++++++++++++++++++ 7 files changed, 53 insertions(+) create mode 100644 src/Convert/StringType.hs create mode 100644 test/core/string_type.sv create mode 100644 test/core/string_type.v create mode 100644 test/core/string_type.vh diff --git a/CHANGELOG.md b/CHANGELOG.md index b33041b..79f3458 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ some designs * Fixed unneeded scoping of constant function calls used in type lookups +### New Features + +* `string` data type is now dropped from parameters and localparams + ### Other Enhancements * Added elaboration for accesses to fields of struct constants, which can diff --git a/src/Convert.hs b/src/Convert.hs index 593c5f4..e80cd75 100644 --- a/src/Convert.hs +++ b/src/Convert.hs @@ -47,6 +47,7 @@ import qualified Convert.ResolveBindings import qualified Convert.Simplify import qualified Convert.Stream import qualified Convert.StringParam +import qualified Convert.StringType import qualified Convert.Struct import qualified Convert.StructConst import qualified Convert.TFBlock @@ -71,6 +72,7 @@ finalPhases _ = , Convert.EmptyArgs.convert , Convert.FuncRet.convert , Convert.TFBlock.convert + , Convert.StringType.convert ] mainPhases :: Selector -> [Phase] diff --git a/src/Convert/StringType.hs b/src/Convert/StringType.hs new file mode 100644 index 0000000..d0b2ed0 --- /dev/null +++ b/src/Convert/StringType.hs @@ -0,0 +1,23 @@ +{- sv2v + - Author: Zachary Snow + - + - Drop explicit `string` data type from parameters and localparams + -} + +module Convert.StringType (convert) where + +import Convert.Traverse +import Language.SystemVerilog.AST + +convert :: [AST] -> [AST] +convert = map $ traverseDescriptions $ traverseModuleItems convertModuleItem + +convertModuleItem :: ModuleItem -> ModuleItem +convertModuleItem = traverseNodes id traverseDecl id id traverseStmt + +traverseStmt :: Stmt -> Stmt +traverseStmt = traverseNestedStmts $ traverseStmtDecls traverseDecl + +traverseDecl :: Decl -> Decl +traverseDecl (Param s (NonInteger TString) x e) = Param s UnknownType x e +traverseDecl other = other diff --git a/sv2v.cabal b/sv2v.cabal index 7abd994..f989435 100644 --- a/sv2v.cabal +++ b/sv2v.cabal @@ -100,6 +100,7 @@ executable sv2v Convert.Simplify Convert.Stream Convert.StringParam + Convert.StringType Convert.Struct Convert.StructConst Convert.TFBlock diff --git a/test/core/string_type.sv b/test/core/string_type.sv new file mode 100644 index 0000000..1cf1ef7 --- /dev/null +++ b/test/core/string_type.sv @@ -0,0 +1,2 @@ +`define TYPE string +`include "string_type.vh" diff --git a/test/core/string_type.v b/test/core/string_type.v new file mode 100644 index 0000000..522c62f --- /dev/null +++ b/test/core/string_type.v @@ -0,0 +1,2 @@ +`define TYPE +`include "string_type.vh" diff --git a/test/core/string_type.vh b/test/core/string_type.vh new file mode 100644 index 0000000..9c954bc --- /dev/null +++ b/test/core/string_type.vh @@ -0,0 +1,19 @@ +module mod; + parameter `TYPE P = "not"; + localparam `TYPE L = "here"; + initial begin + $display("mod.P = %s", P); + $display("mod.L = %s", L); + end +endmodule + +module top; + parameter `TYPE P = "param"; + localparam `TYPE L = "local"; + initial begin + $display("top.P = %s", P); + $display("top.L = %s", L); + end + mod m1(); + mod #("over") m2(); +endmodule