circt/test/firtool/module-hier.fir

83 lines
2.2 KiB
Plaintext

; RUN: firtool -export-module-hierarchy %s | FileCheck %s
; This test checks for interactions between hierarchy files generated by the
; HWExportModuleHierarchy pass and any renaming which may happen in the circuit.
;
; See: https://github.com/llvm/circt/issues/5478
FIRRTL version 4.0.0
circuit Foo: %[[
{
"class": "sifive.enterprise.firrtl.ModuleHierarchyAnnotation",
"filename": "dut_hier.json"
},
{
"class": "sifive.enterprise.firrtl.TestHarnessHierarchyAnnotation",
"filename": "tb_hier.json"
},
{
"class": "sifive.enterprise.firrtl.MarkDUTAnnotation",
"target": "~Foo|Bar"
},
{
"class": "firrtl.transforms.DontTouchAnnotation",
"target": "~Foo|Baz>a"
},
{
"class": "chisel3.util.experimental.ForceNameAnnotation",
"target": "~Foo|Foo>bar",
"name": "PREFIX_bar"
},
{
"class": "chisel3.util.experimental.ForceNameAnnotation",
"target": "~Foo|Bar>baz",
"name": "PREFIX_baz"
}
]]
module Baz:
wire a: UInt<1>
invalidate a
module Bar:
inst baz of Baz
public module Foo:
inst bar of Bar
; CHECK-LABEL: module Baz()
; CHECK-LABEL: module Bar()
; CHECK-NEXT: Baz [[Bar_baz:[_a-zA-Z0-9]+]]
; CHECK-LABEL: module Foo()
; CHECK-NEXT: Bar [[Foo_bar:[_a-zA-Z0-9]+]]
; CHECK-LABEL: FILE "dut_hier.json"
; CHECK: {
; CHECK-NEXT: "instance_name": "Bar",
; CHECK-NEXT: "module_name": "Bar",
; CHECK-NEXT: "instances": [
; CHECK-NEXT: {
; CHECK-NEXT: "instance_name": "[[Bar_baz]]",
; CHECK-NEXT: "module_name": "Baz",
; CHECK-NEXT: "instances": []
; CHECK-NEXT: }
; CHECK-NEXT: ]
; CHECK-NEXT: }
; CHECK-LABEL: FILE "tb_hier.json"
; CHECK: {
; CHECK-NEXT: "instance_name": "Foo",
; CHECK-NEXT: "module_name": "Foo",
; CHECK-NEXT: "instances": [
; CHECK-NEXT: {
; CHECK-NEXT: "instance_name": "[[Foo_bar]]",
; CHECK-NEXT: "module_name": "Bar",
; CHECK-NEXT: "instances": [
; CHECK-NEXT: {
; CHECK-NEXT: "instance_name": "[[Bar_baz]]",
; CHECK-NEXT: "module_name": "Baz",
; CHECK-NEXT: "instances": []
; CHECK-NEXT: }
; CHECK-NEXT: ]
; CHECK-NEXT: }
; CHECK-NEXT: ]
; CHECK-NEXT: }