{
  "schema_version": "uvm-wiki-ai.v1",
  "metadata": {
    "generated_at": "2026-11-04T08:14:04.595624+00:00",
    "source_root": "examples/demo_uvm",
    "source_fingerprint": "6ec02e77f042242e049d476cddde05e878985c634968b785605bf58d7b7044a8",
    "parser_requested": "auto",
    "parser_effective": "pyslang",
    "parser_strategy": "per_file_syntax",
    "parser_fallback_files": 0,
    "input": {
      "mode": "filelist",
      "filelists": [
        "filelist.f",
        "filelists/rtl.f"
      ],
      "listed_files": 4,
      "included_files": 11,
      "include_directives": 12,
      "macro_include_directives": 0,
      "unresolved_includes": [],
      "outside_root_includes": [],
      "include_dirs": [
        "tb/classes"
      ],
      "defines": [
        "DEMO_DATA_WIDTH=16"
      ],
      "ignored_options": [],
      "warnings": []
    },
    "cache": {
      "reused_files": 0,
      "reparsed_files": 15
    },
    "demo": {
      "source_revision": "82134333fab2a7a493cd5b13eac5709824c35202",
      "portable": true,
      "simulation_run": false,
      "limits": [
        "Static per-file syntax index, not simulator elaboration.",
        "UVM library definitions and uvm_macros.svh are external and are not bundled.",
        "Factory overrides, dynamic instances, and exact runtime binding are unresolved.",
        "Portable HTML uses embedded source; full-text source search requires upstream serve mode."
      ]
    }
  },
  "stats": {
    "files": 15,
    "symbols": 41,
    "classes": 11,
    "relations": 56,
    "ports": 2,
    "connections": 3,
    "components": 8,
    "unresolved_components": 0,
    "architecture_roots": 1,
    "roles": {
      "module": 2,
      "interface": 1,
      "package": 1,
      "sequence_item": 1,
      "function": 22,
      "config": 1,
      "sequence": 1,
      "task": 4,
      "sequencer": 1,
      "driver": 1,
      "monitor": 1,
      "agent": 1,
      "scoreboard": 1,
      "coverage": 1,
      "env": 1,
      "test": 1
    },
    "relation_kinds": {
      "import": 3,
      "include": 12,
      "config_db_set": 2,
      "extends": 11,
      "creates": 12,
      "config_db_get": 3,
      "declares_tlm_port": 2,
      "seq_item_connect": 1,
      "tlm_connect": 2,
      "has_member": 8
    }
  },
  "files": [
    {
      "path": "rtl/demo_dut.sv",
      "size": 519,
      "mtime_ns": 1793778806669288100,
      "sha256": "45629b652bed87353099617209dfa635a09f357e15874006537b4027c05f0810",
      "parser": "pyslang",
      "diagnostics": 0
    },
    {
      "path": "tb/demo_if.sv",
      "size": 505,
      "mtime_ns": 1793778806672292100,
      "sha256": "376f9140cd640751d534136d02260d998d880c4bb063732d449d45f11e5af4c1",
      "parser": "pyslang",
      "diagnostics": 0
    },
    {
      "path": "tb/demo_pkg.sv",
      "size": 428,
      "mtime_ns": 1793778806672292100,
      "sha256": "f3470143de97ba06129de81e866a04e34c35dd16648c796b9789b329f0c69119",
      "parser": "pyslang",
      "diagnostics": 25
    },
    {
      "path": "tb/demo_top.sv",
      "size": 603,
      "mtime_ns": 1793778806672292100,
      "sha256": "159d15a60676da7de8e612f7ec376c1066bfe0765e6af7192df086ccfb07a52e",
      "parser": "pyslang",
      "diagnostics": 0
    },
    {
      "path": "tb/classes/demo_item.svh",
      "size": 340,
      "mtime_ns": 1793778806671272800,
      "sha256": "8cc5abc2dd00ac3ce3b7b1004e4f603edcb02a980eab090028fb51834e2a8183",
      "parser": "pyslang",
      "diagnostics": 3
    },
    {
      "path": "tb/classes/demo_env_config.svh",
      "size": 411,
      "mtime_ns": 1793778806671272800,
      "sha256": "87b9fabb3c90c3e6ce3d39f03204164bb1516231f61f66a30b2f24a25676c9b8",
      "parser": "pyslang",
      "diagnostics": 4
    },
    {
      "path": "tb/classes/demo_sequence.svh",
      "size": 489,
      "mtime_ns": 1793778806672292100,
      "sha256": "25494eaddd436a05f452458ffff8441140575eb94c6fbd4a04a02a72aabd3506",
      "parser": "pyslang",
      "diagnostics": 2
    },
    {
      "path": "tb/classes/demo_sequencer.svh",
      "size": 233,
      "mtime_ns": 1793778806672292100,
      "sha256": "ee36a5ccbd7c914b45eac29233df084a9e0b382426d1a8a02bdb03be37eafc4b",
      "parser": "pyslang",
      "diagnostics": 1
    },
    {
      "path": "tb/classes/demo_driver.svh",
      "size": 845,
      "mtime_ns": 1793778806670289200,
      "sha256": "88b3bc8e51676b2c21b50cbccf4d3309d2b14c952b8ca7b8bd4ef5e48ff7653c",
      "parser": "pyslang",
      "diagnostics": 3
    },
    {
      "path": "tb/classes/demo_monitor.svh",
      "size": 884,
      "mtime_ns": 1793778806671272800,
      "sha256": "ba4c6b56eebc9415e8f63e0afa0d6d6023a1f2626b1180d918916bf7e76e7f8a",
      "parser": "pyslang",
      "diagnostics": 3
    },
    {
      "path": "tb/classes/demo_agent.svh",
      "size": 828,
      "mtime_ns": 1793778806670289200,
      "sha256": "8182c4082077a5771c2d43d8836a27eee7a7b3a48b2737de66d9f65f765764d2",
      "parser": "pyslang",
      "diagnostics": 1
    },
    {
      "path": "tb/classes/demo_scoreboard.svh",
      "size": 776,
      "mtime_ns": 1793778806671272800,
      "sha256": "391c6c4945717f986164e3bb11eb095412ea69ea85bb5585724d37affd47a53f",
      "parser": "pyslang",
      "diagnostics": 3
    },
    {
      "path": "tb/classes/demo_coverage.svh",
      "size": 584,
      "mtime_ns": 1793778806670289200,
      "sha256": "986fd3b1b04ba80de401ea336a5f48a6f7d6abaa21e2eb4139e17139cf058156",
      "parser": "pyslang",
      "diagnostics": 1
    },
    {
      "path": "tb/classes/demo_env.svh",
      "size": 982,
      "mtime_ns": 1793778806670289200,
      "sha256": "c6780262715ebae6d6cfc84c34fa230aea8a954f0d4bc90f8210a7cda6529597",
      "parser": "pyslang",
      "diagnostics": 1
    },
    {
      "path": "tb/classes/demo_smoke_test.svh",
      "size": 862,
      "mtime_ns": 1793778806672292100,
      "sha256": "edd337c5928665e303683b4d6ee7b9e78f0a336edead1c74aa6a6917b3f65620",
      "parser": "pyslang",
      "diagnostics": 2
    }
  ],
  "symbols": [
    {
      "id": "demo_dut",
      "kind": "module",
      "name": "demo_dut",
      "role": "module",
      "file": "rtl/demo_dut.sv",
      "line": 1
    },
    {
      "id": "demo_if",
      "kind": "interface",
      "name": "demo_if",
      "role": "interface",
      "file": "tb/demo_if.sv",
      "line": 5
    },
    {
      "id": "demo_pkg",
      "kind": "package",
      "name": "demo_pkg",
      "role": "package",
      "file": "tb/demo_pkg.sv",
      "line": 1
    },
    {
      "id": "demo_top",
      "kind": "module",
      "name": "demo_top",
      "role": "module",
      "file": "tb/demo_top.sv",
      "line": 1
    },
    {
      "id": "demo_item",
      "kind": "class",
      "name": "demo_item",
      "base": "uvm_sequence_item",
      "role": "sequence_item",
      "file": "tb/classes/demo_item.svh",
      "line": 1
    },
    {
      "id": "demo_item.new",
      "kind": "function",
      "name": "new",
      "owner": "demo_item",
      "role": "function",
      "file": "tb/classes/demo_item.svh",
      "line": 8
    },
    {
      "id": "demo_env_config",
      "kind": "class",
      "name": "demo_env_config",
      "base": "uvm_object",
      "role": "config",
      "file": "tb/classes/demo_env_config.svh",
      "line": 1
    },
    {
      "id": "demo_env_config.new",
      "kind": "function",
      "name": "new",
      "owner": "demo_env_config",
      "role": "function",
      "file": "tb/classes/demo_env_config.svh",
      "line": 10
    },
    {
      "id": "demo_sequence",
      "kind": "class",
      "name": "demo_sequence",
      "base": "uvm_sequence",
      "role": "sequence",
      "file": "tb/classes/demo_sequence.svh",
      "line": 1
    },
    {
      "id": "demo_sequence.new",
      "kind": "function",
      "name": "new",
      "owner": "demo_sequence",
      "role": "function",
      "file": "tb/classes/demo_sequence.svh",
      "line": 6
    },
    {
      "id": "demo_sequence.body",
      "kind": "task",
      "name": "body",
      "owner": "demo_sequence",
      "role": "task",
      "file": "tb/classes/demo_sequence.svh",
      "line": 10
    },
    {
      "id": "demo_sequencer",
      "kind": "class",
      "name": "demo_sequencer",
      "base": "uvm_sequencer",
      "role": "sequencer",
      "file": "tb/classes/demo_sequencer.svh",
      "line": 1
    },
    {
      "id": "demo_sequencer.new",
      "kind": "function",
      "name": "new",
      "owner": "demo_sequencer",
      "role": "function",
      "file": "tb/classes/demo_sequencer.svh",
      "line": 4
    },
    {
      "id": "demo_driver",
      "kind": "class",
      "name": "demo_driver",
      "base": "uvm_driver",
      "role": "driver",
      "file": "tb/classes/demo_driver.svh",
      "line": 1
    },
    {
      "id": "demo_driver.new",
      "kind": "function",
      "name": "new",
      "owner": "demo_driver",
      "role": "function",
      "file": "tb/classes/demo_driver.svh",
      "line": 6
    },
    {
      "id": "demo_driver.build_phase",
      "kind": "function",
      "name": "build_phase",
      "owner": "demo_driver",
      "role": "function",
      "file": "tb/classes/demo_driver.svh",
      "line": 10
    },
    {
      "id": "demo_driver.run_phase",
      "kind": "task",
      "name": "run_phase",
      "owner": "demo_driver",
      "role": "task",
      "file": "tb/classes/demo_driver.svh",
      "line": 16
    },
    {
      "id": "demo_monitor",
      "kind": "class",
      "name": "demo_monitor",
      "base": "uvm_monitor",
      "role": "monitor",
      "file": "tb/classes/demo_monitor.svh",
      "line": 1
    },
    {
      "id": "demo_monitor.new",
      "kind": "function",
      "name": "new",
      "owner": "demo_monitor",
      "role": "function",
      "file": "tb/classes/demo_monitor.svh",
      "line": 7
    },
    {
      "id": "demo_monitor.build_phase",
      "kind": "function",
      "name": "build_phase",
      "owner": "demo_monitor",
      "role": "function",
      "file": "tb/classes/demo_monitor.svh",
      "line": 11
    },
    {
      "id": "demo_monitor.run_phase",
      "kind": "task",
      "name": "run_phase",
      "owner": "demo_monitor",
      "role": "task",
      "file": "tb/classes/demo_monitor.svh",
      "line": 18
    },
    {
      "id": "demo_agent",
      "kind": "class",
      "name": "demo_agent",
      "base": "uvm_agent",
      "role": "agent",
      "file": "tb/classes/demo_agent.svh",
      "line": 1
    },
    {
      "id": "demo_agent.new",
      "kind": "function",
      "name": "new",
      "owner": "demo_agent",
      "role": "function",
      "file": "tb/classes/demo_agent.svh",
      "line": 8
    },
    {
      "id": "demo_agent.build_phase",
      "kind": "function",
      "name": "build_phase",
      "owner": "demo_agent",
      "role": "function",
      "file": "tb/classes/demo_agent.svh",
      "line": 12
    },
    {
      "id": "demo_agent.connect_phase",
      "kind": "function",
      "name": "connect_phase",
      "owner": "demo_agent",
      "role": "function",
      "file": "tb/classes/demo_agent.svh",
      "line": 21
    },
    {
      "id": "demo_scoreboard",
      "kind": "class",
      "name": "demo_scoreboard",
      "base": "uvm_scoreboard",
      "role": "scoreboard",
      "file": "tb/classes/demo_scoreboard.svh",
      "line": 1
    },
    {
      "id": "demo_scoreboard.new",
      "kind": "function",
      "name": "new",
      "owner": "demo_scoreboard",
      "role": "function",
      "file": "tb/classes/demo_scoreboard.svh",
      "line": 7
    },
    {
      "id": "demo_scoreboard.build_phase",
      "kind": "function",
      "name": "build_phase",
      "owner": "demo_scoreboard",
      "role": "function",
      "file": "tb/classes/demo_scoreboard.svh",
      "line": 11
    },
    {
      "id": "demo_scoreboard.write",
      "kind": "function",
      "name": "write",
      "owner": "demo_scoreboard",
      "role": "function",
      "file": "tb/classes/demo_scoreboard.svh",
      "line": 16
    },
    {
      "id": "demo_scoreboard.report_phase",
      "kind": "function",
      "name": "report_phase",
      "owner": "demo_scoreboard",
      "role": "function",
      "file": "tb/classes/demo_scoreboard.svh",
      "line": 21
    },
    {
      "id": "demo_coverage",
      "kind": "class",
      "name": "demo_coverage",
      "base": "uvm_subscriber",
      "role": "coverage",
      "file": "tb/classes/demo_coverage.svh",
      "line": 1
    },
    {
      "id": "demo_coverage.new",
      "kind": "function",
      "name": "new",
      "owner": "demo_coverage",
      "role": "function",
      "file": "tb/classes/demo_coverage.svh",
      "line": 14
    },
    {
      "id": "demo_coverage.write",
      "kind": "function",
      "name": "write",
      "owner": "demo_coverage",
      "role": "function",
      "file": "tb/classes/demo_coverage.svh",
      "line": 19
    },
    {
      "id": "demo_env",
      "kind": "class",
      "name": "demo_env",
      "base": "uvm_env",
      "role": "env",
      "file": "tb/classes/demo_env.svh",
      "line": 1
    },
    {
      "id": "demo_env.new",
      "kind": "function",
      "name": "new",
      "owner": "demo_env",
      "role": "function",
      "file": "tb/classes/demo_env.svh",
      "line": 9
    },
    {
      "id": "demo_env.build_phase",
      "kind": "function",
      "name": "build_phase",
      "owner": "demo_env",
      "role": "function",
      "file": "tb/classes/demo_env.svh",
      "line": 13
    },
    {
      "id": "demo_env.connect_phase",
      "kind": "function",
      "name": "connect_phase",
      "owner": "demo_env",
      "role": "function",
      "file": "tb/classes/demo_env.svh",
      "line": 23
    },
    {
      "id": "demo_smoke_test",
      "kind": "class",
      "name": "demo_smoke_test",
      "base": "uvm_test",
      "role": "test",
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 1
    },
    {
      "id": "demo_smoke_test.new",
      "kind": "function",
      "name": "new",
      "owner": "demo_smoke_test",
      "role": "function",
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 7
    },
    {
      "id": "demo_smoke_test.build_phase",
      "kind": "function",
      "name": "build_phase",
      "owner": "demo_smoke_test",
      "role": "function",
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 11
    },
    {
      "id": "demo_smoke_test.run_phase",
      "kind": "task",
      "name": "run_phase",
      "owner": "demo_smoke_test",
      "role": "task",
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 19
    }
  ],
  "relations": [
    {
      "kind": "import",
      "source": "tb/demo_pkg.sv",
      "target": "uvm_pkg",
      "file": "tb/demo_pkg.sv",
      "line": 2
    },
    {
      "kind": "include",
      "source": "tb/demo_pkg.sv",
      "target": "uvm_macros.svh",
      "file": "tb/demo_pkg.sv",
      "line": 3
    },
    {
      "kind": "include",
      "source": "tb/demo_pkg.sv",
      "target": "demo_item.svh",
      "file": "tb/demo_pkg.sv",
      "line": 5
    },
    {
      "kind": "include",
      "source": "tb/demo_pkg.sv",
      "target": "demo_env_config.svh",
      "file": "tb/demo_pkg.sv",
      "line": 6
    },
    {
      "kind": "include",
      "source": "tb/demo_pkg.sv",
      "target": "demo_sequence.svh",
      "file": "tb/demo_pkg.sv",
      "line": 7
    },
    {
      "kind": "include",
      "source": "tb/demo_pkg.sv",
      "target": "demo_sequencer.svh",
      "file": "tb/demo_pkg.sv",
      "line": 8
    },
    {
      "kind": "include",
      "source": "tb/demo_pkg.sv",
      "target": "demo_driver.svh",
      "file": "tb/demo_pkg.sv",
      "line": 9
    },
    {
      "kind": "include",
      "source": "tb/demo_pkg.sv",
      "target": "demo_monitor.svh",
      "file": "tb/demo_pkg.sv",
      "line": 10
    },
    {
      "kind": "include",
      "source": "tb/demo_pkg.sv",
      "target": "demo_agent.svh",
      "file": "tb/demo_pkg.sv",
      "line": 11
    },
    {
      "kind": "include",
      "source": "tb/demo_pkg.sv",
      "target": "demo_scoreboard.svh",
      "file": "tb/demo_pkg.sv",
      "line": 12
    },
    {
      "kind": "include",
      "source": "tb/demo_pkg.sv",
      "target": "demo_coverage.svh",
      "file": "tb/demo_pkg.sv",
      "line": 13
    },
    {
      "kind": "include",
      "source": "tb/demo_pkg.sv",
      "target": "demo_env.svh",
      "file": "tb/demo_pkg.sv",
      "line": 14
    },
    {
      "kind": "include",
      "source": "tb/demo_pkg.sv",
      "target": "demo_smoke_test.svh",
      "file": "tb/demo_pkg.sv",
      "line": 15
    },
    {
      "kind": "import",
      "source": "tb/demo_top.sv",
      "target": "uvm_pkg",
      "file": "tb/demo_top.sv",
      "line": 2
    },
    {
      "kind": "import",
      "source": "tb/demo_top.sv",
      "target": "demo_pkg",
      "file": "tb/demo_top.sv",
      "line": 3
    },
    {
      "kind": "config_db_set",
      "source": "tb/demo_top.sv",
      "target": "vif",
      "config_type": "virtual demo_if",
      "file": "tb/demo_top.sv",
      "line": 29,
      "scope": "*",
      "value": "demo_vif"
    },
    {
      "kind": "extends",
      "source": "demo_item",
      "target": "uvm_sequence_item",
      "file": "tb/classes/demo_item.svh",
      "line": 1
    },
    {
      "kind": "extends",
      "source": "demo_env_config",
      "target": "uvm_object",
      "file": "tb/classes/demo_env_config.svh",
      "line": 1
    },
    {
      "kind": "extends",
      "source": "demo_sequence",
      "target": "uvm_sequence",
      "file": "tb/classes/demo_sequence.svh",
      "line": 1
    },
    {
      "kind": "creates",
      "source": "demo_sequence",
      "target": "demo_item",
      "instance": "req",
      "file": "tb/classes/demo_sequence.svh",
      "line": 12
    },
    {
      "kind": "extends",
      "source": "demo_sequencer",
      "target": "uvm_sequencer",
      "file": "tb/classes/demo_sequencer.svh",
      "line": 1
    },
    {
      "kind": "extends",
      "source": "demo_driver",
      "target": "uvm_driver",
      "file": "tb/classes/demo_driver.svh",
      "line": 1
    },
    {
      "kind": "config_db_get",
      "source": "demo_driver",
      "target": "vif",
      "config_type": "virtual demo_if",
      "file": "tb/classes/demo_driver.svh",
      "line": 12,
      "scope": "",
      "value": "vif"
    },
    {
      "kind": "extends",
      "source": "demo_monitor",
      "target": "uvm_monitor",
      "file": "tb/classes/demo_monitor.svh",
      "line": 1
    },
    {
      "kind": "declares_tlm_port",
      "source": "demo_monitor",
      "target": "item_ap",
      "port_type": "uvm_analysis_port",
      "port_family": "analysis",
      "direction": "port",
      "transaction_types": [
        "demo_item"
      ],
      "file": "tb/classes/demo_monitor.svh",
      "line": 5
    },
    {
      "kind": "config_db_get",
      "source": "demo_monitor",
      "target": "vif",
      "config_type": "virtual demo_if",
      "file": "tb/classes/demo_monitor.svh",
      "line": 14,
      "scope": "",
      "value": "vif"
    },
    {
      "kind": "creates",
      "source": "demo_monitor",
      "target": "demo_item",
      "instance": "observed",
      "file": "tb/classes/demo_monitor.svh",
      "line": 23
    },
    {
      "kind": "extends",
      "source": "demo_agent",
      "target": "uvm_agent",
      "file": "tb/classes/demo_agent.svh",
      "line": 1
    },
    {
      "kind": "creates",
      "source": "demo_agent",
      "target": "demo_monitor",
      "instance": "monitor",
      "file": "tb/classes/demo_agent.svh",
      "line": 14,
      "parent": "this"
    },
    {
      "kind": "creates",
      "source": "demo_agent",
      "target": "demo_sequencer",
      "instance": "sequencer",
      "file": "tb/classes/demo_agent.svh",
      "line": 16,
      "parent": "this"
    },
    {
      "kind": "creates",
      "source": "demo_agent",
      "target": "demo_driver",
      "instance": "driver",
      "file": "tb/classes/demo_agent.svh",
      "line": 17,
      "parent": "this"
    },
    {
      "kind": "seq_item_connect",
      "source": "demo_agent.driver.seq_item_port",
      "target": "sequencer.seq_item_export",
      "context": "demo_agent",
      "lhs": "driver.seq_item_port",
      "rhs": "sequencer.seq_item_export",
      "file": "tb/classes/demo_agent.svh",
      "line": 24
    },
    {
      "kind": "extends",
      "source": "demo_scoreboard",
      "target": "uvm_scoreboard",
      "file": "tb/classes/demo_scoreboard.svh",
      "line": 1
    },
    {
      "kind": "declares_tlm_port",
      "source": "demo_scoreboard",
      "target": "item_imp",
      "port_type": "uvm_analysis_imp",
      "port_family": "analysis",
      "direction": "implementation",
      "transaction_types": [
        "demo_item",
        "demo_scoreboard"
      ],
      "file": "tb/classes/demo_scoreboard.svh",
      "line": 4
    },
    {
      "kind": "extends",
      "source": "demo_coverage",
      "target": "uvm_subscriber",
      "file": "tb/classes/demo_coverage.svh",
      "line": 1
    },
    {
      "kind": "extends",
      "source": "demo_env",
      "target": "uvm_env",
      "file": "tb/classes/demo_env.svh",
      "line": 1
    },
    {
      "kind": "creates",
      "source": "demo_env",
      "target": "demo_env_config",
      "instance": "cfg",
      "file": "tb/classes/demo_env.svh",
      "line": 16
    },
    {
      "kind": "config_db_get",
      "source": "demo_env",
      "target": "cfg",
      "config_type": "demo_env_config",
      "file": "tb/classes/demo_env.svh",
      "line": 15,
      "scope": "",
      "value": "cfg"
    },
    {
      "kind": "creates",
      "source": "demo_env",
      "target": "demo_agent",
      "instance": "agent",
      "file": "tb/classes/demo_env.svh",
      "line": 17,
      "parent": "this"
    },
    {
      "kind": "creates",
      "source": "demo_env",
      "target": "demo_scoreboard",
      "instance": "scoreboard",
      "file": "tb/classes/demo_env.svh",
      "line": 19,
      "parent": "this"
    },
    {
      "kind": "creates",
      "source": "demo_env",
      "target": "demo_coverage",
      "instance": "coverage",
      "file": "tb/classes/demo_env.svh",
      "line": 20,
      "parent": "this"
    },
    {
      "kind": "tlm_connect",
      "source": "demo_env.agent.monitor.item_ap",
      "target": "scoreboard.item_imp",
      "context": "demo_env",
      "lhs": "agent.monitor.item_ap",
      "rhs": "scoreboard.item_imp",
      "file": "tb/classes/demo_env.svh",
      "line": 25
    },
    {
      "kind": "tlm_connect",
      "source": "demo_env.agent.monitor.item_ap",
      "target": "coverage.analysis_export",
      "context": "demo_env",
      "lhs": "agent.monitor.item_ap",
      "rhs": "coverage.analysis_export",
      "file": "tb/classes/demo_env.svh",
      "line": 26
    },
    {
      "kind": "extends",
      "source": "demo_smoke_test",
      "target": "uvm_test",
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 1
    },
    {
      "kind": "creates",
      "source": "demo_smoke_test",
      "target": "demo_env_config",
      "instance": "cfg",
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 13
    },
    {
      "kind": "config_db_set",
      "source": "demo_smoke_test",
      "target": "cfg",
      "config_type": "demo_env_config",
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 15,
      "scope": "env",
      "value": "cfg"
    },
    {
      "kind": "creates",
      "source": "demo_smoke_test",
      "target": "demo_env",
      "instance": "env",
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 16,
      "parent": "this"
    },
    {
      "kind": "creates",
      "source": "demo_smoke_test",
      "target": "demo_sequence",
      "instance": "sequence",
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 22
    },
    {
      "kind": "has_member",
      "source": "demo_monitor",
      "target": "demo_item",
      "instance": "observed",
      "file": "tb/classes/demo_monitor.svh",
      "line": 19
    },
    {
      "kind": "has_member",
      "source": "demo_agent",
      "target": "demo_driver",
      "instance": "driver",
      "file": "tb/classes/demo_agent.svh",
      "line": 5
    },
    {
      "kind": "has_member",
      "source": "demo_agent",
      "target": "demo_monitor",
      "instance": "monitor",
      "file": "tb/classes/demo_agent.svh",
      "line": 6
    },
    {
      "kind": "has_member",
      "source": "demo_env",
      "target": "demo_agent",
      "instance": "agent",
      "file": "tb/classes/demo_env.svh",
      "line": 5
    },
    {
      "kind": "has_member",
      "source": "demo_env",
      "target": "demo_scoreboard",
      "instance": "scoreboard",
      "file": "tb/classes/demo_env.svh",
      "line": 6
    },
    {
      "kind": "has_member",
      "source": "demo_env",
      "target": "demo_coverage",
      "instance": "coverage",
      "file": "tb/classes/demo_env.svh",
      "line": 7
    },
    {
      "kind": "has_member",
      "source": "demo_smoke_test",
      "target": "demo_env_config",
      "instance": "cfg",
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 5
    },
    {
      "kind": "has_member",
      "source": "demo_smoke_test",
      "target": "demo_sequence",
      "instance": "sequence",
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 20
    }
  ],
  "hierarchies": {
    "topology": {
      "roots": [
        "demo_smoke_test"
      ],
      "children": {
        "demo_sequence": [
          {
            "id": "demo_item",
            "instance": "req",
            "kind": "creates",
            "file": "tb/classes/demo_sequence.svh",
            "line": 12
          }
        ],
        "demo_monitor": [
          {
            "id": "demo_item",
            "instance": "observed",
            "kind": "creates",
            "file": "tb/classes/demo_monitor.svh",
            "line": 23
          }
        ],
        "demo_agent": [
          {
            "id": "demo_driver",
            "instance": "driver",
            "kind": "creates",
            "file": "tb/classes/demo_agent.svh",
            "line": 17
          },
          {
            "id": "demo_monitor",
            "instance": "monitor",
            "kind": "creates",
            "file": "tb/classes/demo_agent.svh",
            "line": 14
          },
          {
            "id": "demo_sequencer",
            "instance": "sequencer",
            "kind": "creates",
            "file": "tb/classes/demo_agent.svh",
            "line": 16
          }
        ],
        "demo_env": [
          {
            "id": "demo_agent",
            "instance": "agent",
            "kind": "creates",
            "file": "tb/classes/demo_env.svh",
            "line": 17
          },
          {
            "id": "demo_env_config",
            "instance": "cfg",
            "kind": "creates",
            "file": "tb/classes/demo_env.svh",
            "line": 16
          },
          {
            "id": "demo_coverage",
            "instance": "coverage",
            "kind": "creates",
            "file": "tb/classes/demo_env.svh",
            "line": 20
          },
          {
            "id": "demo_scoreboard",
            "instance": "scoreboard",
            "kind": "creates",
            "file": "tb/classes/demo_env.svh",
            "line": 19
          }
        ],
        "demo_smoke_test": [
          {
            "id": "demo_env_config",
            "instance": "cfg",
            "kind": "creates",
            "file": "tb/classes/demo_smoke_test.svh",
            "line": 13
          },
          {
            "id": "demo_env",
            "instance": "env",
            "kind": "creates",
            "file": "tb/classes/demo_smoke_test.svh",
            "line": 16
          },
          {
            "id": "demo_sequence",
            "instance": "sequence",
            "kind": "creates",
            "file": "tb/classes/demo_smoke_test.svh",
            "line": 22
          }
        ]
      }
    },
    "inheritance": {
      "roots": [
        "uvm_agent",
        "uvm_driver",
        "uvm_env",
        "uvm_monitor",
        "uvm_object",
        "uvm_scoreboard",
        "uvm_sequence",
        "uvm_sequence_item",
        "uvm_sequencer",
        "uvm_subscriber",
        "uvm_test"
      ],
      "children": {
        "uvm_sequence_item": [
          {
            "id": "demo_item",
            "instance": null,
            "kind": "extends",
            "file": "tb/classes/demo_item.svh",
            "line": 1
          }
        ],
        "uvm_object": [
          {
            "id": "demo_env_config",
            "instance": null,
            "kind": "extends",
            "file": "tb/classes/demo_env_config.svh",
            "line": 1
          }
        ],
        "uvm_sequence": [
          {
            "id": "demo_sequence",
            "instance": null,
            "kind": "extends",
            "file": "tb/classes/demo_sequence.svh",
            "line": 1
          }
        ],
        "uvm_sequencer": [
          {
            "id": "demo_sequencer",
            "instance": null,
            "kind": "extends",
            "file": "tb/classes/demo_sequencer.svh",
            "line": 1
          }
        ],
        "uvm_driver": [
          {
            "id": "demo_driver",
            "instance": null,
            "kind": "extends",
            "file": "tb/classes/demo_driver.svh",
            "line": 1
          }
        ],
        "uvm_monitor": [
          {
            "id": "demo_monitor",
            "instance": null,
            "kind": "extends",
            "file": "tb/classes/demo_monitor.svh",
            "line": 1
          }
        ],
        "uvm_agent": [
          {
            "id": "demo_agent",
            "instance": null,
            "kind": "extends",
            "file": "tb/classes/demo_agent.svh",
            "line": 1
          }
        ],
        "uvm_scoreboard": [
          {
            "id": "demo_scoreboard",
            "instance": null,
            "kind": "extends",
            "file": "tb/classes/demo_scoreboard.svh",
            "line": 1
          }
        ],
        "uvm_subscriber": [
          {
            "id": "demo_coverage",
            "instance": null,
            "kind": "extends",
            "file": "tb/classes/demo_coverage.svh",
            "line": 1
          }
        ],
        "uvm_env": [
          {
            "id": "demo_env",
            "instance": null,
            "kind": "extends",
            "file": "tb/classes/demo_env.svh",
            "line": 1
          }
        ],
        "uvm_test": [
          {
            "id": "demo_smoke_test",
            "instance": null,
            "kind": "extends",
            "file": "tb/classes/demo_smoke_test.svh",
            "line": 1
          }
        ]
      }
    }
  },
  "uvm_architecture": {
    "schema_version": "uvm-architecture.v2",
    "inference": {
      "mode": "static_source",
      "runtime_elaborated": false,
      "evidence": [
        "component inheritance",
        "factory create",
        "component member declaration",
        "TLM connect call",
        "config-db virtual interface access"
      ],
      "limitations": [
        "factory overrides",
        "conditional build paths",
        "dynamic instance counts",
        "runtime config effects",
        "exact BFM and DUT binding"
      ]
    },
    "default_root": "demo_smoke_test",
    "roots": [
      {
        "type": "demo_smoke_test",
        "role": "test",
        "child_count": 1,
        "descendant_type_count": 7,
        "file": "tb/classes/demo_smoke_test.svh",
        "line": 1
      }
    ],
    "components": {
      "demo_agent": {
        "type": "demo_agent",
        "role": "agent",
        "base": "uvm_agent",
        "file": "tb/classes/demo_agent.svh",
        "line": 1,
        "classification": "uvm_base",
        "children": [
          {
            "instance": "sequencer",
            "type": "demo_sequencer",
            "role": "sequencer",
            "relation": "creates",
            "declared_in": "demo_agent",
            "file": "tb/classes/demo_agent.svh",
            "line": 16,
            "confidence": "high",
            "inherited": false
          },
          {
            "instance": "driver",
            "type": "demo_driver",
            "role": "driver",
            "relation": "creates",
            "declared_in": "demo_agent",
            "file": "tb/classes/demo_agent.svh",
            "line": 17,
            "confidence": "high",
            "inherited": false
          },
          {
            "instance": "monitor",
            "type": "demo_monitor",
            "role": "monitor",
            "relation": "creates",
            "declared_in": "demo_agent",
            "file": "tb/classes/demo_agent.svh",
            "line": 14,
            "confidence": "high",
            "inherited": false
          }
        ],
        "auxiliaries": [],
        "ports": [],
        "connections": [
          {
            "kind": "seq_item_connect",
            "lhs": "driver.seq_item_port",
            "rhs": "sequencer.seq_item_export",
            "declared_in": "demo_agent",
            "file": "tb/classes/demo_agent.svh",
            "line": 24,
            "inherited": false,
            "context": "demo_agent",
            "source_endpoint": {
              "expression": "driver.seq_item_port",
              "requested_path": [
                "driver"
              ],
              "instance_path": [
                "driver"
              ],
              "owner_type": "demo_driver",
              "owner_role": "driver",
              "port": "seq_item_port",
              "path_resolved": true,
              "port_declared": false,
              "confidence": "medium"
            },
            "target_endpoint": {
              "expression": "sequencer.seq_item_export",
              "requested_path": [
                "sequencer"
              ],
              "instance_path": [
                "sequencer"
              ],
              "owner_type": "demo_sequencer",
              "owner_role": "sequencer",
              "port": "seq_item_export",
              "path_resolved": true,
              "port_declared": false,
              "confidence": "medium"
            },
            "resolved": true,
            "confidence": "high"
          }
        ],
        "config_accesses": [],
        "virtual_interfaces": [],
        "child_count": 3,
        "declared_child_count": 3,
        "inherited_child_count": 0,
        "auxiliary_count": 0,
        "descendant_type_count": 3,
        "port_count": 0,
        "connection_count": 1
      },
      "demo_coverage": {
        "type": "demo_coverage",
        "role": "coverage",
        "base": "uvm_subscriber",
        "file": "tb/classes/demo_coverage.svh",
        "line": 1,
        "classification": "uvm_base",
        "children": [],
        "auxiliaries": [],
        "ports": [],
        "connections": [],
        "config_accesses": [],
        "virtual_interfaces": [],
        "child_count": 0,
        "declared_child_count": 0,
        "inherited_child_count": 0,
        "auxiliary_count": 0,
        "descendant_type_count": 0,
        "port_count": 0,
        "connection_count": 0
      },
      "demo_driver": {
        "type": "demo_driver",
        "role": "driver",
        "base": "uvm_driver",
        "file": "tb/classes/demo_driver.svh",
        "line": 1,
        "classification": "uvm_base",
        "children": [],
        "auxiliaries": [],
        "ports": [],
        "connections": [],
        "config_accesses": [
          {
            "operation": "get",
            "field": "vif",
            "config_type": "virtual demo_if",
            "scope": "",
            "value": "vif",
            "declared_in": "demo_driver",
            "file": "tb/classes/demo_driver.svh",
            "line": 12,
            "inherited": false
          }
        ],
        "virtual_interfaces": [
          {
            "type": "demo_if",
            "field": "vif",
            "operation": "get",
            "scope": "",
            "declared_in": "demo_driver",
            "inherited": false,
            "file": "tb/classes/demo_driver.svh",
            "line": 12,
            "confidence": "high"
          }
        ],
        "child_count": 0,
        "declared_child_count": 0,
        "inherited_child_count": 0,
        "auxiliary_count": 0,
        "descendant_type_count": 0,
        "port_count": 0,
        "connection_count": 0
      },
      "demo_env": {
        "type": "demo_env",
        "role": "env",
        "base": "uvm_env",
        "file": "tb/classes/demo_env.svh",
        "line": 1,
        "classification": "uvm_base",
        "children": [
          {
            "instance": "agent",
            "type": "demo_agent",
            "role": "agent",
            "relation": "creates",
            "declared_in": "demo_env",
            "file": "tb/classes/demo_env.svh",
            "line": 17,
            "confidence": "high",
            "inherited": false
          },
          {
            "instance": "scoreboard",
            "type": "demo_scoreboard",
            "role": "scoreboard",
            "relation": "creates",
            "declared_in": "demo_env",
            "file": "tb/classes/demo_env.svh",
            "line": 19,
            "confidence": "high",
            "inherited": false
          },
          {
            "instance": "coverage",
            "type": "demo_coverage",
            "role": "coverage",
            "relation": "creates",
            "declared_in": "demo_env",
            "file": "tb/classes/demo_env.svh",
            "line": 20,
            "confidence": "high",
            "inherited": false
          }
        ],
        "auxiliaries": [
          {
            "instance": "cfg",
            "type": "demo_env_config",
            "role": "config",
            "relation": "creates",
            "declared_in": "demo_env",
            "file": "tb/classes/demo_env.svh",
            "line": 16,
            "confidence": "high",
            "inherited": false
          }
        ],
        "ports": [],
        "connections": [
          {
            "kind": "tlm_connect",
            "lhs": "agent.monitor.item_ap",
            "rhs": "scoreboard.item_imp",
            "declared_in": "demo_env",
            "file": "tb/classes/demo_env.svh",
            "line": 25,
            "inherited": false,
            "context": "demo_env",
            "source_endpoint": {
              "expression": "agent.monitor.item_ap",
              "requested_path": [
                "agent",
                "monitor"
              ],
              "instance_path": [
                "agent",
                "monitor"
              ],
              "owner_type": "demo_monitor",
              "owner_role": "monitor",
              "port": "item_ap",
              "path_resolved": true,
              "port_declared": true,
              "confidence": "high",
              "port_type": "uvm_analysis_port",
              "family": "analysis",
              "direction": "port",
              "transaction_types": [
                "demo_item"
              ]
            },
            "target_endpoint": {
              "expression": "scoreboard.item_imp",
              "requested_path": [
                "scoreboard"
              ],
              "instance_path": [
                "scoreboard"
              ],
              "owner_type": "demo_scoreboard",
              "owner_role": "scoreboard",
              "port": "item_imp",
              "path_resolved": true,
              "port_declared": true,
              "confidence": "high",
              "port_type": "uvm_analysis_imp",
              "family": "analysis",
              "direction": "implementation",
              "transaction_types": [
                "demo_item",
                "demo_scoreboard"
              ]
            },
            "resolved": true,
            "confidence": "high"
          },
          {
            "kind": "tlm_connect",
            "lhs": "agent.monitor.item_ap",
            "rhs": "coverage.analysis_export",
            "declared_in": "demo_env",
            "file": "tb/classes/demo_env.svh",
            "line": 26,
            "inherited": false,
            "context": "demo_env",
            "source_endpoint": {
              "expression": "agent.monitor.item_ap",
              "requested_path": [
                "agent",
                "monitor"
              ],
              "instance_path": [
                "agent",
                "monitor"
              ],
              "owner_type": "demo_monitor",
              "owner_role": "monitor",
              "port": "item_ap",
              "path_resolved": true,
              "port_declared": true,
              "confidence": "high",
              "port_type": "uvm_analysis_port",
              "family": "analysis",
              "direction": "port",
              "transaction_types": [
                "demo_item"
              ]
            },
            "target_endpoint": {
              "expression": "coverage.analysis_export",
              "requested_path": [
                "coverage"
              ],
              "instance_path": [
                "coverage"
              ],
              "owner_type": "demo_coverage",
              "owner_role": "coverage",
              "port": "analysis_export",
              "path_resolved": true,
              "port_declared": false,
              "confidence": "medium"
            },
            "resolved": true,
            "confidence": "high"
          }
        ],
        "config_accesses": [
          {
            "operation": "get",
            "field": "cfg",
            "config_type": "demo_env_config",
            "scope": "",
            "value": "cfg",
            "declared_in": "demo_env",
            "file": "tb/classes/demo_env.svh",
            "line": 15,
            "inherited": false
          }
        ],
        "virtual_interfaces": [],
        "child_count": 3,
        "declared_child_count": 3,
        "inherited_child_count": 0,
        "auxiliary_count": 1,
        "descendant_type_count": 6,
        "port_count": 0,
        "connection_count": 2
      },
      "demo_monitor": {
        "type": "demo_monitor",
        "role": "monitor",
        "base": "uvm_monitor",
        "file": "tb/classes/demo_monitor.svh",
        "line": 1,
        "classification": "uvm_base",
        "children": [],
        "auxiliaries": [],
        "ports": [
          {
            "name": "item_ap",
            "port_type": "uvm_analysis_port",
            "family": "analysis",
            "direction": "port",
            "transaction_types": [
              "demo_item"
            ],
            "declared_in": "demo_monitor",
            "file": "tb/classes/demo_monitor.svh",
            "line": 5,
            "inherited": false
          }
        ],
        "connections": [],
        "config_accesses": [
          {
            "operation": "get",
            "field": "vif",
            "config_type": "virtual demo_if",
            "scope": "",
            "value": "vif",
            "declared_in": "demo_monitor",
            "file": "tb/classes/demo_monitor.svh",
            "line": 14,
            "inherited": false
          }
        ],
        "virtual_interfaces": [
          {
            "type": "demo_if",
            "field": "vif",
            "operation": "get",
            "scope": "",
            "declared_in": "demo_monitor",
            "inherited": false,
            "file": "tb/classes/demo_monitor.svh",
            "line": 14,
            "confidence": "high"
          }
        ],
        "child_count": 0,
        "declared_child_count": 0,
        "inherited_child_count": 0,
        "auxiliary_count": 0,
        "descendant_type_count": 0,
        "port_count": 1,
        "connection_count": 0
      },
      "demo_scoreboard": {
        "type": "demo_scoreboard",
        "role": "scoreboard",
        "base": "uvm_scoreboard",
        "file": "tb/classes/demo_scoreboard.svh",
        "line": 1,
        "classification": "uvm_base",
        "children": [],
        "auxiliaries": [],
        "ports": [
          {
            "name": "item_imp",
            "port_type": "uvm_analysis_imp",
            "family": "analysis",
            "direction": "implementation",
            "transaction_types": [
              "demo_item",
              "demo_scoreboard"
            ],
            "declared_in": "demo_scoreboard",
            "file": "tb/classes/demo_scoreboard.svh",
            "line": 4,
            "inherited": false
          }
        ],
        "connections": [],
        "config_accesses": [],
        "virtual_interfaces": [],
        "child_count": 0,
        "declared_child_count": 0,
        "inherited_child_count": 0,
        "auxiliary_count": 0,
        "descendant_type_count": 0,
        "port_count": 1,
        "connection_count": 0
      },
      "demo_sequencer": {
        "type": "demo_sequencer",
        "role": "sequencer",
        "base": "uvm_sequencer",
        "file": "tb/classes/demo_sequencer.svh",
        "line": 1,
        "classification": "uvm_base",
        "children": [],
        "auxiliaries": [],
        "ports": [],
        "connections": [],
        "config_accesses": [],
        "virtual_interfaces": [],
        "child_count": 0,
        "declared_child_count": 0,
        "inherited_child_count": 0,
        "auxiliary_count": 0,
        "descendant_type_count": 0,
        "port_count": 0,
        "connection_count": 0
      },
      "demo_smoke_test": {
        "type": "demo_smoke_test",
        "role": "test",
        "base": "uvm_test",
        "file": "tb/classes/demo_smoke_test.svh",
        "line": 1,
        "classification": "uvm_base",
        "children": [
          {
            "instance": "env",
            "type": "demo_env",
            "role": "env",
            "relation": "creates",
            "declared_in": "demo_smoke_test",
            "file": "tb/classes/demo_smoke_test.svh",
            "line": 16,
            "confidence": "high",
            "inherited": false
          }
        ],
        "auxiliaries": [
          {
            "instance": "cfg",
            "type": "demo_env_config",
            "role": "config",
            "relation": "creates",
            "declared_in": "demo_smoke_test",
            "file": "tb/classes/demo_smoke_test.svh",
            "line": 13,
            "confidence": "high",
            "inherited": false
          }
        ],
        "ports": [],
        "connections": [],
        "config_accesses": [
          {
            "operation": "set",
            "field": "cfg",
            "config_type": "demo_env_config",
            "scope": "env",
            "value": "cfg",
            "declared_in": "demo_smoke_test",
            "file": "tb/classes/demo_smoke_test.svh",
            "line": 15,
            "inherited": false
          }
        ],
        "virtual_interfaces": [],
        "child_count": 1,
        "declared_child_count": 1,
        "inherited_child_count": 0,
        "auxiliary_count": 1,
        "descendant_type_count": 7,
        "port_count": 0,
        "connection_count": 0
      }
    },
    "unresolved_components": [],
    "connections": [
      {
        "kind": "seq_item_connect",
        "lhs": "driver.seq_item_port",
        "rhs": "sequencer.seq_item_export",
        "declared_in": "demo_agent",
        "file": "tb/classes/demo_agent.svh",
        "line": 24,
        "context": "demo_agent",
        "source_endpoint": {
          "expression": "driver.seq_item_port",
          "requested_path": [
            "driver"
          ],
          "instance_path": [
            "driver"
          ],
          "owner_type": "demo_driver",
          "owner_role": "driver",
          "port": "seq_item_port",
          "path_resolved": true,
          "port_declared": false,
          "confidence": "medium"
        },
        "target_endpoint": {
          "expression": "sequencer.seq_item_export",
          "requested_path": [
            "sequencer"
          ],
          "instance_path": [
            "sequencer"
          ],
          "owner_type": "demo_sequencer",
          "owner_role": "sequencer",
          "port": "seq_item_export",
          "path_resolved": true,
          "port_declared": false,
          "confidence": "medium"
        },
        "resolved": true,
        "confidence": "high"
      },
      {
        "kind": "tlm_connect",
        "lhs": "agent.monitor.item_ap",
        "rhs": "scoreboard.item_imp",
        "declared_in": "demo_env",
        "file": "tb/classes/demo_env.svh",
        "line": 25,
        "context": "demo_env",
        "source_endpoint": {
          "expression": "agent.monitor.item_ap",
          "requested_path": [
            "agent",
            "monitor"
          ],
          "instance_path": [
            "agent",
            "monitor"
          ],
          "owner_type": "demo_monitor",
          "owner_role": "monitor",
          "port": "item_ap",
          "path_resolved": true,
          "port_declared": true,
          "confidence": "high",
          "port_type": "uvm_analysis_port",
          "family": "analysis",
          "direction": "port",
          "transaction_types": [
            "demo_item"
          ]
        },
        "target_endpoint": {
          "expression": "scoreboard.item_imp",
          "requested_path": [
            "scoreboard"
          ],
          "instance_path": [
            "scoreboard"
          ],
          "owner_type": "demo_scoreboard",
          "owner_role": "scoreboard",
          "port": "item_imp",
          "path_resolved": true,
          "port_declared": true,
          "confidence": "high",
          "port_type": "uvm_analysis_imp",
          "family": "analysis",
          "direction": "implementation",
          "transaction_types": [
            "demo_item",
            "demo_scoreboard"
          ]
        },
        "resolved": true,
        "confidence": "high"
      },
      {
        "kind": "tlm_connect",
        "lhs": "agent.monitor.item_ap",
        "rhs": "coverage.analysis_export",
        "declared_in": "demo_env",
        "file": "tb/classes/demo_env.svh",
        "line": 26,
        "context": "demo_env",
        "source_endpoint": {
          "expression": "agent.monitor.item_ap",
          "requested_path": [
            "agent",
            "monitor"
          ],
          "instance_path": [
            "agent",
            "monitor"
          ],
          "owner_type": "demo_monitor",
          "owner_role": "monitor",
          "port": "item_ap",
          "path_resolved": true,
          "port_declared": true,
          "confidence": "high",
          "port_type": "uvm_analysis_port",
          "family": "analysis",
          "direction": "port",
          "transaction_types": [
            "demo_item"
          ]
        },
        "target_endpoint": {
          "expression": "coverage.analysis_export",
          "requested_path": [
            "coverage"
          ],
          "instance_path": [
            "coverage"
          ],
          "owner_type": "demo_coverage",
          "owner_role": "coverage",
          "port": "analysis_export",
          "path_resolved": true,
          "port_declared": false,
          "confidence": "medium"
        },
        "resolved": true,
        "confidence": "high"
      }
    ],
    "externals": {
      "interfaces": [
        {
          "name": "demo_if",
          "role": "interface",
          "file": "tb/demo_if.sv",
          "line": 5
        }
      ],
      "modules": [
        {
          "name": "demo_dut",
          "role": "module",
          "file": "rtl/demo_dut.sv",
          "line": 1
        },
        {
          "name": "demo_top",
          "role": "module",
          "file": "tb/demo_top.sv",
          "line": 1
        }
      ]
    }
  },
  "tlm": {
    "ports": [
      {
        "owner": "demo_monitor",
        "owner_role": "monitor",
        "name": "item_ap",
        "port_type": "uvm_analysis_port",
        "family": "analysis",
        "direction": "port",
        "transaction_types": [
          "demo_item"
        ],
        "file": "tb/classes/demo_monitor.svh",
        "line": 5
      },
      {
        "owner": "demo_scoreboard",
        "owner_role": "scoreboard",
        "name": "item_imp",
        "port_type": "uvm_analysis_imp",
        "family": "analysis",
        "direction": "implementation",
        "transaction_types": [
          "demo_item",
          "demo_scoreboard"
        ],
        "file": "tb/classes/demo_scoreboard.svh",
        "line": 4
      }
    ],
    "connections": [
      {
        "kind": "seq_item_connect",
        "context": "demo_agent",
        "lhs": "driver.seq_item_port",
        "rhs": "sequencer.seq_item_export",
        "file": "tb/classes/demo_agent.svh",
        "line": 24
      },
      {
        "kind": "tlm_connect",
        "context": "demo_env",
        "lhs": "agent.monitor.item_ap",
        "rhs": "scoreboard.item_imp",
        "file": "tb/classes/demo_env.svh",
        "line": 25
      },
      {
        "kind": "tlm_connect",
        "context": "demo_env",
        "lhs": "agent.monitor.item_ap",
        "rhs": "coverage.analysis_export",
        "file": "tb/classes/demo_env.svh",
        "line": 26
      }
    ]
  },
  "snippets": {
    "rtl/demo_dut.sv:1": {
      "file": "rtl/demo_dut.sv",
      "line": 1,
      "start": 1,
      "end": 20,
      "lines": [
        {
          "line": 1,
          "text": "module demo_dut ("
        },
        {
          "line": 2,
          "text": "  input  logic                         clk,"
        },
        {
          "line": 3,
          "text": "  input  logic                         reset_n,"
        },
        {
          "line": 4,
          "text": "  input  logic                         valid,"
        },
        {
          "line": 5,
          "text": "  output logic                         ready,"
        },
        {
          "line": 6,
          "text": "  input  logic [`DEMO_DATA_WIDTH-1:0] data"
        },
        {
          "line": 7,
          "text": ");"
        },
        {
          "line": 8,
          "text": ""
        },
        {
          "line": 9,
          "text": "  logic [31:0] accepted_count;"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  assign ready = reset_n;"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  always_ff @(posedge clk or negedge reset_n) begin"
        },
        {
          "line": 14,
          "text": "    if (!reset_n)"
        },
        {
          "line": 15,
          "text": "      accepted_count <= '0;"
        },
        {
          "line": 16,
          "text": "    else if (valid && ready)"
        },
        {
          "line": 17,
          "text": "      accepted_count <= accepted_count + 1'b1;"
        },
        {
          "line": 18,
          "text": "  end"
        },
        {
          "line": 19,
          "text": ""
        },
        {
          "line": 20,
          "text": "endmodule"
        }
      ]
    },
    "tb/demo_if.sv:5": {
      "file": "tb/demo_if.sv",
      "line": 5,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "`ifndef DEMO_DATA_WIDTH"
        },
        {
          "line": 2,
          "text": "`define DEMO_DATA_WIDTH 16"
        },
        {
          "line": 3,
          "text": "`endif"
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "interface demo_if ("
        },
        {
          "line": 6,
          "text": "  input logic clk,"
        },
        {
          "line": 7,
          "text": "  input logic reset_n"
        },
        {
          "line": 8,
          "text": ");"
        },
        {
          "line": 9,
          "text": "  logic                        valid;"
        },
        {
          "line": 10,
          "text": "  logic                        ready;"
        },
        {
          "line": 11,
          "text": "  logic [`DEMO_DATA_WIDTH-1:0] data;"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  modport driver_mp ("
        },
        {
          "line": 14,
          "text": "    input  clk,"
        },
        {
          "line": 15,
          "text": "    input  reset_n,"
        },
        {
          "line": 16,
          "text": "    input  ready,"
        },
        {
          "line": 17,
          "text": "    output valid,"
        },
        {
          "line": 18,
          "text": "    output data"
        },
        {
          "line": 19,
          "text": "  );"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  modport monitor_mp ("
        },
        {
          "line": 22,
          "text": "    input clk,"
        },
        {
          "line": 23,
          "text": "    input reset_n,"
        },
        {
          "line": 24,
          "text": "    input valid,"
        },
        {
          "line": 25,
          "text": "    input ready,"
        },
        {
          "line": 26,
          "text": "    input data"
        },
        {
          "line": 27,
          "text": "  );"
        },
        {
          "line": 28,
          "text": "endinterface"
        }
      ]
    },
    "tb/demo_pkg.sv:1": {
      "file": "tb/demo_pkg.sv",
      "line": 1,
      "start": 1,
      "end": 16,
      "lines": [
        {
          "line": 1,
          "text": "package demo_pkg;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  `include \"uvm_macros.svh\""
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  `include \"demo_item.svh\""
        },
        {
          "line": 6,
          "text": "  `include \"demo_env_config.svh\""
        },
        {
          "line": 7,
          "text": "  `include \"demo_sequence.svh\""
        },
        {
          "line": 8,
          "text": "  `include \"demo_sequencer.svh\""
        },
        {
          "line": 9,
          "text": "  `include \"demo_driver.svh\""
        },
        {
          "line": 10,
          "text": "  `include \"demo_monitor.svh\""
        },
        {
          "line": 11,
          "text": "  `include \"demo_agent.svh\""
        },
        {
          "line": 12,
          "text": "  `include \"demo_scoreboard.svh\""
        },
        {
          "line": 13,
          "text": "  `include \"demo_coverage.svh\""
        },
        {
          "line": 14,
          "text": "  `include \"demo_env.svh\""
        },
        {
          "line": 15,
          "text": "  `include \"demo_smoke_test.svh\""
        },
        {
          "line": 16,
          "text": "endpackage"
        }
      ]
    },
    "tb/demo_top.sv:1": {
      "file": "tb/demo_top.sv",
      "line": 1,
      "start": 1,
      "end": 32,
      "lines": [
        {
          "line": 1,
          "text": "module demo_top;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  import demo_pkg::*;"
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  logic clk = 1'b0;"
        },
        {
          "line": 6,
          "text": "  logic reset_n = 1'b0;"
        },
        {
          "line": 7,
          "text": ""
        },
        {
          "line": 8,
          "text": "  always #5ns clk = ~clk;"
        },
        {
          "line": 9,
          "text": ""
        },
        {
          "line": 10,
          "text": "  demo_if demo_vif ("
        },
        {
          "line": 11,
          "text": "    .clk     (clk),"
        },
        {
          "line": 12,
          "text": "    .reset_n (reset_n)"
        },
        {
          "line": 13,
          "text": "  );"
        },
        {
          "line": 14,
          "text": ""
        },
        {
          "line": 15,
          "text": "  demo_dut dut ("
        },
        {
          "line": 16,
          "text": "    .clk     (clk),"
        },
        {
          "line": 17,
          "text": "    .reset_n (reset_n),"
        },
        {
          "line": 18,
          "text": "    .valid   (demo_vif.valid),"
        },
        {
          "line": 19,
          "text": "    .ready   (demo_vif.ready),"
        },
        {
          "line": 20,
          "text": "    .data    (demo_vif.data)"
        },
        {
          "line": 21,
          "text": "  );"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  initial begin"
        },
        {
          "line": 24,
          "text": "    repeat (4) @(posedge clk);"
        },
        {
          "line": 25,
          "text": "    reset_n = 1'b1;"
        },
        {
          "line": 26,
          "text": "  end"
        },
        {
          "line": 27,
          "text": ""
        },
        {
          "line": 28,
          "text": "  initial begin"
        },
        {
          "line": 29,
          "text": "    uvm_config_db #(virtual demo_if)::set(null, \"*\", \"vif\", demo_vif);"
        },
        {
          "line": 30,
          "text": "    run_test(\"demo_smoke_test\");"
        },
        {
          "line": 31,
          "text": "  end"
        },
        {
          "line": 32,
          "text": "endmodule"
        }
      ]
    },
    "tb/classes/demo_item.svh:1": {
      "file": "tb/classes/demo_item.svh",
      "line": 1,
      "start": 1,
      "end": 15,
      "lines": [
        {
          "line": 1,
          "text": "class demo_item extends uvm_sequence_item;"
        },
        {
          "line": 2,
          "text": "  rand bit [`DEMO_DATA_WIDTH-1:0] data;"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  `uvm_object_utils_begin(demo_item)"
        },
        {
          "line": 5,
          "text": "    `uvm_field_int(data, UVM_DEFAULT)"
        },
        {
          "line": 6,
          "text": "  `uvm_object_utils_end"
        },
        {
          "line": 7,
          "text": ""
        },
        {
          "line": 8,
          "text": "  function new(string name = \"demo_item\");"
        },
        {
          "line": 9,
          "text": "    super.new(name);"
        },
        {
          "line": 10,
          "text": "  endfunction"
        },
        {
          "line": 11,
          "text": ""
        },
        {
          "line": 12,
          "text": "  constraint data_c {"
        },
        {
          "line": 13,
          "text": "    data inside {[0:255]};"
        },
        {
          "line": 14,
          "text": "  }"
        },
        {
          "line": 15,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_item.svh:8": {
      "file": "tb/classes/demo_item.svh",
      "line": 8,
      "start": 1,
      "end": 15,
      "lines": [
        {
          "line": 1,
          "text": "class demo_item extends uvm_sequence_item;"
        },
        {
          "line": 2,
          "text": "  rand bit [`DEMO_DATA_WIDTH-1:0] data;"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  `uvm_object_utils_begin(demo_item)"
        },
        {
          "line": 5,
          "text": "    `uvm_field_int(data, UVM_DEFAULT)"
        },
        {
          "line": 6,
          "text": "  `uvm_object_utils_end"
        },
        {
          "line": 7,
          "text": ""
        },
        {
          "line": 8,
          "text": "  function new(string name = \"demo_item\");"
        },
        {
          "line": 9,
          "text": "    super.new(name);"
        },
        {
          "line": 10,
          "text": "  endfunction"
        },
        {
          "line": 11,
          "text": ""
        },
        {
          "line": 12,
          "text": "  constraint data_c {"
        },
        {
          "line": 13,
          "text": "    data inside {[0:255]};"
        },
        {
          "line": 14,
          "text": "  }"
        },
        {
          "line": 15,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_env_config.svh:1": {
      "file": "tb/classes/demo_env_config.svh",
      "line": 1,
      "start": 1,
      "end": 13,
      "lines": [
        {
          "line": 1,
          "text": "class demo_env_config extends uvm_object;"
        },
        {
          "line": 2,
          "text": "  uvm_active_passive_enum is_active = UVM_ACTIVE;"
        },
        {
          "line": 3,
          "text": "  int unsigned item_count = 8;"
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  `uvm_object_utils_begin(demo_env_config)"
        },
        {
          "line": 6,
          "text": "    `uvm_field_enum(uvm_active_passive_enum, is_active, UVM_DEFAULT)"
        },
        {
          "line": 7,
          "text": "    `uvm_field_int(item_count, UVM_DEFAULT)"
        },
        {
          "line": 8,
          "text": "  `uvm_object_utils_end"
        },
        {
          "line": 9,
          "text": ""
        },
        {
          "line": 10,
          "text": "  function new(string name = \"demo_env_config\");"
        },
        {
          "line": 11,
          "text": "    super.new(name);"
        },
        {
          "line": 12,
          "text": "  endfunction"
        },
        {
          "line": 13,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_env_config.svh:10": {
      "file": "tb/classes/demo_env_config.svh",
      "line": 10,
      "start": 1,
      "end": 13,
      "lines": [
        {
          "line": 1,
          "text": "class demo_env_config extends uvm_object;"
        },
        {
          "line": 2,
          "text": "  uvm_active_passive_enum is_active = UVM_ACTIVE;"
        },
        {
          "line": 3,
          "text": "  int unsigned item_count = 8;"
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  `uvm_object_utils_begin(demo_env_config)"
        },
        {
          "line": 6,
          "text": "    `uvm_field_enum(uvm_active_passive_enum, is_active, UVM_DEFAULT)"
        },
        {
          "line": 7,
          "text": "    `uvm_field_int(item_count, UVM_DEFAULT)"
        },
        {
          "line": 8,
          "text": "  `uvm_object_utils_end"
        },
        {
          "line": 9,
          "text": ""
        },
        {
          "line": 10,
          "text": "  function new(string name = \"demo_env_config\");"
        },
        {
          "line": 11,
          "text": "    super.new(name);"
        },
        {
          "line": 12,
          "text": "  endfunction"
        },
        {
          "line": 13,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_sequence.svh:1": {
      "file": "tb/classes/demo_sequence.svh",
      "line": 1,
      "start": 1,
      "end": 19,
      "lines": [
        {
          "line": 1,
          "text": "class demo_sequence extends uvm_sequence #(demo_item);"
        },
        {
          "line": 2,
          "text": "  int unsigned item_count = 8;"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  `uvm_object_utils(demo_sequence)"
        },
        {
          "line": 5,
          "text": ""
        },
        {
          "line": 6,
          "text": "  function new(string name = \"demo_sequence\");"
        },
        {
          "line": 7,
          "text": "    super.new(name);"
        },
        {
          "line": 8,
          "text": "  endfunction"
        },
        {
          "line": 9,
          "text": ""
        },
        {
          "line": 10,
          "text": "  task body();"
        },
        {
          "line": 11,
          "text": "    repeat (item_count) begin"
        },
        {
          "line": 12,
          "text": "      req = demo_item::type_id::create(\"req\");"
        },
        {
          "line": 13,
          "text": "      start_item(req);"
        },
        {
          "line": 14,
          "text": "      if (!req.randomize())"
        },
        {
          "line": 15,
          "text": "        `uvm_fatal(get_type_name(), \"demo_item randomization failed\")"
        },
        {
          "line": 16,
          "text": "      finish_item(req);"
        },
        {
          "line": 17,
          "text": "    end"
        },
        {
          "line": 18,
          "text": "  endtask"
        },
        {
          "line": 19,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_sequence.svh:6": {
      "file": "tb/classes/demo_sequence.svh",
      "line": 6,
      "start": 1,
      "end": 19,
      "lines": [
        {
          "line": 1,
          "text": "class demo_sequence extends uvm_sequence #(demo_item);"
        },
        {
          "line": 2,
          "text": "  int unsigned item_count = 8;"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  `uvm_object_utils(demo_sequence)"
        },
        {
          "line": 5,
          "text": ""
        },
        {
          "line": 6,
          "text": "  function new(string name = \"demo_sequence\");"
        },
        {
          "line": 7,
          "text": "    super.new(name);"
        },
        {
          "line": 8,
          "text": "  endfunction"
        },
        {
          "line": 9,
          "text": ""
        },
        {
          "line": 10,
          "text": "  task body();"
        },
        {
          "line": 11,
          "text": "    repeat (item_count) begin"
        },
        {
          "line": 12,
          "text": "      req = demo_item::type_id::create(\"req\");"
        },
        {
          "line": 13,
          "text": "      start_item(req);"
        },
        {
          "line": 14,
          "text": "      if (!req.randomize())"
        },
        {
          "line": 15,
          "text": "        `uvm_fatal(get_type_name(), \"demo_item randomization failed\")"
        },
        {
          "line": 16,
          "text": "      finish_item(req);"
        },
        {
          "line": 17,
          "text": "    end"
        },
        {
          "line": 18,
          "text": "  endtask"
        },
        {
          "line": 19,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_sequence.svh:10": {
      "file": "tb/classes/demo_sequence.svh",
      "line": 10,
      "start": 1,
      "end": 19,
      "lines": [
        {
          "line": 1,
          "text": "class demo_sequence extends uvm_sequence #(demo_item);"
        },
        {
          "line": 2,
          "text": "  int unsigned item_count = 8;"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  `uvm_object_utils(demo_sequence)"
        },
        {
          "line": 5,
          "text": ""
        },
        {
          "line": 6,
          "text": "  function new(string name = \"demo_sequence\");"
        },
        {
          "line": 7,
          "text": "    super.new(name);"
        },
        {
          "line": 8,
          "text": "  endfunction"
        },
        {
          "line": 9,
          "text": ""
        },
        {
          "line": 10,
          "text": "  task body();"
        },
        {
          "line": 11,
          "text": "    repeat (item_count) begin"
        },
        {
          "line": 12,
          "text": "      req = demo_item::type_id::create(\"req\");"
        },
        {
          "line": 13,
          "text": "      start_item(req);"
        },
        {
          "line": 14,
          "text": "      if (!req.randomize())"
        },
        {
          "line": 15,
          "text": "        `uvm_fatal(get_type_name(), \"demo_item randomization failed\")"
        },
        {
          "line": 16,
          "text": "      finish_item(req);"
        },
        {
          "line": 17,
          "text": "    end"
        },
        {
          "line": 18,
          "text": "  endtask"
        },
        {
          "line": 19,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_sequencer.svh:1": {
      "file": "tb/classes/demo_sequencer.svh",
      "line": 1,
      "start": 1,
      "end": 7,
      "lines": [
        {
          "line": 1,
          "text": "class demo_sequencer extends uvm_sequencer #(demo_item);"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_sequencer)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  function new(string name = \"demo_sequencer\", uvm_component parent = null);"
        },
        {
          "line": 5,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 6,
          "text": "  endfunction"
        },
        {
          "line": 7,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_sequencer.svh:4": {
      "file": "tb/classes/demo_sequencer.svh",
      "line": 4,
      "start": 1,
      "end": 7,
      "lines": [
        {
          "line": 1,
          "text": "class demo_sequencer extends uvm_sequencer #(demo_item);"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_sequencer)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  function new(string name = \"demo_sequencer\", uvm_component parent = null);"
        },
        {
          "line": 5,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 6,
          "text": "  endfunction"
        },
        {
          "line": 7,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_driver.svh:1": {
      "file": "tb/classes/demo_driver.svh",
      "line": 1,
      "start": 1,
      "end": 29,
      "lines": [
        {
          "line": 1,
          "text": "class demo_driver extends uvm_driver #(demo_item);"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_driver)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  virtual demo_if vif;"
        },
        {
          "line": 5,
          "text": ""
        },
        {
          "line": 6,
          "text": "  function new(string name = \"demo_driver\", uvm_component parent = null);"
        },
        {
          "line": 7,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 8,
          "text": "  endfunction"
        },
        {
          "line": 9,
          "text": ""
        },
        {
          "line": 10,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 11,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 12,
          "text": "    if (!uvm_config_db #(virtual demo_if)::get(this, \"\", \"vif\", vif))"
        },
        {
          "line": 13,
          "text": "      `uvm_fatal(get_type_name(), \"virtual interface was not configured\")"
        },
        {
          "line": 14,
          "text": "  endfunction"
        },
        {
          "line": 15,
          "text": ""
        },
        {
          "line": 16,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 17,
          "text": "    vif.valid <= 1'b0;"
        },
        {
          "line": 18,
          "text": "    vif.data  <= '0;"
        },
        {
          "line": 19,
          "text": "    forever begin"
        },
        {
          "line": 20,
          "text": "      seq_item_port.get_next_item(req);"
        },
        {
          "line": 21,
          "text": "      @(posedge vif.clk);"
        },
        {
          "line": 22,
          "text": "      vif.valid <= 1'b1;"
        },
        {
          "line": 23,
          "text": "      vif.data  <= req.data;"
        },
        {
          "line": 24,
          "text": "      do @(posedge vif.clk); while (!vif.ready);"
        },
        {
          "line": 25,
          "text": "      vif.valid <= 1'b0;"
        },
        {
          "line": 26,
          "text": "      seq_item_port.item_done();"
        },
        {
          "line": 27,
          "text": "    end"
        },
        {
          "line": 28,
          "text": "  endtask"
        },
        {
          "line": 29,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_driver.svh:6": {
      "file": "tb/classes/demo_driver.svh",
      "line": 6,
      "start": 1,
      "end": 29,
      "lines": [
        {
          "line": 1,
          "text": "class demo_driver extends uvm_driver #(demo_item);"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_driver)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  virtual demo_if vif;"
        },
        {
          "line": 5,
          "text": ""
        },
        {
          "line": 6,
          "text": "  function new(string name = \"demo_driver\", uvm_component parent = null);"
        },
        {
          "line": 7,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 8,
          "text": "  endfunction"
        },
        {
          "line": 9,
          "text": ""
        },
        {
          "line": 10,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 11,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 12,
          "text": "    if (!uvm_config_db #(virtual demo_if)::get(this, \"\", \"vif\", vif))"
        },
        {
          "line": 13,
          "text": "      `uvm_fatal(get_type_name(), \"virtual interface was not configured\")"
        },
        {
          "line": 14,
          "text": "  endfunction"
        },
        {
          "line": 15,
          "text": ""
        },
        {
          "line": 16,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 17,
          "text": "    vif.valid <= 1'b0;"
        },
        {
          "line": 18,
          "text": "    vif.data  <= '0;"
        },
        {
          "line": 19,
          "text": "    forever begin"
        },
        {
          "line": 20,
          "text": "      seq_item_port.get_next_item(req);"
        },
        {
          "line": 21,
          "text": "      @(posedge vif.clk);"
        },
        {
          "line": 22,
          "text": "      vif.valid <= 1'b1;"
        },
        {
          "line": 23,
          "text": "      vif.data  <= req.data;"
        },
        {
          "line": 24,
          "text": "      do @(posedge vif.clk); while (!vif.ready);"
        },
        {
          "line": 25,
          "text": "      vif.valid <= 1'b0;"
        },
        {
          "line": 26,
          "text": "      seq_item_port.item_done();"
        },
        {
          "line": 27,
          "text": "    end"
        },
        {
          "line": 28,
          "text": "  endtask"
        },
        {
          "line": 29,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_driver.svh:10": {
      "file": "tb/classes/demo_driver.svh",
      "line": 10,
      "start": 1,
      "end": 29,
      "lines": [
        {
          "line": 1,
          "text": "class demo_driver extends uvm_driver #(demo_item);"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_driver)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  virtual demo_if vif;"
        },
        {
          "line": 5,
          "text": ""
        },
        {
          "line": 6,
          "text": "  function new(string name = \"demo_driver\", uvm_component parent = null);"
        },
        {
          "line": 7,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 8,
          "text": "  endfunction"
        },
        {
          "line": 9,
          "text": ""
        },
        {
          "line": 10,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 11,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 12,
          "text": "    if (!uvm_config_db #(virtual demo_if)::get(this, \"\", \"vif\", vif))"
        },
        {
          "line": 13,
          "text": "      `uvm_fatal(get_type_name(), \"virtual interface was not configured\")"
        },
        {
          "line": 14,
          "text": "  endfunction"
        },
        {
          "line": 15,
          "text": ""
        },
        {
          "line": 16,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 17,
          "text": "    vif.valid <= 1'b0;"
        },
        {
          "line": 18,
          "text": "    vif.data  <= '0;"
        },
        {
          "line": 19,
          "text": "    forever begin"
        },
        {
          "line": 20,
          "text": "      seq_item_port.get_next_item(req);"
        },
        {
          "line": 21,
          "text": "      @(posedge vif.clk);"
        },
        {
          "line": 22,
          "text": "      vif.valid <= 1'b1;"
        },
        {
          "line": 23,
          "text": "      vif.data  <= req.data;"
        },
        {
          "line": 24,
          "text": "      do @(posedge vif.clk); while (!vif.ready);"
        },
        {
          "line": 25,
          "text": "      vif.valid <= 1'b0;"
        },
        {
          "line": 26,
          "text": "      seq_item_port.item_done();"
        },
        {
          "line": 27,
          "text": "    end"
        },
        {
          "line": 28,
          "text": "  endtask"
        },
        {
          "line": 29,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_driver.svh:16": {
      "file": "tb/classes/demo_driver.svh",
      "line": 16,
      "start": 1,
      "end": 29,
      "lines": [
        {
          "line": 1,
          "text": "class demo_driver extends uvm_driver #(demo_item);"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_driver)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  virtual demo_if vif;"
        },
        {
          "line": 5,
          "text": ""
        },
        {
          "line": 6,
          "text": "  function new(string name = \"demo_driver\", uvm_component parent = null);"
        },
        {
          "line": 7,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 8,
          "text": "  endfunction"
        },
        {
          "line": 9,
          "text": ""
        },
        {
          "line": 10,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 11,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 12,
          "text": "    if (!uvm_config_db #(virtual demo_if)::get(this, \"\", \"vif\", vif))"
        },
        {
          "line": 13,
          "text": "      `uvm_fatal(get_type_name(), \"virtual interface was not configured\")"
        },
        {
          "line": 14,
          "text": "  endfunction"
        },
        {
          "line": 15,
          "text": ""
        },
        {
          "line": 16,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 17,
          "text": "    vif.valid <= 1'b0;"
        },
        {
          "line": 18,
          "text": "    vif.data  <= '0;"
        },
        {
          "line": 19,
          "text": "    forever begin"
        },
        {
          "line": 20,
          "text": "      seq_item_port.get_next_item(req);"
        },
        {
          "line": 21,
          "text": "      @(posedge vif.clk);"
        },
        {
          "line": 22,
          "text": "      vif.valid <= 1'b1;"
        },
        {
          "line": 23,
          "text": "      vif.data  <= req.data;"
        },
        {
          "line": 24,
          "text": "      do @(posedge vif.clk); while (!vif.ready);"
        },
        {
          "line": 25,
          "text": "      vif.valid <= 1'b0;"
        },
        {
          "line": 26,
          "text": "      seq_item_port.item_done();"
        },
        {
          "line": 27,
          "text": "    end"
        },
        {
          "line": 28,
          "text": "  endtask"
        },
        {
          "line": 29,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_monitor.svh:1": {
      "file": "tb/classes/demo_monitor.svh",
      "line": 1,
      "start": 1,
      "end": 29,
      "lines": [
        {
          "line": 1,
          "text": "class demo_monitor extends uvm_monitor;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_monitor)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  virtual demo_if vif;"
        },
        {
          "line": 5,
          "text": "  uvm_analysis_port #(demo_item) item_ap;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_monitor\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    item_ap = new(\"item_ap\", this);"
        },
        {
          "line": 14,
          "text": "    if (!uvm_config_db #(virtual demo_if)::get(this, \"\", \"vif\", vif))"
        },
        {
          "line": 15,
          "text": "      `uvm_fatal(get_type_name(), \"virtual interface was not configured\")"
        },
        {
          "line": 16,
          "text": "  endfunction"
        },
        {
          "line": 17,
          "text": ""
        },
        {
          "line": 18,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 19,
          "text": "    demo_item observed;"
        },
        {
          "line": 20,
          "text": "    forever begin"
        },
        {
          "line": 21,
          "text": "      @(posedge vif.clk);"
        },
        {
          "line": 22,
          "text": "      if (vif.reset_n && vif.valid && vif.ready) begin"
        },
        {
          "line": 23,
          "text": "        observed = demo_item::type_id::create(\"observed\");"
        },
        {
          "line": 24,
          "text": "        observed.data = vif.data;"
        },
        {
          "line": 25,
          "text": "        item_ap.write(observed);"
        },
        {
          "line": 26,
          "text": "      end"
        },
        {
          "line": 27,
          "text": "    end"
        },
        {
          "line": 28,
          "text": "  endtask"
        },
        {
          "line": 29,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_monitor.svh:7": {
      "file": "tb/classes/demo_monitor.svh",
      "line": 7,
      "start": 1,
      "end": 29,
      "lines": [
        {
          "line": 1,
          "text": "class demo_monitor extends uvm_monitor;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_monitor)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  virtual demo_if vif;"
        },
        {
          "line": 5,
          "text": "  uvm_analysis_port #(demo_item) item_ap;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_monitor\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    item_ap = new(\"item_ap\", this);"
        },
        {
          "line": 14,
          "text": "    if (!uvm_config_db #(virtual demo_if)::get(this, \"\", \"vif\", vif))"
        },
        {
          "line": 15,
          "text": "      `uvm_fatal(get_type_name(), \"virtual interface was not configured\")"
        },
        {
          "line": 16,
          "text": "  endfunction"
        },
        {
          "line": 17,
          "text": ""
        },
        {
          "line": 18,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 19,
          "text": "    demo_item observed;"
        },
        {
          "line": 20,
          "text": "    forever begin"
        },
        {
          "line": 21,
          "text": "      @(posedge vif.clk);"
        },
        {
          "line": 22,
          "text": "      if (vif.reset_n && vif.valid && vif.ready) begin"
        },
        {
          "line": 23,
          "text": "        observed = demo_item::type_id::create(\"observed\");"
        },
        {
          "line": 24,
          "text": "        observed.data = vif.data;"
        },
        {
          "line": 25,
          "text": "        item_ap.write(observed);"
        },
        {
          "line": 26,
          "text": "      end"
        },
        {
          "line": 27,
          "text": "    end"
        },
        {
          "line": 28,
          "text": "  endtask"
        },
        {
          "line": 29,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_monitor.svh:11": {
      "file": "tb/classes/demo_monitor.svh",
      "line": 11,
      "start": 1,
      "end": 29,
      "lines": [
        {
          "line": 1,
          "text": "class demo_monitor extends uvm_monitor;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_monitor)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  virtual demo_if vif;"
        },
        {
          "line": 5,
          "text": "  uvm_analysis_port #(demo_item) item_ap;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_monitor\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    item_ap = new(\"item_ap\", this);"
        },
        {
          "line": 14,
          "text": "    if (!uvm_config_db #(virtual demo_if)::get(this, \"\", \"vif\", vif))"
        },
        {
          "line": 15,
          "text": "      `uvm_fatal(get_type_name(), \"virtual interface was not configured\")"
        },
        {
          "line": 16,
          "text": "  endfunction"
        },
        {
          "line": 17,
          "text": ""
        },
        {
          "line": 18,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 19,
          "text": "    demo_item observed;"
        },
        {
          "line": 20,
          "text": "    forever begin"
        },
        {
          "line": 21,
          "text": "      @(posedge vif.clk);"
        },
        {
          "line": 22,
          "text": "      if (vif.reset_n && vif.valid && vif.ready) begin"
        },
        {
          "line": 23,
          "text": "        observed = demo_item::type_id::create(\"observed\");"
        },
        {
          "line": 24,
          "text": "        observed.data = vif.data;"
        },
        {
          "line": 25,
          "text": "        item_ap.write(observed);"
        },
        {
          "line": 26,
          "text": "      end"
        },
        {
          "line": 27,
          "text": "    end"
        },
        {
          "line": 28,
          "text": "  endtask"
        },
        {
          "line": 29,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_monitor.svh:18": {
      "file": "tb/classes/demo_monitor.svh",
      "line": 18,
      "start": 1,
      "end": 29,
      "lines": [
        {
          "line": 1,
          "text": "class demo_monitor extends uvm_monitor;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_monitor)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  virtual demo_if vif;"
        },
        {
          "line": 5,
          "text": "  uvm_analysis_port #(demo_item) item_ap;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_monitor\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    item_ap = new(\"item_ap\", this);"
        },
        {
          "line": 14,
          "text": "    if (!uvm_config_db #(virtual demo_if)::get(this, \"\", \"vif\", vif))"
        },
        {
          "line": 15,
          "text": "      `uvm_fatal(get_type_name(), \"virtual interface was not configured\")"
        },
        {
          "line": 16,
          "text": "  endfunction"
        },
        {
          "line": 17,
          "text": ""
        },
        {
          "line": 18,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 19,
          "text": "    demo_item observed;"
        },
        {
          "line": 20,
          "text": "    forever begin"
        },
        {
          "line": 21,
          "text": "      @(posedge vif.clk);"
        },
        {
          "line": 22,
          "text": "      if (vif.reset_n && vif.valid && vif.ready) begin"
        },
        {
          "line": 23,
          "text": "        observed = demo_item::type_id::create(\"observed\");"
        },
        {
          "line": 24,
          "text": "        observed.data = vif.data;"
        },
        {
          "line": 25,
          "text": "        item_ap.write(observed);"
        },
        {
          "line": 26,
          "text": "      end"
        },
        {
          "line": 27,
          "text": "    end"
        },
        {
          "line": 28,
          "text": "  endtask"
        },
        {
          "line": 29,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_agent.svh:1": {
      "file": "tb/classes/demo_agent.svh",
      "line": 1,
      "start": 1,
      "end": 26,
      "lines": [
        {
          "line": 1,
          "text": "class demo_agent extends uvm_agent;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_agent)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_sequencer sequencer;"
        },
        {
          "line": 5,
          "text": "  demo_driver    driver;"
        },
        {
          "line": 6,
          "text": "  demo_monitor   monitor;"
        },
        {
          "line": 7,
          "text": ""
        },
        {
          "line": 8,
          "text": "  function new(string name = \"demo_agent\", uvm_component parent = null);"
        },
        {
          "line": 9,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 10,
          "text": "  endfunction"
        },
        {
          "line": 11,
          "text": ""
        },
        {
          "line": 12,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 13,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 14,
          "text": "    monitor = demo_monitor::type_id::create(\"monitor\", this);"
        },
        {
          "line": 15,
          "text": "    if (is_active == UVM_ACTIVE) begin"
        },
        {
          "line": 16,
          "text": "      sequencer = demo_sequencer::type_id::create(\"sequencer\", this);"
        },
        {
          "line": 17,
          "text": "      driver    = demo_driver::type_id::create(\"driver\", this);"
        },
        {
          "line": 18,
          "text": "    end"
        },
        {
          "line": 19,
          "text": "  endfunction"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 22,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 23,
          "text": "    if (is_active == UVM_ACTIVE)"
        },
        {
          "line": 24,
          "text": "      driver.seq_item_port.connect(sequencer.seq_item_export);"
        },
        {
          "line": 25,
          "text": "  endfunction"
        },
        {
          "line": 26,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_agent.svh:8": {
      "file": "tb/classes/demo_agent.svh",
      "line": 8,
      "start": 1,
      "end": 26,
      "lines": [
        {
          "line": 1,
          "text": "class demo_agent extends uvm_agent;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_agent)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_sequencer sequencer;"
        },
        {
          "line": 5,
          "text": "  demo_driver    driver;"
        },
        {
          "line": 6,
          "text": "  demo_monitor   monitor;"
        },
        {
          "line": 7,
          "text": ""
        },
        {
          "line": 8,
          "text": "  function new(string name = \"demo_agent\", uvm_component parent = null);"
        },
        {
          "line": 9,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 10,
          "text": "  endfunction"
        },
        {
          "line": 11,
          "text": ""
        },
        {
          "line": 12,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 13,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 14,
          "text": "    monitor = demo_monitor::type_id::create(\"monitor\", this);"
        },
        {
          "line": 15,
          "text": "    if (is_active == UVM_ACTIVE) begin"
        },
        {
          "line": 16,
          "text": "      sequencer = demo_sequencer::type_id::create(\"sequencer\", this);"
        },
        {
          "line": 17,
          "text": "      driver    = demo_driver::type_id::create(\"driver\", this);"
        },
        {
          "line": 18,
          "text": "    end"
        },
        {
          "line": 19,
          "text": "  endfunction"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 22,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 23,
          "text": "    if (is_active == UVM_ACTIVE)"
        },
        {
          "line": 24,
          "text": "      driver.seq_item_port.connect(sequencer.seq_item_export);"
        },
        {
          "line": 25,
          "text": "  endfunction"
        },
        {
          "line": 26,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_agent.svh:12": {
      "file": "tb/classes/demo_agent.svh",
      "line": 12,
      "start": 1,
      "end": 26,
      "lines": [
        {
          "line": 1,
          "text": "class demo_agent extends uvm_agent;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_agent)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_sequencer sequencer;"
        },
        {
          "line": 5,
          "text": "  demo_driver    driver;"
        },
        {
          "line": 6,
          "text": "  demo_monitor   monitor;"
        },
        {
          "line": 7,
          "text": ""
        },
        {
          "line": 8,
          "text": "  function new(string name = \"demo_agent\", uvm_component parent = null);"
        },
        {
          "line": 9,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 10,
          "text": "  endfunction"
        },
        {
          "line": 11,
          "text": ""
        },
        {
          "line": 12,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 13,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 14,
          "text": "    monitor = demo_monitor::type_id::create(\"monitor\", this);"
        },
        {
          "line": 15,
          "text": "    if (is_active == UVM_ACTIVE) begin"
        },
        {
          "line": 16,
          "text": "      sequencer = demo_sequencer::type_id::create(\"sequencer\", this);"
        },
        {
          "line": 17,
          "text": "      driver    = demo_driver::type_id::create(\"driver\", this);"
        },
        {
          "line": 18,
          "text": "    end"
        },
        {
          "line": 19,
          "text": "  endfunction"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 22,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 23,
          "text": "    if (is_active == UVM_ACTIVE)"
        },
        {
          "line": 24,
          "text": "      driver.seq_item_port.connect(sequencer.seq_item_export);"
        },
        {
          "line": 25,
          "text": "  endfunction"
        },
        {
          "line": 26,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_agent.svh:21": {
      "file": "tb/classes/demo_agent.svh",
      "line": 21,
      "start": 1,
      "end": 26,
      "lines": [
        {
          "line": 1,
          "text": "class demo_agent extends uvm_agent;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_agent)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_sequencer sequencer;"
        },
        {
          "line": 5,
          "text": "  demo_driver    driver;"
        },
        {
          "line": 6,
          "text": "  demo_monitor   monitor;"
        },
        {
          "line": 7,
          "text": ""
        },
        {
          "line": 8,
          "text": "  function new(string name = \"demo_agent\", uvm_component parent = null);"
        },
        {
          "line": 9,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 10,
          "text": "  endfunction"
        },
        {
          "line": 11,
          "text": ""
        },
        {
          "line": 12,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 13,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 14,
          "text": "    monitor = demo_monitor::type_id::create(\"monitor\", this);"
        },
        {
          "line": 15,
          "text": "    if (is_active == UVM_ACTIVE) begin"
        },
        {
          "line": 16,
          "text": "      sequencer = demo_sequencer::type_id::create(\"sequencer\", this);"
        },
        {
          "line": 17,
          "text": "      driver    = demo_driver::type_id::create(\"driver\", this);"
        },
        {
          "line": 18,
          "text": "    end"
        },
        {
          "line": 19,
          "text": "  endfunction"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 22,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 23,
          "text": "    if (is_active == UVM_ACTIVE)"
        },
        {
          "line": 24,
          "text": "      driver.seq_item_port.connect(sequencer.seq_item_export);"
        },
        {
          "line": 25,
          "text": "  endfunction"
        },
        {
          "line": 26,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_scoreboard.svh:1": {
      "file": "tb/classes/demo_scoreboard.svh",
      "line": 1,
      "start": 1,
      "end": 24,
      "lines": [
        {
          "line": 1,
          "text": "class demo_scoreboard extends uvm_scoreboard;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_scoreboard)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  uvm_analysis_imp #(demo_item, demo_scoreboard) item_imp;"
        },
        {
          "line": 5,
          "text": "  int unsigned observed_count;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_scoreboard\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    item_imp = new(\"item_imp\", this);"
        },
        {
          "line": 14,
          "text": "  endfunction"
        },
        {
          "line": 15,
          "text": ""
        },
        {
          "line": 16,
          "text": "  function void write(demo_item item);"
        },
        {
          "line": 17,
          "text": "    observed_count++;"
        },
        {
          "line": 18,
          "text": "    `uvm_info(get_type_name(), $sformatf(\"observed data 0x%0h\", item.data), UVM_MEDIUM)"
        },
        {
          "line": 19,
          "text": "  endfunction"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  function void report_phase(uvm_phase phase);"
        },
        {
          "line": 22,
          "text": "    `uvm_info(get_type_name(), $sformatf(\"observed %0d items\", observed_count), UVM_LOW)"
        },
        {
          "line": 23,
          "text": "  endfunction"
        },
        {
          "line": 24,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_scoreboard.svh:7": {
      "file": "tb/classes/demo_scoreboard.svh",
      "line": 7,
      "start": 1,
      "end": 24,
      "lines": [
        {
          "line": 1,
          "text": "class demo_scoreboard extends uvm_scoreboard;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_scoreboard)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  uvm_analysis_imp #(demo_item, demo_scoreboard) item_imp;"
        },
        {
          "line": 5,
          "text": "  int unsigned observed_count;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_scoreboard\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    item_imp = new(\"item_imp\", this);"
        },
        {
          "line": 14,
          "text": "  endfunction"
        },
        {
          "line": 15,
          "text": ""
        },
        {
          "line": 16,
          "text": "  function void write(demo_item item);"
        },
        {
          "line": 17,
          "text": "    observed_count++;"
        },
        {
          "line": 18,
          "text": "    `uvm_info(get_type_name(), $sformatf(\"observed data 0x%0h\", item.data), UVM_MEDIUM)"
        },
        {
          "line": 19,
          "text": "  endfunction"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  function void report_phase(uvm_phase phase);"
        },
        {
          "line": 22,
          "text": "    `uvm_info(get_type_name(), $sformatf(\"observed %0d items\", observed_count), UVM_LOW)"
        },
        {
          "line": 23,
          "text": "  endfunction"
        },
        {
          "line": 24,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_scoreboard.svh:11": {
      "file": "tb/classes/demo_scoreboard.svh",
      "line": 11,
      "start": 1,
      "end": 24,
      "lines": [
        {
          "line": 1,
          "text": "class demo_scoreboard extends uvm_scoreboard;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_scoreboard)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  uvm_analysis_imp #(demo_item, demo_scoreboard) item_imp;"
        },
        {
          "line": 5,
          "text": "  int unsigned observed_count;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_scoreboard\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    item_imp = new(\"item_imp\", this);"
        },
        {
          "line": 14,
          "text": "  endfunction"
        },
        {
          "line": 15,
          "text": ""
        },
        {
          "line": 16,
          "text": "  function void write(demo_item item);"
        },
        {
          "line": 17,
          "text": "    observed_count++;"
        },
        {
          "line": 18,
          "text": "    `uvm_info(get_type_name(), $sformatf(\"observed data 0x%0h\", item.data), UVM_MEDIUM)"
        },
        {
          "line": 19,
          "text": "  endfunction"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  function void report_phase(uvm_phase phase);"
        },
        {
          "line": 22,
          "text": "    `uvm_info(get_type_name(), $sformatf(\"observed %0d items\", observed_count), UVM_LOW)"
        },
        {
          "line": 23,
          "text": "  endfunction"
        },
        {
          "line": 24,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_scoreboard.svh:16": {
      "file": "tb/classes/demo_scoreboard.svh",
      "line": 16,
      "start": 1,
      "end": 24,
      "lines": [
        {
          "line": 1,
          "text": "class demo_scoreboard extends uvm_scoreboard;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_scoreboard)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  uvm_analysis_imp #(demo_item, demo_scoreboard) item_imp;"
        },
        {
          "line": 5,
          "text": "  int unsigned observed_count;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_scoreboard\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    item_imp = new(\"item_imp\", this);"
        },
        {
          "line": 14,
          "text": "  endfunction"
        },
        {
          "line": 15,
          "text": ""
        },
        {
          "line": 16,
          "text": "  function void write(demo_item item);"
        },
        {
          "line": 17,
          "text": "    observed_count++;"
        },
        {
          "line": 18,
          "text": "    `uvm_info(get_type_name(), $sformatf(\"observed data 0x%0h\", item.data), UVM_MEDIUM)"
        },
        {
          "line": 19,
          "text": "  endfunction"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  function void report_phase(uvm_phase phase);"
        },
        {
          "line": 22,
          "text": "    `uvm_info(get_type_name(), $sformatf(\"observed %0d items\", observed_count), UVM_LOW)"
        },
        {
          "line": 23,
          "text": "  endfunction"
        },
        {
          "line": 24,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_scoreboard.svh:21": {
      "file": "tb/classes/demo_scoreboard.svh",
      "line": 21,
      "start": 1,
      "end": 24,
      "lines": [
        {
          "line": 1,
          "text": "class demo_scoreboard extends uvm_scoreboard;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_scoreboard)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  uvm_analysis_imp #(demo_item, demo_scoreboard) item_imp;"
        },
        {
          "line": 5,
          "text": "  int unsigned observed_count;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_scoreboard\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    item_imp = new(\"item_imp\", this);"
        },
        {
          "line": 14,
          "text": "  endfunction"
        },
        {
          "line": 15,
          "text": ""
        },
        {
          "line": 16,
          "text": "  function void write(demo_item item);"
        },
        {
          "line": 17,
          "text": "    observed_count++;"
        },
        {
          "line": 18,
          "text": "    `uvm_info(get_type_name(), $sformatf(\"observed data 0x%0h\", item.data), UVM_MEDIUM)"
        },
        {
          "line": 19,
          "text": "  endfunction"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  function void report_phase(uvm_phase phase);"
        },
        {
          "line": 22,
          "text": "    `uvm_info(get_type_name(), $sformatf(\"observed %0d items\", observed_count), UVM_LOW)"
        },
        {
          "line": 23,
          "text": "  endfunction"
        },
        {
          "line": 24,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_coverage.svh:1": {
      "file": "tb/classes/demo_coverage.svh",
      "line": 1,
      "start": 1,
      "end": 23,
      "lines": [
        {
          "line": 1,
          "text": "class demo_coverage extends uvm_subscriber #(demo_item);"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_coverage)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  bit [`DEMO_DATA_WIDTH-1:0] sampled_data;"
        },
        {
          "line": 5,
          "text": ""
        },
        {
          "line": 6,
          "text": "  covergroup data_cg;"
        },
        {
          "line": 7,
          "text": "    option.per_instance = 1;"
        },
        {
          "line": 8,
          "text": "    data_cp: coverpoint sampled_data {"
        },
        {
          "line": 9,
          "text": "      bins low  = {[0:63]};"
        },
        {
          "line": 10,
          "text": "      bins high = {[64:255]};"
        },
        {
          "line": 11,
          "text": "    }"
        },
        {
          "line": 12,
          "text": "  endgroup"
        },
        {
          "line": 13,
          "text": ""
        },
        {
          "line": 14,
          "text": "  function new(string name = \"demo_coverage\", uvm_component parent = null);"
        },
        {
          "line": 15,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 16,
          "text": "    data_cg = new();"
        },
        {
          "line": 17,
          "text": "  endfunction"
        },
        {
          "line": 18,
          "text": ""
        },
        {
          "line": 19,
          "text": "  function void write(demo_item item);"
        },
        {
          "line": 20,
          "text": "    sampled_data = item.data;"
        },
        {
          "line": 21,
          "text": "    data_cg.sample();"
        },
        {
          "line": 22,
          "text": "  endfunction"
        },
        {
          "line": 23,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_coverage.svh:14": {
      "file": "tb/classes/demo_coverage.svh",
      "line": 14,
      "start": 1,
      "end": 23,
      "lines": [
        {
          "line": 1,
          "text": "class demo_coverage extends uvm_subscriber #(demo_item);"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_coverage)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  bit [`DEMO_DATA_WIDTH-1:0] sampled_data;"
        },
        {
          "line": 5,
          "text": ""
        },
        {
          "line": 6,
          "text": "  covergroup data_cg;"
        },
        {
          "line": 7,
          "text": "    option.per_instance = 1;"
        },
        {
          "line": 8,
          "text": "    data_cp: coverpoint sampled_data {"
        },
        {
          "line": 9,
          "text": "      bins low  = {[0:63]};"
        },
        {
          "line": 10,
          "text": "      bins high = {[64:255]};"
        },
        {
          "line": 11,
          "text": "    }"
        },
        {
          "line": 12,
          "text": "  endgroup"
        },
        {
          "line": 13,
          "text": ""
        },
        {
          "line": 14,
          "text": "  function new(string name = \"demo_coverage\", uvm_component parent = null);"
        },
        {
          "line": 15,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 16,
          "text": "    data_cg = new();"
        },
        {
          "line": 17,
          "text": "  endfunction"
        },
        {
          "line": 18,
          "text": ""
        },
        {
          "line": 19,
          "text": "  function void write(demo_item item);"
        },
        {
          "line": 20,
          "text": "    sampled_data = item.data;"
        },
        {
          "line": 21,
          "text": "    data_cg.sample();"
        },
        {
          "line": 22,
          "text": "  endfunction"
        },
        {
          "line": 23,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_coverage.svh:19": {
      "file": "tb/classes/demo_coverage.svh",
      "line": 19,
      "start": 1,
      "end": 23,
      "lines": [
        {
          "line": 1,
          "text": "class demo_coverage extends uvm_subscriber #(demo_item);"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_coverage)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  bit [`DEMO_DATA_WIDTH-1:0] sampled_data;"
        },
        {
          "line": 5,
          "text": ""
        },
        {
          "line": 6,
          "text": "  covergroup data_cg;"
        },
        {
          "line": 7,
          "text": "    option.per_instance = 1;"
        },
        {
          "line": 8,
          "text": "    data_cp: coverpoint sampled_data {"
        },
        {
          "line": 9,
          "text": "      bins low  = {[0:63]};"
        },
        {
          "line": 10,
          "text": "      bins high = {[64:255]};"
        },
        {
          "line": 11,
          "text": "    }"
        },
        {
          "line": 12,
          "text": "  endgroup"
        },
        {
          "line": 13,
          "text": ""
        },
        {
          "line": 14,
          "text": "  function new(string name = \"demo_coverage\", uvm_component parent = null);"
        },
        {
          "line": 15,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 16,
          "text": "    data_cg = new();"
        },
        {
          "line": 17,
          "text": "  endfunction"
        },
        {
          "line": 18,
          "text": ""
        },
        {
          "line": 19,
          "text": "  function void write(demo_item item);"
        },
        {
          "line": 20,
          "text": "    sampled_data = item.data;"
        },
        {
          "line": 21,
          "text": "    data_cg.sample();"
        },
        {
          "line": 22,
          "text": "  endfunction"
        },
        {
          "line": 23,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_env.svh:1": {
      "file": "tb/classes/demo_env.svh",
      "line": 1,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_env extends uvm_env;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_env)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 5,
          "text": "  demo_agent       agent;"
        },
        {
          "line": 6,
          "text": "  demo_scoreboard  scoreboard;"
        },
        {
          "line": 7,
          "text": "  demo_coverage    coverage;"
        },
        {
          "line": 8,
          "text": ""
        },
        {
          "line": 9,
          "text": "  function new(string name = \"demo_env\", uvm_component parent = null);"
        },
        {
          "line": 10,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 11,
          "text": "  endfunction"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 14,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 15,
          "text": "    if (!uvm_config_db #(demo_env_config)::get(this, \"\", \"cfg\", cfg))"
        },
        {
          "line": 16,
          "text": "      cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 17,
          "text": "    agent = demo_agent::type_id::create(\"agent\", this);"
        },
        {
          "line": 18,
          "text": "    agent.is_active = cfg.is_active;"
        },
        {
          "line": 19,
          "text": "    scoreboard = demo_scoreboard::type_id::create(\"scoreboard\", this);"
        },
        {
          "line": 20,
          "text": "    coverage = demo_coverage::type_id::create(\"coverage\", this);"
        },
        {
          "line": 21,
          "text": "  endfunction"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 24,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 25,
          "text": "    agent.monitor.item_ap.connect(scoreboard.item_imp);"
        },
        {
          "line": 26,
          "text": "    agent.monitor.item_ap.connect(coverage.analysis_export);"
        },
        {
          "line": 27,
          "text": "  endfunction"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_env.svh:9": {
      "file": "tb/classes/demo_env.svh",
      "line": 9,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_env extends uvm_env;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_env)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 5,
          "text": "  demo_agent       agent;"
        },
        {
          "line": 6,
          "text": "  demo_scoreboard  scoreboard;"
        },
        {
          "line": 7,
          "text": "  demo_coverage    coverage;"
        },
        {
          "line": 8,
          "text": ""
        },
        {
          "line": 9,
          "text": "  function new(string name = \"demo_env\", uvm_component parent = null);"
        },
        {
          "line": 10,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 11,
          "text": "  endfunction"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 14,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 15,
          "text": "    if (!uvm_config_db #(demo_env_config)::get(this, \"\", \"cfg\", cfg))"
        },
        {
          "line": 16,
          "text": "      cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 17,
          "text": "    agent = demo_agent::type_id::create(\"agent\", this);"
        },
        {
          "line": 18,
          "text": "    agent.is_active = cfg.is_active;"
        },
        {
          "line": 19,
          "text": "    scoreboard = demo_scoreboard::type_id::create(\"scoreboard\", this);"
        },
        {
          "line": 20,
          "text": "    coverage = demo_coverage::type_id::create(\"coverage\", this);"
        },
        {
          "line": 21,
          "text": "  endfunction"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 24,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 25,
          "text": "    agent.monitor.item_ap.connect(scoreboard.item_imp);"
        },
        {
          "line": 26,
          "text": "    agent.monitor.item_ap.connect(coverage.analysis_export);"
        },
        {
          "line": 27,
          "text": "  endfunction"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_env.svh:13": {
      "file": "tb/classes/demo_env.svh",
      "line": 13,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_env extends uvm_env;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_env)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 5,
          "text": "  demo_agent       agent;"
        },
        {
          "line": 6,
          "text": "  demo_scoreboard  scoreboard;"
        },
        {
          "line": 7,
          "text": "  demo_coverage    coverage;"
        },
        {
          "line": 8,
          "text": ""
        },
        {
          "line": 9,
          "text": "  function new(string name = \"demo_env\", uvm_component parent = null);"
        },
        {
          "line": 10,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 11,
          "text": "  endfunction"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 14,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 15,
          "text": "    if (!uvm_config_db #(demo_env_config)::get(this, \"\", \"cfg\", cfg))"
        },
        {
          "line": 16,
          "text": "      cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 17,
          "text": "    agent = demo_agent::type_id::create(\"agent\", this);"
        },
        {
          "line": 18,
          "text": "    agent.is_active = cfg.is_active;"
        },
        {
          "line": 19,
          "text": "    scoreboard = demo_scoreboard::type_id::create(\"scoreboard\", this);"
        },
        {
          "line": 20,
          "text": "    coverage = demo_coverage::type_id::create(\"coverage\", this);"
        },
        {
          "line": 21,
          "text": "  endfunction"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 24,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 25,
          "text": "    agent.monitor.item_ap.connect(scoreboard.item_imp);"
        },
        {
          "line": 26,
          "text": "    agent.monitor.item_ap.connect(coverage.analysis_export);"
        },
        {
          "line": 27,
          "text": "  endfunction"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_env.svh:23": {
      "file": "tb/classes/demo_env.svh",
      "line": 23,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_env extends uvm_env;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_env)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 5,
          "text": "  demo_agent       agent;"
        },
        {
          "line": 6,
          "text": "  demo_scoreboard  scoreboard;"
        },
        {
          "line": 7,
          "text": "  demo_coverage    coverage;"
        },
        {
          "line": 8,
          "text": ""
        },
        {
          "line": 9,
          "text": "  function new(string name = \"demo_env\", uvm_component parent = null);"
        },
        {
          "line": 10,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 11,
          "text": "  endfunction"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 14,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 15,
          "text": "    if (!uvm_config_db #(demo_env_config)::get(this, \"\", \"cfg\", cfg))"
        },
        {
          "line": 16,
          "text": "      cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 17,
          "text": "    agent = demo_agent::type_id::create(\"agent\", this);"
        },
        {
          "line": 18,
          "text": "    agent.is_active = cfg.is_active;"
        },
        {
          "line": 19,
          "text": "    scoreboard = demo_scoreboard::type_id::create(\"scoreboard\", this);"
        },
        {
          "line": 20,
          "text": "    coverage = demo_coverage::type_id::create(\"coverage\", this);"
        },
        {
          "line": 21,
          "text": "  endfunction"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 24,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 25,
          "text": "    agent.monitor.item_ap.connect(scoreboard.item_imp);"
        },
        {
          "line": 26,
          "text": "    agent.monitor.item_ap.connect(coverage.analysis_export);"
        },
        {
          "line": 27,
          "text": "  endfunction"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_smoke_test.svh:1": {
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 1,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_smoke_test extends uvm_test;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_smoke_test)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env        env;"
        },
        {
          "line": 5,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_smoke_test\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 14,
          "text": "    cfg.item_count = 8;"
        },
        {
          "line": 15,
          "text": "    uvm_config_db #(demo_env_config)::set(this, \"env\", \"cfg\", cfg);"
        },
        {
          "line": 16,
          "text": "    env = demo_env::type_id::create(\"env\", this);"
        },
        {
          "line": 17,
          "text": "  endfunction"
        },
        {
          "line": 18,
          "text": ""
        },
        {
          "line": 19,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 20,
          "text": "    demo_sequence sequence;"
        },
        {
          "line": 21,
          "text": "    phase.raise_objection(this);"
        },
        {
          "line": 22,
          "text": "    sequence = demo_sequence::type_id::create(\"sequence\");"
        },
        {
          "line": 23,
          "text": "    sequence.item_count = cfg.item_count;"
        },
        {
          "line": 24,
          "text": "    sequence.start(env.agent.sequencer);"
        },
        {
          "line": 25,
          "text": "    #20ns;"
        },
        {
          "line": 26,
          "text": "    phase.drop_objection(this);"
        },
        {
          "line": 27,
          "text": "  endtask"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_smoke_test.svh:7": {
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 7,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_smoke_test extends uvm_test;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_smoke_test)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env        env;"
        },
        {
          "line": 5,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_smoke_test\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 14,
          "text": "    cfg.item_count = 8;"
        },
        {
          "line": 15,
          "text": "    uvm_config_db #(demo_env_config)::set(this, \"env\", \"cfg\", cfg);"
        },
        {
          "line": 16,
          "text": "    env = demo_env::type_id::create(\"env\", this);"
        },
        {
          "line": 17,
          "text": "  endfunction"
        },
        {
          "line": 18,
          "text": ""
        },
        {
          "line": 19,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 20,
          "text": "    demo_sequence sequence;"
        },
        {
          "line": 21,
          "text": "    phase.raise_objection(this);"
        },
        {
          "line": 22,
          "text": "    sequence = demo_sequence::type_id::create(\"sequence\");"
        },
        {
          "line": 23,
          "text": "    sequence.item_count = cfg.item_count;"
        },
        {
          "line": 24,
          "text": "    sequence.start(env.agent.sequencer);"
        },
        {
          "line": 25,
          "text": "    #20ns;"
        },
        {
          "line": 26,
          "text": "    phase.drop_objection(this);"
        },
        {
          "line": 27,
          "text": "  endtask"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_smoke_test.svh:11": {
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 11,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_smoke_test extends uvm_test;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_smoke_test)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env        env;"
        },
        {
          "line": 5,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_smoke_test\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 14,
          "text": "    cfg.item_count = 8;"
        },
        {
          "line": 15,
          "text": "    uvm_config_db #(demo_env_config)::set(this, \"env\", \"cfg\", cfg);"
        },
        {
          "line": 16,
          "text": "    env = demo_env::type_id::create(\"env\", this);"
        },
        {
          "line": 17,
          "text": "  endfunction"
        },
        {
          "line": 18,
          "text": ""
        },
        {
          "line": 19,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 20,
          "text": "    demo_sequence sequence;"
        },
        {
          "line": 21,
          "text": "    phase.raise_objection(this);"
        },
        {
          "line": 22,
          "text": "    sequence = demo_sequence::type_id::create(\"sequence\");"
        },
        {
          "line": 23,
          "text": "    sequence.item_count = cfg.item_count;"
        },
        {
          "line": 24,
          "text": "    sequence.start(env.agent.sequencer);"
        },
        {
          "line": 25,
          "text": "    #20ns;"
        },
        {
          "line": 26,
          "text": "    phase.drop_objection(this);"
        },
        {
          "line": 27,
          "text": "  endtask"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_smoke_test.svh:19": {
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 19,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_smoke_test extends uvm_test;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_smoke_test)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env        env;"
        },
        {
          "line": 5,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_smoke_test\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 14,
          "text": "    cfg.item_count = 8;"
        },
        {
          "line": 15,
          "text": "    uvm_config_db #(demo_env_config)::set(this, \"env\", \"cfg\", cfg);"
        },
        {
          "line": 16,
          "text": "    env = demo_env::type_id::create(\"env\", this);"
        },
        {
          "line": 17,
          "text": "  endfunction"
        },
        {
          "line": 18,
          "text": ""
        },
        {
          "line": 19,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 20,
          "text": "    demo_sequence sequence;"
        },
        {
          "line": 21,
          "text": "    phase.raise_objection(this);"
        },
        {
          "line": 22,
          "text": "    sequence = demo_sequence::type_id::create(\"sequence\");"
        },
        {
          "line": 23,
          "text": "    sequence.item_count = cfg.item_count;"
        },
        {
          "line": 24,
          "text": "    sequence.start(env.agent.sequencer);"
        },
        {
          "line": 25,
          "text": "    #20ns;"
        },
        {
          "line": 26,
          "text": "    phase.drop_objection(this);"
        },
        {
          "line": 27,
          "text": "  endtask"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/demo_pkg.sv:2": {
      "file": "tb/demo_pkg.sv",
      "line": 2,
      "start": 1,
      "end": 16,
      "lines": [
        {
          "line": 1,
          "text": "package demo_pkg;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  `include \"uvm_macros.svh\""
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  `include \"demo_item.svh\""
        },
        {
          "line": 6,
          "text": "  `include \"demo_env_config.svh\""
        },
        {
          "line": 7,
          "text": "  `include \"demo_sequence.svh\""
        },
        {
          "line": 8,
          "text": "  `include \"demo_sequencer.svh\""
        },
        {
          "line": 9,
          "text": "  `include \"demo_driver.svh\""
        },
        {
          "line": 10,
          "text": "  `include \"demo_monitor.svh\""
        },
        {
          "line": 11,
          "text": "  `include \"demo_agent.svh\""
        },
        {
          "line": 12,
          "text": "  `include \"demo_scoreboard.svh\""
        },
        {
          "line": 13,
          "text": "  `include \"demo_coverage.svh\""
        },
        {
          "line": 14,
          "text": "  `include \"demo_env.svh\""
        },
        {
          "line": 15,
          "text": "  `include \"demo_smoke_test.svh\""
        },
        {
          "line": 16,
          "text": "endpackage"
        }
      ]
    },
    "tb/demo_pkg.sv:3": {
      "file": "tb/demo_pkg.sv",
      "line": 3,
      "start": 1,
      "end": 16,
      "lines": [
        {
          "line": 1,
          "text": "package demo_pkg;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  `include \"uvm_macros.svh\""
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  `include \"demo_item.svh\""
        },
        {
          "line": 6,
          "text": "  `include \"demo_env_config.svh\""
        },
        {
          "line": 7,
          "text": "  `include \"demo_sequence.svh\""
        },
        {
          "line": 8,
          "text": "  `include \"demo_sequencer.svh\""
        },
        {
          "line": 9,
          "text": "  `include \"demo_driver.svh\""
        },
        {
          "line": 10,
          "text": "  `include \"demo_monitor.svh\""
        },
        {
          "line": 11,
          "text": "  `include \"demo_agent.svh\""
        },
        {
          "line": 12,
          "text": "  `include \"demo_scoreboard.svh\""
        },
        {
          "line": 13,
          "text": "  `include \"demo_coverage.svh\""
        },
        {
          "line": 14,
          "text": "  `include \"demo_env.svh\""
        },
        {
          "line": 15,
          "text": "  `include \"demo_smoke_test.svh\""
        },
        {
          "line": 16,
          "text": "endpackage"
        }
      ]
    },
    "tb/demo_pkg.sv:5": {
      "file": "tb/demo_pkg.sv",
      "line": 5,
      "start": 1,
      "end": 16,
      "lines": [
        {
          "line": 1,
          "text": "package demo_pkg;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  `include \"uvm_macros.svh\""
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  `include \"demo_item.svh\""
        },
        {
          "line": 6,
          "text": "  `include \"demo_env_config.svh\""
        },
        {
          "line": 7,
          "text": "  `include \"demo_sequence.svh\""
        },
        {
          "line": 8,
          "text": "  `include \"demo_sequencer.svh\""
        },
        {
          "line": 9,
          "text": "  `include \"demo_driver.svh\""
        },
        {
          "line": 10,
          "text": "  `include \"demo_monitor.svh\""
        },
        {
          "line": 11,
          "text": "  `include \"demo_agent.svh\""
        },
        {
          "line": 12,
          "text": "  `include \"demo_scoreboard.svh\""
        },
        {
          "line": 13,
          "text": "  `include \"demo_coverage.svh\""
        },
        {
          "line": 14,
          "text": "  `include \"demo_env.svh\""
        },
        {
          "line": 15,
          "text": "  `include \"demo_smoke_test.svh\""
        },
        {
          "line": 16,
          "text": "endpackage"
        }
      ]
    },
    "tb/demo_pkg.sv:6": {
      "file": "tb/demo_pkg.sv",
      "line": 6,
      "start": 1,
      "end": 16,
      "lines": [
        {
          "line": 1,
          "text": "package demo_pkg;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  `include \"uvm_macros.svh\""
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  `include \"demo_item.svh\""
        },
        {
          "line": 6,
          "text": "  `include \"demo_env_config.svh\""
        },
        {
          "line": 7,
          "text": "  `include \"demo_sequence.svh\""
        },
        {
          "line": 8,
          "text": "  `include \"demo_sequencer.svh\""
        },
        {
          "line": 9,
          "text": "  `include \"demo_driver.svh\""
        },
        {
          "line": 10,
          "text": "  `include \"demo_monitor.svh\""
        },
        {
          "line": 11,
          "text": "  `include \"demo_agent.svh\""
        },
        {
          "line": 12,
          "text": "  `include \"demo_scoreboard.svh\""
        },
        {
          "line": 13,
          "text": "  `include \"demo_coverage.svh\""
        },
        {
          "line": 14,
          "text": "  `include \"demo_env.svh\""
        },
        {
          "line": 15,
          "text": "  `include \"demo_smoke_test.svh\""
        },
        {
          "line": 16,
          "text": "endpackage"
        }
      ]
    },
    "tb/demo_pkg.sv:7": {
      "file": "tb/demo_pkg.sv",
      "line": 7,
      "start": 1,
      "end": 16,
      "lines": [
        {
          "line": 1,
          "text": "package demo_pkg;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  `include \"uvm_macros.svh\""
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  `include \"demo_item.svh\""
        },
        {
          "line": 6,
          "text": "  `include \"demo_env_config.svh\""
        },
        {
          "line": 7,
          "text": "  `include \"demo_sequence.svh\""
        },
        {
          "line": 8,
          "text": "  `include \"demo_sequencer.svh\""
        },
        {
          "line": 9,
          "text": "  `include \"demo_driver.svh\""
        },
        {
          "line": 10,
          "text": "  `include \"demo_monitor.svh\""
        },
        {
          "line": 11,
          "text": "  `include \"demo_agent.svh\""
        },
        {
          "line": 12,
          "text": "  `include \"demo_scoreboard.svh\""
        },
        {
          "line": 13,
          "text": "  `include \"demo_coverage.svh\""
        },
        {
          "line": 14,
          "text": "  `include \"demo_env.svh\""
        },
        {
          "line": 15,
          "text": "  `include \"demo_smoke_test.svh\""
        },
        {
          "line": 16,
          "text": "endpackage"
        }
      ]
    },
    "tb/demo_pkg.sv:8": {
      "file": "tb/demo_pkg.sv",
      "line": 8,
      "start": 1,
      "end": 16,
      "lines": [
        {
          "line": 1,
          "text": "package demo_pkg;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  `include \"uvm_macros.svh\""
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  `include \"demo_item.svh\""
        },
        {
          "line": 6,
          "text": "  `include \"demo_env_config.svh\""
        },
        {
          "line": 7,
          "text": "  `include \"demo_sequence.svh\""
        },
        {
          "line": 8,
          "text": "  `include \"demo_sequencer.svh\""
        },
        {
          "line": 9,
          "text": "  `include \"demo_driver.svh\""
        },
        {
          "line": 10,
          "text": "  `include \"demo_monitor.svh\""
        },
        {
          "line": 11,
          "text": "  `include \"demo_agent.svh\""
        },
        {
          "line": 12,
          "text": "  `include \"demo_scoreboard.svh\""
        },
        {
          "line": 13,
          "text": "  `include \"demo_coverage.svh\""
        },
        {
          "line": 14,
          "text": "  `include \"demo_env.svh\""
        },
        {
          "line": 15,
          "text": "  `include \"demo_smoke_test.svh\""
        },
        {
          "line": 16,
          "text": "endpackage"
        }
      ]
    },
    "tb/demo_pkg.sv:9": {
      "file": "tb/demo_pkg.sv",
      "line": 9,
      "start": 1,
      "end": 16,
      "lines": [
        {
          "line": 1,
          "text": "package demo_pkg;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  `include \"uvm_macros.svh\""
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  `include \"demo_item.svh\""
        },
        {
          "line": 6,
          "text": "  `include \"demo_env_config.svh\""
        },
        {
          "line": 7,
          "text": "  `include \"demo_sequence.svh\""
        },
        {
          "line": 8,
          "text": "  `include \"demo_sequencer.svh\""
        },
        {
          "line": 9,
          "text": "  `include \"demo_driver.svh\""
        },
        {
          "line": 10,
          "text": "  `include \"demo_monitor.svh\""
        },
        {
          "line": 11,
          "text": "  `include \"demo_agent.svh\""
        },
        {
          "line": 12,
          "text": "  `include \"demo_scoreboard.svh\""
        },
        {
          "line": 13,
          "text": "  `include \"demo_coverage.svh\""
        },
        {
          "line": 14,
          "text": "  `include \"demo_env.svh\""
        },
        {
          "line": 15,
          "text": "  `include \"demo_smoke_test.svh\""
        },
        {
          "line": 16,
          "text": "endpackage"
        }
      ]
    },
    "tb/demo_pkg.sv:10": {
      "file": "tb/demo_pkg.sv",
      "line": 10,
      "start": 1,
      "end": 16,
      "lines": [
        {
          "line": 1,
          "text": "package demo_pkg;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  `include \"uvm_macros.svh\""
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  `include \"demo_item.svh\""
        },
        {
          "line": 6,
          "text": "  `include \"demo_env_config.svh\""
        },
        {
          "line": 7,
          "text": "  `include \"demo_sequence.svh\""
        },
        {
          "line": 8,
          "text": "  `include \"demo_sequencer.svh\""
        },
        {
          "line": 9,
          "text": "  `include \"demo_driver.svh\""
        },
        {
          "line": 10,
          "text": "  `include \"demo_monitor.svh\""
        },
        {
          "line": 11,
          "text": "  `include \"demo_agent.svh\""
        },
        {
          "line": 12,
          "text": "  `include \"demo_scoreboard.svh\""
        },
        {
          "line": 13,
          "text": "  `include \"demo_coverage.svh\""
        },
        {
          "line": 14,
          "text": "  `include \"demo_env.svh\""
        },
        {
          "line": 15,
          "text": "  `include \"demo_smoke_test.svh\""
        },
        {
          "line": 16,
          "text": "endpackage"
        }
      ]
    },
    "tb/demo_pkg.sv:11": {
      "file": "tb/demo_pkg.sv",
      "line": 11,
      "start": 1,
      "end": 16,
      "lines": [
        {
          "line": 1,
          "text": "package demo_pkg;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  `include \"uvm_macros.svh\""
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  `include \"demo_item.svh\""
        },
        {
          "line": 6,
          "text": "  `include \"demo_env_config.svh\""
        },
        {
          "line": 7,
          "text": "  `include \"demo_sequence.svh\""
        },
        {
          "line": 8,
          "text": "  `include \"demo_sequencer.svh\""
        },
        {
          "line": 9,
          "text": "  `include \"demo_driver.svh\""
        },
        {
          "line": 10,
          "text": "  `include \"demo_monitor.svh\""
        },
        {
          "line": 11,
          "text": "  `include \"demo_agent.svh\""
        },
        {
          "line": 12,
          "text": "  `include \"demo_scoreboard.svh\""
        },
        {
          "line": 13,
          "text": "  `include \"demo_coverage.svh\""
        },
        {
          "line": 14,
          "text": "  `include \"demo_env.svh\""
        },
        {
          "line": 15,
          "text": "  `include \"demo_smoke_test.svh\""
        },
        {
          "line": 16,
          "text": "endpackage"
        }
      ]
    },
    "tb/demo_pkg.sv:12": {
      "file": "tb/demo_pkg.sv",
      "line": 12,
      "start": 1,
      "end": 16,
      "lines": [
        {
          "line": 1,
          "text": "package demo_pkg;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  `include \"uvm_macros.svh\""
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  `include \"demo_item.svh\""
        },
        {
          "line": 6,
          "text": "  `include \"demo_env_config.svh\""
        },
        {
          "line": 7,
          "text": "  `include \"demo_sequence.svh\""
        },
        {
          "line": 8,
          "text": "  `include \"demo_sequencer.svh\""
        },
        {
          "line": 9,
          "text": "  `include \"demo_driver.svh\""
        },
        {
          "line": 10,
          "text": "  `include \"demo_monitor.svh\""
        },
        {
          "line": 11,
          "text": "  `include \"demo_agent.svh\""
        },
        {
          "line": 12,
          "text": "  `include \"demo_scoreboard.svh\""
        },
        {
          "line": 13,
          "text": "  `include \"demo_coverage.svh\""
        },
        {
          "line": 14,
          "text": "  `include \"demo_env.svh\""
        },
        {
          "line": 15,
          "text": "  `include \"demo_smoke_test.svh\""
        },
        {
          "line": 16,
          "text": "endpackage"
        }
      ]
    },
    "tb/demo_pkg.sv:13": {
      "file": "tb/demo_pkg.sv",
      "line": 13,
      "start": 1,
      "end": 16,
      "lines": [
        {
          "line": 1,
          "text": "package demo_pkg;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  `include \"uvm_macros.svh\""
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  `include \"demo_item.svh\""
        },
        {
          "line": 6,
          "text": "  `include \"demo_env_config.svh\""
        },
        {
          "line": 7,
          "text": "  `include \"demo_sequence.svh\""
        },
        {
          "line": 8,
          "text": "  `include \"demo_sequencer.svh\""
        },
        {
          "line": 9,
          "text": "  `include \"demo_driver.svh\""
        },
        {
          "line": 10,
          "text": "  `include \"demo_monitor.svh\""
        },
        {
          "line": 11,
          "text": "  `include \"demo_agent.svh\""
        },
        {
          "line": 12,
          "text": "  `include \"demo_scoreboard.svh\""
        },
        {
          "line": 13,
          "text": "  `include \"demo_coverage.svh\""
        },
        {
          "line": 14,
          "text": "  `include \"demo_env.svh\""
        },
        {
          "line": 15,
          "text": "  `include \"demo_smoke_test.svh\""
        },
        {
          "line": 16,
          "text": "endpackage"
        }
      ]
    },
    "tb/demo_pkg.sv:14": {
      "file": "tb/demo_pkg.sv",
      "line": 14,
      "start": 1,
      "end": 16,
      "lines": [
        {
          "line": 1,
          "text": "package demo_pkg;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  `include \"uvm_macros.svh\""
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  `include \"demo_item.svh\""
        },
        {
          "line": 6,
          "text": "  `include \"demo_env_config.svh\""
        },
        {
          "line": 7,
          "text": "  `include \"demo_sequence.svh\""
        },
        {
          "line": 8,
          "text": "  `include \"demo_sequencer.svh\""
        },
        {
          "line": 9,
          "text": "  `include \"demo_driver.svh\""
        },
        {
          "line": 10,
          "text": "  `include \"demo_monitor.svh\""
        },
        {
          "line": 11,
          "text": "  `include \"demo_agent.svh\""
        },
        {
          "line": 12,
          "text": "  `include \"demo_scoreboard.svh\""
        },
        {
          "line": 13,
          "text": "  `include \"demo_coverage.svh\""
        },
        {
          "line": 14,
          "text": "  `include \"demo_env.svh\""
        },
        {
          "line": 15,
          "text": "  `include \"demo_smoke_test.svh\""
        },
        {
          "line": 16,
          "text": "endpackage"
        }
      ]
    },
    "tb/demo_pkg.sv:15": {
      "file": "tb/demo_pkg.sv",
      "line": 15,
      "start": 1,
      "end": 16,
      "lines": [
        {
          "line": 1,
          "text": "package demo_pkg;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  `include \"uvm_macros.svh\""
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  `include \"demo_item.svh\""
        },
        {
          "line": 6,
          "text": "  `include \"demo_env_config.svh\""
        },
        {
          "line": 7,
          "text": "  `include \"demo_sequence.svh\""
        },
        {
          "line": 8,
          "text": "  `include \"demo_sequencer.svh\""
        },
        {
          "line": 9,
          "text": "  `include \"demo_driver.svh\""
        },
        {
          "line": 10,
          "text": "  `include \"demo_monitor.svh\""
        },
        {
          "line": 11,
          "text": "  `include \"demo_agent.svh\""
        },
        {
          "line": 12,
          "text": "  `include \"demo_scoreboard.svh\""
        },
        {
          "line": 13,
          "text": "  `include \"demo_coverage.svh\""
        },
        {
          "line": 14,
          "text": "  `include \"demo_env.svh\""
        },
        {
          "line": 15,
          "text": "  `include \"demo_smoke_test.svh\""
        },
        {
          "line": 16,
          "text": "endpackage"
        }
      ]
    },
    "tb/demo_top.sv:2": {
      "file": "tb/demo_top.sv",
      "line": 2,
      "start": 1,
      "end": 32,
      "lines": [
        {
          "line": 1,
          "text": "module demo_top;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  import demo_pkg::*;"
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  logic clk = 1'b0;"
        },
        {
          "line": 6,
          "text": "  logic reset_n = 1'b0;"
        },
        {
          "line": 7,
          "text": ""
        },
        {
          "line": 8,
          "text": "  always #5ns clk = ~clk;"
        },
        {
          "line": 9,
          "text": ""
        },
        {
          "line": 10,
          "text": "  demo_if demo_vif ("
        },
        {
          "line": 11,
          "text": "    .clk     (clk),"
        },
        {
          "line": 12,
          "text": "    .reset_n (reset_n)"
        },
        {
          "line": 13,
          "text": "  );"
        },
        {
          "line": 14,
          "text": ""
        },
        {
          "line": 15,
          "text": "  demo_dut dut ("
        },
        {
          "line": 16,
          "text": "    .clk     (clk),"
        },
        {
          "line": 17,
          "text": "    .reset_n (reset_n),"
        },
        {
          "line": 18,
          "text": "    .valid   (demo_vif.valid),"
        },
        {
          "line": 19,
          "text": "    .ready   (demo_vif.ready),"
        },
        {
          "line": 20,
          "text": "    .data    (demo_vif.data)"
        },
        {
          "line": 21,
          "text": "  );"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  initial begin"
        },
        {
          "line": 24,
          "text": "    repeat (4) @(posedge clk);"
        },
        {
          "line": 25,
          "text": "    reset_n = 1'b1;"
        },
        {
          "line": 26,
          "text": "  end"
        },
        {
          "line": 27,
          "text": ""
        },
        {
          "line": 28,
          "text": "  initial begin"
        },
        {
          "line": 29,
          "text": "    uvm_config_db #(virtual demo_if)::set(null, \"*\", \"vif\", demo_vif);"
        },
        {
          "line": 30,
          "text": "    run_test(\"demo_smoke_test\");"
        },
        {
          "line": 31,
          "text": "  end"
        },
        {
          "line": 32,
          "text": "endmodule"
        }
      ]
    },
    "tb/demo_top.sv:3": {
      "file": "tb/demo_top.sv",
      "line": 3,
      "start": 1,
      "end": 32,
      "lines": [
        {
          "line": 1,
          "text": "module demo_top;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  import demo_pkg::*;"
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  logic clk = 1'b0;"
        },
        {
          "line": 6,
          "text": "  logic reset_n = 1'b0;"
        },
        {
          "line": 7,
          "text": ""
        },
        {
          "line": 8,
          "text": "  always #5ns clk = ~clk;"
        },
        {
          "line": 9,
          "text": ""
        },
        {
          "line": 10,
          "text": "  demo_if demo_vif ("
        },
        {
          "line": 11,
          "text": "    .clk     (clk),"
        },
        {
          "line": 12,
          "text": "    .reset_n (reset_n)"
        },
        {
          "line": 13,
          "text": "  );"
        },
        {
          "line": 14,
          "text": ""
        },
        {
          "line": 15,
          "text": "  demo_dut dut ("
        },
        {
          "line": 16,
          "text": "    .clk     (clk),"
        },
        {
          "line": 17,
          "text": "    .reset_n (reset_n),"
        },
        {
          "line": 18,
          "text": "    .valid   (demo_vif.valid),"
        },
        {
          "line": 19,
          "text": "    .ready   (demo_vif.ready),"
        },
        {
          "line": 20,
          "text": "    .data    (demo_vif.data)"
        },
        {
          "line": 21,
          "text": "  );"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  initial begin"
        },
        {
          "line": 24,
          "text": "    repeat (4) @(posedge clk);"
        },
        {
          "line": 25,
          "text": "    reset_n = 1'b1;"
        },
        {
          "line": 26,
          "text": "  end"
        },
        {
          "line": 27,
          "text": ""
        },
        {
          "line": 28,
          "text": "  initial begin"
        },
        {
          "line": 29,
          "text": "    uvm_config_db #(virtual demo_if)::set(null, \"*\", \"vif\", demo_vif);"
        },
        {
          "line": 30,
          "text": "    run_test(\"demo_smoke_test\");"
        },
        {
          "line": 31,
          "text": "  end"
        },
        {
          "line": 32,
          "text": "endmodule"
        }
      ]
    },
    "tb/demo_top.sv:29": {
      "file": "tb/demo_top.sv",
      "line": 29,
      "start": 1,
      "end": 32,
      "lines": [
        {
          "line": 1,
          "text": "module demo_top;"
        },
        {
          "line": 2,
          "text": "  import uvm_pkg::*;"
        },
        {
          "line": 3,
          "text": "  import demo_pkg::*;"
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "  logic clk = 1'b0;"
        },
        {
          "line": 6,
          "text": "  logic reset_n = 1'b0;"
        },
        {
          "line": 7,
          "text": ""
        },
        {
          "line": 8,
          "text": "  always #5ns clk = ~clk;"
        },
        {
          "line": 9,
          "text": ""
        },
        {
          "line": 10,
          "text": "  demo_if demo_vif ("
        },
        {
          "line": 11,
          "text": "    .clk     (clk),"
        },
        {
          "line": 12,
          "text": "    .reset_n (reset_n)"
        },
        {
          "line": 13,
          "text": "  );"
        },
        {
          "line": 14,
          "text": ""
        },
        {
          "line": 15,
          "text": "  demo_dut dut ("
        },
        {
          "line": 16,
          "text": "    .clk     (clk),"
        },
        {
          "line": 17,
          "text": "    .reset_n (reset_n),"
        },
        {
          "line": 18,
          "text": "    .valid   (demo_vif.valid),"
        },
        {
          "line": 19,
          "text": "    .ready   (demo_vif.ready),"
        },
        {
          "line": 20,
          "text": "    .data    (demo_vif.data)"
        },
        {
          "line": 21,
          "text": "  );"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  initial begin"
        },
        {
          "line": 24,
          "text": "    repeat (4) @(posedge clk);"
        },
        {
          "line": 25,
          "text": "    reset_n = 1'b1;"
        },
        {
          "line": 26,
          "text": "  end"
        },
        {
          "line": 27,
          "text": ""
        },
        {
          "line": 28,
          "text": "  initial begin"
        },
        {
          "line": 29,
          "text": "    uvm_config_db #(virtual demo_if)::set(null, \"*\", \"vif\", demo_vif);"
        },
        {
          "line": 30,
          "text": "    run_test(\"demo_smoke_test\");"
        },
        {
          "line": 31,
          "text": "  end"
        },
        {
          "line": 32,
          "text": "endmodule"
        }
      ]
    },
    "tb/classes/demo_sequence.svh:12": {
      "file": "tb/classes/demo_sequence.svh",
      "line": 12,
      "start": 1,
      "end": 19,
      "lines": [
        {
          "line": 1,
          "text": "class demo_sequence extends uvm_sequence #(demo_item);"
        },
        {
          "line": 2,
          "text": "  int unsigned item_count = 8;"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  `uvm_object_utils(demo_sequence)"
        },
        {
          "line": 5,
          "text": ""
        },
        {
          "line": 6,
          "text": "  function new(string name = \"demo_sequence\");"
        },
        {
          "line": 7,
          "text": "    super.new(name);"
        },
        {
          "line": 8,
          "text": "  endfunction"
        },
        {
          "line": 9,
          "text": ""
        },
        {
          "line": 10,
          "text": "  task body();"
        },
        {
          "line": 11,
          "text": "    repeat (item_count) begin"
        },
        {
          "line": 12,
          "text": "      req = demo_item::type_id::create(\"req\");"
        },
        {
          "line": 13,
          "text": "      start_item(req);"
        },
        {
          "line": 14,
          "text": "      if (!req.randomize())"
        },
        {
          "line": 15,
          "text": "        `uvm_fatal(get_type_name(), \"demo_item randomization failed\")"
        },
        {
          "line": 16,
          "text": "      finish_item(req);"
        },
        {
          "line": 17,
          "text": "    end"
        },
        {
          "line": 18,
          "text": "  endtask"
        },
        {
          "line": 19,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_driver.svh:12": {
      "file": "tb/classes/demo_driver.svh",
      "line": 12,
      "start": 1,
      "end": 29,
      "lines": [
        {
          "line": 1,
          "text": "class demo_driver extends uvm_driver #(demo_item);"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_driver)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  virtual demo_if vif;"
        },
        {
          "line": 5,
          "text": ""
        },
        {
          "line": 6,
          "text": "  function new(string name = \"demo_driver\", uvm_component parent = null);"
        },
        {
          "line": 7,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 8,
          "text": "  endfunction"
        },
        {
          "line": 9,
          "text": ""
        },
        {
          "line": 10,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 11,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 12,
          "text": "    if (!uvm_config_db #(virtual demo_if)::get(this, \"\", \"vif\", vif))"
        },
        {
          "line": 13,
          "text": "      `uvm_fatal(get_type_name(), \"virtual interface was not configured\")"
        },
        {
          "line": 14,
          "text": "  endfunction"
        },
        {
          "line": 15,
          "text": ""
        },
        {
          "line": 16,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 17,
          "text": "    vif.valid <= 1'b0;"
        },
        {
          "line": 18,
          "text": "    vif.data  <= '0;"
        },
        {
          "line": 19,
          "text": "    forever begin"
        },
        {
          "line": 20,
          "text": "      seq_item_port.get_next_item(req);"
        },
        {
          "line": 21,
          "text": "      @(posedge vif.clk);"
        },
        {
          "line": 22,
          "text": "      vif.valid <= 1'b1;"
        },
        {
          "line": 23,
          "text": "      vif.data  <= req.data;"
        },
        {
          "line": 24,
          "text": "      do @(posedge vif.clk); while (!vif.ready);"
        },
        {
          "line": 25,
          "text": "      vif.valid <= 1'b0;"
        },
        {
          "line": 26,
          "text": "      seq_item_port.item_done();"
        },
        {
          "line": 27,
          "text": "    end"
        },
        {
          "line": 28,
          "text": "  endtask"
        },
        {
          "line": 29,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_monitor.svh:5": {
      "file": "tb/classes/demo_monitor.svh",
      "line": 5,
      "start": 1,
      "end": 29,
      "lines": [
        {
          "line": 1,
          "text": "class demo_monitor extends uvm_monitor;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_monitor)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  virtual demo_if vif;"
        },
        {
          "line": 5,
          "text": "  uvm_analysis_port #(demo_item) item_ap;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_monitor\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    item_ap = new(\"item_ap\", this);"
        },
        {
          "line": 14,
          "text": "    if (!uvm_config_db #(virtual demo_if)::get(this, \"\", \"vif\", vif))"
        },
        {
          "line": 15,
          "text": "      `uvm_fatal(get_type_name(), \"virtual interface was not configured\")"
        },
        {
          "line": 16,
          "text": "  endfunction"
        },
        {
          "line": 17,
          "text": ""
        },
        {
          "line": 18,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 19,
          "text": "    demo_item observed;"
        },
        {
          "line": 20,
          "text": "    forever begin"
        },
        {
          "line": 21,
          "text": "      @(posedge vif.clk);"
        },
        {
          "line": 22,
          "text": "      if (vif.reset_n && vif.valid && vif.ready) begin"
        },
        {
          "line": 23,
          "text": "        observed = demo_item::type_id::create(\"observed\");"
        },
        {
          "line": 24,
          "text": "        observed.data = vif.data;"
        },
        {
          "line": 25,
          "text": "        item_ap.write(observed);"
        },
        {
          "line": 26,
          "text": "      end"
        },
        {
          "line": 27,
          "text": "    end"
        },
        {
          "line": 28,
          "text": "  endtask"
        },
        {
          "line": 29,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_monitor.svh:14": {
      "file": "tb/classes/demo_monitor.svh",
      "line": 14,
      "start": 1,
      "end": 29,
      "lines": [
        {
          "line": 1,
          "text": "class demo_monitor extends uvm_monitor;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_monitor)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  virtual demo_if vif;"
        },
        {
          "line": 5,
          "text": "  uvm_analysis_port #(demo_item) item_ap;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_monitor\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    item_ap = new(\"item_ap\", this);"
        },
        {
          "line": 14,
          "text": "    if (!uvm_config_db #(virtual demo_if)::get(this, \"\", \"vif\", vif))"
        },
        {
          "line": 15,
          "text": "      `uvm_fatal(get_type_name(), \"virtual interface was not configured\")"
        },
        {
          "line": 16,
          "text": "  endfunction"
        },
        {
          "line": 17,
          "text": ""
        },
        {
          "line": 18,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 19,
          "text": "    demo_item observed;"
        },
        {
          "line": 20,
          "text": "    forever begin"
        },
        {
          "line": 21,
          "text": "      @(posedge vif.clk);"
        },
        {
          "line": 22,
          "text": "      if (vif.reset_n && vif.valid && vif.ready) begin"
        },
        {
          "line": 23,
          "text": "        observed = demo_item::type_id::create(\"observed\");"
        },
        {
          "line": 24,
          "text": "        observed.data = vif.data;"
        },
        {
          "line": 25,
          "text": "        item_ap.write(observed);"
        },
        {
          "line": 26,
          "text": "      end"
        },
        {
          "line": 27,
          "text": "    end"
        },
        {
          "line": 28,
          "text": "  endtask"
        },
        {
          "line": 29,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_monitor.svh:23": {
      "file": "tb/classes/demo_monitor.svh",
      "line": 23,
      "start": 1,
      "end": 29,
      "lines": [
        {
          "line": 1,
          "text": "class demo_monitor extends uvm_monitor;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_monitor)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  virtual demo_if vif;"
        },
        {
          "line": 5,
          "text": "  uvm_analysis_port #(demo_item) item_ap;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_monitor\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    item_ap = new(\"item_ap\", this);"
        },
        {
          "line": 14,
          "text": "    if (!uvm_config_db #(virtual demo_if)::get(this, \"\", \"vif\", vif))"
        },
        {
          "line": 15,
          "text": "      `uvm_fatal(get_type_name(), \"virtual interface was not configured\")"
        },
        {
          "line": 16,
          "text": "  endfunction"
        },
        {
          "line": 17,
          "text": ""
        },
        {
          "line": 18,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 19,
          "text": "    demo_item observed;"
        },
        {
          "line": 20,
          "text": "    forever begin"
        },
        {
          "line": 21,
          "text": "      @(posedge vif.clk);"
        },
        {
          "line": 22,
          "text": "      if (vif.reset_n && vif.valid && vif.ready) begin"
        },
        {
          "line": 23,
          "text": "        observed = demo_item::type_id::create(\"observed\");"
        },
        {
          "line": 24,
          "text": "        observed.data = vif.data;"
        },
        {
          "line": 25,
          "text": "        item_ap.write(observed);"
        },
        {
          "line": 26,
          "text": "      end"
        },
        {
          "line": 27,
          "text": "    end"
        },
        {
          "line": 28,
          "text": "  endtask"
        },
        {
          "line": 29,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_agent.svh:14": {
      "file": "tb/classes/demo_agent.svh",
      "line": 14,
      "start": 1,
      "end": 26,
      "lines": [
        {
          "line": 1,
          "text": "class demo_agent extends uvm_agent;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_agent)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_sequencer sequencer;"
        },
        {
          "line": 5,
          "text": "  demo_driver    driver;"
        },
        {
          "line": 6,
          "text": "  demo_monitor   monitor;"
        },
        {
          "line": 7,
          "text": ""
        },
        {
          "line": 8,
          "text": "  function new(string name = \"demo_agent\", uvm_component parent = null);"
        },
        {
          "line": 9,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 10,
          "text": "  endfunction"
        },
        {
          "line": 11,
          "text": ""
        },
        {
          "line": 12,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 13,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 14,
          "text": "    monitor = demo_monitor::type_id::create(\"monitor\", this);"
        },
        {
          "line": 15,
          "text": "    if (is_active == UVM_ACTIVE) begin"
        },
        {
          "line": 16,
          "text": "      sequencer = demo_sequencer::type_id::create(\"sequencer\", this);"
        },
        {
          "line": 17,
          "text": "      driver    = demo_driver::type_id::create(\"driver\", this);"
        },
        {
          "line": 18,
          "text": "    end"
        },
        {
          "line": 19,
          "text": "  endfunction"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 22,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 23,
          "text": "    if (is_active == UVM_ACTIVE)"
        },
        {
          "line": 24,
          "text": "      driver.seq_item_port.connect(sequencer.seq_item_export);"
        },
        {
          "line": 25,
          "text": "  endfunction"
        },
        {
          "line": 26,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_agent.svh:16": {
      "file": "tb/classes/demo_agent.svh",
      "line": 16,
      "start": 1,
      "end": 26,
      "lines": [
        {
          "line": 1,
          "text": "class demo_agent extends uvm_agent;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_agent)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_sequencer sequencer;"
        },
        {
          "line": 5,
          "text": "  demo_driver    driver;"
        },
        {
          "line": 6,
          "text": "  demo_monitor   monitor;"
        },
        {
          "line": 7,
          "text": ""
        },
        {
          "line": 8,
          "text": "  function new(string name = \"demo_agent\", uvm_component parent = null);"
        },
        {
          "line": 9,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 10,
          "text": "  endfunction"
        },
        {
          "line": 11,
          "text": ""
        },
        {
          "line": 12,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 13,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 14,
          "text": "    monitor = demo_monitor::type_id::create(\"monitor\", this);"
        },
        {
          "line": 15,
          "text": "    if (is_active == UVM_ACTIVE) begin"
        },
        {
          "line": 16,
          "text": "      sequencer = demo_sequencer::type_id::create(\"sequencer\", this);"
        },
        {
          "line": 17,
          "text": "      driver    = demo_driver::type_id::create(\"driver\", this);"
        },
        {
          "line": 18,
          "text": "    end"
        },
        {
          "line": 19,
          "text": "  endfunction"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 22,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 23,
          "text": "    if (is_active == UVM_ACTIVE)"
        },
        {
          "line": 24,
          "text": "      driver.seq_item_port.connect(sequencer.seq_item_export);"
        },
        {
          "line": 25,
          "text": "  endfunction"
        },
        {
          "line": 26,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_agent.svh:17": {
      "file": "tb/classes/demo_agent.svh",
      "line": 17,
      "start": 1,
      "end": 26,
      "lines": [
        {
          "line": 1,
          "text": "class demo_agent extends uvm_agent;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_agent)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_sequencer sequencer;"
        },
        {
          "line": 5,
          "text": "  demo_driver    driver;"
        },
        {
          "line": 6,
          "text": "  demo_monitor   monitor;"
        },
        {
          "line": 7,
          "text": ""
        },
        {
          "line": 8,
          "text": "  function new(string name = \"demo_agent\", uvm_component parent = null);"
        },
        {
          "line": 9,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 10,
          "text": "  endfunction"
        },
        {
          "line": 11,
          "text": ""
        },
        {
          "line": 12,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 13,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 14,
          "text": "    monitor = demo_monitor::type_id::create(\"monitor\", this);"
        },
        {
          "line": 15,
          "text": "    if (is_active == UVM_ACTIVE) begin"
        },
        {
          "line": 16,
          "text": "      sequencer = demo_sequencer::type_id::create(\"sequencer\", this);"
        },
        {
          "line": 17,
          "text": "      driver    = demo_driver::type_id::create(\"driver\", this);"
        },
        {
          "line": 18,
          "text": "    end"
        },
        {
          "line": 19,
          "text": "  endfunction"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 22,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 23,
          "text": "    if (is_active == UVM_ACTIVE)"
        },
        {
          "line": 24,
          "text": "      driver.seq_item_port.connect(sequencer.seq_item_export);"
        },
        {
          "line": 25,
          "text": "  endfunction"
        },
        {
          "line": 26,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_agent.svh:24": {
      "file": "tb/classes/demo_agent.svh",
      "line": 24,
      "start": 1,
      "end": 26,
      "lines": [
        {
          "line": 1,
          "text": "class demo_agent extends uvm_agent;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_agent)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_sequencer sequencer;"
        },
        {
          "line": 5,
          "text": "  demo_driver    driver;"
        },
        {
          "line": 6,
          "text": "  demo_monitor   monitor;"
        },
        {
          "line": 7,
          "text": ""
        },
        {
          "line": 8,
          "text": "  function new(string name = \"demo_agent\", uvm_component parent = null);"
        },
        {
          "line": 9,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 10,
          "text": "  endfunction"
        },
        {
          "line": 11,
          "text": ""
        },
        {
          "line": 12,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 13,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 14,
          "text": "    monitor = demo_monitor::type_id::create(\"monitor\", this);"
        },
        {
          "line": 15,
          "text": "    if (is_active == UVM_ACTIVE) begin"
        },
        {
          "line": 16,
          "text": "      sequencer = demo_sequencer::type_id::create(\"sequencer\", this);"
        },
        {
          "line": 17,
          "text": "      driver    = demo_driver::type_id::create(\"driver\", this);"
        },
        {
          "line": 18,
          "text": "    end"
        },
        {
          "line": 19,
          "text": "  endfunction"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 22,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 23,
          "text": "    if (is_active == UVM_ACTIVE)"
        },
        {
          "line": 24,
          "text": "      driver.seq_item_port.connect(sequencer.seq_item_export);"
        },
        {
          "line": 25,
          "text": "  endfunction"
        },
        {
          "line": 26,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_scoreboard.svh:4": {
      "file": "tb/classes/demo_scoreboard.svh",
      "line": 4,
      "start": 1,
      "end": 24,
      "lines": [
        {
          "line": 1,
          "text": "class demo_scoreboard extends uvm_scoreboard;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_scoreboard)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  uvm_analysis_imp #(demo_item, demo_scoreboard) item_imp;"
        },
        {
          "line": 5,
          "text": "  int unsigned observed_count;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_scoreboard\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    item_imp = new(\"item_imp\", this);"
        },
        {
          "line": 14,
          "text": "  endfunction"
        },
        {
          "line": 15,
          "text": ""
        },
        {
          "line": 16,
          "text": "  function void write(demo_item item);"
        },
        {
          "line": 17,
          "text": "    observed_count++;"
        },
        {
          "line": 18,
          "text": "    `uvm_info(get_type_name(), $sformatf(\"observed data 0x%0h\", item.data), UVM_MEDIUM)"
        },
        {
          "line": 19,
          "text": "  endfunction"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  function void report_phase(uvm_phase phase);"
        },
        {
          "line": 22,
          "text": "    `uvm_info(get_type_name(), $sformatf(\"observed %0d items\", observed_count), UVM_LOW)"
        },
        {
          "line": 23,
          "text": "  endfunction"
        },
        {
          "line": 24,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_env.svh:16": {
      "file": "tb/classes/demo_env.svh",
      "line": 16,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_env extends uvm_env;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_env)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 5,
          "text": "  demo_agent       agent;"
        },
        {
          "line": 6,
          "text": "  demo_scoreboard  scoreboard;"
        },
        {
          "line": 7,
          "text": "  demo_coverage    coverage;"
        },
        {
          "line": 8,
          "text": ""
        },
        {
          "line": 9,
          "text": "  function new(string name = \"demo_env\", uvm_component parent = null);"
        },
        {
          "line": 10,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 11,
          "text": "  endfunction"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 14,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 15,
          "text": "    if (!uvm_config_db #(demo_env_config)::get(this, \"\", \"cfg\", cfg))"
        },
        {
          "line": 16,
          "text": "      cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 17,
          "text": "    agent = demo_agent::type_id::create(\"agent\", this);"
        },
        {
          "line": 18,
          "text": "    agent.is_active = cfg.is_active;"
        },
        {
          "line": 19,
          "text": "    scoreboard = demo_scoreboard::type_id::create(\"scoreboard\", this);"
        },
        {
          "line": 20,
          "text": "    coverage = demo_coverage::type_id::create(\"coverage\", this);"
        },
        {
          "line": 21,
          "text": "  endfunction"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 24,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 25,
          "text": "    agent.monitor.item_ap.connect(scoreboard.item_imp);"
        },
        {
          "line": 26,
          "text": "    agent.monitor.item_ap.connect(coverage.analysis_export);"
        },
        {
          "line": 27,
          "text": "  endfunction"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_env.svh:15": {
      "file": "tb/classes/demo_env.svh",
      "line": 15,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_env extends uvm_env;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_env)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 5,
          "text": "  demo_agent       agent;"
        },
        {
          "line": 6,
          "text": "  demo_scoreboard  scoreboard;"
        },
        {
          "line": 7,
          "text": "  demo_coverage    coverage;"
        },
        {
          "line": 8,
          "text": ""
        },
        {
          "line": 9,
          "text": "  function new(string name = \"demo_env\", uvm_component parent = null);"
        },
        {
          "line": 10,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 11,
          "text": "  endfunction"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 14,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 15,
          "text": "    if (!uvm_config_db #(demo_env_config)::get(this, \"\", \"cfg\", cfg))"
        },
        {
          "line": 16,
          "text": "      cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 17,
          "text": "    agent = demo_agent::type_id::create(\"agent\", this);"
        },
        {
          "line": 18,
          "text": "    agent.is_active = cfg.is_active;"
        },
        {
          "line": 19,
          "text": "    scoreboard = demo_scoreboard::type_id::create(\"scoreboard\", this);"
        },
        {
          "line": 20,
          "text": "    coverage = demo_coverage::type_id::create(\"coverage\", this);"
        },
        {
          "line": 21,
          "text": "  endfunction"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 24,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 25,
          "text": "    agent.monitor.item_ap.connect(scoreboard.item_imp);"
        },
        {
          "line": 26,
          "text": "    agent.monitor.item_ap.connect(coverage.analysis_export);"
        },
        {
          "line": 27,
          "text": "  endfunction"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_env.svh:17": {
      "file": "tb/classes/demo_env.svh",
      "line": 17,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_env extends uvm_env;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_env)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 5,
          "text": "  demo_agent       agent;"
        },
        {
          "line": 6,
          "text": "  demo_scoreboard  scoreboard;"
        },
        {
          "line": 7,
          "text": "  demo_coverage    coverage;"
        },
        {
          "line": 8,
          "text": ""
        },
        {
          "line": 9,
          "text": "  function new(string name = \"demo_env\", uvm_component parent = null);"
        },
        {
          "line": 10,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 11,
          "text": "  endfunction"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 14,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 15,
          "text": "    if (!uvm_config_db #(demo_env_config)::get(this, \"\", \"cfg\", cfg))"
        },
        {
          "line": 16,
          "text": "      cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 17,
          "text": "    agent = demo_agent::type_id::create(\"agent\", this);"
        },
        {
          "line": 18,
          "text": "    agent.is_active = cfg.is_active;"
        },
        {
          "line": 19,
          "text": "    scoreboard = demo_scoreboard::type_id::create(\"scoreboard\", this);"
        },
        {
          "line": 20,
          "text": "    coverage = demo_coverage::type_id::create(\"coverage\", this);"
        },
        {
          "line": 21,
          "text": "  endfunction"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 24,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 25,
          "text": "    agent.monitor.item_ap.connect(scoreboard.item_imp);"
        },
        {
          "line": 26,
          "text": "    agent.monitor.item_ap.connect(coverage.analysis_export);"
        },
        {
          "line": 27,
          "text": "  endfunction"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_env.svh:19": {
      "file": "tb/classes/demo_env.svh",
      "line": 19,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_env extends uvm_env;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_env)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 5,
          "text": "  demo_agent       agent;"
        },
        {
          "line": 6,
          "text": "  demo_scoreboard  scoreboard;"
        },
        {
          "line": 7,
          "text": "  demo_coverage    coverage;"
        },
        {
          "line": 8,
          "text": ""
        },
        {
          "line": 9,
          "text": "  function new(string name = \"demo_env\", uvm_component parent = null);"
        },
        {
          "line": 10,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 11,
          "text": "  endfunction"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 14,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 15,
          "text": "    if (!uvm_config_db #(demo_env_config)::get(this, \"\", \"cfg\", cfg))"
        },
        {
          "line": 16,
          "text": "      cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 17,
          "text": "    agent = demo_agent::type_id::create(\"agent\", this);"
        },
        {
          "line": 18,
          "text": "    agent.is_active = cfg.is_active;"
        },
        {
          "line": 19,
          "text": "    scoreboard = demo_scoreboard::type_id::create(\"scoreboard\", this);"
        },
        {
          "line": 20,
          "text": "    coverage = demo_coverage::type_id::create(\"coverage\", this);"
        },
        {
          "line": 21,
          "text": "  endfunction"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 24,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 25,
          "text": "    agent.monitor.item_ap.connect(scoreboard.item_imp);"
        },
        {
          "line": 26,
          "text": "    agent.monitor.item_ap.connect(coverage.analysis_export);"
        },
        {
          "line": 27,
          "text": "  endfunction"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_env.svh:20": {
      "file": "tb/classes/demo_env.svh",
      "line": 20,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_env extends uvm_env;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_env)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 5,
          "text": "  demo_agent       agent;"
        },
        {
          "line": 6,
          "text": "  demo_scoreboard  scoreboard;"
        },
        {
          "line": 7,
          "text": "  demo_coverage    coverage;"
        },
        {
          "line": 8,
          "text": ""
        },
        {
          "line": 9,
          "text": "  function new(string name = \"demo_env\", uvm_component parent = null);"
        },
        {
          "line": 10,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 11,
          "text": "  endfunction"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 14,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 15,
          "text": "    if (!uvm_config_db #(demo_env_config)::get(this, \"\", \"cfg\", cfg))"
        },
        {
          "line": 16,
          "text": "      cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 17,
          "text": "    agent = demo_agent::type_id::create(\"agent\", this);"
        },
        {
          "line": 18,
          "text": "    agent.is_active = cfg.is_active;"
        },
        {
          "line": 19,
          "text": "    scoreboard = demo_scoreboard::type_id::create(\"scoreboard\", this);"
        },
        {
          "line": 20,
          "text": "    coverage = demo_coverage::type_id::create(\"coverage\", this);"
        },
        {
          "line": 21,
          "text": "  endfunction"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 24,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 25,
          "text": "    agent.monitor.item_ap.connect(scoreboard.item_imp);"
        },
        {
          "line": 26,
          "text": "    agent.monitor.item_ap.connect(coverage.analysis_export);"
        },
        {
          "line": 27,
          "text": "  endfunction"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_env.svh:25": {
      "file": "tb/classes/demo_env.svh",
      "line": 25,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_env extends uvm_env;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_env)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 5,
          "text": "  demo_agent       agent;"
        },
        {
          "line": 6,
          "text": "  demo_scoreboard  scoreboard;"
        },
        {
          "line": 7,
          "text": "  demo_coverage    coverage;"
        },
        {
          "line": 8,
          "text": ""
        },
        {
          "line": 9,
          "text": "  function new(string name = \"demo_env\", uvm_component parent = null);"
        },
        {
          "line": 10,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 11,
          "text": "  endfunction"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 14,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 15,
          "text": "    if (!uvm_config_db #(demo_env_config)::get(this, \"\", \"cfg\", cfg))"
        },
        {
          "line": 16,
          "text": "      cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 17,
          "text": "    agent = demo_agent::type_id::create(\"agent\", this);"
        },
        {
          "line": 18,
          "text": "    agent.is_active = cfg.is_active;"
        },
        {
          "line": 19,
          "text": "    scoreboard = demo_scoreboard::type_id::create(\"scoreboard\", this);"
        },
        {
          "line": 20,
          "text": "    coverage = demo_coverage::type_id::create(\"coverage\", this);"
        },
        {
          "line": 21,
          "text": "  endfunction"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 24,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 25,
          "text": "    agent.monitor.item_ap.connect(scoreboard.item_imp);"
        },
        {
          "line": 26,
          "text": "    agent.monitor.item_ap.connect(coverage.analysis_export);"
        },
        {
          "line": 27,
          "text": "  endfunction"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_env.svh:26": {
      "file": "tb/classes/demo_env.svh",
      "line": 26,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_env extends uvm_env;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_env)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 5,
          "text": "  demo_agent       agent;"
        },
        {
          "line": 6,
          "text": "  demo_scoreboard  scoreboard;"
        },
        {
          "line": 7,
          "text": "  demo_coverage    coverage;"
        },
        {
          "line": 8,
          "text": ""
        },
        {
          "line": 9,
          "text": "  function new(string name = \"demo_env\", uvm_component parent = null);"
        },
        {
          "line": 10,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 11,
          "text": "  endfunction"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 14,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 15,
          "text": "    if (!uvm_config_db #(demo_env_config)::get(this, \"\", \"cfg\", cfg))"
        },
        {
          "line": 16,
          "text": "      cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 17,
          "text": "    agent = demo_agent::type_id::create(\"agent\", this);"
        },
        {
          "line": 18,
          "text": "    agent.is_active = cfg.is_active;"
        },
        {
          "line": 19,
          "text": "    scoreboard = demo_scoreboard::type_id::create(\"scoreboard\", this);"
        },
        {
          "line": 20,
          "text": "    coverage = demo_coverage::type_id::create(\"coverage\", this);"
        },
        {
          "line": 21,
          "text": "  endfunction"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 24,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 25,
          "text": "    agent.monitor.item_ap.connect(scoreboard.item_imp);"
        },
        {
          "line": 26,
          "text": "    agent.monitor.item_ap.connect(coverage.analysis_export);"
        },
        {
          "line": 27,
          "text": "  endfunction"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_smoke_test.svh:13": {
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 13,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_smoke_test extends uvm_test;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_smoke_test)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env        env;"
        },
        {
          "line": 5,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_smoke_test\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 14,
          "text": "    cfg.item_count = 8;"
        },
        {
          "line": 15,
          "text": "    uvm_config_db #(demo_env_config)::set(this, \"env\", \"cfg\", cfg);"
        },
        {
          "line": 16,
          "text": "    env = demo_env::type_id::create(\"env\", this);"
        },
        {
          "line": 17,
          "text": "  endfunction"
        },
        {
          "line": 18,
          "text": ""
        },
        {
          "line": 19,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 20,
          "text": "    demo_sequence sequence;"
        },
        {
          "line": 21,
          "text": "    phase.raise_objection(this);"
        },
        {
          "line": 22,
          "text": "    sequence = demo_sequence::type_id::create(\"sequence\");"
        },
        {
          "line": 23,
          "text": "    sequence.item_count = cfg.item_count;"
        },
        {
          "line": 24,
          "text": "    sequence.start(env.agent.sequencer);"
        },
        {
          "line": 25,
          "text": "    #20ns;"
        },
        {
          "line": 26,
          "text": "    phase.drop_objection(this);"
        },
        {
          "line": 27,
          "text": "  endtask"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_smoke_test.svh:15": {
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 15,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_smoke_test extends uvm_test;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_smoke_test)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env        env;"
        },
        {
          "line": 5,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_smoke_test\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 14,
          "text": "    cfg.item_count = 8;"
        },
        {
          "line": 15,
          "text": "    uvm_config_db #(demo_env_config)::set(this, \"env\", \"cfg\", cfg);"
        },
        {
          "line": 16,
          "text": "    env = demo_env::type_id::create(\"env\", this);"
        },
        {
          "line": 17,
          "text": "  endfunction"
        },
        {
          "line": 18,
          "text": ""
        },
        {
          "line": 19,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 20,
          "text": "    demo_sequence sequence;"
        },
        {
          "line": 21,
          "text": "    phase.raise_objection(this);"
        },
        {
          "line": 22,
          "text": "    sequence = demo_sequence::type_id::create(\"sequence\");"
        },
        {
          "line": 23,
          "text": "    sequence.item_count = cfg.item_count;"
        },
        {
          "line": 24,
          "text": "    sequence.start(env.agent.sequencer);"
        },
        {
          "line": 25,
          "text": "    #20ns;"
        },
        {
          "line": 26,
          "text": "    phase.drop_objection(this);"
        },
        {
          "line": 27,
          "text": "  endtask"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_smoke_test.svh:16": {
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 16,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_smoke_test extends uvm_test;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_smoke_test)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env        env;"
        },
        {
          "line": 5,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_smoke_test\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 14,
          "text": "    cfg.item_count = 8;"
        },
        {
          "line": 15,
          "text": "    uvm_config_db #(demo_env_config)::set(this, \"env\", \"cfg\", cfg);"
        },
        {
          "line": 16,
          "text": "    env = demo_env::type_id::create(\"env\", this);"
        },
        {
          "line": 17,
          "text": "  endfunction"
        },
        {
          "line": 18,
          "text": ""
        },
        {
          "line": 19,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 20,
          "text": "    demo_sequence sequence;"
        },
        {
          "line": 21,
          "text": "    phase.raise_objection(this);"
        },
        {
          "line": 22,
          "text": "    sequence = demo_sequence::type_id::create(\"sequence\");"
        },
        {
          "line": 23,
          "text": "    sequence.item_count = cfg.item_count;"
        },
        {
          "line": 24,
          "text": "    sequence.start(env.agent.sequencer);"
        },
        {
          "line": 25,
          "text": "    #20ns;"
        },
        {
          "line": 26,
          "text": "    phase.drop_objection(this);"
        },
        {
          "line": 27,
          "text": "  endtask"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_smoke_test.svh:22": {
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 22,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_smoke_test extends uvm_test;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_smoke_test)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env        env;"
        },
        {
          "line": 5,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_smoke_test\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 14,
          "text": "    cfg.item_count = 8;"
        },
        {
          "line": 15,
          "text": "    uvm_config_db #(demo_env_config)::set(this, \"env\", \"cfg\", cfg);"
        },
        {
          "line": 16,
          "text": "    env = demo_env::type_id::create(\"env\", this);"
        },
        {
          "line": 17,
          "text": "  endfunction"
        },
        {
          "line": 18,
          "text": ""
        },
        {
          "line": 19,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 20,
          "text": "    demo_sequence sequence;"
        },
        {
          "line": 21,
          "text": "    phase.raise_objection(this);"
        },
        {
          "line": 22,
          "text": "    sequence = demo_sequence::type_id::create(\"sequence\");"
        },
        {
          "line": 23,
          "text": "    sequence.item_count = cfg.item_count;"
        },
        {
          "line": 24,
          "text": "    sequence.start(env.agent.sequencer);"
        },
        {
          "line": 25,
          "text": "    #20ns;"
        },
        {
          "line": 26,
          "text": "    phase.drop_objection(this);"
        },
        {
          "line": 27,
          "text": "  endtask"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_monitor.svh:19": {
      "file": "tb/classes/demo_monitor.svh",
      "line": 19,
      "start": 1,
      "end": 29,
      "lines": [
        {
          "line": 1,
          "text": "class demo_monitor extends uvm_monitor;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_monitor)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  virtual demo_if vif;"
        },
        {
          "line": 5,
          "text": "  uvm_analysis_port #(demo_item) item_ap;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_monitor\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    item_ap = new(\"item_ap\", this);"
        },
        {
          "line": 14,
          "text": "    if (!uvm_config_db #(virtual demo_if)::get(this, \"\", \"vif\", vif))"
        },
        {
          "line": 15,
          "text": "      `uvm_fatal(get_type_name(), \"virtual interface was not configured\")"
        },
        {
          "line": 16,
          "text": "  endfunction"
        },
        {
          "line": 17,
          "text": ""
        },
        {
          "line": 18,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 19,
          "text": "    demo_item observed;"
        },
        {
          "line": 20,
          "text": "    forever begin"
        },
        {
          "line": 21,
          "text": "      @(posedge vif.clk);"
        },
        {
          "line": 22,
          "text": "      if (vif.reset_n && vif.valid && vif.ready) begin"
        },
        {
          "line": 23,
          "text": "        observed = demo_item::type_id::create(\"observed\");"
        },
        {
          "line": 24,
          "text": "        observed.data = vif.data;"
        },
        {
          "line": 25,
          "text": "        item_ap.write(observed);"
        },
        {
          "line": 26,
          "text": "      end"
        },
        {
          "line": 27,
          "text": "    end"
        },
        {
          "line": 28,
          "text": "  endtask"
        },
        {
          "line": 29,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_agent.svh:5": {
      "file": "tb/classes/demo_agent.svh",
      "line": 5,
      "start": 1,
      "end": 26,
      "lines": [
        {
          "line": 1,
          "text": "class demo_agent extends uvm_agent;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_agent)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_sequencer sequencer;"
        },
        {
          "line": 5,
          "text": "  demo_driver    driver;"
        },
        {
          "line": 6,
          "text": "  demo_monitor   monitor;"
        },
        {
          "line": 7,
          "text": ""
        },
        {
          "line": 8,
          "text": "  function new(string name = \"demo_agent\", uvm_component parent = null);"
        },
        {
          "line": 9,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 10,
          "text": "  endfunction"
        },
        {
          "line": 11,
          "text": ""
        },
        {
          "line": 12,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 13,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 14,
          "text": "    monitor = demo_monitor::type_id::create(\"monitor\", this);"
        },
        {
          "line": 15,
          "text": "    if (is_active == UVM_ACTIVE) begin"
        },
        {
          "line": 16,
          "text": "      sequencer = demo_sequencer::type_id::create(\"sequencer\", this);"
        },
        {
          "line": 17,
          "text": "      driver    = demo_driver::type_id::create(\"driver\", this);"
        },
        {
          "line": 18,
          "text": "    end"
        },
        {
          "line": 19,
          "text": "  endfunction"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 22,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 23,
          "text": "    if (is_active == UVM_ACTIVE)"
        },
        {
          "line": 24,
          "text": "      driver.seq_item_port.connect(sequencer.seq_item_export);"
        },
        {
          "line": 25,
          "text": "  endfunction"
        },
        {
          "line": 26,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_agent.svh:6": {
      "file": "tb/classes/demo_agent.svh",
      "line": 6,
      "start": 1,
      "end": 26,
      "lines": [
        {
          "line": 1,
          "text": "class demo_agent extends uvm_agent;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_agent)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_sequencer sequencer;"
        },
        {
          "line": 5,
          "text": "  demo_driver    driver;"
        },
        {
          "line": 6,
          "text": "  demo_monitor   monitor;"
        },
        {
          "line": 7,
          "text": ""
        },
        {
          "line": 8,
          "text": "  function new(string name = \"demo_agent\", uvm_component parent = null);"
        },
        {
          "line": 9,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 10,
          "text": "  endfunction"
        },
        {
          "line": 11,
          "text": ""
        },
        {
          "line": 12,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 13,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 14,
          "text": "    monitor = demo_monitor::type_id::create(\"monitor\", this);"
        },
        {
          "line": 15,
          "text": "    if (is_active == UVM_ACTIVE) begin"
        },
        {
          "line": 16,
          "text": "      sequencer = demo_sequencer::type_id::create(\"sequencer\", this);"
        },
        {
          "line": 17,
          "text": "      driver    = demo_driver::type_id::create(\"driver\", this);"
        },
        {
          "line": 18,
          "text": "    end"
        },
        {
          "line": 19,
          "text": "  endfunction"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 22,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 23,
          "text": "    if (is_active == UVM_ACTIVE)"
        },
        {
          "line": 24,
          "text": "      driver.seq_item_port.connect(sequencer.seq_item_export);"
        },
        {
          "line": 25,
          "text": "  endfunction"
        },
        {
          "line": 26,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_env.svh:5": {
      "file": "tb/classes/demo_env.svh",
      "line": 5,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_env extends uvm_env;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_env)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 5,
          "text": "  demo_agent       agent;"
        },
        {
          "line": 6,
          "text": "  demo_scoreboard  scoreboard;"
        },
        {
          "line": 7,
          "text": "  demo_coverage    coverage;"
        },
        {
          "line": 8,
          "text": ""
        },
        {
          "line": 9,
          "text": "  function new(string name = \"demo_env\", uvm_component parent = null);"
        },
        {
          "line": 10,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 11,
          "text": "  endfunction"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 14,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 15,
          "text": "    if (!uvm_config_db #(demo_env_config)::get(this, \"\", \"cfg\", cfg))"
        },
        {
          "line": 16,
          "text": "      cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 17,
          "text": "    agent = demo_agent::type_id::create(\"agent\", this);"
        },
        {
          "line": 18,
          "text": "    agent.is_active = cfg.is_active;"
        },
        {
          "line": 19,
          "text": "    scoreboard = demo_scoreboard::type_id::create(\"scoreboard\", this);"
        },
        {
          "line": 20,
          "text": "    coverage = demo_coverage::type_id::create(\"coverage\", this);"
        },
        {
          "line": 21,
          "text": "  endfunction"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 24,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 25,
          "text": "    agent.monitor.item_ap.connect(scoreboard.item_imp);"
        },
        {
          "line": 26,
          "text": "    agent.monitor.item_ap.connect(coverage.analysis_export);"
        },
        {
          "line": 27,
          "text": "  endfunction"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_env.svh:6": {
      "file": "tb/classes/demo_env.svh",
      "line": 6,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_env extends uvm_env;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_env)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 5,
          "text": "  demo_agent       agent;"
        },
        {
          "line": 6,
          "text": "  demo_scoreboard  scoreboard;"
        },
        {
          "line": 7,
          "text": "  demo_coverage    coverage;"
        },
        {
          "line": 8,
          "text": ""
        },
        {
          "line": 9,
          "text": "  function new(string name = \"demo_env\", uvm_component parent = null);"
        },
        {
          "line": 10,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 11,
          "text": "  endfunction"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 14,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 15,
          "text": "    if (!uvm_config_db #(demo_env_config)::get(this, \"\", \"cfg\", cfg))"
        },
        {
          "line": 16,
          "text": "      cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 17,
          "text": "    agent = demo_agent::type_id::create(\"agent\", this);"
        },
        {
          "line": 18,
          "text": "    agent.is_active = cfg.is_active;"
        },
        {
          "line": 19,
          "text": "    scoreboard = demo_scoreboard::type_id::create(\"scoreboard\", this);"
        },
        {
          "line": 20,
          "text": "    coverage = demo_coverage::type_id::create(\"coverage\", this);"
        },
        {
          "line": 21,
          "text": "  endfunction"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 24,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 25,
          "text": "    agent.monitor.item_ap.connect(scoreboard.item_imp);"
        },
        {
          "line": 26,
          "text": "    agent.monitor.item_ap.connect(coverage.analysis_export);"
        },
        {
          "line": 27,
          "text": "  endfunction"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_env.svh:7": {
      "file": "tb/classes/demo_env.svh",
      "line": 7,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_env extends uvm_env;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_env)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 5,
          "text": "  demo_agent       agent;"
        },
        {
          "line": 6,
          "text": "  demo_scoreboard  scoreboard;"
        },
        {
          "line": 7,
          "text": "  demo_coverage    coverage;"
        },
        {
          "line": 8,
          "text": ""
        },
        {
          "line": 9,
          "text": "  function new(string name = \"demo_env\", uvm_component parent = null);"
        },
        {
          "line": 10,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 11,
          "text": "  endfunction"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 14,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 15,
          "text": "    if (!uvm_config_db #(demo_env_config)::get(this, \"\", \"cfg\", cfg))"
        },
        {
          "line": 16,
          "text": "      cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 17,
          "text": "    agent = demo_agent::type_id::create(\"agent\", this);"
        },
        {
          "line": 18,
          "text": "    agent.is_active = cfg.is_active;"
        },
        {
          "line": 19,
          "text": "    scoreboard = demo_scoreboard::type_id::create(\"scoreboard\", this);"
        },
        {
          "line": 20,
          "text": "    coverage = demo_coverage::type_id::create(\"coverage\", this);"
        },
        {
          "line": 21,
          "text": "  endfunction"
        },
        {
          "line": 22,
          "text": ""
        },
        {
          "line": 23,
          "text": "  function void connect_phase(uvm_phase phase);"
        },
        {
          "line": 24,
          "text": "    super.connect_phase(phase);"
        },
        {
          "line": 25,
          "text": "    agent.monitor.item_ap.connect(scoreboard.item_imp);"
        },
        {
          "line": 26,
          "text": "    agent.monitor.item_ap.connect(coverage.analysis_export);"
        },
        {
          "line": 27,
          "text": "  endfunction"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_smoke_test.svh:5": {
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 5,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_smoke_test extends uvm_test;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_smoke_test)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env        env;"
        },
        {
          "line": 5,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_smoke_test\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 14,
          "text": "    cfg.item_count = 8;"
        },
        {
          "line": 15,
          "text": "    uvm_config_db #(demo_env_config)::set(this, \"env\", \"cfg\", cfg);"
        },
        {
          "line": 16,
          "text": "    env = demo_env::type_id::create(\"env\", this);"
        },
        {
          "line": 17,
          "text": "  endfunction"
        },
        {
          "line": 18,
          "text": ""
        },
        {
          "line": 19,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 20,
          "text": "    demo_sequence sequence;"
        },
        {
          "line": 21,
          "text": "    phase.raise_objection(this);"
        },
        {
          "line": 22,
          "text": "    sequence = demo_sequence::type_id::create(\"sequence\");"
        },
        {
          "line": 23,
          "text": "    sequence.item_count = cfg.item_count;"
        },
        {
          "line": 24,
          "text": "    sequence.start(env.agent.sequencer);"
        },
        {
          "line": 25,
          "text": "    #20ns;"
        },
        {
          "line": 26,
          "text": "    phase.drop_objection(this);"
        },
        {
          "line": 27,
          "text": "  endtask"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/classes/demo_smoke_test.svh:20": {
      "file": "tb/classes/demo_smoke_test.svh",
      "line": 20,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "class demo_smoke_test extends uvm_test;"
        },
        {
          "line": 2,
          "text": "  `uvm_component_utils(demo_smoke_test)"
        },
        {
          "line": 3,
          "text": ""
        },
        {
          "line": 4,
          "text": "  demo_env        env;"
        },
        {
          "line": 5,
          "text": "  demo_env_config cfg;"
        },
        {
          "line": 6,
          "text": ""
        },
        {
          "line": 7,
          "text": "  function new(string name = \"demo_smoke_test\", uvm_component parent = null);"
        },
        {
          "line": 8,
          "text": "    super.new(name, parent);"
        },
        {
          "line": 9,
          "text": "  endfunction"
        },
        {
          "line": 10,
          "text": ""
        },
        {
          "line": 11,
          "text": "  function void build_phase(uvm_phase phase);"
        },
        {
          "line": 12,
          "text": "    super.build_phase(phase);"
        },
        {
          "line": 13,
          "text": "    cfg = demo_env_config::type_id::create(\"cfg\");"
        },
        {
          "line": 14,
          "text": "    cfg.item_count = 8;"
        },
        {
          "line": 15,
          "text": "    uvm_config_db #(demo_env_config)::set(this, \"env\", \"cfg\", cfg);"
        },
        {
          "line": 16,
          "text": "    env = demo_env::type_id::create(\"env\", this);"
        },
        {
          "line": 17,
          "text": "  endfunction"
        },
        {
          "line": 18,
          "text": ""
        },
        {
          "line": 19,
          "text": "  task run_phase(uvm_phase phase);"
        },
        {
          "line": 20,
          "text": "    demo_sequence sequence;"
        },
        {
          "line": 21,
          "text": "    phase.raise_objection(this);"
        },
        {
          "line": 22,
          "text": "    sequence = demo_sequence::type_id::create(\"sequence\");"
        },
        {
          "line": 23,
          "text": "    sequence.item_count = cfg.item_count;"
        },
        {
          "line": 24,
          "text": "    sequence.start(env.agent.sequencer);"
        },
        {
          "line": 25,
          "text": "    #20ns;"
        },
        {
          "line": 26,
          "text": "    phase.drop_objection(this);"
        },
        {
          "line": 27,
          "text": "  endtask"
        },
        {
          "line": 28,
          "text": "endclass"
        }
      ]
    },
    "tb/demo_if.sv:1": {
      "file": "tb/demo_if.sv",
      "line": 1,
      "start": 1,
      "end": 28,
      "lines": [
        {
          "line": 1,
          "text": "`ifndef DEMO_DATA_WIDTH"
        },
        {
          "line": 2,
          "text": "`define DEMO_DATA_WIDTH 16"
        },
        {
          "line": 3,
          "text": "`endif"
        },
        {
          "line": 4,
          "text": ""
        },
        {
          "line": 5,
          "text": "interface demo_if ("
        },
        {
          "line": 6,
          "text": "  input logic clk,"
        },
        {
          "line": 7,
          "text": "  input logic reset_n"
        },
        {
          "line": 8,
          "text": ");"
        },
        {
          "line": 9,
          "text": "  logic                        valid;"
        },
        {
          "line": 10,
          "text": "  logic                        ready;"
        },
        {
          "line": 11,
          "text": "  logic [`DEMO_DATA_WIDTH-1:0] data;"
        },
        {
          "line": 12,
          "text": ""
        },
        {
          "line": 13,
          "text": "  modport driver_mp ("
        },
        {
          "line": 14,
          "text": "    input  clk,"
        },
        {
          "line": 15,
          "text": "    input  reset_n,"
        },
        {
          "line": 16,
          "text": "    input  ready,"
        },
        {
          "line": 17,
          "text": "    output valid,"
        },
        {
          "line": 18,
          "text": "    output data"
        },
        {
          "line": 19,
          "text": "  );"
        },
        {
          "line": 20,
          "text": ""
        },
        {
          "line": 21,
          "text": "  modport monitor_mp ("
        },
        {
          "line": 22,
          "text": "    input clk,"
        },
        {
          "line": 23,
          "text": "    input reset_n,"
        },
        {
          "line": 24,
          "text": "    input valid,"
        },
        {
          "line": 25,
          "text": "    input ready,"
        },
        {
          "line": 26,
          "text": "    input data"
        },
        {
          "line": 27,
          "text": "  );"
        },
        {
          "line": 28,
          "text": "endinterface"
        }
      ]
    }
  },
  "role_colors": {
    "test": "#0f766e",
    "env": "#2563eb",
    "agent": "#0891b2",
    "driver": "#dc2626",
    "monitor": "#16a34a",
    "sequencer": "#7c3aed",
    "sequence": "#9333ea",
    "sequence_item": "#ea580c",
    "scoreboard": "#be123c",
    "config": "#ca8a04",
    "coverage": "#4f46e5",
    "interface": "#0284c7",
    "module": "#475569",
    "component": "#475569",
    "class": "#64748b",
    "external": "#94a3b8"
  }
}
