From c21077bf1e4edf5c72af558e500f93145bfccf0c Mon Sep 17 00:00:00 2001 From: John Demme Date: Fri, 14 Jul 2023 13:36:01 -0700 Subject: [PATCH] [HW][SV] Move string type from SV to HW (#5588) Closes #5576. Moving this since in the (near) future the verif dialect and HW module parameterization will be using string types. --- include/circt/Dialect/HW/HWTypes.td | 7 +++++++ include/circt/Dialect/SV/SVExpressions.td | 3 ++- include/circt/Dialect/SV/SVTypes.td | 7 ------- test/Conversion/ExportVerilog/sv-dialect.mlir | 4 ++-- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/include/circt/Dialect/HW/HWTypes.td b/include/circt/Dialect/HW/HWTypes.td index ac3fac170f59..cdc92d485072 100644 --- a/include/circt/Dialect/HW/HWTypes.td +++ b/include/circt/Dialect/HW/HWTypes.td @@ -76,6 +76,13 @@ def HWAggregateType : DialectType { + let summary = "String type"; + let description = "Defines a string type for the hw-centric dialects"; + + let mnemonic = "string"; +} + /// Points to a name within a module. def HWInnerRefAttr : Attr< CPred<"$_self.isa<::circt::hw::InnerRefAttr>()">, diff --git a/include/circt/Dialect/SV/SVExpressions.td b/include/circt/Dialect/SV/SVExpressions.td index 25495ebfc49a..34e2b398ce63 100644 --- a/include/circt/Dialect/SV/SVExpressions.td +++ b/include/circt/Dialect/SV/SVExpressions.td @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// include "mlir/Interfaces/InferTypeOpInterface.td" +include "circt/Dialect/HW/HWTypes.td" include "circt/Dialect/SV/SVTypes.td" def HWValueOrInOutType : AnyTypeOf<[HWValueType, InOutType]>; @@ -196,7 +197,7 @@ def ConstantStrOp : SVOp<"constantStr", [Pure]> { }]; let arguments = (ins StrAttr:$str); - let results = (outs StringType:$result); + let results = (outs HWStringType:$result); let assemblyFormat = " $str attr-dict"; } diff --git a/include/circt/Dialect/SV/SVTypes.td b/include/circt/Dialect/SV/SVTypes.td index b5ba10d2b49a..4a48eb4865b7 100644 --- a/include/circt/Dialect/SV/SVTypes.td +++ b/include/circt/Dialect/SV/SVTypes.td @@ -20,13 +20,6 @@ include "circt/Dialect/SV/SVDialect.td" // includable for other dialects, without polluting their output with SV types. class SVType : TypeDef { } -def StringType : SVType<"String"> { - let summary = "SystemVerilog string type"; - let description = "Defines the string type in verilog"; - - let mnemonic = "string"; -} - //===----------------------------------------------------------------------===// // InOut type and related helpers. //===----------------------------------------------------------------------===// diff --git a/test/Conversion/ExportVerilog/sv-dialect.mlir b/test/Conversion/ExportVerilog/sv-dialect.mlir index c9998d502d69..aaef29055578 100644 --- a/test/Conversion/ExportVerilog/sv-dialect.mlir +++ b/test/Conversion/ExportVerilog/sv-dialect.mlir @@ -1691,12 +1691,12 @@ hw.module @intrinsic(%clk: i1) -> (io1: i1, io2: i1, io3: i1, io4: i5) { // CHECK: assign io1 = clk === 1'bx %1 = sv.constantStr "foo" - %2 = sv.system "test$plusargs"(%1) : (!sv.string) -> i1 + %2 = sv.system "test$plusargs"(%1) : (!hw.string) -> i1 // CHECK: assign io2 = $test$plusargs("foo") %_pargs = sv.wire : !hw.inout %3 = sv.read_inout %_pargs : !hw.inout - %4 = sv.system "value$plusargs"(%1, %_pargs) : (!sv.string, !hw.inout) -> i1 + %4 = sv.system "value$plusargs"(%1, %_pargs) : (!hw.string, !hw.inout) -> i1 // CHECK: assign io3 = $value$plusargs("foo", [[tmp]]) // CHECK: assign io4 = [[tmp]]