{
  "module": "ntt",
  "rtl_top": "sync_rtl/ntt/ntt_sync.v",
  "rtl_deps": [
    "sync_rtl/ntt/ntt_core.v",
    "sync_rtl/ntt/butterfly_unit.v",
    "sync_rtl/ntt/barrett_mul.v",
    "sync_rtl/ntt/zeta_rom.v"
  ],
  "tb_cpp": "sync_rtl/ntt/TB/tb_ntt.cpp",
  "simulator": "verilator",
  "timeout_s": 300,
  "cases": [
    {
      "id": "forward",
      "description": "Forward NTT: 256-coeff polynomial -> NTT domain, vs Python NTT()",
      "params": {"mode": "forward"},
      "num_vectors": 5,
      "tolerance": "bit_exact"
    },
    {
      "id": "inverse",
      "description": "Inverse NTT: 256-coeff NTT-domain -> normal domain, vs Python NTTInverse()",
      "params": {"mode": "inverse"},
      "num_vectors": 5,
      "tolerance": "bit_exact"
    },
    {
      "id": "roundtrip",
      "description": "Round-trip: NTT(INTT(f)) == f",
      "params": {"mode": "roundtrip"},
      "num_vectors": 3,
      "tolerance": "bit_exact"
    }
  ]
}
