From e7ba597f4cd3289e6a35f7c85a8d5d9def551373 Mon Sep 17 00:00:00 2001 From: ylxiao Date: Fri, 19 Jul 2024 10:26:52 -0700 Subject: [PATCH] feat(Makefile): dump build.json for CI --- .../generated/cpp/bloom_aggregate_SPLIT.cpp | 4 +- .../generated/cpp/bloom_arb_forwarder.cpp | 4 +- .../cpp/bloom_arbiter_ratemonitor.cpp | 4 +- .../generated/cpp/bloom_hier_arbiter_atom.cpp | 4 +- .../generated/cpp/computeHash_Computer.cpp | 4 +- .../generated/cpp/computeHash_Feeder.cpp | 4 +- .../b3_8_5_8/design/generated/cpp/loadBV.cpp | 4 +- .../b3_8_5_8/design/generated/cpp/loadKey.cpp | 4 +- .../design/generated/cpp/packOutput.cpp | 4 +- .../generated/cpp/queryResult_per_hash.cpp | 4 +- .../generated/cpp/shuffle_TtoS_per_hash.cpp | 4 +- .../cpp/shuffle_reordering_per_hash.cpp | 4 +- .../design/generated/cpp/workload.cpp | 4 +- .../generated/cpp/writeOutput_synchronous.cpp | 4 +- ...tten-d2a06f17-multistream_MurmurHash3.cpp} | 4 +- .../b3_8_5_8/design/generated/graph.json | 29 +- .../b3_8_5_8/design/generated/log/tapac.INFO | 1 - ...rk.ylxiao.log.INFO.20240712-150917.1339196 | 4773 ----- .../generated/multistream_MurmurHash3.xo | Bin 945041 -> 934901 bytes ...tistream_MurmurHash3_generate_bitstream.sh | 35 + .../b3_8_5_8/design/generated/report.json | 44 +- .../b3_8_5_8/design/generated/report.yaml | 44 +- ...loom_aggregate_SPLIT.verbose.sched.rpt.xml | 4 +- ...IT_Pipeline_VITIS_LOOP_324_1.sched.adb.xml | 8 +- ...ine_VITIS_LOOP_324_1.verbose.sched.rpt.xml | 4 +- ...SPLIT_Pipeline_VITIS_LOOP_324_1_csynth.xml | 4 +- .../report/bloom_aggregate_SPLIT_csynth.xml | 4 +- .../report/bloom_arb_forwarder.sched.adb.xml | 28 +- .../bloom_arb_forwarder.verbose.sched.rpt.xml | 2 +- ...r_Pipeline_INIT_LOOP.verbose.sched.rpt.xml | 2 +- ...forwarder_Pipeline_MAIN_LOOP.sched.adb.xml | 352 +- ...r_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml | 2 +- ...rb_forwarder_Pipeline_MAIN_LOOP_csynth.xml | 22 +- .../report/bloom_arb_forwarder_csynth.xml | 4 +- ..._arbiter_ratemonitor.verbose.sched.rpt.xml | 2 +- ...Pipeline_INIT_LOOP_2.verbose.sched.rpt.xml | 2 +- ...temonitor_Pipeline_MAIN_LOOP.sched.adb.xml | 2 +- ...r_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml | 2 +- ...om_hier_arbiter_atom.verbose.sched.rpt.xml | 2 +- ...m_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml | 2 +- .../report/computeHash_Computer.sched.adb.xml | 12 +- ...computeHash_Computer.verbose.sched.rpt.xml | 4 +- ..._Computer_Pipeline_MAIN_LOOP.sched.adb.xml | 114 +- ...r_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml | 6 +- ...ash_Computer_Pipeline_MAIN_LOOP_csynth.xml | 28 +- .../report/computeHash_Computer_csynth.xml | 22 +- .../computeHash_Feeder.verbose.sched.rpt.xml | 2 +- ...er_Pipeline_VITIS_LOOP_222_1.sched.adb.xml | 18 +- ...ine_VITIS_LOOP_222_1.verbose.sched.rpt.xml | 2 +- ...eeder_Pipeline_VITIS_LOOP_222_1_csynth.xml | 2 +- .../report/computeHash_Feeder_csynth.xml | 2 +- .../design/generated/report/csynth.xml | 14 +- .../report/loadBV.verbose.sched.rpt.xml | 4 +- ...BV_Pipeline_VITIS_LOOP_181_1.sched.adb.xml | 16 +- ...ine_VITIS_LOOP_181_1.verbose.sched.rpt.xml | 4 +- ...oadBV_Pipeline_VITIS_LOOP_181_1_csynth.xml | 4 +- .../design/generated/report/loadBV_csynth.xml | 4 +- .../report/loadKey.verbose.sched.rpt.xml | 4 +- ...ey_Pipeline_VITIS_LOOP_194_1.sched.adb.xml | 16 +- ...ine_VITIS_LOOP_194_1.verbose.sched.rpt.xml | 4 +- ...adKey_Pipeline_VITIS_LOOP_194_1_csynth.xml | 4 +- .../generated/report/loadKey_csynth.xml | 4 +- .../report/packOutput.verbose.sched.rpt.xml | 4 +- ...ut_Pipeline_VITIS_LOOP_317_1.sched.adb.xml | 28 +- ...ine_VITIS_LOOP_317_1.verbose.sched.rpt.xml | 6 +- ...utput_Pipeline_VITIS_LOOP_317_1_csynth.xml | 26 +- .../generated/report/packOutput_csynth.xml | 20 +- ...queryResult_per_hash.verbose.sched.rpt.xml | 2 +- ...hash_Pipeline_LOAD_BV_VALUES.sched.adb.xml | 344 +- ...eline_LOAD_BV_VALUES.verbose.sched.rpt.xml | 8 +- ...er_hash_Pipeline_LOAD_BV_VALUES_csynth.xml | 44 +- ...ash_Pipeline_PROCESS_QUERIES.sched.adb.xml | 490 +- ...line_PROCESS_QUERIES.verbose.sched.rpt.xml | 2 +- ...r_hash_Pipeline_PROCESS_QUERIES_csynth.xml | 32 +- .../report/queryResult_per_hash_csynth.xml | 8 +- ...huffle_TtoS_per_hash.verbose.sched.rpt.xml | 2 +- ...ine_VITIS_LOOP_473_2.verbose.sched.rpt.xml | 2 +- ..._reordering_per_hash.verbose.sched.rpt.xml | 2 +- ..._per_hash_Pipeline_MAIN_LOOP.sched.adb.xml | 2 +- ...h_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml | 2 +- ...NIT_VITIS_LOOP_368_1.verbose.sched.rpt.xml | 2 +- .../report/workload.verbose.sched.rpt.xml | 2 +- ...teOutput_synchronous.verbose.sched.rpt.xml | 4 +- ...us_Pipeline_VITIS_LOOP_395_1.sched.adb.xml | 36 +- ...ine_VITIS_LOOP_395_1.verbose.sched.rpt.xml | 6 +- ...onous_Pipeline_VITIS_LOOP_395_1_csynth.xml | 26 +- .../report/writeOutput_synchronous_csynth.xml | 20 +- benchmarks/tapa_flow/sextans/Makefile | 9 - .../stencil_sasa/medium_congestion/Makefile | 29 - .../stencil_sasa/medium_congestion/README.md | 184 - .../design/config/link_config.ini | 25 - .../design/generated/cpp/HEAT3D.cpp | 171 - .../design/generated/cpp/inter_kernel.cpp | 157 - .../design/generated/cpp/unikernel.cpp | 192 - .../flatten/flatten-e756cccc-unikernel.cpp | 201 - .../design/generated/graph.json | 959 - .../design/generated/hdl/HEAT3D.v | 781 - .../hdl/HEAT3D_HEAT3D_Pipeline_MAJOR_LOOP.v | 4531 ----- .../HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_116_3.v | 231 - .../HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_121_4.v | 231 - .../HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_62_1.v | 262 - .../HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_68_2.v | 262 - .../hdl/HEAT3D_HEAT3D_stencil_kernel.v | 746 - .../hdl/HEAT3D_HLS_REG_ap_uint_512_s.v | 25 - .../HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0.v | 76 - ...AT3D_fadd_32ns_32ns_32_7_full_dsp_0_ip.tcl | 45 - .../generated/hdl/HEAT3D_fifo_w512_d15_A.v | 189 - ...D_flow_control_loop_pipe_sequential_init.v | 104 - .../HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0.v | 76 - ...EAT3D_fmul_32ns_32ns_32_4_max_dsp_0_ip.tcl | 45 - .../HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0.v | 76 - ...AT3D_fsub_32ns_32ns_32_7_full_dsp_0_ip.tcl | 45 - .../hdl/a_axi_write_broadcastor_1_to_3.v | 269 - .../hdl/a_axi_write_broadcastor_1_to_4.v | 346 - .../design/generated/hdl/arbiter.v | 159 - .../design/generated/hdl/async_mmap.v | 524 - .../design/generated/hdl/axi_crossbar.v | 391 - .../design/generated/hdl/axi_crossbar_addr.v | 418 - .../design/generated/hdl/axi_crossbar_rd.v | 569 - .../design/generated/hdl/axi_crossbar_wr.v | 678 - .../design/generated/hdl/axi_pipeline.v | 214 - .../design/generated/hdl/axi_register_rd.v | 530 - .../design/generated/hdl/axi_register_wr.v | 691 - .../design/generated/hdl/detect_burst.v | 156 - .../design/generated/hdl/fifo.v | 107 - .../design/generated/hdl/fifo_bram.v | 151 - .../design/generated/hdl/fifo_fwd.v | 58 - .../design/generated/hdl/fifo_srl.v | 84 - .../design/generated/hdl/generate_last.v | 71 - .../design/generated/hdl/inter_kernel.v | 576 - ...l_flow_control_loop_pipe_sequential_init.v | 104 - .../design/generated/hdl/inter_kernel_load.v | 323 - ...ter_kernel_load_Pipeline_VITIS_LOOP_45_1.v | 662 - .../design/generated/hdl/priority_encoder.v | 92 - .../design/generated/hdl/relay_station.v | 522 - .../design/generated/hdl/unikernel.v | 5943 ------- .../generated/hdl/unikernel_control_s_axi.v | 1263 -- .../design/generated/hdl/unikernel_fsm.v | 1308 -- .../design/generated/log/tapac.INFO | 1 - ...uark.ylxiao.log.INFO.20240712-200239.33259 | 2249 --- .../design/generated/report.json | 56 - .../design/generated/report.yaml | 41 - .../generated/report/HEAT3D.sched.adb.xml | 948 - .../report/HEAT3D.verbose.sched.rpt.xml | 45 - .../HEAT3D_Pipeline_MAJOR_LOOP.sched.adb.xml | 14471 ---------------- ..._Pipeline_MAJOR_LOOP.verbose.sched.rpt.xml | 46 - .../HEAT3D_Pipeline_MAJOR_LOOP_csynth.xml | 398 - ...3D_Pipeline_VITIS_LOOP_116_3.sched.adb.xml | 260 - ...ine_VITIS_LOOP_116_3.verbose.sched.rpt.xml | 46 - ...EAT3D_Pipeline_VITIS_LOOP_116_3_csynth.xml | 167 - ...3D_Pipeline_VITIS_LOOP_121_4.sched.adb.xml | 260 - ...ine_VITIS_LOOP_121_4.verbose.sched.rpt.xml | 46 - ...EAT3D_Pipeline_VITIS_LOOP_121_4_csynth.xml | 167 - ...T3D_Pipeline_VITIS_LOOP_62_1.sched.adb.xml | 306 - ...line_VITIS_LOOP_62_1.verbose.sched.rpt.xml | 46 - ...HEAT3D_Pipeline_VITIS_LOOP_62_1_csynth.xml | 200 - ...T3D_Pipeline_VITIS_LOOP_68_2.sched.adb.xml | 306 - ...line_VITIS_LOOP_68_2.verbose.sched.rpt.xml | 46 - ...HEAT3D_Pipeline_VITIS_LOOP_68_2_csynth.xml | 200 - .../design/generated/report/HEAT3D_csynth.xml | 242 - .../HEAT3D_stencil_kernel.sched.adb.xml | 1707 -- ...EAT3D_stencil_kernel.verbose.sched.rpt.xml | 45 - .../report/HEAT3D_stencil_kernel_csynth.xml | 179 - ...LS_REG_ap_uint_512_s.verbose.sched.rpt.xml | 45 - .../report/HLS_REG_ap_uint_512_s_csynth.xml | 92 - .../design/generated/report/csynth.xml | 1038 -- .../report/inter_kernel.sched.adb.xml | 1170 -- .../report/inter_kernel.verbose.sched.rpt.xml | 46 - .../generated/report/inter_kernel_csynth.xml | 757 - .../generated/report/load.sched.adb.xml | 267 - .../report/load.verbose.sched.rpt.xml | 45 - ...oad_Pipeline_VITIS_LOOP_45_1.sched.adb.xml | 1377 -- ...line_VITIS_LOOP_45_1.verbose.sched.rpt.xml | 46 - .../load_Pipeline_VITIS_LOOP_45_1_csynth.xml | 376 - .../design/generated/report/load_csynth.xml | 364 - .../generated/report/unikernel.sched.adb.xml | 3054 ---- .../report/unikernel.verbose.sched.rpt.xml | 45 - .../generated/report/unikernel_csynth.xml | 276 - .../design/generated/settings.json | 8 - .../design/generated/tar/HEAT3D.tar | Bin 1884160 -> 0 bytes .../design/generated/tar/inter_kernel.tar | Bin 460800 -> 0 bytes .../design/generated/tar/unikernel.tar | Bin 348160 -> 0 bytes .../design/generated/unikernel.xo | Bin 148092 -> 0 bytes .../medium_congestion/design/run_tapa.sh | 11 - .../medium_congestion/design/src/HEAT3D.h | 28 - .../medium_congestion/design/src/host.cpp | 173 - .../design/src/unikernel.cpp | 207 - .../stencil_sasa/medium_congestion/run.py | 134 - benchmarks/vitis_flow/LLM/Makefile | 44 +- benchmarks/vitis_flow/LLM/design/bert_all.cpp | 106 + benchmarks/vitis_flow/README.md | 2 +- benchmarks/vitis_flow/cnn13x2/Makefile | 6 + .../vitis_flow/cnn13x4_16/cnn13x10/Makefile | 65 +- .../vitis_flow/cnn13x4_16/cnn13x12/Makefile | 65 +- .../vitis_flow/cnn13x4_16/cnn13x14/Makefile | 65 +- .../vitis_flow/cnn13x4_16/cnn13x16/Makefile | 65 +- .../vitis_flow/cnn13x4_16/cnn13x4/Makefile | 7 +- .../vitis_flow/cnn13x4_16/cnn13x6/Makefile | 65 +- .../vitis_flow/cnn13x4_16/cnn13x8/Makefile | 65 +- benchmarks/vivado_flow/CNN/cnn13x2/Makefile | 11 +- .../vivado_flow/CNN/cnn13x2/run_au50.py | 12 +- benchmarks/vivado_flow/LLM/Makefile | 12 +- benchmarks/vivado_flow/LLM/run_vu9p.py | 1 - benchmarks/vivado_flow/cnn13x2/Makefile | 11 +- benchmarks/vivado_flow/cnn13x2/README.md | 2 +- .../cnn13x2/xfail_no_board_get_area} | 0 {getting_started => common}/img/VecAddMix.png | Bin .../img/au250_virtual_device.png | Bin .../img/au280_callipepla.png | Bin .../img/au280_sextans.png | Bin .../img/au50_virtual_device.png | Bin .../img/mixed_ooc_layout.png | Bin .../img/rapid_shell.png | Bin .../img/rapidsteram_xo.png | Bin .../img/rapidstream_input.png | Bin .../img/rapidstream_ipi_support.png | Bin .../img/vitis_rapidstream_flow.png | Bin .../img/vivado_ipi_prj.png | Bin .../img/vivado_kernel_flow.png | Bin .../img/vivado_verilog_prj.png | Bin .../img/vp1552_virtual_device.png | Bin common/util/get_slack.py | 13 +- getting_started/mixed_sources/Makefile | 3 +- getting_started/mixed_sources/README.md | 4 +- getting_started/vitis_source/Makefile | 4 +- getting_started/vitis_source/README.md | 2 +- 226 files changed, 1494 insertions(+), 63878 deletions(-) rename benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/flatten/{flatten-bca92fa8-multistream_MurmurHash3.cpp => flatten-d2a06f17-multistream_MurmurHash3.cpp} (98%) delete mode 120000 benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/log/tapac.INFO delete mode 100644 benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/log/tapac.squark.ylxiao.log.INFO.20240712-150917.1339196 create mode 100755 benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/multistream_MurmurHash3_generate_bitstream.sh delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/Makefile delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/README.md delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/config/link_config.ini delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/cpp/HEAT3D.cpp delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/cpp/inter_kernel.cpp delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/cpp/unikernel.cpp delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/flatten/flatten-e756cccc-unikernel.cpp delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/graph.json delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_MAJOR_LOOP.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_116_3.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_121_4.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_62_1.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_68_2.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_stencil_kernel.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HLS_REG_ap_uint_512_s.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0_ip.tcl delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fifo_w512_d15_A.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_flow_control_loop_pipe_sequential_init.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0_ip.tcl delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0_ip.tcl delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/a_axi_write_broadcastor_1_to_3.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/a_axi_write_broadcastor_1_to_4.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/arbiter.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/async_mmap.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_crossbar.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_crossbar_addr.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_crossbar_rd.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_crossbar_wr.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_pipeline.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_register_rd.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_register_wr.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/detect_burst.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/fifo.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/fifo_bram.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/fifo_fwd.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/fifo_srl.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/generate_last.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/inter_kernel.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/inter_kernel_flow_control_loop_pipe_sequential_init.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/inter_kernel_load.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/inter_kernel_load_Pipeline_VITIS_LOOP_45_1.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/priority_encoder.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/relay_station.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/unikernel.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/unikernel_control_s_axi.v delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/unikernel_fsm.v delete mode 120000 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/log/tapac.INFO delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/log/tapac.iquark.ylxiao.log.INFO.20240712-200239.33259 delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report.json delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report.yaml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D.sched.adb.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D.verbose.sched.rpt.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_MAJOR_LOOP.sched.adb.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_MAJOR_LOOP.verbose.sched.rpt.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_MAJOR_LOOP_csynth.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_116_3.sched.adb.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_116_3.verbose.sched.rpt.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_116_3_csynth.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_121_4.sched.adb.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_121_4.verbose.sched.rpt.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_121_4_csynth.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_62_1.sched.adb.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_62_1.verbose.sched.rpt.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_62_1_csynth.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_68_2.sched.adb.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_68_2.verbose.sched.rpt.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_68_2_csynth.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_csynth.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_stencil_kernel.sched.adb.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_stencil_kernel.verbose.sched.rpt.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_stencil_kernel_csynth.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HLS_REG_ap_uint_512_s.verbose.sched.rpt.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HLS_REG_ap_uint_512_s_csynth.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/csynth.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/inter_kernel.sched.adb.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/inter_kernel.verbose.sched.rpt.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/inter_kernel_csynth.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load.sched.adb.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load.verbose.sched.rpt.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load_Pipeline_VITIS_LOOP_45_1.sched.adb.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load_Pipeline_VITIS_LOOP_45_1.verbose.sched.rpt.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load_Pipeline_VITIS_LOOP_45_1_csynth.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load_csynth.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/unikernel.sched.adb.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/unikernel.verbose.sched.rpt.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/unikernel_csynth.xml delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/settings.json delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/tar/HEAT3D.tar delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/tar/inter_kernel.tar delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/tar/unikernel.tar delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/unikernel.xo delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/run_tapa.sh delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/src/HEAT3D.h delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/src/host.cpp delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/src/unikernel.cpp delete mode 100644 benchmarks/tapa_flow/stencil_sasa/medium_congestion/run.py rename benchmarks/{tapa_flow/stencil_sasa/medium_congestion/autbridge_fail => vivado_flow/cnn13x2/xfail_no_board_get_area} (100%) rename {getting_started => common}/img/VecAddMix.png (100%) rename {getting_started => common}/img/au250_virtual_device.png (100%) rename {getting_started => common}/img/au280_callipepla.png (100%) rename {getting_started => common}/img/au280_sextans.png (100%) rename {getting_started => common}/img/au50_virtual_device.png (100%) rename {getting_started => common}/img/mixed_ooc_layout.png (100%) rename {getting_started => common}/img/rapid_shell.png (100%) rename {getting_started => common}/img/rapidsteram_xo.png (100%) rename {getting_started => common}/img/rapidstream_input.png (100%) rename {getting_started => common}/img/rapidstream_ipi_support.png (100%) rename {getting_started => common}/img/vitis_rapidstream_flow.png (100%) rename {getting_started => common}/img/vivado_ipi_prj.png (100%) rename {getting_started => common}/img/vivado_kernel_flow.png (100%) rename {getting_started => common}/img/vivado_verilog_prj.png (100%) rename {getting_started => common}/img/vp1552_virtual_device.png (100%) diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/bloom_aggregate_SPLIT.cpp b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/bloom_aggregate_SPLIT.cpp index 6495fdaf..4af28d4d 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/bloom_aggregate_SPLIT.cpp +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/bloom_aggregate_SPLIT.cpp @@ -65,7 +65,7 @@ typedef struct { } PACKED_HASH_DTYPE; /************************/ const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/; - const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; + const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; typedef struct { ap_uint<(32)> s0_k0; ap_uint<(32)> s0_k1; @@ -111,7 +111,7 @@ typedef struct { /* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO. * So that FIFO will get filled, and the shuffle unit wont be able to handle it. * We need at least NUM_STM FIFO elements between arbiter and shuffle. */ -const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; +const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; const int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram) const int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5); const int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1); diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/bloom_arb_forwarder.cpp b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/bloom_arb_forwarder.cpp index 8e24ee19..6de36ec0 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/bloom_arb_forwarder.cpp +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/bloom_arb_forwarder.cpp @@ -65,7 +65,7 @@ typedef struct { } PACKED_HASH_DTYPE; /************************/ const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/; - const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; + const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; typedef struct { ap_uint<(32)> s0_k0; ap_uint<(32)> s0_k1; @@ -111,7 +111,7 @@ typedef struct { /* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO. * So that FIFO will get filled, and the shuffle unit wont be able to handle it. * We need at least NUM_STM FIFO elements between arbiter and shuffle. */ -const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; +const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; const int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram) const int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5); const int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1); diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/bloom_arbiter_ratemonitor.cpp b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/bloom_arbiter_ratemonitor.cpp index 37bb4d41..d6f5fc93 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/bloom_arbiter_ratemonitor.cpp +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/bloom_arbiter_ratemonitor.cpp @@ -65,7 +65,7 @@ typedef struct { } PACKED_HASH_DTYPE; /************************/ const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/; - const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; + const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; typedef struct { ap_uint<(32)> s0_k0; ap_uint<(32)> s0_k1; @@ -111,7 +111,7 @@ typedef struct { /* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO. * So that FIFO will get filled, and the shuffle unit wont be able to handle it. * We need at least NUM_STM FIFO elements between arbiter and shuffle. */ -const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; +const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; const int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram) const int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5); const int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1); diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/bloom_hier_arbiter_atom.cpp b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/bloom_hier_arbiter_atom.cpp index 00fa65e4..c9846bf8 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/bloom_hier_arbiter_atom.cpp +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/bloom_hier_arbiter_atom.cpp @@ -65,7 +65,7 @@ typedef struct { } PACKED_HASH_DTYPE; /************************/ const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/; - const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; + const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; typedef struct { ap_uint<(32)> s0_k0; ap_uint<(32)> s0_k1; @@ -111,7 +111,7 @@ typedef struct { /* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO. * So that FIFO will get filled, and the shuffle unit wont be able to handle it. * We need at least NUM_STM FIFO elements between arbiter and shuffle. */ -const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; +const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; const int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram) const int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5); const int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1); diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/computeHash_Computer.cpp b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/computeHash_Computer.cpp index 448624a4..4b6e9984 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/computeHash_Computer.cpp +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/computeHash_Computer.cpp @@ -65,7 +65,7 @@ typedef struct { } PACKED_HASH_DTYPE; /************************/ const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/; - const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; + const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; typedef struct { ap_uint<(32)> s0_k0; ap_uint<(32)> s0_k1; @@ -111,7 +111,7 @@ typedef struct { /* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO. * So that FIFO will get filled, and the shuffle unit wont be able to handle it. * We need at least NUM_STM FIFO elements between arbiter and shuffle. */ -const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; +const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; const int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram) const int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5); const int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1); diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/computeHash_Feeder.cpp b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/computeHash_Feeder.cpp index 1c71945e..967430f9 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/computeHash_Feeder.cpp +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/computeHash_Feeder.cpp @@ -65,7 +65,7 @@ typedef struct { } PACKED_HASH_DTYPE; /************************/ const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/; - const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; + const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; typedef struct { ap_uint<(32)> s0_k0; ap_uint<(32)> s0_k1; @@ -111,7 +111,7 @@ typedef struct { /* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO. * So that FIFO will get filled, and the shuffle unit wont be able to handle it. * We need at least NUM_STM FIFO elements between arbiter and shuffle. */ -const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; +const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; const int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram) const int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5); const int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1); diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/loadBV.cpp b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/loadBV.cpp index fb5d0059..65c882a8 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/loadBV.cpp +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/loadBV.cpp @@ -65,7 +65,7 @@ typedef struct { } PACKED_HASH_DTYPE; /************************/ const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/; - const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; + const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; typedef struct { ap_uint<(32)> s0_k0; ap_uint<(32)> s0_k1; @@ -111,7 +111,7 @@ typedef struct { /* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO. * So that FIFO will get filled, and the shuffle unit wont be able to handle it. * We need at least NUM_STM FIFO elements between arbiter and shuffle. */ -const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; +const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; const int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram) const int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5); const int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1); diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/loadKey.cpp b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/loadKey.cpp index e00c09e2..f016a3f2 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/loadKey.cpp +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/loadKey.cpp @@ -65,7 +65,7 @@ typedef struct { } PACKED_HASH_DTYPE; /************************/ const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/; - const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; + const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; typedef struct { ap_uint<(32)> s0_k0; ap_uint<(32)> s0_k1; @@ -111,7 +111,7 @@ typedef struct { /* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO. * So that FIFO will get filled, and the shuffle unit wont be able to handle it. * We need at least NUM_STM FIFO elements between arbiter and shuffle. */ -const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; +const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; const int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram) const int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5); const int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1); diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/packOutput.cpp b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/packOutput.cpp index 1f865cc8..1c1a80f7 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/packOutput.cpp +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/packOutput.cpp @@ -65,7 +65,7 @@ typedef struct { } PACKED_HASH_DTYPE; /************************/ const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/; - const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; + const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; typedef struct { ap_uint<(32)> s0_k0; ap_uint<(32)> s0_k1; @@ -111,7 +111,7 @@ typedef struct { /* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO. * So that FIFO will get filled, and the shuffle unit wont be able to handle it. * We need at least NUM_STM FIFO elements between arbiter and shuffle. */ -const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; +const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; const int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram) const int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5); const int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1); diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/queryResult_per_hash.cpp b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/queryResult_per_hash.cpp index fab9dcbe..4d409aa1 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/queryResult_per_hash.cpp +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/queryResult_per_hash.cpp @@ -65,7 +65,7 @@ typedef struct { } PACKED_HASH_DTYPE; /************************/ const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/; - const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; + const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; typedef struct { ap_uint<(32)> s0_k0; ap_uint<(32)> s0_k1; @@ -111,7 +111,7 @@ typedef struct { /* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO. * So that FIFO will get filled, and the shuffle unit wont be able to handle it. * We need at least NUM_STM FIFO elements between arbiter and shuffle. */ -const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; +const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; const int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram) const int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5); const int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1); diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/shuffle_TtoS_per_hash.cpp b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/shuffle_TtoS_per_hash.cpp index 7e59d47b..72af4adb 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/shuffle_TtoS_per_hash.cpp +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/shuffle_TtoS_per_hash.cpp @@ -65,7 +65,7 @@ typedef struct { } PACKED_HASH_DTYPE; /************************/ const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/; - const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; + const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; typedef struct { ap_uint<(32)> s0_k0; ap_uint<(32)> s0_k1; @@ -111,7 +111,7 @@ typedef struct { /* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO. * So that FIFO will get filled, and the shuffle unit wont be able to handle it. * We need at least NUM_STM FIFO elements between arbiter and shuffle. */ -const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; +const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; const int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram) const int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5); const int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1); diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/shuffle_reordering_per_hash.cpp b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/shuffle_reordering_per_hash.cpp index a2be7479..588a927c 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/shuffle_reordering_per_hash.cpp +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/shuffle_reordering_per_hash.cpp @@ -65,7 +65,7 @@ typedef struct { } PACKED_HASH_DTYPE; /************************/ const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/; - const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; + const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; typedef struct { ap_uint<(32)> s0_k0; ap_uint<(32)> s0_k1; @@ -111,7 +111,7 @@ typedef struct { /* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO. * So that FIFO will get filled, and the shuffle unit wont be able to handle it. * We need at least NUM_STM FIFO elements between arbiter and shuffle. */ -const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; +const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; const int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram) const int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5); const int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1); diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/workload.cpp b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/workload.cpp index 58908f1b..6891694f 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/workload.cpp +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/workload.cpp @@ -65,7 +65,7 @@ typedef struct { } PACKED_HASH_DTYPE; /************************/ const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/; - const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; + const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; typedef struct { ap_uint<(32)> s0_k0; ap_uint<(32)> s0_k1; @@ -111,7 +111,7 @@ typedef struct { /* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO. * So that FIFO will get filled, and the shuffle unit wont be able to handle it. * We need at least NUM_STM FIFO elements between arbiter and shuffle. */ -const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; +const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; const int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram) const int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5); const int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1); diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/writeOutput_synchronous.cpp b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/writeOutput_synchronous.cpp index 2905acac..70b90b1a 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/writeOutput_synchronous.cpp +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/cpp/writeOutput_synchronous.cpp @@ -65,7 +65,7 @@ typedef struct { } PACKED_HASH_DTYPE; /************************/ const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/; - const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; + const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; typedef struct { ap_uint<(32)> s0_k0; ap_uint<(32)> s0_k1; @@ -111,7 +111,7 @@ typedef struct { /* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO. * So that FIFO will get filled, and the shuffle unit wont be able to handle it. * We need at least NUM_STM FIFO elements between arbiter and shuffle. */ -const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; +const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; const int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram) const int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5); const int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1); diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/flatten/flatten-bca92fa8-multistream_MurmurHash3.cpp b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/flatten/flatten-d2a06f17-multistream_MurmurHash3.cpp similarity index 98% rename from benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/flatten/flatten-bca92fa8-multistream_MurmurHash3.cpp rename to benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/flatten/flatten-d2a06f17-multistream_MurmurHash3.cpp index 26df122c..c6f8127f 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/flatten/flatten-bca92fa8-multistream_MurmurHash3.cpp +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/flatten/flatten-d2a06f17-multistream_MurmurHash3.cpp @@ -65,7 +65,7 @@ typedef struct { } PACKED_HASH_DTYPE; /************************/ const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/; - const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; + const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_; typedef struct { ap_uint<(32)> s0_k0; ap_uint<(32)> s0_k1; @@ -111,7 +111,7 @@ typedef struct { /* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO. * So that FIFO will get filled, and the shuffle unit wont be able to handle it. * We need at least NUM_STM FIFO elements between arbiter and shuffle. */ -const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; +const int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1; const int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram) const int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5); const int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1); diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/graph.json b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/graph.json index 906141cb..17aece16 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/graph.json +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/graph.json @@ -8,79 +8,79 @@ ], "tasks": { "bloom_aggregate_SPLIT": { - "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell \nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n){\n\n\n#pragma HLS disaggregate variable = reconstruct_stream\n#pragma HLS array_partition variable = reconstruct_stream complete\n#pragma HLS interface ap_fifo port = reconstruct_stream[0]._\n#pragma HLS aggregate variable = reconstruct_stream[0]._ bit\n#pragma HLS interface ap_fifo port = reconstruct_stream[0]._peek\n#pragma HLS aggregate variable = reconstruct_stream[0]._peek bit\nvoid(reconstruct_stream[0]._.empty());\nvoid(reconstruct_stream[0]._peek.empty());\n#pragma HLS interface ap_fifo port = reconstruct_stream[1]._\n#pragma HLS aggregate variable = reconstruct_stream[1]._ bit\n#pragma HLS interface ap_fifo port = reconstruct_stream[1]._peek\n#pragma HLS aggregate variable = reconstruct_stream[1]._peek bit\nvoid(reconstruct_stream[1]._.empty());\nvoid(reconstruct_stream[1]._peek.empty());\n#pragma HLS interface ap_fifo port = reconstruct_stream[2]._\n#pragma HLS aggregate variable = reconstruct_stream[2]._ bit\n#pragma HLS interface ap_fifo port = reconstruct_stream[2]._peek\n#pragma HLS aggregate variable = reconstruct_stream[2]._peek bit\nvoid(reconstruct_stream[2]._.empty());\nvoid(reconstruct_stream[2]._peek.empty());\n\n#pragma HLS disaggregate variable = aggregate_stream\n#pragma HLS interface ap_fifo port = aggregate_stream._\n#pragma HLS aggregate variable = aggregate_stream._ bit\nvoid(aggregate_stream._.full());\n\n int num_writes_TOTAL = 0;\n int num_reads = 0;\n int all_hashes_available = 0;\n uint32_t result = 1;\n while (num_writes_TOTAL < KEYPAIRS_PER_STM)\n {\n#pragma HLS PIPELINE=1\n // Check if all of our hash values are available:\n all_hashes_available = 1;\n for (int i = 0; i < (3); ++i) {\n if (reconstruct_stream[i].empty()) {\n all_hashes_available = 0;\n }\n }\n if (all_hashes_available)\n {\n result = 1;\n for (int i = 0; i < (3); ++i) {\n result &= reconstruct_stream[i].read();\n }\n num_reads++;\n aggregate_stream.write(result);\n num_writes_TOTAL++;\n }\n }\n return;\n}\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", + "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell\nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n){\n\n\n#pragma HLS disaggregate variable = reconstruct_stream\n#pragma HLS array_partition variable = reconstruct_stream complete\n#pragma HLS interface ap_fifo port = reconstruct_stream[0]._\n#pragma HLS aggregate variable = reconstruct_stream[0]._ bit\n#pragma HLS interface ap_fifo port = reconstruct_stream[0]._peek\n#pragma HLS aggregate variable = reconstruct_stream[0]._peek bit\nvoid(reconstruct_stream[0]._.empty());\nvoid(reconstruct_stream[0]._peek.empty());\n#pragma HLS interface ap_fifo port = reconstruct_stream[1]._\n#pragma HLS aggregate variable = reconstruct_stream[1]._ bit\n#pragma HLS interface ap_fifo port = reconstruct_stream[1]._peek\n#pragma HLS aggregate variable = reconstruct_stream[1]._peek bit\nvoid(reconstruct_stream[1]._.empty());\nvoid(reconstruct_stream[1]._peek.empty());\n#pragma HLS interface ap_fifo port = reconstruct_stream[2]._\n#pragma HLS aggregate variable = reconstruct_stream[2]._ bit\n#pragma HLS interface ap_fifo port = reconstruct_stream[2]._peek\n#pragma HLS aggregate variable = reconstruct_stream[2]._peek bit\nvoid(reconstruct_stream[2]._.empty());\nvoid(reconstruct_stream[2]._peek.empty());\n\n#pragma HLS disaggregate variable = aggregate_stream\n#pragma HLS interface ap_fifo port = aggregate_stream._\n#pragma HLS aggregate variable = aggregate_stream._ bit\nvoid(aggregate_stream._.full());\n\n int num_writes_TOTAL = 0;\n int num_reads = 0;\n int all_hashes_available = 0;\n uint32_t result = 1;\n while (num_writes_TOTAL < KEYPAIRS_PER_STM)\n {\n#pragma HLS PIPELINE=1\n // Check if all of our hash values are available:\n all_hashes_available = 1;\n for (int i = 0; i < (3); ++i) {\n if (reconstruct_stream[i].empty()) {\n all_hashes_available = 0;\n }\n }\n if (all_hashes_available)\n {\n result = 1;\n for (int i = 0; i < (3); ++i) {\n result &= reconstruct_stream[i].read();\n }\n num_reads++;\n aggregate_stream.write(result);\n num_writes_TOTAL++;\n }\n }\n return;\n}\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", "level": "lower", "target": "hls", "vendor": "xilinx" }, "bloom_arb_forwarder": { - "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell \nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n){\n\n\n#pragma HLS disaggregate variable = hash_stream\n#pragma HLS array_partition variable = hash_stream complete\n#pragma HLS interface ap_fifo port = hash_stream[0]._\n#pragma HLS aggregate variable = hash_stream[0]._ bit\n#pragma HLS interface ap_fifo port = hash_stream[0]._peek\n#pragma HLS aggregate variable = hash_stream[0]._peek bit\nvoid(hash_stream[0]._.empty());\nvoid(hash_stream[0]._peek.empty());\n#pragma HLS interface ap_fifo port = hash_stream[1]._\n#pragma HLS aggregate variable = hash_stream[1]._ bit\n#pragma HLS interface ap_fifo port = hash_stream[1]._peek\n#pragma HLS aggregate variable = hash_stream[1]._peek bit\nvoid(hash_stream[1]._.empty());\nvoid(hash_stream[1]._peek.empty());\n#pragma HLS interface ap_fifo port = hash_stream[2]._\n#pragma HLS aggregate variable = hash_stream[2]._ bit\n#pragma HLS interface ap_fifo port = hash_stream[2]._peek\n#pragma HLS aggregate variable = hash_stream[2]._peek bit\nvoid(hash_stream[2]._.empty());\nvoid(hash_stream[2]._peek.empty());\n#pragma HLS interface ap_fifo port = hash_stream[3]._\n#pragma HLS aggregate variable = hash_stream[3]._ bit\n#pragma HLS interface ap_fifo port = hash_stream[3]._peek\n#pragma HLS aggregate variable = hash_stream[3]._peek bit\nvoid(hash_stream[3]._.empty());\nvoid(hash_stream[3]._peek.empty());\n#pragma HLS interface ap_fifo port = hash_stream[4]._\n#pragma HLS aggregate variable = hash_stream[4]._ bit\n#pragma HLS interface ap_fifo port = hash_stream[4]._peek\n#pragma HLS aggregate variable = hash_stream[4]._peek bit\nvoid(hash_stream[4]._.empty());\nvoid(hash_stream[4]._peek.empty());\n\n#pragma HLS disaggregate variable = arb_stream\n#pragma HLS array_partition variable = arb_stream complete\n#pragma HLS interface ap_fifo port = arb_stream[0]._\n#pragma HLS aggregate variable = arb_stream[0]._ bit\nvoid(arb_stream[0]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[1]._\n#pragma HLS aggregate variable = arb_stream[1]._ bit\nvoid(arb_stream[1]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[2]._\n#pragma HLS aggregate variable = arb_stream[2]._ bit\nvoid(arb_stream[2]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[3]._\n#pragma HLS aggregate variable = arb_stream[3]._ bit\nvoid(arb_stream[3]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[4]._\n#pragma HLS aggregate variable = arb_stream[4]._ bit\nvoid(arb_stream[4]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[5]._\n#pragma HLS aggregate variable = arb_stream[5]._ bit\nvoid(arb_stream[5]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[6]._\n#pragma HLS aggregate variable = arb_stream[6]._ bit\nvoid(arb_stream[6]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[7]._\n#pragma HLS aggregate variable = arb_stream[7]._ bit\nvoid(arb_stream[7]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[8]._\n#pragma HLS aggregate variable = arb_stream[8]._ bit\nvoid(arb_stream[8]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[9]._\n#pragma HLS aggregate variable = arb_stream[9]._ bit\nvoid(arb_stream[9]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[10]._\n#pragma HLS aggregate variable = arb_stream[10]._ bit\nvoid(arb_stream[10]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[11]._\n#pragma HLS aggregate variable = arb_stream[11]._ bit\nvoid(arb_stream[11]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[12]._\n#pragma HLS aggregate variable = arb_stream[12]._ bit\nvoid(arb_stream[12]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[13]._\n#pragma HLS aggregate variable = arb_stream[13]._ bit\nvoid(arb_stream[13]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[14]._\n#pragma HLS aggregate variable = arb_stream[14]._ bit\nvoid(arb_stream[14]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[15]._\n#pragma HLS aggregate variable = arb_stream[15]._ bit\nvoid(arb_stream[15]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[16]._\n#pragma HLS aggregate variable = arb_stream[16]._ bit\nvoid(arb_stream[16]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[17]._\n#pragma HLS aggregate variable = arb_stream[17]._ bit\nvoid(arb_stream[17]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[18]._\n#pragma HLS aggregate variable = arb_stream[18]._ bit\nvoid(arb_stream[18]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[19]._\n#pragma HLS aggregate variable = arb_stream[19]._ bit\nvoid(arb_stream[19]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[20]._\n#pragma HLS aggregate variable = arb_stream[20]._ bit\nvoid(arb_stream[20]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[21]._\n#pragma HLS aggregate variable = arb_stream[21]._ bit\nvoid(arb_stream[21]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[22]._\n#pragma HLS aggregate variable = arb_stream[22]._ bit\nvoid(arb_stream[22]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[23]._\n#pragma HLS aggregate variable = arb_stream[23]._ bit\nvoid(arb_stream[23]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[24]._\n#pragma HLS aggregate variable = arb_stream[24]._ bit\nvoid(arb_stream[24]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[25]._\n#pragma HLS aggregate variable = arb_stream[25]._ bit\nvoid(arb_stream[25]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[26]._\n#pragma HLS aggregate variable = arb_stream[26]._ bit\nvoid(arb_stream[26]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[27]._\n#pragma HLS aggregate variable = arb_stream[27]._ bit\nvoid(arb_stream[27]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[28]._\n#pragma HLS aggregate variable = arb_stream[28]._ bit\nvoid(arb_stream[28]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[29]._\n#pragma HLS aggregate variable = arb_stream[29]._ bit\nvoid(arb_stream[29]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[30]._\n#pragma HLS aggregate variable = arb_stream[30]._ bit\nvoid(arb_stream[30]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[31]._\n#pragma HLS aggregate variable = arb_stream[31]._ bit\nvoid(arb_stream[31]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[32]._\n#pragma HLS aggregate variable = arb_stream[32]._ bit\nvoid(arb_stream[32]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[33]._\n#pragma HLS aggregate variable = arb_stream[33]._ bit\nvoid(arb_stream[33]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[34]._\n#pragma HLS aggregate variable = arb_stream[34]._ bit\nvoid(arb_stream[34]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[35]._\n#pragma HLS aggregate variable = arb_stream[35]._ bit\nvoid(arb_stream[35]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[36]._\n#pragma HLS aggregate variable = arb_stream[36]._ bit\nvoid(arb_stream[36]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[37]._\n#pragma HLS aggregate variable = arb_stream[37]._ bit\nvoid(arb_stream[37]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[38]._\n#pragma HLS aggregate variable = arb_stream[38]._ bit\nvoid(arb_stream[38]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[39]._\n#pragma HLS aggregate variable = arb_stream[39]._ bit\nvoid(arb_stream[39]._.full());\n\n typedef struct {\n ap_uint<1> valid;\n PACKED_HASH_DTYPE value;\n uint32_t target_partition_idx;\n } XBAR_DTYPE;\n const int READ_STOP_COUNT = (5) * KEYPAIRS_PER_STM;\n const int WRITE_STOP_COUNT = KEYPAIRS_PER_STM;\n int total_num_reads = 0;\n int total_num_writes = 0;\n int num_writes_per_stm[(5)];\n#pragma HLS ARRAY_PARTITION variable=num_writes_per_stm dim=0 complete\n /* TAPA Known-issue: Static keyword fails CSIM because this\n isnt thread-safe. But when running the HW build, it will \n instantiate several copies of this function. So this is OK.\n */\n static\n ap_uint reads_per_input[(5)];\n#pragma HLS ARRAY_PARTITION variable=reads_per_input dim=0 complete\n /* TAPA Known-issue: Static keyword fails CSIM because this\n isnt thread-safe. But when running the HW build, it will \n instantiate several copies of this function. So this is OK.\n */\n static\n XBAR_DTYPE xbar[(5)];\n#pragma HLS ARRAY_PARTITION variable=xbar dim=0 complete\n INIT_LOOP:\n for (int i = 0; i < (5); ++i)\n {\n reads_per_input[i] = 0;\n num_writes_per_stm[i] = 0;\n xbar[i].valid = 0;\n }\n MAIN_LOOP:\n while (total_num_reads < READ_STOP_COUNT ||\n num_writes_per_stm[0] < WRITE_STOP_COUNT ||\n num_writes_per_stm[1] < WRITE_STOP_COUNT ||\n num_writes_per_stm[2] < WRITE_STOP_COUNT ||\n num_writes_per_stm[3] < WRITE_STOP_COUNT ||\n num_writes_per_stm[4] < WRITE_STOP_COUNT\n ) {\n#pragma HLS PIPELINE II=1\n RD_LOGIC:\n for (int strm_idx = 0; strm_idx < (5); ++strm_idx) {\n#pragma HLS UNROLL\n // Metadata:\n ap_uint cur_input_idx;\n ap_uint cur_strm_idx;\n METADATA_DTYPE cur_metadata;\n PACKED_HASH_DTYPE packed_hashval;\n if (xbar[strm_idx].valid == 1)\n {\n // Dont replace this value.\n }\n else if (!hash_stream[strm_idx].empty())\n {\n // Hash and partition data:\n ap_uint tmp_hash = hash_stream[strm_idx].read();\n ap_uint idx_inside_partition = tmp_hash % ( (BV_LENGTH-1)/((3)*(8) /* each sub bv is further partitioned into this chunks*/) + 1);\n int partition_idx = (tmp_hash / ( (BV_LENGTH-1)/((3)*(8) /* each sub bv is further partitioned into this chunks*/) + 1));\n total_num_reads++;\n reads_per_input[strm_idx]++;\n // Pack metadata\n cur_metadata.sidx = strm_idx;\n cur_metadata.iidx = reads_per_input[strm_idx];\n // Pack final payload\n packed_hashval.md = cur_metadata;\n packed_hashval.hash = idx_inside_partition;\n xbar[strm_idx].valid = 1;\n xbar[strm_idx].value = packed_hashval;\n xbar[strm_idx].target_partition_idx = partition_idx;\n }\n }\n WR_LOGIC:\n for (int partition_idx = 0; partition_idx < (8) /* each sub bv is further partitioned into this chunks*/; ++partition_idx)\n {\n#pragma HLS UNROLL\n bool found = false;\n uint32_t found_strm_idx = 0;\n for (int strm_idx = 0; strm_idx < (5); ++strm_idx)\n {\n#pragma HLS UNROLL\n int out_fifo_idx = partition_idx*(5) + strm_idx;\n if (xbar[strm_idx].valid == 1 &&\n xbar[strm_idx].target_partition_idx == partition_idx)\n {\n if (arb_stream[out_fifo_idx].try_write( xbar[strm_idx].value ))\n {\n num_writes_per_stm[strm_idx]++;\n xbar[strm_idx].valid = 0;\n }\n }\n }\n }\n }\n}\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", + "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell\nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n){\n\n\n#pragma HLS disaggregate variable = hash_stream\n#pragma HLS array_partition variable = hash_stream complete\n#pragma HLS interface ap_fifo port = hash_stream[0]._\n#pragma HLS aggregate variable = hash_stream[0]._ bit\n#pragma HLS interface ap_fifo port = hash_stream[0]._peek\n#pragma HLS aggregate variable = hash_stream[0]._peek bit\nvoid(hash_stream[0]._.empty());\nvoid(hash_stream[0]._peek.empty());\n#pragma HLS interface ap_fifo port = hash_stream[1]._\n#pragma HLS aggregate variable = hash_stream[1]._ bit\n#pragma HLS interface ap_fifo port = hash_stream[1]._peek\n#pragma HLS aggregate variable = hash_stream[1]._peek bit\nvoid(hash_stream[1]._.empty());\nvoid(hash_stream[1]._peek.empty());\n#pragma HLS interface ap_fifo port = hash_stream[2]._\n#pragma HLS aggregate variable = hash_stream[2]._ bit\n#pragma HLS interface ap_fifo port = hash_stream[2]._peek\n#pragma HLS aggregate variable = hash_stream[2]._peek bit\nvoid(hash_stream[2]._.empty());\nvoid(hash_stream[2]._peek.empty());\n#pragma HLS interface ap_fifo port = hash_stream[3]._\n#pragma HLS aggregate variable = hash_stream[3]._ bit\n#pragma HLS interface ap_fifo port = hash_stream[3]._peek\n#pragma HLS aggregate variable = hash_stream[3]._peek bit\nvoid(hash_stream[3]._.empty());\nvoid(hash_stream[3]._peek.empty());\n#pragma HLS interface ap_fifo port = hash_stream[4]._\n#pragma HLS aggregate variable = hash_stream[4]._ bit\n#pragma HLS interface ap_fifo port = hash_stream[4]._peek\n#pragma HLS aggregate variable = hash_stream[4]._peek bit\nvoid(hash_stream[4]._.empty());\nvoid(hash_stream[4]._peek.empty());\n\n#pragma HLS disaggregate variable = arb_stream\n#pragma HLS array_partition variable = arb_stream complete\n#pragma HLS interface ap_fifo port = arb_stream[0]._\n#pragma HLS aggregate variable = arb_stream[0]._ bit\nvoid(arb_stream[0]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[1]._\n#pragma HLS aggregate variable = arb_stream[1]._ bit\nvoid(arb_stream[1]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[2]._\n#pragma HLS aggregate variable = arb_stream[2]._ bit\nvoid(arb_stream[2]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[3]._\n#pragma HLS aggregate variable = arb_stream[3]._ bit\nvoid(arb_stream[3]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[4]._\n#pragma HLS aggregate variable = arb_stream[4]._ bit\nvoid(arb_stream[4]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[5]._\n#pragma HLS aggregate variable = arb_stream[5]._ bit\nvoid(arb_stream[5]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[6]._\n#pragma HLS aggregate variable = arb_stream[6]._ bit\nvoid(arb_stream[6]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[7]._\n#pragma HLS aggregate variable = arb_stream[7]._ bit\nvoid(arb_stream[7]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[8]._\n#pragma HLS aggregate variable = arb_stream[8]._ bit\nvoid(arb_stream[8]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[9]._\n#pragma HLS aggregate variable = arb_stream[9]._ bit\nvoid(arb_stream[9]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[10]._\n#pragma HLS aggregate variable = arb_stream[10]._ bit\nvoid(arb_stream[10]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[11]._\n#pragma HLS aggregate variable = arb_stream[11]._ bit\nvoid(arb_stream[11]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[12]._\n#pragma HLS aggregate variable = arb_stream[12]._ bit\nvoid(arb_stream[12]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[13]._\n#pragma HLS aggregate variable = arb_stream[13]._ bit\nvoid(arb_stream[13]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[14]._\n#pragma HLS aggregate variable = arb_stream[14]._ bit\nvoid(arb_stream[14]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[15]._\n#pragma HLS aggregate variable = arb_stream[15]._ bit\nvoid(arb_stream[15]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[16]._\n#pragma HLS aggregate variable = arb_stream[16]._ bit\nvoid(arb_stream[16]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[17]._\n#pragma HLS aggregate variable = arb_stream[17]._ bit\nvoid(arb_stream[17]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[18]._\n#pragma HLS aggregate variable = arb_stream[18]._ bit\nvoid(arb_stream[18]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[19]._\n#pragma HLS aggregate variable = arb_stream[19]._ bit\nvoid(arb_stream[19]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[20]._\n#pragma HLS aggregate variable = arb_stream[20]._ bit\nvoid(arb_stream[20]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[21]._\n#pragma HLS aggregate variable = arb_stream[21]._ bit\nvoid(arb_stream[21]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[22]._\n#pragma HLS aggregate variable = arb_stream[22]._ bit\nvoid(arb_stream[22]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[23]._\n#pragma HLS aggregate variable = arb_stream[23]._ bit\nvoid(arb_stream[23]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[24]._\n#pragma HLS aggregate variable = arb_stream[24]._ bit\nvoid(arb_stream[24]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[25]._\n#pragma HLS aggregate variable = arb_stream[25]._ bit\nvoid(arb_stream[25]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[26]._\n#pragma HLS aggregate variable = arb_stream[26]._ bit\nvoid(arb_stream[26]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[27]._\n#pragma HLS aggregate variable = arb_stream[27]._ bit\nvoid(arb_stream[27]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[28]._\n#pragma HLS aggregate variable = arb_stream[28]._ bit\nvoid(arb_stream[28]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[29]._\n#pragma HLS aggregate variable = arb_stream[29]._ bit\nvoid(arb_stream[29]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[30]._\n#pragma HLS aggregate variable = arb_stream[30]._ bit\nvoid(arb_stream[30]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[31]._\n#pragma HLS aggregate variable = arb_stream[31]._ bit\nvoid(arb_stream[31]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[32]._\n#pragma HLS aggregate variable = arb_stream[32]._ bit\nvoid(arb_stream[32]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[33]._\n#pragma HLS aggregate variable = arb_stream[33]._ bit\nvoid(arb_stream[33]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[34]._\n#pragma HLS aggregate variable = arb_stream[34]._ bit\nvoid(arb_stream[34]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[35]._\n#pragma HLS aggregate variable = arb_stream[35]._ bit\nvoid(arb_stream[35]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[36]._\n#pragma HLS aggregate variable = arb_stream[36]._ bit\nvoid(arb_stream[36]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[37]._\n#pragma HLS aggregate variable = arb_stream[37]._ bit\nvoid(arb_stream[37]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[38]._\n#pragma HLS aggregate variable = arb_stream[38]._ bit\nvoid(arb_stream[38]._.full());\n#pragma HLS interface ap_fifo port = arb_stream[39]._\n#pragma HLS aggregate variable = arb_stream[39]._ bit\nvoid(arb_stream[39]._.full());\n\n typedef struct {\n ap_uint<1> valid;\n PACKED_HASH_DTYPE value;\n uint32_t target_partition_idx;\n } XBAR_DTYPE;\n const int READ_STOP_COUNT = (5) * KEYPAIRS_PER_STM;\n const int WRITE_STOP_COUNT = KEYPAIRS_PER_STM;\n int total_num_reads = 0;\n int total_num_writes = 0;\n int num_writes_per_stm[(5)];\n#pragma HLS ARRAY_PARTITION variable=num_writes_per_stm dim=0 complete\n /* TAPA Known-issue: Static keyword fails CSIM because this\n isnt thread-safe. But when running the HW build, it will\n instantiate several copies of this function. So this is OK.\n */\n static\n ap_uint reads_per_input[(5)];\n#pragma HLS ARRAY_PARTITION variable=reads_per_input dim=0 complete\n /* TAPA Known-issue: Static keyword fails CSIM because this\n isnt thread-safe. But when running the HW build, it will\n instantiate several copies of this function. So this is OK.\n */\n static\n XBAR_DTYPE xbar[(5)];\n#pragma HLS ARRAY_PARTITION variable=xbar dim=0 complete\n INIT_LOOP:\n for (int i = 0; i < (5); ++i)\n {\n reads_per_input[i] = 0;\n num_writes_per_stm[i] = 0;\n xbar[i].valid = 0;\n }\n MAIN_LOOP:\n while (total_num_reads < READ_STOP_COUNT ||\n num_writes_per_stm[0] < WRITE_STOP_COUNT ||\n num_writes_per_stm[1] < WRITE_STOP_COUNT ||\n num_writes_per_stm[2] < WRITE_STOP_COUNT ||\n num_writes_per_stm[3] < WRITE_STOP_COUNT ||\n num_writes_per_stm[4] < WRITE_STOP_COUNT\n ) {\n#pragma HLS PIPELINE II=1\n RD_LOGIC:\n for (int strm_idx = 0; strm_idx < (5); ++strm_idx) {\n#pragma HLS UNROLL\n // Metadata:\n ap_uint cur_input_idx;\n ap_uint cur_strm_idx;\n METADATA_DTYPE cur_metadata;\n PACKED_HASH_DTYPE packed_hashval;\n if (xbar[strm_idx].valid == 1)\n {\n // Dont replace this value.\n }\n else if (!hash_stream[strm_idx].empty())\n {\n // Hash and partition data:\n ap_uint tmp_hash = hash_stream[strm_idx].read();\n ap_uint idx_inside_partition = tmp_hash % ( (BV_LENGTH-1)/((3)*(8) /* each sub bv is further partitioned into this chunks*/) + 1);\n int partition_idx = (tmp_hash / ( (BV_LENGTH-1)/((3)*(8) /* each sub bv is further partitioned into this chunks*/) + 1));\n total_num_reads++;\n reads_per_input[strm_idx]++;\n // Pack metadata\n cur_metadata.sidx = strm_idx;\n cur_metadata.iidx = reads_per_input[strm_idx];\n // Pack final payload\n packed_hashval.md = cur_metadata;\n packed_hashval.hash = idx_inside_partition;\n xbar[strm_idx].valid = 1;\n xbar[strm_idx].value = packed_hashval;\n xbar[strm_idx].target_partition_idx = partition_idx;\n }\n }\n WR_LOGIC:\n for (int partition_idx = 0; partition_idx < (8) /* each sub bv is further partitioned into this chunks*/; ++partition_idx)\n {\n#pragma HLS UNROLL\n bool found = false;\n uint32_t found_strm_idx = 0;\n for (int strm_idx = 0; strm_idx < (5); ++strm_idx)\n {\n#pragma HLS UNROLL\n int out_fifo_idx = partition_idx*(5) + strm_idx;\n if (xbar[strm_idx].valid == 1 &&\n xbar[strm_idx].target_partition_idx == partition_idx)\n {\n if (arb_stream[out_fifo_idx].try_write( xbar[strm_idx].value ))\n {\n num_writes_per_stm[strm_idx]++;\n xbar[strm_idx].valid = 0;\n }\n }\n }\n }\n }\n}\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", "level": "lower", "target": "hls", "vendor": "xilinx" }, "bloom_arbiter_ratemonitor": { - "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell \nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n){\n\n\n\n#pragma HLS disaggregate variable = arb_stream_in\n#pragma HLS array_partition variable = arb_stream_in complete\n#pragma HLS interface ap_fifo port = arb_stream_in[0]._\n#pragma HLS aggregate variable = arb_stream_in[0]._ bit\n#pragma HLS interface ap_fifo port = arb_stream_in[0]._peek\n#pragma HLS aggregate variable = arb_stream_in[0]._peek bit\nvoid(arb_stream_in[0]._.empty());\nvoid(arb_stream_in[0]._peek.empty());\n#pragma HLS interface ap_fifo port = arb_stream_in[1]._\n#pragma HLS aggregate variable = arb_stream_in[1]._ bit\n#pragma HLS interface ap_fifo port = arb_stream_in[1]._peek\n#pragma HLS aggregate variable = arb_stream_in[1]._peek bit\nvoid(arb_stream_in[1]._.empty());\nvoid(arb_stream_in[1]._peek.empty());\n#pragma HLS interface ap_fifo port = arb_stream_in[2]._\n#pragma HLS aggregate variable = arb_stream_in[2]._ bit\n#pragma HLS interface ap_fifo port = arb_stream_in[2]._peek\n#pragma HLS aggregate variable = arb_stream_in[2]._peek bit\nvoid(arb_stream_in[2]._.empty());\nvoid(arb_stream_in[2]._peek.empty());\n#pragma HLS interface ap_fifo port = arb_stream_in[3]._\n#pragma HLS aggregate variable = arb_stream_in[3]._ bit\n#pragma HLS interface ap_fifo port = arb_stream_in[3]._peek\n#pragma HLS aggregate variable = arb_stream_in[3]._peek bit\nvoid(arb_stream_in[3]._.empty());\nvoid(arb_stream_in[3]._peek.empty());\n#pragma HLS interface ap_fifo port = arb_stream_in[4]._\n#pragma HLS aggregate variable = arb_stream_in[4]._ bit\n#pragma HLS interface ap_fifo port = arb_stream_in[4]._peek\n#pragma HLS aggregate variable = arb_stream_in[4]._peek bit\nvoid(arb_stream_in[4]._.empty());\nvoid(arb_stream_in[4]._peek.empty());\n#pragma HLS interface ap_fifo port = arb_stream_in[5]._\n#pragma HLS aggregate variable = arb_stream_in[5]._ bit\n#pragma HLS interface ap_fifo port = arb_stream_in[5]._peek\n#pragma HLS aggregate variable = arb_stream_in[5]._peek bit\nvoid(arb_stream_in[5]._.empty());\nvoid(arb_stream_in[5]._peek.empty());\n#pragma HLS interface ap_fifo port = arb_stream_in[6]._\n#pragma HLS aggregate variable = arb_stream_in[6]._ bit\n#pragma HLS interface ap_fifo port = arb_stream_in[6]._peek\n#pragma HLS aggregate variable = arb_stream_in[6]._peek bit\nvoid(arb_stream_in[6]._.empty());\nvoid(arb_stream_in[6]._peek.empty());\n#pragma HLS interface ap_fifo port = arb_stream_in[7]._\n#pragma HLS aggregate variable = arb_stream_in[7]._ bit\n#pragma HLS interface ap_fifo port = arb_stream_in[7]._peek\n#pragma HLS aggregate variable = arb_stream_in[7]._peek bit\nvoid(arb_stream_in[7]._.empty());\nvoid(arb_stream_in[7]._peek.empty());\n\n#pragma HLS disaggregate variable = arb_stream_out\n#pragma HLS array_partition variable = arb_stream_out complete\n#pragma HLS interface ap_fifo port = arb_stream_out[0]._\n#pragma HLS aggregate variable = arb_stream_out[0]._ bit\nvoid(arb_stream_out[0]._.full());\n#pragma HLS interface ap_fifo port = arb_stream_out[1]._\n#pragma HLS aggregate variable = arb_stream_out[1]._ bit\nvoid(arb_stream_out[1]._.full());\n#pragma HLS interface ap_fifo port = arb_stream_out[2]._\n#pragma HLS aggregate variable = arb_stream_out[2]._ bit\nvoid(arb_stream_out[2]._.full());\n#pragma HLS interface ap_fifo port = arb_stream_out[3]._\n#pragma HLS aggregate variable = arb_stream_out[3]._ bit\nvoid(arb_stream_out[3]._.full());\n#pragma HLS interface ap_fifo port = arb_stream_out[4]._\n#pragma HLS aggregate variable = arb_stream_out[4]._ bit\nvoid(arb_stream_out[4]._.full());\n#pragma HLS interface ap_fifo port = arb_stream_out[5]._\n#pragma HLS aggregate variable = arb_stream_out[5]._ bit\nvoid(arb_stream_out[5]._.full());\n#pragma HLS interface ap_fifo port = arb_stream_out[6]._\n#pragma HLS aggregate variable = arb_stream_out[6]._ bit\nvoid(arb_stream_out[6]._.full());\n#pragma HLS interface ap_fifo port = arb_stream_out[7]._\n#pragma HLS aggregate variable = arb_stream_out[7]._ bit\nvoid(arb_stream_out[7]._.full());\n\n#pragma HLS disaggregate variable = fdbk_stream_0\n#pragma HLS array_partition variable = fdbk_stream_0 complete\n#pragma HLS interface ap_fifo port = fdbk_stream_0[0]._\n#pragma HLS aggregate variable = fdbk_stream_0[0]._ bit\nvoid(fdbk_stream_0[0]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_0[1]._\n#pragma HLS aggregate variable = fdbk_stream_0[1]._ bit\nvoid(fdbk_stream_0[1]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_0[2]._\n#pragma HLS aggregate variable = fdbk_stream_0[2]._ bit\nvoid(fdbk_stream_0[2]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_0[3]._\n#pragma HLS aggregate variable = fdbk_stream_0[3]._ bit\nvoid(fdbk_stream_0[3]._.full());\n\n#pragma HLS disaggregate variable = fdbk_stream_1\n#pragma HLS array_partition variable = fdbk_stream_1 complete\n#pragma HLS interface ap_fifo port = fdbk_stream_1[0]._\n#pragma HLS aggregate variable = fdbk_stream_1[0]._ bit\nvoid(fdbk_stream_1[0]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_1[1]._\n#pragma HLS aggregate variable = fdbk_stream_1[1]._ bit\nvoid(fdbk_stream_1[1]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_1[2]._\n#pragma HLS aggregate variable = fdbk_stream_1[2]._ bit\nvoid(fdbk_stream_1[2]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_1[3]._\n#pragma HLS aggregate variable = fdbk_stream_1[3]._ bit\nvoid(fdbk_stream_1[3]._.full());\n\n#pragma HLS disaggregate variable = fdbk_stream_2\n#pragma HLS array_partition variable = fdbk_stream_2 complete\n#pragma HLS interface ap_fifo port = fdbk_stream_2[0]._\n#pragma HLS aggregate variable = fdbk_stream_2[0]._ bit\nvoid(fdbk_stream_2[0]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_2[1]._\n#pragma HLS aggregate variable = fdbk_stream_2[1]._ bit\nvoid(fdbk_stream_2[1]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_2[2]._\n#pragma HLS aggregate variable = fdbk_stream_2[2]._ bit\nvoid(fdbk_stream_2[2]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_2[3]._\n#pragma HLS aggregate variable = fdbk_stream_2[3]._ bit\nvoid(fdbk_stream_2[3]._.full());\n\n#pragma HLS disaggregate variable = fdbk_stream_3\n#pragma HLS array_partition variable = fdbk_stream_3 complete\n#pragma HLS interface ap_fifo port = fdbk_stream_3[0]._\n#pragma HLS aggregate variable = fdbk_stream_3[0]._ bit\nvoid(fdbk_stream_3[0]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_3[1]._\n#pragma HLS aggregate variable = fdbk_stream_3[1]._ bit\nvoid(fdbk_stream_3[1]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_3[2]._\n#pragma HLS aggregate variable = fdbk_stream_3[2]._ bit\nvoid(fdbk_stream_3[2]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_3[3]._\n#pragma HLS aggregate variable = fdbk_stream_3[3]._ bit\nvoid(fdbk_stream_3[3]._.full());\n\n#pragma HLS disaggregate variable = fdbk_stream_4\n#pragma HLS array_partition variable = fdbk_stream_4 complete\n#pragma HLS interface ap_fifo port = fdbk_stream_4[0]._\n#pragma HLS aggregate variable = fdbk_stream_4[0]._ bit\nvoid(fdbk_stream_4[0]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_4[1]._\n#pragma HLS aggregate variable = fdbk_stream_4[1]._ bit\nvoid(fdbk_stream_4[1]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_4[2]._\n#pragma HLS aggregate variable = fdbk_stream_4[2]._ bit\nvoid(fdbk_stream_4[2]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_4[3]._\n#pragma HLS aggregate variable = fdbk_stream_4[3]._ bit\nvoid(fdbk_stream_4[3]._.full());\n\n#pragma HLS disaggregate variable = fdbk_stream_5\n#pragma HLS array_partition variable = fdbk_stream_5 complete\n#pragma HLS interface ap_fifo port = fdbk_stream_5[0]._\n#pragma HLS aggregate variable = fdbk_stream_5[0]._ bit\nvoid(fdbk_stream_5[0]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_5[1]._\n#pragma HLS aggregate variable = fdbk_stream_5[1]._ bit\nvoid(fdbk_stream_5[1]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_5[2]._\n#pragma HLS aggregate variable = fdbk_stream_5[2]._ bit\nvoid(fdbk_stream_5[2]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_5[3]._\n#pragma HLS aggregate variable = fdbk_stream_5[3]._ bit\nvoid(fdbk_stream_5[3]._.full());\n\n#pragma HLS disaggregate variable = fdbk_stream_6\n#pragma HLS array_partition variable = fdbk_stream_6 complete\n#pragma HLS interface ap_fifo port = fdbk_stream_6[0]._\n#pragma HLS aggregate variable = fdbk_stream_6[0]._ bit\nvoid(fdbk_stream_6[0]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_6[1]._\n#pragma HLS aggregate variable = fdbk_stream_6[1]._ bit\nvoid(fdbk_stream_6[1]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_6[2]._\n#pragma HLS aggregate variable = fdbk_stream_6[2]._ bit\nvoid(fdbk_stream_6[2]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_6[3]._\n#pragma HLS aggregate variable = fdbk_stream_6[3]._ bit\nvoid(fdbk_stream_6[3]._.full());\n\n#pragma HLS disaggregate variable = fdbk_stream_7\n#pragma HLS array_partition variable = fdbk_stream_7 complete\n#pragma HLS interface ap_fifo port = fdbk_stream_7[0]._\n#pragma HLS aggregate variable = fdbk_stream_7[0]._ bit\nvoid(fdbk_stream_7[0]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_7[1]._\n#pragma HLS aggregate variable = fdbk_stream_7[1]._ bit\nvoid(fdbk_stream_7[1]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_7[2]._\n#pragma HLS aggregate variable = fdbk_stream_7[2]._ bit\nvoid(fdbk_stream_7[2]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_7[3]._\n#pragma HLS aggregate variable = fdbk_stream_7[3]._ bit\nvoid(fdbk_stream_7[3]._.full());\n\n int WRITE_STOP_COUNT = 0;\n /* Depending on which level this ratemon is in, \n * it expects a different number of writes.\n */\n WRITE_STOP_COUNT = (5) * KEYPAIRS_PER_STM;\n int writes_per_partition[(8) /* each sub bv is further partitioned into this chunks*/] = {};\n int CRASH_COMPILATION_IF_MISTAKE;\n typedef struct {\n ap_uint valid;\n PACKED_HASH_DTYPE value;\n } XBAR_DTYPE;\n typedef enum {\n WR_FEEDBACK,\n WR_OUTPUT\n } RATEMON_MODE;\n XBAR_DTYPE xbar[(8) /* each sub bv is further partitioned into this chunks*/];\n#pragma HLS ARRAY_PARTITION variable=xbar dim=0 complete\n ap_uint min_output_idx[(5)];\n#pragma HLS ARRAY_PARTITION variable=min_output_idx dim=0 complete\n ap_uint idx_tracker[(5)][(8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/];\n#pragma HLS ARRAY_PARTITION variable=idx_tracker dim=0 complete\n INIT_LOOP:\n for (int i = 0; i < (8) /* each sub bv is further partitioned into this chunks*/; ++i) {\n xbar[i].valid = 0;\n writes_per_partition[i] = 0;\n }\n INIT_LOOP_2:\n for (int i = 0; i < (5); ++i) {\n min_output_idx[i] = 0;\n for (int j = 0; j < (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; ++j) {\n idx_tracker[i][j] = 0;\n }\n }\n MAIN_LOOP:\n while (\n writes_per_partition[0] +\n writes_per_partition[1] +\n writes_per_partition[2] +\n writes_per_partition[3] +\n writes_per_partition[4] +\n writes_per_partition[5] +\n writes_per_partition[6] +\n writes_per_partition[7]\n < WRITE_STOP_COUNT)\n {\n#pragma HLS PIPELINE II=1\n RATEMON_FEEDBACK_DTYPE feedback;\n RD_INPUTS:\n for (int partition_idx = 0; partition_idx < (8) /* each sub bv is further partitioned into this chunks*/; ++partition_idx) {\n ap_uint cur_input_idx;\n ap_uint cur_strm_idx;\n METADATA_DTYPE cur_metadata;\n if (xbar[partition_idx].valid == 0 &&\n !arb_stream_in[partition_idx].empty()\n ){\n xbar[partition_idx].valid = 1;\n xbar[partition_idx].value = arb_stream_in[partition_idx].read();\n }\n }\n ///////////////////////\n // WR_OUTPUTS:\n ///////////////////////\n for (int sidx = 0; sidx < (5); ++sidx) { int offset = (xbar[0].value.md.iidx) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (xbar[0].valid && xbar[0].value.md.sidx == sidx && !arb_stream_out[0].full()) { xbar[0].valid = 0; arb_stream_out[0].write(xbar[0].value); idx_tracker[sidx][offset] = 1; writes_per_partition[0]++; break; } }\n for (int sidx = 0; sidx < (5); ++sidx) { int offset = (xbar[1].value.md.iidx) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (xbar[1].valid && xbar[1].value.md.sidx == sidx && !arb_stream_out[1].full()) { xbar[1].valid = 0; arb_stream_out[1].write(xbar[1].value); idx_tracker[sidx][offset] = 1; writes_per_partition[1]++; break; } }\n for (int sidx = 0; sidx < (5); ++sidx) { int offset = (xbar[2].value.md.iidx) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (xbar[2].valid && xbar[2].value.md.sidx == sidx && !arb_stream_out[2].full()) { xbar[2].valid = 0; arb_stream_out[2].write(xbar[2].value); idx_tracker[sidx][offset] = 1; writes_per_partition[2]++; break; } }\n for (int sidx = 0; sidx < (5); ++sidx) { int offset = (xbar[3].value.md.iidx) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (xbar[3].valid && xbar[3].value.md.sidx == sidx && !arb_stream_out[3].full()) { xbar[3].valid = 0; arb_stream_out[3].write(xbar[3].value); idx_tracker[sidx][offset] = 1; writes_per_partition[3]++; break; } }\n for (int sidx = 0; sidx < (5); ++sidx) { int offset = (xbar[4].value.md.iidx) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (xbar[4].valid && xbar[4].value.md.sidx == sidx && !arb_stream_out[4].full()) { xbar[4].valid = 0; arb_stream_out[4].write(xbar[4].value); idx_tracker[sidx][offset] = 1; writes_per_partition[4]++; break; } }\n for (int sidx = 0; sidx < (5); ++sidx) { int offset = (xbar[5].value.md.iidx) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (xbar[5].valid && xbar[5].value.md.sidx == sidx && !arb_stream_out[5].full()) { xbar[5].valid = 0; arb_stream_out[5].write(xbar[5].value); idx_tracker[sidx][offset] = 1; writes_per_partition[5]++; break; } }\n for (int sidx = 0; sidx < (5); ++sidx) { int offset = (xbar[6].value.md.iidx) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (xbar[6].valid && xbar[6].value.md.sidx == sidx && !arb_stream_out[6].full()) { xbar[6].valid = 0; arb_stream_out[6].write(xbar[6].value); idx_tracker[sidx][offset] = 1; writes_per_partition[6]++; break; } }\n for (int sidx = 0; sidx < (5); ++sidx) { int offset = (xbar[7].value.md.iidx) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (xbar[7].valid && xbar[7].value.md.sidx == sidx && !arb_stream_out[7].full()) { xbar[7].valid = 0; arb_stream_out[7].write(xbar[7].value); idx_tracker[sidx][offset] = 1; writes_per_partition[7]++; break; } }\n ///////////////////////\n // UPDATE_IDCES:\n ///////////////////////\n int shuf_idx0 = (min_output_idx[0] + 1) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (idx_tracker[0][shuf_idx0] == 1) { min_output_idx[0] += 1; idx_tracker[0][shuf_idx0] = 0; } /*#ifdef __DO_DEBUG_PRINTS__ //printf(\"ARBITER RATEMON %d %c kp%d - Updating min_output_idx[%d]=%d\\n\", // arb_idx, // ratemon_ID, // kp_idx, // STM, // min_output_idx[STM].to_int() //); //#endif \n*/ int shuf_idx1 = (min_output_idx[1] + 1) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (idx_tracker[1][shuf_idx1] == 1) { min_output_idx[1] += 1; idx_tracker[1][shuf_idx1] = 0; } /*#ifdef __DO_DEBUG_PRINTS__ //printf(\"ARBITER RATEMON %d %c kp%d - Updating min_output_idx[%d]=%d\\n\", // arb_idx, // ratemon_ID, // kp_idx, // STM, // min_output_idx[STM].to_int() //); //#endif \n*/ int shuf_idx2 = (min_output_idx[2] + 1) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (idx_tracker[2][shuf_idx2] == 1) { min_output_idx[2] += 1; idx_tracker[2][shuf_idx2] = 0; } /*#ifdef __DO_DEBUG_PRINTS__ //printf(\"ARBITER RATEMON %d %c kp%d - Updating min_output_idx[%d]=%d\\n\", // arb_idx, // ratemon_ID, // kp_idx, // STM, // min_output_idx[STM].to_int() //); //#endif \n*/ int shuf_idx3 = (min_output_idx[3] + 1) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (idx_tracker[3][shuf_idx3] == 1) { min_output_idx[3] += 1; idx_tracker[3][shuf_idx3] = 0; } /*#ifdef __DO_DEBUG_PRINTS__ //printf(\"ARBITER RATEMON %d %c kp%d - Updating min_output_idx[%d]=%d\\n\", // arb_idx, // ratemon_ID, // kp_idx, // STM, // min_output_idx[STM].to_int() //); //#endif \n*/ int shuf_idx4 = (min_output_idx[4] + 1) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (idx_tracker[4][shuf_idx4] == 1) { min_output_idx[4] += 1; idx_tracker[4][shuf_idx4] = 0; } /*#ifdef __DO_DEBUG_PRINTS__ //printf(\"ARBITER RATEMON %d %c kp%d - Updating min_output_idx[%d]=%d\\n\", // arb_idx, // ratemon_ID, // kp_idx, // STM, // min_output_idx[STM].to_int() //); //#endif \n*/\n WRITE_FEEDBACK:\n /* For the ratemonitors NOT in the last level, we dont \n * have the data from all 4 streams. So dont attempt to ratelimit\n * based on data we cant get.\n */\n feedback.strm0_out_idx = min_output_idx[0];\n feedback.strm1_out_idx = min_output_idx[1];\n feedback.strm2_out_idx = min_output_idx[2];\n feedback.strm3_out_idx = min_output_idx[3];\n feedback.strm4_out_idx = min_output_idx[4];\n for (int i = 0; i < ((5) - 1); ++i) {\n fdbk_stream_0[i].try_write(feedback);\n fdbk_stream_1[i].try_write(feedback);\n fdbk_stream_2[i].try_write(feedback);\n fdbk_stream_3[i].try_write(feedback);\n fdbk_stream_4[i].try_write(feedback);\n fdbk_stream_5[i].try_write(feedback);\n fdbk_stream_6[i].try_write(feedback);\n fdbk_stream_7[i].try_write(feedback);\n }\n }\n}\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", + "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell\nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n){\n\n\n\n#pragma HLS disaggregate variable = arb_stream_in\n#pragma HLS array_partition variable = arb_stream_in complete\n#pragma HLS interface ap_fifo port = arb_stream_in[0]._\n#pragma HLS aggregate variable = arb_stream_in[0]._ bit\n#pragma HLS interface ap_fifo port = arb_stream_in[0]._peek\n#pragma HLS aggregate variable = arb_stream_in[0]._peek bit\nvoid(arb_stream_in[0]._.empty());\nvoid(arb_stream_in[0]._peek.empty());\n#pragma HLS interface ap_fifo port = arb_stream_in[1]._\n#pragma HLS aggregate variable = arb_stream_in[1]._ bit\n#pragma HLS interface ap_fifo port = arb_stream_in[1]._peek\n#pragma HLS aggregate variable = arb_stream_in[1]._peek bit\nvoid(arb_stream_in[1]._.empty());\nvoid(arb_stream_in[1]._peek.empty());\n#pragma HLS interface ap_fifo port = arb_stream_in[2]._\n#pragma HLS aggregate variable = arb_stream_in[2]._ bit\n#pragma HLS interface ap_fifo port = arb_stream_in[2]._peek\n#pragma HLS aggregate variable = arb_stream_in[2]._peek bit\nvoid(arb_stream_in[2]._.empty());\nvoid(arb_stream_in[2]._peek.empty());\n#pragma HLS interface ap_fifo port = arb_stream_in[3]._\n#pragma HLS aggregate variable = arb_stream_in[3]._ bit\n#pragma HLS interface ap_fifo port = arb_stream_in[3]._peek\n#pragma HLS aggregate variable = arb_stream_in[3]._peek bit\nvoid(arb_stream_in[3]._.empty());\nvoid(arb_stream_in[3]._peek.empty());\n#pragma HLS interface ap_fifo port = arb_stream_in[4]._\n#pragma HLS aggregate variable = arb_stream_in[4]._ bit\n#pragma HLS interface ap_fifo port = arb_stream_in[4]._peek\n#pragma HLS aggregate variable = arb_stream_in[4]._peek bit\nvoid(arb_stream_in[4]._.empty());\nvoid(arb_stream_in[4]._peek.empty());\n#pragma HLS interface ap_fifo port = arb_stream_in[5]._\n#pragma HLS aggregate variable = arb_stream_in[5]._ bit\n#pragma HLS interface ap_fifo port = arb_stream_in[5]._peek\n#pragma HLS aggregate variable = arb_stream_in[5]._peek bit\nvoid(arb_stream_in[5]._.empty());\nvoid(arb_stream_in[5]._peek.empty());\n#pragma HLS interface ap_fifo port = arb_stream_in[6]._\n#pragma HLS aggregate variable = arb_stream_in[6]._ bit\n#pragma HLS interface ap_fifo port = arb_stream_in[6]._peek\n#pragma HLS aggregate variable = arb_stream_in[6]._peek bit\nvoid(arb_stream_in[6]._.empty());\nvoid(arb_stream_in[6]._peek.empty());\n#pragma HLS interface ap_fifo port = arb_stream_in[7]._\n#pragma HLS aggregate variable = arb_stream_in[7]._ bit\n#pragma HLS interface ap_fifo port = arb_stream_in[7]._peek\n#pragma HLS aggregate variable = arb_stream_in[7]._peek bit\nvoid(arb_stream_in[7]._.empty());\nvoid(arb_stream_in[7]._peek.empty());\n\n#pragma HLS disaggregate variable = arb_stream_out\n#pragma HLS array_partition variable = arb_stream_out complete\n#pragma HLS interface ap_fifo port = arb_stream_out[0]._\n#pragma HLS aggregate variable = arb_stream_out[0]._ bit\nvoid(arb_stream_out[0]._.full());\n#pragma HLS interface ap_fifo port = arb_stream_out[1]._\n#pragma HLS aggregate variable = arb_stream_out[1]._ bit\nvoid(arb_stream_out[1]._.full());\n#pragma HLS interface ap_fifo port = arb_stream_out[2]._\n#pragma HLS aggregate variable = arb_stream_out[2]._ bit\nvoid(arb_stream_out[2]._.full());\n#pragma HLS interface ap_fifo port = arb_stream_out[3]._\n#pragma HLS aggregate variable = arb_stream_out[3]._ bit\nvoid(arb_stream_out[3]._.full());\n#pragma HLS interface ap_fifo port = arb_stream_out[4]._\n#pragma HLS aggregate variable = arb_stream_out[4]._ bit\nvoid(arb_stream_out[4]._.full());\n#pragma HLS interface ap_fifo port = arb_stream_out[5]._\n#pragma HLS aggregate variable = arb_stream_out[5]._ bit\nvoid(arb_stream_out[5]._.full());\n#pragma HLS interface ap_fifo port = arb_stream_out[6]._\n#pragma HLS aggregate variable = arb_stream_out[6]._ bit\nvoid(arb_stream_out[6]._.full());\n#pragma HLS interface ap_fifo port = arb_stream_out[7]._\n#pragma HLS aggregate variable = arb_stream_out[7]._ bit\nvoid(arb_stream_out[7]._.full());\n\n#pragma HLS disaggregate variable = fdbk_stream_0\n#pragma HLS array_partition variable = fdbk_stream_0 complete\n#pragma HLS interface ap_fifo port = fdbk_stream_0[0]._\n#pragma HLS aggregate variable = fdbk_stream_0[0]._ bit\nvoid(fdbk_stream_0[0]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_0[1]._\n#pragma HLS aggregate variable = fdbk_stream_0[1]._ bit\nvoid(fdbk_stream_0[1]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_0[2]._\n#pragma HLS aggregate variable = fdbk_stream_0[2]._ bit\nvoid(fdbk_stream_0[2]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_0[3]._\n#pragma HLS aggregate variable = fdbk_stream_0[3]._ bit\nvoid(fdbk_stream_0[3]._.full());\n\n#pragma HLS disaggregate variable = fdbk_stream_1\n#pragma HLS array_partition variable = fdbk_stream_1 complete\n#pragma HLS interface ap_fifo port = fdbk_stream_1[0]._\n#pragma HLS aggregate variable = fdbk_stream_1[0]._ bit\nvoid(fdbk_stream_1[0]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_1[1]._\n#pragma HLS aggregate variable = fdbk_stream_1[1]._ bit\nvoid(fdbk_stream_1[1]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_1[2]._\n#pragma HLS aggregate variable = fdbk_stream_1[2]._ bit\nvoid(fdbk_stream_1[2]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_1[3]._\n#pragma HLS aggregate variable = fdbk_stream_1[3]._ bit\nvoid(fdbk_stream_1[3]._.full());\n\n#pragma HLS disaggregate variable = fdbk_stream_2\n#pragma HLS array_partition variable = fdbk_stream_2 complete\n#pragma HLS interface ap_fifo port = fdbk_stream_2[0]._\n#pragma HLS aggregate variable = fdbk_stream_2[0]._ bit\nvoid(fdbk_stream_2[0]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_2[1]._\n#pragma HLS aggregate variable = fdbk_stream_2[1]._ bit\nvoid(fdbk_stream_2[1]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_2[2]._\n#pragma HLS aggregate variable = fdbk_stream_2[2]._ bit\nvoid(fdbk_stream_2[2]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_2[3]._\n#pragma HLS aggregate variable = fdbk_stream_2[3]._ bit\nvoid(fdbk_stream_2[3]._.full());\n\n#pragma HLS disaggregate variable = fdbk_stream_3\n#pragma HLS array_partition variable = fdbk_stream_3 complete\n#pragma HLS interface ap_fifo port = fdbk_stream_3[0]._\n#pragma HLS aggregate variable = fdbk_stream_3[0]._ bit\nvoid(fdbk_stream_3[0]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_3[1]._\n#pragma HLS aggregate variable = fdbk_stream_3[1]._ bit\nvoid(fdbk_stream_3[1]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_3[2]._\n#pragma HLS aggregate variable = fdbk_stream_3[2]._ bit\nvoid(fdbk_stream_3[2]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_3[3]._\n#pragma HLS aggregate variable = fdbk_stream_3[3]._ bit\nvoid(fdbk_stream_3[3]._.full());\n\n#pragma HLS disaggregate variable = fdbk_stream_4\n#pragma HLS array_partition variable = fdbk_stream_4 complete\n#pragma HLS interface ap_fifo port = fdbk_stream_4[0]._\n#pragma HLS aggregate variable = fdbk_stream_4[0]._ bit\nvoid(fdbk_stream_4[0]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_4[1]._\n#pragma HLS aggregate variable = fdbk_stream_4[1]._ bit\nvoid(fdbk_stream_4[1]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_4[2]._\n#pragma HLS aggregate variable = fdbk_stream_4[2]._ bit\nvoid(fdbk_stream_4[2]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_4[3]._\n#pragma HLS aggregate variable = fdbk_stream_4[3]._ bit\nvoid(fdbk_stream_4[3]._.full());\n\n#pragma HLS disaggregate variable = fdbk_stream_5\n#pragma HLS array_partition variable = fdbk_stream_5 complete\n#pragma HLS interface ap_fifo port = fdbk_stream_5[0]._\n#pragma HLS aggregate variable = fdbk_stream_5[0]._ bit\nvoid(fdbk_stream_5[0]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_5[1]._\n#pragma HLS aggregate variable = fdbk_stream_5[1]._ bit\nvoid(fdbk_stream_5[1]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_5[2]._\n#pragma HLS aggregate variable = fdbk_stream_5[2]._ bit\nvoid(fdbk_stream_5[2]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_5[3]._\n#pragma HLS aggregate variable = fdbk_stream_5[3]._ bit\nvoid(fdbk_stream_5[3]._.full());\n\n#pragma HLS disaggregate variable = fdbk_stream_6\n#pragma HLS array_partition variable = fdbk_stream_6 complete\n#pragma HLS interface ap_fifo port = fdbk_stream_6[0]._\n#pragma HLS aggregate variable = fdbk_stream_6[0]._ bit\nvoid(fdbk_stream_6[0]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_6[1]._\n#pragma HLS aggregate variable = fdbk_stream_6[1]._ bit\nvoid(fdbk_stream_6[1]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_6[2]._\n#pragma HLS aggregate variable = fdbk_stream_6[2]._ bit\nvoid(fdbk_stream_6[2]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_6[3]._\n#pragma HLS aggregate variable = fdbk_stream_6[3]._ bit\nvoid(fdbk_stream_6[3]._.full());\n\n#pragma HLS disaggregate variable = fdbk_stream_7\n#pragma HLS array_partition variable = fdbk_stream_7 complete\n#pragma HLS interface ap_fifo port = fdbk_stream_7[0]._\n#pragma HLS aggregate variable = fdbk_stream_7[0]._ bit\nvoid(fdbk_stream_7[0]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_7[1]._\n#pragma HLS aggregate variable = fdbk_stream_7[1]._ bit\nvoid(fdbk_stream_7[1]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_7[2]._\n#pragma HLS aggregate variable = fdbk_stream_7[2]._ bit\nvoid(fdbk_stream_7[2]._.full());\n#pragma HLS interface ap_fifo port = fdbk_stream_7[3]._\n#pragma HLS aggregate variable = fdbk_stream_7[3]._ bit\nvoid(fdbk_stream_7[3]._.full());\n\n int WRITE_STOP_COUNT = 0;\n /* Depending on which level this ratemon is in,\n * it expects a different number of writes.\n */\n WRITE_STOP_COUNT = (5) * KEYPAIRS_PER_STM;\n int writes_per_partition[(8) /* each sub bv is further partitioned into this chunks*/] = {};\n int CRASH_COMPILATION_IF_MISTAKE;\n typedef struct {\n ap_uint valid;\n PACKED_HASH_DTYPE value;\n } XBAR_DTYPE;\n typedef enum {\n WR_FEEDBACK,\n WR_OUTPUT\n } RATEMON_MODE;\n XBAR_DTYPE xbar[(8) /* each sub bv is further partitioned into this chunks*/];\n#pragma HLS ARRAY_PARTITION variable=xbar dim=0 complete\n ap_uint min_output_idx[(5)];\n#pragma HLS ARRAY_PARTITION variable=min_output_idx dim=0 complete\n ap_uint idx_tracker[(5)][(8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/];\n#pragma HLS ARRAY_PARTITION variable=idx_tracker dim=0 complete\n INIT_LOOP:\n for (int i = 0; i < (8) /* each sub bv is further partitioned into this chunks*/; ++i) {\n xbar[i].valid = 0;\n writes_per_partition[i] = 0;\n }\n INIT_LOOP_2:\n for (int i = 0; i < (5); ++i) {\n min_output_idx[i] = 0;\n for (int j = 0; j < (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; ++j) {\n idx_tracker[i][j] = 0;\n }\n }\n MAIN_LOOP:\n while (\n writes_per_partition[0] +\n writes_per_partition[1] +\n writes_per_partition[2] +\n writes_per_partition[3] +\n writes_per_partition[4] +\n writes_per_partition[5] +\n writes_per_partition[6] +\n writes_per_partition[7]\n < WRITE_STOP_COUNT)\n {\n#pragma HLS PIPELINE II=1\n RATEMON_FEEDBACK_DTYPE feedback;\n RD_INPUTS:\n for (int partition_idx = 0; partition_idx < (8) /* each sub bv is further partitioned into this chunks*/; ++partition_idx) {\n ap_uint cur_input_idx;\n ap_uint cur_strm_idx;\n METADATA_DTYPE cur_metadata;\n if (xbar[partition_idx].valid == 0 &&\n !arb_stream_in[partition_idx].empty()\n ){\n xbar[partition_idx].valid = 1;\n xbar[partition_idx].value = arb_stream_in[partition_idx].read();\n }\n }\n ///////////////////////\n // WR_OUTPUTS:\n ///////////////////////\n for (int sidx = 0; sidx < (5); ++sidx) { int offset = (xbar[0].value.md.iidx) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (xbar[0].valid && xbar[0].value.md.sidx == sidx && !arb_stream_out[0].full()) { xbar[0].valid = 0; arb_stream_out[0].write(xbar[0].value); idx_tracker[sidx][offset] = 1; writes_per_partition[0]++; break; } }\n for (int sidx = 0; sidx < (5); ++sidx) { int offset = (xbar[1].value.md.iidx) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (xbar[1].valid && xbar[1].value.md.sidx == sidx && !arb_stream_out[1].full()) { xbar[1].valid = 0; arb_stream_out[1].write(xbar[1].value); idx_tracker[sidx][offset] = 1; writes_per_partition[1]++; break; } }\n for (int sidx = 0; sidx < (5); ++sidx) { int offset = (xbar[2].value.md.iidx) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (xbar[2].valid && xbar[2].value.md.sidx == sidx && !arb_stream_out[2].full()) { xbar[2].valid = 0; arb_stream_out[2].write(xbar[2].value); idx_tracker[sidx][offset] = 1; writes_per_partition[2]++; break; } }\n for (int sidx = 0; sidx < (5); ++sidx) { int offset = (xbar[3].value.md.iidx) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (xbar[3].valid && xbar[3].value.md.sidx == sidx && !arb_stream_out[3].full()) { xbar[3].valid = 0; arb_stream_out[3].write(xbar[3].value); idx_tracker[sidx][offset] = 1; writes_per_partition[3]++; break; } }\n for (int sidx = 0; sidx < (5); ++sidx) { int offset = (xbar[4].value.md.iidx) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (xbar[4].valid && xbar[4].value.md.sidx == sidx && !arb_stream_out[4].full()) { xbar[4].valid = 0; arb_stream_out[4].write(xbar[4].value); idx_tracker[sidx][offset] = 1; writes_per_partition[4]++; break; } }\n for (int sidx = 0; sidx < (5); ++sidx) { int offset = (xbar[5].value.md.iidx) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (xbar[5].valid && xbar[5].value.md.sidx == sidx && !arb_stream_out[5].full()) { xbar[5].valid = 0; arb_stream_out[5].write(xbar[5].value); idx_tracker[sidx][offset] = 1; writes_per_partition[5]++; break; } }\n for (int sidx = 0; sidx < (5); ++sidx) { int offset = (xbar[6].value.md.iidx) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (xbar[6].valid && xbar[6].value.md.sidx == sidx && !arb_stream_out[6].full()) { xbar[6].valid = 0; arb_stream_out[6].write(xbar[6].value); idx_tracker[sidx][offset] = 1; writes_per_partition[6]++; break; } }\n for (int sidx = 0; sidx < (5); ++sidx) { int offset = (xbar[7].value.md.iidx) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (xbar[7].valid && xbar[7].value.md.sidx == sidx && !arb_stream_out[7].full()) { xbar[7].valid = 0; arb_stream_out[7].write(xbar[7].value); idx_tracker[sidx][offset] = 1; writes_per_partition[7]++; break; } }\n ///////////////////////\n // UPDATE_IDCES:\n ///////////////////////\n int shuf_idx0 = (min_output_idx[0] + 1) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (idx_tracker[0][shuf_idx0] == 1) { min_output_idx[0] += 1; idx_tracker[0][shuf_idx0] = 0; } /*#ifdef __DO_DEBUG_PRINTS__ //printf(\"ARBITER RATEMON %d %c kp%d - Updating min_output_idx[%d]=%d\\n\", // arb_idx, // ratemon_ID, // kp_idx, // STM, // min_output_idx[STM].to_int() //); //#endif \n*/ int shuf_idx1 = (min_output_idx[1] + 1) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (idx_tracker[1][shuf_idx1] == 1) { min_output_idx[1] += 1; idx_tracker[1][shuf_idx1] = 0; } /*#ifdef __DO_DEBUG_PRINTS__ //printf(\"ARBITER RATEMON %d %c kp%d - Updating min_output_idx[%d]=%d\\n\", // arb_idx, // ratemon_ID, // kp_idx, // STM, // min_output_idx[STM].to_int() //); //#endif \n*/ int shuf_idx2 = (min_output_idx[2] + 1) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (idx_tracker[2][shuf_idx2] == 1) { min_output_idx[2] += 1; idx_tracker[2][shuf_idx2] = 0; } /*#ifdef __DO_DEBUG_PRINTS__ //printf(\"ARBITER RATEMON %d %c kp%d - Updating min_output_idx[%d]=%d\\n\", // arb_idx, // ratemon_ID, // kp_idx, // STM, // min_output_idx[STM].to_int() //); //#endif \n*/ int shuf_idx3 = (min_output_idx[3] + 1) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (idx_tracker[3][shuf_idx3] == 1) { min_output_idx[3] += 1; idx_tracker[3][shuf_idx3] = 0; } /*#ifdef __DO_DEBUG_PRINTS__ //printf(\"ARBITER RATEMON %d %c kp%d - Updating min_output_idx[%d]=%d\\n\", // arb_idx, // ratemon_ID, // kp_idx, // STM, // min_output_idx[STM].to_int() //); //#endif \n*/ int shuf_idx4 = (min_output_idx[4] + 1) % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (idx_tracker[4][shuf_idx4] == 1) { min_output_idx[4] += 1; idx_tracker[4][shuf_idx4] = 0; } /*#ifdef __DO_DEBUG_PRINTS__ //printf(\"ARBITER RATEMON %d %c kp%d - Updating min_output_idx[%d]=%d\\n\", // arb_idx, // ratemon_ID, // kp_idx, // STM, // min_output_idx[STM].to_int() //); //#endif \n*/\n WRITE_FEEDBACK:\n /* For the ratemonitors NOT in the last level, we dont\n * have the data from all 4 streams. So dont attempt to ratelimit\n * based on data we cant get.\n */\n feedback.strm0_out_idx = min_output_idx[0];\n feedback.strm1_out_idx = min_output_idx[1];\n feedback.strm2_out_idx = min_output_idx[2];\n feedback.strm3_out_idx = min_output_idx[3];\n feedback.strm4_out_idx = min_output_idx[4];\n for (int i = 0; i < ((5) - 1); ++i) {\n fdbk_stream_0[i].try_write(feedback);\n fdbk_stream_1[i].try_write(feedback);\n fdbk_stream_2[i].try_write(feedback);\n fdbk_stream_3[i].try_write(feedback);\n fdbk_stream_4[i].try_write(feedback);\n fdbk_stream_5[i].try_write(feedback);\n fdbk_stream_6[i].try_write(feedback);\n fdbk_stream_7[i].try_write(feedback);\n }\n }\n}\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", "level": "lower", "target": "hls", "vendor": "xilinx" }, "bloom_hier_arbiter_atom": { - "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell \nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n){\n\n\n\n\n#pragma HLS disaggregate variable = ratemon_stream\n#pragma HLS interface ap_fifo port = ratemon_stream._\n#pragma HLS aggregate variable = ratemon_stream._ bit\n#pragma HLS interface ap_fifo port = ratemon_stream._peek\n#pragma HLS aggregate variable = ratemon_stream._peek bit\nvoid(ratemon_stream._.empty());\nvoid(ratemon_stream._peek.empty());\n\n#pragma HLS disaggregate variable = in_stream0\n#pragma HLS interface ap_fifo port = in_stream0._\n#pragma HLS aggregate variable = in_stream0._ bit\n#pragma HLS interface ap_fifo port = in_stream0._peek\n#pragma HLS aggregate variable = in_stream0._peek bit\nvoid(in_stream0._.empty());\nvoid(in_stream0._peek.empty());\n\n#pragma HLS disaggregate variable = in_stream1\n#pragma HLS interface ap_fifo port = in_stream1._\n#pragma HLS aggregate variable = in_stream1._ bit\n#pragma HLS interface ap_fifo port = in_stream1._peek\n#pragma HLS aggregate variable = in_stream1._peek bit\nvoid(in_stream1._.empty());\nvoid(in_stream1._peek.empty());\n\n#pragma HLS disaggregate variable = out_stream\n#pragma HLS interface ap_fifo port = out_stream._\n#pragma HLS aggregate variable = out_stream._ bit\nvoid(out_stream._.full());\n\n typedef struct {\n ap_uint<1> valid;\n PACKED_HASH_DTYPE value;\n } XBAR_DTYPE;\n XBAR_DTYPE xbar[2];\n#pragma HLS ARRAY_PARTITION variable=xbar dim=0 complete\n RATEMON_FEEDBACK_DTYPE feedback;\n ap_uint min_output_idx_s0 = 0;\n ap_uint min_output_idx_s1 = 0;\n ap_uint min_output_idx_s2 = 0;\n ap_uint min_output_idx_s3 = 0;\n ap_uint min_output_idx_s4 = 0;\n /* Initialize for SW_EMU... but will this guaranteed work for HW builds?\n * It might not be needed for HW builds because each xbar entry should just\n * be invalidated anyways, after writing.\n */\n INIT_LOOP:\n for (int i = 0; i < 2; ++i) {\n xbar[i].valid = 0;\n }\n MAIN_LOOP:\n while (1) {\n#pragma HLS PIPELINE II=1\n RATEMON_LOGIC:\n if (!ratemon_stream.empty()) {\n feedback = ratemon_stream.read();\n // Manually unroll the min_output_idx logic, to reduce latency within the atoms.\n // With only one variable this takes one more cycle.\n min_output_idx_s0 = feedback.strm0_out_idx;\n min_output_idx_s1 = feedback.strm1_out_idx;\n min_output_idx_s2 = feedback.strm2_out_idx;\n min_output_idx_s3 = feedback.strm3_out_idx;\n min_output_idx_s4 = feedback.strm4_out_idx;\n }\n RD_LOGIC:\n if (xbar[0].valid == 1) {\n // Dont overwrite it\n }\n else if (!in_stream0.empty()) {\n PACKED_HASH_DTYPE packed_val = in_stream0.read();\n xbar[0].value = packed_val;\n xbar[0].valid = 1;\n }\n if (xbar[1].valid == 1) {\n // Dont overwrite it\n }\n else if (!in_stream1.empty()) {\n PACKED_HASH_DTYPE packed_val = in_stream1.read();\n xbar[1].value = packed_val;\n xbar[1].valid = 1;\n }\n WR_LOGIC:\n int valid_idxes = 0;\n int allowed_idx_s0 = min_output_idx_s0 + ((8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/);\n int allowed_idx_s1 = min_output_idx_s1 + ((8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/);\n int allowed_idx_s2 = min_output_idx_s2 + ((8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/);\n int allowed_idx_s3 = min_output_idx_s3 + ((8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/);\n int allowed_idx_s4 = min_output_idx_s4 + ((8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/);\n if (xbar[0].valid &&\n xbar[0].value.md.iidx <= allowed_idx_s0 &&\n xbar[0].value.md.iidx <= allowed_idx_s1 &&\n xbar[0].value.md.iidx <= allowed_idx_s2 &&\n xbar[0].value.md.iidx <= allowed_idx_s3 &&\n xbar[0].value.md.iidx <= allowed_idx_s4\n ) { valid_idxes += 1; }\n if (xbar[1].valid &&\n xbar[1].value.md.iidx <= allowed_idx_s0 &&\n xbar[1].value.md.iidx <= allowed_idx_s1 &&\n xbar[1].value.md.iidx <= allowed_idx_s2 &&\n xbar[1].value.md.iidx <= allowed_idx_s3 &&\n xbar[1].value.md.iidx <= allowed_idx_s4\n ) { valid_idxes += 2; }\n if (valid_idxes == 3) {\n if (xbar[1].value.md.iidx <= xbar[0].value.md.iidx) {\n if (out_stream.try_write(xbar[1].value)) {\n xbar[1].valid = 0;\n }\n }\n else {\n if (out_stream.try_write(xbar[0].value)) {\n xbar[0].valid = 0;\n }\n }\n }\n else if (valid_idxes == 2) {\n if (out_stream.try_write(xbar[1].value)) {\n xbar[1].valid = 0;\n }\n }\n else if (valid_idxes == 1) {\n if (out_stream.try_write(xbar[0].value)) {\n xbar[0].valid = 0;\n }\n }\n }\n}\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", + "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell\nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n){\n\n\n\n\n#pragma HLS disaggregate variable = ratemon_stream\n#pragma HLS interface ap_fifo port = ratemon_stream._\n#pragma HLS aggregate variable = ratemon_stream._ bit\n#pragma HLS interface ap_fifo port = ratemon_stream._peek\n#pragma HLS aggregate variable = ratemon_stream._peek bit\nvoid(ratemon_stream._.empty());\nvoid(ratemon_stream._peek.empty());\n\n#pragma HLS disaggregate variable = in_stream0\n#pragma HLS interface ap_fifo port = in_stream0._\n#pragma HLS aggregate variable = in_stream0._ bit\n#pragma HLS interface ap_fifo port = in_stream0._peek\n#pragma HLS aggregate variable = in_stream0._peek bit\nvoid(in_stream0._.empty());\nvoid(in_stream0._peek.empty());\n\n#pragma HLS disaggregate variable = in_stream1\n#pragma HLS interface ap_fifo port = in_stream1._\n#pragma HLS aggregate variable = in_stream1._ bit\n#pragma HLS interface ap_fifo port = in_stream1._peek\n#pragma HLS aggregate variable = in_stream1._peek bit\nvoid(in_stream1._.empty());\nvoid(in_stream1._peek.empty());\n\n#pragma HLS disaggregate variable = out_stream\n#pragma HLS interface ap_fifo port = out_stream._\n#pragma HLS aggregate variable = out_stream._ bit\nvoid(out_stream._.full());\n\n typedef struct {\n ap_uint<1> valid;\n PACKED_HASH_DTYPE value;\n } XBAR_DTYPE;\n XBAR_DTYPE xbar[2];\n#pragma HLS ARRAY_PARTITION variable=xbar dim=0 complete\n RATEMON_FEEDBACK_DTYPE feedback;\n ap_uint min_output_idx_s0 = 0;\n ap_uint min_output_idx_s1 = 0;\n ap_uint min_output_idx_s2 = 0;\n ap_uint min_output_idx_s3 = 0;\n ap_uint min_output_idx_s4 = 0;\n /* Initialize for SW_EMU... but will this guaranteed work for HW builds?\n * It might not be needed for HW builds because each xbar entry should just\n * be invalidated anyways, after writing.\n */\n INIT_LOOP:\n for (int i = 0; i < 2; ++i) {\n xbar[i].valid = 0;\n }\n MAIN_LOOP:\n while (1) {\n#pragma HLS PIPELINE II=1\n RATEMON_LOGIC:\n if (!ratemon_stream.empty()) {\n feedback = ratemon_stream.read();\n // Manually unroll the min_output_idx logic, to reduce latency within the atoms.\n // With only one variable this takes one more cycle.\n min_output_idx_s0 = feedback.strm0_out_idx;\n min_output_idx_s1 = feedback.strm1_out_idx;\n min_output_idx_s2 = feedback.strm2_out_idx;\n min_output_idx_s3 = feedback.strm3_out_idx;\n min_output_idx_s4 = feedback.strm4_out_idx;\n }\n RD_LOGIC:\n if (xbar[0].valid == 1) {\n // Dont overwrite it\n }\n else if (!in_stream0.empty()) {\n PACKED_HASH_DTYPE packed_val = in_stream0.read();\n xbar[0].value = packed_val;\n xbar[0].valid = 1;\n }\n if (xbar[1].valid == 1) {\n // Dont overwrite it\n }\n else if (!in_stream1.empty()) {\n PACKED_HASH_DTYPE packed_val = in_stream1.read();\n xbar[1].value = packed_val;\n xbar[1].valid = 1;\n }\n WR_LOGIC:\n int valid_idxes = 0;\n int allowed_idx_s0 = min_output_idx_s0 + ((8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/);\n int allowed_idx_s1 = min_output_idx_s1 + ((8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/);\n int allowed_idx_s2 = min_output_idx_s2 + ((8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/);\n int allowed_idx_s3 = min_output_idx_s3 + ((8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/);\n int allowed_idx_s4 = min_output_idx_s4 + ((8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/);\n if (xbar[0].valid &&\n xbar[0].value.md.iidx <= allowed_idx_s0 &&\n xbar[0].value.md.iidx <= allowed_idx_s1 &&\n xbar[0].value.md.iidx <= allowed_idx_s2 &&\n xbar[0].value.md.iidx <= allowed_idx_s3 &&\n xbar[0].value.md.iidx <= allowed_idx_s4\n ) { valid_idxes += 1; }\n if (xbar[1].valid &&\n xbar[1].value.md.iidx <= allowed_idx_s0 &&\n xbar[1].value.md.iidx <= allowed_idx_s1 &&\n xbar[1].value.md.iidx <= allowed_idx_s2 &&\n xbar[1].value.md.iidx <= allowed_idx_s3 &&\n xbar[1].value.md.iidx <= allowed_idx_s4\n ) { valid_idxes += 2; }\n if (valid_idxes == 3) {\n if (xbar[1].value.md.iidx <= xbar[0].value.md.iidx) {\n if (out_stream.try_write(xbar[1].value)) {\n xbar[1].valid = 0;\n }\n }\n else {\n if (out_stream.try_write(xbar[0].value)) {\n xbar[0].valid = 0;\n }\n }\n }\n else if (valid_idxes == 2) {\n if (out_stream.try_write(xbar[1].value)) {\n xbar[1].valid = 0;\n }\n }\n else if (valid_idxes == 1) {\n if (out_stream.try_write(xbar[0].value)) {\n xbar[0].valid = 0;\n }\n }\n }\n}\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", "level": "lower", "target": "hls", "vendor": "xilinx" }, "computeHash_Computer": { - "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell \nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n){\n\n\n\n#pragma HLS disaggregate variable = key_stream\n#pragma HLS interface ap_fifo port = key_stream._\n#pragma HLS aggregate variable = key_stream._ bit\n#pragma HLS interface ap_fifo port = key_stream._peek\n#pragma HLS aggregate variable = key_stream._peek bit\nvoid(key_stream._.empty());\nvoid(key_stream._peek.empty());\n\n#pragma HLS disaggregate variable = hash_stream\n#pragma HLS interface ap_fifo port = hash_stream._\n#pragma HLS aggregate variable = hash_stream._ bit\nvoid(hash_stream._.full());\n\n int module_idx = stm_idx*(3) + hash_idx;\n const int WRITE_STOP_COUNT = KEYPAIRS_PER_STM;\n int total_num_writes = 0;\n int input_idx = 0;\n MAIN_LOOP:\n while ( total_num_writes < WRITE_STOP_COUNT){\n#pragma HLS PIPELINE II=1\n ap_uint<(32)> key = key_stream.read();\n uint32_t hash = MurmurHash3_x86_32(key, hash_idx);\n hash %= ( (BV_LENGTH-1)/(3) + 1);\n hash_stream.write(hash);\n total_num_writes++;\n }\n}\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", + "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell\nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n){\n\n\n\n#pragma HLS disaggregate variable = key_stream\n#pragma HLS interface ap_fifo port = key_stream._\n#pragma HLS aggregate variable = key_stream._ bit\n#pragma HLS interface ap_fifo port = key_stream._peek\n#pragma HLS aggregate variable = key_stream._peek bit\nvoid(key_stream._.empty());\nvoid(key_stream._peek.empty());\n\n#pragma HLS disaggregate variable = hash_stream\n#pragma HLS interface ap_fifo port = hash_stream._\n#pragma HLS aggregate variable = hash_stream._ bit\nvoid(hash_stream._.full());\n\n int module_idx = stm_idx*(3) + hash_idx;\n const int WRITE_STOP_COUNT = KEYPAIRS_PER_STM;\n int total_num_writes = 0;\n int input_idx = 0;\n MAIN_LOOP:\n while ( total_num_writes < WRITE_STOP_COUNT){\n#pragma HLS PIPELINE II=1\n ap_uint<(32)> key = key_stream.read();\n uint32_t hash = MurmurHash3_x86_32(key, hash_idx);\n hash %= ( (BV_LENGTH-1)/(3) + 1);\n hash_stream.write(hash);\n total_num_writes++;\n }\n}\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", "level": "lower", "target": "hls", "vendor": "xilinx" }, "computeHash_Feeder": { - "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell \nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n){\n\n\n#pragma HLS disaggregate variable = key_in_stream\n#pragma HLS interface ap_fifo port = key_in_stream._\n#pragma HLS aggregate variable = key_in_stream._ bit\n#pragma HLS interface ap_fifo port = key_in_stream._peek\n#pragma HLS aggregate variable = key_in_stream._peek bit\nvoid(key_in_stream._.empty());\nvoid(key_in_stream._peek.empty());\n\n#pragma HLS disaggregate variable = key_out_stream\n#pragma HLS array_partition variable = key_out_stream complete\n#pragma HLS interface ap_fifo port = key_out_stream[0]._\n#pragma HLS aggregate variable = key_out_stream[0]._ bit\nvoid(key_out_stream[0]._.full());\n#pragma HLS interface ap_fifo port = key_out_stream[1]._\n#pragma HLS aggregate variable = key_out_stream[1]._ bit\nvoid(key_out_stream[1]._.full());\n#pragma HLS interface ap_fifo port = key_out_stream[2]._\n#pragma HLS aggregate variable = key_out_stream[2]._ bit\nvoid(key_out_stream[2]._.full());\n\n const int READ_STOP_COUNT = KEYPAIRS_PER_STM;\n const int WRITE_STOP_COUNT = KEYPAIRS_PER_STM*(3);\n int total_num_reads = 0;\n int total_num_writes = 0;\n int input_idx = 0;\n ap_uint<(32)> key;\n bool key_written[(3)];\n#pragma HLS ARRAY_PARTITION variable=key_written dim=0 complete\n INIT_KEY_WRITTEN:\n for (int i = 0; i < (3); ++i) {\n key_written[i] = 1;\n }\n while (total_num_reads < READ_STOP_COUNT ||\n total_num_writes < WRITE_STOP_COUNT\n ) {\n#pragma HLS PIPELINE II=1\n bool do_read = 1;\n HASH_RD_LOOP:\n for(int hash_idx = 0; hash_idx < (3); ++hash_idx){\n if (key_written[hash_idx] == 0) {\n do_read = 0;\n }\n }\n if (do_read &&\n input_idx < KEYPAIRS_PER_STM\n ){\n ///////////////////////////////////\n // READ LOGIC:\n // NOTE: This blocking read is ok because we only have one input stream\n key = key_in_stream.read();\n total_num_reads++;\n input_idx++;\n for (int j = 0; j < (3); ++j) {\n key_written[j] = 0;\n }\n }\n ///////////////////////////////////\n // WRITE LOGIC:\n for (int hash_idx = 0; hash_idx < (3); ++hash_idx) {\n#pragma HLS UNROLL\n if (key_written[hash_idx] == 0) {\n if (key_out_stream[hash_idx].try_write(key)) {\n total_num_writes++;\n key_written[hash_idx] = 1;\n }\n }\n }\n }\n return;\n}\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", + "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell\nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n){\n\n\n#pragma HLS disaggregate variable = key_in_stream\n#pragma HLS interface ap_fifo port = key_in_stream._\n#pragma HLS aggregate variable = key_in_stream._ bit\n#pragma HLS interface ap_fifo port = key_in_stream._peek\n#pragma HLS aggregate variable = key_in_stream._peek bit\nvoid(key_in_stream._.empty());\nvoid(key_in_stream._peek.empty());\n\n#pragma HLS disaggregate variable = key_out_stream\n#pragma HLS array_partition variable = key_out_stream complete\n#pragma HLS interface ap_fifo port = key_out_stream[0]._\n#pragma HLS aggregate variable = key_out_stream[0]._ bit\nvoid(key_out_stream[0]._.full());\n#pragma HLS interface ap_fifo port = key_out_stream[1]._\n#pragma HLS aggregate variable = key_out_stream[1]._ bit\nvoid(key_out_stream[1]._.full());\n#pragma HLS interface ap_fifo port = key_out_stream[2]._\n#pragma HLS aggregate variable = key_out_stream[2]._ bit\nvoid(key_out_stream[2]._.full());\n\n const int READ_STOP_COUNT = KEYPAIRS_PER_STM;\n const int WRITE_STOP_COUNT = KEYPAIRS_PER_STM*(3);\n int total_num_reads = 0;\n int total_num_writes = 0;\n int input_idx = 0;\n ap_uint<(32)> key;\n bool key_written[(3)];\n#pragma HLS ARRAY_PARTITION variable=key_written dim=0 complete\n INIT_KEY_WRITTEN:\n for (int i = 0; i < (3); ++i) {\n key_written[i] = 1;\n }\n while (total_num_reads < READ_STOP_COUNT ||\n total_num_writes < WRITE_STOP_COUNT\n ) {\n#pragma HLS PIPELINE II=1\n bool do_read = 1;\n HASH_RD_LOOP:\n for(int hash_idx = 0; hash_idx < (3); ++hash_idx){\n if (key_written[hash_idx] == 0) {\n do_read = 0;\n }\n }\n if (do_read &&\n input_idx < KEYPAIRS_PER_STM\n ){\n ///////////////////////////////////\n // READ LOGIC:\n // NOTE: This blocking read is ok because we only have one input stream\n key = key_in_stream.read();\n total_num_reads++;\n input_idx++;\n for (int j = 0; j < (3); ++j) {\n key_written[j] = 0;\n }\n }\n ///////////////////////////////////\n // WRITE LOGIC:\n for (int hash_idx = 0; hash_idx < (3); ++hash_idx) {\n#pragma HLS UNROLL\n if (key_written[hash_idx] == 0) {\n if (key_out_stream[hash_idx].try_write(key)) {\n total_num_writes++;\n key_written[hash_idx] = 1;\n }\n }\n }\n }\n return;\n}\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", "level": "lower", "target": "hls", "vendor": "xilinx" }, "loadBV": { - "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell \nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n tapa::async_mmap & input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n){\n#pragma HLS disaggregate variable = input_bv\n#pragma HLS interface ap_fifo port = input_bv.read_addr._\n#pragma HLS aggregate variable = input_bv.read_addr._ bit\n#pragma HLS interface ap_fifo port = input_bv.read_data._\n#pragma HLS aggregate variable = input_bv.read_data._ bit\n#pragma HLS interface ap_fifo port = input_bv.write_addr._\n#pragma HLS aggregate variable = input_bv.write_addr._ bit\n#pragma HLS interface ap_fifo port = input_bv.write_data._\n#pragma HLS aggregate variable = input_bv.write_data._ bit\n#pragma HLS interface ap_fifo port = input_bv.write_resp._\n#pragma HLS aggregate variable = input_bv.write_resp._ bit\n#pragma HLS disaggregate variable = input_bv .read_data\n#pragma HLS interface ap_fifo port = input_bv.read_data._peek\n#pragma HLS aggregate variable = input_bv.read_data._peek bit\n#pragma HLS disaggregate variable = input_bv .write_resp\n#pragma HLS interface ap_fifo port = input_bv.write_resp._peek\n#pragma HLS aggregate variable = input_bv.write_resp._peek bit\nvoid(input_bv.read_addr._.full());\nvoid(input_bv.read_data._.empty());\nvoid(input_bv.read_data._peek.empty());\nvoid(input_bv.write_addr._.full());\nvoid(input_bv.write_data._.full());\nvoid(input_bv.write_resp._.empty());\nvoid(input_bv.write_resp._peek.empty());\n\n#pragma HLS disaggregate variable = bv_load_stream_0\n#pragma HLS interface ap_fifo port = bv_load_stream_0._\n#pragma HLS aggregate variable = bv_load_stream_0._ bit\nvoid(bv_load_stream_0._.full());\n\n#pragma HLS disaggregate variable = bv_load_stream_1\n#pragma HLS interface ap_fifo port = bv_load_stream_1._\n#pragma HLS aggregate variable = bv_load_stream_1._ bit\nvoid(bv_load_stream_1._.full());\n\n#pragma HLS disaggregate variable = bv_load_stream_2\n#pragma HLS interface ap_fifo port = bv_load_stream_2._\n#pragma HLS aggregate variable = bv_load_stream_2._ bit\nvoid(bv_load_stream_2._.full());\n\n int section_idx = 0;\n BV_LOAD_DTYPE cur_bv_val;\n for (int i_req = 0, i_resp = 0;\n i_resp < ( (BV_LENGTH-1)/(BV_PACKED_BITWIDTH * (3)) + 1); )\n {\n#pragma HLS PIPELINE II=1\n if (i_req < ( (BV_LENGTH-1)/(BV_PACKED_BITWIDTH * (3)) + 1) && input_bv.read_addr.try_write(i_req)) {\n ++i_req;\n }\n if (!input_bv.read_data.empty()) {\n cur_bv_val = input_bv.read_data.read(nullptr);\n bv_load_stream_0.write(cur_bv_val.section0);\n bv_load_stream_1.write(cur_bv_val.section1);\n bv_load_stream_2.write(cur_bv_val.section2);\n ++i_resp;\n }\n }\n return;\n}\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", + "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell\nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n tapa::async_mmap & input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n){\n#pragma HLS disaggregate variable = input_bv\n#pragma HLS interface ap_fifo port = input_bv.read_addr._\n#pragma HLS aggregate variable = input_bv.read_addr._ bit\n#pragma HLS interface ap_fifo port = input_bv.read_data._\n#pragma HLS aggregate variable = input_bv.read_data._ bit\n#pragma HLS interface ap_fifo port = input_bv.write_addr._\n#pragma HLS aggregate variable = input_bv.write_addr._ bit\n#pragma HLS interface ap_fifo port = input_bv.write_data._\n#pragma HLS aggregate variable = input_bv.write_data._ bit\n#pragma HLS interface ap_fifo port = input_bv.write_resp._\n#pragma HLS aggregate variable = input_bv.write_resp._ bit\n#pragma HLS disaggregate variable = input_bv .read_data\n#pragma HLS interface ap_fifo port = input_bv.read_data._peek\n#pragma HLS aggregate variable = input_bv.read_data._peek bit\n#pragma HLS disaggregate variable = input_bv .write_resp\n#pragma HLS interface ap_fifo port = input_bv.write_resp._peek\n#pragma HLS aggregate variable = input_bv.write_resp._peek bit\nvoid(input_bv.read_addr._.full());\nvoid(input_bv.read_data._.empty());\nvoid(input_bv.read_data._peek.empty());\nvoid(input_bv.write_addr._.full());\nvoid(input_bv.write_data._.full());\nvoid(input_bv.write_resp._.empty());\nvoid(input_bv.write_resp._peek.empty());\n\n#pragma HLS disaggregate variable = bv_load_stream_0\n#pragma HLS interface ap_fifo port = bv_load_stream_0._\n#pragma HLS aggregate variable = bv_load_stream_0._ bit\nvoid(bv_load_stream_0._.full());\n\n#pragma HLS disaggregate variable = bv_load_stream_1\n#pragma HLS interface ap_fifo port = bv_load_stream_1._\n#pragma HLS aggregate variable = bv_load_stream_1._ bit\nvoid(bv_load_stream_1._.full());\n\n#pragma HLS disaggregate variable = bv_load_stream_2\n#pragma HLS interface ap_fifo port = bv_load_stream_2._\n#pragma HLS aggregate variable = bv_load_stream_2._ bit\nvoid(bv_load_stream_2._.full());\n\n int section_idx = 0;\n BV_LOAD_DTYPE cur_bv_val;\n for (int i_req = 0, i_resp = 0;\n i_resp < ( (BV_LENGTH-1)/(BV_PACKED_BITWIDTH * (3)) + 1); )\n {\n#pragma HLS PIPELINE II=1\n if (i_req < ( (BV_LENGTH-1)/(BV_PACKED_BITWIDTH * (3)) + 1) && input_bv.read_addr.try_write(i_req)) {\n ++i_req;\n }\n if (!input_bv.read_data.empty()) {\n cur_bv_val = input_bv.read_data.read(nullptr);\n bv_load_stream_0.write(cur_bv_val.section0);\n bv_load_stream_1.write(cur_bv_val.section1);\n bv_load_stream_2.write(cur_bv_val.section2);\n ++i_resp;\n }\n }\n return;\n}\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", "level": "lower", "target": "hls", "vendor": "xilinx" }, "loadKey": { - "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell \nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n tapa::async_mmap & key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n){\n#pragma HLS disaggregate variable = key_in\n#pragma HLS interface ap_fifo port = key_in.read_addr._\n#pragma HLS aggregate variable = key_in.read_addr._ bit\n#pragma HLS interface ap_fifo port = key_in.read_data._\n#pragma HLS aggregate variable = key_in.read_data._ bit\n#pragma HLS interface ap_fifo port = key_in.write_addr._\n#pragma HLS aggregate variable = key_in.write_addr._ bit\n#pragma HLS interface ap_fifo port = key_in.write_data._\n#pragma HLS aggregate variable = key_in.write_data._ bit\n#pragma HLS interface ap_fifo port = key_in.write_resp._\n#pragma HLS aggregate variable = key_in.write_resp._ bit\n#pragma HLS disaggregate variable = key_in .read_data\n#pragma HLS interface ap_fifo port = key_in.read_data._peek\n#pragma HLS aggregate variable = key_in.read_data._peek bit\n#pragma HLS disaggregate variable = key_in .write_resp\n#pragma HLS interface ap_fifo port = key_in.write_resp._peek\n#pragma HLS aggregate variable = key_in.write_resp._peek bit\nvoid(key_in.read_addr._.full());\nvoid(key_in.read_data._.empty());\nvoid(key_in.read_data._peek.empty());\nvoid(key_in.write_addr._.full());\nvoid(key_in.write_data._.full());\nvoid(key_in.write_resp._.empty());\nvoid(key_in.write_resp._peek.empty());\n\n#pragma HLS disaggregate variable = key_stream_kp0\n#pragma HLS array_partition variable = key_stream_kp0 complete\n#pragma HLS interface ap_fifo port = key_stream_kp0[0]._\n#pragma HLS aggregate variable = key_stream_kp0[0]._ bit\nvoid(key_stream_kp0[0]._.full());\n#pragma HLS interface ap_fifo port = key_stream_kp0[1]._\n#pragma HLS aggregate variable = key_stream_kp0[1]._ bit\nvoid(key_stream_kp0[1]._.full());\n#pragma HLS interface ap_fifo port = key_stream_kp0[2]._\n#pragma HLS aggregate variable = key_stream_kp0[2]._ bit\nvoid(key_stream_kp0[2]._.full());\n#pragma HLS interface ap_fifo port = key_stream_kp0[3]._\n#pragma HLS aggregate variable = key_stream_kp0[3]._ bit\nvoid(key_stream_kp0[3]._.full());\n#pragma HLS interface ap_fifo port = key_stream_kp0[4]._\n#pragma HLS aggregate variable = key_stream_kp0[4]._ bit\nvoid(key_stream_kp0[4]._.full());\n\n#pragma HLS disaggregate variable = key_stream_kp1\n#pragma HLS array_partition variable = key_stream_kp1 complete\n#pragma HLS interface ap_fifo port = key_stream_kp1[0]._\n#pragma HLS aggregate variable = key_stream_kp1[0]._ bit\nvoid(key_stream_kp1[0]._.full());\n#pragma HLS interface ap_fifo port = key_stream_kp1[1]._\n#pragma HLS aggregate variable = key_stream_kp1[1]._ bit\nvoid(key_stream_kp1[1]._.full());\n#pragma HLS interface ap_fifo port = key_stream_kp1[2]._\n#pragma HLS aggregate variable = key_stream_kp1[2]._ bit\nvoid(key_stream_kp1[2]._.full());\n#pragma HLS interface ap_fifo port = key_stream_kp1[3]._\n#pragma HLS aggregate variable = key_stream_kp1[3]._ bit\nvoid(key_stream_kp1[3]._.full());\n#pragma HLS interface ap_fifo port = key_stream_kp1[4]._\n#pragma HLS aggregate variable = key_stream_kp1[4]._ bit\nvoid(key_stream_kp1[4]._.full());\n\n LOAD_DTYPE cur_load;\n for (int i_req = 0, i_resp = 0;\n i_resp < KEYPAIRS_PER_STM; )\n {\n#pragma HLS PIPELINE II=1\n if (i_req < KEYPAIRS_PER_STM && key_in.read_addr.try_write(i_req)) {\n ++i_req;\n }\n if (!key_in.read_data.empty()) {\n cur_load = key_in.read_data.read(nullptr);\n key_stream_kp0[0].write(cur_load.s0_k0); key_stream_kp1[0].write(cur_load.s0_k1);\n key_stream_kp0[1].write(cur_load.s1_k0); key_stream_kp1[1].write(cur_load.s1_k1);\n key_stream_kp0[2].write(cur_load.s2_k0); key_stream_kp1[2].write(cur_load.s2_k1);\n key_stream_kp0[3].write(cur_load.s3_k0); key_stream_kp1[3].write(cur_load.s3_k1);\n key_stream_kp0[4].write(cur_load.s4_k0); key_stream_kp1[4].write(cur_load.s4_k1);\n ++i_resp;\n }\n }\n return;\n}\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", + "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell\nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n tapa::async_mmap & key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n){\n#pragma HLS disaggregate variable = key_in\n#pragma HLS interface ap_fifo port = key_in.read_addr._\n#pragma HLS aggregate variable = key_in.read_addr._ bit\n#pragma HLS interface ap_fifo port = key_in.read_data._\n#pragma HLS aggregate variable = key_in.read_data._ bit\n#pragma HLS interface ap_fifo port = key_in.write_addr._\n#pragma HLS aggregate variable = key_in.write_addr._ bit\n#pragma HLS interface ap_fifo port = key_in.write_data._\n#pragma HLS aggregate variable = key_in.write_data._ bit\n#pragma HLS interface ap_fifo port = key_in.write_resp._\n#pragma HLS aggregate variable = key_in.write_resp._ bit\n#pragma HLS disaggregate variable = key_in .read_data\n#pragma HLS interface ap_fifo port = key_in.read_data._peek\n#pragma HLS aggregate variable = key_in.read_data._peek bit\n#pragma HLS disaggregate variable = key_in .write_resp\n#pragma HLS interface ap_fifo port = key_in.write_resp._peek\n#pragma HLS aggregate variable = key_in.write_resp._peek bit\nvoid(key_in.read_addr._.full());\nvoid(key_in.read_data._.empty());\nvoid(key_in.read_data._peek.empty());\nvoid(key_in.write_addr._.full());\nvoid(key_in.write_data._.full());\nvoid(key_in.write_resp._.empty());\nvoid(key_in.write_resp._peek.empty());\n\n#pragma HLS disaggregate variable = key_stream_kp0\n#pragma HLS array_partition variable = key_stream_kp0 complete\n#pragma HLS interface ap_fifo port = key_stream_kp0[0]._\n#pragma HLS aggregate variable = key_stream_kp0[0]._ bit\nvoid(key_stream_kp0[0]._.full());\n#pragma HLS interface ap_fifo port = key_stream_kp0[1]._\n#pragma HLS aggregate variable = key_stream_kp0[1]._ bit\nvoid(key_stream_kp0[1]._.full());\n#pragma HLS interface ap_fifo port = key_stream_kp0[2]._\n#pragma HLS aggregate variable = key_stream_kp0[2]._ bit\nvoid(key_stream_kp0[2]._.full());\n#pragma HLS interface ap_fifo port = key_stream_kp0[3]._\n#pragma HLS aggregate variable = key_stream_kp0[3]._ bit\nvoid(key_stream_kp0[3]._.full());\n#pragma HLS interface ap_fifo port = key_stream_kp0[4]._\n#pragma HLS aggregate variable = key_stream_kp0[4]._ bit\nvoid(key_stream_kp0[4]._.full());\n\n#pragma HLS disaggregate variable = key_stream_kp1\n#pragma HLS array_partition variable = key_stream_kp1 complete\n#pragma HLS interface ap_fifo port = key_stream_kp1[0]._\n#pragma HLS aggregate variable = key_stream_kp1[0]._ bit\nvoid(key_stream_kp1[0]._.full());\n#pragma HLS interface ap_fifo port = key_stream_kp1[1]._\n#pragma HLS aggregate variable = key_stream_kp1[1]._ bit\nvoid(key_stream_kp1[1]._.full());\n#pragma HLS interface ap_fifo port = key_stream_kp1[2]._\n#pragma HLS aggregate variable = key_stream_kp1[2]._ bit\nvoid(key_stream_kp1[2]._.full());\n#pragma HLS interface ap_fifo port = key_stream_kp1[3]._\n#pragma HLS aggregate variable = key_stream_kp1[3]._ bit\nvoid(key_stream_kp1[3]._.full());\n#pragma HLS interface ap_fifo port = key_stream_kp1[4]._\n#pragma HLS aggregate variable = key_stream_kp1[4]._ bit\nvoid(key_stream_kp1[4]._.full());\n\n LOAD_DTYPE cur_load;\n for (int i_req = 0, i_resp = 0;\n i_resp < KEYPAIRS_PER_STM; )\n {\n#pragma HLS PIPELINE II=1\n if (i_req < KEYPAIRS_PER_STM && key_in.read_addr.try_write(i_req)) {\n ++i_req;\n }\n if (!key_in.read_data.empty()) {\n cur_load = key_in.read_data.read(nullptr);\n key_stream_kp0[0].write(cur_load.s0_k0); key_stream_kp1[0].write(cur_load.s0_k1);\n key_stream_kp0[1].write(cur_load.s1_k0); key_stream_kp1[1].write(cur_load.s1_k1);\n key_stream_kp0[2].write(cur_load.s2_k0); key_stream_kp1[2].write(cur_load.s2_k1);\n key_stream_kp0[3].write(cur_load.s3_k0); key_stream_kp1[3].write(cur_load.s3_k1);\n key_stream_kp0[4].write(cur_load.s4_k0); key_stream_kp1[4].write(cur_load.s4_k1);\n ++i_resp;\n }\n }\n return;\n}\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", "level": "lower", "target": "hls", "vendor": "xilinx" }, "packOutput": { - "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell \nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) {\n\n\n#pragma HLS disaggregate variable = aggregate_stream\n#pragma HLS interface ap_fifo port = aggregate_stream._\n#pragma HLS aggregate variable = aggregate_stream._ bit\n#pragma HLS interface ap_fifo port = aggregate_stream._peek\n#pragma HLS aggregate variable = aggregate_stream._peek bit\nvoid(aggregate_stream._.empty());\nvoid(aggregate_stream._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream\n#pragma HLS interface ap_fifo port = packed_outputs_stream._\n#pragma HLS aggregate variable = packed_outputs_stream._ bit\nvoid(packed_outputs_stream._.full());\n\n int pk_idx;\n ap_uint<((32))> packed;\n ap_uint val;\n for (int i = 0; i < KEYPAIRS_PER_STM; ++i) {\n pk_idx = i % ((32));\n val = aggregate_stream.read();\n packed.range(pk_idx, pk_idx) = val.range(0, 0);\n if (pk_idx == ((32)) - 1){\n packed_outputs_stream.write(packed);\n packed = 0;\n }\n }\n}\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", + "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell\nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) {\n\n\n#pragma HLS disaggregate variable = aggregate_stream\n#pragma HLS interface ap_fifo port = aggregate_stream._\n#pragma HLS aggregate variable = aggregate_stream._ bit\n#pragma HLS interface ap_fifo port = aggregate_stream._peek\n#pragma HLS aggregate variable = aggregate_stream._peek bit\nvoid(aggregate_stream._.empty());\nvoid(aggregate_stream._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream\n#pragma HLS interface ap_fifo port = packed_outputs_stream._\n#pragma HLS aggregate variable = packed_outputs_stream._ bit\nvoid(packed_outputs_stream._.full());\n\n int pk_idx;\n ap_uint<((32))> packed;\n ap_uint val;\n for (int i = 0; i < KEYPAIRS_PER_STM; ++i) {\n pk_idx = i % ((32));\n val = aggregate_stream.read();\n packed.range(pk_idx, pk_idx) = val.range(0, 0);\n if (pk_idx == ((32)) - 1){\n packed_outputs_stream.write(packed);\n packed = 0;\n }\n }\n}\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", "level": "lower", "target": "hls", "vendor": "xilinx" }, "queryResult_per_hash": { - "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell \nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) {\n\n#pragma HLS disaggregate variable = bv_load_stream\n#pragma HLS interface ap_fifo port = bv_load_stream._\n#pragma HLS aggregate variable = bv_load_stream._ bit\n#pragma HLS interface ap_fifo port = bv_load_stream._peek\n#pragma HLS aggregate variable = bv_load_stream._peek bit\nvoid(bv_load_stream._.empty());\nvoid(bv_load_stream._peek.empty());\n\n#pragma HLS disaggregate variable = bv_lookup_stream_kp0\n#pragma HLS array_partition variable = bv_lookup_stream_kp0 complete\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[0]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[0]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[0]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[0]._peek bit\nvoid(bv_lookup_stream_kp0[0]._.empty());\nvoid(bv_lookup_stream_kp0[0]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[1]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[1]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[1]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[1]._peek bit\nvoid(bv_lookup_stream_kp0[1]._.empty());\nvoid(bv_lookup_stream_kp0[1]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[2]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[2]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[2]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[2]._peek bit\nvoid(bv_lookup_stream_kp0[2]._.empty());\nvoid(bv_lookup_stream_kp0[2]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[3]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[3]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[3]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[3]._peek bit\nvoid(bv_lookup_stream_kp0[3]._.empty());\nvoid(bv_lookup_stream_kp0[3]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[4]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[4]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[4]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[4]._peek bit\nvoid(bv_lookup_stream_kp0[4]._.empty());\nvoid(bv_lookup_stream_kp0[4]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[5]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[5]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[5]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[5]._peek bit\nvoid(bv_lookup_stream_kp0[5]._.empty());\nvoid(bv_lookup_stream_kp0[5]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[6]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[6]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[6]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[6]._peek bit\nvoid(bv_lookup_stream_kp0[6]._.empty());\nvoid(bv_lookup_stream_kp0[6]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[7]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[7]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[7]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[7]._peek bit\nvoid(bv_lookup_stream_kp0[7]._.empty());\nvoid(bv_lookup_stream_kp0[7]._peek.empty());\n\n#pragma HLS disaggregate variable = bv_lookup_stream_kp1\n#pragma HLS array_partition variable = bv_lookup_stream_kp1 complete\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[0]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[0]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[0]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[0]._peek bit\nvoid(bv_lookup_stream_kp1[0]._.empty());\nvoid(bv_lookup_stream_kp1[0]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[1]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[1]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[1]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[1]._peek bit\nvoid(bv_lookup_stream_kp1[1]._.empty());\nvoid(bv_lookup_stream_kp1[1]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[2]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[2]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[2]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[2]._peek bit\nvoid(bv_lookup_stream_kp1[2]._.empty());\nvoid(bv_lookup_stream_kp1[2]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[3]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[3]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[3]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[3]._peek bit\nvoid(bv_lookup_stream_kp1[3]._.empty());\nvoid(bv_lookup_stream_kp1[3]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[4]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[4]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[4]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[4]._peek bit\nvoid(bv_lookup_stream_kp1[4]._.empty());\nvoid(bv_lookup_stream_kp1[4]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[5]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[5]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[5]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[5]._peek bit\nvoid(bv_lookup_stream_kp1[5]._.empty());\nvoid(bv_lookup_stream_kp1[5]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[6]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[6]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[6]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[6]._peek bit\nvoid(bv_lookup_stream_kp1[6]._.empty());\nvoid(bv_lookup_stream_kp1[6]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[7]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[7]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[7]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[7]._peek bit\nvoid(bv_lookup_stream_kp1[7]._.empty());\nvoid(bv_lookup_stream_kp1[7]._peek.empty());\n\n#pragma HLS disaggregate variable = query_bv_packed_stream_kp0\n#pragma HLS array_partition variable = query_bv_packed_stream_kp0 complete\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp0[0]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp0[0]._ bit\nvoid(query_bv_packed_stream_kp0[0]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp0[1]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp0[1]._ bit\nvoid(query_bv_packed_stream_kp0[1]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp0[2]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp0[2]._ bit\nvoid(query_bv_packed_stream_kp0[2]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp0[3]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp0[3]._ bit\nvoid(query_bv_packed_stream_kp0[3]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp0[4]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp0[4]._ bit\nvoid(query_bv_packed_stream_kp0[4]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp0[5]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp0[5]._ bit\nvoid(query_bv_packed_stream_kp0[5]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp0[6]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp0[6]._ bit\nvoid(query_bv_packed_stream_kp0[6]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp0[7]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp0[7]._ bit\nvoid(query_bv_packed_stream_kp0[7]._.full());\n\n#pragma HLS disaggregate variable = query_bv_packed_stream_kp1\n#pragma HLS array_partition variable = query_bv_packed_stream_kp1 complete\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp1[0]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp1[0]._ bit\nvoid(query_bv_packed_stream_kp1[0]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp1[1]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp1[1]._ bit\nvoid(query_bv_packed_stream_kp1[1]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp1[2]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp1[2]._ bit\nvoid(query_bv_packed_stream_kp1[2]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp1[3]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp1[3]._ bit\nvoid(query_bv_packed_stream_kp1[3]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp1[4]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp1[4]._ bit\nvoid(query_bv_packed_stream_kp1[4]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp1[5]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp1[5]._ bit\nvoid(query_bv_packed_stream_kp1[5]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp1[6]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp1[6]._ bit\nvoid(query_bv_packed_stream_kp1[6]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp1[7]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp1[7]._ bit\nvoid(query_bv_packed_stream_kp1[7]._.full());\n\n const int MAX_NUM_WRITES = (5)*KEYS_PER_STM;\n int num_writes = 0;\n int num_reads = 0;\n ap_uint bv_buf_BRAMS[( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)][( (BV_LENGTH-1)/((3)*BV_PACKED_BITWIDTH*(8) /* each sub bv is further partitioned into this chunks*/) + 1)];\n#pragma HLS BIND_STORAGE variable=bv_buf_BRAMS type=RAM_T2P impl=bram\n#pragma HLS ARRAY_PARTITION variable=bv_buf_BRAMS dim=1 complete\n ap_uint bv_buf_URAMS[((8) /* each sub bv is further partitioned into this chunks*/ / 2)][( (BV_LENGTH-1)/((3)*BV_PACKED_BITWIDTH*(8) /* each sub bv is further partitioned into this chunks*/) + 1)];\n#pragma HLS BIND_STORAGE variable=bv_buf_URAMS type=RAM_T2P impl=uram\n#pragma HLS ARRAY_PARTITION variable=bv_buf_URAMS dim=1 complete\n ap_uint cur_bv_val;\n typedef struct {\n ap_uint<1> valid;\n BV_PLUS_METADATA_PACKED_DTYPE data;\n } TO_WRITE_DTYPE;\n TO_WRITE_DTYPE bram_queried_vals_buf[( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)][2];\n#pragma HLS ARRAY_PARTITION variable=bram_queried_vals_buf dim=0 complete\n TO_WRITE_DTYPE uram_queried_vals_buf[((8) /* each sub bv is further partitioned into this chunks*/ / 2)][2];\n#pragma HLS ARRAY_PARTITION variable=uram_queried_vals_buf dim=0 complete\n INIT_BRAM_QUERIED_VALS_BUF:\n for (int j = 0; j < ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1); ++j) {\n#pragma HLS UNROLL\n bram_queried_vals_buf[j][0].valid=0;\n bram_queried_vals_buf[j][1].valid=0;\n }\n INIT_URAM_QUERIED_VALS_BUF:\n for (int j = 0; j < ((8) /* each sub bv is further partitioned into this chunks*/ / 2); ++j) {\n#pragma HLS UNROLL\n uram_queried_vals_buf[j][0].valid=0;\n uram_queried_vals_buf[j][1].valid=0;\n }\n LOAD_BV_VALUES:\n for (int i = 0; i < ( (BV_LENGTH-1)/((3)*BV_PACKED_BITWIDTH) + 1); ++i) {\n#pragma HLS PIPELINE II=1\n cur_bv_val = bv_load_stream.read();\n int partition_idx = i/( (BV_LENGTH-1)/((3)*BV_PACKED_BITWIDTH*(8) /* each sub bv is further partitioned into this chunks*/) + 1);\n int element_idx = i%( (BV_LENGTH-1)/((3)*BV_PACKED_BITWIDTH*(8) /* each sub bv is further partitioned into this chunks*/) + 1);\n if (partition_idx < ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)) {\n bv_buf_BRAMS[partition_idx][element_idx] = cur_bv_val;\n }\n else {\n bv_buf_URAMS[partition_idx-( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)][element_idx] = cur_bv_val;\n }\n }\n PROCESS_QUERIES:\n while (num_writes < MAX_NUM_WRITES){\n#pragma HLS PIPELINE II=1\n BV_BRAM_PARTITION_LOOP:\n for (int bram_partition_idx = 0; bram_partition_idx < ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1); ++bram_partition_idx) {\n#pragma HLS UNROLL\n //////////////////////////////////////////////////////////\n // READ LOGIC\n // READ PORT 0\n if (!bv_lookup_stream_kp0[bram_partition_idx].empty() &&\n !bram_queried_vals_buf[bram_partition_idx][0].valid)\n {\n PACKED_HASH_DTYPE packed_hash;\n METADATA_DTYPE cur_metadata;\n ap_uint bv_lookup_idx;\n ap_uint cur_bv_val;\n BV_PLUS_METADATA_PACKED_DTYPE data_to_write;\n ap_uint bv_outer_idx;\n ap_uint bv_inner_idx;\n packed_hash = bv_lookup_stream_kp0[bram_partition_idx].read();\n // Unpack the values\n cur_metadata = packed_hash.md;\n bv_lookup_idx = packed_hash.hash;\n // Read the bitvector\n bv_outer_idx = bv_lookup_idx/BV_PACKED_BITWIDTH;\n bv_inner_idx = bv_lookup_idx%BV_PACKED_BITWIDTH;\n cur_bv_val.range(0, 0) =\n bv_buf_BRAMS[bram_partition_idx][bv_outer_idx].range(bv_inner_idx, bv_inner_idx);\n // Pack final payload\n data_to_write.md = cur_metadata;\n data_to_write.bv_val = cur_bv_val;\n bram_queried_vals_buf[bram_partition_idx][0].valid = 1;\n bram_queried_vals_buf[bram_partition_idx][0].data = data_to_write;\n }\n // READ PORT 1\n if (!bv_lookup_stream_kp1[bram_partition_idx].empty() &&\n !bram_queried_vals_buf[bram_partition_idx][1].valid)\n {\n PACKED_HASH_DTYPE packed_hash;\n METADATA_DTYPE cur_metadata;\n ap_uint bv_lookup_idx;\n ap_uint cur_bv_val;\n BV_PLUS_METADATA_PACKED_DTYPE data_to_write;\n ap_uint bv_outer_idx;\n ap_uint bv_inner_idx;\n packed_hash = bv_lookup_stream_kp1[bram_partition_idx].read();\n // Unpack the values\n cur_metadata = packed_hash.md;\n bv_lookup_idx = packed_hash.hash;\n // Read the bitvector\n bv_outer_idx = bv_lookup_idx/BV_PACKED_BITWIDTH;\n bv_inner_idx = bv_lookup_idx%BV_PACKED_BITWIDTH;\n cur_bv_val.range(0, 0) =\n bv_buf_BRAMS[bram_partition_idx][bv_outer_idx].range(bv_inner_idx, bv_inner_idx);\n // Pack final payload\n data_to_write.md = cur_metadata;\n data_to_write.bv_val = cur_bv_val;\n bram_queried_vals_buf[bram_partition_idx][1].valid = 1;\n bram_queried_vals_buf[bram_partition_idx][1].data = data_to_write;\n }\n //////////////////////////////////////////////////////////\n // WRITE LOGIC\n // WRITE PORT 0\n if (bram_queried_vals_buf[bram_partition_idx][0].valid &&\n query_bv_packed_stream_kp0[bram_partition_idx].try_write(\n bram_queried_vals_buf[bram_partition_idx][0].data\n )\n ) {\n ++num_writes;\n bram_queried_vals_buf[bram_partition_idx][0].valid = 0;\n }\n // WRITE PORT 1\n if (bram_queried_vals_buf[bram_partition_idx][1].valid &&\n query_bv_packed_stream_kp1[bram_partition_idx].try_write(\n bram_queried_vals_buf[bram_partition_idx][1].data\n )\n ) {\n ++num_writes;\n bram_queried_vals_buf[bram_partition_idx][1].valid = 0;\n }\n }\n BV_URAM_PARTITION_LOOP:\n for (int uram_partition_idx = 0; uram_partition_idx < ((8) /* each sub bv is further partitioned into this chunks*/ / 2); ++uram_partition_idx) {\n#pragma HLS UNROLL\n //////////////////////////////////////////////////////////\n // READ LOGIC\n // READ PORT 0\n if (!bv_lookup_stream_kp0[uram_partition_idx + ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)].empty() &&\n !uram_queried_vals_buf[uram_partition_idx][0].valid)\n {\n PACKED_HASH_DTYPE packed_hash;\n METADATA_DTYPE cur_metadata;\n ap_uint bv_lookup_idx;\n ap_uint cur_bv_val;\n BV_PLUS_METADATA_PACKED_DTYPE data_to_write;\n ap_uint bv_outer_idx;\n ap_uint bv_inner_idx;\n packed_hash = bv_lookup_stream_kp0[uram_partition_idx + ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)].read();\n // Unpack the values\n cur_metadata = packed_hash.md;\n bv_lookup_idx = packed_hash.hash;\n // Read the bitvector\n bv_outer_idx = bv_lookup_idx/BV_PACKED_BITWIDTH;\n bv_inner_idx = bv_lookup_idx%BV_PACKED_BITWIDTH;\n cur_bv_val.range(0, 0) =\n bv_buf_URAMS[uram_partition_idx][bv_outer_idx].range(bv_inner_idx, bv_inner_idx);\n // Pack final payload\n data_to_write.md = cur_metadata;\n data_to_write.bv_val = cur_bv_val;\n uram_queried_vals_buf[uram_partition_idx][0].valid = 1;\n uram_queried_vals_buf[uram_partition_idx][0].data = data_to_write;\n }\n // READ PORT 1\n if (!bv_lookup_stream_kp1[uram_partition_idx + ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)].empty() &&\n !uram_queried_vals_buf[uram_partition_idx][1].valid)\n {\n PACKED_HASH_DTYPE packed_hash;\n METADATA_DTYPE cur_metadata;\n ap_uint bv_lookup_idx;\n ap_uint cur_bv_val;\n BV_PLUS_METADATA_PACKED_DTYPE data_to_write;\n ap_uint bv_outer_idx;\n ap_uint bv_inner_idx;\n packed_hash = bv_lookup_stream_kp1[uram_partition_idx + ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)].read();\n // Unpack the values\n cur_metadata = packed_hash.md;\n bv_lookup_idx = packed_hash.hash;\n // Read the bitvector\n bv_outer_idx = bv_lookup_idx/BV_PACKED_BITWIDTH;\n bv_inner_idx = bv_lookup_idx%BV_PACKED_BITWIDTH;\n cur_bv_val.range(0, 0) =\n bv_buf_URAMS[uram_partition_idx][bv_outer_idx].range(bv_inner_idx, bv_inner_idx);\n // Pack final payload\n data_to_write.md = cur_metadata;\n data_to_write.bv_val = cur_bv_val;\n uram_queried_vals_buf[uram_partition_idx][1].valid = 1;\n uram_queried_vals_buf[uram_partition_idx][1].data = data_to_write;\n }\n //////////////////////////////////////////////////////////\n // WRITE LOGIC\n // WRITE PORT 0\n if (uram_queried_vals_buf[uram_partition_idx][0].valid &&\n query_bv_packed_stream_kp0[uram_partition_idx + ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)].try_write(\n uram_queried_vals_buf[uram_partition_idx][0].data\n )\n ) {\n ++num_writes;\n uram_queried_vals_buf[uram_partition_idx][0].valid = 0;\n }\n // WRITE PORT 1\n if (uram_queried_vals_buf[uram_partition_idx][1].valid &&\n query_bv_packed_stream_kp1[uram_partition_idx + ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)].try_write(\n uram_queried_vals_buf[uram_partition_idx][1].data\n )\n ) {\n ++num_writes;\n uram_queried_vals_buf[uram_partition_idx][1].valid = 0;\n }\n }\n }\n return;\n}\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", + "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell\nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) {\n\n#pragma HLS disaggregate variable = bv_load_stream\n#pragma HLS interface ap_fifo port = bv_load_stream._\n#pragma HLS aggregate variable = bv_load_stream._ bit\n#pragma HLS interface ap_fifo port = bv_load_stream._peek\n#pragma HLS aggregate variable = bv_load_stream._peek bit\nvoid(bv_load_stream._.empty());\nvoid(bv_load_stream._peek.empty());\n\n#pragma HLS disaggregate variable = bv_lookup_stream_kp0\n#pragma HLS array_partition variable = bv_lookup_stream_kp0 complete\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[0]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[0]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[0]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[0]._peek bit\nvoid(bv_lookup_stream_kp0[0]._.empty());\nvoid(bv_lookup_stream_kp0[0]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[1]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[1]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[1]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[1]._peek bit\nvoid(bv_lookup_stream_kp0[1]._.empty());\nvoid(bv_lookup_stream_kp0[1]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[2]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[2]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[2]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[2]._peek bit\nvoid(bv_lookup_stream_kp0[2]._.empty());\nvoid(bv_lookup_stream_kp0[2]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[3]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[3]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[3]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[3]._peek bit\nvoid(bv_lookup_stream_kp0[3]._.empty());\nvoid(bv_lookup_stream_kp0[3]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[4]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[4]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[4]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[4]._peek bit\nvoid(bv_lookup_stream_kp0[4]._.empty());\nvoid(bv_lookup_stream_kp0[4]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[5]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[5]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[5]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[5]._peek bit\nvoid(bv_lookup_stream_kp0[5]._.empty());\nvoid(bv_lookup_stream_kp0[5]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[6]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[6]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[6]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[6]._peek bit\nvoid(bv_lookup_stream_kp0[6]._.empty());\nvoid(bv_lookup_stream_kp0[6]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[7]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[7]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp0[7]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp0[7]._peek bit\nvoid(bv_lookup_stream_kp0[7]._.empty());\nvoid(bv_lookup_stream_kp0[7]._peek.empty());\n\n#pragma HLS disaggregate variable = bv_lookup_stream_kp1\n#pragma HLS array_partition variable = bv_lookup_stream_kp1 complete\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[0]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[0]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[0]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[0]._peek bit\nvoid(bv_lookup_stream_kp1[0]._.empty());\nvoid(bv_lookup_stream_kp1[0]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[1]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[1]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[1]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[1]._peek bit\nvoid(bv_lookup_stream_kp1[1]._.empty());\nvoid(bv_lookup_stream_kp1[1]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[2]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[2]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[2]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[2]._peek bit\nvoid(bv_lookup_stream_kp1[2]._.empty());\nvoid(bv_lookup_stream_kp1[2]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[3]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[3]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[3]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[3]._peek bit\nvoid(bv_lookup_stream_kp1[3]._.empty());\nvoid(bv_lookup_stream_kp1[3]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[4]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[4]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[4]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[4]._peek bit\nvoid(bv_lookup_stream_kp1[4]._.empty());\nvoid(bv_lookup_stream_kp1[4]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[5]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[5]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[5]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[5]._peek bit\nvoid(bv_lookup_stream_kp1[5]._.empty());\nvoid(bv_lookup_stream_kp1[5]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[6]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[6]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[6]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[6]._peek bit\nvoid(bv_lookup_stream_kp1[6]._.empty());\nvoid(bv_lookup_stream_kp1[6]._peek.empty());\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[7]._\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[7]._ bit\n#pragma HLS interface ap_fifo port = bv_lookup_stream_kp1[7]._peek\n#pragma HLS aggregate variable = bv_lookup_stream_kp1[7]._peek bit\nvoid(bv_lookup_stream_kp1[7]._.empty());\nvoid(bv_lookup_stream_kp1[7]._peek.empty());\n\n#pragma HLS disaggregate variable = query_bv_packed_stream_kp0\n#pragma HLS array_partition variable = query_bv_packed_stream_kp0 complete\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp0[0]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp0[0]._ bit\nvoid(query_bv_packed_stream_kp0[0]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp0[1]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp0[1]._ bit\nvoid(query_bv_packed_stream_kp0[1]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp0[2]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp0[2]._ bit\nvoid(query_bv_packed_stream_kp0[2]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp0[3]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp0[3]._ bit\nvoid(query_bv_packed_stream_kp0[3]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp0[4]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp0[4]._ bit\nvoid(query_bv_packed_stream_kp0[4]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp0[5]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp0[5]._ bit\nvoid(query_bv_packed_stream_kp0[5]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp0[6]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp0[6]._ bit\nvoid(query_bv_packed_stream_kp0[6]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp0[7]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp0[7]._ bit\nvoid(query_bv_packed_stream_kp0[7]._.full());\n\n#pragma HLS disaggregate variable = query_bv_packed_stream_kp1\n#pragma HLS array_partition variable = query_bv_packed_stream_kp1 complete\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp1[0]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp1[0]._ bit\nvoid(query_bv_packed_stream_kp1[0]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp1[1]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp1[1]._ bit\nvoid(query_bv_packed_stream_kp1[1]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp1[2]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp1[2]._ bit\nvoid(query_bv_packed_stream_kp1[2]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp1[3]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp1[3]._ bit\nvoid(query_bv_packed_stream_kp1[3]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp1[4]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp1[4]._ bit\nvoid(query_bv_packed_stream_kp1[4]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp1[5]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp1[5]._ bit\nvoid(query_bv_packed_stream_kp1[5]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp1[6]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp1[6]._ bit\nvoid(query_bv_packed_stream_kp1[6]._.full());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream_kp1[7]._\n#pragma HLS aggregate variable = query_bv_packed_stream_kp1[7]._ bit\nvoid(query_bv_packed_stream_kp1[7]._.full());\n\n const int MAX_NUM_WRITES = (5)*KEYS_PER_STM;\n int num_writes = 0;\n int num_reads = 0;\n ap_uint bv_buf_BRAMS[( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)][( (BV_LENGTH-1)/((3)*BV_PACKED_BITWIDTH*(8) /* each sub bv is further partitioned into this chunks*/) + 1)];\n#pragma HLS BIND_STORAGE variable=bv_buf_BRAMS type=RAM_T2P impl=bram\n#pragma HLS ARRAY_PARTITION variable=bv_buf_BRAMS dim=1 complete\n ap_uint bv_buf_URAMS[((8) /* each sub bv is further partitioned into this chunks*/ / 2)][( (BV_LENGTH-1)/((3)*BV_PACKED_BITWIDTH*(8) /* each sub bv is further partitioned into this chunks*/) + 1)];\n#pragma HLS BIND_STORAGE variable=bv_buf_URAMS type=RAM_T2P impl=uram\n#pragma HLS ARRAY_PARTITION variable=bv_buf_URAMS dim=1 complete\n ap_uint cur_bv_val;\n typedef struct {\n ap_uint<1> valid;\n BV_PLUS_METADATA_PACKED_DTYPE data;\n } TO_WRITE_DTYPE;\n TO_WRITE_DTYPE bram_queried_vals_buf[( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)][2];\n#pragma HLS ARRAY_PARTITION variable=bram_queried_vals_buf dim=0 complete\n TO_WRITE_DTYPE uram_queried_vals_buf[((8) /* each sub bv is further partitioned into this chunks*/ / 2)][2];\n#pragma HLS ARRAY_PARTITION variable=uram_queried_vals_buf dim=0 complete\n INIT_BRAM_QUERIED_VALS_BUF:\n for (int j = 0; j < ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1); ++j) {\n#pragma HLS UNROLL\n bram_queried_vals_buf[j][0].valid=0;\n bram_queried_vals_buf[j][1].valid=0;\n }\n INIT_URAM_QUERIED_VALS_BUF:\n for (int j = 0; j < ((8) /* each sub bv is further partitioned into this chunks*/ / 2); ++j) {\n#pragma HLS UNROLL\n uram_queried_vals_buf[j][0].valid=0;\n uram_queried_vals_buf[j][1].valid=0;\n }\n LOAD_BV_VALUES:\n for (int i = 0; i < ( (BV_LENGTH-1)/((3)*BV_PACKED_BITWIDTH) + 1); ++i) {\n#pragma HLS PIPELINE II=1\n cur_bv_val = bv_load_stream.read();\n int partition_idx = i/( (BV_LENGTH-1)/((3)*BV_PACKED_BITWIDTH*(8) /* each sub bv is further partitioned into this chunks*/) + 1);\n int element_idx = i%( (BV_LENGTH-1)/((3)*BV_PACKED_BITWIDTH*(8) /* each sub bv is further partitioned into this chunks*/) + 1);\n if (partition_idx < ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)) {\n bv_buf_BRAMS[partition_idx][element_idx] = cur_bv_val;\n }\n else {\n bv_buf_URAMS[partition_idx-( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)][element_idx] = cur_bv_val;\n }\n }\n PROCESS_QUERIES:\n while (num_writes < MAX_NUM_WRITES){\n#pragma HLS PIPELINE II=1\n BV_BRAM_PARTITION_LOOP:\n for (int bram_partition_idx = 0; bram_partition_idx < ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1); ++bram_partition_idx) {\n#pragma HLS UNROLL\n //////////////////////////////////////////////////////////\n // READ LOGIC\n // READ PORT 0\n if (!bv_lookup_stream_kp0[bram_partition_idx].empty() &&\n !bram_queried_vals_buf[bram_partition_idx][0].valid)\n {\n PACKED_HASH_DTYPE packed_hash;\n METADATA_DTYPE cur_metadata;\n ap_uint bv_lookup_idx;\n ap_uint cur_bv_val;\n BV_PLUS_METADATA_PACKED_DTYPE data_to_write;\n ap_uint bv_outer_idx;\n ap_uint bv_inner_idx;\n packed_hash = bv_lookup_stream_kp0[bram_partition_idx].read();\n // Unpack the values\n cur_metadata = packed_hash.md;\n bv_lookup_idx = packed_hash.hash;\n // Read the bitvector\n bv_outer_idx = bv_lookup_idx/BV_PACKED_BITWIDTH;\n bv_inner_idx = bv_lookup_idx%BV_PACKED_BITWIDTH;\n cur_bv_val.range(0, 0) =\n bv_buf_BRAMS[bram_partition_idx][bv_outer_idx].range(bv_inner_idx, bv_inner_idx);\n // Pack final payload\n data_to_write.md = cur_metadata;\n data_to_write.bv_val = cur_bv_val;\n bram_queried_vals_buf[bram_partition_idx][0].valid = 1;\n bram_queried_vals_buf[bram_partition_idx][0].data = data_to_write;\n }\n // READ PORT 1\n if (!bv_lookup_stream_kp1[bram_partition_idx].empty() &&\n !bram_queried_vals_buf[bram_partition_idx][1].valid)\n {\n PACKED_HASH_DTYPE packed_hash;\n METADATA_DTYPE cur_metadata;\n ap_uint bv_lookup_idx;\n ap_uint cur_bv_val;\n BV_PLUS_METADATA_PACKED_DTYPE data_to_write;\n ap_uint bv_outer_idx;\n ap_uint bv_inner_idx;\n packed_hash = bv_lookup_stream_kp1[bram_partition_idx].read();\n // Unpack the values\n cur_metadata = packed_hash.md;\n bv_lookup_idx = packed_hash.hash;\n // Read the bitvector\n bv_outer_idx = bv_lookup_idx/BV_PACKED_BITWIDTH;\n bv_inner_idx = bv_lookup_idx%BV_PACKED_BITWIDTH;\n cur_bv_val.range(0, 0) =\n bv_buf_BRAMS[bram_partition_idx][bv_outer_idx].range(bv_inner_idx, bv_inner_idx);\n // Pack final payload\n data_to_write.md = cur_metadata;\n data_to_write.bv_val = cur_bv_val;\n bram_queried_vals_buf[bram_partition_idx][1].valid = 1;\n bram_queried_vals_buf[bram_partition_idx][1].data = data_to_write;\n }\n //////////////////////////////////////////////////////////\n // WRITE LOGIC\n // WRITE PORT 0\n if (bram_queried_vals_buf[bram_partition_idx][0].valid &&\n query_bv_packed_stream_kp0[bram_partition_idx].try_write(\n bram_queried_vals_buf[bram_partition_idx][0].data\n )\n ) {\n ++num_writes;\n bram_queried_vals_buf[bram_partition_idx][0].valid = 0;\n }\n // WRITE PORT 1\n if (bram_queried_vals_buf[bram_partition_idx][1].valid &&\n query_bv_packed_stream_kp1[bram_partition_idx].try_write(\n bram_queried_vals_buf[bram_partition_idx][1].data\n )\n ) {\n ++num_writes;\n bram_queried_vals_buf[bram_partition_idx][1].valid = 0;\n }\n }\n BV_URAM_PARTITION_LOOP:\n for (int uram_partition_idx = 0; uram_partition_idx < ((8) /* each sub bv is further partitioned into this chunks*/ / 2); ++uram_partition_idx) {\n#pragma HLS UNROLL\n //////////////////////////////////////////////////////////\n // READ LOGIC\n // READ PORT 0\n if (!bv_lookup_stream_kp0[uram_partition_idx + ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)].empty() &&\n !uram_queried_vals_buf[uram_partition_idx][0].valid)\n {\n PACKED_HASH_DTYPE packed_hash;\n METADATA_DTYPE cur_metadata;\n ap_uint bv_lookup_idx;\n ap_uint cur_bv_val;\n BV_PLUS_METADATA_PACKED_DTYPE data_to_write;\n ap_uint bv_outer_idx;\n ap_uint bv_inner_idx;\n packed_hash = bv_lookup_stream_kp0[uram_partition_idx + ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)].read();\n // Unpack the values\n cur_metadata = packed_hash.md;\n bv_lookup_idx = packed_hash.hash;\n // Read the bitvector\n bv_outer_idx = bv_lookup_idx/BV_PACKED_BITWIDTH;\n bv_inner_idx = bv_lookup_idx%BV_PACKED_BITWIDTH;\n cur_bv_val.range(0, 0) =\n bv_buf_URAMS[uram_partition_idx][bv_outer_idx].range(bv_inner_idx, bv_inner_idx);\n // Pack final payload\n data_to_write.md = cur_metadata;\n data_to_write.bv_val = cur_bv_val;\n uram_queried_vals_buf[uram_partition_idx][0].valid = 1;\n uram_queried_vals_buf[uram_partition_idx][0].data = data_to_write;\n }\n // READ PORT 1\n if (!bv_lookup_stream_kp1[uram_partition_idx + ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)].empty() &&\n !uram_queried_vals_buf[uram_partition_idx][1].valid)\n {\n PACKED_HASH_DTYPE packed_hash;\n METADATA_DTYPE cur_metadata;\n ap_uint bv_lookup_idx;\n ap_uint cur_bv_val;\n BV_PLUS_METADATA_PACKED_DTYPE data_to_write;\n ap_uint bv_outer_idx;\n ap_uint bv_inner_idx;\n packed_hash = bv_lookup_stream_kp1[uram_partition_idx + ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)].read();\n // Unpack the values\n cur_metadata = packed_hash.md;\n bv_lookup_idx = packed_hash.hash;\n // Read the bitvector\n bv_outer_idx = bv_lookup_idx/BV_PACKED_BITWIDTH;\n bv_inner_idx = bv_lookup_idx%BV_PACKED_BITWIDTH;\n cur_bv_val.range(0, 0) =\n bv_buf_URAMS[uram_partition_idx][bv_outer_idx].range(bv_inner_idx, bv_inner_idx);\n // Pack final payload\n data_to_write.md = cur_metadata;\n data_to_write.bv_val = cur_bv_val;\n uram_queried_vals_buf[uram_partition_idx][1].valid = 1;\n uram_queried_vals_buf[uram_partition_idx][1].data = data_to_write;\n }\n //////////////////////////////////////////////////////////\n // WRITE LOGIC\n // WRITE PORT 0\n if (uram_queried_vals_buf[uram_partition_idx][0].valid &&\n query_bv_packed_stream_kp0[uram_partition_idx + ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)].try_write(\n uram_queried_vals_buf[uram_partition_idx][0].data\n )\n ) {\n ++num_writes;\n uram_queried_vals_buf[uram_partition_idx][0].valid = 0;\n }\n // WRITE PORT 1\n if (uram_queried_vals_buf[uram_partition_idx][1].valid &&\n query_bv_packed_stream_kp1[uram_partition_idx + ( ((8) /* each sub bv is further partitioned into this chunks*/-1)/2 + 1)].try_write(\n uram_queried_vals_buf[uram_partition_idx][1].data\n )\n ) {\n ++num_writes;\n uram_queried_vals_buf[uram_partition_idx][1].valid = 0;\n }\n }\n }\n return;\n}\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", "level": "lower", "target": "hls", "vendor": "xilinx" }, "shuffle_TtoS_per_hash": { - "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell \nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n){\n\n\n#pragma HLS disaggregate variable = query_bv_packed_stream\n#pragma HLS array_partition variable = query_bv_packed_stream complete\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[0]._\n#pragma HLS aggregate variable = query_bv_packed_stream[0]._ bit\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[0]._peek\n#pragma HLS aggregate variable = query_bv_packed_stream[0]._peek bit\nvoid(query_bv_packed_stream[0]._.empty());\nvoid(query_bv_packed_stream[0]._peek.empty());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[1]._\n#pragma HLS aggregate variable = query_bv_packed_stream[1]._ bit\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[1]._peek\n#pragma HLS aggregate variable = query_bv_packed_stream[1]._peek bit\nvoid(query_bv_packed_stream[1]._.empty());\nvoid(query_bv_packed_stream[1]._peek.empty());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[2]._\n#pragma HLS aggregate variable = query_bv_packed_stream[2]._ bit\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[2]._peek\n#pragma HLS aggregate variable = query_bv_packed_stream[2]._peek bit\nvoid(query_bv_packed_stream[2]._.empty());\nvoid(query_bv_packed_stream[2]._peek.empty());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[3]._\n#pragma HLS aggregate variable = query_bv_packed_stream[3]._ bit\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[3]._peek\n#pragma HLS aggregate variable = query_bv_packed_stream[3]._peek bit\nvoid(query_bv_packed_stream[3]._.empty());\nvoid(query_bv_packed_stream[3]._peek.empty());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[4]._\n#pragma HLS aggregate variable = query_bv_packed_stream[4]._ bit\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[4]._peek\n#pragma HLS aggregate variable = query_bv_packed_stream[4]._peek bit\nvoid(query_bv_packed_stream[4]._.empty());\nvoid(query_bv_packed_stream[4]._peek.empty());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[5]._\n#pragma HLS aggregate variable = query_bv_packed_stream[5]._ bit\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[5]._peek\n#pragma HLS aggregate variable = query_bv_packed_stream[5]._peek bit\nvoid(query_bv_packed_stream[5]._.empty());\nvoid(query_bv_packed_stream[5]._peek.empty());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[6]._\n#pragma HLS aggregate variable = query_bv_packed_stream[6]._ bit\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[6]._peek\n#pragma HLS aggregate variable = query_bv_packed_stream[6]._peek bit\nvoid(query_bv_packed_stream[6]._.empty());\nvoid(query_bv_packed_stream[6]._peek.empty());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[7]._\n#pragma HLS aggregate variable = query_bv_packed_stream[7]._ bit\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[7]._peek\n#pragma HLS aggregate variable = query_bv_packed_stream[7]._peek bit\nvoid(query_bv_packed_stream[7]._.empty());\nvoid(query_bv_packed_stream[7]._peek.empty());\n\n#pragma HLS disaggregate variable = inter_shuffle_stream\n#pragma HLS array_partition variable = inter_shuffle_stream complete\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[0]._\n#pragma HLS aggregate variable = inter_shuffle_stream[0]._ bit\nvoid(inter_shuffle_stream[0]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[1]._\n#pragma HLS aggregate variable = inter_shuffle_stream[1]._ bit\nvoid(inter_shuffle_stream[1]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[2]._\n#pragma HLS aggregate variable = inter_shuffle_stream[2]._ bit\nvoid(inter_shuffle_stream[2]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[3]._\n#pragma HLS aggregate variable = inter_shuffle_stream[3]._ bit\nvoid(inter_shuffle_stream[3]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[4]._\n#pragma HLS aggregate variable = inter_shuffle_stream[4]._ bit\nvoid(inter_shuffle_stream[4]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[5]._\n#pragma HLS aggregate variable = inter_shuffle_stream[5]._ bit\nvoid(inter_shuffle_stream[5]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[6]._\n#pragma HLS aggregate variable = inter_shuffle_stream[6]._ bit\nvoid(inter_shuffle_stream[6]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[7]._\n#pragma HLS aggregate variable = inter_shuffle_stream[7]._ bit\nvoid(inter_shuffle_stream[7]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[8]._\n#pragma HLS aggregate variable = inter_shuffle_stream[8]._ bit\nvoid(inter_shuffle_stream[8]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[9]._\n#pragma HLS aggregate variable = inter_shuffle_stream[9]._ bit\nvoid(inter_shuffle_stream[9]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[10]._\n#pragma HLS aggregate variable = inter_shuffle_stream[10]._ bit\nvoid(inter_shuffle_stream[10]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[11]._\n#pragma HLS aggregate variable = inter_shuffle_stream[11]._ bit\nvoid(inter_shuffle_stream[11]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[12]._\n#pragma HLS aggregate variable = inter_shuffle_stream[12]._ bit\nvoid(inter_shuffle_stream[12]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[13]._\n#pragma HLS aggregate variable = inter_shuffle_stream[13]._ bit\nvoid(inter_shuffle_stream[13]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[14]._\n#pragma HLS aggregate variable = inter_shuffle_stream[14]._ bit\nvoid(inter_shuffle_stream[14]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[15]._\n#pragma HLS aggregate variable = inter_shuffle_stream[15]._ bit\nvoid(inter_shuffle_stream[15]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[16]._\n#pragma HLS aggregate variable = inter_shuffle_stream[16]._ bit\nvoid(inter_shuffle_stream[16]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[17]._\n#pragma HLS aggregate variable = inter_shuffle_stream[17]._ bit\nvoid(inter_shuffle_stream[17]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[18]._\n#pragma HLS aggregate variable = inter_shuffle_stream[18]._ bit\nvoid(inter_shuffle_stream[18]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[19]._\n#pragma HLS aggregate variable = inter_shuffle_stream[19]._ bit\nvoid(inter_shuffle_stream[19]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[20]._\n#pragma HLS aggregate variable = inter_shuffle_stream[20]._ bit\nvoid(inter_shuffle_stream[20]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[21]._\n#pragma HLS aggregate variable = inter_shuffle_stream[21]._ bit\nvoid(inter_shuffle_stream[21]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[22]._\n#pragma HLS aggregate variable = inter_shuffle_stream[22]._ bit\nvoid(inter_shuffle_stream[22]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[23]._\n#pragma HLS aggregate variable = inter_shuffle_stream[23]._ bit\nvoid(inter_shuffle_stream[23]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[24]._\n#pragma HLS aggregate variable = inter_shuffle_stream[24]._ bit\nvoid(inter_shuffle_stream[24]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[25]._\n#pragma HLS aggregate variable = inter_shuffle_stream[25]._ bit\nvoid(inter_shuffle_stream[25]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[26]._\n#pragma HLS aggregate variable = inter_shuffle_stream[26]._ bit\nvoid(inter_shuffle_stream[26]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[27]._\n#pragma HLS aggregate variable = inter_shuffle_stream[27]._ bit\nvoid(inter_shuffle_stream[27]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[28]._\n#pragma HLS aggregate variable = inter_shuffle_stream[28]._ bit\nvoid(inter_shuffle_stream[28]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[29]._\n#pragma HLS aggregate variable = inter_shuffle_stream[29]._ bit\nvoid(inter_shuffle_stream[29]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[30]._\n#pragma HLS aggregate variable = inter_shuffle_stream[30]._ bit\nvoid(inter_shuffle_stream[30]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[31]._\n#pragma HLS aggregate variable = inter_shuffle_stream[31]._ bit\nvoid(inter_shuffle_stream[31]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[32]._\n#pragma HLS aggregate variable = inter_shuffle_stream[32]._ bit\nvoid(inter_shuffle_stream[32]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[33]._\n#pragma HLS aggregate variable = inter_shuffle_stream[33]._ bit\nvoid(inter_shuffle_stream[33]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[34]._\n#pragma HLS aggregate variable = inter_shuffle_stream[34]._ bit\nvoid(inter_shuffle_stream[34]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[35]._\n#pragma HLS aggregate variable = inter_shuffle_stream[35]._ bit\nvoid(inter_shuffle_stream[35]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[36]._\n#pragma HLS aggregate variable = inter_shuffle_stream[36]._ bit\nvoid(inter_shuffle_stream[36]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[37]._\n#pragma HLS aggregate variable = inter_shuffle_stream[37]._ bit\nvoid(inter_shuffle_stream[37]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[38]._\n#pragma HLS aggregate variable = inter_shuffle_stream[38]._ bit\nvoid(inter_shuffle_stream[38]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[39]._\n#pragma HLS aggregate variable = inter_shuffle_stream[39]._ bit\nvoid(inter_shuffle_stream[39]._.full());\n\n typedef struct {\n ap_uint BV;\n ap_uint input_idx;\n bool valid;\n } PEEKED_DTYPE;\n //int next_output_idx[NUM_STM];\n //#pragma HLS ARRAY_PARTITION variable=next_output_idx dim=0 complete\n // This is a buffer for data from each partition.\n // We also introduce a NUM_STM dimension, otherwise we hang.\n PEEKED_DTYPE shuffle_peek_emulator[(8) /* each sub bv is further partitioned into this chunks*/][(5)];\n#pragma HLS ARRAY_PARTITION variable=shuffle_peek_emulator dim=0 complete\n //NEXT_OUTPUT_IDX_INIT:\n //for (int i = 0; i < NUM_STM; ++i) {\n //#pragma HLS UNROLL\n // next_output_idx[i] = 1;\n //}\n PEEK_EMULATOR_INITIALIZATION:\n for (int j=0; j<(8) /* each sub bv is further partitioned into this chunks*/; ++j){\n#pragma HLS UNROLL\n for (int k=0; k<(5); ++k) {\n#pragma HLS UNROLL\n shuffle_peek_emulator[j][k].BV = 0;\n shuffle_peek_emulator[j][k].input_idx = 0;\n shuffle_peek_emulator[j][k].valid = 0;\n }\n }\n while(1)\n {\n#pragma HLS PIPELINE II=1\n ////////////////////////////////////////////\n // READ LOGIC. Read from each partition stream\n ////////////////////////////////////////////\n RD_BV_PARTITION_LOOP:\n for (int partition_idx = 0;\n partition_idx < (8) /* each sub bv is further partitioned into this chunks*/;\n ++partition_idx)\n {\n#pragma HLS UNROLL\n // DATAPACKED TRANSFER:\n ap_uint cur_input_idx;\n ap_uint cur_strm_idx;\n ap_uint cur_bv_val;\n METADATA_DTYPE cur_metadata;\n BV_PLUS_METADATA_PACKED_DTYPE cur_packed_data;\n bool peek_success;\n peek_success = query_bv_packed_stream[partition_idx].try_peek(\n cur_packed_data\n );\n cur_metadata = cur_packed_data.md;\n cur_bv_val = cur_packed_data.bv_val;\n // Unpack metadata\n cur_strm_idx = cur_metadata.sidx;\n cur_input_idx = cur_metadata.iidx;\n // If the current \"peeked\" value is not valid, overwrite it\n // with valid data.\n if (peek_success &&\n shuffle_peek_emulator[partition_idx][cur_strm_idx].valid == 0\n )\n {\n query_bv_packed_stream[partition_idx].read();\n // Write it into the buffer\n shuffle_peek_emulator[partition_idx]\n [cur_strm_idx].valid = 1;\n shuffle_peek_emulator[partition_idx]\n [cur_strm_idx].BV = cur_bv_val;\n shuffle_peek_emulator[partition_idx]\n [cur_strm_idx].input_idx = cur_input_idx;\n }\n }\n ////////////////////////////////////////////\n // WRITE OUTPUTS from the shuffle-buffer\n ////////////////////////////////////////////\n WR_STM_LOOP:\n for (int strm_idx = 0; strm_idx < (5); ++strm_idx)\n {\n WR_BV_PARTITION_LOOP:\n for (int partition_idx = 0;\n partition_idx < (8) /* each sub bv is further partitioned into this chunks*/;\n ++partition_idx)\n {\n#pragma HLS UNROLL\n BV_PLUS_IIDX_PACKED_DTYPE outval;\n outval.bv_val = shuffle_peek_emulator[partition_idx][strm_idx].BV;\n outval.iidx = shuffle_peek_emulator[partition_idx][strm_idx].input_idx;\n if (shuffle_peek_emulator[partition_idx][strm_idx].valid == 1 &&\n inter_shuffle_stream[strm_idx*(8) /* each sub bv is further partitioned into this chunks*/ + partition_idx].try_write(outval)\n ) {\n shuffle_peek_emulator[partition_idx][strm_idx].valid = 0;\n }\n }\n }\n }\n return;\n}\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", + "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell\nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n){\n\n\n#pragma HLS disaggregate variable = query_bv_packed_stream\n#pragma HLS array_partition variable = query_bv_packed_stream complete\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[0]._\n#pragma HLS aggregate variable = query_bv_packed_stream[0]._ bit\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[0]._peek\n#pragma HLS aggregate variable = query_bv_packed_stream[0]._peek bit\nvoid(query_bv_packed_stream[0]._.empty());\nvoid(query_bv_packed_stream[0]._peek.empty());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[1]._\n#pragma HLS aggregate variable = query_bv_packed_stream[1]._ bit\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[1]._peek\n#pragma HLS aggregate variable = query_bv_packed_stream[1]._peek bit\nvoid(query_bv_packed_stream[1]._.empty());\nvoid(query_bv_packed_stream[1]._peek.empty());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[2]._\n#pragma HLS aggregate variable = query_bv_packed_stream[2]._ bit\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[2]._peek\n#pragma HLS aggregate variable = query_bv_packed_stream[2]._peek bit\nvoid(query_bv_packed_stream[2]._.empty());\nvoid(query_bv_packed_stream[2]._peek.empty());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[3]._\n#pragma HLS aggregate variable = query_bv_packed_stream[3]._ bit\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[3]._peek\n#pragma HLS aggregate variable = query_bv_packed_stream[3]._peek bit\nvoid(query_bv_packed_stream[3]._.empty());\nvoid(query_bv_packed_stream[3]._peek.empty());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[4]._\n#pragma HLS aggregate variable = query_bv_packed_stream[4]._ bit\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[4]._peek\n#pragma HLS aggregate variable = query_bv_packed_stream[4]._peek bit\nvoid(query_bv_packed_stream[4]._.empty());\nvoid(query_bv_packed_stream[4]._peek.empty());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[5]._\n#pragma HLS aggregate variable = query_bv_packed_stream[5]._ bit\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[5]._peek\n#pragma HLS aggregate variable = query_bv_packed_stream[5]._peek bit\nvoid(query_bv_packed_stream[5]._.empty());\nvoid(query_bv_packed_stream[5]._peek.empty());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[6]._\n#pragma HLS aggregate variable = query_bv_packed_stream[6]._ bit\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[6]._peek\n#pragma HLS aggregate variable = query_bv_packed_stream[6]._peek bit\nvoid(query_bv_packed_stream[6]._.empty());\nvoid(query_bv_packed_stream[6]._peek.empty());\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[7]._\n#pragma HLS aggregate variable = query_bv_packed_stream[7]._ bit\n#pragma HLS interface ap_fifo port = query_bv_packed_stream[7]._peek\n#pragma HLS aggregate variable = query_bv_packed_stream[7]._peek bit\nvoid(query_bv_packed_stream[7]._.empty());\nvoid(query_bv_packed_stream[7]._peek.empty());\n\n#pragma HLS disaggregate variable = inter_shuffle_stream\n#pragma HLS array_partition variable = inter_shuffle_stream complete\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[0]._\n#pragma HLS aggregate variable = inter_shuffle_stream[0]._ bit\nvoid(inter_shuffle_stream[0]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[1]._\n#pragma HLS aggregate variable = inter_shuffle_stream[1]._ bit\nvoid(inter_shuffle_stream[1]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[2]._\n#pragma HLS aggregate variable = inter_shuffle_stream[2]._ bit\nvoid(inter_shuffle_stream[2]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[3]._\n#pragma HLS aggregate variable = inter_shuffle_stream[3]._ bit\nvoid(inter_shuffle_stream[3]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[4]._\n#pragma HLS aggregate variable = inter_shuffle_stream[4]._ bit\nvoid(inter_shuffle_stream[4]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[5]._\n#pragma HLS aggregate variable = inter_shuffle_stream[5]._ bit\nvoid(inter_shuffle_stream[5]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[6]._\n#pragma HLS aggregate variable = inter_shuffle_stream[6]._ bit\nvoid(inter_shuffle_stream[6]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[7]._\n#pragma HLS aggregate variable = inter_shuffle_stream[7]._ bit\nvoid(inter_shuffle_stream[7]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[8]._\n#pragma HLS aggregate variable = inter_shuffle_stream[8]._ bit\nvoid(inter_shuffle_stream[8]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[9]._\n#pragma HLS aggregate variable = inter_shuffle_stream[9]._ bit\nvoid(inter_shuffle_stream[9]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[10]._\n#pragma HLS aggregate variable = inter_shuffle_stream[10]._ bit\nvoid(inter_shuffle_stream[10]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[11]._\n#pragma HLS aggregate variable = inter_shuffle_stream[11]._ bit\nvoid(inter_shuffle_stream[11]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[12]._\n#pragma HLS aggregate variable = inter_shuffle_stream[12]._ bit\nvoid(inter_shuffle_stream[12]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[13]._\n#pragma HLS aggregate variable = inter_shuffle_stream[13]._ bit\nvoid(inter_shuffle_stream[13]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[14]._\n#pragma HLS aggregate variable = inter_shuffle_stream[14]._ bit\nvoid(inter_shuffle_stream[14]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[15]._\n#pragma HLS aggregate variable = inter_shuffle_stream[15]._ bit\nvoid(inter_shuffle_stream[15]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[16]._\n#pragma HLS aggregate variable = inter_shuffle_stream[16]._ bit\nvoid(inter_shuffle_stream[16]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[17]._\n#pragma HLS aggregate variable = inter_shuffle_stream[17]._ bit\nvoid(inter_shuffle_stream[17]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[18]._\n#pragma HLS aggregate variable = inter_shuffle_stream[18]._ bit\nvoid(inter_shuffle_stream[18]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[19]._\n#pragma HLS aggregate variable = inter_shuffle_stream[19]._ bit\nvoid(inter_shuffle_stream[19]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[20]._\n#pragma HLS aggregate variable = inter_shuffle_stream[20]._ bit\nvoid(inter_shuffle_stream[20]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[21]._\n#pragma HLS aggregate variable = inter_shuffle_stream[21]._ bit\nvoid(inter_shuffle_stream[21]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[22]._\n#pragma HLS aggregate variable = inter_shuffle_stream[22]._ bit\nvoid(inter_shuffle_stream[22]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[23]._\n#pragma HLS aggregate variable = inter_shuffle_stream[23]._ bit\nvoid(inter_shuffle_stream[23]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[24]._\n#pragma HLS aggregate variable = inter_shuffle_stream[24]._ bit\nvoid(inter_shuffle_stream[24]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[25]._\n#pragma HLS aggregate variable = inter_shuffle_stream[25]._ bit\nvoid(inter_shuffle_stream[25]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[26]._\n#pragma HLS aggregate variable = inter_shuffle_stream[26]._ bit\nvoid(inter_shuffle_stream[26]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[27]._\n#pragma HLS aggregate variable = inter_shuffle_stream[27]._ bit\nvoid(inter_shuffle_stream[27]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[28]._\n#pragma HLS aggregate variable = inter_shuffle_stream[28]._ bit\nvoid(inter_shuffle_stream[28]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[29]._\n#pragma HLS aggregate variable = inter_shuffle_stream[29]._ bit\nvoid(inter_shuffle_stream[29]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[30]._\n#pragma HLS aggregate variable = inter_shuffle_stream[30]._ bit\nvoid(inter_shuffle_stream[30]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[31]._\n#pragma HLS aggregate variable = inter_shuffle_stream[31]._ bit\nvoid(inter_shuffle_stream[31]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[32]._\n#pragma HLS aggregate variable = inter_shuffle_stream[32]._ bit\nvoid(inter_shuffle_stream[32]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[33]._\n#pragma HLS aggregate variable = inter_shuffle_stream[33]._ bit\nvoid(inter_shuffle_stream[33]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[34]._\n#pragma HLS aggregate variable = inter_shuffle_stream[34]._ bit\nvoid(inter_shuffle_stream[34]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[35]._\n#pragma HLS aggregate variable = inter_shuffle_stream[35]._ bit\nvoid(inter_shuffle_stream[35]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[36]._\n#pragma HLS aggregate variable = inter_shuffle_stream[36]._ bit\nvoid(inter_shuffle_stream[36]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[37]._\n#pragma HLS aggregate variable = inter_shuffle_stream[37]._ bit\nvoid(inter_shuffle_stream[37]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[38]._\n#pragma HLS aggregate variable = inter_shuffle_stream[38]._ bit\nvoid(inter_shuffle_stream[38]._.full());\n#pragma HLS interface ap_fifo port = inter_shuffle_stream[39]._\n#pragma HLS aggregate variable = inter_shuffle_stream[39]._ bit\nvoid(inter_shuffle_stream[39]._.full());\n\n typedef struct {\n ap_uint BV;\n ap_uint input_idx;\n bool valid;\n } PEEKED_DTYPE;\n //int next_output_idx[NUM_STM];\n //#pragma HLS ARRAY_PARTITION variable=next_output_idx dim=0 complete\n // This is a buffer for data from each partition.\n // We also introduce a NUM_STM dimension, otherwise we hang.\n PEEKED_DTYPE shuffle_peek_emulator[(8) /* each sub bv is further partitioned into this chunks*/][(5)];\n#pragma HLS ARRAY_PARTITION variable=shuffle_peek_emulator dim=0 complete\n //NEXT_OUTPUT_IDX_INIT:\n //for (int i = 0; i < NUM_STM; ++i) {\n //#pragma HLS UNROLL\n // next_output_idx[i] = 1;\n //}\n PEEK_EMULATOR_INITIALIZATION:\n for (int j=0; j<(8) /* each sub bv is further partitioned into this chunks*/; ++j){\n#pragma HLS UNROLL\n for (int k=0; k<(5); ++k) {\n#pragma HLS UNROLL\n shuffle_peek_emulator[j][k].BV = 0;\n shuffle_peek_emulator[j][k].input_idx = 0;\n shuffle_peek_emulator[j][k].valid = 0;\n }\n }\n while(1)\n {\n#pragma HLS PIPELINE II=1\n ////////////////////////////////////////////\n // READ LOGIC. Read from each partition stream\n ////////////////////////////////////////////\n RD_BV_PARTITION_LOOP:\n for (int partition_idx = 0;\n partition_idx < (8) /* each sub bv is further partitioned into this chunks*/;\n ++partition_idx)\n {\n#pragma HLS UNROLL\n // DATAPACKED TRANSFER:\n ap_uint cur_input_idx;\n ap_uint cur_strm_idx;\n ap_uint cur_bv_val;\n METADATA_DTYPE cur_metadata;\n BV_PLUS_METADATA_PACKED_DTYPE cur_packed_data;\n bool peek_success;\n peek_success = query_bv_packed_stream[partition_idx].try_peek(\n cur_packed_data\n );\n cur_metadata = cur_packed_data.md;\n cur_bv_val = cur_packed_data.bv_val;\n // Unpack metadata\n cur_strm_idx = cur_metadata.sidx;\n cur_input_idx = cur_metadata.iidx;\n // If the current \"peeked\" value is not valid, overwrite it\n // with valid data.\n if (peek_success &&\n shuffle_peek_emulator[partition_idx][cur_strm_idx].valid == 0\n )\n {\n query_bv_packed_stream[partition_idx].read();\n // Write it into the buffer\n shuffle_peek_emulator[partition_idx]\n [cur_strm_idx].valid = 1;\n shuffle_peek_emulator[partition_idx]\n [cur_strm_idx].BV = cur_bv_val;\n shuffle_peek_emulator[partition_idx]\n [cur_strm_idx].input_idx = cur_input_idx;\n }\n }\n ////////////////////////////////////////////\n // WRITE OUTPUTS from the shuffle-buffer\n ////////////////////////////////////////////\n WR_STM_LOOP:\n for (int strm_idx = 0; strm_idx < (5); ++strm_idx)\n {\n WR_BV_PARTITION_LOOP:\n for (int partition_idx = 0;\n partition_idx < (8) /* each sub bv is further partitioned into this chunks*/;\n ++partition_idx)\n {\n#pragma HLS UNROLL\n BV_PLUS_IIDX_PACKED_DTYPE outval;\n outval.bv_val = shuffle_peek_emulator[partition_idx][strm_idx].BV;\n outval.iidx = shuffle_peek_emulator[partition_idx][strm_idx].input_idx;\n if (shuffle_peek_emulator[partition_idx][strm_idx].valid == 1 &&\n inter_shuffle_stream[strm_idx*(8) /* each sub bv is further partitioned into this chunks*/ + partition_idx].try_write(outval)\n ) {\n shuffle_peek_emulator[partition_idx][strm_idx].valid = 0;\n }\n }\n }\n }\n return;\n}\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", "level": "lower", "target": "hls", "vendor": "xilinx" }, "shuffle_reordering_per_hash": { - "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell \nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n{\n\n\n\n#pragma HLS disaggregate variable = inter_shuffle_stream_p0\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p0._\n#pragma HLS aggregate variable = inter_shuffle_stream_p0._ bit\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p0._peek\n#pragma HLS aggregate variable = inter_shuffle_stream_p0._peek bit\nvoid(inter_shuffle_stream_p0._.empty());\nvoid(inter_shuffle_stream_p0._peek.empty());\n\n#pragma HLS disaggregate variable = inter_shuffle_stream_p1\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p1._\n#pragma HLS aggregate variable = inter_shuffle_stream_p1._ bit\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p1._peek\n#pragma HLS aggregate variable = inter_shuffle_stream_p1._peek bit\nvoid(inter_shuffle_stream_p1._.empty());\nvoid(inter_shuffle_stream_p1._peek.empty());\n\n#pragma HLS disaggregate variable = inter_shuffle_stream_p2\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p2._\n#pragma HLS aggregate variable = inter_shuffle_stream_p2._ bit\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p2._peek\n#pragma HLS aggregate variable = inter_shuffle_stream_p2._peek bit\nvoid(inter_shuffle_stream_p2._.empty());\nvoid(inter_shuffle_stream_p2._peek.empty());\n\n#pragma HLS disaggregate variable = inter_shuffle_stream_p3\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p3._\n#pragma HLS aggregate variable = inter_shuffle_stream_p3._ bit\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p3._peek\n#pragma HLS aggregate variable = inter_shuffle_stream_p3._peek bit\nvoid(inter_shuffle_stream_p3._.empty());\nvoid(inter_shuffle_stream_p3._peek.empty());\n\n#pragma HLS disaggregate variable = inter_shuffle_stream_p4\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p4._\n#pragma HLS aggregate variable = inter_shuffle_stream_p4._ bit\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p4._peek\n#pragma HLS aggregate variable = inter_shuffle_stream_p4._peek bit\nvoid(inter_shuffle_stream_p4._.empty());\nvoid(inter_shuffle_stream_p4._peek.empty());\n\n#pragma HLS disaggregate variable = inter_shuffle_stream_p5\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p5._\n#pragma HLS aggregate variable = inter_shuffle_stream_p5._ bit\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p5._peek\n#pragma HLS aggregate variable = inter_shuffle_stream_p5._peek bit\nvoid(inter_shuffle_stream_p5._.empty());\nvoid(inter_shuffle_stream_p5._peek.empty());\n\n#pragma HLS disaggregate variable = inter_shuffle_stream_p6\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p6._\n#pragma HLS aggregate variable = inter_shuffle_stream_p6._ bit\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p6._peek\n#pragma HLS aggregate variable = inter_shuffle_stream_p6._peek bit\nvoid(inter_shuffle_stream_p6._.empty());\nvoid(inter_shuffle_stream_p6._peek.empty());\n\n#pragma HLS disaggregate variable = inter_shuffle_stream_p7\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p7._\n#pragma HLS aggregate variable = inter_shuffle_stream_p7._ bit\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p7._peek\n#pragma HLS aggregate variable = inter_shuffle_stream_p7._peek bit\nvoid(inter_shuffle_stream_p7._.empty());\nvoid(inter_shuffle_stream_p7._peek.empty());\n\n#pragma HLS disaggregate variable = reconstruct_stream\n#pragma HLS interface ap_fifo port = reconstruct_stream._\n#pragma HLS aggregate variable = reconstruct_stream._ bit\nvoid(reconstruct_stream._.full());\n\n typedef struct {\n ap_uint bv;\n ap_uint iidx;\n bool valid;\n } PEEKED_DTYPE;\n int next_output_idx = 1;\n PEEKED_DTYPE shufbuf[(8) /* each sub bv is further partitioned into this chunks*/][(8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/];\n#pragma HLS ARRAY_PARTITION variable=shufbuf dim=0 complete\n PEEK_EMULATOR_INIT:\n for (int p = 0; p < (8) /* each sub bv is further partitioned into this chunks*/; ++p) {\n for (int i = 0; i < (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; ++i) {\n shufbuf[p][i].bv = 0;\n shufbuf[p][i].iidx = 0;\n shufbuf[p][i].valid = 0;\n }\n }\n MAIN_LOOP:\n while(1)\n {\n#pragma HLS PIPELINE II=1\n /////////////////////////////\n // READ LOGIC\n /////////////////////////////\n //#ifdef __DO_DEBUG_PRINTS__\n //printf(\"SHUFFLE ORDERING stm%d kp%d hash%d - read BV %d from partition %d, iidx %d, into buf_idx %d\\n\",\n // stm_idx, kp_idx, shuffle_idx,\n // read_val.bv_val.to_int(),\n // partition_idx,\n // read_val.iidx.to_int(),\n // rd_buf_idx\n //);\n //#endif\n bool peek_success_p0; int rd_buf_idx_p0; BV_PLUS_IIDX_PACKED_DTYPE read_val_p0; peek_success_p0 = inter_shuffle_stream_p0.try_peek(read_val_p0); rd_buf_idx_p0 = read_val_p0.iidx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (peek_success_p0 && shufbuf[0][rd_buf_idx_p0].valid == 0 ) { inter_shuffle_stream_p0.read(); shufbuf[0][rd_buf_idx_p0].bv = read_val_p0.bv_val; shufbuf[0][rd_buf_idx_p0].iidx = read_val_p0.iidx; shufbuf[0][rd_buf_idx_p0].valid = 1; }\n bool peek_success_p1; int rd_buf_idx_p1; BV_PLUS_IIDX_PACKED_DTYPE read_val_p1; peek_success_p1 = inter_shuffle_stream_p1.try_peek(read_val_p1); rd_buf_idx_p1 = read_val_p1.iidx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (peek_success_p1 && shufbuf[1][rd_buf_idx_p1].valid == 0 ) { inter_shuffle_stream_p1.read(); shufbuf[1][rd_buf_idx_p1].bv = read_val_p1.bv_val; shufbuf[1][rd_buf_idx_p1].iidx = read_val_p1.iidx; shufbuf[1][rd_buf_idx_p1].valid = 1; }\n bool peek_success_p2; int rd_buf_idx_p2; BV_PLUS_IIDX_PACKED_DTYPE read_val_p2; peek_success_p2 = inter_shuffle_stream_p2.try_peek(read_val_p2); rd_buf_idx_p2 = read_val_p2.iidx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (peek_success_p2 && shufbuf[2][rd_buf_idx_p2].valid == 0 ) { inter_shuffle_stream_p2.read(); shufbuf[2][rd_buf_idx_p2].bv = read_val_p2.bv_val; shufbuf[2][rd_buf_idx_p2].iidx = read_val_p2.iidx; shufbuf[2][rd_buf_idx_p2].valid = 1; }\n bool peek_success_p3; int rd_buf_idx_p3; BV_PLUS_IIDX_PACKED_DTYPE read_val_p3; peek_success_p3 = inter_shuffle_stream_p3.try_peek(read_val_p3); rd_buf_idx_p3 = read_val_p3.iidx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (peek_success_p3 && shufbuf[3][rd_buf_idx_p3].valid == 0 ) { inter_shuffle_stream_p3.read(); shufbuf[3][rd_buf_idx_p3].bv = read_val_p3.bv_val; shufbuf[3][rd_buf_idx_p3].iidx = read_val_p3.iidx; shufbuf[3][rd_buf_idx_p3].valid = 1; }\n bool peek_success_p4; int rd_buf_idx_p4; BV_PLUS_IIDX_PACKED_DTYPE read_val_p4; peek_success_p4 = inter_shuffle_stream_p4.try_peek(read_val_p4); rd_buf_idx_p4 = read_val_p4.iidx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (peek_success_p4 && shufbuf[4][rd_buf_idx_p4].valid == 0 ) { inter_shuffle_stream_p4.read(); shufbuf[4][rd_buf_idx_p4].bv = read_val_p4.bv_val; shufbuf[4][rd_buf_idx_p4].iidx = read_val_p4.iidx; shufbuf[4][rd_buf_idx_p4].valid = 1; }\n bool peek_success_p5; int rd_buf_idx_p5; BV_PLUS_IIDX_PACKED_DTYPE read_val_p5; peek_success_p5 = inter_shuffle_stream_p5.try_peek(read_val_p5); rd_buf_idx_p5 = read_val_p5.iidx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (peek_success_p5 && shufbuf[5][rd_buf_idx_p5].valid == 0 ) { inter_shuffle_stream_p5.read(); shufbuf[5][rd_buf_idx_p5].bv = read_val_p5.bv_val; shufbuf[5][rd_buf_idx_p5].iidx = read_val_p5.iidx; shufbuf[5][rd_buf_idx_p5].valid = 1; }\n bool peek_success_p6; int rd_buf_idx_p6; BV_PLUS_IIDX_PACKED_DTYPE read_val_p6; peek_success_p6 = inter_shuffle_stream_p6.try_peek(read_val_p6); rd_buf_idx_p6 = read_val_p6.iidx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (peek_success_p6 && shufbuf[6][rd_buf_idx_p6].valid == 0 ) { inter_shuffle_stream_p6.read(); shufbuf[6][rd_buf_idx_p6].bv = read_val_p6.bv_val; shufbuf[6][rd_buf_idx_p6].iidx = read_val_p6.iidx; shufbuf[6][rd_buf_idx_p6].valid = 1; }\n bool peek_success_p7; int rd_buf_idx_p7; BV_PLUS_IIDX_PACKED_DTYPE read_val_p7; peek_success_p7 = inter_shuffle_stream_p7.try_peek(read_val_p7); rd_buf_idx_p7 = read_val_p7.iidx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (peek_success_p7 && shufbuf[7][rd_buf_idx_p7].valid == 0 ) { inter_shuffle_stream_p7.read(); shufbuf[7][rd_buf_idx_p7].bv = read_val_p7.bv_val; shufbuf[7][rd_buf_idx_p7].iidx = read_val_p7.iidx; shufbuf[7][rd_buf_idx_p7].valid = 1; }\n /////////////////////////////\n // WRITE LOGIC\n /////////////////////////////\n bool write_ready = 0;\n int wr_buf_idx = next_output_idx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/;\n int ready_partition_idx = 0;\n for (int partition_idx = 0; partition_idx < (8) /* each sub bv is further partitioned into this chunks*/; ++partition_idx)\n {\n if (shufbuf[partition_idx][wr_buf_idx].valid == 1 &&\n shufbuf[partition_idx][wr_buf_idx].iidx == next_output_idx\n )\n {\n write_ready = 1;\n ready_partition_idx = partition_idx;\n break;\n }\n }\n if (write_ready){\n ap_uint write_success;\n ap_uint v = shufbuf[ready_partition_idx][wr_buf_idx].bv;\n write_success = reconstruct_stream.try_write(v);\n if (write_success) {\n shufbuf[ready_partition_idx][wr_buf_idx].valid = 0;\n if (next_output_idx == KEYPAIRS_PER_STM) {\n next_output_idx = 1;\n }\n else {\n next_output_idx++;\n }\n }\n }\n }\n}\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", + "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell\nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n{\n\n\n\n#pragma HLS disaggregate variable = inter_shuffle_stream_p0\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p0._\n#pragma HLS aggregate variable = inter_shuffle_stream_p0._ bit\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p0._peek\n#pragma HLS aggregate variable = inter_shuffle_stream_p0._peek bit\nvoid(inter_shuffle_stream_p0._.empty());\nvoid(inter_shuffle_stream_p0._peek.empty());\n\n#pragma HLS disaggregate variable = inter_shuffle_stream_p1\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p1._\n#pragma HLS aggregate variable = inter_shuffle_stream_p1._ bit\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p1._peek\n#pragma HLS aggregate variable = inter_shuffle_stream_p1._peek bit\nvoid(inter_shuffle_stream_p1._.empty());\nvoid(inter_shuffle_stream_p1._peek.empty());\n\n#pragma HLS disaggregate variable = inter_shuffle_stream_p2\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p2._\n#pragma HLS aggregate variable = inter_shuffle_stream_p2._ bit\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p2._peek\n#pragma HLS aggregate variable = inter_shuffle_stream_p2._peek bit\nvoid(inter_shuffle_stream_p2._.empty());\nvoid(inter_shuffle_stream_p2._peek.empty());\n\n#pragma HLS disaggregate variable = inter_shuffle_stream_p3\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p3._\n#pragma HLS aggregate variable = inter_shuffle_stream_p3._ bit\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p3._peek\n#pragma HLS aggregate variable = inter_shuffle_stream_p3._peek bit\nvoid(inter_shuffle_stream_p3._.empty());\nvoid(inter_shuffle_stream_p3._peek.empty());\n\n#pragma HLS disaggregate variable = inter_shuffle_stream_p4\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p4._\n#pragma HLS aggregate variable = inter_shuffle_stream_p4._ bit\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p4._peek\n#pragma HLS aggregate variable = inter_shuffle_stream_p4._peek bit\nvoid(inter_shuffle_stream_p4._.empty());\nvoid(inter_shuffle_stream_p4._peek.empty());\n\n#pragma HLS disaggregate variable = inter_shuffle_stream_p5\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p5._\n#pragma HLS aggregate variable = inter_shuffle_stream_p5._ bit\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p5._peek\n#pragma HLS aggregate variable = inter_shuffle_stream_p5._peek bit\nvoid(inter_shuffle_stream_p5._.empty());\nvoid(inter_shuffle_stream_p5._peek.empty());\n\n#pragma HLS disaggregate variable = inter_shuffle_stream_p6\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p6._\n#pragma HLS aggregate variable = inter_shuffle_stream_p6._ bit\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p6._peek\n#pragma HLS aggregate variable = inter_shuffle_stream_p6._peek bit\nvoid(inter_shuffle_stream_p6._.empty());\nvoid(inter_shuffle_stream_p6._peek.empty());\n\n#pragma HLS disaggregate variable = inter_shuffle_stream_p7\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p7._\n#pragma HLS aggregate variable = inter_shuffle_stream_p7._ bit\n#pragma HLS interface ap_fifo port = inter_shuffle_stream_p7._peek\n#pragma HLS aggregate variable = inter_shuffle_stream_p7._peek bit\nvoid(inter_shuffle_stream_p7._.empty());\nvoid(inter_shuffle_stream_p7._peek.empty());\n\n#pragma HLS disaggregate variable = reconstruct_stream\n#pragma HLS interface ap_fifo port = reconstruct_stream._\n#pragma HLS aggregate variable = reconstruct_stream._ bit\nvoid(reconstruct_stream._.full());\n\n typedef struct {\n ap_uint bv;\n ap_uint iidx;\n bool valid;\n } PEEKED_DTYPE;\n int next_output_idx = 1;\n PEEKED_DTYPE shufbuf[(8) /* each sub bv is further partitioned into this chunks*/][(8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/];\n#pragma HLS ARRAY_PARTITION variable=shufbuf dim=0 complete\n PEEK_EMULATOR_INIT:\n for (int p = 0; p < (8) /* each sub bv is further partitioned into this chunks*/; ++p) {\n for (int i = 0; i < (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; ++i) {\n shufbuf[p][i].bv = 0;\n shufbuf[p][i].iidx = 0;\n shufbuf[p][i].valid = 0;\n }\n }\n MAIN_LOOP:\n while(1)\n {\n#pragma HLS PIPELINE II=1\n /////////////////////////////\n // READ LOGIC\n /////////////////////////////\n //#ifdef __DO_DEBUG_PRINTS__\n //printf(\"SHUFFLE ORDERING stm%d kp%d hash%d - read BV %d from partition %d, iidx %d, into buf_idx %d\\n\",\n // stm_idx, kp_idx, shuffle_idx,\n // read_val.bv_val.to_int(),\n // partition_idx,\n // read_val.iidx.to_int(),\n // rd_buf_idx\n //);\n //#endif\n bool peek_success_p0; int rd_buf_idx_p0; BV_PLUS_IIDX_PACKED_DTYPE read_val_p0; peek_success_p0 = inter_shuffle_stream_p0.try_peek(read_val_p0); rd_buf_idx_p0 = read_val_p0.iidx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (peek_success_p0 && shufbuf[0][rd_buf_idx_p0].valid == 0 ) { inter_shuffle_stream_p0.read(); shufbuf[0][rd_buf_idx_p0].bv = read_val_p0.bv_val; shufbuf[0][rd_buf_idx_p0].iidx = read_val_p0.iidx; shufbuf[0][rd_buf_idx_p0].valid = 1; }\n bool peek_success_p1; int rd_buf_idx_p1; BV_PLUS_IIDX_PACKED_DTYPE read_val_p1; peek_success_p1 = inter_shuffle_stream_p1.try_peek(read_val_p1); rd_buf_idx_p1 = read_val_p1.iidx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (peek_success_p1 && shufbuf[1][rd_buf_idx_p1].valid == 0 ) { inter_shuffle_stream_p1.read(); shufbuf[1][rd_buf_idx_p1].bv = read_val_p1.bv_val; shufbuf[1][rd_buf_idx_p1].iidx = read_val_p1.iidx; shufbuf[1][rd_buf_idx_p1].valid = 1; }\n bool peek_success_p2; int rd_buf_idx_p2; BV_PLUS_IIDX_PACKED_DTYPE read_val_p2; peek_success_p2 = inter_shuffle_stream_p2.try_peek(read_val_p2); rd_buf_idx_p2 = read_val_p2.iidx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (peek_success_p2 && shufbuf[2][rd_buf_idx_p2].valid == 0 ) { inter_shuffle_stream_p2.read(); shufbuf[2][rd_buf_idx_p2].bv = read_val_p2.bv_val; shufbuf[2][rd_buf_idx_p2].iidx = read_val_p2.iidx; shufbuf[2][rd_buf_idx_p2].valid = 1; }\n bool peek_success_p3; int rd_buf_idx_p3; BV_PLUS_IIDX_PACKED_DTYPE read_val_p3; peek_success_p3 = inter_shuffle_stream_p3.try_peek(read_val_p3); rd_buf_idx_p3 = read_val_p3.iidx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (peek_success_p3 && shufbuf[3][rd_buf_idx_p3].valid == 0 ) { inter_shuffle_stream_p3.read(); shufbuf[3][rd_buf_idx_p3].bv = read_val_p3.bv_val; shufbuf[3][rd_buf_idx_p3].iidx = read_val_p3.iidx; shufbuf[3][rd_buf_idx_p3].valid = 1; }\n bool peek_success_p4; int rd_buf_idx_p4; BV_PLUS_IIDX_PACKED_DTYPE read_val_p4; peek_success_p4 = inter_shuffle_stream_p4.try_peek(read_val_p4); rd_buf_idx_p4 = read_val_p4.iidx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (peek_success_p4 && shufbuf[4][rd_buf_idx_p4].valid == 0 ) { inter_shuffle_stream_p4.read(); shufbuf[4][rd_buf_idx_p4].bv = read_val_p4.bv_val; shufbuf[4][rd_buf_idx_p4].iidx = read_val_p4.iidx; shufbuf[4][rd_buf_idx_p4].valid = 1; }\n bool peek_success_p5; int rd_buf_idx_p5; BV_PLUS_IIDX_PACKED_DTYPE read_val_p5; peek_success_p5 = inter_shuffle_stream_p5.try_peek(read_val_p5); rd_buf_idx_p5 = read_val_p5.iidx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (peek_success_p5 && shufbuf[5][rd_buf_idx_p5].valid == 0 ) { inter_shuffle_stream_p5.read(); shufbuf[5][rd_buf_idx_p5].bv = read_val_p5.bv_val; shufbuf[5][rd_buf_idx_p5].iidx = read_val_p5.iidx; shufbuf[5][rd_buf_idx_p5].valid = 1; }\n bool peek_success_p6; int rd_buf_idx_p6; BV_PLUS_IIDX_PACKED_DTYPE read_val_p6; peek_success_p6 = inter_shuffle_stream_p6.try_peek(read_val_p6); rd_buf_idx_p6 = read_val_p6.iidx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (peek_success_p6 && shufbuf[6][rd_buf_idx_p6].valid == 0 ) { inter_shuffle_stream_p6.read(); shufbuf[6][rd_buf_idx_p6].bv = read_val_p6.bv_val; shufbuf[6][rd_buf_idx_p6].iidx = read_val_p6.iidx; shufbuf[6][rd_buf_idx_p6].valid = 1; }\n bool peek_success_p7; int rd_buf_idx_p7; BV_PLUS_IIDX_PACKED_DTYPE read_val_p7; peek_success_p7 = inter_shuffle_stream_p7.try_peek(read_val_p7); rd_buf_idx_p7 = read_val_p7.iidx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/; if (peek_success_p7 && shufbuf[7][rd_buf_idx_p7].valid == 0 ) { inter_shuffle_stream_p7.read(); shufbuf[7][rd_buf_idx_p7].bv = read_val_p7.bv_val; shufbuf[7][rd_buf_idx_p7].iidx = read_val_p7.iidx; shufbuf[7][rd_buf_idx_p7].valid = 1; }\n /////////////////////////////\n // WRITE LOGIC\n /////////////////////////////\n bool write_ready = 0;\n int wr_buf_idx = next_output_idx % (8) /* Number of buffered elements we can have for each hash/partition, in the shuffle buffer.*/;\n int ready_partition_idx = 0;\n for (int partition_idx = 0; partition_idx < (8) /* each sub bv is further partitioned into this chunks*/; ++partition_idx)\n {\n if (shufbuf[partition_idx][wr_buf_idx].valid == 1 &&\n shufbuf[partition_idx][wr_buf_idx].iidx == next_output_idx\n )\n {\n write_ready = 1;\n ready_partition_idx = partition_idx;\n break;\n }\n }\n if (write_ready){\n ap_uint write_success;\n ap_uint v = shufbuf[ready_partition_idx][wr_buf_idx].bv;\n write_success = reconstruct_stream.try_write(v);\n if (write_success) {\n shufbuf[ready_partition_idx][wr_buf_idx].valid = 0;\n if (next_output_idx == KEYPAIRS_PER_STM) {\n next_output_idx = 1;\n }\n else {\n next_output_idx++;\n }\n }\n }\n }\n}\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", "level": "lower", "target": "hls", "vendor": "xilinx" }, "workload": { - "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell \nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nextern \"C\" {\n\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n{\n\n#pragma HLS interface s_axilite port = input_bv bundle = control\n{ auto val = reinterpret_cast(input_bv); }\n{ auto val = reinterpret_cast(input_bv); }\n\n#pragma HLS interface s_axilite port = key_in bundle = control\n{ auto val = reinterpret_cast(key_in); }\n{ auto val = reinterpret_cast(key_in); }\n\n#pragma HLS interface s_axilite port = out_bits bundle = control\n{ auto val = reinterpret_cast(out_bits); }\n{ auto val = reinterpret_cast(out_bits); }\n\n#pragma HLS interface s_axilite port = UNUSED_DUMMY bundle = control\n{ auto val = reinterpret_cast(UNUSED_DUMMY); }\n\n\n#pragma HLS interface s_axilite port = return bundle = control\n}\n\n\n} // extern \"C\"\n\n", + "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell\nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nextern \"C\" {\n\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n{\n\n#pragma HLS interface s_axilite port = input_bv bundle = control\n{ auto val = reinterpret_cast(input_bv); }\n{ auto val = reinterpret_cast(input_bv); }\n\n#pragma HLS interface s_axilite port = key_in bundle = control\n{ auto val = reinterpret_cast(key_in); }\n{ auto val = reinterpret_cast(key_in); }\n\n#pragma HLS interface s_axilite port = out_bits bundle = control\n{ auto val = reinterpret_cast(out_bits); }\n{ auto val = reinterpret_cast(out_bits); }\n\n#pragma HLS interface s_axilite port = UNUSED_DUMMY bundle = control\n{ auto val = reinterpret_cast(UNUSED_DUMMY); }\n\n\n#pragma HLS interface s_axilite port = return bundle = control\n}\n\n\n} // extern \"C\"\n\n", "fifos": { "aggregate_stream_kp0_workload[0]": { "consumed_by": [ @@ -11996,7 +11996,6 @@ ] } }, - "frt_interface": "#include \n#include \n#include \n\n\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell \nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n uint64_t outmmap\n);\n/*************************************************************************************/\nvoid workload(\n tapa::mmap input_bv\n ,tapa::mmap key_in\n ,tapa::mmap out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n{\n#define TAPAB_APP \"TAPAB_workload\"\n#define TAPAB \"TAPAB\"\n const char* _tapa_bitstream = nullptr;\n if ((_tapa_bitstream = getenv(TAPAB_APP)) ||\n (_tapa_bitstream = getenv(TAPAB))) {\n fpga::Instance _tapa_instance(_tapa_bitstream);\n int _tapa_arg_index = 0;\n for (const auto& _tapa_arg_info : _tapa_instance.GetArgsInfo()) {\n if (false) {\n } else if (_tapa_arg_info.name == \"input_bv\") {\n auto _tapa_arg = fpga::ReadWrite(input_bv.get(), input_bv.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"key_in\") {\n auto _tapa_arg = fpga::ReadWrite(key_in.get(), key_in.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"out_bits\") {\n auto _tapa_arg = fpga::ReadWrite(out_bits.get(), out_bits.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"UNUSED_DUMMY\") {\n _tapa_instance.SetArg(_tapa_arg_index, UNUSED_DUMMY);\n } else {\n std::stringstream ss;\n ss << \"unknown argument: \" << _tapa_arg_info;\n throw std::runtime_error(ss.str());\n }\n ++_tapa_arg_index;\n }\n _tapa_instance.WriteToDevice();\n _tapa_instance.Exec();\n _tapa_instance.ReadFromDevice();\n _tapa_instance.Finish();\n } else {\n throw std::runtime_error(\"no bitstream found; please set `\" TAPAB_APP\n \"` or `\" TAPAB \"`\");\n }\n}\n", "level": "upper", "ports": [ { @@ -26474,7 +26473,7 @@ "vendor": "xilinx" }, "writeOutput_synchronous": { - "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell \nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( ((512*((3)))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n tapa::mmap outmmap\n){\n#pragma HLS disaggregate variable = packed_outputs_stream_s0_kp0\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s0_kp0._\n#pragma HLS aggregate variable = packed_outputs_stream_s0_kp0._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s0_kp0._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s0_kp0._peek bit\nvoid(packed_outputs_stream_s0_kp0._.empty());\nvoid(packed_outputs_stream_s0_kp0._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s0_kp1\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s0_kp1._\n#pragma HLS aggregate variable = packed_outputs_stream_s0_kp1._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s0_kp1._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s0_kp1._peek bit\nvoid(packed_outputs_stream_s0_kp1._.empty());\nvoid(packed_outputs_stream_s0_kp1._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s1_kp0\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s1_kp0._\n#pragma HLS aggregate variable = packed_outputs_stream_s1_kp0._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s1_kp0._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s1_kp0._peek bit\nvoid(packed_outputs_stream_s1_kp0._.empty());\nvoid(packed_outputs_stream_s1_kp0._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s1_kp1\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s1_kp1._\n#pragma HLS aggregate variable = packed_outputs_stream_s1_kp1._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s1_kp1._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s1_kp1._peek bit\nvoid(packed_outputs_stream_s1_kp1._.empty());\nvoid(packed_outputs_stream_s1_kp1._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s2_kp0\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s2_kp0._\n#pragma HLS aggregate variable = packed_outputs_stream_s2_kp0._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s2_kp0._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s2_kp0._peek bit\nvoid(packed_outputs_stream_s2_kp0._.empty());\nvoid(packed_outputs_stream_s2_kp0._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s2_kp1\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s2_kp1._\n#pragma HLS aggregate variable = packed_outputs_stream_s2_kp1._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s2_kp1._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s2_kp1._peek bit\nvoid(packed_outputs_stream_s2_kp1._.empty());\nvoid(packed_outputs_stream_s2_kp1._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s3_kp0\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s3_kp0._\n#pragma HLS aggregate variable = packed_outputs_stream_s3_kp0._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s3_kp0._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s3_kp0._peek bit\nvoid(packed_outputs_stream_s3_kp0._.empty());\nvoid(packed_outputs_stream_s3_kp0._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s3_kp1\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s3_kp1._\n#pragma HLS aggregate variable = packed_outputs_stream_s3_kp1._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s3_kp1._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s3_kp1._peek bit\nvoid(packed_outputs_stream_s3_kp1._.empty());\nvoid(packed_outputs_stream_s3_kp1._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s4_kp0\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s4_kp0._\n#pragma HLS aggregate variable = packed_outputs_stream_s4_kp0._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s4_kp0._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s4_kp0._peek bit\nvoid(packed_outputs_stream_s4_kp0._.empty());\nvoid(packed_outputs_stream_s4_kp0._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s4_kp1\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s4_kp1._\n#pragma HLS aggregate variable = packed_outputs_stream_s4_kp1._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s4_kp1._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s4_kp1._peek bit\nvoid(packed_outputs_stream_s4_kp1._.empty());\nvoid(packed_outputs_stream_s4_kp1._peek.empty());\n\n#pragma HLS interface m_axi port = outmmap offset = direct bundle = outmmap\n\n STORE_DTYPE to_store;\n for (int i = 0; i < PACKED_OUTPUTS_PER_STM; ++i) {\n to_store.s0_k0 = packed_outputs_stream_s0_kp0.read();\n to_store.s0_k1 = packed_outputs_stream_s0_kp1.read();\n to_store.s1_k0 = packed_outputs_stream_s1_kp0.read();\n to_store.s1_k1 = packed_outputs_stream_s1_kp1.read();\n to_store.s2_k0 = packed_outputs_stream_s2_kp0.read();\n to_store.s2_k1 = packed_outputs_stream_s2_kp1.read();\n to_store.s3_k0 = packed_outputs_stream_s3_kp0.read();\n to_store.s3_k1 = packed_outputs_stream_s3_kp1.read();\n to_store.s4_k0 = packed_outputs_stream_s4_kp0.read();\n to_store.s4_k1 = packed_outputs_stream_s4_kp1.read();\n outmmap[i] = to_store;\n }\n}\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", + "code": "\n//#ifndef __SYNTHESIS__\n// #include \n//#endif\n//#include \n\n\n #include \n\n#include \n\n#include \n\n#include \n\n/*****************************/\n// MACROS USED FOR CALCULATIONS\n// Power of 2 rounding : https://stackoverflow.com/questions/466204/rounding-up-to-next-power-of-2\n/*****************************/\n/*****************************/\n// CONFIGURE ME!\n/*****************************/\n// NOTE: IF THE BV_LENGTH IS NOT A POWER OF TWO, SOME MODULES MAY ACHIEVE POOR II.\nconst int HASHONLY_BITWIDTH = 32;\nconst int BV_PACKED_BITWIDTH = 32; //On-chip memory for BV, packing this many bits into one cell\nconst int BIT_BITWIDTH = 1;\ntypedef struct {\n ap_uint<(32)> k0;\n ap_uint<(32)> k1;\n} TWOKEY_DTYPE;\ntypedef struct {\n ap_uint section0;\n ap_uint section1;\n ap_uint section2;\n ap_uint padding3;\n} BV_LOAD_DTYPE;\n const int STRM_IDX_BITWIDTH = 8;\n const int INPUT_IDX_BITWIDTH = 24;\n const int MAX_INPUT_IDX = ( 1<<(INPUT_IDX_BITWIDTH) ) - 1;\n const int METADATA_BITWIDTH = INPUT_IDX_BITWIDTH + STRM_IDX_BITWIDTH;\n const int MAX_STRM_IDX = ( 1<<(STRM_IDX_BITWIDTH) ) - 1;\n const int PACKED_HASH_BITWIDTH = HASHONLY_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_METADATA_BITWIDTH = BIT_BITWIDTH + METADATA_BITWIDTH;\n const int BV_PLUS_IIDX_BITWIDTH = BIT_BITWIDTH + INPUT_IDX_BITWIDTH;\n /************************/\n //// Packed datatypes. Packed as follows (MSB to LSB): [STRM_IDX, INPUT_IDX, HASH_VALUE]\n //#define PACKED_HASH_DTYPE ap_uint\n //#define BV_PLUS_METADATA_PACKED_DTYPE ap_uint\n //#define METADATA_DTYPE ap_uint\n typedef struct {\n ap_uint iidx;\n ap_uint sidx;\n } METADATA_DTYPE;\n typedef struct {\n ap_uint bv_val;\n METADATA_DTYPE md;\n } BV_PLUS_METADATA_PACKED_DTYPE;\n typedef struct {\n ap_uint bv_val;\n ap_uint iidx;\n } BV_PLUS_IIDX_PACKED_DTYPE;\n typedef struct {\n ap_uint hash;\n METADATA_DTYPE md;\n } PACKED_HASH_DTYPE;\n /************************/\n const int _BV_ROUNDING_FACTOR_ = (3) * BV_PACKED_BITWIDTH * (8) /* each sub bv is further partitioned into this chunks*/;\n const int BV_LENGTH = ( (((1024*1024*4)*(3))-1)/_BV_ROUNDING_FACTOR_ + 1) * _BV_ROUNDING_FACTOR_;\ntypedef struct {\n ap_uint<(32)> s0_k0;\n ap_uint<(32)> s0_k1;\n ap_uint<(32)> s1_k0;\n ap_uint<(32)> s1_k1;\n ap_uint<(32)> s2_k0;\n ap_uint<(32)> s2_k1;\n ap_uint<(32)> s3_k0;\n ap_uint<(32)> s3_k1;\n ap_uint<(32)> s4_k0;\n ap_uint<(32)> s4_k1;\n ap_uint<(32)> padding_5_k0;\n ap_uint<(32)> padding_5_k1;\n ap_uint<(32)> padding_6_k0;\n ap_uint<(32)> padding_6_k1;\n ap_uint<(32)> padding_7_k0;\n ap_uint<(32)> padding_7_k1;\n} LOAD_DTYPE;\n// This naming is potentially confusing - we datapack TWICE.\n// Within each key-stream we pack 32 elements together.\n// Then, we coalesce among key-streams.\ntypedef struct {\n ap_uint<((32))> s0_k0;\n ap_uint<((32))> s0_k1;\n ap_uint<((32))> s1_k0;\n ap_uint<((32))> s1_k1;\n ap_uint<((32))> s2_k0;\n ap_uint<((32))> s2_k1;\n ap_uint<((32))> s3_k0;\n ap_uint<((32))> s3_k1;\n ap_uint<((32))> s4_k0;\n ap_uint<((32))> s4_k1;\n ap_uint<((32))> padding_5_k0;\n ap_uint<((32))> padding_5_k1;\n ap_uint<((32))> padding_6_k0;\n ap_uint<((32))> padding_6_k1;\n ap_uint<((32))> padding_7_k0;\n ap_uint<((32))> padding_7_k1;\n} STORE_DTYPE;\n/***************************************************/\n/***************************************************/\n/***************************************************/\n/* STM_DEPTH: In the worst case, the arbiter can send all of the hashed values to the same FIFO.\n * So that FIFO will get filled, and the shuffle unit wont be able to handle it.\n * We need at least NUM_STM FIFO elements between arbiter and shuffle. */\nconst int KEYS_PER_STM = (( ( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) | (( ( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) | (( ( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) | (( ( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) | (( ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 0) | ((( ((1024*1024*8*(5))-1)/(5) + 1)-1) >> 1) ) >> 2) ) >> 4) ) >> 8) ) >> 16 ) ))+1;\nconst int KEYPAIRS_PER_STM = KEYS_PER_STM/2; // 2 reads per cycle (2port bram)\nconst int TOTAL_NUM_KEYINPUT = KEYS_PER_STM * (5);\nconst int PACKED_OUTPUTS_PER_STM = ( (KEYPAIRS_PER_STM-1)/((32)) + 1);\nconst int PACKED_OUTPAIRS_PER_STM = PACKED_OUTPUTS_PER_STM * 2; // same number of outputs but half the stms if we pair them\nconst int NUM_PACKED_OUTPUTS = PACKED_OUTPUTS_PER_STM * (5) * 2; // 2 reads per cycle (2port bram)\ntypedef struct {\n ap_uint strm0_out_idx;\n ap_uint strm1_out_idx;\n ap_uint strm2_out_idx;\n ap_uint strm3_out_idx;\n ap_uint strm4_out_idx;\n} RATEMON_FEEDBACK_DTYPE;\nvoid loadKey(\n uint64_t key_in\n ,tapa::ostreams, (5)> & key_stream_kp0\n ,tapa::ostreams, (5)> & key_stream_kp1\n);\n/*************************************************************************************/\nvoid loadBV(\n uint64_t input_bv\n ,tapa::ostream > & bv_load_stream_0\n ,tapa::ostream > & bv_load_stream_1\n ,tapa::ostream > & bv_load_stream_2\n);\n/*************************************************************************************/\nuint32_t MurmurHash3_x86_32 (\n ap_uint<(32)> key,\n uint32_t seed\n){\n#pragma HLS inline\n const int nblocks = ((32) / 8) / 4;\n uint32_t h1 = seed;\n const uint32_t c1 = 0xcc9e2d51;\n const uint32_t c2 = 0x1b873593;\n //length is limited as this: KEY_SIZE_IN_BYTES / 4 <= KEY_SIZE_IN_BYTES\n BLOCK_DIVIDING:\n for( int i = 0; i < nblocks; i++){\n#pragma HLS UNROLL\n ap_uint<(32)> tmp;\n tmp.range(31,0) = key.range(32*i+31, 32*i);\n uint32_t k1 = tmp;\n k1 *= c1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //k1 = ROTL32(k1,15);\n k1 = ( (k1 << 15) | (k1 >> (17)) );\n k1 = k1*c2;\n h1 ^= k1;\n // copy-paste the body of the rotl() function, otherwise it doesn't work.\n //h1 = ROTL32(h1,13);\n h1 = ( (h1 << 13) | (h1 >> 19) );\n h1 = h1*5 + 0xe6546b64;\n }\n //Remainder from block division\n uint32_t tail = key[nblocks];\n //Finalization\n h1 ^= ((32) / 8);\n //h1 = fmix32(h1);\n h1 ^= h1>>16;\n h1 *= 0x85ebca6b;\n h1 ^= h1>>13;\n h1 *= 0xc2b2ae35;\n h1 ^= h1>>16;\n uint32_t retval;\n //retval = (uint32_t)key * (seed+3);\n retval = h1;\n return retval;\n}\nvoid computeHash_Feeder(\n int strm_idx,\n int keypair_idx,\n tapa::istream > & key_in_stream,\n tapa::ostreams, (3)> & key_out_stream\n);\nvoid computeHash_Computer(\n int stm_idx,\n int hash_idx,\n int keypair_idx,\n tapa::istream > & key_stream,\n tapa::ostream > & hash_stream\n);\n// CONFIG: need NUM_HASH calls to INVOKE_COMPUTERS_FOR_HASH\n/*************************************************************************************/\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid bloom_arb_forwarder(\n int arb_idx\n ,int kp_idx\n ,tapa::istreams, (5)> & hash_stream\n ,tapa::ostreams & arb_stream\n);\nvoid bloom_hier_arbiter_atom(\n int arb_idx,\n int partition_idx,\n int kp_idx,\n int atom_ID,\n tapa::istream & ratemon_stream,\n tapa::istream & in_stream0,\n tapa::istream & in_stream1,\n tapa::ostream & out_stream\n);\nvoid bloom_arbiter_ratemonitor(\n int arb_idx\n ,int kp_idx\n ,char ratemon_ID\n ,tapa::istreams &arb_stream_in\n ,tapa::ostreams &arb_stream_out\n ,tapa::ostreams &fdbk_stream_0\n ,tapa::ostreams &fdbk_stream_1\n ,tapa::ostreams &fdbk_stream_2\n ,tapa::ostreams &fdbk_stream_3\n ,tapa::ostreams &fdbk_stream_4\n ,tapa::ostreams &fdbk_stream_5\n ,tapa::ostreams &fdbk_stream_6\n ,tapa::ostreams &fdbk_stream_7\n);\nvoid bloom_arbiter_tree_singlepartition(\n int arb_idx\n ,int partition_idx\n ,int kp_idx\n ,tapa::istream &arb_stm0\n ,tapa::istream &arb_stm1\n ,tapa::istream &arb_stm2\n ,tapa::istream &arb_stm3\n ,tapa::istream &arb_stm4\n ,tapa::istreams &ratemon_feedback\n ,tapa::ostream &arbtree_out\n) ;\nvoid bloom_single_arbiter(\n int arb_idx\n , int kp_idx\n , tapa::istreams &in_arb_streams\n , tapa::ostreams &bv_lookup_stream\n) ;\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\n///////// END OF Arbiter //////\n//////////////////////////////////////////////////\n//////////////////////////////////////////////////\nvoid queryResult_per_hash(\n int hash_idx\n ,tapa::istream > & bv_load_stream\n ,tapa::istreams & bv_lookup_stream_kp0\n ,tapa::istreams & bv_lookup_stream_kp1\n ,tapa::ostreams & query_bv_packed_stream_kp0\n ,tapa::ostreams & query_bv_packed_stream_kp1\n) ;\n/*************************************************************************************/\nvoid shuffle_TtoS_per_hash(\n int shuffle_idx\n ,int kp_idx\n ,tapa::istreams & query_bv_packed_stream\n ,tapa::ostreams & inter_shuffle_stream\n);\nvoid shuffle_reordering_per_hash(\n int shuffle_idx\n ,int stm_idx\n ,int kp_idx\n ,tapa::istream & inter_shuffle_stream_p0\n ,tapa::istream & inter_shuffle_stream_p1\n ,tapa::istream & inter_shuffle_stream_p2\n ,tapa::istream & inter_shuffle_stream_p3\n ,tapa::istream & inter_shuffle_stream_p4\n ,tapa::istream & inter_shuffle_stream_p5\n ,tapa::istream & inter_shuffle_stream_p6\n ,tapa::istream & inter_shuffle_stream_p7\n ,tapa::ostream > & reconstruct_stream\n)\n;\nvoid bloom_aggregate_SPLIT(\n int agg_idx,\n int kp_idx,\n tapa::istreams, (3)> & reconstruct_stream,\n tapa::ostream > & aggregate_stream\n);\n/*************************************************************************************/\nvoid packOutput(\n int strm_idx\n ,int kp_idx\n ,tapa::istream > & aggregate_stream\n ,tapa::ostream > & packed_outputs_stream\n) ;\nvoid writeOutput_synchronous(\n tapa::istream >& packed_outputs_stream_s0_kp0,\n tapa::istream >& packed_outputs_stream_s0_kp1,\n tapa::istream >& packed_outputs_stream_s1_kp0,\n tapa::istream >& packed_outputs_stream_s1_kp1,\n tapa::istream >& packed_outputs_stream_s2_kp0,\n tapa::istream >& packed_outputs_stream_s2_kp1,\n tapa::istream >& packed_outputs_stream_s3_kp0,\n tapa::istream >& packed_outputs_stream_s3_kp1,\n tapa::istream >& packed_outputs_stream_s4_kp0,\n tapa::istream >& packed_outputs_stream_s4_kp1,\n tapa::mmap outmmap\n){\n#pragma HLS disaggregate variable = packed_outputs_stream_s0_kp0\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s0_kp0._\n#pragma HLS aggregate variable = packed_outputs_stream_s0_kp0._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s0_kp0._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s0_kp0._peek bit\nvoid(packed_outputs_stream_s0_kp0._.empty());\nvoid(packed_outputs_stream_s0_kp0._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s0_kp1\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s0_kp1._\n#pragma HLS aggregate variable = packed_outputs_stream_s0_kp1._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s0_kp1._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s0_kp1._peek bit\nvoid(packed_outputs_stream_s0_kp1._.empty());\nvoid(packed_outputs_stream_s0_kp1._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s1_kp0\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s1_kp0._\n#pragma HLS aggregate variable = packed_outputs_stream_s1_kp0._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s1_kp0._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s1_kp0._peek bit\nvoid(packed_outputs_stream_s1_kp0._.empty());\nvoid(packed_outputs_stream_s1_kp0._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s1_kp1\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s1_kp1._\n#pragma HLS aggregate variable = packed_outputs_stream_s1_kp1._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s1_kp1._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s1_kp1._peek bit\nvoid(packed_outputs_stream_s1_kp1._.empty());\nvoid(packed_outputs_stream_s1_kp1._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s2_kp0\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s2_kp0._\n#pragma HLS aggregate variable = packed_outputs_stream_s2_kp0._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s2_kp0._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s2_kp0._peek bit\nvoid(packed_outputs_stream_s2_kp0._.empty());\nvoid(packed_outputs_stream_s2_kp0._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s2_kp1\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s2_kp1._\n#pragma HLS aggregate variable = packed_outputs_stream_s2_kp1._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s2_kp1._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s2_kp1._peek bit\nvoid(packed_outputs_stream_s2_kp1._.empty());\nvoid(packed_outputs_stream_s2_kp1._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s3_kp0\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s3_kp0._\n#pragma HLS aggregate variable = packed_outputs_stream_s3_kp0._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s3_kp0._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s3_kp0._peek bit\nvoid(packed_outputs_stream_s3_kp0._.empty());\nvoid(packed_outputs_stream_s3_kp0._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s3_kp1\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s3_kp1._\n#pragma HLS aggregate variable = packed_outputs_stream_s3_kp1._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s3_kp1._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s3_kp1._peek bit\nvoid(packed_outputs_stream_s3_kp1._.empty());\nvoid(packed_outputs_stream_s3_kp1._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s4_kp0\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s4_kp0._\n#pragma HLS aggregate variable = packed_outputs_stream_s4_kp0._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s4_kp0._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s4_kp0._peek bit\nvoid(packed_outputs_stream_s4_kp0._.empty());\nvoid(packed_outputs_stream_s4_kp0._peek.empty());\n\n#pragma HLS disaggregate variable = packed_outputs_stream_s4_kp1\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s4_kp1._\n#pragma HLS aggregate variable = packed_outputs_stream_s4_kp1._ bit\n#pragma HLS interface ap_fifo port = packed_outputs_stream_s4_kp1._peek\n#pragma HLS aggregate variable = packed_outputs_stream_s4_kp1._peek bit\nvoid(packed_outputs_stream_s4_kp1._.empty());\nvoid(packed_outputs_stream_s4_kp1._peek.empty());\n\n#pragma HLS interface m_axi port = outmmap offset = direct bundle = outmmap\n\n STORE_DTYPE to_store;\n for (int i = 0; i < PACKED_OUTPUTS_PER_STM; ++i) {\n to_store.s0_k0 = packed_outputs_stream_s0_kp0.read();\n to_store.s0_k1 = packed_outputs_stream_s0_kp1.read();\n to_store.s1_k0 = packed_outputs_stream_s1_kp0.read();\n to_store.s1_k1 = packed_outputs_stream_s1_kp1.read();\n to_store.s2_k0 = packed_outputs_stream_s2_kp0.read();\n to_store.s2_k1 = packed_outputs_stream_s2_kp1.read();\n to_store.s3_k0 = packed_outputs_stream_s3_kp0.read();\n to_store.s3_k1 = packed_outputs_stream_s3_kp1.read();\n to_store.s4_k0 = packed_outputs_stream_s4_kp0.read();\n to_store.s4_k1 = packed_outputs_stream_s4_kp1.read();\n outmmap[i] = to_store;\n }\n}\n/*************************************************************************************/\nvoid workload(\n uint64_t input_bv\n ,uint64_t key_in\n ,uint64_t out_bits\n //Add a dummy, useless variable because TAPA fast-cosim doesnt work without it.\n ,int UNUSED_DUMMY\n)\n;\n", "level": "lower", "target": "hls", "vendor": "xilinx" diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/log/tapac.INFO b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/log/tapac.INFO deleted file mode 120000 index 4ffbdb79..00000000 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/log/tapac.INFO +++ /dev/null @@ -1 +0,0 @@ -tapac.squark.ylxiao.log.INFO.20240712-150917.1339196 \ No newline at end of file diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/log/tapac.squark.ylxiao.log.INFO.20240712-150917.1339196 b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/log/tapac.squark.ylxiao.log.INFO.20240712-150917.1339196 deleted file mode 100644 index 54a292a1..00000000 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/log/tapac.squark.ylxiao.log.INFO.20240712-150917.1339196 +++ /dev/null @@ -1,4773 +0,0 @@ -I0712 15:09:17.458 tapa.util:184] logging level set to INFO -I0712 15:09:17.459 tapa.tapac:407] Executing all steps of tapac -I0712 15:09:17.459 tapa.tapac:521] running translated command: `tapa --work-dir=generated analyze --input=src/multistream_MurmurHash3.cpp --top=workload synth --part-num=xcu280-fsvh2892-2L-e --clock-period=3.33 link pack --output=generated/multistream_MurmurHash3.xo` -I0712 15:09:17.459 tapa.util:184] logging level set to INFO -I0712 15:09:17.459 tapa.util:184] logging level set to INFO -I0712 15:09:17.459 tapa.tapa:54] tapa version: 0.0.20240301.1 -I0712 15:09:17.459 tapa.tapa:54] tapa version: 0.0.20240301.1 -I0712 15:09:17.459 tapa.tapa:58] Python recursion limit set to 3000 -I0712 15:09:17.459 tapa.tapa:58] Python recursion limit set to 3000 -I0712 15:09:17.532 tapa.steps.analyze:151] added vendor include path `/tools/Xilinx/Vitis_HLS/2022.2/include` -I0712 15:09:17.532 tapa.steps.analyze:151] added vendor include path `/tools/Xilinx/Vitis_HLS/2022.2/include` -I0712 15:09:17.532 tapa.steps.analyze:248] Running tapacc command: /usr/bin/tapacc generated/flatten/flatten-bca92fa8-multistream_MurmurHash3.cpp -top workload -- -std=c++17 -I /home/ylxiao/.local/lib/python3.10/site-packages/tapa/../../../src -isystem /tools/Xilinx/Vitis_HLS/2022.2/include -stdlib=libc++ -isystem /usr/lib/llvm-17/include/c++/v1/ -isystem /usr/include/clang/17/include/ -isystem /usr/lib/clang/17/include/ -I0712 15:09:17.532 tapa.steps.analyze:248] Running tapacc command: /usr/bin/tapacc generated/flatten/flatten-bca92fa8-multistream_MurmurHash3.cpp -top workload -- -std=c++17 -I /home/ylxiao/.local/lib/python3.10/site-packages/tapa/../../../src -isystem /tools/Xilinx/Vitis_HLS/2022.2/include -stdlib=libc++ -isystem /usr/lib/llvm-17/include/c++/v1/ -isystem /usr/include/clang/17/include/ -isystem /usr/lib/clang/17/include/ -I0712 15:09:20.097 tapa.steps.common:92] writing TAPA graph to json `generated/graph.json`. -I0712 15:09:20.097 tapa.steps.common:92] writing TAPA graph to json `generated/graph.json`. -I0712 15:09:20.116 tapa.steps.common:92] writing TAPA settings to json `generated/settings.json`. -I0712 15:09:20.116 tapa.steps.common:92] writing TAPA settings to json `generated/settings.json`. -I0712 15:09:20.116 tapa.steps.common:46] reusing TAPA settings from upstream flows. -I0712 15:09:20.116 tapa.steps.common:46] reusing TAPA settings from upstream flows. -I0712 15:09:20.116 tapa.core:184] extracting HLS C++ files -I0712 15:09:20.116 tapa.core:184] extracting HLS C++ files -I0712 15:09:20.123 tapa.core:216] running HLS -I0712 15:09:20.123 tapa.core:216] running HLS -I0712 15:09:20.124 tapa.core:262] spawn 16 workers for parallel HLS synthesis of the tasks -I0712 15:09:20.124 tapa.core:262] spawn 16 workers for parallel HLS synthesis of the tasks -I0712 15:10:59.462 tapa.core:277] extracting RTL files -I0712 15:10:59.462 tapa.core:277] extracting RTL files -I0712 15:10:59.526 tapa.core:308] parsing RTL files and populating tasks -I0712 15:10:59.526 tapa.core:308] parsing RTL files and populating tasks -D0712 15:11:00.759 tapa.core:317] parsing bloom_aggregate_SPLIT -D0712 15:11:00.759 tapa.core:317] parsing bloom_aggregate_SPLIT -D0712 15:11:00.760 tapa.core:321] populating bloom_aggregate_SPLIT -D0712 15:11:00.760 tapa.core:321] populating bloom_aggregate_SPLIT -D0712 15:11:00.760 tapa.core:317] parsing bloom_arb_forwarder -D0712 15:11:00.760 tapa.core:317] parsing bloom_arb_forwarder -D0712 15:11:00.761 tapa.core:321] populating bloom_arb_forwarder -D0712 15:11:00.761 tapa.core:321] populating bloom_arb_forwarder -D0712 15:11:00.770 tapa.core:317] parsing bloom_arbiter_ratemonitor -D0712 15:11:00.770 tapa.core:317] parsing bloom_arbiter_ratemonitor -D0712 15:11:00.771 tapa.core:321] populating bloom_arbiter_ratemonitor -D0712 15:11:00.771 tapa.core:321] populating bloom_arbiter_ratemonitor -D0712 15:11:00.771 tapa.core:317] parsing bloom_hier_arbiter_atom -D0712 15:11:00.771 tapa.core:317] parsing bloom_hier_arbiter_atom -D0712 15:11:00.772 tapa.core:321] populating bloom_hier_arbiter_atom -D0712 15:11:00.772 tapa.core:321] populating bloom_hier_arbiter_atom -D0712 15:11:00.772 tapa.core:317] parsing computeHash_Computer -D0712 15:11:00.772 tapa.core:317] parsing computeHash_Computer -D0712 15:11:00.773 tapa.core:321] populating computeHash_Computer -D0712 15:11:00.773 tapa.core:321] populating computeHash_Computer -D0712 15:11:00.773 tapa.core:317] parsing computeHash_Feeder -D0712 15:11:00.773 tapa.core:317] parsing computeHash_Feeder -D0712 15:11:00.773 tapa.core:321] populating computeHash_Feeder -D0712 15:11:00.773 tapa.core:321] populating computeHash_Feeder -D0712 15:11:00.774 tapa.core:317] parsing loadBV -D0712 15:11:00.774 tapa.core:317] parsing loadBV -D0712 15:11:00.774 tapa.core:321] populating loadBV -D0712 15:11:00.774 tapa.core:321] populating loadBV -D0712 15:11:00.774 tapa.core:317] parsing loadKey -D0712 15:11:00.774 tapa.core:317] parsing loadKey -D0712 15:11:00.775 tapa.core:321] populating loadKey -D0712 15:11:00.775 tapa.core:321] populating loadKey -D0712 15:11:00.775 tapa.core:317] parsing packOutput -D0712 15:11:00.775 tapa.core:317] parsing packOutput -D0712 15:11:00.775 tapa.core:321] populating packOutput -D0712 15:11:00.775 tapa.core:321] populating packOutput -D0712 15:11:00.775 tapa.core:317] parsing queryResult_per_hash -D0712 15:11:00.775 tapa.core:317] parsing queryResult_per_hash -D0712 15:11:00.776 tapa.core:321] populating queryResult_per_hash -D0712 15:11:00.776 tapa.core:321] populating queryResult_per_hash -D0712 15:11:00.776 tapa.core:317] parsing shuffle_TtoS_per_hash -D0712 15:11:00.776 tapa.core:317] parsing shuffle_TtoS_per_hash -D0712 15:11:00.777 tapa.core:321] populating shuffle_TtoS_per_hash -D0712 15:11:00.777 tapa.core:321] populating shuffle_TtoS_per_hash -D0712 15:11:00.777 tapa.core:317] parsing shuffle_reordering_per_hash -D0712 15:11:00.777 tapa.core:317] parsing shuffle_reordering_per_hash -D0712 15:11:00.778 tapa.core:321] populating shuffle_reordering_per_hash -D0712 15:11:00.778 tapa.core:321] populating shuffle_reordering_per_hash -D0712 15:11:00.778 tapa.core:317] parsing writeOutput_synchronous -D0712 15:11:00.778 tapa.core:317] parsing writeOutput_synchronous -D0712 15:11:00.778 tapa.core:321] populating writeOutput_synchronous -D0712 15:11:00.778 tapa.core:321] populating writeOutput_synchronous -D0712 15:11:00.778 tapa.core:317] parsing workload -D0712 15:11:00.778 tapa.core:317] parsing workload -D0712 15:11:00.779 tapa.core:321] populating workload -D0712 15:11:00.779 tapa.core:321] populating workload -D0712 15:11:00.792 tapa.task:149] mmap argument 'workload.input_bv' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'loadBV_0.input_bv' -D0712 15:11:00.792 tapa.task:149] mmap argument 'workload.input_bv' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'loadBV_0.input_bv' -D0712 15:11:00.792 tapa.task:149] mmap argument 'workload.key_in' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'loadKey_0.key_in' -D0712 15:11:00.792 tapa.task:149] mmap argument 'workload.key_in' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'loadKey_0.key_in' -D0712 15:11:00.792 tapa.task:149] mmap argument 'workload.out_bits' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'writeOutput_synchronous_0.outmmap' -D0712 15:11:00.792 tapa.task:149] mmap argument 'workload.out_bits' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'writeOutput_synchronous_0.outmmap' -I0712 15:11:00.792 tapa.core:325] instrumenting upper-level RTL -I0712 15:11:00.792 tapa.core:325] instrumenting upper-level RTL -I0712 15:11:00.792 tapa.steps.common:92] writing TAPA settings to json `generated/settings.json`. -I0712 15:11:00.792 tapa.steps.common:92] writing TAPA settings to json `generated/settings.json`. -I0712 15:11:00.792 tapa.steps.common:46] reusing TAPA settings from upstream flows. -I0712 15:11:00.792 tapa.steps.common:46] reusing TAPA settings from upstream flows. -I0712 15:11:00.793 tapa.core:452] top task register level set to 0 -I0712 15:11:00.793 tapa.core:452] top task register level set to 0 -I0712 15:11:00.793 tapa.core:456] instrumenting top-level RTL -I0712 15:11:00.793 tapa.core:456] instrumenting top-level RTL -D0712 15:11:00.793 tapa.core:529] instantiating FIFOs in workload -D0712 15:11:00.793 tapa.core:529] instantiating FIFOs in workload -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp0_workload[0] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp0_workload[0] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp0_workload[1] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp0_workload[1] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp0_workload[2] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp0_workload[2] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp0_workload[3] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp0_workload[3] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp0_workload[4] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp0_workload[4] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp1_workload[0] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp1_workload[0] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp1_workload[1] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp1_workload[1] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp1_workload[2] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp1_workload[2] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp1_workload[3] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp1_workload[3] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp1_workload[4] -D0712 15:11:00.795 tapa.core:542] instantiating workload.aggregate_stream_kp1_workload[4] -D0712 15:11:00.795 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[0] -D0712 15:11:00.795 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[0] -D0712 15:11:00.795 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[10] -D0712 15:11:00.795 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[10] -D0712 15:11:00.796 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[11] -D0712 15:11:00.796 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[11] -D0712 15:11:00.796 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[12] -D0712 15:11:00.796 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[12] -D0712 15:11:00.796 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[13] -D0712 15:11:00.796 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[13] -D0712 15:11:00.796 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[14] -D0712 15:11:00.796 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[14] -D0712 15:11:00.796 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[15] -D0712 15:11:00.796 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[15] -D0712 15:11:00.796 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[16] -D0712 15:11:00.796 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[16] -D0712 15:11:00.796 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[17] -D0712 15:11:00.796 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[17] -D0712 15:11:00.796 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[18] -D0712 15:11:00.796 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[18] -D0712 15:11:00.797 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[19] -D0712 15:11:00.797 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[19] -D0712 15:11:00.797 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[1] -D0712 15:11:00.797 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[1] -D0712 15:11:00.797 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[20] -D0712 15:11:00.797 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[20] -D0712 15:11:00.797 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[21] -D0712 15:11:00.797 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[21] -D0712 15:11:00.797 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[22] -D0712 15:11:00.797 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[22] -D0712 15:11:00.797 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[23] -D0712 15:11:00.797 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[23] -D0712 15:11:00.798 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[24] -D0712 15:11:00.798 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[24] -D0712 15:11:00.798 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[25] -D0712 15:11:00.798 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[25] -D0712 15:11:00.798 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[26] -D0712 15:11:00.798 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[26] -D0712 15:11:00.798 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[27] -D0712 15:11:00.798 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[27] -D0712 15:11:00.798 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[28] -D0712 15:11:00.798 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[28] -D0712 15:11:00.798 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[29] -D0712 15:11:00.798 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[29] -D0712 15:11:00.798 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[2] -D0712 15:11:00.798 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[2] -D0712 15:11:00.798 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[30] -D0712 15:11:00.798 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[30] -D0712 15:11:00.799 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[31] -D0712 15:11:00.799 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[31] -D0712 15:11:00.799 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[32] -D0712 15:11:00.799 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[32] -D0712 15:11:00.799 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[33] -D0712 15:11:00.799 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[33] -D0712 15:11:00.799 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[34] -D0712 15:11:00.799 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[34] -D0712 15:11:00.799 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[35] -D0712 15:11:00.799 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[35] -D0712 15:11:00.799 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[36] -D0712 15:11:00.799 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[36] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[37] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[37] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[38] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[38] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[39] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[39] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[3] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[3] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[4] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[4] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[5] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[5] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[6] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[6] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[7] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[7] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[8] -D0712 15:11:00.800 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[8] -D0712 15:11:00.801 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[9] -D0712 15:11:00.801 tapa.core:542] instantiating workload.arb0_streams_kp0_workload[9] -D0712 15:11:00.801 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[0] -D0712 15:11:00.801 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[0] -D0712 15:11:00.801 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[10] -D0712 15:11:00.801 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[10] -D0712 15:11:00.801 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[11] -D0712 15:11:00.801 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[11] -D0712 15:11:00.801 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[12] -D0712 15:11:00.801 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[12] -D0712 15:11:00.801 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[13] -D0712 15:11:00.801 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[13] -D0712 15:11:00.801 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[14] -D0712 15:11:00.801 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[14] -D0712 15:11:00.801 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[15] -D0712 15:11:00.801 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[15] -D0712 15:11:00.802 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[16] -D0712 15:11:00.802 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[16] -D0712 15:11:00.802 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[17] -D0712 15:11:00.802 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[17] -D0712 15:11:00.814 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[18] -D0712 15:11:00.814 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[18] -D0712 15:11:00.814 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[19] -D0712 15:11:00.814 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[19] -D0712 15:11:00.814 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[1] -D0712 15:11:00.814 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[1] -D0712 15:11:00.815 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[20] -D0712 15:11:00.815 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[20] -D0712 15:11:00.815 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[21] -D0712 15:11:00.815 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[21] -D0712 15:11:00.815 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[22] -D0712 15:11:00.815 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[22] -D0712 15:11:00.815 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[23] -D0712 15:11:00.815 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[23] -D0712 15:11:00.815 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[24] -D0712 15:11:00.815 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[24] -D0712 15:11:00.815 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[25] -D0712 15:11:00.815 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[25] -D0712 15:11:00.815 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[26] -D0712 15:11:00.815 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[26] -D0712 15:11:00.816 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[27] -D0712 15:11:00.816 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[27] -D0712 15:11:00.816 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[28] -D0712 15:11:00.816 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[28] -D0712 15:11:00.816 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[29] -D0712 15:11:00.816 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[29] -D0712 15:11:00.816 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[2] -D0712 15:11:00.816 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[2] -D0712 15:11:00.816 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[30] -D0712 15:11:00.816 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[30] -D0712 15:11:00.816 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[31] -D0712 15:11:00.816 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[31] -D0712 15:11:00.816 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[32] -D0712 15:11:00.816 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[32] -D0712 15:11:00.817 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[33] -D0712 15:11:00.817 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[33] -D0712 15:11:00.817 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[34] -D0712 15:11:00.817 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[34] -D0712 15:11:00.817 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[35] -D0712 15:11:00.817 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[35] -D0712 15:11:00.817 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[36] -D0712 15:11:00.817 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[36] -D0712 15:11:00.817 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[37] -D0712 15:11:00.817 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[37] -D0712 15:11:00.818 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[38] -D0712 15:11:00.818 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[38] -D0712 15:11:00.818 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[39] -D0712 15:11:00.818 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[39] -D0712 15:11:00.818 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[3] -D0712 15:11:00.818 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[3] -D0712 15:11:00.818 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[4] -D0712 15:11:00.818 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[4] -D0712 15:11:00.818 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[5] -D0712 15:11:00.818 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[5] -D0712 15:11:00.818 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[6] -D0712 15:11:00.818 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[6] -D0712 15:11:00.819 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[7] -D0712 15:11:00.819 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[7] -D0712 15:11:00.819 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[8] -D0712 15:11:00.819 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[8] -D0712 15:11:00.819 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[9] -D0712 15:11:00.819 tapa.core:542] instantiating workload.arb0_streams_kp1_workload[9] -D0712 15:11:00.819 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[0] -D0712 15:11:00.819 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[0] -D0712 15:11:00.819 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[10] -D0712 15:11:00.819 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[10] -D0712 15:11:00.819 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[11] -D0712 15:11:00.819 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[11] -D0712 15:11:00.820 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[12] -D0712 15:11:00.820 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[12] -D0712 15:11:00.820 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[13] -D0712 15:11:00.820 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[13] -D0712 15:11:00.820 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[14] -D0712 15:11:00.820 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[14] -D0712 15:11:00.820 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[15] -D0712 15:11:00.820 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[15] -D0712 15:11:00.820 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[16] -D0712 15:11:00.820 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[16] -D0712 15:11:00.820 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[17] -D0712 15:11:00.820 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[17] -D0712 15:11:00.821 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[18] -D0712 15:11:00.821 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[18] -D0712 15:11:00.821 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[19] -D0712 15:11:00.821 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[19] -D0712 15:11:00.821 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[1] -D0712 15:11:00.821 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[1] -D0712 15:11:00.821 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[20] -D0712 15:11:00.821 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[20] -D0712 15:11:00.821 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[21] -D0712 15:11:00.821 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[21] -D0712 15:11:00.821 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[22] -D0712 15:11:00.821 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[22] -D0712 15:11:00.821 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[23] -D0712 15:11:00.821 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[23] -D0712 15:11:00.822 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[24] -D0712 15:11:00.822 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[24] -D0712 15:11:00.822 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[25] -D0712 15:11:00.822 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[25] -D0712 15:11:00.822 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[26] -D0712 15:11:00.822 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[26] -D0712 15:11:00.822 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[27] -D0712 15:11:00.822 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[27] -D0712 15:11:00.822 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[28] -D0712 15:11:00.822 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[28] -D0712 15:11:00.822 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[29] -D0712 15:11:00.822 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[29] -D0712 15:11:00.822 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[2] -D0712 15:11:00.822 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[2] -D0712 15:11:00.823 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[30] -D0712 15:11:00.823 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[30] -D0712 15:11:00.823 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[31] -D0712 15:11:00.823 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[31] -D0712 15:11:00.823 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[32] -D0712 15:11:00.823 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[32] -D0712 15:11:00.823 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[33] -D0712 15:11:00.823 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[33] -D0712 15:11:00.823 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[34] -D0712 15:11:00.823 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[34] -D0712 15:11:00.823 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[35] -D0712 15:11:00.823 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[35] -D0712 15:11:00.823 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[36] -D0712 15:11:00.823 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[36] -D0712 15:11:00.824 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[37] -D0712 15:11:00.824 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[37] -D0712 15:11:00.824 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[38] -D0712 15:11:00.824 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[38] -D0712 15:11:00.824 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[39] -D0712 15:11:00.824 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[39] -D0712 15:11:00.824 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[3] -D0712 15:11:00.824 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[3] -D0712 15:11:00.824 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[4] -D0712 15:11:00.824 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[4] -D0712 15:11:00.824 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[5] -D0712 15:11:00.824 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[5] -D0712 15:11:00.824 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[6] -D0712 15:11:00.824 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[6] -D0712 15:11:00.825 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[7] -D0712 15:11:00.825 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[7] -D0712 15:11:00.825 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[8] -D0712 15:11:00.825 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[8] -D0712 15:11:00.825 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[9] -D0712 15:11:00.825 tapa.core:542] instantiating workload.arb1_streams_kp0_workload[9] -D0712 15:11:00.825 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[0] -D0712 15:11:00.825 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[0] -D0712 15:11:00.825 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[10] -D0712 15:11:00.825 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[10] -D0712 15:11:00.825 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[11] -D0712 15:11:00.825 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[11] -D0712 15:11:00.825 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[12] -D0712 15:11:00.825 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[12] -D0712 15:11:00.826 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[13] -D0712 15:11:00.826 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[13] -D0712 15:11:00.826 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[14] -D0712 15:11:00.826 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[14] -D0712 15:11:00.826 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[15] -D0712 15:11:00.826 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[15] -D0712 15:11:00.826 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[16] -D0712 15:11:00.826 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[16] -D0712 15:11:00.826 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[17] -D0712 15:11:00.826 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[17] -D0712 15:11:00.826 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[18] -D0712 15:11:00.826 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[18] -D0712 15:11:00.826 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[19] -D0712 15:11:00.826 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[19] -D0712 15:11:00.827 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[1] -D0712 15:11:00.827 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[1] -D0712 15:11:00.827 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[20] -D0712 15:11:00.827 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[20] -D0712 15:11:00.827 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[21] -D0712 15:11:00.827 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[21] -D0712 15:11:00.827 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[22] -D0712 15:11:00.827 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[22] -D0712 15:11:00.827 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[23] -D0712 15:11:00.827 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[23] -D0712 15:11:00.827 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[24] -D0712 15:11:00.827 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[24] -D0712 15:11:00.827 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[25] -D0712 15:11:00.827 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[25] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[26] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[26] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[27] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[27] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[28] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[28] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[29] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[29] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[2] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[2] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[30] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[30] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[31] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[31] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[32] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[32] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[33] -D0712 15:11:00.828 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[33] -D0712 15:11:00.829 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[34] -D0712 15:11:00.829 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[34] -D0712 15:11:00.829 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[35] -D0712 15:11:00.829 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[35] -D0712 15:11:00.829 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[36] -D0712 15:11:00.829 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[36] -D0712 15:11:00.829 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[37] -D0712 15:11:00.829 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[37] -D0712 15:11:00.829 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[38] -D0712 15:11:00.829 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[38] -D0712 15:11:00.829 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[39] -D0712 15:11:00.829 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[39] -D0712 15:11:00.829 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[3] -D0712 15:11:00.829 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[3] -D0712 15:11:00.829 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[4] -D0712 15:11:00.829 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[4] -D0712 15:11:00.830 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[5] -D0712 15:11:00.830 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[5] -D0712 15:11:00.830 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[6] -D0712 15:11:00.830 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[6] -D0712 15:11:00.830 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[7] -D0712 15:11:00.830 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[7] -D0712 15:11:00.830 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[8] -D0712 15:11:00.830 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[8] -D0712 15:11:00.830 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[9] -D0712 15:11:00.830 tapa.core:542] instantiating workload.arb1_streams_kp1_workload[9] -D0712 15:11:00.830 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[0] -D0712 15:11:00.830 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[0] -D0712 15:11:00.830 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[10] -D0712 15:11:00.830 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[10] -D0712 15:11:00.830 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[11] -D0712 15:11:00.830 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[11] -D0712 15:11:00.831 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[12] -D0712 15:11:00.831 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[12] -D0712 15:11:00.831 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[13] -D0712 15:11:00.831 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[13] -D0712 15:11:00.831 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[14] -D0712 15:11:00.831 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[14] -D0712 15:11:00.831 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[15] -D0712 15:11:00.831 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[15] -D0712 15:11:00.831 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[16] -D0712 15:11:00.831 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[16] -D0712 15:11:00.831 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[17] -D0712 15:11:00.831 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[17] -D0712 15:11:00.831 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[18] -D0712 15:11:00.831 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[18] -D0712 15:11:00.831 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[19] -D0712 15:11:00.831 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[19] -D0712 15:11:00.832 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[1] -D0712 15:11:00.832 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[1] -D0712 15:11:00.832 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[20] -D0712 15:11:00.832 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[20] -D0712 15:11:00.832 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[21] -D0712 15:11:00.832 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[21] -D0712 15:11:00.832 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[22] -D0712 15:11:00.832 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[22] -D0712 15:11:00.832 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[23] -D0712 15:11:00.832 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[23] -D0712 15:11:00.832 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[24] -D0712 15:11:00.832 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[24] -D0712 15:11:00.832 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[25] -D0712 15:11:00.832 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[25] -D0712 15:11:00.832 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[26] -D0712 15:11:00.832 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[26] -D0712 15:11:00.833 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[27] -D0712 15:11:00.833 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[27] -D0712 15:11:00.833 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[28] -D0712 15:11:00.833 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[28] -D0712 15:11:00.833 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[29] -D0712 15:11:00.833 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[29] -D0712 15:11:00.833 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[2] -D0712 15:11:00.833 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[2] -D0712 15:11:00.833 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[30] -D0712 15:11:00.833 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[30] -D0712 15:11:00.833 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[31] -D0712 15:11:00.833 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[31] -D0712 15:11:00.833 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[32] -D0712 15:11:00.833 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[32] -D0712 15:11:00.833 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[33] -D0712 15:11:00.833 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[33] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[34] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[34] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[35] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[35] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[36] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[36] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[37] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[37] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[38] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[38] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[39] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[39] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[3] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[3] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[4] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[4] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[5] -D0712 15:11:00.834 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[5] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[6] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[6] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[7] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[7] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[8] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[8] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[9] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp0_workload[9] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[0] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[0] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[10] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[10] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[11] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[11] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[12] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[12] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[13] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[13] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[14] -D0712 15:11:00.835 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[14] -D0712 15:11:00.836 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[15] -D0712 15:11:00.836 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[15] -D0712 15:11:00.836 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[16] -D0712 15:11:00.836 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[16] -D0712 15:11:00.836 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[17] -D0712 15:11:00.836 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[17] -D0712 15:11:00.836 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[18] -D0712 15:11:00.836 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[18] -D0712 15:11:00.836 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[19] -D0712 15:11:00.836 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[19] -D0712 15:11:00.836 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[1] -D0712 15:11:00.836 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[1] -D0712 15:11:00.836 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[20] -D0712 15:11:00.836 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[20] -D0712 15:11:00.836 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[21] -D0712 15:11:00.836 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[21] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[22] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[22] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[23] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[23] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[24] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[24] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[25] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[25] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[26] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[26] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[27] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[27] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[28] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[28] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[29] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[29] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[2] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[2] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[30] -D0712 15:11:00.837 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[30] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[31] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[31] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[32] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[32] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[33] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[33] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[34] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[34] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[35] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[35] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[36] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[36] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[37] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[37] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[38] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[38] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[39] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[39] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[3] -D0712 15:11:00.838 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[3] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[4] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[4] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[5] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[5] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[6] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[6] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[7] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[7] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[8] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[8] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[9] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb2_streams_kp1_workload[9] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.839 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.840 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.841 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.842 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.843 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.844 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage1_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_0_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.845 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_1_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_2_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.846 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_3_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_4_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_5_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.847 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_6_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arb_stage2_outputs_bloom_arbiter_tree_singlepartition_7_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_0_workload[4] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_0_workload[4] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_0_workload[5] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_0_workload[5] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_0_workload[6] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_0_workload[6] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_0_workload[7] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_0_workload[7] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.848 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_1_workload[4] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_1_workload[4] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_1_workload[5] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_1_workload[5] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_1_workload[6] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_1_workload[6] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_1_workload[7] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_1_workload[7] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_2_workload[4] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_2_workload[4] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_2_workload[5] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_2_workload[5] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_2_workload[6] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_2_workload[6] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_2_workload[7] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_2_workload[7] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.849 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_3_workload[4] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_3_workload[4] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_3_workload[5] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_3_workload[5] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_3_workload[6] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_3_workload[6] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_3_workload[7] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_3_workload[7] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_4_workload[4] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_4_workload[4] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_4_workload[5] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_4_workload[5] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_4_workload[6] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_4_workload[6] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_4_workload[7] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_4_workload[7] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.850 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.851 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.851 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.851 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.851 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.851 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.851 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.851 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_5_workload[4] -D0712 15:11:00.851 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_5_workload[4] -D0712 15:11:00.851 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_5_workload[5] -D0712 15:11:00.851 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_5_workload[5] -D0712 15:11:00.851 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_5_workload[6] -D0712 15:11:00.851 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_5_workload[6] -D0712 15:11:00.851 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_5_workload[7] -D0712 15:11:00.851 tapa.core:542] instantiating workload.arbtree_outputs_bloom_single_arbiter_5_workload[7] -D0712 15:11:00.851 tapa.core:542] instantiating workload.bv_load_stream_0_workload -D0712 15:11:00.851 tapa.core:542] instantiating workload.bv_load_stream_0_workload -D0712 15:11:00.851 tapa.core:542] instantiating workload.bv_load_stream_1_workload -D0712 15:11:00.851 tapa.core:542] instantiating workload.bv_load_stream_1_workload -D0712 15:11:00.851 tapa.core:542] instantiating workload.bv_load_stream_2_workload -D0712 15:11:00.851 tapa.core:542] instantiating workload.bv_load_stream_2_workload -D0712 15:11:00.851 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp0_workload[0] -D0712 15:11:00.851 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp0_workload[0] -D0712 15:11:00.852 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp0_workload[1] -D0712 15:11:00.852 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp0_workload[1] -D0712 15:11:00.852 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp0_workload[2] -D0712 15:11:00.852 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp0_workload[2] -D0712 15:11:00.852 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp0_workload[3] -D0712 15:11:00.852 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp0_workload[3] -D0712 15:11:00.852 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp0_workload[4] -D0712 15:11:00.852 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp0_workload[4] -D0712 15:11:00.852 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp0_workload[5] -D0712 15:11:00.852 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp0_workload[5] -D0712 15:11:00.852 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp0_workload[6] -D0712 15:11:00.852 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp0_workload[6] -D0712 15:11:00.852 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp0_workload[7] -D0712 15:11:00.852 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp0_workload[7] -D0712 15:11:00.852 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp1_workload[0] -D0712 15:11:00.852 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp1_workload[0] -D0712 15:11:00.853 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp1_workload[1] -D0712 15:11:00.853 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp1_workload[1] -D0712 15:11:00.853 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp1_workload[2] -D0712 15:11:00.853 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp1_workload[2] -D0712 15:11:00.853 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp1_workload[3] -D0712 15:11:00.853 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp1_workload[3] -D0712 15:11:00.853 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp1_workload[4] -D0712 15:11:00.853 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp1_workload[4] -D0712 15:11:00.853 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp1_workload[5] -D0712 15:11:00.853 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp1_workload[5] -D0712 15:11:00.853 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp1_workload[6] -D0712 15:11:00.853 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp1_workload[6] -D0712 15:11:00.853 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp1_workload[7] -D0712 15:11:00.853 tapa.core:542] instantiating workload.bv_lookup_stream_h0_kp1_workload[7] -D0712 15:11:00.853 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp0_workload[0] -D0712 15:11:00.853 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp0_workload[0] -D0712 15:11:00.854 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp0_workload[1] -D0712 15:11:00.854 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp0_workload[1] -D0712 15:11:00.854 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp0_workload[2] -D0712 15:11:00.854 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp0_workload[2] -D0712 15:11:00.854 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp0_workload[3] -D0712 15:11:00.854 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp0_workload[3] -D0712 15:11:00.854 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp0_workload[4] -D0712 15:11:00.854 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp0_workload[4] -D0712 15:11:00.854 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp0_workload[5] -D0712 15:11:00.854 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp0_workload[5] -D0712 15:11:00.854 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp0_workload[6] -D0712 15:11:00.854 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp0_workload[6] -D0712 15:11:00.854 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp0_workload[7] -D0712 15:11:00.854 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp0_workload[7] -D0712 15:11:00.854 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp1_workload[0] -D0712 15:11:00.854 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp1_workload[0] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp1_workload[1] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp1_workload[1] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp1_workload[2] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp1_workload[2] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp1_workload[3] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp1_workload[3] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp1_workload[4] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp1_workload[4] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp1_workload[5] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp1_workload[5] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp1_workload[6] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp1_workload[6] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp1_workload[7] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h1_kp1_workload[7] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp0_workload[0] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp0_workload[0] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp0_workload[1] -D0712 15:11:00.855 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp0_workload[1] -D0712 15:11:00.856 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp0_workload[2] -D0712 15:11:00.856 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp0_workload[2] -D0712 15:11:00.856 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp0_workload[3] -D0712 15:11:00.856 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp0_workload[3] -D0712 15:11:00.856 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp0_workload[4] -D0712 15:11:00.856 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp0_workload[4] -D0712 15:11:00.856 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp0_workload[5] -D0712 15:11:00.856 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp0_workload[5] -D0712 15:11:00.856 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp0_workload[6] -D0712 15:11:00.856 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp0_workload[6] -D0712 15:11:00.856 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp0_workload[7] -D0712 15:11:00.856 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp0_workload[7] -D0712 15:11:00.856 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp1_workload[0] -D0712 15:11:00.856 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp1_workload[0] -D0712 15:11:00.856 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp1_workload[1] -D0712 15:11:00.856 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp1_workload[1] -D0712 15:11:00.857 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp1_workload[2] -D0712 15:11:00.857 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp1_workload[2] -D0712 15:11:00.857 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp1_workload[3] -D0712 15:11:00.857 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp1_workload[3] -D0712 15:11:00.857 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp1_workload[4] -D0712 15:11:00.857 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp1_workload[4] -D0712 15:11:00.857 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp1_workload[5] -D0712 15:11:00.857 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp1_workload[5] -D0712 15:11:00.857 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp1_workload[6] -D0712 15:11:00.857 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp1_workload[6] -D0712 15:11:00.857 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp1_workload[7] -D0712 15:11:00.857 tapa.core:542] instantiating workload.bv_lookup_stream_h2_kp1_workload[7] -D0712 15:11:00.857 tapa.core:542] instantiating workload.hash_stream_h0_kp0_workload[0] -D0712 15:11:00.857 tapa.core:542] instantiating workload.hash_stream_h0_kp0_workload[0] -D0712 15:11:00.857 tapa.core:542] instantiating workload.hash_stream_h0_kp0_workload[1] -D0712 15:11:00.857 tapa.core:542] instantiating workload.hash_stream_h0_kp0_workload[1] -D0712 15:11:00.857 tapa.core:542] instantiating workload.hash_stream_h0_kp0_workload[2] -D0712 15:11:00.857 tapa.core:542] instantiating workload.hash_stream_h0_kp0_workload[2] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h0_kp0_workload[3] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h0_kp0_workload[3] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h0_kp0_workload[4] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h0_kp0_workload[4] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h0_kp1_workload[0] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h0_kp1_workload[0] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h0_kp1_workload[1] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h0_kp1_workload[1] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h0_kp1_workload[2] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h0_kp1_workload[2] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h0_kp1_workload[3] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h0_kp1_workload[3] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h0_kp1_workload[4] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h0_kp1_workload[4] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp0_workload[0] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp0_workload[0] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp0_workload[1] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp0_workload[1] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp0_workload[2] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp0_workload[2] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp0_workload[3] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp0_workload[3] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp0_workload[4] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp0_workload[4] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp1_workload[0] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp1_workload[0] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp1_workload[1] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp1_workload[1] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp1_workload[2] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp1_workload[2] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp1_workload[3] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp1_workload[3] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp1_workload[4] -D0712 15:11:00.858 tapa.core:542] instantiating workload.hash_stream_h1_kp1_workload[4] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp0_workload[0] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp0_workload[0] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp0_workload[1] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp0_workload[1] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp0_workload[2] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp0_workload[2] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp0_workload[3] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp0_workload[3] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp0_workload[4] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp0_workload[4] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp1_workload[0] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp1_workload[0] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp1_workload[1] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp1_workload[1] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp1_workload[2] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp1_workload[2] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp1_workload[3] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp1_workload[3] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp1_workload[4] -D0712 15:11:00.859 tapa.core:542] instantiating workload.hash_stream_h2_kp1_workload[4] -D0712 15:11:00.859 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[0] -D0712 15:11:00.859 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[0] -D0712 15:11:00.859 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[10] -D0712 15:11:00.859 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[10] -D0712 15:11:00.859 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[11] -D0712 15:11:00.859 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[11] -D0712 15:11:00.860 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[12] -D0712 15:11:00.860 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[12] -D0712 15:11:00.860 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[13] -D0712 15:11:00.860 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[13] -D0712 15:11:00.860 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[14] -D0712 15:11:00.860 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[14] -D0712 15:11:00.860 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[15] -D0712 15:11:00.860 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[15] -D0712 15:11:00.860 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[16] -D0712 15:11:00.860 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[16] -D0712 15:11:00.860 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[17] -D0712 15:11:00.860 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[17] -D0712 15:11:00.860 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[18] -D0712 15:11:00.860 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[18] -D0712 15:11:00.860 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[19] -D0712 15:11:00.860 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[19] -D0712 15:11:00.861 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[1] -D0712 15:11:00.861 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[1] -D0712 15:11:00.861 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[20] -D0712 15:11:00.861 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[20] -D0712 15:11:00.861 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[21] -D0712 15:11:00.861 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[21] -D0712 15:11:00.861 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[22] -D0712 15:11:00.861 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[22] -D0712 15:11:00.861 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[23] -D0712 15:11:00.861 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[23] -D0712 15:11:00.861 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[24] -D0712 15:11:00.861 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[24] -D0712 15:11:00.861 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[25] -D0712 15:11:00.861 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[25] -D0712 15:11:00.861 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[26] -D0712 15:11:00.861 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[26] -D0712 15:11:00.862 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[27] -D0712 15:11:00.862 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[27] -D0712 15:11:00.862 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[28] -D0712 15:11:00.862 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[28] -D0712 15:11:00.862 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[29] -D0712 15:11:00.862 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[29] -D0712 15:11:00.862 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[2] -D0712 15:11:00.862 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[2] -D0712 15:11:00.862 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[30] -D0712 15:11:00.862 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[30] -D0712 15:11:00.862 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[31] -D0712 15:11:00.862 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[31] -D0712 15:11:00.862 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[32] -D0712 15:11:00.862 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[32] -D0712 15:11:00.862 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[33] -D0712 15:11:00.862 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[33] -D0712 15:11:00.863 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[34] -D0712 15:11:00.863 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[34] -D0712 15:11:00.863 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[35] -D0712 15:11:00.863 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[35] -D0712 15:11:00.863 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[36] -D0712 15:11:00.863 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[36] -D0712 15:11:00.863 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[37] -D0712 15:11:00.863 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[37] -D0712 15:11:00.863 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[38] -D0712 15:11:00.863 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[38] -D0712 15:11:00.863 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[39] -D0712 15:11:00.863 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[39] -D0712 15:11:00.863 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[3] -D0712 15:11:00.863 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[3] -D0712 15:11:00.863 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[4] -D0712 15:11:00.863 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[4] -D0712 15:11:00.864 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[5] -D0712 15:11:00.864 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[5] -D0712 15:11:00.864 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[6] -D0712 15:11:00.864 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[6] -D0712 15:11:00.864 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[7] -D0712 15:11:00.864 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[7] -D0712 15:11:00.864 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[8] -D0712 15:11:00.864 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[8] -D0712 15:11:00.864 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[9] -D0712 15:11:00.864 tapa.core:542] instantiating workload.inter_shuf0_stm_kp0_workload[9] -D0712 15:11:00.864 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[0] -D0712 15:11:00.864 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[0] -D0712 15:11:00.864 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[10] -D0712 15:11:00.864 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[10] -D0712 15:11:00.864 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[11] -D0712 15:11:00.864 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[11] -D0712 15:11:00.865 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[12] -D0712 15:11:00.865 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[12] -D0712 15:11:00.865 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[13] -D0712 15:11:00.865 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[13] -D0712 15:11:00.865 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[14] -D0712 15:11:00.865 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[14] -D0712 15:11:00.865 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[15] -D0712 15:11:00.865 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[15] -D0712 15:11:00.865 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[16] -D0712 15:11:00.865 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[16] -D0712 15:11:00.865 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[17] -D0712 15:11:00.865 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[17] -D0712 15:11:00.865 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[18] -D0712 15:11:00.865 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[18] -D0712 15:11:00.865 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[19] -D0712 15:11:00.865 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[19] -D0712 15:11:00.866 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[1] -D0712 15:11:00.866 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[1] -D0712 15:11:00.866 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[20] -D0712 15:11:00.866 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[20] -D0712 15:11:00.866 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[21] -D0712 15:11:00.866 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[21] -D0712 15:11:00.866 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[22] -D0712 15:11:00.866 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[22] -D0712 15:11:00.866 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[23] -D0712 15:11:00.866 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[23] -D0712 15:11:00.866 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[24] -D0712 15:11:00.866 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[24] -D0712 15:11:00.866 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[25] -D0712 15:11:00.866 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[25] -D0712 15:11:00.866 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[26] -D0712 15:11:00.866 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[26] -D0712 15:11:00.867 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[27] -D0712 15:11:00.867 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[27] -D0712 15:11:00.867 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[28] -D0712 15:11:00.867 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[28] -D0712 15:11:00.867 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[29] -D0712 15:11:00.867 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[29] -D0712 15:11:00.867 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[2] -D0712 15:11:00.867 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[2] -D0712 15:11:00.867 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[30] -D0712 15:11:00.867 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[30] -D0712 15:11:00.867 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[31] -D0712 15:11:00.867 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[31] -D0712 15:11:00.867 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[32] -D0712 15:11:00.867 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[32] -D0712 15:11:00.868 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[33] -D0712 15:11:00.868 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[33] -D0712 15:11:00.868 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[34] -D0712 15:11:00.868 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[34] -D0712 15:11:00.868 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[35] -D0712 15:11:00.868 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[35] -D0712 15:11:00.868 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[36] -D0712 15:11:00.868 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[36] -D0712 15:11:00.868 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[37] -D0712 15:11:00.868 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[37] -D0712 15:11:00.868 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[38] -D0712 15:11:00.868 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[38] -D0712 15:11:00.868 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[39] -D0712 15:11:00.868 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[39] -D0712 15:11:00.868 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[3] -D0712 15:11:00.868 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[3] -D0712 15:11:00.869 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[4] -D0712 15:11:00.869 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[4] -D0712 15:11:00.869 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[5] -D0712 15:11:00.869 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[5] -D0712 15:11:00.869 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[6] -D0712 15:11:00.869 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[6] -D0712 15:11:00.869 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[7] -D0712 15:11:00.869 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[7] -D0712 15:11:00.869 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[8] -D0712 15:11:00.869 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[8] -D0712 15:11:00.869 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[9] -D0712 15:11:00.869 tapa.core:542] instantiating workload.inter_shuf0_stm_kp1_workload[9] -D0712 15:11:00.869 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[0] -D0712 15:11:00.869 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[0] -D0712 15:11:00.870 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[10] -D0712 15:11:00.870 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[10] -D0712 15:11:00.870 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[11] -D0712 15:11:00.870 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[11] -D0712 15:11:00.870 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[12] -D0712 15:11:00.870 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[12] -D0712 15:11:00.870 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[13] -D0712 15:11:00.870 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[13] -D0712 15:11:00.870 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[14] -D0712 15:11:00.870 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[14] -D0712 15:11:00.870 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[15] -D0712 15:11:00.870 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[15] -D0712 15:11:00.870 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[16] -D0712 15:11:00.870 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[16] -D0712 15:11:00.870 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[17] -D0712 15:11:00.870 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[17] -D0712 15:11:00.871 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[18] -D0712 15:11:00.871 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[18] -D0712 15:11:00.871 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[19] -D0712 15:11:00.871 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[19] -D0712 15:11:00.871 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[1] -D0712 15:11:00.871 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[1] -D0712 15:11:00.871 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[20] -D0712 15:11:00.871 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[20] -D0712 15:11:00.871 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[21] -D0712 15:11:00.871 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[21] -D0712 15:11:00.871 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[22] -D0712 15:11:00.871 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[22] -D0712 15:11:00.871 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[23] -D0712 15:11:00.871 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[23] -D0712 15:11:00.871 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[24] -D0712 15:11:00.871 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[24] -D0712 15:11:00.872 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[25] -D0712 15:11:00.872 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[25] -D0712 15:11:00.872 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[26] -D0712 15:11:00.872 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[26] -D0712 15:11:00.872 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[27] -D0712 15:11:00.872 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[27] -D0712 15:11:00.872 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[28] -D0712 15:11:00.872 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[28] -D0712 15:11:00.872 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[29] -D0712 15:11:00.872 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[29] -D0712 15:11:00.872 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[2] -D0712 15:11:00.872 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[2] -D0712 15:11:00.872 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[30] -D0712 15:11:00.872 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[30] -D0712 15:11:00.872 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[31] -D0712 15:11:00.872 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[31] -D0712 15:11:00.873 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[32] -D0712 15:11:00.873 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[32] -D0712 15:11:00.873 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[33] -D0712 15:11:00.873 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[33] -D0712 15:11:00.873 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[34] -D0712 15:11:00.873 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[34] -D0712 15:11:00.873 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[35] -D0712 15:11:00.873 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[35] -D0712 15:11:00.873 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[36] -D0712 15:11:00.873 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[36] -D0712 15:11:00.873 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[37] -D0712 15:11:00.873 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[37] -D0712 15:11:00.873 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[38] -D0712 15:11:00.873 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[38] -D0712 15:11:00.874 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[39] -D0712 15:11:00.874 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[39] -D0712 15:11:00.874 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[3] -D0712 15:11:00.874 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[3] -D0712 15:11:00.874 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[4] -D0712 15:11:00.874 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[4] -D0712 15:11:00.874 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[5] -D0712 15:11:00.874 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[5] -D0712 15:11:00.874 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[6] -D0712 15:11:00.874 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[6] -D0712 15:11:00.874 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[7] -D0712 15:11:00.874 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[7] -D0712 15:11:00.874 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[8] -D0712 15:11:00.874 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[8] -D0712 15:11:00.874 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[9] -D0712 15:11:00.874 tapa.core:542] instantiating workload.inter_shuf1_stm_kp0_workload[9] -D0712 15:11:00.875 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[0] -D0712 15:11:00.875 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[0] -D0712 15:11:00.875 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[10] -D0712 15:11:00.875 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[10] -D0712 15:11:00.875 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[11] -D0712 15:11:00.875 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[11] -D0712 15:11:00.875 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[12] -D0712 15:11:00.875 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[12] -D0712 15:11:00.875 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[13] -D0712 15:11:00.875 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[13] -D0712 15:11:00.875 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[14] -D0712 15:11:00.875 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[14] -D0712 15:11:00.875 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[15] -D0712 15:11:00.875 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[15] -D0712 15:11:00.876 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[16] -D0712 15:11:00.876 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[16] -D0712 15:11:00.876 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[17] -D0712 15:11:00.876 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[17] -D0712 15:11:00.876 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[18] -D0712 15:11:00.876 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[18] -D0712 15:11:00.876 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[19] -D0712 15:11:00.876 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[19] -D0712 15:11:00.876 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[1] -D0712 15:11:00.876 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[1] -D0712 15:11:00.876 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[20] -D0712 15:11:00.876 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[20] -D0712 15:11:00.876 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[21] -D0712 15:11:00.876 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[21] -D0712 15:11:00.876 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[22] -D0712 15:11:00.876 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[22] -D0712 15:11:00.877 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[23] -D0712 15:11:00.877 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[23] -D0712 15:11:00.877 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[24] -D0712 15:11:00.877 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[24] -D0712 15:11:00.877 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[25] -D0712 15:11:00.877 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[25] -D0712 15:11:00.877 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[26] -D0712 15:11:00.877 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[26] -D0712 15:11:00.877 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[27] -D0712 15:11:00.877 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[27] -D0712 15:11:00.877 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[28] -D0712 15:11:00.877 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[28] -D0712 15:11:00.877 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[29] -D0712 15:11:00.877 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[29] -D0712 15:11:00.877 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[2] -D0712 15:11:00.877 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[2] -D0712 15:11:00.878 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[30] -D0712 15:11:00.878 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[30] -D0712 15:11:00.878 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[31] -D0712 15:11:00.878 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[31] -D0712 15:11:00.878 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[32] -D0712 15:11:00.878 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[32] -D0712 15:11:00.878 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[33] -D0712 15:11:00.878 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[33] -D0712 15:11:00.878 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[34] -D0712 15:11:00.878 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[34] -D0712 15:11:00.878 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[35] -D0712 15:11:00.878 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[35] -D0712 15:11:00.878 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[36] -D0712 15:11:00.878 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[36] -D0712 15:11:00.879 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[37] -D0712 15:11:00.879 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[37] -D0712 15:11:00.879 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[38] -D0712 15:11:00.879 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[38] -D0712 15:11:00.879 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[39] -D0712 15:11:00.879 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[39] -D0712 15:11:00.879 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[3] -D0712 15:11:00.879 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[3] -D0712 15:11:00.879 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[4] -D0712 15:11:00.879 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[4] -D0712 15:11:00.879 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[5] -D0712 15:11:00.879 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[5] -D0712 15:11:00.879 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[6] -D0712 15:11:00.879 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[6] -D0712 15:11:00.879 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[7] -D0712 15:11:00.879 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[7] -D0712 15:11:00.880 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[8] -D0712 15:11:00.880 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[8] -D0712 15:11:00.880 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[9] -D0712 15:11:00.880 tapa.core:542] instantiating workload.inter_shuf1_stm_kp1_workload[9] -D0712 15:11:00.880 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[0] -D0712 15:11:00.880 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[0] -D0712 15:11:00.880 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[10] -D0712 15:11:00.880 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[10] -D0712 15:11:00.880 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[11] -D0712 15:11:00.880 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[11] -D0712 15:11:00.880 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[12] -D0712 15:11:00.880 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[12] -D0712 15:11:00.880 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[13] -D0712 15:11:00.880 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[13] -D0712 15:11:00.881 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[14] -D0712 15:11:00.881 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[14] -D0712 15:11:00.881 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[15] -D0712 15:11:00.881 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[15] -D0712 15:11:00.881 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[16] -D0712 15:11:00.881 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[16] -D0712 15:11:00.881 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[17] -D0712 15:11:00.881 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[17] -D0712 15:11:00.881 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[18] -D0712 15:11:00.881 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[18] -D0712 15:11:00.881 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[19] -D0712 15:11:00.881 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[19] -D0712 15:11:00.881 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[1] -D0712 15:11:00.881 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[1] -D0712 15:11:00.881 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[20] -D0712 15:11:00.881 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[20] -D0712 15:11:00.882 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[21] -D0712 15:11:00.882 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[21] -D0712 15:11:00.882 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[22] -D0712 15:11:00.882 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[22] -D0712 15:11:00.882 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[23] -D0712 15:11:00.882 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[23] -D0712 15:11:00.882 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[24] -D0712 15:11:00.882 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[24] -D0712 15:11:00.882 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[25] -D0712 15:11:00.882 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[25] -D0712 15:11:00.882 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[26] -D0712 15:11:00.882 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[26] -D0712 15:11:00.882 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[27] -D0712 15:11:00.882 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[27] -D0712 15:11:00.883 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[28] -D0712 15:11:00.883 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[28] -D0712 15:11:00.883 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[29] -D0712 15:11:00.883 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[29] -D0712 15:11:00.883 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[2] -D0712 15:11:00.883 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[2] -D0712 15:11:00.883 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[30] -D0712 15:11:00.883 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[30] -D0712 15:11:00.883 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[31] -D0712 15:11:00.883 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[31] -D0712 15:11:00.883 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[32] -D0712 15:11:00.883 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[32] -D0712 15:11:00.883 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[33] -D0712 15:11:00.883 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[33] -D0712 15:11:00.883 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[34] -D0712 15:11:00.883 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[34] -D0712 15:11:00.884 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[35] -D0712 15:11:00.884 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[35] -D0712 15:11:00.884 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[36] -D0712 15:11:00.884 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[36] -D0712 15:11:00.884 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[37] -D0712 15:11:00.884 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[37] -D0712 15:11:00.884 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[38] -D0712 15:11:00.884 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[38] -D0712 15:11:00.884 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[39] -D0712 15:11:00.884 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[39] -D0712 15:11:00.884 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[3] -D0712 15:11:00.884 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[3] -D0712 15:11:00.884 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[4] -D0712 15:11:00.884 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[4] -D0712 15:11:00.884 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[5] -D0712 15:11:00.884 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[5] -D0712 15:11:00.885 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[6] -D0712 15:11:00.885 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[6] -D0712 15:11:00.885 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[7] -D0712 15:11:00.885 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[7] -D0712 15:11:00.885 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[8] -D0712 15:11:00.885 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[8] -D0712 15:11:00.885 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[9] -D0712 15:11:00.885 tapa.core:542] instantiating workload.inter_shuf2_stm_kp0_workload[9] -D0712 15:11:00.885 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[0] -D0712 15:11:00.885 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[0] -D0712 15:11:00.885 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[10] -D0712 15:11:00.885 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[10] -D0712 15:11:00.885 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[11] -D0712 15:11:00.885 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[11] -D0712 15:11:00.886 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[12] -D0712 15:11:00.886 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[12] -D0712 15:11:00.886 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[13] -D0712 15:11:00.886 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[13] -D0712 15:11:00.886 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[14] -D0712 15:11:00.886 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[14] -D0712 15:11:00.886 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[15] -D0712 15:11:00.886 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[15] -D0712 15:11:00.886 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[16] -D0712 15:11:00.886 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[16] -D0712 15:11:00.886 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[17] -D0712 15:11:00.886 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[17] -D0712 15:11:00.886 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[18] -D0712 15:11:00.886 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[18] -D0712 15:11:00.886 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[19] -D0712 15:11:00.886 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[19] -D0712 15:11:00.887 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[1] -D0712 15:11:00.887 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[1] -D0712 15:11:00.887 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[20] -D0712 15:11:00.887 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[20] -D0712 15:11:00.887 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[21] -D0712 15:11:00.887 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[21] -D0712 15:11:00.887 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[22] -D0712 15:11:00.887 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[22] -D0712 15:11:00.887 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[23] -D0712 15:11:00.887 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[23] -D0712 15:11:00.887 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[24] -D0712 15:11:00.887 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[24] -D0712 15:11:00.887 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[25] -D0712 15:11:00.887 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[25] -D0712 15:11:00.888 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[26] -D0712 15:11:00.888 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[26] -D0712 15:11:00.888 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[27] -D0712 15:11:00.888 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[27] -D0712 15:11:00.888 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[28] -D0712 15:11:00.888 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[28] -D0712 15:11:00.888 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[29] -D0712 15:11:00.888 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[29] -D0712 15:11:00.888 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[2] -D0712 15:11:00.888 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[2] -D0712 15:11:00.888 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[30] -D0712 15:11:00.888 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[30] -D0712 15:11:00.888 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[31] -D0712 15:11:00.888 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[31] -D0712 15:11:00.888 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[32] -D0712 15:11:00.888 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[32] -D0712 15:11:00.889 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[33] -D0712 15:11:00.889 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[33] -D0712 15:11:00.889 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[34] -D0712 15:11:00.889 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[34] -D0712 15:11:00.889 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[35] -D0712 15:11:00.889 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[35] -D0712 15:11:00.889 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[36] -D0712 15:11:00.889 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[36] -D0712 15:11:00.889 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[37] -D0712 15:11:00.889 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[37] -D0712 15:11:00.889 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[38] -D0712 15:11:00.889 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[38] -D0712 15:11:00.889 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[39] -D0712 15:11:00.889 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[39] -D0712 15:11:00.889 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[3] -D0712 15:11:00.889 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[3] -D0712 15:11:00.890 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[4] -D0712 15:11:00.890 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[4] -D0712 15:11:00.890 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[5] -D0712 15:11:00.890 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[5] -D0712 15:11:00.890 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[6] -D0712 15:11:00.890 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[6] -D0712 15:11:00.890 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[7] -D0712 15:11:00.890 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[7] -D0712 15:11:00.890 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[8] -D0712 15:11:00.890 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[8] -D0712 15:11:00.890 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[9] -D0712 15:11:00.890 tapa.core:542] instantiating workload.inter_shuf2_stm_kp1_workload[9] -D0712 15:11:00.890 tapa.core:542] instantiating workload.key_stream_kp0_workload[0] -D0712 15:11:00.890 tapa.core:542] instantiating workload.key_stream_kp0_workload[0] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp0_workload[1] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp0_workload[1] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp0_workload[2] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp0_workload[2] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp0_workload[3] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp0_workload[3] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp0_workload[4] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp0_workload[4] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp1_workload[0] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp1_workload[0] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp1_workload[1] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp1_workload[1] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp1_workload[2] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp1_workload[2] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp1_workload[3] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp1_workload[3] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp1_workload[4] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_stream_kp1_workload[4] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_tmp_stream_0_kp0_workload[0] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_tmp_stream_0_kp0_workload[0] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_tmp_stream_0_kp0_workload[1] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_tmp_stream_0_kp0_workload[1] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_tmp_stream_0_kp0_workload[2] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_tmp_stream_0_kp0_workload[2] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_tmp_stream_0_kp1_workload[0] -D0712 15:11:00.891 tapa.core:542] instantiating workload.key_tmp_stream_0_kp1_workload[0] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_0_kp1_workload[1] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_0_kp1_workload[1] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_0_kp1_workload[2] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_0_kp1_workload[2] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_1_kp0_workload[0] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_1_kp0_workload[0] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_1_kp0_workload[1] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_1_kp0_workload[1] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_1_kp0_workload[2] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_1_kp0_workload[2] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_1_kp1_workload[0] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_1_kp1_workload[0] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_1_kp1_workload[1] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_1_kp1_workload[1] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_1_kp1_workload[2] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_1_kp1_workload[2] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_2_kp0_workload[0] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_2_kp0_workload[0] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_2_kp0_workload[1] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_2_kp0_workload[1] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_2_kp0_workload[2] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_2_kp0_workload[2] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_2_kp1_workload[0] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_2_kp1_workload[0] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_2_kp1_workload[1] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_2_kp1_workload[1] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_2_kp1_workload[2] -D0712 15:11:00.892 tapa.core:542] instantiating workload.key_tmp_stream_2_kp1_workload[2] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_3_kp0_workload[0] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_3_kp0_workload[0] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_3_kp0_workload[1] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_3_kp0_workload[1] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_3_kp0_workload[2] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_3_kp0_workload[2] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_3_kp1_workload[0] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_3_kp1_workload[0] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_3_kp1_workload[1] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_3_kp1_workload[1] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_3_kp1_workload[2] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_3_kp1_workload[2] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_4_kp0_workload[0] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_4_kp0_workload[0] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_4_kp0_workload[1] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_4_kp0_workload[1] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_4_kp0_workload[2] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_4_kp0_workload[2] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_4_kp1_workload[0] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_4_kp1_workload[0] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_4_kp1_workload[1] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_4_kp1_workload[1] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_4_kp1_workload[2] -D0712 15:11:00.893 tapa.core:542] instantiating workload.key_tmp_stream_4_kp1_workload[2] -D0712 15:11:00.893 tapa.core:542] instantiating workload.packed_output_stm_kp0_workload[0] -D0712 15:11:00.893 tapa.core:542] instantiating workload.packed_output_stm_kp0_workload[0] -D0712 15:11:00.893 tapa.core:542] instantiating workload.packed_output_stm_kp0_workload[1] -D0712 15:11:00.893 tapa.core:542] instantiating workload.packed_output_stm_kp0_workload[1] -D0712 15:11:00.893 tapa.core:542] instantiating workload.packed_output_stm_kp0_workload[2] -D0712 15:11:00.893 tapa.core:542] instantiating workload.packed_output_stm_kp0_workload[2] -D0712 15:11:00.894 tapa.core:542] instantiating workload.packed_output_stm_kp0_workload[3] -D0712 15:11:00.894 tapa.core:542] instantiating workload.packed_output_stm_kp0_workload[3] -D0712 15:11:00.894 tapa.core:542] instantiating workload.packed_output_stm_kp0_workload[4] -D0712 15:11:00.894 tapa.core:542] instantiating workload.packed_output_stm_kp0_workload[4] -D0712 15:11:00.894 tapa.core:542] instantiating workload.packed_output_stm_kp1_workload[0] -D0712 15:11:00.894 tapa.core:542] instantiating workload.packed_output_stm_kp1_workload[0] -D0712 15:11:00.894 tapa.core:542] instantiating workload.packed_output_stm_kp1_workload[1] -D0712 15:11:00.894 tapa.core:542] instantiating workload.packed_output_stm_kp1_workload[1] -D0712 15:11:00.894 tapa.core:542] instantiating workload.packed_output_stm_kp1_workload[2] -D0712 15:11:00.894 tapa.core:542] instantiating workload.packed_output_stm_kp1_workload[2] -D0712 15:11:00.894 tapa.core:542] instantiating workload.packed_output_stm_kp1_workload[3] -D0712 15:11:00.894 tapa.core:542] instantiating workload.packed_output_stm_kp1_workload[3] -D0712 15:11:00.894 tapa.core:542] instantiating workload.packed_output_stm_kp1_workload[4] -D0712 15:11:00.894 tapa.core:542] instantiating workload.packed_output_stm_kp1_workload[4] -D0712 15:11:00.894 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp0_workload[0] -D0712 15:11:00.894 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp0_workload[0] -D0712 15:11:00.894 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp0_workload[1] -D0712 15:11:00.894 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp0_workload[1] -D0712 15:11:00.894 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp0_workload[2] -D0712 15:11:00.894 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp0_workload[2] -D0712 15:11:00.894 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp0_workload[3] -D0712 15:11:00.894 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp0_workload[3] -D0712 15:11:00.894 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp0_workload[4] -D0712 15:11:00.894 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp0_workload[4] -D0712 15:11:00.895 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp0_workload[5] -D0712 15:11:00.895 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp0_workload[5] -D0712 15:11:00.895 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp0_workload[6] -D0712 15:11:00.895 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp0_workload[6] -D0712 15:11:00.895 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp0_workload[7] -D0712 15:11:00.895 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp0_workload[7] -D0712 15:11:00.895 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp1_workload[0] -D0712 15:11:00.895 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp1_workload[0] -D0712 15:11:00.895 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp1_workload[1] -D0712 15:11:00.895 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp1_workload[1] -D0712 15:11:00.895 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp1_workload[2] -D0712 15:11:00.895 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp1_workload[2] -D0712 15:11:00.896 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp1_workload[3] -D0712 15:11:00.896 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp1_workload[3] -D0712 15:11:00.896 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp1_workload[4] -D0712 15:11:00.896 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp1_workload[4] -D0712 15:11:00.896 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp1_workload[5] -D0712 15:11:00.896 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp1_workload[5] -D0712 15:11:00.896 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp1_workload[6] -D0712 15:11:00.896 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp1_workload[6] -D0712 15:11:00.896 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp1_workload[7] -D0712 15:11:00.896 tapa.core:542] instantiating workload.query_bv_packed_stream_hash0_kp1_workload[7] -D0712 15:11:00.896 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp0_workload[0] -D0712 15:11:00.896 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp0_workload[0] -D0712 15:11:00.896 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp0_workload[1] -D0712 15:11:00.896 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp0_workload[1] -D0712 15:11:00.896 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp0_workload[2] -D0712 15:11:00.896 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp0_workload[2] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp0_workload[3] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp0_workload[3] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp0_workload[4] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp0_workload[4] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp0_workload[5] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp0_workload[5] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp0_workload[6] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp0_workload[6] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp0_workload[7] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp0_workload[7] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp1_workload[0] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp1_workload[0] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp1_workload[1] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp1_workload[1] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp1_workload[2] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp1_workload[2] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp1_workload[3] -D0712 15:11:00.897 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp1_workload[3] -D0712 15:11:00.898 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp1_workload[4] -D0712 15:11:00.898 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp1_workload[4] -D0712 15:11:00.898 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp1_workload[5] -D0712 15:11:00.898 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp1_workload[5] -D0712 15:11:00.898 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp1_workload[6] -D0712 15:11:00.898 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp1_workload[6] -D0712 15:11:00.898 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp1_workload[7] -D0712 15:11:00.898 tapa.core:542] instantiating workload.query_bv_packed_stream_hash1_kp1_workload[7] -D0712 15:11:00.898 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp0_workload[0] -D0712 15:11:00.898 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp0_workload[0] -D0712 15:11:00.898 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp0_workload[1] -D0712 15:11:00.898 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp0_workload[1] -D0712 15:11:00.898 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp0_workload[2] -D0712 15:11:00.898 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp0_workload[2] -D0712 15:11:00.898 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp0_workload[3] -D0712 15:11:00.898 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp0_workload[3] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp0_workload[4] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp0_workload[4] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp0_workload[5] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp0_workload[5] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp0_workload[6] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp0_workload[6] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp0_workload[7] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp0_workload[7] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp1_workload[0] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp1_workload[0] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp1_workload[1] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp1_workload[1] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp1_workload[2] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp1_workload[2] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp1_workload[3] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp1_workload[3] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp1_workload[4] -D0712 15:11:00.899 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp1_workload[4] -D0712 15:11:00.900 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp1_workload[5] -D0712 15:11:00.900 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp1_workload[5] -D0712 15:11:00.900 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp1_workload[6] -D0712 15:11:00.900 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp1_workload[6] -D0712 15:11:00.900 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp1_workload[7] -D0712 15:11:00.900 tapa.core:542] instantiating workload.query_bv_packed_stream_hash2_kp1_workload[7] -D0712 15:11:00.900 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.900 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.900 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.900 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.900 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.900 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.900 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.900 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.900 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.900 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.901 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.901 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.901 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.901 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.901 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.901 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.901 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.901 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.901 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.901 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.901 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.901 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.901 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.901 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.902 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.902 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.902 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.902 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.902 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.902 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.902 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.902 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.902 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.902 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.902 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.902 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.902 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.902 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.902 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.902 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.903 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.903 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.903 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.903 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.903 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.903 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.903 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.903 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p0_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.903 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.903 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.903 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.903 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.903 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.903 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.903 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.903 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.904 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.904 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.904 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.904 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.904 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.904 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.904 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.904 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.904 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.904 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.904 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.904 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.904 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.904 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.905 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.905 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.905 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.905 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.905 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.905 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.905 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.905 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.905 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.905 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.905 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.905 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.905 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.905 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.905 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.905 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.906 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.906 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.906 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.906 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.906 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.906 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.906 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.906 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.906 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.906 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p1_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.906 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.906 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.906 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.906 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.906 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.906 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.907 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.907 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.907 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.907 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.907 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.907 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.907 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.907 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.907 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.907 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.907 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.907 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.907 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.907 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.908 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.908 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.908 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.908 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.908 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.908 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.908 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.908 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.908 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.908 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.908 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.908 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.908 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.908 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.908 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.908 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.909 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.909 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.909 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.909 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.909 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.909 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.909 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.909 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.909 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.909 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.909 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.909 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p2_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.909 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.909 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.910 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.910 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.910 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.910 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.910 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.910 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.910 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.910 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.910 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.910 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.910 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.910 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.910 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.910 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.910 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.910 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.911 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.911 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.911 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.911 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.911 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.911 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.911 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.911 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.911 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.911 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.911 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.911 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.911 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.911 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.912 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.912 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.912 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.912 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.912 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.912 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.912 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.912 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.912 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.912 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.912 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.912 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.912 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.912 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.912 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.912 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p3_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.913 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.913 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.913 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.913 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.913 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.913 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.913 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.913 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.913 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.913 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.913 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.913 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.913 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.913 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.914 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.914 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.914 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.914 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.914 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.914 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.914 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.914 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.914 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.914 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.914 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.914 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.914 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.914 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.914 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.914 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.915 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.915 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.915 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.915 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.915 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.915 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.915 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.915 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.915 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.915 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.915 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.915 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.915 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.915 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.916 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.916 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.916 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.916 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p4_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.916 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.916 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.916 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.916 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.916 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.916 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.916 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.916 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.916 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.916 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.917 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.917 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.917 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.917 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.917 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.917 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.917 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.917 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.917 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.917 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.917 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.917 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.917 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.917 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.917 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.917 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.918 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.918 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.918 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.918 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.918 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.918 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.918 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.918 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.918 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.918 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.918 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.918 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.918 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.918 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.919 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.919 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.919 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.919 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.919 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.919 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.919 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.919 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p5_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.919 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.919 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.919 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.919 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.919 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.919 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.919 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.919 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.920 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.920 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.920 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.920 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.920 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.920 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.920 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.920 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.920 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.920 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.920 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.920 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.920 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.920 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.921 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.921 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.921 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.921 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.921 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.921 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.921 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.921 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.921 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.921 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.921 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.921 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.921 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.921 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.921 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.921 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.922 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.922 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.922 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.922 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.922 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.922 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.922 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.922 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.922 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.922 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p6_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.922 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.922 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_0_workload[0] -D0712 15:11:00.922 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.922 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_0_workload[1] -D0712 15:11:00.923 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.923 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_0_workload[2] -D0712 15:11:00.923 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.923 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_0_workload[3] -D0712 15:11:00.923 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.923 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_1_workload[0] -D0712 15:11:00.923 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.923 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_1_workload[1] -D0712 15:11:00.923 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.923 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_1_workload[2] -D0712 15:11:00.923 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.923 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_1_workload[3] -D0712 15:11:00.923 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.923 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_2_workload[0] -D0712 15:11:00.923 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.923 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_2_workload[1] -D0712 15:11:00.924 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.924 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_2_workload[2] -D0712 15:11:00.924 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.924 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_2_workload[3] -D0712 15:11:00.924 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.924 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_3_workload[0] -D0712 15:11:00.924 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.924 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_3_workload[1] -D0712 15:11:00.924 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.924 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_3_workload[2] -D0712 15:11:00.924 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.924 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_3_workload[3] -D0712 15:11:00.924 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.924 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_4_workload[0] -D0712 15:11:00.925 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.925 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_4_workload[1] -D0712 15:11:00.925 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.925 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_4_workload[2] -D0712 15:11:00.925 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.925 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_4_workload[3] -D0712 15:11:00.925 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.925 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_5_workload[0] -D0712 15:11:00.925 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.925 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_5_workload[1] -D0712 15:11:00.925 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.925 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_5_workload[2] -D0712 15:11:00.925 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.925 tapa.core:542] instantiating workload.ratemon_fdbk_streams_p7_bloom_single_arbiter_5_workload[3] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm0_kp0_workload[0] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm0_kp0_workload[0] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm0_kp0_workload[1] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm0_kp0_workload[1] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm0_kp0_workload[2] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm0_kp0_workload[2] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm0_kp1_workload[0] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm0_kp1_workload[0] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm0_kp1_workload[1] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm0_kp1_workload[1] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm0_kp1_workload[2] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm0_kp1_workload[2] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm1_kp0_workload[0] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm1_kp0_workload[0] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm1_kp0_workload[1] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm1_kp0_workload[1] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm1_kp0_workload[2] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm1_kp0_workload[2] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm1_kp1_workload[0] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm1_kp1_workload[0] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm1_kp1_workload[1] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm1_kp1_workload[1] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm1_kp1_workload[2] -D0712 15:11:00.926 tapa.core:542] instantiating workload.reconstruct_stream_stm1_kp1_workload[2] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm2_kp0_workload[0] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm2_kp0_workload[0] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm2_kp0_workload[1] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm2_kp0_workload[1] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm2_kp0_workload[2] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm2_kp0_workload[2] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm2_kp1_workload[0] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm2_kp1_workload[0] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm2_kp1_workload[1] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm2_kp1_workload[1] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm2_kp1_workload[2] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm2_kp1_workload[2] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm3_kp0_workload[0] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm3_kp0_workload[0] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm3_kp0_workload[1] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm3_kp0_workload[1] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm3_kp0_workload[2] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm3_kp0_workload[2] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm3_kp1_workload[0] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm3_kp1_workload[0] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm3_kp1_workload[1] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm3_kp1_workload[1] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm3_kp1_workload[2] -D0712 15:11:00.927 tapa.core:542] instantiating workload.reconstruct_stream_stm3_kp1_workload[2] -D0712 15:11:00.928 tapa.core:542] instantiating workload.reconstruct_stream_stm4_kp0_workload[0] -D0712 15:11:00.928 tapa.core:542] instantiating workload.reconstruct_stream_stm4_kp0_workload[0] -D0712 15:11:00.928 tapa.core:542] instantiating workload.reconstruct_stream_stm4_kp0_workload[1] -D0712 15:11:00.928 tapa.core:542] instantiating workload.reconstruct_stream_stm4_kp0_workload[1] -D0712 15:11:00.928 tapa.core:542] instantiating workload.reconstruct_stream_stm4_kp0_workload[2] -D0712 15:11:00.928 tapa.core:542] instantiating workload.reconstruct_stream_stm4_kp0_workload[2] -D0712 15:11:00.928 tapa.core:542] instantiating workload.reconstruct_stream_stm4_kp1_workload[0] -D0712 15:11:00.928 tapa.core:542] instantiating workload.reconstruct_stream_stm4_kp1_workload[0] -D0712 15:11:00.928 tapa.core:542] instantiating workload.reconstruct_stream_stm4_kp1_workload[1] -D0712 15:11:00.928 tapa.core:542] instantiating workload.reconstruct_stream_stm4_kp1_workload[1] -D0712 15:11:00.928 tapa.core:542] instantiating workload.reconstruct_stream_stm4_kp1_workload[2] -D0712 15:11:00.928 tapa.core:542] instantiating workload.reconstruct_stream_stm4_kp1_workload[2] -D0712 15:11:00.928 tapa.core:507] connecting workload's children tasks -D0712 15:11:00.928 tapa.core:507] connecting workload's children tasks -D0712 15:11:01.392 tapa.core:598] instantiating children tasks in workload -D0712 15:11:01.392 tapa.core:598] instantiating children tasks in workload -D0712 15:11:01.394 tapa.core:671] pipelined signal: 64'd0 => bloom_aggregate_SPLIT_0___const__64b0 -D0712 15:11:01.394 tapa.core:671] pipelined signal: 64'd0 => bloom_aggregate_SPLIT_0___const__64b0 -D0712 15:11:01.394 tapa.core:671] pipelined signal: 64'd0 => bloom_aggregate_SPLIT_0___const__64b0 -D0712 15:11:01.394 tapa.core:671] pipelined signal: 64'd0 => bloom_aggregate_SPLIT_0___const__64b0 -D0712 15:11:01.395 tapa.core:671] pipelined signal: 64'd0 => bloom_aggregate_SPLIT_1___const__64b0 -D0712 15:11:01.395 tapa.core:671] pipelined signal: 64'd0 => bloom_aggregate_SPLIT_1___const__64b0 -D0712 15:11:01.395 tapa.core:671] pipelined signal: 64'd1 => bloom_aggregate_SPLIT_1___const__64b1 -D0712 15:11:01.395 tapa.core:671] pipelined signal: 64'd1 => bloom_aggregate_SPLIT_1___const__64b1 -D0712 15:11:01.395 tapa.core:671] pipelined signal: 64'd0 => bloom_aggregate_SPLIT_2___const__64b0 -D0712 15:11:01.395 tapa.core:671] pipelined signal: 64'd0 => bloom_aggregate_SPLIT_2___const__64b0 -D0712 15:11:01.396 tapa.core:671] pipelined signal: 64'd2 => bloom_aggregate_SPLIT_2___const__64b2 -D0712 15:11:01.396 tapa.core:671] pipelined signal: 64'd2 => bloom_aggregate_SPLIT_2___const__64b2 -D0712 15:11:01.396 tapa.core:671] pipelined signal: 64'd0 => bloom_aggregate_SPLIT_3___const__64b0 -D0712 15:11:01.396 tapa.core:671] pipelined signal: 64'd0 => bloom_aggregate_SPLIT_3___const__64b0 -D0712 15:11:01.397 tapa.core:671] pipelined signal: 64'd3 => bloom_aggregate_SPLIT_3___const__64b3 -D0712 15:11:01.397 tapa.core:671] pipelined signal: 64'd3 => bloom_aggregate_SPLIT_3___const__64b3 -D0712 15:11:01.397 tapa.core:671] pipelined signal: 64'd0 => bloom_aggregate_SPLIT_4___const__64b0 -D0712 15:11:01.397 tapa.core:671] pipelined signal: 64'd0 => bloom_aggregate_SPLIT_4___const__64b0 -D0712 15:11:01.397 tapa.core:671] pipelined signal: 64'd4 => bloom_aggregate_SPLIT_4___const__64b4 -D0712 15:11:01.397 tapa.core:671] pipelined signal: 64'd4 => bloom_aggregate_SPLIT_4___const__64b4 -D0712 15:11:01.398 tapa.core:671] pipelined signal: 64'd0 => bloom_aggregate_SPLIT_5___const__64b0 -D0712 15:11:01.398 tapa.core:671] pipelined signal: 64'd0 => bloom_aggregate_SPLIT_5___const__64b0 -D0712 15:11:01.398 tapa.core:671] pipelined signal: 64'd1 => bloom_aggregate_SPLIT_5___const__64b1 -D0712 15:11:01.398 tapa.core:671] pipelined signal: 64'd1 => bloom_aggregate_SPLIT_5___const__64b1 -D0712 15:11:01.399 tapa.core:671] pipelined signal: 64'd1 => bloom_aggregate_SPLIT_6___const__64b1 -D0712 15:11:01.399 tapa.core:671] pipelined signal: 64'd1 => bloom_aggregate_SPLIT_6___const__64b1 -D0712 15:11:01.399 tapa.core:671] pipelined signal: 64'd1 => bloom_aggregate_SPLIT_6___const__64b1 -D0712 15:11:01.399 tapa.core:671] pipelined signal: 64'd1 => bloom_aggregate_SPLIT_6___const__64b1 -D0712 15:11:01.400 tapa.core:671] pipelined signal: 64'd1 => bloom_aggregate_SPLIT_7___const__64b1 -D0712 15:11:01.400 tapa.core:671] pipelined signal: 64'd1 => bloom_aggregate_SPLIT_7___const__64b1 -D0712 15:11:01.400 tapa.core:671] pipelined signal: 64'd2 => bloom_aggregate_SPLIT_7___const__64b2 -D0712 15:11:01.400 tapa.core:671] pipelined signal: 64'd2 => bloom_aggregate_SPLIT_7___const__64b2 -D0712 15:11:01.401 tapa.core:671] pipelined signal: 64'd1 => bloom_aggregate_SPLIT_8___const__64b1 -D0712 15:11:01.401 tapa.core:671] pipelined signal: 64'd1 => bloom_aggregate_SPLIT_8___const__64b1 -D0712 15:11:01.401 tapa.core:671] pipelined signal: 64'd3 => bloom_aggregate_SPLIT_8___const__64b3 -D0712 15:11:01.401 tapa.core:671] pipelined signal: 64'd3 => bloom_aggregate_SPLIT_8___const__64b3 -D0712 15:11:01.402 tapa.core:671] pipelined signal: 64'd1 => bloom_aggregate_SPLIT_9___const__64b1 -D0712 15:11:01.402 tapa.core:671] pipelined signal: 64'd1 => bloom_aggregate_SPLIT_9___const__64b1 -D0712 15:11:01.402 tapa.core:671] pipelined signal: 64'd4 => bloom_aggregate_SPLIT_9___const__64b4 -D0712 15:11:01.402 tapa.core:671] pipelined signal: 64'd4 => bloom_aggregate_SPLIT_9___const__64b4 -D0712 15:11:01.403 tapa.core:671] pipelined signal: 64'd0 => bloom_arb_forwarder_0___const__64b0 -D0712 15:11:01.403 tapa.core:671] pipelined signal: 64'd0 => bloom_arb_forwarder_0___const__64b0 -D0712 15:11:01.403 tapa.core:671] pipelined signal: 64'd0 => bloom_arb_forwarder_0___const__64b0 -D0712 15:11:01.403 tapa.core:671] pipelined signal: 64'd0 => bloom_arb_forwarder_0___const__64b0 -D0712 15:11:01.413 tapa.core:671] pipelined signal: 64'd0 => bloom_arb_forwarder_1___const__64b0 -D0712 15:11:01.413 tapa.core:671] pipelined signal: 64'd0 => bloom_arb_forwarder_1___const__64b0 -D0712 15:11:01.413 tapa.core:671] pipelined signal: 64'd1 => bloom_arb_forwarder_1___const__64b1 -D0712 15:11:01.413 tapa.core:671] pipelined signal: 64'd1 => bloom_arb_forwarder_1___const__64b1 -D0712 15:11:01.423 tapa.core:671] pipelined signal: 64'd0 => bloom_arb_forwarder_2___const__64b0 -D0712 15:11:01.423 tapa.core:671] pipelined signal: 64'd0 => bloom_arb_forwarder_2___const__64b0 -D0712 15:11:01.423 tapa.core:671] pipelined signal: 64'd2 => bloom_arb_forwarder_2___const__64b2 -D0712 15:11:01.423 tapa.core:671] pipelined signal: 64'd2 => bloom_arb_forwarder_2___const__64b2 -D0712 15:11:01.434 tapa.core:671] pipelined signal: 64'd0 => bloom_arb_forwarder_3___const__64b0 -D0712 15:11:01.434 tapa.core:671] pipelined signal: 64'd0 => bloom_arb_forwarder_3___const__64b0 -D0712 15:11:01.434 tapa.core:671] pipelined signal: 64'd1 => bloom_arb_forwarder_3___const__64b1 -D0712 15:11:01.434 tapa.core:671] pipelined signal: 64'd1 => bloom_arb_forwarder_3___const__64b1 -D0712 15:11:01.444 tapa.core:671] pipelined signal: 64'd1 => bloom_arb_forwarder_4___const__64b1 -D0712 15:11:01.444 tapa.core:671] pipelined signal: 64'd1 => bloom_arb_forwarder_4___const__64b1 -D0712 15:11:01.445 tapa.core:671] pipelined signal: 64'd1 => bloom_arb_forwarder_4___const__64b1 -D0712 15:11:01.445 tapa.core:671] pipelined signal: 64'd1 => bloom_arb_forwarder_4___const__64b1 -D0712 15:11:01.455 tapa.core:671] pipelined signal: 64'd1 => bloom_arb_forwarder_5___const__64b1 -D0712 15:11:01.455 tapa.core:671] pipelined signal: 64'd1 => bloom_arb_forwarder_5___const__64b1 -D0712 15:11:01.455 tapa.core:671] pipelined signal: 64'd2 => bloom_arb_forwarder_5___const__64b2 -D0712 15:11:01.455 tapa.core:671] pipelined signal: 64'd2 => bloom_arb_forwarder_5___const__64b2 -D0712 15:11:01.466 tapa.core:671] pipelined signal: 64'd0 => bloom_arbiter_ratemonitor_0___const__64b0 -D0712 15:11:01.466 tapa.core:671] pipelined signal: 64'd0 => bloom_arbiter_ratemonitor_0___const__64b0 -D0712 15:11:01.466 tapa.core:671] pipelined signal: 64'd0 => bloom_arbiter_ratemonitor_0___const__64b0 -D0712 15:11:01.466 tapa.core:671] pipelined signal: 64'd0 => bloom_arbiter_ratemonitor_0___const__64b0 -D0712 15:11:01.466 tapa.core:671] pipelined signal: 64'd97 => bloom_arbiter_ratemonitor_0___const__64b97 -D0712 15:11:01.466 tapa.core:671] pipelined signal: 64'd97 => bloom_arbiter_ratemonitor_0___const__64b97 -D0712 15:11:01.479 tapa.core:671] pipelined signal: 64'd0 => bloom_arbiter_ratemonitor_1___const__64b0 -D0712 15:11:01.479 tapa.core:671] pipelined signal: 64'd0 => bloom_arbiter_ratemonitor_1___const__64b0 -D0712 15:11:01.479 tapa.core:671] pipelined signal: 64'd1 => bloom_arbiter_ratemonitor_1___const__64b1 -D0712 15:11:01.479 tapa.core:671] pipelined signal: 64'd1 => bloom_arbiter_ratemonitor_1___const__64b1 -D0712 15:11:01.479 tapa.core:671] pipelined signal: 64'd97 => bloom_arbiter_ratemonitor_1___const__64b97 -D0712 15:11:01.479 tapa.core:671] pipelined signal: 64'd97 => bloom_arbiter_ratemonitor_1___const__64b97 -D0712 15:11:01.492 tapa.core:671] pipelined signal: 64'd0 => bloom_arbiter_ratemonitor_2___const__64b0 -D0712 15:11:01.492 tapa.core:671] pipelined signal: 64'd0 => bloom_arbiter_ratemonitor_2___const__64b0 -D0712 15:11:01.492 tapa.core:671] pipelined signal: 64'd2 => bloom_arbiter_ratemonitor_2___const__64b2 -D0712 15:11:01.492 tapa.core:671] pipelined signal: 64'd2 => bloom_arbiter_ratemonitor_2___const__64b2 -D0712 15:11:01.492 tapa.core:671] pipelined signal: 64'd97 => bloom_arbiter_ratemonitor_2___const__64b97 -D0712 15:11:01.492 tapa.core:671] pipelined signal: 64'd97 => bloom_arbiter_ratemonitor_2___const__64b97 -D0712 15:11:01.505 tapa.core:671] pipelined signal: 64'd0 => bloom_arbiter_ratemonitor_3___const__64b0 -D0712 15:11:01.505 tapa.core:671] pipelined signal: 64'd0 => bloom_arbiter_ratemonitor_3___const__64b0 -D0712 15:11:01.505 tapa.core:671] pipelined signal: 64'd1 => bloom_arbiter_ratemonitor_3___const__64b1 -D0712 15:11:01.505 tapa.core:671] pipelined signal: 64'd1 => bloom_arbiter_ratemonitor_3___const__64b1 -D0712 15:11:01.505 tapa.core:671] pipelined signal: 64'd97 => bloom_arbiter_ratemonitor_3___const__64b97 -D0712 15:11:01.505 tapa.core:671] pipelined signal: 64'd97 => bloom_arbiter_ratemonitor_3___const__64b97 -D0712 15:11:01.518 tapa.core:671] pipelined signal: 64'd1 => bloom_arbiter_ratemonitor_4___const__64b1 -D0712 15:11:01.518 tapa.core:671] pipelined signal: 64'd1 => bloom_arbiter_ratemonitor_4___const__64b1 -D0712 15:11:01.518 tapa.core:671] pipelined signal: 64'd1 => bloom_arbiter_ratemonitor_4___const__64b1 -D0712 15:11:01.518 tapa.core:671] pipelined signal: 64'd1 => bloom_arbiter_ratemonitor_4___const__64b1 -D0712 15:11:01.518 tapa.core:671] pipelined signal: 64'd97 => bloom_arbiter_ratemonitor_4___const__64b97 -D0712 15:11:01.518 tapa.core:671] pipelined signal: 64'd97 => bloom_arbiter_ratemonitor_4___const__64b97 -D0712 15:11:01.530 tapa.core:671] pipelined signal: 64'd1 => bloom_arbiter_ratemonitor_5___const__64b1 -D0712 15:11:01.530 tapa.core:671] pipelined signal: 64'd1 => bloom_arbiter_ratemonitor_5___const__64b1 -D0712 15:11:01.530 tapa.core:671] pipelined signal: 64'd2 => bloom_arbiter_ratemonitor_5___const__64b2 -D0712 15:11:01.530 tapa.core:671] pipelined signal: 64'd2 => bloom_arbiter_ratemonitor_5___const__64b2 -D0712 15:11:01.531 tapa.core:671] pipelined signal: 64'd97 => bloom_arbiter_ratemonitor_5___const__64b97 -D0712 15:11:01.531 tapa.core:671] pipelined signal: 64'd97 => bloom_arbiter_ratemonitor_5___const__64b97 -D0712 15:11:01.542 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_0___const__64b0 -D0712 15:11:01.542 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_0___const__64b0 -D0712 15:11:01.542 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_0___const__64b0 -D0712 15:11:01.542 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_0___const__64b0 -D0712 15:11:01.542 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_0___const__64b0 -D0712 15:11:01.542 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_0___const__64b0 -D0712 15:11:01.542 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_0___const__64b97 -D0712 15:11:01.542 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_0___const__64b97 -D0712 15:11:01.543 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_1___const__64b0 -D0712 15:11:01.543 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_1___const__64b0 -D0712 15:11:01.543 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_1___const__64b0 -D0712 15:11:01.543 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_1___const__64b0 -D0712 15:11:01.543 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_1___const__64b0 -D0712 15:11:01.543 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_1___const__64b0 -D0712 15:11:01.543 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_1___const__64b98 -D0712 15:11:01.543 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_1___const__64b98 -D0712 15:11:01.544 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_2___const__64b0 -D0712 15:11:01.544 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_2___const__64b0 -D0712 15:11:01.544 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_2___const__64b0 -D0712 15:11:01.544 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_2___const__64b0 -D0712 15:11:01.544 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_2___const__64b0 -D0712 15:11:01.544 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_2___const__64b0 -D0712 15:11:01.544 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_2___const__64b99 -D0712 15:11:01.544 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_2___const__64b99 -D0712 15:11:01.545 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_3___const__64b0 -D0712 15:11:01.545 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_3___const__64b0 -D0712 15:11:01.545 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_3___const__64b0 -D0712 15:11:01.545 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_3___const__64b0 -D0712 15:11:01.545 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_3___const__64b0 -D0712 15:11:01.545 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_3___const__64b0 -D0712 15:11:01.545 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_3___const__64b100 -D0712 15:11:01.545 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_3___const__64b100 -D0712 15:11:01.546 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_4___const__64b0 -D0712 15:11:01.546 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_4___const__64b0 -D0712 15:11:01.546 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_4___const__64b0 -D0712 15:11:01.546 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_4___const__64b0 -D0712 15:11:01.546 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_4___const__64b1 -D0712 15:11:01.546 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_4___const__64b1 -D0712 15:11:01.546 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_4___const__64b97 -D0712 15:11:01.546 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_4___const__64b97 -D0712 15:11:01.547 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_5___const__64b0 -D0712 15:11:01.547 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_5___const__64b0 -D0712 15:11:01.547 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_5___const__64b0 -D0712 15:11:01.547 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_5___const__64b0 -D0712 15:11:01.547 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_5___const__64b1 -D0712 15:11:01.547 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_5___const__64b1 -D0712 15:11:01.547 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_5___const__64b98 -D0712 15:11:01.547 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_5___const__64b98 -D0712 15:11:01.548 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_6___const__64b0 -D0712 15:11:01.548 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_6___const__64b0 -D0712 15:11:01.548 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_6___const__64b0 -D0712 15:11:01.548 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_6___const__64b0 -D0712 15:11:01.548 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_6___const__64b1 -D0712 15:11:01.548 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_6___const__64b1 -D0712 15:11:01.548 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_6___const__64b99 -D0712 15:11:01.548 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_6___const__64b99 -D0712 15:11:01.549 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_7___const__64b0 -D0712 15:11:01.549 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_7___const__64b0 -D0712 15:11:01.549 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_7___const__64b0 -D0712 15:11:01.549 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_7___const__64b0 -D0712 15:11:01.549 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_7___const__64b1 -D0712 15:11:01.549 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_7___const__64b1 -D0712 15:11:01.549 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_7___const__64b100 -D0712 15:11:01.549 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_7___const__64b100 -D0712 15:11:01.550 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_8___const__64b0 -D0712 15:11:01.550 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_8___const__64b0 -D0712 15:11:01.550 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_8___const__64b0 -D0712 15:11:01.550 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_8___const__64b0 -D0712 15:11:01.550 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_8___const__64b2 -D0712 15:11:01.550 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_8___const__64b2 -D0712 15:11:01.550 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_8___const__64b97 -D0712 15:11:01.550 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_8___const__64b97 -D0712 15:11:01.551 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_9___const__64b0 -D0712 15:11:01.551 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_9___const__64b0 -D0712 15:11:01.551 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_9___const__64b0 -D0712 15:11:01.551 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_9___const__64b0 -D0712 15:11:01.551 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_9___const__64b2 -D0712 15:11:01.551 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_9___const__64b2 -D0712 15:11:01.551 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_9___const__64b98 -D0712 15:11:01.551 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_9___const__64b98 -D0712 15:11:01.552 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_10___const__64b0 -D0712 15:11:01.552 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_10___const__64b0 -D0712 15:11:01.552 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_10___const__64b0 -D0712 15:11:01.552 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_10___const__64b0 -D0712 15:11:01.552 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_10___const__64b2 -D0712 15:11:01.552 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_10___const__64b2 -D0712 15:11:01.552 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_10___const__64b99 -D0712 15:11:01.552 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_10___const__64b99 -D0712 15:11:01.553 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_11___const__64b0 -D0712 15:11:01.553 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_11___const__64b0 -D0712 15:11:01.553 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_11___const__64b0 -D0712 15:11:01.553 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_11___const__64b0 -D0712 15:11:01.553 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_11___const__64b100 -D0712 15:11:01.553 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_11___const__64b100 -D0712 15:11:01.553 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_11___const__64b2 -D0712 15:11:01.553 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_11___const__64b2 -D0712 15:11:01.554 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_12___const__64b0 -D0712 15:11:01.554 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_12___const__64b0 -D0712 15:11:01.554 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_12___const__64b0 -D0712 15:11:01.554 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_12___const__64b0 -D0712 15:11:01.554 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_12___const__64b3 -D0712 15:11:01.554 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_12___const__64b3 -D0712 15:11:01.554 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_12___const__64b97 -D0712 15:11:01.554 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_12___const__64b97 -D0712 15:11:01.554 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_13___const__64b0 -D0712 15:11:01.554 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_13___const__64b0 -D0712 15:11:01.555 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_13___const__64b0 -D0712 15:11:01.555 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_13___const__64b0 -D0712 15:11:01.555 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_13___const__64b3 -D0712 15:11:01.555 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_13___const__64b3 -D0712 15:11:01.555 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_13___const__64b98 -D0712 15:11:01.555 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_13___const__64b98 -D0712 15:11:01.555 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_14___const__64b0 -D0712 15:11:01.555 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_14___const__64b0 -D0712 15:11:01.556 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_14___const__64b0 -D0712 15:11:01.556 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_14___const__64b0 -D0712 15:11:01.556 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_14___const__64b3 -D0712 15:11:01.556 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_14___const__64b3 -D0712 15:11:01.556 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_14___const__64b99 -D0712 15:11:01.556 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_14___const__64b99 -D0712 15:11:01.556 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_15___const__64b0 -D0712 15:11:01.556 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_15___const__64b0 -D0712 15:11:01.557 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_15___const__64b0 -D0712 15:11:01.557 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_15___const__64b0 -D0712 15:11:01.557 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_15___const__64b100 -D0712 15:11:01.557 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_15___const__64b100 -D0712 15:11:01.557 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_15___const__64b3 -D0712 15:11:01.557 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_15___const__64b3 -D0712 15:11:01.557 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_16___const__64b0 -D0712 15:11:01.557 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_16___const__64b0 -D0712 15:11:01.557 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_16___const__64b0 -D0712 15:11:01.557 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_16___const__64b0 -D0712 15:11:01.558 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_16___const__64b4 -D0712 15:11:01.558 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_16___const__64b4 -D0712 15:11:01.558 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_16___const__64b97 -D0712 15:11:01.558 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_16___const__64b97 -D0712 15:11:01.558 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_17___const__64b0 -D0712 15:11:01.558 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_17___const__64b0 -D0712 15:11:01.558 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_17___const__64b0 -D0712 15:11:01.558 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_17___const__64b0 -D0712 15:11:01.558 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_17___const__64b4 -D0712 15:11:01.558 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_17___const__64b4 -D0712 15:11:01.559 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_17___const__64b98 -D0712 15:11:01.559 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_17___const__64b98 -D0712 15:11:01.559 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_18___const__64b0 -D0712 15:11:01.559 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_18___const__64b0 -D0712 15:11:01.559 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_18___const__64b0 -D0712 15:11:01.559 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_18___const__64b0 -D0712 15:11:01.560 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_18___const__64b4 -D0712 15:11:01.560 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_18___const__64b4 -D0712 15:11:01.560 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_18___const__64b99 -D0712 15:11:01.560 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_18___const__64b99 -D0712 15:11:01.560 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_19___const__64b0 -D0712 15:11:01.560 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_19___const__64b0 -D0712 15:11:01.560 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_19___const__64b0 -D0712 15:11:01.560 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_19___const__64b0 -D0712 15:11:01.560 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_19___const__64b100 -D0712 15:11:01.560 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_19___const__64b100 -D0712 15:11:01.561 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_19___const__64b4 -D0712 15:11:01.561 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_19___const__64b4 -D0712 15:11:01.561 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_20___const__64b0 -D0712 15:11:01.561 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_20___const__64b0 -D0712 15:11:01.561 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_20___const__64b0 -D0712 15:11:01.561 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_20___const__64b0 -D0712 15:11:01.561 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_20___const__64b5 -D0712 15:11:01.561 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_20___const__64b5 -D0712 15:11:01.561 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_20___const__64b97 -D0712 15:11:01.561 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_20___const__64b97 -D0712 15:11:01.562 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_21___const__64b0 -D0712 15:11:01.562 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_21___const__64b0 -D0712 15:11:01.562 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_21___const__64b0 -D0712 15:11:01.562 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_21___const__64b0 -D0712 15:11:01.562 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_21___const__64b5 -D0712 15:11:01.562 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_21___const__64b5 -D0712 15:11:01.562 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_21___const__64b98 -D0712 15:11:01.562 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_21___const__64b98 -D0712 15:11:01.563 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_22___const__64b0 -D0712 15:11:01.563 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_22___const__64b0 -D0712 15:11:01.563 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_22___const__64b0 -D0712 15:11:01.563 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_22___const__64b0 -D0712 15:11:01.563 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_22___const__64b5 -D0712 15:11:01.563 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_22___const__64b5 -D0712 15:11:01.563 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_22___const__64b99 -D0712 15:11:01.563 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_22___const__64b99 -D0712 15:11:01.564 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_23___const__64b0 -D0712 15:11:01.564 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_23___const__64b0 -D0712 15:11:01.564 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_23___const__64b0 -D0712 15:11:01.564 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_23___const__64b0 -D0712 15:11:01.564 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_23___const__64b100 -D0712 15:11:01.564 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_23___const__64b100 -D0712 15:11:01.564 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_23___const__64b5 -D0712 15:11:01.564 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_23___const__64b5 -D0712 15:11:01.565 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_24___const__64b0 -D0712 15:11:01.565 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_24___const__64b0 -D0712 15:11:01.565 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_24___const__64b0 -D0712 15:11:01.565 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_24___const__64b0 -D0712 15:11:01.565 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_24___const__64b6 -D0712 15:11:01.565 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_24___const__64b6 -D0712 15:11:01.565 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_24___const__64b97 -D0712 15:11:01.565 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_24___const__64b97 -D0712 15:11:01.566 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_25___const__64b0 -D0712 15:11:01.566 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_25___const__64b0 -D0712 15:11:01.566 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_25___const__64b0 -D0712 15:11:01.566 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_25___const__64b0 -D0712 15:11:01.566 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_25___const__64b6 -D0712 15:11:01.566 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_25___const__64b6 -D0712 15:11:01.566 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_25___const__64b98 -D0712 15:11:01.566 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_25___const__64b98 -D0712 15:11:01.567 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_26___const__64b0 -D0712 15:11:01.567 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_26___const__64b0 -D0712 15:11:01.567 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_26___const__64b0 -D0712 15:11:01.567 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_26___const__64b0 -D0712 15:11:01.567 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_26___const__64b6 -D0712 15:11:01.567 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_26___const__64b6 -D0712 15:11:01.567 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_26___const__64b99 -D0712 15:11:01.567 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_26___const__64b99 -D0712 15:11:01.568 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_27___const__64b0 -D0712 15:11:01.568 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_27___const__64b0 -D0712 15:11:01.568 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_27___const__64b0 -D0712 15:11:01.568 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_27___const__64b0 -D0712 15:11:01.568 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_27___const__64b100 -D0712 15:11:01.568 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_27___const__64b100 -D0712 15:11:01.568 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_27___const__64b6 -D0712 15:11:01.568 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_27___const__64b6 -D0712 15:11:01.569 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_28___const__64b0 -D0712 15:11:01.569 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_28___const__64b0 -D0712 15:11:01.569 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_28___const__64b0 -D0712 15:11:01.569 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_28___const__64b0 -D0712 15:11:01.569 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_28___const__64b7 -D0712 15:11:01.569 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_28___const__64b7 -D0712 15:11:01.569 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_28___const__64b97 -D0712 15:11:01.569 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_28___const__64b97 -D0712 15:11:01.570 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_29___const__64b0 -D0712 15:11:01.570 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_29___const__64b0 -D0712 15:11:01.570 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_29___const__64b0 -D0712 15:11:01.570 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_29___const__64b0 -D0712 15:11:01.570 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_29___const__64b7 -D0712 15:11:01.570 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_29___const__64b7 -D0712 15:11:01.570 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_29___const__64b98 -D0712 15:11:01.570 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_29___const__64b98 -D0712 15:11:01.571 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_30___const__64b0 -D0712 15:11:01.571 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_30___const__64b0 -D0712 15:11:01.571 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_30___const__64b0 -D0712 15:11:01.571 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_30___const__64b0 -D0712 15:11:01.571 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_30___const__64b7 -D0712 15:11:01.571 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_30___const__64b7 -D0712 15:11:01.571 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_30___const__64b99 -D0712 15:11:01.571 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_30___const__64b99 -D0712 15:11:01.572 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_31___const__64b0 -D0712 15:11:01.572 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_31___const__64b0 -D0712 15:11:01.572 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_31___const__64b0 -D0712 15:11:01.572 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_31___const__64b0 -D0712 15:11:01.572 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_31___const__64b100 -D0712 15:11:01.572 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_31___const__64b100 -D0712 15:11:01.572 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_31___const__64b7 -D0712 15:11:01.572 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_31___const__64b7 -D0712 15:11:01.573 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_32___const__64b0 -D0712 15:11:01.573 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_32___const__64b0 -D0712 15:11:01.573 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_32___const__64b0 -D0712 15:11:01.573 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_32___const__64b0 -D0712 15:11:01.573 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_32___const__64b1 -D0712 15:11:01.573 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_32___const__64b1 -D0712 15:11:01.573 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_32___const__64b97 -D0712 15:11:01.573 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_32___const__64b97 -D0712 15:11:01.574 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_33___const__64b0 -D0712 15:11:01.574 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_33___const__64b0 -D0712 15:11:01.574 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_33___const__64b0 -D0712 15:11:01.574 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_33___const__64b0 -D0712 15:11:01.574 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_33___const__64b1 -D0712 15:11:01.574 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_33___const__64b1 -D0712 15:11:01.574 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_33___const__64b98 -D0712 15:11:01.574 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_33___const__64b98 -D0712 15:11:01.575 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_34___const__64b0 -D0712 15:11:01.575 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_34___const__64b0 -D0712 15:11:01.575 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_34___const__64b0 -D0712 15:11:01.575 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_34___const__64b0 -D0712 15:11:01.575 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_34___const__64b1 -D0712 15:11:01.575 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_34___const__64b1 -D0712 15:11:01.575 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_34___const__64b99 -D0712 15:11:01.575 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_34___const__64b99 -D0712 15:11:01.576 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_35___const__64b0 -D0712 15:11:01.576 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_35___const__64b0 -D0712 15:11:01.576 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_35___const__64b0 -D0712 15:11:01.576 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_35___const__64b0 -D0712 15:11:01.576 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_35___const__64b1 -D0712 15:11:01.576 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_35___const__64b1 -D0712 15:11:01.576 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_35___const__64b100 -D0712 15:11:01.576 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_35___const__64b100 -D0712 15:11:01.577 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_36___const__64b0 -D0712 15:11:01.577 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_36___const__64b0 -D0712 15:11:01.577 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_36___const__64b1 -D0712 15:11:01.577 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_36___const__64b1 -D0712 15:11:01.577 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_36___const__64b1 -D0712 15:11:01.577 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_36___const__64b1 -D0712 15:11:01.577 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_36___const__64b97 -D0712 15:11:01.577 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_36___const__64b97 -D0712 15:11:01.578 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_37___const__64b0 -D0712 15:11:01.578 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_37___const__64b0 -D0712 15:11:01.578 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_37___const__64b1 -D0712 15:11:01.578 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_37___const__64b1 -D0712 15:11:01.578 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_37___const__64b1 -D0712 15:11:01.578 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_37___const__64b1 -D0712 15:11:01.578 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_37___const__64b98 -D0712 15:11:01.578 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_37___const__64b98 -D0712 15:11:01.579 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_38___const__64b0 -D0712 15:11:01.579 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_38___const__64b0 -D0712 15:11:01.579 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_38___const__64b1 -D0712 15:11:01.579 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_38___const__64b1 -D0712 15:11:01.579 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_38___const__64b1 -D0712 15:11:01.579 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_38___const__64b1 -D0712 15:11:01.579 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_38___const__64b99 -D0712 15:11:01.579 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_38___const__64b99 -D0712 15:11:01.580 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_39___const__64b0 -D0712 15:11:01.580 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_39___const__64b0 -D0712 15:11:01.580 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_39___const__64b1 -D0712 15:11:01.580 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_39___const__64b1 -D0712 15:11:01.580 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_39___const__64b1 -D0712 15:11:01.580 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_39___const__64b1 -D0712 15:11:01.580 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_39___const__64b100 -D0712 15:11:01.580 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_39___const__64b100 -D0712 15:11:01.581 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_40___const__64b0 -D0712 15:11:01.581 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_40___const__64b0 -D0712 15:11:01.581 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_40___const__64b1 -D0712 15:11:01.581 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_40___const__64b1 -D0712 15:11:01.581 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_40___const__64b2 -D0712 15:11:01.581 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_40___const__64b2 -D0712 15:11:01.581 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_40___const__64b97 -D0712 15:11:01.581 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_40___const__64b97 -D0712 15:11:01.582 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_41___const__64b0 -D0712 15:11:01.582 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_41___const__64b0 -D0712 15:11:01.582 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_41___const__64b1 -D0712 15:11:01.582 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_41___const__64b1 -D0712 15:11:01.582 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_41___const__64b2 -D0712 15:11:01.582 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_41___const__64b2 -D0712 15:11:01.582 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_41___const__64b98 -D0712 15:11:01.582 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_41___const__64b98 -D0712 15:11:01.583 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_42___const__64b0 -D0712 15:11:01.583 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_42___const__64b0 -D0712 15:11:01.583 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_42___const__64b1 -D0712 15:11:01.583 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_42___const__64b1 -D0712 15:11:01.583 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_42___const__64b2 -D0712 15:11:01.583 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_42___const__64b2 -D0712 15:11:01.583 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_42___const__64b99 -D0712 15:11:01.583 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_42___const__64b99 -D0712 15:11:01.584 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_43___const__64b0 -D0712 15:11:01.584 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_43___const__64b0 -D0712 15:11:01.584 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_43___const__64b1 -D0712 15:11:01.584 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_43___const__64b1 -D0712 15:11:01.584 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_43___const__64b100 -D0712 15:11:01.584 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_43___const__64b100 -D0712 15:11:01.584 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_43___const__64b2 -D0712 15:11:01.584 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_43___const__64b2 -D0712 15:11:01.585 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_44___const__64b0 -D0712 15:11:01.585 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_44___const__64b0 -D0712 15:11:01.585 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_44___const__64b1 -D0712 15:11:01.585 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_44___const__64b1 -D0712 15:11:01.585 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_44___const__64b3 -D0712 15:11:01.585 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_44___const__64b3 -D0712 15:11:01.585 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_44___const__64b97 -D0712 15:11:01.585 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_44___const__64b97 -D0712 15:11:01.586 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_45___const__64b0 -D0712 15:11:01.586 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_45___const__64b0 -D0712 15:11:01.586 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_45___const__64b1 -D0712 15:11:01.586 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_45___const__64b1 -D0712 15:11:01.586 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_45___const__64b3 -D0712 15:11:01.586 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_45___const__64b3 -D0712 15:11:01.586 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_45___const__64b98 -D0712 15:11:01.586 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_45___const__64b98 -D0712 15:11:01.586 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_46___const__64b0 -D0712 15:11:01.586 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_46___const__64b0 -D0712 15:11:01.587 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_46___const__64b1 -D0712 15:11:01.587 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_46___const__64b1 -D0712 15:11:01.587 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_46___const__64b3 -D0712 15:11:01.587 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_46___const__64b3 -D0712 15:11:01.587 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_46___const__64b99 -D0712 15:11:01.587 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_46___const__64b99 -D0712 15:11:01.587 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_47___const__64b0 -D0712 15:11:01.587 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_47___const__64b0 -D0712 15:11:01.588 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_47___const__64b1 -D0712 15:11:01.588 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_47___const__64b1 -D0712 15:11:01.588 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_47___const__64b100 -D0712 15:11:01.588 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_47___const__64b100 -D0712 15:11:01.588 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_47___const__64b3 -D0712 15:11:01.588 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_47___const__64b3 -D0712 15:11:01.588 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_48___const__64b0 -D0712 15:11:01.588 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_48___const__64b0 -D0712 15:11:01.589 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_48___const__64b1 -D0712 15:11:01.589 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_48___const__64b1 -D0712 15:11:01.589 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_48___const__64b4 -D0712 15:11:01.589 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_48___const__64b4 -D0712 15:11:01.589 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_48___const__64b97 -D0712 15:11:01.589 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_48___const__64b97 -D0712 15:11:01.589 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_49___const__64b0 -D0712 15:11:01.589 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_49___const__64b0 -D0712 15:11:01.590 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_49___const__64b1 -D0712 15:11:01.590 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_49___const__64b1 -D0712 15:11:01.590 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_49___const__64b4 -D0712 15:11:01.590 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_49___const__64b4 -D0712 15:11:01.590 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_49___const__64b98 -D0712 15:11:01.590 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_49___const__64b98 -D0712 15:11:01.590 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_50___const__64b0 -D0712 15:11:01.590 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_50___const__64b0 -D0712 15:11:01.590 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_50___const__64b1 -D0712 15:11:01.590 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_50___const__64b1 -D0712 15:11:01.591 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_50___const__64b4 -D0712 15:11:01.591 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_50___const__64b4 -D0712 15:11:01.591 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_50___const__64b99 -D0712 15:11:01.591 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_50___const__64b99 -D0712 15:11:01.591 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_51___const__64b0 -D0712 15:11:01.591 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_51___const__64b0 -D0712 15:11:01.592 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_51___const__64b1 -D0712 15:11:01.592 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_51___const__64b1 -D0712 15:11:01.592 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_51___const__64b100 -D0712 15:11:01.592 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_51___const__64b100 -D0712 15:11:01.592 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_51___const__64b4 -D0712 15:11:01.592 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_51___const__64b4 -D0712 15:11:01.592 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_52___const__64b0 -D0712 15:11:01.592 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_52___const__64b0 -D0712 15:11:01.592 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_52___const__64b1 -D0712 15:11:01.592 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_52___const__64b1 -D0712 15:11:01.593 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_52___const__64b5 -D0712 15:11:01.593 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_52___const__64b5 -D0712 15:11:01.593 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_52___const__64b97 -D0712 15:11:01.593 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_52___const__64b97 -D0712 15:11:01.593 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_53___const__64b0 -D0712 15:11:01.593 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_53___const__64b0 -D0712 15:11:01.593 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_53___const__64b1 -D0712 15:11:01.593 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_53___const__64b1 -D0712 15:11:01.594 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_53___const__64b5 -D0712 15:11:01.594 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_53___const__64b5 -D0712 15:11:01.594 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_53___const__64b98 -D0712 15:11:01.594 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_53___const__64b98 -D0712 15:11:01.594 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_54___const__64b0 -D0712 15:11:01.594 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_54___const__64b0 -D0712 15:11:01.594 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_54___const__64b1 -D0712 15:11:01.594 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_54___const__64b1 -D0712 15:11:01.595 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_54___const__64b5 -D0712 15:11:01.595 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_54___const__64b5 -D0712 15:11:01.595 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_54___const__64b99 -D0712 15:11:01.595 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_54___const__64b99 -D0712 15:11:01.595 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_55___const__64b0 -D0712 15:11:01.595 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_55___const__64b0 -D0712 15:11:01.595 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_55___const__64b1 -D0712 15:11:01.595 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_55___const__64b1 -D0712 15:11:01.596 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_55___const__64b100 -D0712 15:11:01.596 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_55___const__64b100 -D0712 15:11:01.596 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_55___const__64b5 -D0712 15:11:01.596 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_55___const__64b5 -D0712 15:11:01.596 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_56___const__64b0 -D0712 15:11:01.596 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_56___const__64b0 -D0712 15:11:01.596 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_56___const__64b1 -D0712 15:11:01.596 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_56___const__64b1 -D0712 15:11:01.597 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_56___const__64b6 -D0712 15:11:01.597 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_56___const__64b6 -D0712 15:11:01.597 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_56___const__64b97 -D0712 15:11:01.597 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_56___const__64b97 -D0712 15:11:01.597 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_57___const__64b0 -D0712 15:11:01.597 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_57___const__64b0 -D0712 15:11:01.597 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_57___const__64b1 -D0712 15:11:01.597 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_57___const__64b1 -D0712 15:11:01.597 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_57___const__64b6 -D0712 15:11:01.597 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_57___const__64b6 -D0712 15:11:01.598 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_57___const__64b98 -D0712 15:11:01.598 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_57___const__64b98 -D0712 15:11:01.598 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_58___const__64b0 -D0712 15:11:01.598 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_58___const__64b0 -D0712 15:11:01.598 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_58___const__64b1 -D0712 15:11:01.598 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_58___const__64b1 -D0712 15:11:01.598 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_58___const__64b6 -D0712 15:11:01.598 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_58___const__64b6 -D0712 15:11:01.599 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_58___const__64b99 -D0712 15:11:01.599 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_58___const__64b99 -D0712 15:11:01.599 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_59___const__64b0 -D0712 15:11:01.599 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_59___const__64b0 -D0712 15:11:01.599 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_59___const__64b1 -D0712 15:11:01.599 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_59___const__64b1 -D0712 15:11:01.599 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_59___const__64b100 -D0712 15:11:01.599 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_59___const__64b100 -D0712 15:11:01.600 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_59___const__64b6 -D0712 15:11:01.600 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_59___const__64b6 -D0712 15:11:01.600 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_60___const__64b0 -D0712 15:11:01.600 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_60___const__64b0 -D0712 15:11:01.600 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_60___const__64b1 -D0712 15:11:01.600 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_60___const__64b1 -D0712 15:11:01.600 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_60___const__64b7 -D0712 15:11:01.600 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_60___const__64b7 -D0712 15:11:01.601 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_60___const__64b97 -D0712 15:11:01.601 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_60___const__64b97 -D0712 15:11:01.601 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_61___const__64b0 -D0712 15:11:01.601 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_61___const__64b0 -D0712 15:11:01.601 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_61___const__64b1 -D0712 15:11:01.601 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_61___const__64b1 -D0712 15:11:01.601 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_61___const__64b7 -D0712 15:11:01.601 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_61___const__64b7 -D0712 15:11:01.601 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_61___const__64b98 -D0712 15:11:01.601 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_61___const__64b98 -D0712 15:11:01.602 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_62___const__64b0 -D0712 15:11:01.602 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_62___const__64b0 -D0712 15:11:01.602 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_62___const__64b1 -D0712 15:11:01.602 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_62___const__64b1 -D0712 15:11:01.602 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_62___const__64b7 -D0712 15:11:01.602 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_62___const__64b7 -D0712 15:11:01.603 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_62___const__64b99 -D0712 15:11:01.603 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_62___const__64b99 -D0712 15:11:01.603 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_63___const__64b0 -D0712 15:11:01.603 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_63___const__64b0 -D0712 15:11:01.603 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_63___const__64b1 -D0712 15:11:01.603 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_63___const__64b1 -D0712 15:11:01.603 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_63___const__64b100 -D0712 15:11:01.603 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_63___const__64b100 -D0712 15:11:01.604 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_63___const__64b7 -D0712 15:11:01.604 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_63___const__64b7 -D0712 15:11:01.604 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_64___const__64b0 -D0712 15:11:01.604 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_64___const__64b0 -D0712 15:11:01.604 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_64___const__64b0 -D0712 15:11:01.604 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_64___const__64b0 -D0712 15:11:01.604 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_64___const__64b2 -D0712 15:11:01.604 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_64___const__64b2 -D0712 15:11:01.604 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_64___const__64b97 -D0712 15:11:01.604 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_64___const__64b97 -D0712 15:11:01.605 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_65___const__64b0 -D0712 15:11:01.605 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_65___const__64b0 -D0712 15:11:01.605 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_65___const__64b0 -D0712 15:11:01.605 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_65___const__64b0 -D0712 15:11:01.606 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_65___const__64b2 -D0712 15:11:01.606 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_65___const__64b2 -D0712 15:11:01.606 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_65___const__64b98 -D0712 15:11:01.606 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_65___const__64b98 -D0712 15:11:01.606 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_66___const__64b0 -D0712 15:11:01.606 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_66___const__64b0 -D0712 15:11:01.607 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_66___const__64b0 -D0712 15:11:01.607 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_66___const__64b0 -D0712 15:11:01.607 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_66___const__64b2 -D0712 15:11:01.607 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_66___const__64b2 -D0712 15:11:01.607 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_66___const__64b99 -D0712 15:11:01.607 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_66___const__64b99 -D0712 15:11:01.607 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_67___const__64b0 -D0712 15:11:01.607 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_67___const__64b0 -D0712 15:11:01.607 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_67___const__64b0 -D0712 15:11:01.607 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_67___const__64b0 -D0712 15:11:01.608 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_67___const__64b100 -D0712 15:11:01.608 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_67___const__64b100 -D0712 15:11:01.608 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_67___const__64b2 -D0712 15:11:01.608 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_67___const__64b2 -D0712 15:11:01.608 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_68___const__64b0 -D0712 15:11:01.608 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_68___const__64b0 -D0712 15:11:01.609 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_68___const__64b1 -D0712 15:11:01.609 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_68___const__64b1 -D0712 15:11:01.609 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_68___const__64b2 -D0712 15:11:01.609 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_68___const__64b2 -D0712 15:11:01.609 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_68___const__64b97 -D0712 15:11:01.609 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_68___const__64b97 -D0712 15:11:01.609 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_69___const__64b0 -D0712 15:11:01.609 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_69___const__64b0 -D0712 15:11:01.609 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_69___const__64b1 -D0712 15:11:01.609 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_69___const__64b1 -D0712 15:11:01.610 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_69___const__64b2 -D0712 15:11:01.610 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_69___const__64b2 -D0712 15:11:01.610 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_69___const__64b98 -D0712 15:11:01.610 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_69___const__64b98 -D0712 15:11:01.610 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_70___const__64b0 -D0712 15:11:01.610 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_70___const__64b0 -D0712 15:11:01.610 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_70___const__64b1 -D0712 15:11:01.610 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_70___const__64b1 -D0712 15:11:01.611 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_70___const__64b2 -D0712 15:11:01.611 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_70___const__64b2 -D0712 15:11:01.611 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_70___const__64b99 -D0712 15:11:01.611 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_70___const__64b99 -D0712 15:11:01.611 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_71___const__64b0 -D0712 15:11:01.611 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_71___const__64b0 -D0712 15:11:01.611 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_71___const__64b1 -D0712 15:11:01.611 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_71___const__64b1 -D0712 15:11:01.612 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_71___const__64b100 -D0712 15:11:01.612 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_71___const__64b100 -D0712 15:11:01.612 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_71___const__64b2 -D0712 15:11:01.612 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_71___const__64b2 -D0712 15:11:01.612 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_72___const__64b0 -D0712 15:11:01.612 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_72___const__64b0 -D0712 15:11:01.612 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_72___const__64b2 -D0712 15:11:01.612 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_72___const__64b2 -D0712 15:11:01.613 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_72___const__64b2 -D0712 15:11:01.613 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_72___const__64b2 -D0712 15:11:01.613 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_72___const__64b97 -D0712 15:11:01.613 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_72___const__64b97 -D0712 15:11:01.613 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_73___const__64b0 -D0712 15:11:01.613 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_73___const__64b0 -D0712 15:11:01.613 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_73___const__64b2 -D0712 15:11:01.613 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_73___const__64b2 -D0712 15:11:01.614 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_73___const__64b2 -D0712 15:11:01.614 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_73___const__64b2 -D0712 15:11:01.614 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_73___const__64b98 -D0712 15:11:01.614 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_73___const__64b98 -D0712 15:11:01.614 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_74___const__64b0 -D0712 15:11:01.614 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_74___const__64b0 -D0712 15:11:01.614 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_74___const__64b2 -D0712 15:11:01.614 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_74___const__64b2 -D0712 15:11:01.615 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_74___const__64b2 -D0712 15:11:01.615 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_74___const__64b2 -D0712 15:11:01.615 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_74___const__64b99 -D0712 15:11:01.615 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_74___const__64b99 -D0712 15:11:01.615 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_75___const__64b0 -D0712 15:11:01.615 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_75___const__64b0 -D0712 15:11:01.615 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_75___const__64b100 -D0712 15:11:01.615 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_75___const__64b100 -D0712 15:11:01.616 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_75___const__64b2 -D0712 15:11:01.616 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_75___const__64b2 -D0712 15:11:01.616 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_75___const__64b2 -D0712 15:11:01.616 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_75___const__64b2 -D0712 15:11:01.616 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_76___const__64b0 -D0712 15:11:01.616 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_76___const__64b0 -D0712 15:11:01.616 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_76___const__64b2 -D0712 15:11:01.616 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_76___const__64b2 -D0712 15:11:01.616 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_76___const__64b3 -D0712 15:11:01.616 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_76___const__64b3 -D0712 15:11:01.617 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_76___const__64b97 -D0712 15:11:01.617 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_76___const__64b97 -D0712 15:11:01.617 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_77___const__64b0 -D0712 15:11:01.617 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_77___const__64b0 -D0712 15:11:01.617 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_77___const__64b2 -D0712 15:11:01.617 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_77___const__64b2 -D0712 15:11:01.618 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_77___const__64b3 -D0712 15:11:01.618 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_77___const__64b3 -D0712 15:11:01.618 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_77___const__64b98 -D0712 15:11:01.618 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_77___const__64b98 -D0712 15:11:01.618 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_78___const__64b0 -D0712 15:11:01.618 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_78___const__64b0 -D0712 15:11:01.618 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_78___const__64b2 -D0712 15:11:01.618 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_78___const__64b2 -D0712 15:11:01.619 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_78___const__64b3 -D0712 15:11:01.619 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_78___const__64b3 -D0712 15:11:01.619 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_78___const__64b99 -D0712 15:11:01.619 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_78___const__64b99 -D0712 15:11:01.619 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_79___const__64b0 -D0712 15:11:01.619 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_79___const__64b0 -D0712 15:11:01.619 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_79___const__64b100 -D0712 15:11:01.619 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_79___const__64b100 -D0712 15:11:01.620 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_79___const__64b2 -D0712 15:11:01.620 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_79___const__64b2 -D0712 15:11:01.620 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_79___const__64b3 -D0712 15:11:01.620 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_79___const__64b3 -D0712 15:11:01.620 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_80___const__64b0 -D0712 15:11:01.620 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_80___const__64b0 -D0712 15:11:01.620 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_80___const__64b2 -D0712 15:11:01.620 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_80___const__64b2 -D0712 15:11:01.621 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_80___const__64b4 -D0712 15:11:01.621 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_80___const__64b4 -D0712 15:11:01.621 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_80___const__64b97 -D0712 15:11:01.621 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_80___const__64b97 -D0712 15:11:01.621 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_81___const__64b0 -D0712 15:11:01.621 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_81___const__64b0 -D0712 15:11:01.621 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_81___const__64b2 -D0712 15:11:01.621 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_81___const__64b2 -D0712 15:11:01.622 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_81___const__64b4 -D0712 15:11:01.622 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_81___const__64b4 -D0712 15:11:01.622 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_81___const__64b98 -D0712 15:11:01.622 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_81___const__64b98 -D0712 15:11:01.622 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_82___const__64b0 -D0712 15:11:01.622 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_82___const__64b0 -D0712 15:11:01.622 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_82___const__64b2 -D0712 15:11:01.622 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_82___const__64b2 -D0712 15:11:01.623 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_82___const__64b4 -D0712 15:11:01.623 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_82___const__64b4 -D0712 15:11:01.623 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_82___const__64b99 -D0712 15:11:01.623 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_82___const__64b99 -D0712 15:11:01.623 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_83___const__64b0 -D0712 15:11:01.623 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_83___const__64b0 -D0712 15:11:01.623 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_83___const__64b100 -D0712 15:11:01.623 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_83___const__64b100 -D0712 15:11:01.624 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_83___const__64b2 -D0712 15:11:01.624 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_83___const__64b2 -D0712 15:11:01.624 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_83___const__64b4 -D0712 15:11:01.624 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_83___const__64b4 -D0712 15:11:01.624 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_84___const__64b0 -D0712 15:11:01.624 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_84___const__64b0 -D0712 15:11:01.624 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_84___const__64b2 -D0712 15:11:01.624 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_84___const__64b2 -D0712 15:11:01.625 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_84___const__64b5 -D0712 15:11:01.625 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_84___const__64b5 -D0712 15:11:01.625 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_84___const__64b97 -D0712 15:11:01.625 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_84___const__64b97 -D0712 15:11:01.625 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_85___const__64b0 -D0712 15:11:01.625 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_85___const__64b0 -D0712 15:11:01.625 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_85___const__64b2 -D0712 15:11:01.625 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_85___const__64b2 -D0712 15:11:01.626 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_85___const__64b5 -D0712 15:11:01.626 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_85___const__64b5 -D0712 15:11:01.626 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_85___const__64b98 -D0712 15:11:01.626 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_85___const__64b98 -D0712 15:11:01.626 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_86___const__64b0 -D0712 15:11:01.626 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_86___const__64b0 -D0712 15:11:01.626 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_86___const__64b2 -D0712 15:11:01.626 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_86___const__64b2 -D0712 15:11:01.627 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_86___const__64b5 -D0712 15:11:01.627 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_86___const__64b5 -D0712 15:11:01.627 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_86___const__64b99 -D0712 15:11:01.627 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_86___const__64b99 -D0712 15:11:01.627 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_87___const__64b0 -D0712 15:11:01.627 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_87___const__64b0 -D0712 15:11:01.627 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_87___const__64b100 -D0712 15:11:01.627 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_87___const__64b100 -D0712 15:11:01.628 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_87___const__64b2 -D0712 15:11:01.628 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_87___const__64b2 -D0712 15:11:01.628 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_87___const__64b5 -D0712 15:11:01.628 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_87___const__64b5 -D0712 15:11:01.628 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_88___const__64b0 -D0712 15:11:01.628 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_88___const__64b0 -D0712 15:11:01.628 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_88___const__64b2 -D0712 15:11:01.628 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_88___const__64b2 -D0712 15:11:01.629 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_88___const__64b6 -D0712 15:11:01.629 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_88___const__64b6 -D0712 15:11:01.629 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_88___const__64b97 -D0712 15:11:01.629 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_88___const__64b97 -D0712 15:11:01.629 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_89___const__64b0 -D0712 15:11:01.629 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_89___const__64b0 -D0712 15:11:01.629 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_89___const__64b2 -D0712 15:11:01.629 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_89___const__64b2 -D0712 15:11:01.630 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_89___const__64b6 -D0712 15:11:01.630 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_89___const__64b6 -D0712 15:11:01.630 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_89___const__64b98 -D0712 15:11:01.630 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_89___const__64b98 -D0712 15:11:01.630 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_90___const__64b0 -D0712 15:11:01.630 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_90___const__64b0 -D0712 15:11:01.630 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_90___const__64b2 -D0712 15:11:01.630 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_90___const__64b2 -D0712 15:11:01.631 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_90___const__64b6 -D0712 15:11:01.631 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_90___const__64b6 -D0712 15:11:01.631 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_90___const__64b99 -D0712 15:11:01.631 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_90___const__64b99 -D0712 15:11:01.631 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_91___const__64b0 -D0712 15:11:01.631 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_91___const__64b0 -D0712 15:11:01.631 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_91___const__64b100 -D0712 15:11:01.631 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_91___const__64b100 -D0712 15:11:01.632 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_91___const__64b2 -D0712 15:11:01.632 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_91___const__64b2 -D0712 15:11:01.632 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_91___const__64b6 -D0712 15:11:01.632 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_91___const__64b6 -D0712 15:11:01.632 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_92___const__64b0 -D0712 15:11:01.632 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_92___const__64b0 -D0712 15:11:01.633 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_92___const__64b2 -D0712 15:11:01.633 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_92___const__64b2 -D0712 15:11:01.633 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_92___const__64b7 -D0712 15:11:01.633 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_92___const__64b7 -D0712 15:11:01.633 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_92___const__64b97 -D0712 15:11:01.633 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_92___const__64b97 -D0712 15:11:01.633 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_93___const__64b0 -D0712 15:11:01.633 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_93___const__64b0 -D0712 15:11:01.634 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_93___const__64b2 -D0712 15:11:01.634 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_93___const__64b2 -D0712 15:11:01.634 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_93___const__64b7 -D0712 15:11:01.634 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_93___const__64b7 -D0712 15:11:01.634 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_93___const__64b98 -D0712 15:11:01.634 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_93___const__64b98 -D0712 15:11:01.634 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_94___const__64b0 -D0712 15:11:01.634 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_94___const__64b0 -D0712 15:11:01.634 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_94___const__64b2 -D0712 15:11:01.634 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_94___const__64b2 -D0712 15:11:01.635 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_94___const__64b7 -D0712 15:11:01.635 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_94___const__64b7 -D0712 15:11:01.635 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_94___const__64b99 -D0712 15:11:01.635 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_94___const__64b99 -D0712 15:11:01.635 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_95___const__64b0 -D0712 15:11:01.635 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_95___const__64b0 -D0712 15:11:01.636 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_95___const__64b100 -D0712 15:11:01.636 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_95___const__64b100 -D0712 15:11:01.636 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_95___const__64b2 -D0712 15:11:01.636 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_95___const__64b2 -D0712 15:11:01.636 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_95___const__64b7 -D0712 15:11:01.636 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_95___const__64b7 -D0712 15:11:01.636 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_96___const__64b0 -D0712 15:11:01.636 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_96___const__64b0 -D0712 15:11:01.637 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_96___const__64b0 -D0712 15:11:01.637 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_96___const__64b0 -D0712 15:11:01.637 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_96___const__64b1 -D0712 15:11:01.637 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_96___const__64b1 -D0712 15:11:01.637 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_96___const__64b97 -D0712 15:11:01.637 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_96___const__64b97 -D0712 15:11:01.637 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_97___const__64b0 -D0712 15:11:01.637 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_97___const__64b0 -D0712 15:11:01.638 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_97___const__64b0 -D0712 15:11:01.638 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_97___const__64b0 -D0712 15:11:01.638 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_97___const__64b1 -D0712 15:11:01.638 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_97___const__64b1 -D0712 15:11:01.638 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_97___const__64b98 -D0712 15:11:01.638 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_97___const__64b98 -D0712 15:11:01.638 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_98___const__64b0 -D0712 15:11:01.638 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_98___const__64b0 -D0712 15:11:01.639 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_98___const__64b0 -D0712 15:11:01.639 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_98___const__64b0 -D0712 15:11:01.639 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_98___const__64b1 -D0712 15:11:01.639 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_98___const__64b1 -D0712 15:11:01.639 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_98___const__64b99 -D0712 15:11:01.639 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_98___const__64b99 -D0712 15:11:01.639 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_99___const__64b0 -D0712 15:11:01.639 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_99___const__64b0 -D0712 15:11:01.640 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_99___const__64b0 -D0712 15:11:01.640 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_99___const__64b0 -D0712 15:11:01.640 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_99___const__64b1 -D0712 15:11:01.640 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_99___const__64b1 -D0712 15:11:01.640 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_99___const__64b100 -D0712 15:11:01.640 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_99___const__64b100 -D0712 15:11:01.640 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_100___const__64b0 -D0712 15:11:01.640 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_100___const__64b0 -D0712 15:11:01.641 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_100___const__64b1 -D0712 15:11:01.641 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_100___const__64b1 -D0712 15:11:01.641 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_100___const__64b1 -D0712 15:11:01.641 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_100___const__64b1 -D0712 15:11:01.641 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_100___const__64b97 -D0712 15:11:01.641 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_100___const__64b97 -D0712 15:11:01.642 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_101___const__64b0 -D0712 15:11:01.642 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_101___const__64b0 -D0712 15:11:01.642 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_101___const__64b1 -D0712 15:11:01.642 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_101___const__64b1 -D0712 15:11:01.642 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_101___const__64b1 -D0712 15:11:01.642 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_101___const__64b1 -D0712 15:11:01.642 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_101___const__64b98 -D0712 15:11:01.642 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_101___const__64b98 -D0712 15:11:01.643 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_102___const__64b0 -D0712 15:11:01.643 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_102___const__64b0 -D0712 15:11:01.643 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_102___const__64b1 -D0712 15:11:01.643 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_102___const__64b1 -D0712 15:11:01.643 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_102___const__64b1 -D0712 15:11:01.643 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_102___const__64b1 -D0712 15:11:01.643 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_102___const__64b99 -D0712 15:11:01.643 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_102___const__64b99 -D0712 15:11:01.644 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_103___const__64b0 -D0712 15:11:01.644 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_103___const__64b0 -D0712 15:11:01.644 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_103___const__64b1 -D0712 15:11:01.644 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_103___const__64b1 -D0712 15:11:01.644 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_103___const__64b1 -D0712 15:11:01.644 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_103___const__64b1 -D0712 15:11:01.644 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_103___const__64b100 -D0712 15:11:01.644 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_103___const__64b100 -D0712 15:11:01.645 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_104___const__64b0 -D0712 15:11:01.645 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_104___const__64b0 -D0712 15:11:01.645 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_104___const__64b1 -D0712 15:11:01.645 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_104___const__64b1 -D0712 15:11:01.645 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_104___const__64b2 -D0712 15:11:01.645 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_104___const__64b2 -D0712 15:11:01.645 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_104___const__64b97 -D0712 15:11:01.645 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_104___const__64b97 -D0712 15:11:01.646 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_105___const__64b0 -D0712 15:11:01.646 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_105___const__64b0 -D0712 15:11:01.646 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_105___const__64b1 -D0712 15:11:01.646 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_105___const__64b1 -D0712 15:11:01.646 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_105___const__64b2 -D0712 15:11:01.646 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_105___const__64b2 -D0712 15:11:01.646 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_105___const__64b98 -D0712 15:11:01.646 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_105___const__64b98 -D0712 15:11:01.647 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_106___const__64b0 -D0712 15:11:01.647 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_106___const__64b0 -D0712 15:11:01.647 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_106___const__64b1 -D0712 15:11:01.647 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_106___const__64b1 -D0712 15:11:01.647 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_106___const__64b2 -D0712 15:11:01.647 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_106___const__64b2 -D0712 15:11:01.647 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_106___const__64b99 -D0712 15:11:01.647 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_106___const__64b99 -D0712 15:11:01.648 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_107___const__64b0 -D0712 15:11:01.648 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_107___const__64b0 -D0712 15:11:01.648 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_107___const__64b1 -D0712 15:11:01.648 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_107___const__64b1 -D0712 15:11:01.648 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_107___const__64b100 -D0712 15:11:01.648 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_107___const__64b100 -D0712 15:11:01.648 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_107___const__64b2 -D0712 15:11:01.648 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_107___const__64b2 -D0712 15:11:01.649 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_108___const__64b0 -D0712 15:11:01.649 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_108___const__64b0 -D0712 15:11:01.649 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_108___const__64b1 -D0712 15:11:01.649 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_108___const__64b1 -D0712 15:11:01.649 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_108___const__64b3 -D0712 15:11:01.649 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_108___const__64b3 -D0712 15:11:01.649 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_108___const__64b97 -D0712 15:11:01.649 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_108___const__64b97 -D0712 15:11:01.650 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_109___const__64b0 -D0712 15:11:01.650 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_109___const__64b0 -D0712 15:11:01.650 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_109___const__64b1 -D0712 15:11:01.650 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_109___const__64b1 -D0712 15:11:01.650 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_109___const__64b3 -D0712 15:11:01.650 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_109___const__64b3 -D0712 15:11:01.650 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_109___const__64b98 -D0712 15:11:01.650 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_109___const__64b98 -D0712 15:11:01.651 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_110___const__64b0 -D0712 15:11:01.651 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_110___const__64b0 -D0712 15:11:01.651 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_110___const__64b1 -D0712 15:11:01.651 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_110___const__64b1 -D0712 15:11:01.651 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_110___const__64b3 -D0712 15:11:01.651 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_110___const__64b3 -D0712 15:11:01.651 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_110___const__64b99 -D0712 15:11:01.651 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_110___const__64b99 -D0712 15:11:01.652 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_111___const__64b0 -D0712 15:11:01.652 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_111___const__64b0 -D0712 15:11:01.652 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_111___const__64b1 -D0712 15:11:01.652 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_111___const__64b1 -D0712 15:11:01.652 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_111___const__64b100 -D0712 15:11:01.652 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_111___const__64b100 -D0712 15:11:01.652 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_111___const__64b3 -D0712 15:11:01.652 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_111___const__64b3 -D0712 15:11:01.653 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_112___const__64b0 -D0712 15:11:01.653 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_112___const__64b0 -D0712 15:11:01.653 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_112___const__64b1 -D0712 15:11:01.653 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_112___const__64b1 -D0712 15:11:01.653 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_112___const__64b4 -D0712 15:11:01.653 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_112___const__64b4 -D0712 15:11:01.653 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_112___const__64b97 -D0712 15:11:01.653 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_112___const__64b97 -D0712 15:11:01.654 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_113___const__64b0 -D0712 15:11:01.654 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_113___const__64b0 -D0712 15:11:01.654 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_113___const__64b1 -D0712 15:11:01.654 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_113___const__64b1 -D0712 15:11:01.654 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_113___const__64b4 -D0712 15:11:01.654 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_113___const__64b4 -D0712 15:11:01.655 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_113___const__64b98 -D0712 15:11:01.655 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_113___const__64b98 -D0712 15:11:01.655 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_114___const__64b0 -D0712 15:11:01.655 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_114___const__64b0 -D0712 15:11:01.655 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_114___const__64b1 -D0712 15:11:01.655 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_114___const__64b1 -D0712 15:11:01.655 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_114___const__64b4 -D0712 15:11:01.655 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_114___const__64b4 -D0712 15:11:01.656 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_114___const__64b99 -D0712 15:11:01.656 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_114___const__64b99 -D0712 15:11:01.656 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_115___const__64b0 -D0712 15:11:01.656 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_115___const__64b0 -D0712 15:11:01.656 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_115___const__64b1 -D0712 15:11:01.656 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_115___const__64b1 -D0712 15:11:01.656 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_115___const__64b100 -D0712 15:11:01.656 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_115___const__64b100 -D0712 15:11:01.657 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_115___const__64b4 -D0712 15:11:01.657 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_115___const__64b4 -D0712 15:11:01.657 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_116___const__64b0 -D0712 15:11:01.657 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_116___const__64b0 -D0712 15:11:01.657 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_116___const__64b1 -D0712 15:11:01.657 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_116___const__64b1 -D0712 15:11:01.658 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_116___const__64b5 -D0712 15:11:01.658 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_116___const__64b5 -D0712 15:11:01.658 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_116___const__64b97 -D0712 15:11:01.658 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_116___const__64b97 -D0712 15:11:01.658 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_117___const__64b0 -D0712 15:11:01.658 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_117___const__64b0 -D0712 15:11:01.658 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_117___const__64b1 -D0712 15:11:01.658 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_117___const__64b1 -D0712 15:11:01.659 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_117___const__64b5 -D0712 15:11:01.659 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_117___const__64b5 -D0712 15:11:01.659 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_117___const__64b98 -D0712 15:11:01.659 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_117___const__64b98 -D0712 15:11:01.659 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_118___const__64b0 -D0712 15:11:01.659 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_118___const__64b0 -D0712 15:11:01.659 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_118___const__64b1 -D0712 15:11:01.659 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_118___const__64b1 -D0712 15:11:01.660 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_118___const__64b5 -D0712 15:11:01.660 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_118___const__64b5 -D0712 15:11:01.660 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_118___const__64b99 -D0712 15:11:01.660 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_118___const__64b99 -D0712 15:11:01.660 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_119___const__64b0 -D0712 15:11:01.660 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_119___const__64b0 -D0712 15:11:01.660 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_119___const__64b1 -D0712 15:11:01.660 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_119___const__64b1 -D0712 15:11:01.661 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_119___const__64b100 -D0712 15:11:01.661 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_119___const__64b100 -D0712 15:11:01.661 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_119___const__64b5 -D0712 15:11:01.661 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_119___const__64b5 -D0712 15:11:01.661 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_120___const__64b0 -D0712 15:11:01.661 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_120___const__64b0 -D0712 15:11:01.661 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_120___const__64b1 -D0712 15:11:01.661 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_120___const__64b1 -D0712 15:11:01.662 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_120___const__64b6 -D0712 15:11:01.662 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_120___const__64b6 -D0712 15:11:01.662 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_120___const__64b97 -D0712 15:11:01.662 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_120___const__64b97 -D0712 15:11:01.662 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_121___const__64b0 -D0712 15:11:01.662 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_121___const__64b0 -D0712 15:11:01.662 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_121___const__64b1 -D0712 15:11:01.662 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_121___const__64b1 -D0712 15:11:01.663 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_121___const__64b6 -D0712 15:11:01.663 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_121___const__64b6 -D0712 15:11:01.663 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_121___const__64b98 -D0712 15:11:01.663 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_121___const__64b98 -D0712 15:11:01.663 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_122___const__64b0 -D0712 15:11:01.663 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_122___const__64b0 -D0712 15:11:01.664 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_122___const__64b1 -D0712 15:11:01.664 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_122___const__64b1 -D0712 15:11:01.664 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_122___const__64b6 -D0712 15:11:01.664 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_122___const__64b6 -D0712 15:11:01.664 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_122___const__64b99 -D0712 15:11:01.664 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_122___const__64b99 -D0712 15:11:01.664 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_123___const__64b0 -D0712 15:11:01.664 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_123___const__64b0 -D0712 15:11:01.665 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_123___const__64b1 -D0712 15:11:01.665 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_123___const__64b1 -D0712 15:11:01.665 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_123___const__64b100 -D0712 15:11:01.665 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_123___const__64b100 -D0712 15:11:01.665 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_123___const__64b6 -D0712 15:11:01.665 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_123___const__64b6 -D0712 15:11:01.665 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_124___const__64b0 -D0712 15:11:01.665 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_124___const__64b0 -D0712 15:11:01.666 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_124___const__64b1 -D0712 15:11:01.666 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_124___const__64b1 -D0712 15:11:01.666 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_124___const__64b7 -D0712 15:11:01.666 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_124___const__64b7 -D0712 15:11:01.666 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_124___const__64b97 -D0712 15:11:01.666 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_124___const__64b97 -D0712 15:11:01.667 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_125___const__64b0 -D0712 15:11:01.667 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_125___const__64b0 -D0712 15:11:01.667 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_125___const__64b1 -D0712 15:11:01.667 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_125___const__64b1 -D0712 15:11:01.667 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_125___const__64b7 -D0712 15:11:01.667 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_125___const__64b7 -D0712 15:11:01.667 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_125___const__64b98 -D0712 15:11:01.667 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_125___const__64b98 -D0712 15:11:01.668 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_126___const__64b0 -D0712 15:11:01.668 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_126___const__64b0 -D0712 15:11:01.668 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_126___const__64b1 -D0712 15:11:01.668 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_126___const__64b1 -D0712 15:11:01.668 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_126___const__64b7 -D0712 15:11:01.668 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_126___const__64b7 -D0712 15:11:01.668 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_126___const__64b99 -D0712 15:11:01.668 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_126___const__64b99 -D0712 15:11:01.669 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_127___const__64b0 -D0712 15:11:01.669 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_127___const__64b0 -D0712 15:11:01.669 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_127___const__64b1 -D0712 15:11:01.669 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_127___const__64b1 -D0712 15:11:01.669 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_127___const__64b100 -D0712 15:11:01.669 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_127___const__64b100 -D0712 15:11:01.669 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_127___const__64b7 -D0712 15:11:01.669 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_127___const__64b7 -D0712 15:11:01.670 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_128___const__64b0 -D0712 15:11:01.670 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_128___const__64b0 -D0712 15:11:01.670 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_128___const__64b1 -D0712 15:11:01.670 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_128___const__64b1 -D0712 15:11:01.670 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_128___const__64b1 -D0712 15:11:01.670 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_128___const__64b1 -D0712 15:11:01.670 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_128___const__64b97 -D0712 15:11:01.670 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_128___const__64b97 -D0712 15:11:01.671 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_129___const__64b0 -D0712 15:11:01.671 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_129___const__64b0 -D0712 15:11:01.671 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_129___const__64b1 -D0712 15:11:01.671 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_129___const__64b1 -D0712 15:11:01.671 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_129___const__64b1 -D0712 15:11:01.671 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_129___const__64b1 -D0712 15:11:01.671 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_129___const__64b98 -D0712 15:11:01.671 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_129___const__64b98 -D0712 15:11:01.672 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_130___const__64b0 -D0712 15:11:01.672 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_130___const__64b0 -D0712 15:11:01.672 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_130___const__64b1 -D0712 15:11:01.672 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_130___const__64b1 -D0712 15:11:01.672 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_130___const__64b1 -D0712 15:11:01.672 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_130___const__64b1 -D0712 15:11:01.672 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_130___const__64b99 -D0712 15:11:01.672 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_130___const__64b99 -D0712 15:11:01.673 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_131___const__64b0 -D0712 15:11:01.673 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_131___const__64b0 -D0712 15:11:01.673 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_131___const__64b1 -D0712 15:11:01.673 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_131___const__64b1 -D0712 15:11:01.673 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_131___const__64b1 -D0712 15:11:01.673 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_131___const__64b1 -D0712 15:11:01.673 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_131___const__64b100 -D0712 15:11:01.673 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_131___const__64b100 -D0712 15:11:01.674 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_132___const__64b1 -D0712 15:11:01.674 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_132___const__64b1 -D0712 15:11:01.674 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_132___const__64b1 -D0712 15:11:01.674 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_132___const__64b1 -D0712 15:11:01.674 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_132___const__64b1 -D0712 15:11:01.674 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_132___const__64b1 -D0712 15:11:01.674 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_132___const__64b97 -D0712 15:11:01.674 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_132___const__64b97 -D0712 15:11:01.675 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_133___const__64b1 -D0712 15:11:01.675 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_133___const__64b1 -D0712 15:11:01.675 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_133___const__64b1 -D0712 15:11:01.675 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_133___const__64b1 -D0712 15:11:01.675 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_133___const__64b1 -D0712 15:11:01.675 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_133___const__64b1 -D0712 15:11:01.675 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_133___const__64b98 -D0712 15:11:01.675 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_133___const__64b98 -D0712 15:11:01.676 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_134___const__64b1 -D0712 15:11:01.676 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_134___const__64b1 -D0712 15:11:01.676 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_134___const__64b1 -D0712 15:11:01.676 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_134___const__64b1 -D0712 15:11:01.676 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_134___const__64b1 -D0712 15:11:01.676 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_134___const__64b1 -D0712 15:11:01.676 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_134___const__64b99 -D0712 15:11:01.676 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_134___const__64b99 -D0712 15:11:01.677 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_135___const__64b1 -D0712 15:11:01.677 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_135___const__64b1 -D0712 15:11:01.677 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_135___const__64b1 -D0712 15:11:01.677 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_135___const__64b1 -D0712 15:11:01.677 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_135___const__64b1 -D0712 15:11:01.677 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_135___const__64b1 -D0712 15:11:01.677 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_135___const__64b100 -D0712 15:11:01.677 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_135___const__64b100 -D0712 15:11:01.678 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_136___const__64b1 -D0712 15:11:01.678 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_136___const__64b1 -D0712 15:11:01.679 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_136___const__64b1 -D0712 15:11:01.679 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_136___const__64b1 -D0712 15:11:01.679 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_136___const__64b2 -D0712 15:11:01.679 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_136___const__64b2 -D0712 15:11:01.679 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_136___const__64b97 -D0712 15:11:01.679 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_136___const__64b97 -D0712 15:11:01.679 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_137___const__64b1 -D0712 15:11:01.679 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_137___const__64b1 -D0712 15:11:01.680 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_137___const__64b1 -D0712 15:11:01.680 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_137___const__64b1 -D0712 15:11:01.680 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_137___const__64b2 -D0712 15:11:01.680 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_137___const__64b2 -D0712 15:11:01.680 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_137___const__64b98 -D0712 15:11:01.680 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_137___const__64b98 -D0712 15:11:01.680 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_138___const__64b1 -D0712 15:11:01.680 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_138___const__64b1 -D0712 15:11:01.681 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_138___const__64b1 -D0712 15:11:01.681 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_138___const__64b1 -D0712 15:11:01.681 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_138___const__64b2 -D0712 15:11:01.681 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_138___const__64b2 -D0712 15:11:01.681 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_138___const__64b99 -D0712 15:11:01.681 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_138___const__64b99 -D0712 15:11:01.682 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_139___const__64b1 -D0712 15:11:01.682 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_139___const__64b1 -D0712 15:11:01.682 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_139___const__64b1 -D0712 15:11:01.682 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_139___const__64b1 -D0712 15:11:01.682 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_139___const__64b100 -D0712 15:11:01.682 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_139___const__64b100 -D0712 15:11:01.682 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_139___const__64b2 -D0712 15:11:01.682 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_139___const__64b2 -D0712 15:11:01.683 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_140___const__64b1 -D0712 15:11:01.683 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_140___const__64b1 -D0712 15:11:01.683 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_140___const__64b1 -D0712 15:11:01.683 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_140___const__64b1 -D0712 15:11:01.683 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_140___const__64b3 -D0712 15:11:01.683 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_140___const__64b3 -D0712 15:11:01.683 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_140___const__64b97 -D0712 15:11:01.683 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_140___const__64b97 -D0712 15:11:01.684 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_141___const__64b1 -D0712 15:11:01.684 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_141___const__64b1 -D0712 15:11:01.684 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_141___const__64b1 -D0712 15:11:01.684 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_141___const__64b1 -D0712 15:11:01.684 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_141___const__64b3 -D0712 15:11:01.684 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_141___const__64b3 -D0712 15:11:01.684 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_141___const__64b98 -D0712 15:11:01.684 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_141___const__64b98 -D0712 15:11:01.685 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_142___const__64b1 -D0712 15:11:01.685 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_142___const__64b1 -D0712 15:11:01.685 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_142___const__64b1 -D0712 15:11:01.685 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_142___const__64b1 -D0712 15:11:01.685 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_142___const__64b3 -D0712 15:11:01.685 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_142___const__64b3 -D0712 15:11:01.685 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_142___const__64b99 -D0712 15:11:01.685 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_142___const__64b99 -D0712 15:11:01.686 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_143___const__64b1 -D0712 15:11:01.686 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_143___const__64b1 -D0712 15:11:01.686 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_143___const__64b1 -D0712 15:11:01.686 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_143___const__64b1 -D0712 15:11:01.686 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_143___const__64b100 -D0712 15:11:01.686 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_143___const__64b100 -D0712 15:11:01.686 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_143___const__64b3 -D0712 15:11:01.686 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_143___const__64b3 -D0712 15:11:01.687 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_144___const__64b1 -D0712 15:11:01.687 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_144___const__64b1 -D0712 15:11:01.687 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_144___const__64b1 -D0712 15:11:01.687 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_144___const__64b1 -D0712 15:11:01.687 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_144___const__64b4 -D0712 15:11:01.687 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_144___const__64b4 -D0712 15:11:01.687 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_144___const__64b97 -D0712 15:11:01.687 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_144___const__64b97 -D0712 15:11:01.688 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_145___const__64b1 -D0712 15:11:01.688 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_145___const__64b1 -D0712 15:11:01.688 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_145___const__64b1 -D0712 15:11:01.688 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_145___const__64b1 -D0712 15:11:01.688 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_145___const__64b4 -D0712 15:11:01.688 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_145___const__64b4 -D0712 15:11:01.688 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_145___const__64b98 -D0712 15:11:01.688 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_145___const__64b98 -D0712 15:11:01.689 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_146___const__64b1 -D0712 15:11:01.689 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_146___const__64b1 -D0712 15:11:01.689 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_146___const__64b1 -D0712 15:11:01.689 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_146___const__64b1 -D0712 15:11:01.689 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_146___const__64b4 -D0712 15:11:01.689 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_146___const__64b4 -D0712 15:11:01.689 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_146___const__64b99 -D0712 15:11:01.689 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_146___const__64b99 -D0712 15:11:01.690 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_147___const__64b1 -D0712 15:11:01.690 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_147___const__64b1 -D0712 15:11:01.690 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_147___const__64b1 -D0712 15:11:01.690 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_147___const__64b1 -D0712 15:11:01.690 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_147___const__64b100 -D0712 15:11:01.690 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_147___const__64b100 -D0712 15:11:01.690 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_147___const__64b4 -D0712 15:11:01.690 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_147___const__64b4 -D0712 15:11:01.691 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_148___const__64b1 -D0712 15:11:01.691 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_148___const__64b1 -D0712 15:11:01.691 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_148___const__64b1 -D0712 15:11:01.691 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_148___const__64b1 -D0712 15:11:01.691 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_148___const__64b5 -D0712 15:11:01.691 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_148___const__64b5 -D0712 15:11:01.691 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_148___const__64b97 -D0712 15:11:01.691 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_148___const__64b97 -D0712 15:11:01.692 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_149___const__64b1 -D0712 15:11:01.692 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_149___const__64b1 -D0712 15:11:01.692 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_149___const__64b1 -D0712 15:11:01.692 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_149___const__64b1 -D0712 15:11:01.692 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_149___const__64b5 -D0712 15:11:01.692 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_149___const__64b5 -D0712 15:11:01.693 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_149___const__64b98 -D0712 15:11:01.693 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_149___const__64b98 -D0712 15:11:01.693 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_150___const__64b1 -D0712 15:11:01.693 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_150___const__64b1 -D0712 15:11:01.693 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_150___const__64b1 -D0712 15:11:01.693 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_150___const__64b1 -D0712 15:11:01.693 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_150___const__64b5 -D0712 15:11:01.693 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_150___const__64b5 -D0712 15:11:01.694 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_150___const__64b99 -D0712 15:11:01.694 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_150___const__64b99 -D0712 15:11:01.694 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_151___const__64b1 -D0712 15:11:01.694 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_151___const__64b1 -D0712 15:11:01.694 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_151___const__64b1 -D0712 15:11:01.694 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_151___const__64b1 -D0712 15:11:01.695 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_151___const__64b100 -D0712 15:11:01.695 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_151___const__64b100 -D0712 15:11:01.695 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_151___const__64b5 -D0712 15:11:01.695 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_151___const__64b5 -D0712 15:11:01.695 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_152___const__64b1 -D0712 15:11:01.695 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_152___const__64b1 -D0712 15:11:01.695 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_152___const__64b1 -D0712 15:11:01.695 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_152___const__64b1 -D0712 15:11:01.696 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_152___const__64b6 -D0712 15:11:01.696 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_152___const__64b6 -D0712 15:11:01.696 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_152___const__64b97 -D0712 15:11:01.696 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_152___const__64b97 -D0712 15:11:01.696 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_153___const__64b1 -D0712 15:11:01.696 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_153___const__64b1 -D0712 15:11:01.696 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_153___const__64b1 -D0712 15:11:01.696 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_153___const__64b1 -D0712 15:11:01.697 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_153___const__64b6 -D0712 15:11:01.697 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_153___const__64b6 -D0712 15:11:01.697 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_153___const__64b98 -D0712 15:11:01.697 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_153___const__64b98 -D0712 15:11:01.697 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_154___const__64b1 -D0712 15:11:01.697 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_154___const__64b1 -D0712 15:11:01.698 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_154___const__64b1 -D0712 15:11:01.698 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_154___const__64b1 -D0712 15:11:01.698 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_154___const__64b6 -D0712 15:11:01.698 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_154___const__64b6 -D0712 15:11:01.698 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_154___const__64b99 -D0712 15:11:01.698 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_154___const__64b99 -D0712 15:11:01.698 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_155___const__64b1 -D0712 15:11:01.698 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_155___const__64b1 -D0712 15:11:01.699 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_155___const__64b1 -D0712 15:11:01.699 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_155___const__64b1 -D0712 15:11:01.699 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_155___const__64b100 -D0712 15:11:01.699 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_155___const__64b100 -D0712 15:11:01.699 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_155___const__64b6 -D0712 15:11:01.699 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_155___const__64b6 -D0712 15:11:01.700 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_156___const__64b1 -D0712 15:11:01.700 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_156___const__64b1 -D0712 15:11:01.700 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_156___const__64b1 -D0712 15:11:01.700 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_156___const__64b1 -D0712 15:11:01.700 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_156___const__64b7 -D0712 15:11:01.700 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_156___const__64b7 -D0712 15:11:01.700 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_156___const__64b97 -D0712 15:11:01.700 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_156___const__64b97 -D0712 15:11:01.701 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_157___const__64b1 -D0712 15:11:01.701 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_157___const__64b1 -D0712 15:11:01.701 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_157___const__64b1 -D0712 15:11:01.701 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_157___const__64b1 -D0712 15:11:01.701 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_157___const__64b7 -D0712 15:11:01.701 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_157___const__64b7 -D0712 15:11:01.701 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_157___const__64b98 -D0712 15:11:01.701 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_157___const__64b98 -D0712 15:11:01.702 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_158___const__64b1 -D0712 15:11:01.702 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_158___const__64b1 -D0712 15:11:01.702 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_158___const__64b1 -D0712 15:11:01.702 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_158___const__64b1 -D0712 15:11:01.702 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_158___const__64b7 -D0712 15:11:01.702 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_158___const__64b7 -D0712 15:11:01.702 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_158___const__64b99 -D0712 15:11:01.702 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_158___const__64b99 -D0712 15:11:01.703 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_159___const__64b1 -D0712 15:11:01.703 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_159___const__64b1 -D0712 15:11:01.703 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_159___const__64b1 -D0712 15:11:01.703 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_159___const__64b1 -D0712 15:11:01.703 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_159___const__64b100 -D0712 15:11:01.703 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_159___const__64b100 -D0712 15:11:01.703 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_159___const__64b7 -D0712 15:11:01.703 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_159___const__64b7 -D0712 15:11:01.704 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_160___const__64b0 -D0712 15:11:01.704 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_160___const__64b0 -D0712 15:11:01.704 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_160___const__64b1 -D0712 15:11:01.704 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_160___const__64b1 -D0712 15:11:01.704 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_160___const__64b2 -D0712 15:11:01.704 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_160___const__64b2 -D0712 15:11:01.704 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_160___const__64b97 -D0712 15:11:01.704 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_160___const__64b97 -D0712 15:11:01.705 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_161___const__64b0 -D0712 15:11:01.705 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_161___const__64b0 -D0712 15:11:01.705 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_161___const__64b1 -D0712 15:11:01.705 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_161___const__64b1 -D0712 15:11:01.705 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_161___const__64b2 -D0712 15:11:01.705 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_161___const__64b2 -D0712 15:11:01.705 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_161___const__64b98 -D0712 15:11:01.705 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_161___const__64b98 -D0712 15:11:01.706 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_162___const__64b0 -D0712 15:11:01.706 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_162___const__64b0 -D0712 15:11:01.706 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_162___const__64b1 -D0712 15:11:01.706 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_162___const__64b1 -D0712 15:11:01.706 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_162___const__64b2 -D0712 15:11:01.706 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_162___const__64b2 -D0712 15:11:01.707 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_162___const__64b99 -D0712 15:11:01.707 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_162___const__64b99 -D0712 15:11:01.707 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_163___const__64b0 -D0712 15:11:01.707 tapa.core:671] pipelined signal: 64'd0 => bloom_hier_arbiter_atom_163___const__64b0 -D0712 15:11:01.707 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_163___const__64b1 -D0712 15:11:01.707 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_163___const__64b1 -D0712 15:11:01.708 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_163___const__64b100 -D0712 15:11:01.708 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_163___const__64b100 -D0712 15:11:01.708 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_163___const__64b2 -D0712 15:11:01.708 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_163___const__64b2 -D0712 15:11:01.708 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_164___const__64b1 -D0712 15:11:01.708 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_164___const__64b1 -D0712 15:11:01.709 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_164___const__64b1 -D0712 15:11:01.709 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_164___const__64b1 -D0712 15:11:01.709 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_164___const__64b2 -D0712 15:11:01.709 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_164___const__64b2 -D0712 15:11:01.709 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_164___const__64b97 -D0712 15:11:01.709 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_164___const__64b97 -D0712 15:11:01.709 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_165___const__64b1 -D0712 15:11:01.709 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_165___const__64b1 -D0712 15:11:01.710 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_165___const__64b1 -D0712 15:11:01.710 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_165___const__64b1 -D0712 15:11:01.710 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_165___const__64b2 -D0712 15:11:01.710 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_165___const__64b2 -D0712 15:11:01.710 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_165___const__64b98 -D0712 15:11:01.710 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_165___const__64b98 -D0712 15:11:01.711 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_166___const__64b1 -D0712 15:11:01.711 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_166___const__64b1 -D0712 15:11:01.711 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_166___const__64b1 -D0712 15:11:01.711 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_166___const__64b1 -D0712 15:11:01.711 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_166___const__64b2 -D0712 15:11:01.711 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_166___const__64b2 -D0712 15:11:01.711 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_166___const__64b99 -D0712 15:11:01.711 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_166___const__64b99 -D0712 15:11:01.712 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_167___const__64b1 -D0712 15:11:01.712 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_167___const__64b1 -D0712 15:11:01.712 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_167___const__64b1 -D0712 15:11:01.712 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_167___const__64b1 -D0712 15:11:01.712 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_167___const__64b100 -D0712 15:11:01.712 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_167___const__64b100 -D0712 15:11:01.712 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_167___const__64b2 -D0712 15:11:01.712 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_167___const__64b2 -D0712 15:11:01.713 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_168___const__64b1 -D0712 15:11:01.713 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_168___const__64b1 -D0712 15:11:01.713 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_168___const__64b2 -D0712 15:11:01.713 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_168___const__64b2 -D0712 15:11:01.713 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_168___const__64b2 -D0712 15:11:01.713 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_168___const__64b2 -D0712 15:11:01.713 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_168___const__64b97 -D0712 15:11:01.713 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_168___const__64b97 -D0712 15:11:01.714 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_169___const__64b1 -D0712 15:11:01.714 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_169___const__64b1 -D0712 15:11:01.714 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_169___const__64b2 -D0712 15:11:01.714 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_169___const__64b2 -D0712 15:11:01.714 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_169___const__64b2 -D0712 15:11:01.714 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_169___const__64b2 -D0712 15:11:01.714 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_169___const__64b98 -D0712 15:11:01.714 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_169___const__64b98 -D0712 15:11:01.715 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_170___const__64b1 -D0712 15:11:01.715 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_170___const__64b1 -D0712 15:11:01.715 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_170___const__64b2 -D0712 15:11:01.715 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_170___const__64b2 -D0712 15:11:01.715 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_170___const__64b2 -D0712 15:11:01.715 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_170___const__64b2 -D0712 15:11:01.715 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_170___const__64b99 -D0712 15:11:01.715 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_170___const__64b99 -D0712 15:11:01.716 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_171___const__64b1 -D0712 15:11:01.716 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_171___const__64b1 -D0712 15:11:01.716 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_171___const__64b100 -D0712 15:11:01.716 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_171___const__64b100 -D0712 15:11:01.716 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_171___const__64b2 -D0712 15:11:01.716 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_171___const__64b2 -D0712 15:11:01.716 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_171___const__64b2 -D0712 15:11:01.716 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_171___const__64b2 -D0712 15:11:01.717 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_172___const__64b1 -D0712 15:11:01.717 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_172___const__64b1 -D0712 15:11:01.717 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_172___const__64b2 -D0712 15:11:01.717 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_172___const__64b2 -D0712 15:11:01.718 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_172___const__64b3 -D0712 15:11:01.718 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_172___const__64b3 -D0712 15:11:01.718 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_172___const__64b97 -D0712 15:11:01.718 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_172___const__64b97 -D0712 15:11:01.718 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_173___const__64b1 -D0712 15:11:01.718 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_173___const__64b1 -D0712 15:11:01.719 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_173___const__64b2 -D0712 15:11:01.719 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_173___const__64b2 -D0712 15:11:01.719 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_173___const__64b3 -D0712 15:11:01.719 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_173___const__64b3 -D0712 15:11:01.719 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_173___const__64b98 -D0712 15:11:01.719 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_173___const__64b98 -D0712 15:11:01.719 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_174___const__64b1 -D0712 15:11:01.719 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_174___const__64b1 -D0712 15:11:01.720 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_174___const__64b2 -D0712 15:11:01.720 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_174___const__64b2 -D0712 15:11:01.720 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_174___const__64b3 -D0712 15:11:01.720 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_174___const__64b3 -D0712 15:11:01.720 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_174___const__64b99 -D0712 15:11:01.720 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_174___const__64b99 -D0712 15:11:01.739 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_175___const__64b1 -D0712 15:11:01.739 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_175___const__64b1 -D0712 15:11:01.739 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_175___const__64b100 -D0712 15:11:01.739 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_175___const__64b100 -D0712 15:11:01.739 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_175___const__64b2 -D0712 15:11:01.739 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_175___const__64b2 -D0712 15:11:01.740 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_175___const__64b3 -D0712 15:11:01.740 tapa.core:671] pipelined signal: 64'd3 => bloom_hier_arbiter_atom_175___const__64b3 -D0712 15:11:01.740 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_176___const__64b1 -D0712 15:11:01.740 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_176___const__64b1 -D0712 15:11:01.740 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_176___const__64b2 -D0712 15:11:01.740 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_176___const__64b2 -D0712 15:11:01.741 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_176___const__64b4 -D0712 15:11:01.741 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_176___const__64b4 -D0712 15:11:01.741 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_176___const__64b97 -D0712 15:11:01.741 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_176___const__64b97 -D0712 15:11:01.741 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_177___const__64b1 -D0712 15:11:01.741 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_177___const__64b1 -D0712 15:11:01.742 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_177___const__64b2 -D0712 15:11:01.742 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_177___const__64b2 -D0712 15:11:01.742 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_177___const__64b4 -D0712 15:11:01.742 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_177___const__64b4 -D0712 15:11:01.742 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_177___const__64b98 -D0712 15:11:01.742 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_177___const__64b98 -D0712 15:11:01.742 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_178___const__64b1 -D0712 15:11:01.742 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_178___const__64b1 -D0712 15:11:01.743 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_178___const__64b2 -D0712 15:11:01.743 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_178___const__64b2 -D0712 15:11:01.743 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_178___const__64b4 -D0712 15:11:01.743 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_178___const__64b4 -D0712 15:11:01.743 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_178___const__64b99 -D0712 15:11:01.743 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_178___const__64b99 -D0712 15:11:01.744 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_179___const__64b1 -D0712 15:11:01.744 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_179___const__64b1 -D0712 15:11:01.744 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_179___const__64b100 -D0712 15:11:01.744 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_179___const__64b100 -D0712 15:11:01.744 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_179___const__64b2 -D0712 15:11:01.744 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_179___const__64b2 -D0712 15:11:01.744 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_179___const__64b4 -D0712 15:11:01.744 tapa.core:671] pipelined signal: 64'd4 => bloom_hier_arbiter_atom_179___const__64b4 -D0712 15:11:01.745 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_180___const__64b1 -D0712 15:11:01.745 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_180___const__64b1 -D0712 15:11:01.745 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_180___const__64b2 -D0712 15:11:01.745 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_180___const__64b2 -D0712 15:11:01.745 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_180___const__64b5 -D0712 15:11:01.745 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_180___const__64b5 -D0712 15:11:01.745 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_180___const__64b97 -D0712 15:11:01.745 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_180___const__64b97 -D0712 15:11:01.746 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_181___const__64b1 -D0712 15:11:01.746 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_181___const__64b1 -D0712 15:11:01.746 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_181___const__64b2 -D0712 15:11:01.746 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_181___const__64b2 -D0712 15:11:01.746 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_181___const__64b5 -D0712 15:11:01.746 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_181___const__64b5 -D0712 15:11:01.746 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_181___const__64b98 -D0712 15:11:01.746 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_181___const__64b98 -D0712 15:11:01.747 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_182___const__64b1 -D0712 15:11:01.747 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_182___const__64b1 -D0712 15:11:01.747 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_182___const__64b2 -D0712 15:11:01.747 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_182___const__64b2 -D0712 15:11:01.747 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_182___const__64b5 -D0712 15:11:01.747 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_182___const__64b5 -D0712 15:11:01.747 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_182___const__64b99 -D0712 15:11:01.747 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_182___const__64b99 -D0712 15:11:01.748 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_183___const__64b1 -D0712 15:11:01.748 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_183___const__64b1 -D0712 15:11:01.748 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_183___const__64b100 -D0712 15:11:01.748 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_183___const__64b100 -D0712 15:11:01.748 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_183___const__64b2 -D0712 15:11:01.748 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_183___const__64b2 -D0712 15:11:01.748 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_183___const__64b5 -D0712 15:11:01.748 tapa.core:671] pipelined signal: 64'd5 => bloom_hier_arbiter_atom_183___const__64b5 -D0712 15:11:01.749 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_184___const__64b1 -D0712 15:11:01.749 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_184___const__64b1 -D0712 15:11:01.749 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_184___const__64b2 -D0712 15:11:01.749 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_184___const__64b2 -D0712 15:11:01.749 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_184___const__64b6 -D0712 15:11:01.749 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_184___const__64b6 -D0712 15:11:01.749 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_184___const__64b97 -D0712 15:11:01.749 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_184___const__64b97 -D0712 15:11:01.750 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_185___const__64b1 -D0712 15:11:01.750 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_185___const__64b1 -D0712 15:11:01.750 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_185___const__64b2 -D0712 15:11:01.750 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_185___const__64b2 -D0712 15:11:01.750 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_185___const__64b6 -D0712 15:11:01.750 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_185___const__64b6 -D0712 15:11:01.750 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_185___const__64b98 -D0712 15:11:01.750 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_185___const__64b98 -D0712 15:11:01.751 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_186___const__64b1 -D0712 15:11:01.751 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_186___const__64b1 -D0712 15:11:01.751 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_186___const__64b2 -D0712 15:11:01.751 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_186___const__64b2 -D0712 15:11:01.751 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_186___const__64b6 -D0712 15:11:01.751 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_186___const__64b6 -D0712 15:11:01.752 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_186___const__64b99 -D0712 15:11:01.752 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_186___const__64b99 -D0712 15:11:01.752 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_187___const__64b1 -D0712 15:11:01.752 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_187___const__64b1 -D0712 15:11:01.752 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_187___const__64b100 -D0712 15:11:01.752 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_187___const__64b100 -D0712 15:11:01.753 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_187___const__64b2 -D0712 15:11:01.753 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_187___const__64b2 -D0712 15:11:01.753 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_187___const__64b6 -D0712 15:11:01.753 tapa.core:671] pipelined signal: 64'd6 => bloom_hier_arbiter_atom_187___const__64b6 -D0712 15:11:01.753 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_188___const__64b1 -D0712 15:11:01.753 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_188___const__64b1 -D0712 15:11:01.753 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_188___const__64b2 -D0712 15:11:01.753 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_188___const__64b2 -D0712 15:11:01.754 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_188___const__64b7 -D0712 15:11:01.754 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_188___const__64b7 -D0712 15:11:01.754 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_188___const__64b97 -D0712 15:11:01.754 tapa.core:671] pipelined signal: 64'd97 => bloom_hier_arbiter_atom_188___const__64b97 -D0712 15:11:01.754 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_189___const__64b1 -D0712 15:11:01.754 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_189___const__64b1 -D0712 15:11:01.755 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_189___const__64b2 -D0712 15:11:01.755 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_189___const__64b2 -D0712 15:11:01.755 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_189___const__64b7 -D0712 15:11:01.755 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_189___const__64b7 -D0712 15:11:01.755 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_189___const__64b98 -D0712 15:11:01.755 tapa.core:671] pipelined signal: 64'd98 => bloom_hier_arbiter_atom_189___const__64b98 -D0712 15:11:01.756 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_190___const__64b1 -D0712 15:11:01.756 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_190___const__64b1 -D0712 15:11:01.756 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_190___const__64b2 -D0712 15:11:01.756 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_190___const__64b2 -D0712 15:11:01.756 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_190___const__64b7 -D0712 15:11:01.756 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_190___const__64b7 -D0712 15:11:01.756 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_190___const__64b99 -D0712 15:11:01.756 tapa.core:671] pipelined signal: 64'd99 => bloom_hier_arbiter_atom_190___const__64b99 -D0712 15:11:01.757 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_191___const__64b1 -D0712 15:11:01.757 tapa.core:671] pipelined signal: 64'd1 => bloom_hier_arbiter_atom_191___const__64b1 -D0712 15:11:01.757 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_191___const__64b100 -D0712 15:11:01.757 tapa.core:671] pipelined signal: 64'd100 => bloom_hier_arbiter_atom_191___const__64b100 -D0712 15:11:01.757 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_191___const__64b2 -D0712 15:11:01.757 tapa.core:671] pipelined signal: 64'd2 => bloom_hier_arbiter_atom_191___const__64b2 -D0712 15:11:01.757 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_191___const__64b7 -D0712 15:11:01.757 tapa.core:671] pipelined signal: 64'd7 => bloom_hier_arbiter_atom_191___const__64b7 -D0712 15:11:01.758 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_0___const__64b0 -D0712 15:11:01.758 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_0___const__64b0 -D0712 15:11:01.758 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_0___const__64b0 -D0712 15:11:01.758 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_0___const__64b0 -D0712 15:11:01.758 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_0___const__64b0 -D0712 15:11:01.758 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_0___const__64b0 -D0712 15:11:01.759 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_1___const__64b0 -D0712 15:11:01.759 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_1___const__64b0 -D0712 15:11:01.759 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_1___const__64b0 -D0712 15:11:01.759 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_1___const__64b0 -D0712 15:11:01.759 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_1___const__64b1 -D0712 15:11:01.759 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_1___const__64b1 -D0712 15:11:01.760 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_2___const__64b0 -D0712 15:11:01.760 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_2___const__64b0 -D0712 15:11:01.760 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_2___const__64b0 -D0712 15:11:01.760 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_2___const__64b0 -D0712 15:11:01.760 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_2___const__64b2 -D0712 15:11:01.760 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_2___const__64b2 -D0712 15:11:01.761 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_3___const__64b0 -D0712 15:11:01.761 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_3___const__64b0 -D0712 15:11:01.761 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_3___const__64b0 -D0712 15:11:01.761 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_3___const__64b0 -D0712 15:11:01.761 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_3___const__64b1 -D0712 15:11:01.761 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_3___const__64b1 -D0712 15:11:01.761 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_4___const__64b0 -D0712 15:11:01.761 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_4___const__64b0 -D0712 15:11:01.762 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_4___const__64b1 -D0712 15:11:01.762 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_4___const__64b1 -D0712 15:11:01.762 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_4___const__64b1 -D0712 15:11:01.762 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_4___const__64b1 -D0712 15:11:01.762 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_5___const__64b0 -D0712 15:11:01.762 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_5___const__64b0 -D0712 15:11:01.762 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_5___const__64b1 -D0712 15:11:01.762 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_5___const__64b1 -D0712 15:11:01.763 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_5___const__64b2 -D0712 15:11:01.763 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_5___const__64b2 -D0712 15:11:01.763 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_6___const__64b0 -D0712 15:11:01.763 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_6___const__64b0 -D0712 15:11:01.763 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_6___const__64b0 -D0712 15:11:01.763 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_6___const__64b0 -D0712 15:11:01.763 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_6___const__64b2 -D0712 15:11:01.763 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_6___const__64b2 -D0712 15:11:01.764 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_7___const__64b0 -D0712 15:11:01.764 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_7___const__64b0 -D0712 15:11:01.764 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_7___const__64b1 -D0712 15:11:01.764 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_7___const__64b1 -D0712 15:11:01.764 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_7___const__64b2 -D0712 15:11:01.764 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_7___const__64b2 -D0712 15:11:01.765 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_8___const__64b0 -D0712 15:11:01.765 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_8___const__64b0 -D0712 15:11:01.765 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_8___const__64b2 -D0712 15:11:01.765 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_8___const__64b2 -D0712 15:11:01.765 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_8___const__64b2 -D0712 15:11:01.765 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_8___const__64b2 -D0712 15:11:01.766 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_9___const__64b0 -D0712 15:11:01.766 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_9___const__64b0 -D0712 15:11:01.766 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_9___const__64b0 -D0712 15:11:01.766 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_9___const__64b0 -D0712 15:11:01.766 tapa.core:671] pipelined signal: 64'd3 => computeHash_Computer_9___const__64b3 -D0712 15:11:01.766 tapa.core:671] pipelined signal: 64'd3 => computeHash_Computer_9___const__64b3 -D0712 15:11:01.767 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_10___const__64b0 -D0712 15:11:01.767 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_10___const__64b0 -D0712 15:11:01.767 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_10___const__64b1 -D0712 15:11:01.767 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_10___const__64b1 -D0712 15:11:01.767 tapa.core:671] pipelined signal: 64'd3 => computeHash_Computer_10___const__64b3 -D0712 15:11:01.767 tapa.core:671] pipelined signal: 64'd3 => computeHash_Computer_10___const__64b3 -D0712 15:11:01.768 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_11___const__64b0 -D0712 15:11:01.768 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_11___const__64b0 -D0712 15:11:01.768 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_11___const__64b2 -D0712 15:11:01.768 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_11___const__64b2 -D0712 15:11:01.768 tapa.core:671] pipelined signal: 64'd3 => computeHash_Computer_11___const__64b3 -D0712 15:11:01.768 tapa.core:671] pipelined signal: 64'd3 => computeHash_Computer_11___const__64b3 -D0712 15:11:01.769 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_12___const__64b0 -D0712 15:11:01.769 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_12___const__64b0 -D0712 15:11:01.769 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_12___const__64b0 -D0712 15:11:01.769 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_12___const__64b0 -D0712 15:11:01.769 tapa.core:671] pipelined signal: 64'd4 => computeHash_Computer_12___const__64b4 -D0712 15:11:01.769 tapa.core:671] pipelined signal: 64'd4 => computeHash_Computer_12___const__64b4 -D0712 15:11:01.770 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_13___const__64b0 -D0712 15:11:01.770 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_13___const__64b0 -D0712 15:11:01.770 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_13___const__64b1 -D0712 15:11:01.770 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_13___const__64b1 -D0712 15:11:01.770 tapa.core:671] pipelined signal: 64'd4 => computeHash_Computer_13___const__64b4 -D0712 15:11:01.770 tapa.core:671] pipelined signal: 64'd4 => computeHash_Computer_13___const__64b4 -D0712 15:11:01.771 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_14___const__64b0 -D0712 15:11:01.771 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_14___const__64b0 -D0712 15:11:01.771 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_14___const__64b2 -D0712 15:11:01.771 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_14___const__64b2 -D0712 15:11:01.771 tapa.core:671] pipelined signal: 64'd4 => computeHash_Computer_14___const__64b4 -D0712 15:11:01.771 tapa.core:671] pipelined signal: 64'd4 => computeHash_Computer_14___const__64b4 -D0712 15:11:01.772 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_15___const__64b0 -D0712 15:11:01.772 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_15___const__64b0 -D0712 15:11:01.772 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_15___const__64b0 -D0712 15:11:01.772 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_15___const__64b0 -D0712 15:11:01.772 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_15___const__64b1 -D0712 15:11:01.772 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_15___const__64b1 -D0712 15:11:01.772 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_16___const__64b0 -D0712 15:11:01.772 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_16___const__64b0 -D0712 15:11:01.773 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_16___const__64b1 -D0712 15:11:01.773 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_16___const__64b1 -D0712 15:11:01.773 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_16___const__64b1 -D0712 15:11:01.773 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_16___const__64b1 -D0712 15:11:01.773 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_17___const__64b0 -D0712 15:11:01.773 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_17___const__64b0 -D0712 15:11:01.774 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_17___const__64b1 -D0712 15:11:01.774 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_17___const__64b1 -D0712 15:11:01.774 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_17___const__64b2 -D0712 15:11:01.774 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_17___const__64b2 -D0712 15:11:01.774 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_18___const__64b0 -D0712 15:11:01.774 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_18___const__64b0 -D0712 15:11:01.774 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_18___const__64b1 -D0712 15:11:01.774 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_18___const__64b1 -D0712 15:11:01.775 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_18___const__64b1 -D0712 15:11:01.775 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_18___const__64b1 -D0712 15:11:01.775 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_19___const__64b1 -D0712 15:11:01.775 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_19___const__64b1 -D0712 15:11:01.775 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_19___const__64b1 -D0712 15:11:01.775 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_19___const__64b1 -D0712 15:11:01.776 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_19___const__64b1 -D0712 15:11:01.776 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_19___const__64b1 -D0712 15:11:01.776 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_20___const__64b1 -D0712 15:11:01.776 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_20___const__64b1 -D0712 15:11:01.776 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_20___const__64b1 -D0712 15:11:01.776 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_20___const__64b1 -D0712 15:11:01.776 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_20___const__64b2 -D0712 15:11:01.776 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_20___const__64b2 -D0712 15:11:01.777 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_21___const__64b0 -D0712 15:11:01.777 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_21___const__64b0 -D0712 15:11:01.777 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_21___const__64b1 -D0712 15:11:01.777 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_21___const__64b1 -D0712 15:11:01.777 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_21___const__64b2 -D0712 15:11:01.777 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_21___const__64b2 -D0712 15:11:01.778 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_22___const__64b1 -D0712 15:11:01.778 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_22___const__64b1 -D0712 15:11:01.778 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_22___const__64b1 -D0712 15:11:01.778 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_22___const__64b1 -D0712 15:11:01.778 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_22___const__64b2 -D0712 15:11:01.778 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_22___const__64b2 -D0712 15:11:01.779 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_23___const__64b1 -D0712 15:11:01.779 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_23___const__64b1 -D0712 15:11:01.779 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_23___const__64b2 -D0712 15:11:01.779 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_23___const__64b2 -D0712 15:11:01.779 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_23___const__64b2 -D0712 15:11:01.779 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_23___const__64b2 -D0712 15:11:01.780 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_24___const__64b0 -D0712 15:11:01.780 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_24___const__64b0 -D0712 15:11:01.780 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_24___const__64b1 -D0712 15:11:01.780 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_24___const__64b1 -D0712 15:11:01.780 tapa.core:671] pipelined signal: 64'd3 => computeHash_Computer_24___const__64b3 -D0712 15:11:01.780 tapa.core:671] pipelined signal: 64'd3 => computeHash_Computer_24___const__64b3 -D0712 15:11:01.781 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_25___const__64b1 -D0712 15:11:01.781 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_25___const__64b1 -D0712 15:11:01.781 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_25___const__64b1 -D0712 15:11:01.781 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_25___const__64b1 -D0712 15:11:01.781 tapa.core:671] pipelined signal: 64'd3 => computeHash_Computer_25___const__64b3 -D0712 15:11:01.781 tapa.core:671] pipelined signal: 64'd3 => computeHash_Computer_25___const__64b3 -D0712 15:11:01.782 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_26___const__64b1 -D0712 15:11:01.782 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_26___const__64b1 -D0712 15:11:01.782 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_26___const__64b2 -D0712 15:11:01.782 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_26___const__64b2 -D0712 15:11:01.782 tapa.core:671] pipelined signal: 64'd3 => computeHash_Computer_26___const__64b3 -D0712 15:11:01.782 tapa.core:671] pipelined signal: 64'd3 => computeHash_Computer_26___const__64b3 -D0712 15:11:01.783 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_27___const__64b0 -D0712 15:11:01.783 tapa.core:671] pipelined signal: 64'd0 => computeHash_Computer_27___const__64b0 -D0712 15:11:01.783 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_27___const__64b1 -D0712 15:11:01.783 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_27___const__64b1 -D0712 15:11:01.783 tapa.core:671] pipelined signal: 64'd4 => computeHash_Computer_27___const__64b4 -D0712 15:11:01.783 tapa.core:671] pipelined signal: 64'd4 => computeHash_Computer_27___const__64b4 -D0712 15:11:01.783 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_28___const__64b1 -D0712 15:11:01.783 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_28___const__64b1 -D0712 15:11:01.784 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_28___const__64b1 -D0712 15:11:01.784 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_28___const__64b1 -D0712 15:11:01.784 tapa.core:671] pipelined signal: 64'd4 => computeHash_Computer_28___const__64b4 -D0712 15:11:01.784 tapa.core:671] pipelined signal: 64'd4 => computeHash_Computer_28___const__64b4 -D0712 15:11:01.784 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_29___const__64b1 -D0712 15:11:01.784 tapa.core:671] pipelined signal: 64'd1 => computeHash_Computer_29___const__64b1 -D0712 15:11:01.785 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_29___const__64b2 -D0712 15:11:01.785 tapa.core:671] pipelined signal: 64'd2 => computeHash_Computer_29___const__64b2 -D0712 15:11:01.785 tapa.core:671] pipelined signal: 64'd4 => computeHash_Computer_29___const__64b4 -D0712 15:11:01.785 tapa.core:671] pipelined signal: 64'd4 => computeHash_Computer_29___const__64b4 -D0712 15:11:01.785 tapa.core:671] pipelined signal: 64'd0 => computeHash_Feeder_0___const__64b0 -D0712 15:11:01.785 tapa.core:671] pipelined signal: 64'd0 => computeHash_Feeder_0___const__64b0 -D0712 15:11:01.785 tapa.core:671] pipelined signal: 64'd0 => computeHash_Feeder_0___const__64b0 -D0712 15:11:01.785 tapa.core:671] pipelined signal: 64'd0 => computeHash_Feeder_0___const__64b0 -D0712 15:11:01.786 tapa.core:671] pipelined signal: 64'd0 => computeHash_Feeder_1___const__64b0 -D0712 15:11:01.786 tapa.core:671] pipelined signal: 64'd0 => computeHash_Feeder_1___const__64b0 -D0712 15:11:01.786 tapa.core:671] pipelined signal: 64'd1 => computeHash_Feeder_1___const__64b1 -D0712 15:11:01.786 tapa.core:671] pipelined signal: 64'd1 => computeHash_Feeder_1___const__64b1 -D0712 15:11:01.787 tapa.core:671] pipelined signal: 64'd0 => computeHash_Feeder_2___const__64b0 -D0712 15:11:01.787 tapa.core:671] pipelined signal: 64'd0 => computeHash_Feeder_2___const__64b0 -D0712 15:11:01.787 tapa.core:671] pipelined signal: 64'd2 => computeHash_Feeder_2___const__64b2 -D0712 15:11:01.787 tapa.core:671] pipelined signal: 64'd2 => computeHash_Feeder_2___const__64b2 -D0712 15:11:01.788 tapa.core:671] pipelined signal: 64'd0 => computeHash_Feeder_3___const__64b0 -D0712 15:11:01.788 tapa.core:671] pipelined signal: 64'd0 => computeHash_Feeder_3___const__64b0 -D0712 15:11:01.788 tapa.core:671] pipelined signal: 64'd3 => computeHash_Feeder_3___const__64b3 -D0712 15:11:01.788 tapa.core:671] pipelined signal: 64'd3 => computeHash_Feeder_3___const__64b3 -D0712 15:11:01.789 tapa.core:671] pipelined signal: 64'd0 => computeHash_Feeder_4___const__64b0 -D0712 15:11:01.789 tapa.core:671] pipelined signal: 64'd0 => computeHash_Feeder_4___const__64b0 -D0712 15:11:01.789 tapa.core:671] pipelined signal: 64'd4 => computeHash_Feeder_4___const__64b4 -D0712 15:11:01.789 tapa.core:671] pipelined signal: 64'd4 => computeHash_Feeder_4___const__64b4 -D0712 15:11:01.790 tapa.core:671] pipelined signal: 64'd0 => computeHash_Feeder_5___const__64b0 -D0712 15:11:01.790 tapa.core:671] pipelined signal: 64'd0 => computeHash_Feeder_5___const__64b0 -D0712 15:11:01.790 tapa.core:671] pipelined signal: 64'd1 => computeHash_Feeder_5___const__64b1 -D0712 15:11:01.790 tapa.core:671] pipelined signal: 64'd1 => computeHash_Feeder_5___const__64b1 -D0712 15:11:01.791 tapa.core:671] pipelined signal: 64'd1 => computeHash_Feeder_6___const__64b1 -D0712 15:11:01.791 tapa.core:671] pipelined signal: 64'd1 => computeHash_Feeder_6___const__64b1 -D0712 15:11:01.791 tapa.core:671] pipelined signal: 64'd1 => computeHash_Feeder_6___const__64b1 -D0712 15:11:01.791 tapa.core:671] pipelined signal: 64'd1 => computeHash_Feeder_6___const__64b1 -D0712 15:11:01.792 tapa.core:671] pipelined signal: 64'd1 => computeHash_Feeder_7___const__64b1 -D0712 15:11:01.792 tapa.core:671] pipelined signal: 64'd1 => computeHash_Feeder_7___const__64b1 -D0712 15:11:01.792 tapa.core:671] pipelined signal: 64'd2 => computeHash_Feeder_7___const__64b2 -D0712 15:11:01.792 tapa.core:671] pipelined signal: 64'd2 => computeHash_Feeder_7___const__64b2 -D0712 15:11:01.793 tapa.core:671] pipelined signal: 64'd1 => computeHash_Feeder_8___const__64b1 -D0712 15:11:01.793 tapa.core:671] pipelined signal: 64'd1 => computeHash_Feeder_8___const__64b1 -D0712 15:11:01.793 tapa.core:671] pipelined signal: 64'd3 => computeHash_Feeder_8___const__64b3 -D0712 15:11:01.793 tapa.core:671] pipelined signal: 64'd3 => computeHash_Feeder_8___const__64b3 -D0712 15:11:01.794 tapa.core:671] pipelined signal: 64'd1 => computeHash_Feeder_9___const__64b1 -D0712 15:11:01.794 tapa.core:671] pipelined signal: 64'd1 => computeHash_Feeder_9___const__64b1 -D0712 15:11:01.794 tapa.core:671] pipelined signal: 64'd4 => computeHash_Feeder_9___const__64b4 -D0712 15:11:01.794 tapa.core:671] pipelined signal: 64'd4 => computeHash_Feeder_9___const__64b4 -D0712 15:11:01.795 tapa.core:671] pipelined signal: input_bv => loadBV_0___input_bv -D0712 15:11:01.795 tapa.core:671] pipelined signal: input_bv => loadBV_0___input_bv -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_addr_din` is connected to async_mmap port `input_bv.read_addr` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_addr_din` is connected to async_mmap port `input_bv.read_addr` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_addr_full_n` is connected to async_mmap port `input_bv.read_addr` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_addr_full_n` is connected to async_mmap port `input_bv.read_addr` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_addr_write` is connected to async_mmap port `input_bv.read_addr` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_addr_write` is connected to async_mmap port `input_bv.read_addr` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_data_s_dout` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_data_s_dout` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:81] `loadBV_0.input_bv_read_data_peek_dout` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:81] `loadBV_0.input_bv_read_data_peek_dout` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_data_s_empty_n` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_data_s_empty_n` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:81] `loadBV_0.input_bv_read_data_peek_empty_n` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:81] `loadBV_0.input_bv_read_data_peek_empty_n` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_data_s_read` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_data_s_read` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_addr_din` is connected to async_mmap port `input_bv.write_addr` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_addr_din` is connected to async_mmap port `input_bv.write_addr` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_addr_full_n` is connected to async_mmap port `input_bv.write_addr` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_addr_full_n` is connected to async_mmap port `input_bv.write_addr` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_addr_write` is connected to async_mmap port `input_bv.write_addr` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_addr_write` is connected to async_mmap port `input_bv.write_addr` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_data_din` is connected to async_mmap port `input_bv.write_data` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_data_din` is connected to async_mmap port `input_bv.write_data` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_data_full_n` is connected to async_mmap port `input_bv.write_data` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_data_full_n` is connected to async_mmap port `input_bv.write_data` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_data_write` is connected to async_mmap port `input_bv.write_data` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_data_write` is connected to async_mmap port `input_bv.write_data` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_resp_s_dout` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_resp_s_dout` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:81] `loadBV_0.input_bv_write_resp_peek_dout` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:81] `loadBV_0.input_bv_write_resp_peek_dout` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_resp_s_empty_n` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_resp_s_empty_n` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:81] `loadBV_0.input_bv_write_resp_peek_empty_n` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.795 tapa.verilog.xilinx.async_mmap:81] `loadBV_0.input_bv_write_resp_peek_empty_n` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.796 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_resp_s_read` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.796 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_resp_s_read` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_addr_din` is connected to async_mmap port `input_bv.read_addr` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_addr_din` is connected to async_mmap port `input_bv.read_addr` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_addr_full_n` is connected to async_mmap port `input_bv.read_addr` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_addr_full_n` is connected to async_mmap port `input_bv.read_addr` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_addr_write` is connected to async_mmap port `input_bv.read_addr` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_addr_write` is connected to async_mmap port `input_bv.read_addr` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_data_s_dout` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_data_s_dout` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:81] `loadBV_0.input_bv_read_data_peek_dout` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:81] `loadBV_0.input_bv_read_data_peek_dout` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_data_s_empty_n` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_data_s_empty_n` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:81] `loadBV_0.input_bv_read_data_peek_empty_n` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:81] `loadBV_0.input_bv_read_data_peek_empty_n` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_data_s_read` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_read_data_s_read` is connected to async_mmap port `input_bv.read_data` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_addr_din` is connected to async_mmap port `input_bv.write_addr` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_addr_din` is connected to async_mmap port `input_bv.write_addr` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_addr_full_n` is connected to async_mmap port `input_bv.write_addr` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_addr_full_n` is connected to async_mmap port `input_bv.write_addr` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_addr_write` is connected to async_mmap port `input_bv.write_addr` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_addr_write` is connected to async_mmap port `input_bv.write_addr` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_data_din` is connected to async_mmap port `input_bv.write_data` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_data_din` is connected to async_mmap port `input_bv.write_data` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_data_full_n` is connected to async_mmap port `input_bv.write_data` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_data_full_n` is connected to async_mmap port `input_bv.write_data` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_data_write` is connected to async_mmap port `input_bv.write_data` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_data_write` is connected to async_mmap port `input_bv.write_data` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_resp_s_dout` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_resp_s_dout` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:81] `loadBV_0.input_bv_write_resp_peek_dout` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:81] `loadBV_0.input_bv_write_resp_peek_dout` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_resp_s_empty_n` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_resp_s_empty_n` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:81] `loadBV_0.input_bv_write_resp_peek_empty_n` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:81] `loadBV_0.input_bv_write_resp_peek_empty_n` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_resp_s_read` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.797 tapa.verilog.xilinx.async_mmap:71] `loadBV_0.input_bv_write_resp_s_read` is connected to async_mmap port `input_bv.write_resp` -D0712 15:11:01.798 tapa.core:671] pipelined signal: key_in => loadKey_0___key_in -D0712 15:11:01.798 tapa.core:671] pipelined signal: key_in => loadKey_0___key_in -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_addr_din` is connected to async_mmap port `key_in.read_addr` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_addr_din` is connected to async_mmap port `key_in.read_addr` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_addr_full_n` is connected to async_mmap port `key_in.read_addr` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_addr_full_n` is connected to async_mmap port `key_in.read_addr` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_addr_write` is connected to async_mmap port `key_in.read_addr` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_addr_write` is connected to async_mmap port `key_in.read_addr` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_data_s_dout` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_data_s_dout` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:81] `loadKey_0.key_in_read_data_peek_dout` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:81] `loadKey_0.key_in_read_data_peek_dout` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_data_s_empty_n` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_data_s_empty_n` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:81] `loadKey_0.key_in_read_data_peek_empty_n` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:81] `loadKey_0.key_in_read_data_peek_empty_n` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_data_s_read` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_data_s_read` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_addr_din` is connected to async_mmap port `key_in.write_addr` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_addr_din` is connected to async_mmap port `key_in.write_addr` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_addr_full_n` is connected to async_mmap port `key_in.write_addr` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_addr_full_n` is connected to async_mmap port `key_in.write_addr` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_addr_write` is connected to async_mmap port `key_in.write_addr` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_addr_write` is connected to async_mmap port `key_in.write_addr` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_data_din` is connected to async_mmap port `key_in.write_data` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_data_din` is connected to async_mmap port `key_in.write_data` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_data_full_n` is connected to async_mmap port `key_in.write_data` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_data_full_n` is connected to async_mmap port `key_in.write_data` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_data_write` is connected to async_mmap port `key_in.write_data` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_data_write` is connected to async_mmap port `key_in.write_data` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_resp_s_dout` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_resp_s_dout` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:81] `loadKey_0.key_in_write_resp_peek_dout` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:81] `loadKey_0.key_in_write_resp_peek_dout` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_resp_s_empty_n` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.798 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_resp_s_empty_n` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.799 tapa.verilog.xilinx.async_mmap:81] `loadKey_0.key_in_write_resp_peek_empty_n` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.799 tapa.verilog.xilinx.async_mmap:81] `loadKey_0.key_in_write_resp_peek_empty_n` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.799 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_resp_s_read` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.799 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_resp_s_read` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.799 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_addr_din` is connected to async_mmap port `key_in.read_addr` -D0712 15:11:01.799 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_addr_din` is connected to async_mmap port `key_in.read_addr` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_addr_full_n` is connected to async_mmap port `key_in.read_addr` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_addr_full_n` is connected to async_mmap port `key_in.read_addr` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_addr_write` is connected to async_mmap port `key_in.read_addr` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_addr_write` is connected to async_mmap port `key_in.read_addr` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_data_s_dout` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_data_s_dout` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:81] `loadKey_0.key_in_read_data_peek_dout` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:81] `loadKey_0.key_in_read_data_peek_dout` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_data_s_empty_n` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_data_s_empty_n` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:81] `loadKey_0.key_in_read_data_peek_empty_n` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:81] `loadKey_0.key_in_read_data_peek_empty_n` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_data_s_read` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_read_data_s_read` is connected to async_mmap port `key_in.read_data` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_addr_din` is connected to async_mmap port `key_in.write_addr` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_addr_din` is connected to async_mmap port `key_in.write_addr` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_addr_full_n` is connected to async_mmap port `key_in.write_addr` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_addr_full_n` is connected to async_mmap port `key_in.write_addr` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_addr_write` is connected to async_mmap port `key_in.write_addr` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_addr_write` is connected to async_mmap port `key_in.write_addr` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_data_din` is connected to async_mmap port `key_in.write_data` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_data_din` is connected to async_mmap port `key_in.write_data` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_data_full_n` is connected to async_mmap port `key_in.write_data` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_data_full_n` is connected to async_mmap port `key_in.write_data` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_data_write` is connected to async_mmap port `key_in.write_data` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_data_write` is connected to async_mmap port `key_in.write_data` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_resp_s_dout` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_resp_s_dout` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:81] `loadKey_0.key_in_write_resp_peek_dout` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:81] `loadKey_0.key_in_write_resp_peek_dout` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_resp_s_empty_n` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_resp_s_empty_n` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:81] `loadKey_0.key_in_write_resp_peek_empty_n` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:81] `loadKey_0.key_in_write_resp_peek_empty_n` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_resp_s_read` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.800 tapa.verilog.xilinx.async_mmap:71] `loadKey_0.key_in_write_resp_s_read` is connected to async_mmap port `key_in.write_resp` -D0712 15:11:01.801 tapa.core:671] pipelined signal: 64'd0 => packOutput_0___const__64b0 -D0712 15:11:01.801 tapa.core:671] pipelined signal: 64'd0 => packOutput_0___const__64b0 -D0712 15:11:01.801 tapa.core:671] pipelined signal: 64'd0 => packOutput_0___const__64b0 -D0712 15:11:01.801 tapa.core:671] pipelined signal: 64'd0 => packOutput_0___const__64b0 -D0712 15:11:01.802 tapa.core:671] pipelined signal: 64'd0 => packOutput_1___const__64b0 -D0712 15:11:01.802 tapa.core:671] pipelined signal: 64'd0 => packOutput_1___const__64b0 -D0712 15:11:01.802 tapa.core:671] pipelined signal: 64'd1 => packOutput_1___const__64b1 -D0712 15:11:01.802 tapa.core:671] pipelined signal: 64'd1 => packOutput_1___const__64b1 -D0712 15:11:01.803 tapa.core:671] pipelined signal: 64'd0 => packOutput_2___const__64b0 -D0712 15:11:01.803 tapa.core:671] pipelined signal: 64'd0 => packOutput_2___const__64b0 -D0712 15:11:01.803 tapa.core:671] pipelined signal: 64'd2 => packOutput_2___const__64b2 -D0712 15:11:01.803 tapa.core:671] pipelined signal: 64'd2 => packOutput_2___const__64b2 -D0712 15:11:01.804 tapa.core:671] pipelined signal: 64'd0 => packOutput_3___const__64b0 -D0712 15:11:01.804 tapa.core:671] pipelined signal: 64'd0 => packOutput_3___const__64b0 -D0712 15:11:01.804 tapa.core:671] pipelined signal: 64'd3 => packOutput_3___const__64b3 -D0712 15:11:01.804 tapa.core:671] pipelined signal: 64'd3 => packOutput_3___const__64b3 -D0712 15:11:01.805 tapa.core:671] pipelined signal: 64'd0 => packOutput_4___const__64b0 -D0712 15:11:01.805 tapa.core:671] pipelined signal: 64'd0 => packOutput_4___const__64b0 -D0712 15:11:01.805 tapa.core:671] pipelined signal: 64'd4 => packOutput_4___const__64b4 -D0712 15:11:01.805 tapa.core:671] pipelined signal: 64'd4 => packOutput_4___const__64b4 -D0712 15:11:01.805 tapa.core:671] pipelined signal: 64'd0 => packOutput_5___const__64b0 -D0712 15:11:01.805 tapa.core:671] pipelined signal: 64'd0 => packOutput_5___const__64b0 -D0712 15:11:01.806 tapa.core:671] pipelined signal: 64'd1 => packOutput_5___const__64b1 -D0712 15:11:01.806 tapa.core:671] pipelined signal: 64'd1 => packOutput_5___const__64b1 -D0712 15:11:01.806 tapa.core:671] pipelined signal: 64'd1 => packOutput_6___const__64b1 -D0712 15:11:01.806 tapa.core:671] pipelined signal: 64'd1 => packOutput_6___const__64b1 -D0712 15:11:01.806 tapa.core:671] pipelined signal: 64'd1 => packOutput_6___const__64b1 -D0712 15:11:01.806 tapa.core:671] pipelined signal: 64'd1 => packOutput_6___const__64b1 -D0712 15:11:01.807 tapa.core:671] pipelined signal: 64'd1 => packOutput_7___const__64b1 -D0712 15:11:01.807 tapa.core:671] pipelined signal: 64'd1 => packOutput_7___const__64b1 -D0712 15:11:01.807 tapa.core:671] pipelined signal: 64'd2 => packOutput_7___const__64b2 -D0712 15:11:01.807 tapa.core:671] pipelined signal: 64'd2 => packOutput_7___const__64b2 -D0712 15:11:01.808 tapa.core:671] pipelined signal: 64'd1 => packOutput_8___const__64b1 -D0712 15:11:01.808 tapa.core:671] pipelined signal: 64'd1 => packOutput_8___const__64b1 -D0712 15:11:01.808 tapa.core:671] pipelined signal: 64'd3 => packOutput_8___const__64b3 -D0712 15:11:01.808 tapa.core:671] pipelined signal: 64'd3 => packOutput_8___const__64b3 -D0712 15:11:01.809 tapa.core:671] pipelined signal: 64'd1 => packOutput_9___const__64b1 -D0712 15:11:01.809 tapa.core:671] pipelined signal: 64'd1 => packOutput_9___const__64b1 -D0712 15:11:01.809 tapa.core:671] pipelined signal: 64'd4 => packOutput_9___const__64b4 -D0712 15:11:01.809 tapa.core:671] pipelined signal: 64'd4 => packOutput_9___const__64b4 -D0712 15:11:01.810 tapa.core:671] pipelined signal: 64'd0 => queryResult_per_hash_0___const__64b0 -D0712 15:11:01.810 tapa.core:671] pipelined signal: 64'd0 => queryResult_per_hash_0___const__64b0 -D0712 15:11:01.819 tapa.core:671] pipelined signal: 64'd1 => queryResult_per_hash_1___const__64b1 -D0712 15:11:01.819 tapa.core:671] pipelined signal: 64'd1 => queryResult_per_hash_1___const__64b1 -D0712 15:11:01.828 tapa.core:671] pipelined signal: 64'd2 => queryResult_per_hash_2___const__64b2 -D0712 15:11:01.828 tapa.core:671] pipelined signal: 64'd2 => queryResult_per_hash_2___const__64b2 -D0712 15:11:01.838 tapa.core:671] pipelined signal: 64'd0 => shuffle_TtoS_per_hash_0___const__64b0 -D0712 15:11:01.838 tapa.core:671] pipelined signal: 64'd0 => shuffle_TtoS_per_hash_0___const__64b0 -D0712 15:11:01.838 tapa.core:671] pipelined signal: 64'd0 => shuffle_TtoS_per_hash_0___const__64b0 -D0712 15:11:01.838 tapa.core:671] pipelined signal: 64'd0 => shuffle_TtoS_per_hash_0___const__64b0 -D0712 15:11:01.851 tapa.core:671] pipelined signal: 64'd0 => shuffle_TtoS_per_hash_1___const__64b0 -D0712 15:11:01.851 tapa.core:671] pipelined signal: 64'd0 => shuffle_TtoS_per_hash_1___const__64b0 -D0712 15:11:01.851 tapa.core:671] pipelined signal: 64'd1 => shuffle_TtoS_per_hash_1___const__64b1 -D0712 15:11:01.851 tapa.core:671] pipelined signal: 64'd1 => shuffle_TtoS_per_hash_1___const__64b1 -D0712 15:11:01.864 tapa.core:671] pipelined signal: 64'd0 => shuffle_TtoS_per_hash_2___const__64b0 -D0712 15:11:01.864 tapa.core:671] pipelined signal: 64'd0 => shuffle_TtoS_per_hash_2___const__64b0 -D0712 15:11:01.864 tapa.core:671] pipelined signal: 64'd2 => shuffle_TtoS_per_hash_2___const__64b2 -D0712 15:11:01.864 tapa.core:671] pipelined signal: 64'd2 => shuffle_TtoS_per_hash_2___const__64b2 -D0712 15:11:01.877 tapa.core:671] pipelined signal: 64'd0 => shuffle_TtoS_per_hash_3___const__64b0 -D0712 15:11:01.877 tapa.core:671] pipelined signal: 64'd0 => shuffle_TtoS_per_hash_3___const__64b0 -D0712 15:11:01.877 tapa.core:671] pipelined signal: 64'd1 => shuffle_TtoS_per_hash_3___const__64b1 -D0712 15:11:01.877 tapa.core:671] pipelined signal: 64'd1 => shuffle_TtoS_per_hash_3___const__64b1 -D0712 15:11:01.889 tapa.core:671] pipelined signal: 64'd1 => shuffle_TtoS_per_hash_4___const__64b1 -D0712 15:11:01.889 tapa.core:671] pipelined signal: 64'd1 => shuffle_TtoS_per_hash_4___const__64b1 -D0712 15:11:01.890 tapa.core:671] pipelined signal: 64'd1 => shuffle_TtoS_per_hash_4___const__64b1 -D0712 15:11:01.890 tapa.core:671] pipelined signal: 64'd1 => shuffle_TtoS_per_hash_4___const__64b1 -D0712 15:11:01.902 tapa.core:671] pipelined signal: 64'd1 => shuffle_TtoS_per_hash_5___const__64b1 -D0712 15:11:01.902 tapa.core:671] pipelined signal: 64'd1 => shuffle_TtoS_per_hash_5___const__64b1 -D0712 15:11:01.902 tapa.core:671] pipelined signal: 64'd2 => shuffle_TtoS_per_hash_5___const__64b2 -D0712 15:11:01.902 tapa.core:671] pipelined signal: 64'd2 => shuffle_TtoS_per_hash_5___const__64b2 -D0712 15:11:01.915 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_0___const__64b0 -D0712 15:11:01.915 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_0___const__64b0 -D0712 15:11:01.915 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_0___const__64b0 -D0712 15:11:01.915 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_0___const__64b0 -D0712 15:11:01.915 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_0___const__64b0 -D0712 15:11:01.915 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_0___const__64b0 -D0712 15:11:01.917 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_1___const__64b0 -D0712 15:11:01.917 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_1___const__64b0 -D0712 15:11:01.917 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_1___const__64b0 -D0712 15:11:01.917 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_1___const__64b0 -D0712 15:11:01.917 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_1___const__64b1 -D0712 15:11:01.917 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_1___const__64b1 -D0712 15:11:01.919 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_2___const__64b0 -D0712 15:11:01.919 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_2___const__64b0 -D0712 15:11:01.919 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_2___const__64b0 -D0712 15:11:01.919 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_2___const__64b0 -D0712 15:11:01.919 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_2___const__64b2 -D0712 15:11:01.919 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_2___const__64b2 -D0712 15:11:01.921 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_3___const__64b0 -D0712 15:11:01.921 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_3___const__64b0 -D0712 15:11:01.921 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_3___const__64b0 -D0712 15:11:01.921 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_3___const__64b0 -D0712 15:11:01.922 tapa.core:671] pipelined signal: 64'd3 => shuffle_reordering_per_hash_3___const__64b3 -D0712 15:11:01.922 tapa.core:671] pipelined signal: 64'd3 => shuffle_reordering_per_hash_3___const__64b3 -D0712 15:11:01.923 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_4___const__64b0 -D0712 15:11:01.923 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_4___const__64b0 -D0712 15:11:01.923 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_4___const__64b0 -D0712 15:11:01.923 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_4___const__64b0 -D0712 15:11:01.924 tapa.core:671] pipelined signal: 64'd4 => shuffle_reordering_per_hash_4___const__64b4 -D0712 15:11:01.924 tapa.core:671] pipelined signal: 64'd4 => shuffle_reordering_per_hash_4___const__64b4 -D0712 15:11:01.925 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_5___const__64b0 -D0712 15:11:01.925 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_5___const__64b0 -D0712 15:11:01.926 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_5___const__64b0 -D0712 15:11:01.926 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_5___const__64b0 -D0712 15:11:01.926 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_5___const__64b1 -D0712 15:11:01.926 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_5___const__64b1 -D0712 15:11:01.928 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_6___const__64b0 -D0712 15:11:01.928 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_6___const__64b0 -D0712 15:11:01.928 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_6___const__64b1 -D0712 15:11:01.928 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_6___const__64b1 -D0712 15:11:01.928 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_6___const__64b1 -D0712 15:11:01.928 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_6___const__64b1 -D0712 15:11:01.930 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_7___const__64b0 -D0712 15:11:01.930 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_7___const__64b0 -D0712 15:11:01.930 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_7___const__64b1 -D0712 15:11:01.930 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_7___const__64b1 -D0712 15:11:01.930 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_7___const__64b2 -D0712 15:11:01.930 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_7___const__64b2 -D0712 15:11:01.932 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_8___const__64b0 -D0712 15:11:01.932 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_8___const__64b0 -D0712 15:11:01.932 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_8___const__64b1 -D0712 15:11:01.932 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_8___const__64b1 -D0712 15:11:01.932 tapa.core:671] pipelined signal: 64'd3 => shuffle_reordering_per_hash_8___const__64b3 -D0712 15:11:01.932 tapa.core:671] pipelined signal: 64'd3 => shuffle_reordering_per_hash_8___const__64b3 -D0712 15:11:01.934 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_9___const__64b0 -D0712 15:11:01.934 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_9___const__64b0 -D0712 15:11:01.934 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_9___const__64b1 -D0712 15:11:01.934 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_9___const__64b1 -D0712 15:11:01.934 tapa.core:671] pipelined signal: 64'd4 => shuffle_reordering_per_hash_9___const__64b4 -D0712 15:11:01.934 tapa.core:671] pipelined signal: 64'd4 => shuffle_reordering_per_hash_9___const__64b4 -D0712 15:11:01.936 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_10___const__64b0 -D0712 15:11:01.936 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_10___const__64b0 -D0712 15:11:01.936 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_10___const__64b0 -D0712 15:11:01.936 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_10___const__64b0 -D0712 15:11:01.936 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_10___const__64b2 -D0712 15:11:01.936 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_10___const__64b2 -D0712 15:11:01.938 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_11___const__64b0 -D0712 15:11:01.938 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_11___const__64b0 -D0712 15:11:01.938 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_11___const__64b1 -D0712 15:11:01.938 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_11___const__64b1 -D0712 15:11:01.939 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_11___const__64b2 -D0712 15:11:01.939 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_11___const__64b2 -D0712 15:11:01.940 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_12___const__64b0 -D0712 15:11:01.940 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_12___const__64b0 -D0712 15:11:01.940 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_12___const__64b2 -D0712 15:11:01.940 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_12___const__64b2 -D0712 15:11:01.941 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_12___const__64b2 -D0712 15:11:01.941 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_12___const__64b2 -D0712 15:11:01.942 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_13___const__64b0 -D0712 15:11:01.942 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_13___const__64b0 -D0712 15:11:01.943 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_13___const__64b2 -D0712 15:11:01.943 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_13___const__64b2 -D0712 15:11:01.943 tapa.core:671] pipelined signal: 64'd3 => shuffle_reordering_per_hash_13___const__64b3 -D0712 15:11:01.943 tapa.core:671] pipelined signal: 64'd3 => shuffle_reordering_per_hash_13___const__64b3 -D0712 15:11:01.945 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_14___const__64b0 -D0712 15:11:01.945 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_14___const__64b0 -D0712 15:11:01.945 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_14___const__64b2 -D0712 15:11:01.945 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_14___const__64b2 -D0712 15:11:01.945 tapa.core:671] pipelined signal: 64'd4 => shuffle_reordering_per_hash_14___const__64b4 -D0712 15:11:01.945 tapa.core:671] pipelined signal: 64'd4 => shuffle_reordering_per_hash_14___const__64b4 -D0712 15:11:01.947 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_15___const__64b0 -D0712 15:11:01.947 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_15___const__64b0 -D0712 15:11:01.947 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_15___const__64b0 -D0712 15:11:01.947 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_15___const__64b0 -D0712 15:11:01.947 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_15___const__64b1 -D0712 15:11:01.947 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_15___const__64b1 -D0712 15:11:01.949 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_16___const__64b0 -D0712 15:11:01.949 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_16___const__64b0 -D0712 15:11:01.949 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_16___const__64b1 -D0712 15:11:01.949 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_16___const__64b1 -D0712 15:11:01.949 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_16___const__64b1 -D0712 15:11:01.949 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_16___const__64b1 -D0712 15:11:01.951 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_17___const__64b0 -D0712 15:11:01.951 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_17___const__64b0 -D0712 15:11:01.951 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_17___const__64b1 -D0712 15:11:01.951 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_17___const__64b1 -D0712 15:11:01.951 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_17___const__64b2 -D0712 15:11:01.951 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_17___const__64b2 -D0712 15:11:01.953 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_18___const__64b0 -D0712 15:11:01.953 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_18___const__64b0 -D0712 15:11:01.953 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_18___const__64b1 -D0712 15:11:01.953 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_18___const__64b1 -D0712 15:11:01.953 tapa.core:671] pipelined signal: 64'd3 => shuffle_reordering_per_hash_18___const__64b3 -D0712 15:11:01.953 tapa.core:671] pipelined signal: 64'd3 => shuffle_reordering_per_hash_18___const__64b3 -D0712 15:11:01.955 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_19___const__64b0 -D0712 15:11:01.955 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_19___const__64b0 -D0712 15:11:01.955 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_19___const__64b1 -D0712 15:11:01.955 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_19___const__64b1 -D0712 15:11:01.955 tapa.core:671] pipelined signal: 64'd4 => shuffle_reordering_per_hash_19___const__64b4 -D0712 15:11:01.955 tapa.core:671] pipelined signal: 64'd4 => shuffle_reordering_per_hash_19___const__64b4 -D0712 15:11:01.957 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_20___const__64b0 -D0712 15:11:01.957 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_20___const__64b0 -D0712 15:11:01.957 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_20___const__64b1 -D0712 15:11:01.957 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_20___const__64b1 -D0712 15:11:01.957 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_20___const__64b1 -D0712 15:11:01.957 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_20___const__64b1 -D0712 15:11:01.959 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_21___const__64b1 -D0712 15:11:01.959 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_21___const__64b1 -D0712 15:11:01.959 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_21___const__64b1 -D0712 15:11:01.959 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_21___const__64b1 -D0712 15:11:01.959 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_21___const__64b1 -D0712 15:11:01.959 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_21___const__64b1 -D0712 15:11:01.961 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_22___const__64b1 -D0712 15:11:01.961 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_22___const__64b1 -D0712 15:11:01.961 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_22___const__64b1 -D0712 15:11:01.961 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_22___const__64b1 -D0712 15:11:01.961 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_22___const__64b2 -D0712 15:11:01.961 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_22___const__64b2 -D0712 15:11:01.963 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_23___const__64b1 -D0712 15:11:01.963 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_23___const__64b1 -D0712 15:11:01.963 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_23___const__64b1 -D0712 15:11:01.963 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_23___const__64b1 -D0712 15:11:01.964 tapa.core:671] pipelined signal: 64'd3 => shuffle_reordering_per_hash_23___const__64b3 -D0712 15:11:01.964 tapa.core:671] pipelined signal: 64'd3 => shuffle_reordering_per_hash_23___const__64b3 -D0712 15:11:01.965 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_24___const__64b1 -D0712 15:11:01.965 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_24___const__64b1 -D0712 15:11:01.965 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_24___const__64b1 -D0712 15:11:01.965 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_24___const__64b1 -D0712 15:11:01.966 tapa.core:671] pipelined signal: 64'd4 => shuffle_reordering_per_hash_24___const__64b4 -D0712 15:11:01.966 tapa.core:671] pipelined signal: 64'd4 => shuffle_reordering_per_hash_24___const__64b4 -D0712 15:11:01.967 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_25___const__64b0 -D0712 15:11:01.967 tapa.core:671] pipelined signal: 64'd0 => shuffle_reordering_per_hash_25___const__64b0 -D0712 15:11:01.968 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_25___const__64b1 -D0712 15:11:01.968 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_25___const__64b1 -D0712 15:11:01.968 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_25___const__64b2 -D0712 15:11:01.968 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_25___const__64b2 -D0712 15:11:01.969 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_26___const__64b1 -D0712 15:11:01.969 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_26___const__64b1 -D0712 15:11:01.970 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_26___const__64b1 -D0712 15:11:01.970 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_26___const__64b1 -D0712 15:11:01.970 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_26___const__64b2 -D0712 15:11:01.970 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_26___const__64b2 -D0712 15:11:01.972 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_27___const__64b1 -D0712 15:11:01.972 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_27___const__64b1 -D0712 15:11:01.972 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_27___const__64b2 -D0712 15:11:01.972 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_27___const__64b2 -D0712 15:11:01.972 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_27___const__64b2 -D0712 15:11:01.972 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_27___const__64b2 -D0712 15:11:01.974 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_28___const__64b1 -D0712 15:11:01.974 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_28___const__64b1 -D0712 15:11:01.974 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_28___const__64b2 -D0712 15:11:01.974 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_28___const__64b2 -D0712 15:11:01.974 tapa.core:671] pipelined signal: 64'd3 => shuffle_reordering_per_hash_28___const__64b3 -D0712 15:11:01.974 tapa.core:671] pipelined signal: 64'd3 => shuffle_reordering_per_hash_28___const__64b3 -D0712 15:11:01.976 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_29___const__64b1 -D0712 15:11:01.976 tapa.core:671] pipelined signal: 64'd1 => shuffle_reordering_per_hash_29___const__64b1 -D0712 15:11:01.976 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_29___const__64b2 -D0712 15:11:01.976 tapa.core:671] pipelined signal: 64'd2 => shuffle_reordering_per_hash_29___const__64b2 -D0712 15:11:01.976 tapa.core:671] pipelined signal: 64'd4 => shuffle_reordering_per_hash_29___const__64b4 -D0712 15:11:01.976 tapa.core:671] pipelined signal: 64'd4 => shuffle_reordering_per_hash_29___const__64b4 -D0712 15:11:01.978 tapa.core:671] pipelined signal: out_bits => writeOutput_synchronous_0___out_bits -D0712 15:11:01.978 tapa.core:671] pipelined signal: out_bits => writeOutput_synchronous_0___out_bits -D0712 15:11:01.981 tapa.core:852] Set the address width of async_mmap to 64 -D0712 15:11:01.981 tapa.core:852] Set the address width of async_mmap to 64 -I0712 15:11:02.722 tapa.core:465] generating report -I0712 15:11:02.722 tapa.core:465] generating report -I0712 15:11:02.731 tapa.core:473] writing generated auxiliary RTL files -I0712 15:11:02.731 tapa.core:473] writing generated auxiliary RTL files -I0712 15:11:02.731 tapa.steps.common:92] writing TAPA settings to json `generated/settings.json`. -I0712 15:11:02.731 tapa.steps.common:92] writing TAPA settings to json `generated/settings.json`. -I0712 15:11:02.731 tapa.steps.common:46] reusing TAPA settings from upstream flows. -I0712 15:11:02.731 tapa.steps.common:46] reusing TAPA settings from upstream flows. -I0712 15:11:02.731 tapa.core:481] packaging RTL code -I0712 15:11:02.731 tapa.core:481] packaging RTL code -D0712 15:11:02.731 tapa.verilog.xilinx:70] RTL ports of workload: -D0712 15:11:02.731 tapa.verilog.xilinx:70] RTL ports of workload: -D0712 15:11:02.731 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: input_bv, ctype: BV_LOAD_DTYPE*, width: 128, chan_count: None, chan_size: None -D0712 15:11:02.731 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: input_bv, ctype: BV_LOAD_DTYPE*, width: 128, chan_count: None, chan_size: None -D0712 15:11:02.731 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: key_in, ctype: LOAD_DTYPE*, width: 512, chan_count: None, chan_size: None -D0712 15:11:02.731 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: key_in, ctype: LOAD_DTYPE*, width: 512, chan_count: None, chan_size: None -D0712 15:11:02.731 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_bits, ctype: STORE_DTYPE*, width: 512, chan_count: None, chan_size: None -D0712 15:11:02.731 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_bits, ctype: STORE_DTYPE*, width: 512, chan_count: None, chan_size: None -D0712 15:11:02.731 tapa.verilog.xilinx:75] cat: Cat.SCALAR, name: UNUSED_DUMMY, ctype: int, width: 32, chan_count: None, chan_size: None -D0712 15:11:02.731 tapa.verilog.xilinx:75] cat: Cat.SCALAR, name: UNUSED_DUMMY, ctype: int, width: 32, chan_count: None, chan_size: None -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: bloom_arb_forwarder_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: bloom_arb_forwarder_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: queryResult_per_hash_bv_buf_URAMS_V_RAM_T2P_URAM_1R1W.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: queryResult_per_hash_bv_buf_URAMS_V_RAM_T2P_URAM_1R1W.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: a_axi_write_broadcastor_1_to_3.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: a_axi_write_broadcastor_1_to_3.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: computeHash_Computer_mul_32s_30ns_32_2_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: computeHash_Computer_mul_32s_30ns_32_2_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: queryResult_per_hash_queryResult_per_hash_Pipeline_PROCESS_QUERIES.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: queryResult_per_hash_queryResult_per_hash_Pipeline_PROCESS_QUERIES.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: shuffle_reordering_per_hash_mux_83_1_1_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: shuffle_reordering_per_hash_mux_83_1_1_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: computeHash_Feeder_computeHash_Feeder_Pipeline_VITIS_LOOP_222_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: computeHash_Feeder_computeHash_Feeder_Pipeline_VITIS_LOOP_222_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: computeHash_Feeder_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: computeHash_Feeder_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: bloom_aggregate_SPLIT_bloom_aggregate_SPLIT_Pipeline_VITIS_LOOP_324_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: bloom_aggregate_SPLIT_bloom_aggregate_SPLIT_Pipeline_VITIS_LOOP_324_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: axi_crossbar_wr.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: axi_crossbar_wr.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: axi_crossbar.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: axi_crossbar.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: packOutput_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: packOutput_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: loadBV.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: loadBV.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: computeHash_Computer.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: computeHash_Computer.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: bloom_arb_forwarder_bloom_arb_forwarder_Pipeline_INIT_LOOP.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: bloom_arb_forwarder_bloom_arb_forwarder_Pipeline_INIT_LOOP.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: queryResult_per_hash_bv_buf_BRAMS_V_RAM_T2P_BRAM_1R1W.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: queryResult_per_hash_bv_buf_BRAMS_V_RAM_T2P_BRAM_1R1W.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: axi_register_rd.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: axi_register_rd.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: writeOutput_synchronous.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: writeOutput_synchronous.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: shuffle_reordering_per_hash_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: shuffle_reordering_per_hash_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: workload_fsm.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: workload_fsm.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: shuffle_reordering_per_hash.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: shuffle_reordering_per_hash.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: bloom_arbiter_ratemonitor_bloom_arbiter_ratemonitor_Pipeline_INIT_LOOP_2.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: bloom_arbiter_ratemonitor_bloom_arbiter_ratemonitor_Pipeline_INIT_LOOP_2.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: a_axi_write_broadcastor_1_to_4.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: a_axi_write_broadcastor_1_to_4.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: shuffle_TtoS_per_hash.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: shuffle_TtoS_per_hash.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: bloom_arbiter_ratemonitor.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: bloom_arbiter_ratemonitor.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: loadKey.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: loadKey.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: writeOutput_synchronous_outmmap_m_axi.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: writeOutput_synchronous_outmmap_m_axi.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: computeHash_Computer_mul_32s_31s_32_2_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: computeHash_Computer_mul_32s_31s_32_2_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: fifo_srl.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: fifo_srl.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: axi_crossbar_rd.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: axi_crossbar_rd.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: bloom_hier_arbiter_atom_bloom_hier_arbiter_atom_Pipeline_MAIN_LOOP.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: bloom_hier_arbiter_atom_bloom_hier_arbiter_atom_Pipeline_MAIN_LOOP.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: queryResult_per_hash_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: queryResult_per_hash_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: shuffle_reordering_per_hash_shuffle_reordering_per_hash_Pipeline_PEEK_EMULATOR_INIT_VITIS_LOOP_368_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: shuffle_reordering_per_hash_shuffle_reordering_per_hash_Pipeline_PEEK_EMULATOR_INIT_VITIS_LOOP_368_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: queryResult_per_hash.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: queryResult_per_hash.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: computeHash_Computer_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: computeHash_Computer_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: relay_station.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: relay_station.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: computeHash_Computer_mul_32s_32s_32_2_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: computeHash_Computer_mul_32s_32s_32_2_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: detect_burst.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: detect_burst.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: bloom_hier_arbiter_atom.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: bloom_hier_arbiter_atom.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: fifo.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: fifo.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: shuffle_reordering_per_hash_mux_83_24_1_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: shuffle_reordering_per_hash_mux_83_24_1_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: packOutput_packOutput_Pipeline_VITIS_LOOP_317_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: packOutput_packOutput_Pipeline_VITIS_LOOP_317_1.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: async_mmap.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: async_mmap.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: axi_crossbar_addr.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: axi_crossbar_addr.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: bloom_aggregate_SPLIT.v -D0712 15:11:02.732 haoda.backend.xilinx:163] packing: bloom_aggregate_SPLIT.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: loadBV_loadBV_Pipeline_VITIS_LOOP_181_1.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: loadBV_loadBV_Pipeline_VITIS_LOOP_181_1.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: loadBV_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: loadBV_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: bloom_arb_forwarder.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: bloom_arb_forwarder.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: computeHash_Computer_computeHash_Computer_Pipeline_MAIN_LOOP.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: computeHash_Computer_computeHash_Computer_Pipeline_MAIN_LOOP.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: shuffle_reordering_per_hash_shuffle_reordering_per_hash_Pipeline_MAIN_LOOP.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: shuffle_reordering_per_hash_shuffle_reordering_per_hash_Pipeline_MAIN_LOOP.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: bloom_arbiter_ratemonitor_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: bloom_arbiter_ratemonitor_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: bloom_arbiter_ratemonitor_bloom_arbiter_ratemonitor_Pipeline_MAIN_LOOP.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: bloom_arbiter_ratemonitor_bloom_arbiter_ratemonitor_Pipeline_MAIN_LOOP.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: fifo_fwd.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: fifo_fwd.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: bloom_arbiter_ratemonitor_mux_83_1_1_1.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: bloom_arbiter_ratemonitor_mux_83_1_1_1.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: shuffle_TtoS_per_hash_mux_53_1_1_1.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: shuffle_TtoS_per_hash_mux_53_1_1_1.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: computeHash_Feeder.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: computeHash_Feeder.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: writeOutput_synchronous_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: writeOutput_synchronous_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: queryResult_per_hash_queryResult_per_hash_Pipeline_LOAD_BV_VALUES.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: queryResult_per_hash_queryResult_per_hash_Pipeline_LOAD_BV_VALUES.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: computeHash_Computer_mul_25s_25ns_25_2_1.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: computeHash_Computer_mul_25s_25ns_25_2_1.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: axi_pipeline.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: axi_pipeline.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: workload.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: workload.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: fifo_bram.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: fifo_bram.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: writeOutput_synchronous_writeOutput_synchronous_Pipeline_VITIS_LOOP_395_1.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: writeOutput_synchronous_writeOutput_synchronous_Pipeline_VITIS_LOOP_395_1.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: bloom_aggregate_SPLIT_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: bloom_aggregate_SPLIT_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: generate_last.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: generate_last.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: workload_control_s_axi.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: workload_control_s_axi.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: arbiter.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: arbiter.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: priority_encoder.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: priority_encoder.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: shuffle_TtoS_per_hash_shuffle_TtoS_per_hash_Pipeline_VITIS_LOOP_473_2.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: shuffle_TtoS_per_hash_shuffle_TtoS_per_hash_Pipeline_VITIS_LOOP_473_2.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: packOutput.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: packOutput.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: axi_register_wr.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: axi_register_wr.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: bloom_arb_forwarder_bloom_arb_forwarder_Pipeline_MAIN_LOOP.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: bloom_arb_forwarder_bloom_arb_forwarder_Pipeline_MAIN_LOOP.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: loadKey_loadKey_Pipeline_VITIS_LOOP_194_1.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: loadKey_loadKey_Pipeline_VITIS_LOOP_194_1.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: loadKey_flow_control_loop_pipe_sequential_init.v -D0712 15:11:02.733 haoda.backend.xilinx:163] packing: loadKey_flow_control_loop_pipe_sequential_init.v -I0712 15:11:21.474 tapa.core:489] packaging HLS report -I0712 15:11:21.474 tapa.core:489] packaging HLS report -D0712 15:11:21.475 tapa.core:494] packing report/queryResult_per_hash_Pipeline_LOAD_BV_VALUES_csynth.xml -D0712 15:11:21.475 tapa.core:494] packing report/queryResult_per_hash_Pipeline_LOAD_BV_VALUES_csynth.xml -D0712 15:11:21.476 tapa.core:494] packing report/shuffle_reordering_per_hash_Pipeline_MAIN_LOOP_csynth.xml -D0712 15:11:21.476 tapa.core:494] packing report/shuffle_reordering_per_hash_Pipeline_MAIN_LOOP_csynth.xml -D0712 15:11:21.476 tapa.core:494] packing report/bloom_hier_arbiter_atom_Pipeline_MAIN_LOOP_csynth.xml -D0712 15:11:21.476 tapa.core:494] packing report/bloom_hier_arbiter_atom_Pipeline_MAIN_LOOP_csynth.xml -D0712 15:11:21.476 tapa.core:494] packing report/bloom_arbiter_ratemonitor_Pipeline_MAIN_LOOP_csynth.xml -D0712 15:11:21.476 tapa.core:494] packing report/bloom_arbiter_ratemonitor_Pipeline_MAIN_LOOP_csynth.xml -D0712 15:11:21.476 tapa.core:494] packing report/queryResult_per_hash_csynth.xml -D0712 15:11:21.476 tapa.core:494] packing report/queryResult_per_hash_csynth.xml -D0712 15:11:21.477 tapa.core:494] packing report/computeHash_Feeder_Pipeline_VITIS_LOOP_222_1_csynth.xml -D0712 15:11:21.477 tapa.core:494] packing report/computeHash_Feeder_Pipeline_VITIS_LOOP_222_1_csynth.xml -D0712 15:11:21.477 tapa.core:494] packing report/bloom_arbiter_ratemonitor_Pipeline_INIT_LOOP_2_csynth.xml -D0712 15:11:21.477 tapa.core:494] packing report/bloom_arbiter_ratemonitor_Pipeline_INIT_LOOP_2_csynth.xml -D0712 15:11:21.477 tapa.core:494] packing report/loadKey_Pipeline_VITIS_LOOP_194_1_csynth.xml -D0712 15:11:21.477 tapa.core:494] packing report/loadKey_Pipeline_VITIS_LOOP_194_1_csynth.xml -D0712 15:11:21.477 tapa.core:494] packing report/shuffle_reordering_per_hash_Pipeline_PEEK_EMULATOR_INIT_VITIS_LOOP_368_1_csynth.xml -D0712 15:11:21.477 tapa.core:494] packing report/shuffle_reordering_per_hash_Pipeline_PEEK_EMULATOR_INIT_VITIS_LOOP_368_1_csynth.xml -D0712 15:11:21.478 tapa.core:494] packing report/packOutput_Pipeline_VITIS_LOOP_317_1_csynth.xml -D0712 15:11:21.478 tapa.core:494] packing report/packOutput_Pipeline_VITIS_LOOP_317_1_csynth.xml -D0712 15:11:21.478 tapa.core:494] packing report/computeHash_Feeder_csynth.xml -D0712 15:11:21.478 tapa.core:494] packing report/computeHash_Feeder_csynth.xml -D0712 15:11:21.478 tapa.core:494] packing report/packOutput_csynth.xml -D0712 15:11:21.478 tapa.core:494] packing report/packOutput_csynth.xml -D0712 15:11:21.478 tapa.core:494] packing report/bloom_arbiter_ratemonitor_csynth.xml -D0712 15:11:21.478 tapa.core:494] packing report/bloom_arbiter_ratemonitor_csynth.xml -D0712 15:11:21.479 tapa.core:494] packing report/bloom_arb_forwarder_csynth.xml -D0712 15:11:21.479 tapa.core:494] packing report/bloom_arb_forwarder_csynth.xml -D0712 15:11:21.479 tapa.core:494] packing report/shuffle_reordering_per_hash_csynth.xml -D0712 15:11:21.479 tapa.core:494] packing report/shuffle_reordering_per_hash_csynth.xml -D0712 15:11:21.479 tapa.core:494] packing report/bloom_arb_forwarder_Pipeline_MAIN_LOOP_csynth.xml -D0712 15:11:21.479 tapa.core:494] packing report/bloom_arb_forwarder_Pipeline_MAIN_LOOP_csynth.xml -D0712 15:11:21.480 tapa.core:494] packing report/bloom_hier_arbiter_atom_csynth.xml -D0712 15:11:21.480 tapa.core:494] packing report/bloom_hier_arbiter_atom_csynth.xml -D0712 15:11:21.480 tapa.core:494] packing report/bloom_arb_forwarder_Pipeline_INIT_LOOP_csynth.xml -D0712 15:11:21.480 tapa.core:494] packing report/bloom_arb_forwarder_Pipeline_INIT_LOOP_csynth.xml -D0712 15:11:21.480 tapa.core:494] packing report/queryResult_per_hash_Pipeline_PROCESS_QUERIES_csynth.xml -D0712 15:11:21.480 tapa.core:494] packing report/queryResult_per_hash_Pipeline_PROCESS_QUERIES_csynth.xml -D0712 15:11:21.480 tapa.core:494] packing report/bloom_aggregate_SPLIT_Pipeline_VITIS_LOOP_324_1_csynth.xml -D0712 15:11:21.480 tapa.core:494] packing report/bloom_aggregate_SPLIT_Pipeline_VITIS_LOOP_324_1_csynth.xml -D0712 15:11:21.481 tapa.core:494] packing report/writeOutput_synchronous_csynth.xml -D0712 15:11:21.481 tapa.core:494] packing report/writeOutput_synchronous_csynth.xml -D0712 15:11:21.481 tapa.core:494] packing report/workload_csynth.xml -D0712 15:11:21.481 tapa.core:494] packing report/workload_csynth.xml -D0712 15:11:21.481 tapa.core:494] packing report/loadBV_Pipeline_VITIS_LOOP_181_1_csynth.xml -D0712 15:11:21.481 tapa.core:494] packing report/loadBV_Pipeline_VITIS_LOOP_181_1_csynth.xml -D0712 15:11:21.481 tapa.core:494] packing report/bloom_aggregate_SPLIT_csynth.xml -D0712 15:11:21.481 tapa.core:494] packing report/bloom_aggregate_SPLIT_csynth.xml -D0712 15:11:21.482 tapa.core:494] packing report/computeHash_Computer_Pipeline_MAIN_LOOP_csynth.xml -D0712 15:11:21.482 tapa.core:494] packing report/computeHash_Computer_Pipeline_MAIN_LOOP_csynth.xml -D0712 15:11:21.482 tapa.core:494] packing report/computeHash_Computer_csynth.xml -D0712 15:11:21.482 tapa.core:494] packing report/computeHash_Computer_csynth.xml -D0712 15:11:21.482 tapa.core:494] packing report/shuffle_TtoS_per_hash_Pipeline_VITIS_LOOP_473_2_csynth.xml -D0712 15:11:21.482 tapa.core:494] packing report/shuffle_TtoS_per_hash_Pipeline_VITIS_LOOP_473_2_csynth.xml -D0712 15:11:21.482 tapa.core:494] packing report/loadBV_csynth.xml -D0712 15:11:21.482 tapa.core:494] packing report/loadBV_csynth.xml -D0712 15:11:21.483 tapa.core:494] packing report/writeOutput_synchronous_Pipeline_VITIS_LOOP_395_1_csynth.xml -D0712 15:11:21.483 tapa.core:494] packing report/writeOutput_synchronous_Pipeline_VITIS_LOOP_395_1_csynth.xml -D0712 15:11:21.483 tapa.core:494] packing report/loadKey_csynth.xml -D0712 15:11:21.483 tapa.core:494] packing report/loadKey_csynth.xml -D0712 15:11:21.483 tapa.core:494] packing report/shuffle_TtoS_per_hash_csynth.xml -D0712 15:11:21.483 tapa.core:494] packing report/shuffle_TtoS_per_hash_csynth.xml -I0712 15:11:21.484 tapa.core:497] generated the v++ xo file at generated/multistream_MurmurHash3.xo -I0712 15:11:21.484 tapa.core:497] generated the v++ xo file at generated/multistream_MurmurHash3.xo diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/multistream_MurmurHash3.xo b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/multistream_MurmurHash3.xo index d334d6c5675f23b11a721a9ec251e964d03e03af..2a3c28f10c83cde5d25a2a1b999538300df6ea93 100644 GIT binary patch delta 289981 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%0Ac;Vj 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

g6je;p9N>__HJk8QO@0b` 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 delta 300319 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�g+{Sb$FmM%VP~ z;T@&SL!i?aSPq zG#OztaX;{`G{cF;l_d}S0arF#zUvhYoE5k^fqEr?=Sgu?wyVWR=#3Zu%o9^=BF0%y9Lj%!u3;Xd{=CB)|E%0)2p)ytbjh&}=?C9&nJ zx5pm?pNw1lOlRBy2JF?#xv*@F!`@51lFO90)TnCwKgieue(PvHybcZ=)Fg_a7~_ z{{+T=M#2!n!vA+93?VH1e@DU)!ovS|Bn$xtUlZf~Dbat2gdv25|L;f`LRk14hWwwA zF!UFC=s!U(1X#GV`8;T&qZV|CsrJ0dRr1-tph+4!#K7h9oV{l6o7{%O!gM)-S#C68 z_>+J)#OMhS`gl@`6inZ0rZhL2E`lnitDq^a8u2-T@LWg}U_gNkgc||-!mJq*i16t` z*R*^0_GyG^&n!R))pq0}TcrztY6lh&swKx#tp}EB6=15pjHTLBSgNhTQmrOTwYpfU z&B0RbIF@S5V5+UeQtc3++Sw|$MTBWnC&6FC5jBm5)rRDjctFprQ;#8pn|bT?&#toc z;%mVC+(niLGq)|F29}jhsAsT!F$(^mHPQFKdUJ&e`6!W|rNA#@5zL@CunQ^SsTIc( z5Fb7S(>o5rU`RLpiH-m&7feQilfa-0b38H{|q3F`!9w$qm#yv2hlB z;vFr`ur7*J+kg-uGJo3x_QZ|?dyoji?f0H}lZ18TZQxT|HhV8LvLnEP6lbMj$l8np zv<3mZ&`)oVv=~V13VPj5=j`Do7U{c&t`tbQOZx3mxpk@i8l&)oJ@ORv_y}cFDZm{A zAK3*&FzBU!Y6Ap}a2NT+^6h;7XJ3we&_Pn`C1>(M0F(#nT)y9@Y7F7 zmpoZ-GG=2l-&P(fDKRlu^ct>=C zi3jeY(SguGkM8N$%kRZ4~z zQD8=?lK;RC51eib$neZQDxsAzWeZPvGLC3~osEg(lyGaC`-a`4+jkBggpNBdBX`xH z;6`~~6GC(PsthZ_qj=2%0WALx1lNLoy=5S!5-VjIkwSpMN?8I@QXoXi6jllbk+Qt$ z1a)Z+?pgRQRow0HR9%k)9|28k*Mq@Z`djWf7C#_SxFvbPWj`{PxgSu2z}y9zMr2ME z=`&gOGmS{n2}VXj&?*O;!ZR}5gEM2mo2_^7iv$F`j}Z@o_jqi$$V`p&s$uNCzVMqc z&<|tpp0#9&S22MK;5c30KF$x zUOj;Kf5;e)yuR22CoM9XxaS6{th}-N4H-WWQ3CxLeE%4|5Decyh~Lhxh3<{Ww(hx| zvfwYAL!&>;nzwTwDO`_c@Q~RTd74=4rG^v3O`n(R-gi4pSUcd~Ex>1?(z$y0P}T*F zG!8zpPL^jMd;?prKi`8^aD92pdmrPr7XceBwC*t+D#wl6@p{gdiQwZ-ul+1kF%SG7 zHnTiC7=E{am*6Rs89lKeP0^(&#LPm)d>h#+4MDa-qmUiHqn#`yr&(B!-G4|$ki6j~ zE-UG!lNYspHqOs%CP)TqJihEq24rbiL^Bp$z`5)^KNG~lYihCoZTK2Cpfw!Xe=PaV z+ki*V;$Xc|WUjSB%#ilozCBs)#@#gP=_a;A#!n>grppn@tHQ7D{iTkA0xHvKMQ%HaKiX>nMTVo;#b z`KB(>IXU_;o0x8n+!~XMxix1uqjZ_w*;Bv^YPzB@aFCLBcP%JT_Tx}Ad}GsiG>0#h z=NV9j+bqwOCe7j&g~2yY6f-rziUum3lInO~ulQ0{I*;^LqNQKhP;6Ul_ zzs;Vqy~qzXoTO9M74%0mp1Q#BJj-(upj?kwo}-d*7h?o<+?YQW7{0DkmK7B1xlV6M z!vgRloL<(d^T zuu^uEYV#kE1h4tw$C!FbCqC=>U#SVLQO_T$`Hwq)SxxBgy7T*Lij5UoMReBFE_e3Q zVy5S(WM&4@7|R?eNBH22i8A*94W5h2@AheZxV7o>hg-Z?KPY8|>$vTBszbmg9N?W^ zbL(zZ(OpS{lhg)J8)_)rDtjLHZ4WOKx70l;rlW-yow~<^`@D;;TcP%g^Ip_96rXO~ z72&b;MoGm>bmw4MQmT?WH@`uf8y&JRkS(EXG`&1Am5*Uxu< zD8bFYQY7VdYNwiY-(wGoA@CnfnAFANXLhpIo!rTqPGZo&oWyprK)c$HOb=*cC8x?O>)&ow%Zqpq{Zt@d3o=p zUDu{FeplX;#c`NdyL(n`^DCM_uQ{mK*tm=2-4n;WlMCAK9KG{T4(7dc644K?0d1PJHP@kGhtwR1z|HJB)6jv5{$OTc9B_4B;utpV>f^i+bQd z%k5@JhpM%wCCiwTXcpGTvF}kh4Q$ugA49 zhMNwwejShZ>+h?>i}2l#$0h3SKEw zzk~4~#v+y&|JAlZ2iVo^^N(SNJ`;!rZi9f|#y-a42f%TVxD5;y#M9e~kEhq5PE@xU z4p?26#$WXJ*Y1XX>hHlCJc3s~0}gN+3xN=T%)1Ga1!TVYfP-WEs`&$QQno=7&Q@6f z94b7nO&$(~y&HL>N#S_unQ&l}ANU*kuaf_J4o^RCdzLErGmxRRAi1X=FNCeNUfgSJ z0b{|?-o0}Rw9xKJi<#>7tH&%hqM+P>rG>%7QSjF|SFod&r{))A(2GkUg1O6MjVQGL zY-3!s>D~JTuZ~LHBHBZ3w(CT}>tl~E`Mp_hxd}?bBcZ+3!$AJ}ne@@JVcl*VO@Xrb zGd(!FAN9;Bl=E@YGFv&BSLqm13geMX=opeq;Ek1VRRb(+3K%Xu-BiG;E<%LNAcqfQJc;FGNok^K-lSw z4AHkx6dxl`z2zl;_MiZ_(TBbP52FfCDNb%u9SE-uydMDR71;R819@VRb5$7`v&eO)qxhJ4>RskIqq=&i zJtZe1OecENu*%W+>j{I)HOb1{9H}BRinM@KfemF*-92(lK|SG3sti5Vf%gLR_z#!) zm6sJ>m;9HltCF`pn0o>`SnOF)1S@cL+J86EIneMwnkYko!9I*<`F zJv}5KgbOC7n?XFdOeUtUkC~dD04~qT;Jf`$W+JzV<|Q_`ZH@U>i#VCkT^jzU>TDh!XHeW)`~rkPB}()TNJBfo>DtdZ zS_bmd#($=}hXmw_URTfXXj^ZOJ*ZyRrly-gDY6CWhbz2Mu|G|(?|O7Kz(T)57He@Ss7<{~qa;V-7n^9_y+3Wb zImxYuq+@>>9pf%e=dny}B04}9a~XV(eWWK^nrNU?Z=-IY42jwSpNSf_EECxo{z^uI z%JpYqg1)BI@5Jf93KO)_2mHHqtrn-h9i|9VY+e1&`OnPohjkVDTZI*{C2ATi^fvh; z;Ki#Jao_ zH+Vnk@1W1K-1mv+U*p=p7#K8o&c8sk->GWQ8e6|VCfe`tEVRma`oHXlpg$R&{}qiN zw3t5}V4yEw2mHGY_~o|&KP1}k@GNBd{RVjTnGg^y_*-Y2>1Hs*l&^Jcg|Kt0M^pCFF1TYn9d*OVkch6QI-8xx8N6wM-+uhnhW{&b zA$SO0sgZxyNq#56f0EzO&qws1RPaA5;K2SLydC-r3I3D(hSvPLD>x(oWg))21Z8WtUtRpOsssLSs~vf3bul|@QyDvJE;ZVuBTQhzee56^Z3^!r)Y7;tf#;asgW3I_ zdjlX=o^cvPPug}$W&w)UZ9T9x;iQ!85Wi41Ss}RthT`@@P^^_l~Sp|5_a33e&E2-9zTfU z>R8-tuz;OTJ8vZ0JBca!hz%kbScU8FtPl5Mw1Q8R||a-F*Bp!SA!dAF@84}=I4hgPjwif z?B*)T8|?PjVX9k~`!RM4H#w&UTQO+0n}h7R5{pZtDAHw5h;__rDJv(}&T?+B9y18# zEbN<|h~(QdGhKa*ko(GcjMj~zZTFwrSu<%*q5Y`*AJtYE@y9Rsl8KO-IoFQzw zP|)tPDZcwQQE++o$c~R{uTIw5J34$I%?fypXV*LTlG=D7$-#nW0>6K8C`K#CZBkRL zC-y$UTuoY)IT7@N!Ggz!c(G=jiKQxH*Q2aQ@q+CU;Hk~I45kWi9J43m&4Ts~xipt` ztw$YQzAYm9oWYc5Vw!1DLR6U28DCcz8t~}jS;rsRYS&6yX@pykvhguqKjE|U;l=!@ ze3t~`L$yXvT-1Xu$A&PF=I~byjnxvO8#nmgJ?Y`mdbba1_KMF_S)ZE5zrB(n&rmpV zT^j8%ZFd*-{RYmh7Q&-W`WsuQpXF4Y752o*BF)((ynNe%H0SIGBJ{9J3*meGY%UG! zh$k+)*I6)F5xOjHk!Q%<-+7i{K7uE-b;Fp8-GZ%{FnWtBG%oehqt8!Uxc-)3zDw?~ zXQhkX6XD5H4M@1vs>6J%uKwab!n!}*m%h|+QcHO9l+LlmR0b=aO9#j5?1vvX(OYe3 z@aW^(^O1?hz0a}AV%9)x(y-)wTl~7lgM=cJo1g8h)H~57^N_l-P%z?zM_)w_>C!%X zvB}2KWAyVGBa!N4m>=MPDzFNVgvr9Ctecgg_&t56=EE=la zIl769+wNHCb)i&TBf^H3kDt8IWH7?%sfav z`lv7O52eJAiT*n-ti&s>&l@f#qGkxCJk!{owyQFWPUU9WCjCUtPx<97*sdYWen0h< z5$sq9@vOSe{!lUdW*7DK^w7&1m*tBNS^ZI>lf+*KZWII#qak*MC-j(!LW#cEWLcqy z=p++x5w&|?VPn_uSmWKkUvdz%mXw|^#yUuF`fCTBPQN)9215-*t980qTNr(oe*Q8? zC}m>dih)1L9O#!*Cxkmaz)n{fQ?nDG-BK96l*<61mVln!*Dg9KQ|XehQ7Guzt-bB# zydEcA`rONTcR5h+M1Ky1(Tz{8HWajYM+N-|%yFwqeZ%uhR$8?^=n<8Ax19^ga7Nw$K%1Jm@UdE4~XtJAd3%}t>p%u+qAi?-@A&7h+Y6p>2Xg1J9xSht8rITgVqXBm7B+-_Us1K1Sn(7dhNJ_`Uj32mj*u0tT zp~(Kr*Cg+tlO@@uH=Ic}u(G8%iz8KCDsR6XYCXJ^qcd-vH#rmBKiU|HzAlM*cX-J` zXC5zak~p}Z_Cq9OEQx72ycDK0FP1my36>foAu~x#&EX{pH}D&=oRm1YG5sNP-bV3t+&Yb8*9}U8wzpNC zS;uw--*}yzy%f+l2v`4OWWQ8G!=;lA9aS6K+{7N9$2UGCZ%^Qbt6!DcKfGPTheygN z0*CU*#&jI!ynO}%Ez;|_Z&Xiy|1oHd&;9tZG)bd5(P}Q-;7U_>19V?{VefhTG5tuK ziWB(HPB%KC^;AZ}aVp}sx4oBK7km?_3Cxee3CPy5f(~x9$CPbV*gKFz3B^gv-DFOB4SQ7?~z-FV(`C z^8lAWfI08TSKj&JI%xI#N+*3C4lNP1sq>FkS+LzT(#fExet~nhaN?jrT8HHWU-?6} z_-%6ho>dn6?+WTR0bBj?OIaAkNVahpPt+h1X+A-CPyu|qlZ>UGF<* zR#bu?iS6*GM9fm-Xwa3XOz0g1+pG^1jzDil84IHpFmmB1u87D|Y&W=YWX@{F*XDiI z`J&mJhuSXwDZ&@dBtw^_!bIpQeYrghS-Bcsb&EGTrTOg~Y=3@xm|V=aNzGKFGDiWU zo|AIBY#@H1-2^0w$W)y-kJRdGs!8CvJ1fuKEJU8u1Z&i8D{GIiYuaG#47>)x7bamB z4Z)(-rw3nS*UZ3L?5DMM?3xu=`|xRPuFxA~KZ51YP)^&;CQ&E3?i{fngTc<_1cMA8 z-0Ugi3oozWKekGz(P^Btz_*9Lb6+5VQq#@W&32GRKESmJ63ewOlNxbNhYXED%r9T8?`ez1X6-MKX6i%=i^mfep`sy7z zPSB>rkFK&fcvn$}kGwhxhplh|^voTzKEB5ev@v;~^m^ZK4nzN(&b@3?bm}|jqo$12xT6E)G>PjY z5}gO9O_RY7y>#$nVi3YiTSqw$k`1<3Y5K_xEk`Y?%VjrV{OC6xK6vN(W9?G^*Y#Ox zU8TOMhl@rFg@tOKGQN=uW!0l*#dl4Gl6B1VV)A#hiGASC&S_F2_G8pfX;=kT) zBz}HoAf8eGypaN&$pLJ!X?L@AR$uG51D;bvGCqI}p9Oi2%#BgMPHAQB4R-AmSUa!0 zvUZ2{E(Bj_0zas-vUr9KIUEWTzFeCcS)KrA3b62IrwM#Lq9ecQFwWy zF?;ZJonw^6Y00W?{TFbGJLVpws$9!HQyTM7V52c}u$a!V?ZqLqoI_5l67xw2kXBW5V<$YLghqUQ(FLxF>=6*(o z>4VYFz-cs^4re&7x-qlb{_?bOJBjF^0%04Acm1o{jmh<|6xOHfHNStQ@Ytw#m)4WF zyV+=7YUjkR3uOFgm7ZxoZI!Nzb3Oi;bvnLT)Vk84_Lp?-b#c^r7w8k6;|R3Dk4?t) zna~U8xD&011-^T}+A2Mm2a7yY6mk7 z`jJ^~oLJAFTx9Sf#HzOsHQI8IUFE|Ys_V2@>AM``lY5DwK zUNIM$GUfwqV3AO-BS6)Ne6L)?)1+tw+Rc_D*Keeahss0LjvjL1(2geX1#PZ0>^eo-=3i1||qnT$&9 zm&PAktt>S1i@A&(-t{=McT0feD`K+^jBTIZ?O&j`tQGxG^R_QO2Z zRo=T3aBYtXP!aqHgU1M!t`JiaT})Q51eSm#pjR4JZiaz_L*-Y{fVNYIeq3=0`^0GUtir$=u&0T{=c@hT#oUC@yQcS6Yq znd5yo5NHo&Z08TBo1w-I7xVWrz zqyft{+|8%gwZL6w0K~FcMKu%0W_)w?nRR(ctpIbT#&K2OXOD2P68?klCyuK+J?*Dn zSJ4OY6{VugnmSZK~xL(P%ZLz8DlWkT&IObAR|90)5R7 zAHeQE-pwXdH_2{qJ)SMmn8BMH(XA|5fy+x#k(k_kr&B>$x^R-&USgd8Oyd*YW$-I* zl18|^+baB$)m%GIE8i`cWU${ko-N+!$}14weM*uTmzSghN^TbGKMr*rpH^RAH=QWE z<=Vel>Oa8Xsw4{ii$!;YB%S>ZhINjsj;^ra!gnUW8M`AC`z)BTlb^`k_85(u7i5!n zPuD-c@{#e4Yija?Ln8tM?80Trp;O^#UoH>u3TLItX)$-Us2d{vnIg>v zlj~(SMP|<1&Y)zyUS63xzd~;4(6cZTEg!@O7-)&bvfHfUc6=CDV&wo=YA~)~SiQr- zss_MHkL44rj$vWN4`3AmUpj0ZTCknctgX z|7-+=);RP2S0f+FM2j*O1Z`sZvjH$S=(@Y(Ve53`&0$lqn~Z%+KF^R%DI-Je z2j2Z#!d2Jo-3bueI{G(9i4Y^1b2Ar|I2 z7=_A>phsbf6Cq5sXCexNK`$?OwxW#Qp)r%Ct(dva>x3PxjVx8$JeW;s4veY1B(rDb zE=+iRVQgkQ6VAcw9SN_~a?%&vtOu&&QpBAtlCR*P8O7HrT_1N_bR&dhVsM{%pbfm^ z`cX~t@#^s+^C@9m>t|W%2=X%BP+ivgv)1^O_6CavZcx)%Oh@pCDP7j8oL%ud@{G1< z;MA!t(xWfEYLzd-(eE@;=?a~voH_SgQO{d_M7s>fPJ(y+vyl$UIhLKv!J(Tpc0!Ft z8KWcYEyc?lRQl@{x2dK8Wr*3A7m7MsrOIzXv7M#~1Hc?;-Sl7(&h;;mKTD&iYYIht`nHGqnv5p<8ivTiZO_3o#8!i&?;QS}my2 zvkX1F%d(deWuD!le06yqm57>JTpS&4fR<$Hi;Erohnq62>y2NfxAN@a=t+4+*l#gq zk8`1Z-_G**xJXyc>AEJ4cZnbU^$o?_6#1IDA+X*K)>E62^?4&?-Gdh_Q%1RJT67`H z%BINj@uNG-hbeMgHPs_q;af&(jo@1phrqHwSZ+y0mf2d6&x)@nD>_L|O zCc$zjSZ=8Y%TVISgb{fCLE0>4E)BiBIGi>*(mtT#t+<%hibCH?z7=s-lkww{JYL=u z{{7jsja2s6>$)k%LK}_}`Ia~g%83+{LHcTM9>!D}(H*%H&!FSVpU$RW!#ZAE7vY{s zy+mOa)^L=<4|%i?c{H81GDQ72=3`Ak>Jn7yG?YNF!7#DZX*8Z-!{}4DUet$%ROr1I zUVY&d`_AQtOv~l&*Hi2U`i*FPa7o9!A0d#(kNMa&@5h}wjNLi%T77S%% zTP=52fqU0SIL*HEc@`T=(cm9j(UY%R;+VDeKYtvs!~4bAI4ca*_e&IUR9= z+aQX2G0A*}ahx`OTB#&}i=-OH;K|6JcHukQKVj z$Sa6H@AqzTe-{cU7!7SH_q?^t$SH_F=hwHme*krBBJ44=rOflxGUHLfJM(^Ri~IXf zYzfezE5&;NGJlLV7;Imjh5Ar`DErTjL;ttpQP7{M|E2bsy{P4Te1cZ*HH>@A#_0eLJ+GubX&e2h|1*mH32Slkd0cq0%DKL0qtWft_uEo>}VWwrweIncDuIWRg`%pKb8L09|4|B3% z{#)$i@Ev9~T=)LR`==e}n9_C2a7JjxYQT8%xvF@eSq<#YX`2`GCn_JYKZeK8^)zet zQ*WW)2^mQQ(2^@RAF6fze1JfukqI}#m3@Zpu34usG}x8mMawskySe-c=bH~$|_er zvO2E_ueLC3=lvSGqj68?DscfbD!)ocU9Rw~JJF&D>h8ufW_HO=*U)c*Y2$BZCq4%) z#r-}&`<-^sgX4nA>thn{)y}u`a9yyzD0Q?q6f`nTDt=M< z=FD1=qBB3I_Bo2jcx`3oU()S2YzzG=)ql-btG3@CL6`hRoBb{EuW0fIO~==o{9@07 zJr4bL&+}KrmqTl7xvZDF*&j`WvF{uzvzcG)E4@EgNol<)nNM(_#BSk52H^N$F2VWG z_4$->g>xTj16JDSo}N!Vu!T=!adv>s#uki7#lxs~nH!H_Ujjhi>9aF8Ucx@`y?sXV zAGZ15Mder30Q#~V{82SXnyX|wUK@5WfV?PYuR~tn2MI^BgSmT7#Lk~{R z>|0o2_2U=qlKF7wTXwHonx9~6mssKS-1?hsZnYgY!viZ+YiK(0sWZ=dJ*?Ftm5V!y z3BCGOUc33$qaRXoGw$;_Cg=y8-Fy%Khc)1D%;FII5@7A!e`CX9pNPy<-I>G-{XNVX!jKr?D+B(ZKHj zzuqJswTD*TVEmWjN9O#{lW#o@ zG5yCr5JNU|^{8Aa&-0jW@V{H!_a)Jz@AdnytFG&u^E~(ce&4V4zJo-) zZQQQxx+^5TL8q+_%}r4j#?QAvSD&6->dxEq{d0qs@%IagXb^Hc;?hgqMUx@_)p@ev zdG}!D)uWZ0ZFiF)?+nh`*pdNj_G_~%WGBB1Y~FMDbpQIZGxEWUn`?V)46bd~MSRr# zs#~@ZsWq$nVWfGWOiuBU-AT?z8y0zukl|Oh<1V_%;kqv#=|3tfTKe#9x=Yb9er4M2 z`(~t;!L4MQv)_+@lP@+}jW6`*L2i^ty;!2BvZy97u>4{7m$vpnh zxBar;B$O&SLjrturO<5@eVo*K-BHQC>1j&1`)jcn^#g&fHr_4@GqLNPbwsDqQX$!c zGda8WY&h6j=qAt7`6^e2y}r<8ZLUi}`gP;6;BB6uZ`q`5XC?!`JyFsoNKEaxV3Fae zxStA=``rC(c3}U5iwvY+k43y#Bi7$4?|`89Y>vIJQooC^e>R@^(ns_)f@{wPGg|Ls z_x)sfNo6P$I&gDY0Q{qDCzk!imfyFnFxsYbhCIAWuE5vYd0%V( z_QEB5$tI+rmH*LD_F}P9q#jwt$FqDW)6S84d&X~l!x%fy3%XE_dgk7|#Np2zJXQk7$gT=n@r*=T3%C-v z&(pjqA_afPeQlm5_lw8f=4L{Vx0-DijCd>r1l=||8ZR)Z9ddb%&^mlKY|o97I$AA{ zJ98q3Zg2^#Tu*qop%`v8a;p5px$Mf>_$7JNCzHistGko|52JN+lB*BF3#wn_E?x+o z$6e&h5xMHtHZ;cd^QHVfRT+#cZFqC7=#olb)(u zu6(%BS8?DwC*_7b!?a(3j{)PkF0Iv2s48`^&L($iKV}0-I|xS&Tvz(8YCsBq`(nrZ zXk^g04H-ww%K-n;ai7@{`zXoTv5xPiN*}+Q>{>Yf@hVqAM;@|Fsd7)NZJ4b~o@!fj zhey<0VzrEM2_56~1Ir2mOVh+WgKG&(Zyg8Hw<51Q2s=EQd3W1Opto!pdUm!UcIhoe z5!>Ccw|!>4JPr}WCqPpCwb-pZY2nt-eR}n8)mb6AR(pxZ+HYFY!9H33QXCh#Z%jj0 zx^+v6y>-iGf7lJNx6!q4)X6$xtoGcWzrFgQ=hAJwBk@$!2LgNEs0xp{6p5c$xlZ3| z);Jl#`*2Arv1sAL>Rk4m)jag}%DjcT*N1n5Z<+?I&ud$OKR>_F-#k!xhT*MlR&j$K z0d4=a#a;$YK{K<7k&>KnYk?!*+$Y}HpG~z8(BQv*w|UV)I9Z}G-pzSp$yRA%=~bIN zcKIx1qQXMNw~Wt;Cm%S;d>P;dvFpvaTRbW;9cQHo);Tn zTRziC)J#dgH;6;mu#XQSqbIOc$-e(hpV6sLZX7y#6FowCIgm&!;WRN5+6OP5 z)*&B?De&hIh2B*|I61e!@zkakIz^1`NMt*lg#YEssG36J1h$B|QW}fbjtqw;$KuP4 zA7*;a{PxXTv_=SB>plJH~znWMi6V(dQqLXh`l}MfmFNm?1x!-z5 zr+JTtphOnOib% zoSG4)IQSM@6nxYy^JvCDh1KJ&RsDW2kYL$$SA43`E4ZN;w5WRH}- zIQ}NlD)Q}(mI(i2Q4y$?EuviV$0SS5UVIB;gC(w_{87g5QRI-;viGC*`-DrZs3fRm|chwKWjw4k+sC7}1Sgdf;qCbD-B1@^l7Ze~-*k~P~ zH1EqoD+$#b7M2Ah^Py$1CHZ{rtM z5O}S7SIoQg4;#vxk$)FHr$SQ_I!+qFymvhp+GBZV*s$^`L0vmXvv2wI*tsnslfvm~ z=uH2EJ#lP33G;gcTGx|yo4(C+c~z61mmJiZUu{WZA82$lf1O~;W~xo%k}=_w>09YE zDL;({v7^V_o-8&KWuGGR%eD(Fc}F-yW0BHD)yH(6`Lb5zaF(+wml5-`5z>3^Zhb;I zRc}QGN#t7B96qS;9@8&I*Sz%_oGQ%p-3kKu|HA=?$l2^J4}9&;M|*2D^UT<5zqkr` z1TU^EQ_|>_s{6)uoTN6J>sD6(aG-T|pV#49sSJLV?PX^%q_2&zW64c>_I{njl)iz< zG|uYMxSV zE(z5Sx;~?{#^WCJ1Z=MRbyawyx+1j^Z`N*!p;0vDrM!qwlAg+5#3Y@G5Bi$+P3crg zQ%Ncz8)%Orvpa%Noo?k36ZLn2&b-;1q;s>Trlt zKiCcH9M$`x=t6?-ym-6-5k{pRepr8k)&}iLKw=-8TBR3?B0XEgbtW@e1xfrIv*~rv z!X?`qA|l;k+F}5 z<%CxyuYKFv1)_ML#FH!%-e2YHnwd;`h1 z5NbV!e+cdf8;9)JzOxV6UOmxg{@hMf5`Ew31-;ufy4~#cU`r~8gDpw_jOVdyYCqTw zxp`^Nx)O)_oAx!ar%M;8a-r$lX=^Cc7kaNNwn*rxn6vWY35Pq73x|8&CT%~f%pqKJ zCQ-$ukm9y);5&(+z;}mF5MuTK)H^=;x;#*^aPeGJ*`uxc0~JlnLL>@Pn%NQBY>!w| z5fA3~+ad^f+%M}O-Z-uXexat#lr=7i8SP4|vYK2bB49dANsy_;N}}C&l=+5t3hC`U zdlz2gXDY8!)|==;mUX*4#3VNr7;J1DTx@JUq*-*Nx*i)zHS}T8U=r)QnhWu1n>;5a zC_Y7NGDx<)>g(fL(@M``xk&OIgU|1E`>F)K@?o*A%)7Lz*0xD15~*}H677H^v?;~n zu40QcjZul#ufx3fn&-hAWjICMvax4jd~Lm={c_ONufft=4HnEA{Ri)eO1WJad;aa* z?Q?-wzrNW+D<5`f*HSKY%X+Z}-I|+s`tq&wCVnO^6~?p@lb!yy#8)L8UZdX=6J1jzArX;8qypD1ebKNghLfv{T*rSJwS~1+5#EeMSeY%>> zPS!}prDU0|S|~!gTBx)hEV2dE~F~= zRP>!_*`2ck)hX{;de~g`*KeHmikUQ}MRz8iVNO-hlUG8j4r;wYkf<+=+($eZoFQA} z=GDGhap}>O$12FlsQ#UsU{U6ttbxoJT93T-g>AI<%>cc|7HDhPUyLR&^ zvc7-Ec9`f+L%Vd^|8Wxa94O+3_k&Fyag;?#Psx+5BZDO|?A$LOJ0gvJlIJ&>uDW+e z#??UT?_SsDJlU%=m3*uZy85+{w~%yx;~_t<&mQZ?vaa5Vq4Aw48vOX>ulMt%2VL0h zH$XS;`Mk26e_-%Tk-%+FuoL!Xre(?QdgkybD@bEfXp~5T`7I?~*6dkkvM#pFY%BMR z4nw9qCv046C4%%+Sj-|82rZ6{bVaMERCB1RAgz4x^>^tJtb^SE{k$Fiv>Rj(vi)rv zs8C?m_(0s|fOiob3JpTILqYX`da&XQ{^X(zBPhLKQ+t^^OPqE4>~4{Jd&eGLp+#!FhxZ0WP=J|0iTv=RP-%dcI~@#;~K3K`Kue+Rl)>1=!2hA5k(rEui;u)Z;}AV0cb+^ z@-9S68S8>3RI;-PLD-WBG@)9>!t@BjB~O4qrflF7Xi}%DyFCrPwUmMBc?59J>rOn? zCvo_8nu3ej_%eb(?ldVuoYGzrp}u=E_r4HYG`1CfJXR3{SAP!a0b(of-CtmIFj-pj z+^3f5oB5Lno=Y)?&8NN}>aCbgK6cmA9qJZzP+Tl5EeHQ{YPUKi==)*S6JG5B`JX`X znZE6Aud#xQPeNHxt*5*qV#4SuxpN=kd5ZXWjc_V^nRNDpr}|Q57}Has>q>emGkBIb z6cBmy2MUn;YZL%sVE_&V@H6cCTNHqO2Sfd{bdVqH#(Ef%vqU#ehH) z8(l!4KgYjdufRu4X?8j6KYJUm>VxJW8$yc2!R~6$DiTpdkZm1q()w<<2MJU0@l!Du z#z*IFF`8zZO{4q23VVKuL?H6_(kDTvpqyx(m^|iw?^B#ix~pc@A8zR!=B_<~uu*p< zK-kA3tH5|oxK2^$>CEI^2(?lSAV8v{i!p!zeES23c(G>WkZFb^C4wnHqDa<$6M^o1 z*V$65mGT0mK>fjNu;~;G5&dp|d;%b1)((ic7!GN0=RE1wfLpf59_!FTeN*e#? zT6X@sIU^%39J7gd(!4bUTJVuf{#1%6Z>E4K z;~vGv0Gln;u&cw1x z6b7VHtM&jiSZf5(AOh5)q6z|_K?Fd9r$rG6fCj-vz@R}yCv#F?8{)t&^cp@wyN?Rt zM5}~IDINu1X)3Im{Uj&)%s2}*Uiv|OPIcY+5+#yFe_ zs0a^v%&f~hIz+x9A;RDQBES9m`Kbe)?Re;|Ds1^9dNP!9c0c!F2VW`Ir4rXpW5mo7Fl+`?i-s}$gqU8l*CahG~4~6%< zYpf3T6eDfF#mP8a-AI?wTuak8VG|I4XI-z}w!tQZDXP8w)$ z9eTpl_*^rojsj2Od4*=3hF^E$#O5(mmx@WH9t+2K#tGV~Nz>C6Sr{ndud!PF*wwUK z(7&~8`3CD6LB5Ap6;Ba&KEr(uu>MJkXCC4J;Xkke=w~|c7i>UH;-6svLu+IMD%gXI zEwDG@ahy(o=Uze`3?_FbtraSkt`(Zg5{3a`E$M03)fOvORy?vC2Xcrk$MXs)cKMqr zQl14V(ipYJ%}Z)7>Lvy0AWmI9SnYWt_$P`5Yej>z&srW?envLi4P5(GSZI#nk-IvW@4!5>82-Qld2wn#o5G)3eJN_pz06M=@ z4Zw;4)zb{iU;iBwJioT+jU?&7v)k0JlBVDL-?ac}rx@^Gv;cAfqiM}7Z|^J>-wAVC zg1A`(iBNz5t;xUSgrc%BPn(R6Wm*oREOEv zJ?!xx{0xB7qB;D@?mkrTGj3eaQZN|hS}iTy)R>HF-|GPOa=UusUq zpc^0yP!-c3AlzRsDj zAtKDHTRu#rc_G)h*Kfo+dRze-a9uj&L!bX1UUTa5Ik7=OlKADrd#lrpCvOI67|T<{ zn+7z~_K?2dGF{%?`MMKc@gb(M33GahM3*S#GZufYe4uq;X&=nE{-*M=g%AB%_%V*$ zDgVmEV&z|Az6L0m@g^g1p(&5!6*e@l?T0?p3$jiG2%3Vzq@&V#ki8fk}TwIWBu6r3V%U)z<=rd>t%Vn+qxZ&1Oge*cxTzS z{YME90vh0dDSKEG&hj>NI^nP^9FF>Q+U_pUp7KxIot&~6+23JA!}jV@fukjmfgSmj zPxzf1L{$J4U`={%A(vG+=)1dB#!bEVVZ5N=XR%Tc;QtscNc3G|*`JU7&(jx{@;^=Q zIQCmHeV2S`+Rr5l96~);+7!ukqTg3gwzK`A1hZJ(_t#Ugcd>CDW1oOE4xj{kT;V$8 zcZJquLdD6|L^sNK!oW8JaMXBP$akx0j}s6947~SpzrXBv> zq7$3{QUIFkD@G6$;{)lBiZ+GB8pg#hd_N&R=r17OkF^(l>~t3upBl?$Z)B{ptap`ssm~i} zKR}bO=0I#8nAr&PJWAcHz;9$E=a>tCw1Hjv+QTOTGn&|=-Cf5*mu*JgJJdWyY5mFj zfvq3tC-0}&;$NwMm528zwA2LBQ*tu}403`-kK_Kc-M5a3lqTk?X3rG!ylN{hzD1y= z&&ilf+)#X^oo()0+~KVTQ3l4cRT7eI4hC%yNM+|9m&z8^6E54MXY^UyBaOl?Dj!I} zAuoUwi~v%wUjzb3!AKwlXILQ+Kng}~OTmatS=}{inPYPrG&^I0n%XH${Tz5x_&|&?4y5?6NYnA8YBzX-zV+bnQgHXCy`^=zTUMP02~Dqp}z(0PH# zUWSBS=#+t;^jnm2kTq-!N!}r3u}V6+=eYev3)3-n9-^zsokV+&voJpk?O?KuU4ID~ zFzdz)$6~nPUs1se`cxDE3?=|D*eK{DeKN@yfWgYfE)xtq-dZAPvYaBf^D%JJc3C!k zy{l2M?Q$!Sgp?dM_cZ^1;QyP&Lks;AoWzI$sxm6T$B+CM0RYPULjV8-K58%w!FE~z zFH4qKh5`X_4q|NA5zJ#EoV=g4cz$?UI4`(@=)caZLfq?288{1r~VdqQi*ShYb1DwETloDS7-L~J@ z@aQ20bi2w59K7*>ZkKm6J8V_Jc#kapjBm9SemKB;UmSf?YnGj!g?k?*eIjILz`2`q z?zNDdR)h@@dh`AmAK@OBhf#j@Fy7;~ z^6PK7&Hv&IrmJ&}gHf*5Z58r+QmQzyS_4x6u$~+=i2s%I$NgvL4{Q8EKb*gp)0#gN z|0g9HWG*B-6@MO2(|2Y0(|fC}KCIWz?{1U4bVR);+$pkmbx)O)^}g$wQ@oiB1Lya- z$AwUzXD(<>?TQYH{2Zf%zkEgAV7O2d;(Ve$LP0J|I_9;)qe&^GDmQJ{70N053wq^{3o@a z<_h@Uls+#~;J*0r@5}%w<1zrt=C}+1?Y-6`s<`i@WWZ$rj)4roJsHMEAoM^{S!uq1 zC_O)5{}b+@(k{N{O<3CfTlc>y*D~wR1n+{8 z3e6uBANm{1A8>qQr-jSQrqx#do->W3u}99hk{<^2?%+1PGfC#b!#cgeo;OLgVw7Qe zM+dBo!oEOTf+V2u4S}_twmQ!S1U@FP=0M;h8WYnwh%jno8DjhKt9F(&OHqAn`0 z#W?`1@kLgoT>1NH-fh-3O^>yC+RnCrJa6XVuUL3EUvVlITH2TKcS(ZhX}z@Bt6Jy}qWXn!pnkDj-M#Lg>=-_M7c0lLVGuF2)KRtd9tlI*XPxMgm?=Oo@@Rf`ZEFN;Pyil z?>fl_Jr_i`KF5ovn$ziPlVP+v?3aDU7pwXB2HoXN#U?;Jf~7GD2YnS5X5uh5W`ekN zste3#>Bhi0|EC=R{k$a{CJ2Ay|8REuW1x>x3&wYRx!z}vtd(O54iWP2jW7Z3@2nCp zMt1}7lfGUeh`t`6PwU6*(Q&5PZ6Fx}d^qKc@yg260Fq<-{?f9IQB4YQo;B36_U|@; z*9XTRjBjwyw$QVkG#KaW18y&H5^XA+kBxZgy0Wyk9?{0tJuj~AlU4qxdtBK=ScUiJ zy3gnYVCF9v9%}#JGQ7CQX(0xd-A_8@!-`>j_XpS)$V&_PX{E9L9`uvJw*_|{u*#ms zi1^Q9rX-kk9*|+Q+p*3_IL+`M82;ZAd)hCs;}%!Q&<)bMS+(0-%Z{Z!8=S|tj8;5{vm66`cHW;=#Rjc z#(H`-#%Y$w%S&4aKJU_+1JeEyx&84{6$jaAo46Ga_afMid;KSp|2G^T`XlOx+X+9B z{CN=efGYXXaq)PR#eW{1EF{bSZ= zZ4)TG{WLp7w|{Bv?{xNe3jC`dv`;DpYNh-T$fEf9i&QG5K*lz}Si08GH117MDZ>o{vm9sM}Gg$o_~EmNKV;9msPcN>yGh zoRQ|D&WpHknMFhHxkDW2?>ph$@6g?y@Er;tw1r#tUmC!?BMsZcS}^xV#YTT+g*#5P z9RByy4fZPO7^Fl@jCbE!>4y5Et{gjMSt73HR$P>L$i0m5^%r%i;uR0V%WDlYfZ@LC z=qS?Hj?yUt9=mI|V3m%mc(qPqLFntE{H6OrO|stF&~<;qaY@Y?;PxPa+e3W?9|7DR z1aN!A@esi6*^R)uJqU#lS!MhgU3gW`6EReu1Cf&MjZkp#onqiTTezZ>1RMEhxb@dz zG9Q=SBg2M?8gL>IGX#MdRi+m$&WvB&1=C-Zm=|$QYZhm;hzqC@5aVe>B%;p}kspIX zn4jTa0X7>_ff|bf5GD^WC;%T_Mq_KB`DhnnQuRFS@)IF4ZCMfdG`1)0tYFy>$rb|3 ze!$vyg1Dd|o2{yTPZ}lZ?_eOx&-ysnDlMBJxy^YH1lygV2s0700 zWSr?zrJDqnub0SVAFL5v&T#_C&v!4L()(EMmXd5;%YlxBG1fptmwFT5td{0-{KoK& ze)JNPc~~FcaK6jxQ5eGVZ9iU1(yeA&CY-`Z7OLmUPSgIs)(s2PU~VJ69{GdyvZ?P0OWkk z;hfJWB0P}uAp|)eKSCim=YxmI`Q*Jsmx*41Yy@AT`F)X{ZbW!YA@q2ei|(Joy`4yJ z=G$N7GJUqI9!=cbMMU%Nd3630dXr>^>*3iBH^Q?$^+>TAQ*&f|2%gpEQ&$2)`&d(u z^h7#9a!ByxJNk(C})1fmeG2h`iB3-{TIYgc#I`>@G}xx z+{?r3kH`?7<0{CBK1RLPNT0;7B36CuCZA?vNJfdqTav^4%Q+p`g;s?Z`Y>2%u+Fa_ zqHFLv_vA8i>^cL&zHc@2AT##5FO~uxp&;!`OS7j`Jr$&VZ< zDBS55Y?fJ@6KMwCI76$IHNU?Zu=dS?$S>|b0IYpQAoB000oHyru=ZImtvcf}e$GFf zeep8A^OsCN`p1d`eV4`?1pL^5!|o3;BNg@JQ7Dk`>q1b1gdYltN%)B?XkU$+qnPDZ z7)r?4heFC~UBxF#PtDiXr>f{Kdy%vd{I66NNuB9+**s z$@rZlhV^d{@f*QL{Mh(>5$BGzKK=##%N={iMx9IN^7K#Vj2|aAIz% zsPuA}s0ds6FoA?$9h~s<$L2lTK;Ba&a~%%&)vQzaYGdP`C!r!FBhdC5fwmVc;`8++ zizU$Zni^M3vC_vf-PFY?a@TLEFYqnvDJ&<7l^)?P5Tceo^%!vOOE~PEiNoHkXI&_i_m>yLp}vox*zu4L=D22vh#*kyl%U$P3DI!1 z6Je_z=~s6BDyVj(-{N(bXS0-)+98@?;X}YTwlMHs1n%BD=k|ET!aID_);ZayFG_3< z;S#>e*0_Z46%8htzSulIGzj<-6`x{Tm^NNg7@D5+Rq)x}iSbbJXC6V=q(4z{^>zEc z^x$i3Hb%#N(eEP=$Xg%rP*xXC8`H=Kkq&wYz|tO@JdpPGb2q@!UKA|td4oV_BOK`L z2GZWe3pi=dg={;|d5&kyaDV$qkZ*$F;3G`9n|%_5yPZL}J2(M;+tLt7cRL5h2%e4- z{e1Iio1nIFAsx%Teu*#vg*JZQgw8u`)-7Qz?wJ*VA(Upi%jHFyCdo(ea&Cio_lXeC zB~q<8K>AO-qMPilb?HBDN016gKcyXp^h?2{KNU;*C*|>#wn_gtPK7j(?Dhc3Zk_r( z2zr$UqTMQY^Or11ngHqNT_%{i2;N3=ANdFYugl34(jw;bhtsGdk1*b^A6*fbl)cE# zH5$js^|od9@yq3RQL3sUty^+;-SHwqY9V~KMXS85ZMK(di#1wh%^lJ%J{zYB)O2@% zXFXnnSr0-KnDywPqJ+S(2OAjnI75bb35GquR)B{+@bCi~mWo{j_aI&#M&g5ZPn3Cd zKc)8Q;>Nvw2I{!Vr;38py`b{7|6S#$n7*S^00A$2g9DU8_FboRK)4qo;#$HSvG}Ot z18}^<|#MzDUY=<1yZQ+-81 z^*JU%z_amFcjZ_#1QMQ{8D7R1Q$HlZIJF{ufpol>;wsXar%l_c7+>1l$fDkSMf{9E z<)eF(Ij(*|cLh>osKKDe0gvFjSek!=h1oU?&0H6^ei^3ulYr*`?H&Lu-v+dQPOUsM zh`s5{ilE1B(EfQjyMr(X;Qbc;%)A3~U!Ns<79cFCGvr14QoBSCF7|@5|BNYn1mkwu zr&;65e(PSmH-cfYzy)IFx`sfkD+tx|_wru+!hwG;NNl-k>kUg5^Ysf#0%9Y(bK4>$r~r|1KYdaV-? z@KF!e{*R;naURU}OL4$%f)N+yQr`}9Nk6a9hr?VcAj}mFhq=Z+gErI%T-|8V$6j~+ zpah_;JNpD|+^ZJ7-50{KJ4*C&phzKiBf~O>D9fX~R1W{MU2={&G(EdI6!^G7u>aHu z%i$WD2@vc*pDu^@q!WTtDw9*m*i2*Po_-7Frh}umr*W z+v}(m@sjGd$$ilrE4**Z!|#(8GM_taPVHzYRvX?heR0n1osw$3u!?H>-M(|zCv(`N zqb%;Ndx$I&GSP&5CsG*sV03yrU1j)I0qd~V_a5(dZZ@Eo>BHN{wE*J0zit5t?15jm z0K6i8{C}$a=Rfwqt78iASW7}tc3a-FKJa2N>Jp#v2`u3kkgwz+Pb4eMMflB%u=Skq zMVmgl6AI*X1-57`)29?#f|?_^%q zsK;d#xmxvMc(#d;J2K+wv8o8OmMtkT*%!JD++8AZ%w%5z2=PW}V?w-v%dDtW z>|mc;rULpnkoA{O9hlkr5+XB4kl?2-zepOcoR#J)a z1NQe9-xA)7cxeFr+T;a8Z~coV|IerWZk14Gh#tS1NgH3^PDYvuFDV8rNZb ze=|^l81mr*H18}X}`QLi_RZ7dWrzh zfe^sOW6ZyGf7Q53DZ1-`yvamAj2J6pwcmA3xq@*o;u=>LOBctq(ok&CwjjBE*-ghyd01=kETBq5AnfO)%AmXAF@umSDICL-qMEPB)m z93eVajcAvsMF1pt5=Mf(9*i&&1bnX~hKIWfMuJ{Dkf2-*NcYZ&{}}MQ0Qdkr-*@Z| zu}Al-!Y`(5*4-sprE2^_il83|h9*E*_BXxF{+2X!F;b+nkMH?=p2HrmW`|ZR8=qN5 z-C|s0&oJM|xnDGWT*@v<@(wYJRq@e1YQWcz9%D}@#`yYbEX)jHLd@K8>+BbRtq;rn zA7KN?=sXv|f(cjy=ms!=4#QXw*!pxU&{W-1fc;g4eeRx2fn9_mWhw9b z_BxJ$9!&c>1tTN)L$MSb!+kFhs+}zsznR~!Y+2<$Zs$)t{XzBYInw<0nC%^SSc?!l zQ8KRbrWWb)oCvSDS;&O14lR-7cCXDGotNBz){q+lx(4)uOW0%+MX&8{;~-1rjU<$t zkz+DLn}?a9IjPJM;<*Pvz)#r|neYG(_|?IKJz@utFy9-22Ya^p-Y7#72>AU=%8z6G z6Y!ctFy;5fQGUMLuW4Dr`Xh3U(Ftv@>)D-Uig}%7sD+(HMi)gGH&q!dqHBwf?@@!J zeZ@?#iT0}HO5NZ|8j#T7`wT+8O7KkQ+8Yiy+V>ed(#iFm{p0pXXE2jCKmh9SWFPHl z?6a{000Eqa)Xxry1i+(xq3a};Vgc6DB@nk2vQBDJIEZ$%=RU16_a$%Inl@(^fwcEC zj{~&B%_B_IMN0|^;S+$pQEYkHVuVbJhx$9!P))0mCJq9$;UK`1>iD z!65KY06?qP;X9%o#pa~hOy*lvaLgBd;tC2W&LWukzDI^bD+oyc?`}>*80r6Ffw&To z{y7#|sn|>eCFPj0(*HIRc(QjdM*7D;M~q*!&pT!?49!-k1gu74Sqgm642ig)U(tVF z@z=u3yU|tBLK66>hCKurNHA00d-Kh`FVauDcd0hPrXS#ceNDG+n!~1FBW(H|0jZub zpm`E!KhRzEJAn)JA7tRSTmYaG589;pE%$T2BCTNooK#Kj#cW|hA)b55ghydy{)Y6Z zNU`)$k+}n+a*iP1&vn{WuhoiG5|i%-@&3*q@&3openAD$?_mKJ6?}Rg=|D_r?{=ez-Jc#M(q8K<*Zf8+-AFQsBa$K7UWv;tpxUP2;p zd(nfYF2)hD>xs7;OyjS965R%ZrTg0#{9*C`_Jzwn8gdN|4*=@};yK10D8i1N@)(=hFoLH%u7fEL=vW)L^&$Fg9`uSc1L!cC>lIiNa2p>sMRHs7N(%1z zu@@SqE@tBP0)?od5|$G#QHln@Vo2U?Ihi+mkg}n|%cG?-`3Kv8X#B>&c@POuWJ zgjIsuAR>RP5)AdWkad9A*YP9}`?|ddxGC@G^rX)5T#AdBndiHC+Qz5dH%=HOL}MiiIlCda{HrPsVg`JChl&>b`?_Q46gtY!svSn5+V|k2 zcwXfH&_G$)7}0F+l&y} zK?!$o0|oEai^B{}d41Gl{r2{x(QgZGctkT$bae|+DLuAJDtSi?zhJBkbU898%e$UtBMc!Lzcd7@V!`tu4ze=aVRgNt5n!qFcdY$YO9 z%lj@K+>ZWSWW+^(`aYh&&SsmY)xx+^oERVF8TZO*wJiQZVx$q#@|{+R*8WJPc<&+J>pWz@_PF z>M=O&zr7P8ySlY;JAuWj%wO*W$ooGWW49u~~;y6c?CcO zPzA{!)%wHN0%36|&f+I+W*XEfHu(c50l1Q=2fs`{T@$)e4PD#^X1zk-TR$j4)Vn$Y z4M)9^AnI+0AOcZuUu@Ky5ggC)Yp(yP8_fQ;1^uZTKtH#G9o>M>HwA76jwjLRB&hv52_IKsMzcG%HU36&@muGzVd~-0s|%Sy*wIf%Isit;QLc4 zA*!JagJm|s40u30G;ZJfYSirw2XSHFy$5oAy_yViwl{3N(wX}<rfw~+F9oh zk?_1baaazi^I8Mbh&+nkgjH(W74{++1{VTA@bvd19`d*wk8`Wgvm&HDCxp?_*>})D zE~ICZ#>$0+LIW7N&`ben1CAvD^iC&D5Jj`K2)q6e*cHA5i-lc?n{%*O2v2{$d4La# zg<V0H|>Dj*!rxnubC3QM-P!7brk2KXE1wbsmpLUV`S{>o`x1SN^=8F%25`kGerRhiVOt?ig_RkY39=MAMaa3X-=hIc705fIdbO$6v| zT!2*xeVi&G_d}I{)M$3KtolxqkoE}FfN>AJo?Xh@(vZ&*_Bt@+%xEfn*#k8m2}O=~ z{AC-5VC1@s_2CeS7oOo@=P{o*ICUIoL#rq$wX0#?eDJCp*q%bc_W;3yLHld?9w0ez z4-f-<575sf0m57a^ao3D1or?9#bo@!5=3B@0C$Al7jPsYH9URc>{!VfUE}(tWsXn~ z3Q)h%Qd$xoc#i_SbCo8xFfMT2gDQLhP~mv+@lsXiI$N>D&&9UqQ{fAMz$*8Z#qN0p z4B?Cn2;&HIu2U#(UjU>$hK8p-dx2>9fWESYTMJBkCYe>EVh_*)(Qtdwo7Wxc&$Y4F zNi_(6XA!{{=OOjwh~lK;q?B#;C=ItNEZn0c93kx|3@!m;ggK!<8@L4MRtT8BSKU%U zQ%HJBPxeL1P{{;Ny?!85TP z|Ev@IEE6cPxeLnWt$wvcQi|=bQK$-6L08=(@C&HqzW(xg2Z1V1;#KopMm8DcSX0kL6Rhn8)Uq*Uwyg#jb%Y?xG($&=6|mg3mWSq zUb-<*+CKzDfXglm%>Pp0FBzm@g5Yc>#&noBt)T55HM?m}Kq)7ppl~Ayjn$;Kv7k=E zKg2;QcrN|g`{C9P{g8#%vP;z#7(0LT{@JvCTW8yRaP5prTYMY~28Ts2uM$KRE_95o z(FO5H?&on1Y-|YkoW7WVcT30YAvMk_%xK41g-LS%U=>2Y357iRPV^f}_y;xUuS7J_ zvTSWtj0{aq)E>PXbu8g@JPZdTkK8ufB~JlJI#3FufKnLshf?@zhf;{Hjen7j9R-4N zo~Pqxfr@VAj^9!FFI#}6d9z~V?7)Nt6UYW##t}r|R$j6fj)o&Zycd6Xg+1W^FUJIw zh$!=8_a%{ose#lOL5LeOBV+SEY_}tVq4%`kV|>5BbAN1zeBG1BKvtA3s__vfn@dFR zaS_}Ffdz+abU-E8KdLaqq!orj#(cy_xm7!;VbI|;-ru9cTPxTW0O76z{G|o_);`*H z4S{KhvFMf8z3Uj7T0=q-*q4My2R0Zdw=8a-&BEW-ivBO^|DW^$xc+k%K2JId?$%D1 z7S`c0qq35#=1?Cg+WjzY+rr~u=wsqwSo_G3R1$d9>}Hls<%AV56LI%{e8vfc?Rg$# zJIUccbHhpp5btS5fUdvo+;01nmi%BM;5=~6Y~F#1fXBM7K42mMjY}nc#HEswjUk$# zw$<@z5;idH>6b%G)DwG@pAI-fKZS&FVF9huuWklN{F0p=2NM*C8kTK;xOe@3;1okY zCxm{x=s)WMB_JqJ`9Ys;@`GX<<$By@Yi}}9Rt~*`idd)E_rIBj&@Zmx{Hxz3!u&x* zNgG`KaTF&Al{Apt_K@PGc|s)4Vn%gv@mB)Y0A3$$P)iLaa8~EYnxPzd2wq(2V zqvVJ0r~z~0UyFm7$iNPJ0K)kLBjMtif1wcr^mlvy(e?p=A>yf94nNiXy)CL1b-({f zKnVJMN^Dl!_jlg$*ar5}kK5}cE8>6?LI#&NTwKiVt2c72zfHc2pA{9N6Pox<&gfr< z1t6AQ_yPb`Iqr(ZcH8-1^ufQE2TSOzm*EB+C4V6nUIq-}0D|PUIq><1Iq+98g<2@J z(0jcMMO563HsK>c0hb(W3}M8<9csXC-yu(+3lAFaK`6S2km9$v;}gXlWu+7vy|)2u zA&W0)7!HCeW?^~$+;qlD?c`HbePrI!U9E0g=46-K&z^?9jvz4Ga9 zMx(QY`=78`EO*O)8y)n4zQYB@AqO4fu@*gX_o%&U2l z9z?{k-FR;1C#F^B-=f9LI~z{iu;QdHCC~sq z6+D%#|JOLD!pY)&G)%JcJle`noJQ*Xt!2^v&&cFNf4@9@NKR;YhV=~fH_R_z1IDxJ3q>6e}y`iw;y|p_0 zR}A&x66UDKCiVDPCheAjJfA;)6jsDNulz3kKmSCeToLPP=RgL5jp_vEXG-$q@6QtC zQ60^VgV9 zE8?7>j8%#CcwwZTkh$NP{K+SKX|7%Q9LGl2s~hU!pxzTo!cY?1mboB?uBl$WCMO_A zw#qlO{vrG^afKFnCp8pc66kJk!Zf&d--FBg_E8gAJtmdNlmd7St~Y;UE`ZmdMt7dl zKv!|}-M)R~cyba<-B)V^YfLIf#99>Xd!RsbyrNoT?l^Xqee}Mob%bCE_C4@8DAD7H zvatsx&@)tlccqq4e^)4({)?0L#{zEj2Z25drT*FboJv6vLGbOzKCgAvl`QUd$!cXst z3fg{In*tqF`z|o^N?cgg)H$S1f$G`s#((yEwYp9z7egerljre{H_ib^EesZ_&VZnHS|8JF{cEzg!vrCM({axTD#>Xr0Aj+Nv~$Jt(^-ve>0X!QbH`3 zHG&N6F$vY>Gxqs|L>)aQeBeR7_kIi}%O$7XC*YaEd(glC8Xr593|8`EPJkEVj6S-s z^FToObv*I8vtd_AKlHE_YN-5JM#5Lj^(_+Sc%bbNg0^ETC;{3ISWvjlj`V1sp?tQY zcNF`|Xx70iW78@>e9|_+Z1RyWye}F$ZjjA{OojdVSHbW9$ImJbGpotT6j)k)!>})j z(8=E2D6%0Cepzxg@zLTs9~kBs<_bxQn0zum{_;UPKPUHEMk!s_v4P@&9w+*tg5lB% zPOxJ)>4pw{pq{5~Ddo)8R+f`!Ea{Bsfv_)pK8(!yMRnYJD|<9uOAi~}jPz_>APe(h z3Dp3%7&9ZLeW6nvjwOHkxUrBD>rbso1DEZc!oT(?kS*?fV;N@3<}BV;X_#89nP~ll zT}0F82PJ61PrEkFfqC;#P8j^^heZ3cF7@x~9Wr?p4PFQo)tm68z3t-OjWYh!zx z=V6+wtNVO$I~DqMtClqyI2w+4}`tk?g2duD{ptTGcN ztFkFcLdYH=dnW@6G@IJm_@J>74KRj^F?FDm?dikNdu_ z>wVpyo*wVOJAXV82!C9IQN8Ax1y?r=P~Gs>sgNnD%+R@c3l>n07)O7Bf%X5| zOSLHIp#0#;c3TN!-|DFo`#EnOyzYyV!K%=3^il;+Fq7Zid%1G+Go{s6&$b0&r`;8g z7lIlej61dLy6Idor0Ev}BjPcFBE`O8#l-t##WFv^o08T$o6SYl3B6*U`ify|u)_ZU z^=g~P$DUVIov+lJUs1Kc>T7D;HMS^-R@dKF$YJZJQT7~JFCfRuuj$xnN^aRGpEIaw zDCHjsk2tAjx^W6Wzb^8+Y=LdVm{m&Y?T0>nk_=e+bvu&0{dpTTW(ChF=M#C$(-fD^ zgi%_&s+0o_7KVXVY|!1}#<$=Ob;4Wy-H2T^R=)fjhW z-}fflrkqFCc}Xqa^_XAo&%@)gnT5(UrC zX?e+4us4U-FB$V&my=Bp*?FALa%1eavkZzFt&5XU#)y5fab> z9K!4GdZB-?rktJUY!$}br}B}!yHqciF5%~=JD#>!5KZ(dH)kO7>f711s&6!*h3)@i zhkYL>CVuh<{p3)n8aQ-5;oIj+c45qFCZc9!{p2+%mVSvdq6MyB3G!#j`w*euH1|?} zH+r4r_qjMk-}zm#Qa8cYWgWm3tk~`rW4-ZFXX1n#`Y6u! zOP$K#GAYm}5+6}ADTw9-Tg!@_|A0?)mt+nnzk40ihLh5QpH~PRV(XO!nK-+zy{_IB z=8=L1#eo%RrZm2N?2p6b3WA_(9#%yS1o^4$HZ1*8c=qyCU|SqcO5x>8>%tBBT!@V{ zY`3as@F`Dgx8m0W$;%U2OwO}y!Dl3knh}wk^UeM5zUub;kEt!9#Xt1H&YXw8I#Bqk zcM0I<=hMlHjqnm-m(Q8I73g=QAfkTOiLBL@+kH~4!S~8f)AjVna;Dxq152Nkg07l zkiDgUrjd0pJ;`{mda#>EP?<6LaX@gXMtjWmljZ39NmpX%AScOQTB~4)b8Aw2eY{Ms zi#l6!_oVT5#@5+=eBQmuuTLPK2)C~kOE(gyOAP`x`MXzRSFY`=T5gx_cF|s0%BNL6 zD41<3-P@lOJ}|e0ikBxJq&$y}ol|nt!Ba}V9Fe*^oV(UkdN8&T>$r6=u)hO2ZPD)Y zPk8KY95mh8{Mv~9r0I0p?w6JKHrTbzbqns5T*7Rnvj@{Eb+fxOuU$8vCy%b$uVr1{ zYm5!Zez$ZlibF@Xx<>`#4rW_-V`X<6yq#UOv)~j!ppaj+12LKe5a?x8K|5m$2L^%- z$!vklOAo#G1ng^BWLJ9zooF1zKb+ZpClr|y!ejY)N#g*!=F!1g$iZe?8LIHUDG}kU zl+Z~REnWJu$x}?kE?OTB<|cW9Ub%hV6dHpX^p|clT8-BbSKK*^Z9cxC$NN~g?VZ*B z7Das{LFVQwp%Q4+kQ24?)FULeLQ%dyL|D1+DGlUoaKu->hCIzw~Dr1 zqTTXin(?uh0%OeAk^}kZ&WgmgWxrdFv#A-q=_+QD;l)#sCd~3oGJ@*q!ln(k29-}s#BFiY-;0D!E=H!8OvI+|xYTzAPV5MB;zgu?>LErh zoh}`mwp}UeTV1EGFxwV1*%mZ{{|s1eSC~7glW<4wKaSYPLi|~b_+;GHuKE6Kl3H8B z^{Z#%xFJE67=F!UX$5MMcYj(YJ1q0G+o>MDyf0ns8INJr2EjScH63KH&r7zU9tPyrF%QVZpG*K z3YJ$OrsBz{s##@f>*wovXF24x9V+kc#6m%OQ1-Uv?3tAEg9TyXlR7UB_L~lN^M&`f zHfW_+iWy~TNFe5ux#(3PO(6oKqp~a{!nV^cPvbZJW-fju?jn{ZDP4ar`0CDX^h{2Q z^hxZ{xtP7B$@R418uOiYrDYYAX_kj&)MIED?&@=)5(CE6A>*zr;1-aZk&?DjBZgEz~ndJ zj>Bk}G9Li{1e{cVk4w!xiUYjXmfJ|~4{W5}e?aPKuxfqxVnRs3YYJD5+=HH&mi$i? zw=a}V7(Ns?vSfPAb+uL0aFspAlbVZC&eH%|g>5Zx7oOlvsM-la7+bgs)iq4*Ze23u zG?JiIMhB6xM6}d^1)HOAU5IR1U3PYp$mhHD!=qKj*h!{e z7~7kQgn+dhZW6*C$4Q1b;M;vQ62XgT39;oW#2b&I*n4?7f%cif!~L+pY;x{|IR(zj z>n(xnGG%cuR3E5eAWeS8U3%HW72(RUXz-dpf&XDY#ckWySI8Ttgm|1K6r$~(vp$V( zF{2~qia0l6z}*pXDPaYZGpZ_%!ko4kqT}#4$gykoc=@`K9=mtdo`Woef;%DM6#GMo z8&{_SF*-k7JzVqe&pCNR9~eAz(hoGb{i)Dg^W3Y@)R&64Vq79=h>wse6<3O&>-h7!rj)oo@DznJB)8seToqh8y4}IEl)R$n_oq>zt#15syV;Kj7H1T^+ z^W=AJDBrDE?vye@HdRWes@CS9(SZr+GP0{akD_>AYAp3s_I$XI%zx^OpL%s}%J>+~6^O^w?NM(;q!B-!fv!ZeI)E|h z?{U{WV!H=FeNiJhC?Nu`N1U){xh<$Gt|?@ z68odu+A@YXLW`W?3rOYT?I0q8#m+3g6V`k0{Fc(3(Qj;@BA*_ZmM&9v3DnNwbmO(o zn`LvD(P~lOAbEJf1@*=@-eEtVOW;uEVLz3_%wY3jKjw{X>cf6}&<`CM;0FT`1~~fj zlX}m(s$uwPSL9UyFH`7&bya%1DSp}d0~=S*k@Xj9gHWS)DD7-0OML{R8%YASKEFME zsk#ZIV>>kS_O#v1=tiNd=_T&gCDZP~2I6O_OQFBB zaP{vk>~>{7Yun_Roqm{fZxuyiA{3Ep>WODbRc^ydjfx! zEN*FntwGVPyALS>XlpJ~kg>GpFg0ZIdlg|`SA0j2jzSglj9 zo4S0!^9+vbi8k?1_Hu5|_bW#;qCHzPi73Om_C+1%$iuqkMIEa!C(<6sQD%yIE_VvE zSW<&;f-IJsamDudQsVSRa?s!o=0u5}++Y#r1T}S7EG7db*>0FnJkb}{MbLU1k(yn6dRno zH!#sh!=7;i8x;(&4F@?9nfUKhaUxMRPcg1cJd}Q89h8nofb)eFQlzFPd8{DQN|($% zGA~+o@ zY>H)jS8u1ZN!wL%YQJW}!TSJyFb*CaEEsqn7%c2%%@pG3cLY7W5$6Y*3PzF-UCp-gyb^@V7Xv`+#7HHNPcdc)2qNM+ojiV#tu^Cgg^{MHYHupp zWG?iQr+BQsflJu{OAS(ltiA(l0-A^i`N|?DVyjTjHGll>vOxW+6t`301V=kKhPh;Ko$E83*k8+rIrhX1`*wvbZbNCe- zKu2`&08Zj>uzUqh;%}gg$lof>*m$P=zBmUs!(w9dz$-_Rml*JB*tySq?a% zleu!!^U&JwQH-9l_@Z|aU{ve}GvL6B1CqPq{XW4H#k%e$PI+r$d}1G7AAv_+U;rDtxdH zxbR64A`a3&rUU2?eDL4W!QGLesF-lk(XLFxt=fN3yrExK@4rXGl5;eI(=v2mPD>!W zc{f&85xSOa>_+J0+w5nFF4Uxm5Pu63mIqH z;2)k`vjI;OWvCJP)V_3KiKK|92SC-o3%CSNBBe&o-)tg1e;^OaXr@i@P0!~KRJ=>u zeK67AMm+~aM`xl_yb!dNV>|k?FaWrFpFaHITeU4LR^-yzez^?2;sq#{+=3YzPDzrb6 zG3Rk$z<>GfNNH5cB1CzD;-DVL{E!s42tmtwWcOI%lHJYtfhJ-Z`EOj1VoZnG@eVhdcc+=kOCH2Uc2&C5oXIEn z2o2+*EzsHFW;r`t%+0uVrMLBw6H8`~ytvaBR@JVnNIlB0<;EGV3^Rs2)b8&g+Qr%k-65x!L4p-dV#Pw?XVh<%*z z&?6eR8mCR_nGyT9zC%xFP^JmL_^4c}w4o2fiI;Xjb(q6g?8O_)WrDm{7tp`cRhsg- zcUd513|!O#DH70Ynd*uVJi#P!6f3(y;v$jdOX4hrtW|_uY**osc9UMv%OTAVSrF}q z8ShoX(Of2sRl?z1s?Vl;fn5TZnBFLM?|7`bXL(o69q|z@=r;79u<<=>cBzGe8 zFy?s>EwH3l+?g1KthYq+(fEIOuXLZYU$fk7HC8D|MMkuEu}CMw6kl z(A6Ohh>&ac(q$sN^ysl4y7YN1u@NHwaFI+jT}IM#S(4c3QZ&p#x^E^`DXTNmn!kB} z&*Lj=`*fwkYUr9$;+|ukkM*PUuj?%oc}+fKP7X0eI=k=L_yR=MdlohM3sxN=EZ?P+ zR*!Xy(?c&x(69H#`r43_P1SW%JMtDcSFC)-A5+$(D4CqSNI2FyIZa)iA%)v(BI=^O zPD)}7#eCDzh-1^UAMaTdBWQXi6sT>hzZ#RRa4qmwY>gXv={a_z8RjL|9(6eo$%)4x zlE8r{h84Ji0wLhHYIQtsac+cyX*oGuW5{%O-{-`YU{-DDTZ%qepWLFaMlZZ%cOwSx z!s?=cdgbO_Wr>9={P~q2x?B0m}7N2+O9(mu{MI%d6CXfvYk%T?-RDBDb>_A~M#L+(_3 zP$A=&P_b>yf#NcD(Fh`&gU?i0gQByfx*MS{&KpUI)OzH>1DsfHk)8mDxA?xO0*VxA z4!fui0GR5BdykO?$A@~j8HdFqj|P_JQUL63b@ATD-t12@$G(&pN>g{i!UsTczu~q5 zicq1ky2l9shvlM3dJJea6mo0}bCwnU3GxHbB@M0ya^jj%}79Y${&{HcuoU z+qCw9K}n6$LwL(ag~LmpJ`B4mobEQ(Fpv4IQ2JwH(Y+O#gti!QXbEencNh%8{=q8{ zf>@{qi0(_mtYU8UtI@{>0mmR#>9gr!umIzp>K@#T?p;R<^0*5lAI(?_DdQ+b!VEkM z?A9Q4B4yU`0^*B+5u4k1jn)K%5+s_b4-= z(4#3oblLNEV)4ZOQ6j@=qfDf{S#Pn?Z?hPn&=Ws?sq(pUl#zrZ-Uu7*7M+rAJW)WH zT->;I>suNB{5i->F~0=6`prG(7KJCgIXXAa>0Q4EQ^n(aw3`zKC%*_$eKN&-QQc>! zg4cIsNWsYK&83|lz7Rh$O8202cL$EiQ#@4aYy zt2xc-Rx^7x<73L9!hE!We-Ft2A&#N{6_Ec!978ZU{4ap~AL1B7u+IMg$p0aZp$MY? z4Uqps9D~oF{oeq&|E+~Hap0}8_1DQq81erMS5E{$8_tBf^15{4a|GqjW&RE-&|!`J z8OCvGq?L#=d`Jg})qN?P?p@&EimJMY3T~!3zca3XPCOpJJVnvjW3m91zp0m~QmuK= zb9Cp!Kji@kp$7mF{NRDld2_SuEUiAgvy%F=!2(oTQ}lyG3_vRgncgBaMb0xf1Pb97 zp|!G$Zh$L+&iC-R9WQoK;pcN{g7(hZp+&Ked(8*bJ>2&7>iZ_~(1l#shDvPd?-@^C zKR-7G$uE64b?_~13Msbu`Gvtk!e+j$67?4-+Zg=?hny}v^$k%(LU%9+MHcaO^9hT7 zU4|KPBZ%Za#2r<~r|9B9ejYR?u_Dv<9+ju9v<5;{r!S>>#!{arc@aetT9tFN<^u9@ z+0r6{XtCv}41^60z~z3oJ~9c-#p$SeO?2@gZ0^H0hmURIH6m=51Dl4I4-2oHn;%!@ z=pRHsOCFlB*l}fqjw>T{TpIb_0)6ZUYmj9xj}Vs4KwSdX^)QrTUIeiLX?$3?|5ye8 zn^Fu{Lg=?rSj?NpD0vda20i>-rZh4m4vXw#5Dww72iiXr`wG18fHr=qE?#*KGoTsL z^WtSW0x>`JcN7EttyuVdt^PB_&2ELBLAxe@K2+D51Sdg`1l@y$P&|v!|GFHDyVw#j zR;N1@o)q|e`jbeD*5UdZL3c`y>PWy$$n zmtv7yzHF?>T-9f%_0J)lV?Va}=|6!DbO`C*?VEpF+J8v%UjXkPaDuyeAAAY;MP-Nn zzO=tl_n^5wZ&cCFE*gTZ?$NI)NZ_p8B%tAL4C<`&>w%XR()#}w7T|%eiDr>LP*ns2Zzd$_TdUbDSm;S;b5FFBN`kni#gkm0~41lzPawuxZ~t8ncRV3X^I3a_NlwI+D< z5bM79c?#W+gi_veOe8@6(jV(z;Xlexs&;S*hXw9$g8L738v6e&xPM=#37|hn`VovZ z!cm^AUr1uFucB5&9@&JEKHUOn4(1OLSB(GqMgY-kQT-9+2pT%WN-CLk8OQq$i$97e z$>Vqxtg16CBqH&f*j}=9PP%2p0nu_(UT2sIFFz{q^S*uFL`;;}|CPuWv@=Yk7qc9& zy>GFop_CCley;Mi61+i=#W9Ne{j*VXeyWZtP~fi19tmOS)FZ*;5*K-$ZpUmhomzv^ zvQG!-;p+c8J^TaD(El3H{}Rtyk%#wYt(1JUl3u9D$&E4&{QES!X#P;;C7k~P%Ks6P z|A$cikB|)g@1Xo2AsIU64nP$D?%nwhP(DO*>%ma}7I%&9X?3>@*^$SpfrG(#+@hDX zzKVU=Eyp*Nppnw6`ig<<9l_sWB zBW>Roa=h(IjYZ>$lOzBF<*inV8_|9GM@|jfH|0?MR|z{zJ%zD9gi7LMi5w*LY5xln6J1pyQoJ7qm6 zW|&3sSX#vuGw}8qzKEf$MXWuG!yuWaf8SLNB0zfdBn&Un?DX{t z7Ru{obU4*=yj~wplHkP|?V?pMlMD6?*H+7LKYaa!_(asb{`(b7R6H$le$~}n~9SMkFWBD}DP%RSxE;|FGw=WFzZ`+Cfst`hNXm&pWu<$aWf zCp=2M8;jQQCBPT8h}Xq;?&Y>{AFEpC*C1CdJNC;*1IbmX+$#Aug|Xj1VV%r&BT~${ zcL&$yZwI*VnL&nK9%pqDXlKFar##6Wxl!zS@GOqF77gC4{@* zJ)t;jS`p%adB7~nb7{f_teHRQ`4#cl7n-=iUO{e|3TL?_I(=xD@b_gsOzzihfqgs0 zeh(y*J1p5fg~`uzN$6_3Y@sm=CtkBE!;RNMq>J&fmZBs``|^x*INk9X=fXPnX#AV4PLE!Q$1>JJvmWntYUp`2xzJ0G zF<4U={YdGO1NDgNaEuesue0)thn?~l$HkGyXra^3ecg;Q9%d~qrW!Au6UU-I`S^p_ zMI%wsIy%b4R8lnXezZ%$H(A)cyh%ykm<6z~ecNGYk)*ih8P>6~b!=5L4p?;#W?@U3 zVTX=-+m?=c{f%95{pIZ*v9KBR9Z$`kKJHX?1fA_eNIBQfZ+XK1ro4o#~=EwAh<5O+^Mt z7wq-!8`gB<^Wv_4s=d*S&zszW&pY>OCqW%;bg&EGW+NzrIx1dA-+tDcpJ><^&)XBV z9>rGzSzq_8`_p*+M=LeqJqnQnIy4q>OZ`6OcLt|iv|kNi#XaUrJo7bXXf~L|8a0Ud zGD+~V1oK`U$ql6I#q_K?>kNkWi~dwbkU)LBRT$sZ73FVNP*_Isrm?dPuNIBn?-v<+ zhwq(G+%jEyspq7~NlQt^mx2R5)KAASD4XnAPEQ1xAk_sTjOmv}taOJr5n9&MnDaF{ zu;aWI?bIsYJZF06^fRmVr*gc`>?S=<^B5Ev*G0J{d)Uae^x6Hv?rNQ^OU;E?^dbh8 zNW=BSpG8)Oc~hQGJP+PVEKk}%A=#qZG%pKNB?K@@SB63yZR1%b43|C0Hc0@H*YRYY@G?aO@k-S^QXAOw?3Pxyx7c zn!U-d>k*2ybbBb-8D=jXX#%} z=YD1|G>NQ}9BN!Cs^<0q`_2jWy_G!g5C!CU$t~o0)Q|4j28i_UP>RogiiT4zu|G~( z&QGO<98Hcpk8Z#bHeWY%Y+kDJ$o#wj$hai#^Kr*-e)-@IyE3=~`h7%*9_jMGm~y7# z7af{so!HtgFo=C|T1yX9lZ%0!|GUqY+SaX}+&uVEVZzdrZ zd)ZN-o3K?OC8>4M!k85$QIX_-J0g=vt#Q72 zhly4c;xD)yWM_3Uc6XAnXB^rp#OR;1T%n*;ntBpor4essb?+p;`uN!Z7~RBC!$t$A z8n%8#bIoVTSS{hz{vF5p(tMP3gt7j6exqVQ9zJ3>=x2J1zri6t2yf&cxXp|mXO8)^ z=^aA64-y+ESrEkLlgIQ`D?m&gdr^%9l$REEv^q5sPzB;Ou{+hmIB#3B;a0Kwaq7oo z;IiWK^!tT*lOc|_9H~~6gsQ_yz-3sfs$ZaiCKvrjg4lnVu5rbtqX^6-WJ)nuFvYxU z=;SKP6VNM;*Y#s_gj2?4yjeR24w$0bZRKUTs>y;C1gG0MV~VZtTv>5UML#A28V|5a)`;7!rN6v0fO<8bAV+8xAG__KL1oW{>g;KBU5n`CqXP9El&U$wUJU@(+h2O%TI zG8vyZ4JenpWSSC{Xr!PT30^+8XWSV0{tn_1gJwaGXg*>&CRl~?jbwt)zl{Wx&R>Qd z+^P8l%lD5I2p~HeR{1kzQ;rauA(Oya>~DJFidQP<_elYPN5&sx`#Lxe3>o0ld*F0WMDQ+zV>Hbu3bXLsD z2J^SD&QvU)-BfscqTV&)QbkF|$%lK&!YB1+F^LUro#?WdVjRV0ivz_gvFux>@dxxQqB|(yo z+1}nT!QAbS_<$goYsH~&0m1lLst!hA~wgc5o+mX>7^=!T9SGxSR3zq;qXv5?ml-62E|_7 zseJYozM#vKWejj6A8uzz+d*gmqC}?*WbJt+F+ZDSa9Wm*z)0J{i+oz7KyXyf#9SDv^oz2C+%T(dW3N* zTh`-NIr?!r0#2$0ob+zoI~ziG9{Q&D1=o=IDOuyy$y7!kqFFz03?9(=0zZ}PW zvAoQ?ysYK=W#=aZ7f@Izv}LT~5^R+diN<_UfIhtAt>SndAvXEd2{8JW1DAZxF>y>D z38^bbLQ1nyT%Y*G3QVox(odsmK#hD$7|A}_LJX19TLN*#6jk!Ykyr%VlKFBoSkKm? ztSE$hnpPS|$fxm@9vd3LM~4fi_%B)?+-l@9m@|)$zs$|a#0|DL9^T$&t55e9!0&C3 zAKASoRK^cxdHNF_WOB1%{)VLP{ZVhl$@N40w~XQpIa`r2%3F|q{Hy$%>D*r6ZC6xs$cS}z5U`HHW5LNUR+sbM9in8j}!$o~~D!|2IRr}Q}jBAE-Ut{La^Y8A8jBUXbcLz`8 z)e-{m=fB3RG-s0^$}Vpt{a%Fe;(NDU%<2unjUyZBf}|+-7s`PJ`qhZVC z0WXU~i)NO^=Am!(xU<$GO}bv5xZa)#0aiF?X|>SgE`0(D@y1NLBx5xJI-D|2*0Kr$ zF!p&gClHsvyV4qsh|3@QO&c0;_k-do%?hJ@>y9{!{T0I@XVLSjHzpWziVd=y9>0Cr z`^gHEJJBG}OfdD?>s>)y`dZVzATE8ili3pj#|!uNU$uru8Gh~U6RWUs(Y5J%2{nTa z_5zmyMX`!{1Q%oBU65tvE(QSjSj53SzCW4m1!I-^9^Gl`ds9yX&v0YK8M%wj2>b-g zqh_$^ja=$5;*Vsk6%2T=q7#9!LmOPhl z8o`$rhS>&E$|=>rP(BQ@Z)hwLPc zE<5MJ>7m8z^t6+aQO@tF?%O1|e~~MgJX7(VtSqy%wdp&ufkHB-e4u%>&glk9Ei-Oz zLhiee51|21LATLoVKSIge6*^*%gFDv&~C- zNeIE0z-bN!MxfE;BhwfV8m+Rk{Uk!8^?ED9cR>B@>xetx-L42CghWFt%5;}I9a|7K zF@_?BM@mF!QlNm16?u4mu_CciP);K8&eiTDXk(4h7?D#$J8Z5#)uiAUpVnYGeOl8? zfqZN6jQi822?*^5zncAZVo0D2@f>PeIq5Q7i*90PGhbOfe^_T*UX@;ILMS5Hmx678 z=?;&#%)#?ogsgg9K0DorF^%N#NgS5?sB#7Zh^gYl`|mWhm%Z#C1eb;?^#@ z(njEMlo)s%buNCy1-=}R1MLJP#!9ec=C=36`A5y6JF!hfFf}}Me`NL0J^t3EBbAZ1 z@)bcDVSMm)^sxENVDr@`v-n3bRfqTT_s|c{82q{Ux7LU8$gI{HM(zlHxhaMUIGbL_ zvas1b>@o+p2)Lwn3^T+(0?+G?N$!`FU8xffKMwmz)aU?t2(}XXO&?}z9?FbN!6(g` zbC1zd;KPfB_wm3E2t-gW4+Y|>fK&0JNY_zM$j2E1C3ti~?_{YQD#72k{$3v*kNvq7 z`pv}8&A)2>*JAQFX_eUw;7R^7`yPv5AbfSU$_ui0C$kc$A8bIJ@n>qtccv>;H8S-9*iN-Q} z0zot#JrTMHqDd?Y4Fh+5qCi%b%h&L|_#`r*Xb}hnH4dq~IkT9U=1Y>$6DxsC)5~rQ3cGxroSRaXnnY zfRp$fB>2G`<*b1&4ktxwH*Gu;fcAdvCmb^@2aZ|vDw_gACMA0HJUe|{?WewKznVm- zA?B|!(?8Tu@}Y;Hs;rbBO`GktjD(FeLJPHaP?XXUf#tU2!xno5#lKpLT`#3*`W@3Bi# zJXp&shBy2f87Q~KaJkiT$U>A`$B`<(ac?r>@kgi6KEn*pFsmHem&&d|KF$~VW5Q>i zlM9o;4@J*a*6D$RUQ9pG<8-k*+%S+&k<b<85Q$3s}I>71L7zz6Ks&%l_O7-(CJB3daP@TMu#8@1Cs8jtaATd;gsQz)0EEoGD?RFg9?39^_D79`AQreu*H2Sia|FbMS zy24T33q=w9N$DM4_y9HjuGQpcRS5lavG|kWpG;^P{bL2`?d>zVS^4rv@q+8HUG)&; zQhcyBhB{?Q>$bbK{;i^+rU)~?`gy$}?)ay7p4(!?AKBSgHA$aU>M;wg3X(p{DeDRl zXtD3<5!fy+E#7Xje?d^YzQ0%T=7JWq)S;Xq3~eti``T~V&m^;lTsUZ&u`Er|w4=>; z*Npv{{FKLtP;`<8QAI|UOfbFuqFv?ebm+QMtJOE-JJSI>|6 zG;J6>w2#dbn4Ovzw%8(X*#0!Y#8z1E%kIoyxD%o-^jmM9>!;MYQnTKO=x(TYb#wiK zPendt+#N~X4VgF>?|%v1Ge8 zzh;;pHK zkuH{o)$o>`w4?Cx%iinCaqXnIy1-N#ivPQ`7gdD?IJsxI6Y^B-XU^!FZ1_6by}iB4 zptY1ZGe|7D)BY{){Qgb75Y&NqUQG0MrXa@lc>;Nz_GSMYaZ1Ql?NYhH60r3NNIy(u zZa>*HP)%zItNmQuOSN~MEpJc7Q{)y061^R;B)$LVIq(!WN1r?OY&4J5&`A{7I<8W} zv4p?4Ly;Ss#gmhAy|qwdH6645ATK@0)z%hT+biPR5QaWoao%zmOC~7Yo!j4@pNY(m zwS;IdxGsHbm>b+5oz7m!7#x5$=J(e2SF&qD4kkMwA+4?5-KB~P!h@j4bx+4~=UkR+ z@$y#HR{9Ns1LqAL>^6dfg5rKZhg+B%-_~pfJr^bqZ10|*Nc%8I)OX>aP+^L~tq=%#En`T$vllZTI57v2khdH2@UR|Qd&N+_mG=a|ED zGb8+K{d5?aCIcS&y`j%H40zyYT;dXTp^h=hr!t1Unp!%js=(zW2WM{gSFicXPTiGE zxfkS}b2;6qWK)+u3h<=%Nb4_Gw%+4<0zQ8zqQPvAAuFd_nhcd#!Lz{({Mu8VZh`ar zkYLZ<0I28nP}x@_y~6Gnl;HuYJ!gi>nvJvz3pVZ>ou8+`)|#*{d}*Kgo-A*cB>U2N z&Ei{l_4~ck`ufU+D)5lbHvtbZiwZBSlYQNGdlO)TS>bf2ao=WQC~acI(Q$22pwIlB z11S%U7*J1MS?t_^u+-*KpyJZrz-HtRYY9$XHE8)iTTb zu!`rJbN3t*8NZ~vN`yXbYGYxfeW4>IxO|yW*-o&^7SKV8D@?&f`?yC+p|Z{9cVAoRtoex`bb zGZy zB&9!2t;||xN}Izs(5FpH%(7uhn^EFQe(#*~-ua%ZcdDhFT8m)Bm9_o^)#M2E+t59B zW%UiVkG(={sQyh@FtBOVX-{Nez zX45bjZ6il?xToZD_1E7Ta0x{DH!RA1&t?%nW$s9}qYp1mp+*;3OP$A3yddL;{sJwOU%rcmsLd}2CE@zWygIas};YY*n zKe-sc_7=i;YHgs{lu4Fc=^+9~N+$vv#fj^q<$wx5?oD>sWQN@h%1__9sOqKG<@%EQ zYEZq9B;~8>37W@uT;cY)f}9zPid2dh1`XyaJY%h?`CM!Xy%w4qI=$A$T|GXkTpSIQ zeVHcJZ&bAnl_YEj3g;_w##+-;@Ujgwpa`B^osPg;*)ff&fhL8v1HQ&JZ!~XE88j4d zn;KQT2Uho@R4FY*N;Qbn5ZQS|Q=Pt17w6*SQU%y12PY{y6!ACndFvJ}r zCCEnGdb-(JNht9O>3XV*%y$)79`I=M&=`nkD<^lzv7J?z)KPtk#$)`bwg?Q^39vkF4 zx>&EW=-)k|{OHbbMgA;VXyOf%ag?WMH-j`po}PL41XuDY0~mHQB2j{a?q*o~7gPb%b6MfJm#Umpo!Y|h`>)C8B(c|$%q*^i&n?fR zkX?jrCc!ojt^BPK#-qVB!{LAS03G-KohgCOlYbTAznBglr2L%EpGQM~l|AOB$DgD9 z^ZY+g7x?_*-v}1^dGV1yo%u&A`KPrauv!UBlroqQe|oG$iw^GSd1JW}kG<_l%b0I5mYYyjgS3 zbH9)_oXzNBj2Fv3dMjnqj6z$j#t?U_RZ2*`PPucL&xlhPn7^~mGP6aM6Bi3Cvp9$G z?BS`kH-QMk1nUa-G1zAff%7^VeRIf@bc2hHmPkM3!>3YF++7f#--jEjV?$8f^?eZA zwVs6370YHZ2!!=|_D<(EpHbGa{XMFj;bZ#;cxtQ1_75=FcaQAP0s99>_V-IgsgOX9 zurJJep1jEL0)QB3KVz7qeL0Lx%N?)xL?|3H;Qw;sO{JR zo>?T; za`%F!@0HA)NFsBar_)hi+PUC&6LR)KE?og;;7Rs6tv6m9BDr5(x_JUgj$g=k1}TX;wqlJ#dfR0Kv@i?#LC8oZzykH> zoUsQ5gWfj-PBkHciuH^fDGqjsEDg`ne3`Snd^r9O!|Nq~J)CL%SHo-V9)5(Y>1rg(Cz@_zYLeUmH0i;`lNLTO^ zBHg7~W}Kt=#}M(;Xd~ixSTDjojAv#E5l;vr9w&hvPQSzDS=&S`PYq&u1Y`EZsuB6N zIJv;-c8(#^rD=lP*2fMLI11=Eo>G0A!}X-mhSw9AgV(bro7M>4La;s|i1l%D0qgTl zJLI5dZEe}aSBX-J$+5~9m?)ujF0>!Y5zD8!_Q!%54aC;X@<=&&dFaLy9w@jvQe zKkV^1oU;IW+>Ux0A`#Z?5IvCXJm|7H>M}p&%UyZbz@t9H;s%NPBApWIfqzwq}{uB&XlK zYB0Ciz7}8{u5<~(qBU)Uky$g*#hgvch{du3ON+UPC@+5qFtJfRN(0 z=0o;vIac%Z>$K<6_TUyZyN{%qyi;LmD9$lz;I6?4wnOk+H(IV>|Ze^GvvNTqAd!JiF;XX1UZ$eANv z8ut*~cuS9x1l1bs4Zk*(ZEM)}7VC;(ipqUcYAUPH*o!)pn|#yIoN}SJEhpPf)qc)+ zRJHG^^Lh`4mdRsx<8P`|+C}T!E2+`1HJu|IJ3H&r1seoRFX(o~7{uf{W|+!yHTBMQ z<|e-~G$)wpZTp(Nu3$R{PYd05+?n5Ziheb;w?0w>#adbl^}7_;zn8jKF}(ha1$?zr zU>)*$G{>a)skT(`-dPw-+vXm`y1V9Y-Dplb}1KuK0& zN6#^R@KZ^No3kzCx^;MY!u>uG!beLJc;P~xu)yxxh9LnKS>M6_x1Kw$d~Gg#ehbxW zkRWb9--h5VmnMy&mCvpZhE^&!`qu_9<|B73h=OPnYQ zEay{PGqljbkgG!}Kkg~Z3@s8-H)C2QJC+{mhB-VgFeWx!CCuVWo!E?m##H{#ijnuKJ~}Qq+$J zk_43kw!60YHV02=9)EPc4}a5pJeC0k*gzSWYj>jRB$rv8X9SfcGG%+59Y?;!PhNOb zdTH6UZm>R5lt2(d-+g{^MPYrgq-?eJVB~^(Cf)#)WDkX{7OzPwLk4j*Yf8>qf%7&= zlPfB@b6h1IF_VK%Nt0a0hcCzmQD4P0ee39KTAlCWiph_e{umRN=bDt?yV9@Tw5lJ^ z*Sz_0-eeNjUa;>)$CTtsa$!iK88SWQMJ1&M+l6}H^rD!x`Z~A7Ero%JL9%Qk!Ik{1 zZ?d*8oMVd!?n7>=0+BO9VOv+cPJdQ;!rSE@X+|h?D@)8gy{Lbu-<57f?@h0U z{l|^#X~~9esTzp!b>EfeKABy_d3Y~7QYuPga|GW|Z zwTXTlsah)UPCY{5WWZvmpYz;iwW+4G*Xp6TK5!r){M_)runLPkYQG;H-q5{<_71UF|{0`^) zG|lQoq;Llu7`plh2Oso)N90=#PF}gD#l8lZHzb6+R%)fpFISLq>#289%vPTYJiDX` z7@Gv{ED_T-gzR59)85_8%klvBoN1Leaj>qq_o*B_u>W}Qv8a$iwSeHhTk3tbeh>mF zbRQRvsKePCUTV#GSH+RO>hC4x;HMF=WQbjrWElNIfk!(##x^0X&_3TIv&#RpCn!To*SPOuFY;P@fViT94&_iB?*Z=K=&^0Zfe z!GPGV=Vr&-H4lf0$RCl;ITwT-YTq)Zs`^#xLdH` z9tiFPclQK$cX#dJ9vlLM;O_43?(UZ0F2TY-VC6`G4+9KV)4{fgvJ^|GlC^~B$k)~|C{mYj0W)K`^l~c?UvSeL>fj1+oyI?kk zpyu!P{W>{_{iiB_%B>kq_lFB0-G6hz_>~L6Ac8Pso&3{54!(b*{@eS%B=f{9zJ+(K zy#)fBmma#b#~)Q+v-oETozR0ek5`UuJKnN7N^ZSUr#PIhp`;_i!rxxIivA`3K3FNk~`42t|lXbG=_^;@m3ZIlG3go^FNTAX{NCUj! zm82C{MDO4X614Wq#fkF>5}(P)1WQtAo~~gro`sXY8}2Da%sS<^6M~GjYiXav#r)K? z0oD6Mv;mNcNJ59~RT^$!JHBt1?$?fhdWRk71VUduZPojz2uP?P!d^XNwcm$KpgV7& z{OY~5PcUMBdk<{zuYsLcrT`=I1!%J9hriBtUPD*V)9Tich!dAFB;t5r_$TOZmiH6a z(Q3W=>l~^$n}1aY&_X^0rtWcbygF)ZC-g1QXb5d{&GtGE!uN#>)Ac10XZn2-Ii>qm zaI?J3A@Lc4Oz`Xp50r)Pif)v^2|pt`K8Luk5wJC5Q+> zD~#i7&KulZQa~e2+@G;0Xxs`Ki;Kl>472mGz4*ou|L%&EAN^Af%`@}6*Ib)UK3x*w z!uchv8UgN@tdBQQvS(2E)u5v9JOh6Um3s6CK%(tbv?t>tKo#eR_%W>0)qUh9Nma1h z7Ge={{TI{nzw_PyGgf1w)g2+Z)vE#_RM6W~T!DUIoCi{WXDd&fEeo=D-g=JQ%#)$2 zAo`#F{&xH~0K>tb0A}O^OjlIUG|hv+^Th|V-_|6l8xMRYpzgua1a-RlfZ~#&`dAL+ zdD#cAfH(&N>6R#LNTHQJ4>Zf2aKYZaRgNmxuBZhLn zpmoYBxHgnODisDeUhfA$Ob6HRt?;URbq#>{Eco@c$rdqxn#@4+W3xWo%C8)o`cHv8 zARYcxH4Jq4-;L5`QTk7#>O1*HuA}PyG}k2#WCUWtRw;o8%1@9ED4*SM{vAS@8&C%v z5P8EohvR>k<0gcSyAEx@jDlt4up&Ep@~7rbN+kd#zDo!ANS&kh*j z_1*(aux-UTSAS?gvxs5)I6;P5GW2J$yh3fcel@431({6uqV2HT&t&mTU7sq~)QeLDNsbxY%jlysWf5et&3gHtO($s2jJ> z{0f_$>L6SBMhJQ|+rI;GoB^(@yc+o;%~*LP6)+@I2s~i;b7w$$n>&cU^ByqK;|2 zIX053dQ>ePPl{_l0)*zbX}>^&Gg=xivfEj&df!vAlj3WR+XM@8x2pY0?^<@4AL4=K zeV|izkQP3zJaWSQ>zTc7y_jFVGvTr-VClHy-t*aMOM2;%Xnx+dOdMmNAp04Xg+S6u zRot7|mCU(n1BD*+gaRZa+J z1xfBc*f$eliRm|tqd^gQ!r}YvKug=x@%8m;zwQYG;Eki_qXUhXSdvFGEHs^vJHI+k z1l;c@9S(!OceE*M@~kICDgiz9m>-stBDH%|!&&eqL(1pYkJ|^5kW6~!!!M7oM~}PT zKCcGXXRnXQV+sz(d?I$^(SX(HO9R*6!OPt}rAF0=Y9kc-F-d0qEwVxub*kSI#aCG+ zUj%0mp-!k5ZOa-*P)~zEJfvQqym|2hmN?En6pfW9tW`MlpWzR{6V`6H-<(9O?Xw+G z2pE$P?26)4UbY~SB>roSm)XllVC;f9JqqjY8@_IAQg2qlfGdpn z4)R?Yr>EmD;+K!<(b>Ze=al7U)B9c?axS)Uz^ZK%3f~teXAS(cF#x;QT_-Jq@}s1rdWpJ$T_!4JWezEE!ql=rm zM^7EP`1M%>R@L!{eB-k3RDEx+dw7T<8B$rQCkL0kzRN21g*oIL|58sdvNe@dQS`x9 zf_Y=-!>6fbV$4b?5(=JgP5#CXPZErX0+3wlqXfsN3GEP*8Q+}Hqm__+)d`XZFhS5 z5KNe>gMa+dde_x|9ijY(75};mJ0UO82`3&(-D=R4+j#NN%|!7q=x^j^0#8Yp$WT`T zsg;E7DtP8q1pW$vGmNN8!s$ehHfNstdkBS@3>G}dxIWD<$H3+^_KRJeXYIQa0$xY9 z6F246^P;A0dHG_kq22bKQ|!f@qxb%_)?+Gn5D zyz;uq6IaLXyX8#TQ=-N$MfrkNK6FoB9@TJ-o7fR(M2uYo@KCO5ZeQu6CNmo)G1EzT zFzHiqT>?}uc>oKr%Q5yyv8rSavTT=wo(ORgGP*d=J6#@>T6G9ng2YEY?`gftRR-z!KX4E72s5SOaKB9N;h&;gKPb;1ukLS4w0ag-Am0 zebJ$1^M&<3Q0bRg*$Lr*ch)Fi4Fq)#>PwJ*BMrit3^jo5$_pnUYs+|xozL>r#;VmA zqk-rTB?)w_t0gt$exc6OMPb9T0xSQ~B4tlKR2=^Wy+rLi{0&9;5l47yg#%mw>>LAn z-w-9GS!E&|Bzm!#5V|NN-DeIGiO&-T)*B9qcDWlF9FD4CUKWw+C2rpdD(o;2X~DDN zL?7~U)8_enD8pjePxUc(Vq=vBo`?y4VkF3M2sW+G(8k*wT9v+LjS$l09jNk2)3X_!zLyE&tTj<8@l5{tUW92dvHp9Ojvy7Or4D+jR*nIsyGRWs`XYpk3UZ_&g z0nY8Dy5(<)-)2giyF_Kw`7F4rjyQU>eWbwrS;8>)Eh&3jQf`({SU|A&O2HG?>=b&* z)Ay!r1(^&=qXl;sojM!sgc5w+M}Bh8jhWXS!703jrV_PCdR1be?W>ITfbZ9%rsz~I zC8h{SnYRRm-$F%@P7r{hmNR8$$7&j*l-)V` zUDP5HTHFzfnjM$co_%F(OZ%b?P`h!;aa6O}lc12M?l3qoaL_fKawMsD%CYUC1k_U~ zCCRwjr3O9)9~ph7tC|ikS<*KBOIpWVq-k`_$mlbBc>EZL_ zlh19+r~R%pxl24j0j8c5l#Z*l1nk-IpEK6gdYO&?+)iv&SL1+VJsi{nFcZ08i~9SCj|I<%ExZg!DtxC zh)Q?a1L*^2UbIy*(oagFBAfNb9lDBVPCu=nJ0+ZUx0sK4$!Kho5g}j1Zp-4_OU&GS z%k1~|{-hi2uc`+J`r=>uqUtkobaL#&1yze?LY{r4WJ~Y$0hC`s9q7W?39@ z_p!b>9%yFtrauFr7|j9s&2C1SNZhOf!PT%dU(L)~am`Pm{_fg)B*^H^aF!xsBhWW9 zoR~jb93(a*xz4pQc16o%G@#VD^JTpb1-i{5-?$k1a(=U@Hz-lO`lQqRahtVL_EoY>Nov}41WMkc-)c6NwI>m!xSX>p}vc$2&N~y|4bN| z@$JLxFtdvBQrdlE5rfJJhcK7`ry>4GhIY|Hlxo(YSZ_HBXqqAiS3__f$VFQdsFcYp zQk`R0LBD)?TU(iP*Z@Y3uc!6P{aGst-9C45cq`wRQM*nzbi_`Ch@Gm)-S?>VrCOlVco=F7Zp4+!fw&=#lPKUe!z&dyCi`R@3uy=p2FP&!)JB zGM3Fp_R{ugQ5ANYaDKvl0I$xlrw?nF8-x%FcN+pad%(!F41N^^rB^LM^|U`*sBd@d zMn%>G4KSH;<6nEsP zVqYr*9+zWZ5_B}WIreJt-cYtS8I@0^9zLshmQ}RnZ32WmY~Ot`y$RAc5scZ(QX_Mdi544xn&lm>Z@rsF zig1>?uWS|s(1@?HE*$b%rMq4k^wSG<$~4)yBy$ejVP%c^Bj($zwGE#G)-I%)O@`;* z1LlT2ha_6QTLxY*m?-@Y@mojsYd0RlPBaRdIb?atmpfeCqrY4UEd#p2hS%NT02)T zip;d$mk$0(w4ThP8}ovegh*4F05<5}(vG%`TG`FoelzqLHk!MH>Olf=MUia=n@$S)kbJ zg?qUqq4ogV=ur{2f+AbtWPdnHXu<_bv7qXXG+V*Fdz2s$yiNq;fY*Cbk*YnQl*SV( zTic&1VgNL4grSqJMOC9Mh@s=JRnQW5_*LkQCMo>&kG3PK`1+`cgjT=FGC>Tn9nds0 ze7QV5#!?wEe7PX~XV48+@yss(9a^A=ysitz5Z?OUkWQ!BJTW|(L*^H{cY*WovEi*% zQ3L0Ru|GWgXvkLRNDL8b&1c|--=%B*1K$!g5Umk39np0dhY(mt6VgSq+ZBg)3?9*i zpjP`-{$MT$pvsV@9Ps+S2kXLW~OH zY>DrHqp=CEryC{B&q6xA(uiM0yE8UiC4WCL>bLjbfB~)f(y6$^XEQ&`X|~N1F5%6; z$}{kHy4~h}n@U@$@q*M|NZ}l#YpwY;)W5We8OP}Q~ zIXsqU{R9A7oJUm$i0a}$J~KD7*|1HT0v(Mb`!Tn2$^T>Su}hq%^bX1wj4r)+^bE<( z-9G)X-*1k+h`3<|YXLo5pE!`c?4^rca?fQbhk0G4Z~psqC)XW~ln@~!!0}i!%k|jt zZkJm+G+yNA%A9Ty?-J8t`w;$M7#6CY;zjxfP7rz%%I>Lb%^N zqoQJa2vbLe*0o2tx!p2Du{x>uy{}4x2qaP_ufR;S#&*G0jOSPkMiPc^hxdHjwh%&k z(Cn;V6f~~I2}i~gk*_GebVs{o8&}4?rU{(Je*bJ-k~Ek=Y7S$LfMX7FjA2oI|#1VV2P)==66yF zy>J@A<6*R@8yUE&(yg@0Ow@}OTq%r!zP=7V7_pkKrupK(wD75}l^HLWx3;FQtV%y= zk?I&ak1cOV#n2?XCMtRE8&zsfa^w`U6;P#$h!}u=(j)dAMJmLc)N3)(o3^`CeldA; z93?Nr$4AR^Bbd9k@h)`HEjqo*F*RLRjqgNt2ZlQaG*?79AiuacI?g~#6s5NF>o&Lm z+5a&*BmJO`utvr8+j^JAZ1NXjwW3OiG%_yOIbZMTK zl4#NQ6;1UNk1Qm8>`}s#j6wQbFgAu5uQBlFW6}oD8<%hON@SwW4pC1&HU+k@Pe-Cw zr*8jj_?Y9*U^MZPCf|=8_kE@L7w3I!#NlJLL85#Z^SI6l|2qE=GBQfKv4U-W+6%;g zU(n&Qe2Lm$zUBKa~MpWp6KzhBl!vK}eIQ#|-Y$U0T4@w$P4*Pt);)$Y+ zDboU{NbuePUr}Vge!d))Ti~1|^oFUKrTIKXUre(M-B;?^5>gS4Jf}o$7|j8Ls<10y zTC8(51Z?K>6gsAqo3(NFnnDY(&sMQDLPMhkf7kiV+#E!A4qhIPbaC^s!3|X1#hh?T!bO{Asm-1SE zg=2JG^<-4_;epWqi?la`*7}J^z;@{s&&p&1zPPe_pRXmAK)`zGHeWf5ozn? zKTg>UfqCd#WBT%~%7YoV6 zC(I+uAbJM9U{eH}iR5sz)Y^vP0_MM(UT?MzH4P5|>T$hdFch!ipDTH9GlR@}p}@e1 z@xj0tU$5jPDR4l+1N1Jv>ejYP5~$B7x|LG72stf_at@LOx#3ji6O&)Qh?QmynVt!i z;217a`WBz~JRBdD9kcn6P_{NFe5k6vycjvEu12tCkGaVsVM{e*-Oq+{sW63H5SgZH zss|qyuYY1H%GR_zS3BJ{waPx9gCnezPyD%N5z56j>Wst%d+`B(K-C!mZ49{`iA6W{o=A0oA(m2AKn+R;5c8)uQs3Tc}(H0 z?6)?j`nv4kRs;E+Tz2!mgfHrzHQuWZ&H`mLwM02KBHq7^v*g>5nwPAq3wyItpEo?R zYDFYZEpH8lm|F;CYeua~wQ3F=U+xqe8$KUMwSR?5lLIF1v_Ih$Es+YVH4r-6)M75a zAJ3mUujei+VU?SmqfmvmPbdBuH=ccG#5wsrp}XtLh9hvx0s~zgwVlb>+&DQlW}vD| znc_91wdyKvsKgvOyIoG^q?C}eJERrI)vqj!33smFa6jTx6zVvR;`E;69HJWm9sO-a z82E5a95@QzPxi#$zV+l%scILHVqGh0v^*`u{a*se`lMIiE6y1#)PUxE>4@YmGPyKC)k9(lrx(NJ-qF)HH6Zvu0AOn+rFEQY)&X7-Zuy423xI zWu|^{%Nl>8IMVuJoI`TG5WgI#0Y9x2R{J^6SxQI)S%Er7LG$}3cnb1(A?wghQ_>9u zC2(>nDXMT%ag-vj*?U5JbJZ~%OzA?#TImQC@P--yeBA;~N&_zAI2<#knE1OySyl*I zvq3J5vTw!W3Nd+jwn;H#ESzBVEYj4QPbwLZof_gdmP9Q;89M) z?l#@6VB|exR-(+BsJMiJ?E%RBNQ7ogAR`*@kM!)%!k}`8jq3fZi0#f0-JGop9bFbY+-^OYnt2scj{A?>_k+) zC_Tx?F)R_6#W}-vmy%uKS~k>;G!{4!^JNuF5dqqiPe0{0_=OP}s#+bi@utvQI-Cu@qh*vZ*p88a{>b*zu9S1L+%_&PEN<2GmH8 z)8+`#M$nR|&y+ZkO`X)&mW~Kr7xhH1!VVn91UZUjSsaRH_2`>V>~dw@vkqrWkpw#<_ipcbK>opVa*qnjU6>{(T+WukYH6msqCW%l7u*SstO>;PAG_K zR$WAK5elNqzEm7<^Cs%g?@*Q`KgtwP4C4@bFKzM#(0$DwmV&kWOw0%tQe~K{P}FRu z*Fu2Cz!U+C*{it5b_}O@{7lf$@&(^!4NyrxIP_Vz_>&;_2imvPzpmP<)a&;fCu z_z3BS;F=CL8D;4?>5f)52N|V~E_0Rfq2J`tvyAyMC-rmUWx{6C zYEG3Gm&gKjrJ%Jl{S4oKIa}TeEq_gilHrfldZ&gPZ%O<(EB| zO*1T?gYb=FQfVEcdy%UaWU;sh&|%cKD5dd@9AOq$WZCBjo{!J=Yg${y-4|a>gyzqm zd!D=ZYtml8Unt!)t%!a{0r$uAFWc$Q_7BbLK9|kM{Lgp5%YJ&Dd)?EO{%wuu-OWws z$_ZAlbz?<+L}Ytx!y^#y;^VMgE~@48ftw$lGDo+#;c>>qM}q7ct7d?@*5@aczV_Y4 z@$hk}73@$yQTo^Si>cS^(Fx=ZF(SyZ3sUIK5(Y4m1{9K7;Yz!;SWd)zu|c=wlQ7jjSounm>T)2hggoWs(g3{B7^DR5Bw`qag(s4pJQe}i>iD|5R)}FVoLxCd5WJvPkM?Pv0<9e zV5mykD`RL19w$9r-o#9~d424iPFPc5twq8OD-m3hmDM_+77EOARM3;g(tCF`O#77DFnkPXPU^FroJU&^3MGZg9458;=nOk2o}Ho zz1`7|i8nG+$rO^NiR3ZrQpK~11Mfk{m4Jl*9RHrrGR%{v{xfuh`Qj&GtVjqK^BsoJ zMgy;J^AESnlVJ{9LRb0b=I;G7$kN(&;PTgT{W##d+~05Y;I-tXO zL%x-3DySxiH#snX$qnRM7TV7mV^>Nk43CV*IKRUu0KO|O~mA(1%}&gxfG&PLR6+mWUa z?%T$+c2X$7iX$(LA5M}BP=$Vcf} zYW{HZkYiIXS1CLrwA#(L zD5uEcTp#G7DVjEO%>Kb8LZiS_je7Z`Mczr>w9R2bT+^yjFR~JXGm54$w`Al@ubdLg zwGB-nXkMlF>p%0-qcf{@OV)JGO7+V{3;KXX=81l>ReoV|)3Qo)X`bAHizX(w9Ni4B zRl+e3+b7p$i~8#s$yJ+T1DK+~rr^@5v;va@8_naoEUv<3Yvm(}T7}yR{>&THD{s{)Z-FB87yXGqSNu1E>fZ=@z~2yovwuRoFa8sPp!9Eun!m2B z{)XtD1r@4z6-!kyDVLOVB=qoD5uHSb1|>Gb9(RL!`uB(8*n*O<(kh=rORt0k$>}^9~ffV;PtKyo& z6f+^F3t>qECroREU3+6RPt)lxd>rg=%jv0C07;WDy5G4H;Jl^R{$42cRxp`Hx1j1v7Ysp9*bVqtTktWQ}*u%?XH@l z*Xzx)KjK5*SI!WF9{*qO4NJXgR-*x?eXxtQmQD@4r5?0PXwBQh*+`CED^s$c=;!o7 zTJT}?Ny>VuJx_IbPyVt$eX7HsJ1L#pdqrOK;+oeNGJy)oHQW3N{sr<=4yHXKtJqsj zm@5?a!3QW$kp6{FvKC0OMfdw0NaHBbr0)p8zT8D-J|!3h&ZaG#$Id+g;k81Y3D1<9(^ux-K* zN_ELYXTH=p#1xtC;dbrzGO@nZcK1HvR6+30<5faXdgjIiGo!q}*uqH(E#;wR!!Hix z)5R-uM0r**R^|HZlCW@ zJg>cwr|qb;5uUgb*`Qc6c;`?o?XQ073#jrDzW`h%SURx-&5EN^Pcv($-$)|4&bUkV zU3I_Z#a^5+bS<^CHrlal3zJt3ca-eG@Y< z#m`4@)1Rs`a@8^jnhaeme$-utYLfA zORnqdtefeEtD^AX{PDt9n{qO#(Y;}vNWMS#;dpcUe8!VD?w6(W?LgQYQ~p7tJ(P^z zlm1)IxmcvKw>63sX4x_mVlf$!T3~|O9Cv`-1229KPK3ingGE6|Q&^Dg!g(ZT+wMXA zZ9o~P|Dd<)%37<}(howp=H=t3VS=bO#-}L_bLIMN`$bKb;zI2F_W{d-l~nPWYUV#B zkzo;$x^9cmH`w=!(+Z7~8PDyh9Y{p|y>q_2{d8QgaC0O=-Em!~G!w}mW!!I=hRG+! zQdu)b40jljEPDM) zy|5}djlX3d1{SE*eo)yZOT;Mz&v2f)#%U3BzZxHE{C$`7OiGNio`p zcFAo2FjQZXRjk>{N+s{Bo*wdcR;U|X5t$BZ>`6t(p>SB##LS+;9|& z4!dYG+6#eqmBEAr)>hSQ#;i2@%-kPvbHKPJ`zZBk#ms~k87Ixqu|ynYyE(1DG41CH zux3S=QS2N5{i1KrVTSZ_>_C75#5AFBu_Hx^>AXE*rzXc}>%`*CrQy=J=~F@k6--7- zC9^8kGN~cNExWQ%;|1AADRJ|W>>CwXjT`c|4;su!kpr*@dobRiGJ#F;XlG4^_!7Ug6q)&j ziXBZ#h~w2*V#p@DB?ii~3f-GQo>04liIGA3bu2@M_GP2RFK5Smbuq7Ia~=p{G64Ai za0N3ElFV2Qh;e?d31*#}L1NyRL9Z`r!hetW%TF(;Q)WG9uDAzWt(y*=P~3;rc7B+u-o4 zn4-k&OrpfNmJ&wi;z^qQ2KyV#yjlH7m>omJ7-Fo%sb6Y|Cn4V=jSXmu9GZ2`L_fC3p zDVU+#Uex#@zid#hdy)81s!*s&Z)(}N9+=X!>m#jNm3ZfJmSn38O+-gGt~dS|KZJNQ zqWPoqhx;(g0*kFXwCB&)`Ig;xN6Ga({=AoorWK|>ZZ=7B%Fwt;UzDL?flIA9o+P?) z<3Y#8b1fB~B&2cBZ_+$fIVMu$_N_J#?rWat#LKNa+|Ie&CpN1NOxLgQcCAquEUr>= zFvu@AcbnI*r@1U|+rOAUV5fY{OO?r~q1(OOw>#kL_A9K>vV1S5%AuG`w=2El_D1dT zf^-0RaBeA)JCv9KOj=F{5?FMf71Okhg}nf;nAjGLKBgP1@g_kR)B#IWy>e{0KbN3V zy9w_HOVH#L09yEO@^{pg6I1drud3sDEXQxdZoBg?5^O_H(#kGsmn*HFm#ptGb!mR% zK=kD#yacrkBXiq(UQa8?N0o&xsb_;rPT4=d0B~Pf^#T@bH|_3F ztXAe4R%nzvQiJ6^HF*mI^e`s2jPIj)~c zovUmcI5p}h<7Z02>Xo-f6~dxojvSFxt7c*jN$<8!eUS~MFo7vkt51ZEy~`$mp{9mdZJ~1i***QP@ra z`KcWWZ}Lqd))x!yJ`0#x(RX;czj{(gCZJ+w>hReHr$5(4Mu@JPVQmUovDjEm zGq+A&V>ej8X+qA0+StLx2-RG58pC*A*=j6mLm;^{-+>-e%q}!Do5Ba_tNDD(=b~nn zz6!_BAA0i~dYr;OeVEnu$TBt!aN-#j$Y2U~qfHmsxC#WanS4xx_wmy|gPs>sYMnR5nV3W6NyanmB~Q2T3c)G?@%+~q31;S2 z)e6BC3Nm^4P8Chi3vmX2q5W+B)I&CM`L;37`%bCy#HqNhzcnf5__QDCNXL0#pefbJ zj(l`h%awK-81-`PL5pM@H+W;T#7c{8n7X>JPg5OX6-*!GctQWJ+0h2%h{Z6k*ks4x z@iAfl0ILy)f7qxAR`dhq7}VmU>{xuXf3x$z0zntk>J|yM;nTNNo1WZXZ>QPs8-%dfW5SEh zwnw|4_T63_zSvnSsNF}hP5b=r=J5BdzZ+eQT3TJOj<^x&7D%=MZ0RhtgYFQ@Hdr%v z!yP8`u5yC}CN6r#N)uz{uinm&r;hWl^YA^ox!uopKS5tS_pctG+j19N1-&?4Zl0aH zy#PP?O%)vSj)J4q;VYUV`dmxBjVL9Xm zYTJ5(g9Sf4rE=uuwYPfzj?vhi?zZNB<6-tIslUJb=I+dv0dxm{4GXp5oTlz6-F6+U z4nW#ydwQmONOx_=;OFB_-{`*qa)=5yyMXblmw{ZA<|p|Yo=2j6h!B|e?w5lAffzrW zN8t|w?_k6-zx)nfGY}Vi6waSmx0a=F(v7q(p+(53CH9n%(|OeVB&aH);C@-=Oxe6l z~B^WGlyB=>1CAFMNB>EBa*`;gr@h8piehz?;#{~fE z)zGp=t{)GMSxUqHrHq5m&{rVvV9V8T=^|6|MpV1puTBpCxdf>r-7Fy18$smDw`g6Z zh2~Kpx5^ClVAp~l!d?f6_S&egYQHo>rhbM z?GS@$jl&u8JEgl$%?|OZF0irI^CvB`BdbofqCrW|Gf3*ElO1O=sg-V(3IQYND|_hh0TL|DBC^?--}Uc5-L|E4 zeq6Zag8R+_CD#-{d7DtMkNMsA{u2sLOFtJUQZRyBrh?fROO?e%?p3PBGYG1K3 z(i__H=SqqQlW#Y z>oBYKQ;nc!I1LwIx;@z`D0MxFzHAutI>KDZAl9HfR5ac+;{{S6>jLFBrN20uAQCbn zVM$OAYz+5s6d%-;BKohEq+zEg-P;nQt4HtAX;c?7SChNc2$r-RCYiRTGwY0gB%$UZ zE8AK|t2K5Z=WbXBZ-b7m5==2|&1e3k_5XA9^z!dfVO)|)TGsT5%({0~uLp9o+1KCF zGdTpV^1@Au2>(i8;;L>IFEs2fXMrfK#_pU+@FGb_$BM;qZ%s3ALouzZm>C-@Ls7UE zvf~U4EMjXJa!!`OMD|JA(uSr6a;uM@H+La}V}{$GA6X6;Let>N0|!^(`b)E1P0xv% zgv0fNvxc3iS}4dszkW9#zLvQQ>>=k0eqGA^?LYv}us1*eA6%a8YIY6ME!Gc?9ded4+z3i94lVw{$Bg3?6s0y_a#@>Lf0x!b_# zy5`M4-*2-LTHs;2^=Ds76ACX~!%Xr(C55@Zc=%mbv?K;+Sl9kK`HYk#0PD80J|*1M zWaKjXO$7YIkF6_Ff3D$3J?tUw$)oQqcdd=5;V_bCSS2wQvybfGg3GM&zTqKjs-MceFPPaNBlWYk9QDu$l)nqN|Qf{VL> zz=cq@XPksRgkVgW40y!b=WWbo{&k>Y7a#Me6@Lz) zaMfgnBC4T?B_ZwMKxaBBb>v_wgsg z2Kb~`x;&e1+dH zJk6c^tzzFPPd@gkC)HF~l>k?kaQuuCT)Ah!zY7SNENT0%{sFHIBz^pd`j>Uvjlk#h z)CX+rGfzswzpR6-%abCAh03z}CjqKr@c&6VcpGJSk>nT<=>mQ|E51v7$p4_A6l9!h zv@9qOZC&leGRCw0_KhgPRHhS;hsfU+t|107undXCcMCWHZ+2zkKuxqop^V6+VnK7s zhyb}kOMHM4MW;v>mdB0EiYN*vz90G;MQTljkh?ue=AmaRqCT6AxRzIyJ(7t}GvpVT z^15`^2mvE$G$VL@m?5_lqFwz)ph$uu`4f1axMJVbC~MxiQVx>wf1&s>Xb)tJl>JW^ zExy=c%y0j?h^biNSI&tYp+=x)vKCdpy^1sSG7wd#B8VcKgzzLAx-a1He=sGWs;21= ztJ2G)90akUzMp9Cb=v?fh93{M{tb5V)S5>_T7z|(7>ljKKaTYzgIK}wNhfCc1Z%O}M3!-Zi##Gn;O2nu4 zJ^c6(E*!T)pW}=ATToZRKF57zJjD@KzYQR3W$6)*!HS2PKHmdkid6BD{w%CDM3wMA zNP?>DK*^9R%+;#Og$&DpHlyvv7j_(2@#K^d-|G^^c<0m5`yfL0_`s?2J+yxoHH(|& zqAzo^LkSfEmPIUR7j*NCw;&$+$GQY@`00~q5j6?tJabspiM{6fM0Ze?0v92`oAtV^ zLJR7BSwYW}yR51SV$n{M$9P1a-w?YJ!N2xm!0mvarc3E1L!#uUf@bq1S~2?E627yl z6~i1toht2|@LkWfSafJcec=b}0sN*)KU%dsNz!ZL!?Fm(sG*2}W8z`=pZsK-$v{aS zf&L>7)H?w4JDm_)c{%>@oc+x3%qbRq6y80+s(1{0^xr}jaQMlHv>@qq zzF}^*DIrEkG>?_w9Z>Uhy0oSm02PvW+x&$VLH@yz0`Kz-p*bMJGTK1vwT+B7@FxkZ zX*?!M@HJ?aBm$i3;=Zs-y_h_S8Q};H7@FUis4NrC#1XlVsa!nUQ3;XGQ1}256pk!2 zu#J9~hi47;y0Qo~cx=IOcFNt}nJvCyY_=!?L%=c*6XES}bBu07fcoZJ2BAm0y#9G} z5cC!oTm*^u2=IvAYIAi4x+O3yss3#48nrc8Mzp=TNS4`Cg-A@jPEy&J0vH@yWau-6 zFYora!1~aiWZ(Vx)i3p&PsMxjNL#H1bO=H+P-vWCO7&&4e8^Q2ovfwCO!ni9zNx8ck>{kc25Tf4`#Bf3}9~E9Fq>lvI~qo-$S7D z;P8_UsH^2B`Kb_rq}7Qoize|UyjDfPix8e3LLH_-O{1M;Q{6jf#}gjx8mB=GAWdGI zILsABXb>87y9&gr!|SB*(@1f5{W4sJgV*3kkwO{`hHZS}hYUNU-S)bmUf$;h#O>#jyFE2 z;kFNURsWV4J?&WQ2f+t=n9f_TMxo0Tm|^k z8~Vhy^3<~;e*wr#7iZQDLg(%43mG`4Nq zHXEx+!=_2v_oRJ(davvI-ha;7*_j>g%+0;meh-fFU>;kyZig;50HxBylV*L{I7F4@ zH~QLj{*c~h=k%P&DsVXlS))~SG6oB9IZ!4K1UUxAm~Lvo8Wzo8&v9JmFIA7P=bLMV zAjDjD~Nqd6fW>4%Ap0|is2Mb%Ot)-OFHA=H}5n64Wkc#V0N&jl9&^)|>K-WN>D zkkxwpK3xNepAfwMr7r-PVh68^GaT%FFh!b6?c|MzIOpppzv+>WLk(Rp-&pQc^C4yO z0pB;SWQyODiK)|-vNRasup+tS&-R5eoxa9faFfS^rQt)f5L(dJtswIauW zMn)a_MHV4SnMeq9h(=dKM&#u;D6OBtG(=h`+O zinxL#`KK?NpWN#a>@!Uk7SE}f28HKb3c6MAASEuv!c z(T*eM?G+SgD!+Aw8>Xw;K+z!3##qXl%wkA2Qa*yDhuJ`p0J>12 zH|C{Rhc?*FN5|zlu(0rdObwmgHbC~3YHX;37A(}!Db~>e$A2i)$>jRts+SoCUYXk7 z!JL%}>A9-|;9HQdMWtI03yX&ZFp|A-9p;hpBxv*(MdV+>`e+tA zpYZ`C&ZSN`5OTjC^8jblWyVICE3x0KO*C>*-} zAcGFU>gI6?%(;pcuMrl7-(G$nk9hVnz8=eSrMj)rOw)?a5}hLqX2ZElbedSk;J6A=kV7x|054hS4fez{APwFo37Ga$q(pG*9=Dv- z=IbSCpyuNPB=l=BVge8is5sguhNK$(N)7j5 z2Etdo)Ag?hhKvIrgigzermTnt2$jQnKlzR#Knol}1HjBLRBR1;y*nQDQlI zi0SU6LS!vXhC;!568G?R3o*bmvY(J!YpRF1z?ZgfD5B^M3h)gSn5TDSqa*!3exX?! z4A2ek>{#rR=V@M+uQk-=Zu5Uw=;`M0qh=hD2NzZ;Q@UCBZlod)&b+_0;$lVUwJ^qB zDo?-SGTNGMd0jLd!w=|F!Z_bQKvMY@MZe!4$x8gO9GwJLK)Z*4dM=*-LZ&0Gs2oyP zdckcA%OlG93{+QI^^0LvcQO`x5*UzwE%_N=QVsbT0+_+LjNB3KZB+R!?2KTouHpcL zKlJj+gdPl~K=#f>;EGA9t{Hf5jlKvqBNZ1&V1crcSqLYWHozXVAjtyG4Ol|m(>{&b`8Xpjro3b<^eYgcRA@QJ0~DB{>u&`xWCZO3F*aQUva~d*AYEQb#-TWK_Y8umeM_tND|+j z46QwHqytc52aC*H%yhJ;y+t696!T81FZ1{0?#TFKB>L04xbPPa1n6o%Vr9P{Adfg$ zO#7f~M?677z0JO7%kp+m+`dT04-0pGXT#ax2|psm1h?dq6~^TT==IEmKv+wqc8?9? z&`(!2{sbWDJplNE&~V^CiuY%%#Q@wdA;{KSOXwZ(Tr>+dEx12N&yv z=ghl-*x9oH?CUbzK+xWURo{V1i&8# zFasZFk&JO{58JB{M|emEOx9B_{Q}M{SVFziu_FN_l;U+DFrT(18x8A4MhFdq;FUMK zL^Rm^O_t2Lo#%BXc&bElV4ADY+j{<{b+A;e5=Om_haEE2=i=+}Xyu5-5SH=fxF2)J zfYu_FTGa5bDG*&LEfxvH@57ZVjlu9InyfkByS#&jlEC_6yIB1v#GpFg;nI!TjbNG zGx_hNNW?Y~4G4MzhEc4Qqf^Y>(`-*8Rc0rAo>bV@g#4u)4ChEWqe?6FZr|$NSfQ05 zxKXXc<8#`T8*D181iEla9AozEW%U}00*dW8>ZHKODRm1$>89}zouRJz zd2PtrB1QaSp;oMoW1)@{tYe|dIN+m!KjMn8yT{RKMZQ1Mt=*v1kzZuWBtGmkp@ot< zbqPwtrcb&-kpd_|5XulB!Mo6?LP$qp`;_%DaU$RmmSj{k@+N~sn@(szjr%-ka8~Ay z7)TD8NR)l{9;4*@MVgLjKv_scg-FG)jlQGWRGt%x-kaKsYa0wXeT6Z%M6Ym>5)AacFY|AoMWNGAyHfL@ykhwat}lQ4Vw={;?%+RUsGn&5%Ish)0sQ4D zU$Kd|6Bl2sXHC}bIBC# zi%qYEE*G2+Fqx>kH3(oWe<@tIiR#WXG;?50Tr2*NfpN0(>XS9R zc-(2*?B)TO#QwDRYh1gdIf$*ov9w>a8ffAAPdUwD{84KlOMZu*N=<&PR`(ux6eQeH z3d0yR4dSCw;2TQMHM;Mj5TOi18NZumS1^gT{=<{s0=#S}+J&hTVq5X^b;a_`GGop) zT6Xvky-4f>eNWhq9IjoB%A86)zFkVdRgry`W31ac<*Da}zt+3-GyilHw)tJWlLq;@ ze~D3SM>Y65%#&^q>{vSO^&T56jEK!%kYz(Lpphltc-0ygG5kck6*o+`8^tP-Q(RG} zzm)2*{iD5o&*${T5mw!R#DB}?+GT7&2`2%3H|016%FdEke%A=tduwxmQ{5x;Z`D6v zhjoLKe{WcNX3G3WZy;3&SCDKMgGY~i$zOHSroAR@3wjOC{nHixvHA10rYN$`|4mhy zxA+;2Sw81F$>z?Wc>~biVR5$&hm@l@f2DfTY5tE7M1yc<+pkt|MsmvkMz8$Q(wkiw zZ4_r9r*ze(f0fd#wjF6){wvO4>)kyc<4uS8)^N-6k&X=9{(vuMnB&Qrhwhxmct*5C zd0{E+$wDQoJ-<@zB3O<5h@L$^p&aLp%JzG`W$wo$RJ_bo!R2M@Xy}aMPws4H;6u z3FGRYZef}4e8l8Xo@Wqqu;>Hp>VF~V(kS7_l`cI@+^fkXPP zZnDH9O$7liw2{UXC}^0e(!|q`JgHwKu0DN8qj@?lY>!iYfi0Rye!fRZrG7&PIk-je z$#D;uqs)L@#)A7v&*KCryzmT`maG`x7B7R#!p%#*3t6!k)6l^F%h7h?N__0jzr*#W<=NpAsGv1!}{k*={)H7@m z#2O?-y4mg21Jr1nfVd&`cDX;S<=I|!UN0Sjb|%Su3N|tmX=3!c;#d9pI5?88tj0<{ zC$yOobz4k`%W}j3D%^_6@1GVsC_ip0Onj3eVyjOpM9EEX?ua|JV=3%T!m%e=O_eYe zZ`WM4TAK72DhIExA=4$4pXyr4@KC6Ml&bMHJ=XoIWl%#YQGZ93?G8mnk)2|1uEQa| zh$9lBZ2d_Pmk1ZnwXX1()MVIRfo#ap)2RUx(#4f0uPOu!&@4?%x*^?WkA=}Q4&Kgp zD9XY`HLst3?FU!%u||Z*V91x|jh^QK4A(p7c43J!qqwjY>~{snM+;!oB15~ueP|zAhN5OqfneXH{?BJ|}Ej2}`K(FWFh z)D-!^(Nz`Ygpzi?REk@JAi{wxkQwvNB}jX4qOT*}7NU_po*IY~kLlz}XzRc-8pjZ& zM%>2IH{_v;rOD`kGs?vaWnCDE2?r%~Y!bB*phr9alz&18k3!$yXQakjApVTU8IYa#~115G0&{_lVx1npi@mzMOS|Vq3s%p zkv!oS7ufv2Y&4-Q&%yMAt$z!udjt#hBVX>=j;KX z2>oswvclSKXm`p-wu%O>9q>a}42R!oLe`3e<_LmM9sJ`1)??fD@>Dcd^D{{mONbix zq?Uwqbblvc%EPfL_0U+1N(qGfIYko>|y7(T8r-$xEXZBP)n;gc=LXibQ!6lNGS zs)FC>xJiJKUgDF9OM@r@&SAu56Fcdzc{7=r`esyd)$W9e0t!(ni3pR@hALg0GT!>K zOPoL(O>6Uk2^fTU*b&ELPqKn3VFsSL!s^9f@??9k#M+L9Q+*ye_H4G|13;Izq9EOj zidPDM`);{vd%cf(3h?oKONMK94eA|+vm z>l`}nMHSz3kMfB$b`40#Z|=OK%Zsag@G=%cpFOvHMWsmcjY%HdXCN11DsDm1vLGnh zS9C-wKCd?&tiW@D!9s(Vmjc|F5-in$OOi5rmyQUuW-UH`n)kOnUV&!?i-Z8;-KY|d z-_c_fB;(CuK^Pi`inVgsD2NSYIPH=>Yq2*>n3Sm|*LiLoDtK-?0re zI`2ZFT@EB}@n~yGnkK;@rURj%Oi0XJ;i2-P?4-3j$iPeo!?Yrs`D#}kZAw3?G&l2h zA$h35!$6rblxy7FftMVY<~F*CMnnsrSiEg0Nts1HCiN7YMZy$OzVua8-i9rV#2V&A z-cq_907@1>6TylTWUsgNx#Pk!QbFWnX!=eI%9a7wR=bPgu?>17Dq&94OfVI`fp((mAz)j1#-8G+E z5wP0P>UDWCQ<+0nGLLqRM-rpf7seSvkUN>Bty*5vip^SF*(O6EeHY~3L6rLDWE~&B zs2PUeQc4jNrfCgXpLJ4qL6>xn0K3X!L#}rXEcCmiwd|V#@)6pOhFF$Ib}jCfoldZ* zlhcy}RsJGsR%w93Rd7nvw9o0GIupo#gi0r=067@2IPE);O8dS=@2j49cIU{9;wmgl zO`nCJ9`}mIjR5&tE%?S;dR)H7?bc5t!-7GfI=M{w*bL`Ww@&v8wq%y=0O~rHNjFx8 z*TsyZ-BY0+i78hlV-wAt)=Kuto_ShVI!oHh;!KU_e#xBWZ+iczYP3?zKG{3}0)x)_ zSHJ1ce@ttj{;S{f$2uT9VrgNMadd29g7ss+Hu$uwLCM|EgiMncW(vHzVOQlq!(X1q z7oeg^&t542K2D|)tMM!L1Ic3D#Jif$yl6Q(kBnC6V;obiDB2lE?P^%%wm`M*!7{^i zzQHm~HT0(#1m*p8**iS3S>*BVGHK=sTL(*xz(`%IRDc<9eAOTK_L>#}b*_gs$Fpqr z(aA`??p@Bj>Y)TkFmN*ieKbw`$43$W=<7v#(RHf?t8?VbiQMEr-3Ouli zqBM>}vr`FnUJiFyO6vJs+7bq4jT+2usT}7BX>zLK^)+XN?)T6ww2k)Bw~46=f2WRj zxZxd^varPzpzV(g54>BR3dd+P zp*Y;~`Ws!3@JvyH#&L(xx~yl~xRBf$3hPnoNxdh)ZtMH_o2FD)&)%L8}12s|_dcqj?? z`mYIZ5wG+-lDGEttZWHVh8{A7DP|wP;Og-)9^+^dcqhnz3{gq${jd9liZ7184i-fH z4=QMBcJITWuJ(i_F6NPcVPgybB&Go{9`+`k%!C})`ml&OMa>@qisOqRCuVPmMH_gy zlNRYwn&K8}(2$dR0i(Y$^VBO)P&eORRa|S{wFi?%D(^`1it$MXftrkApt%vY`@e@ed0cf{oEe0Z9cFMK!C4< z6&#ywQdlmYm&k6-p#j6@3j9Pa0;tr?$N59jwlQ2LJT$QA?EZp&(lQzxx-13=3`lUv z?N7!9#u;T7D4B3jk$h!e;KCw05I~LkQB?4g>uMAEg>DeB9Cgte=H<6x`6jRiY)?^T)LU`}gKOH4y)2tgrsXG>Em%b0F%ieo=K40b&cBsiu)Q5hEu-ffjJP~tQYKx`yOa}!&S39p{ueVp(}+B zFw&?&U#(HX8Vj&aIuyaWG9FxOE-3nHi;Z#FUGV*Zmd9R7c-) zjYvN1B@y0v_aZ$RPW?o9y0E?mDsA11^auohEPGTv884q}nKeO5d*&ihM`5ph(i5$K zA9g@jG^pb`11zVNIT}b^a+#>H+a=dr6hhVbMr~1Lo0&K?Br=DDYmv3e)@rmd>{I(b z9=xxuwV|~StncTw?}?*_6SN7`8R(#)$z*Xpq-$W|0sfmaH?UA-vfPXOwt&4DI4u9v zzc;gK!da7?Ut0U!%8#HG(|O&2p2CrSuV~!L&qfS@mX8^@PX5NsH!)zwoHtD4Kv+02 z;1q(M@ry?1{>+ZIxn?Kw0W!q+TcB2e{;uK?;7D8S7V{`~Rerb48(&c$z$N#&v z&@~a@BziKPmyY%OF!`^p&H+v)qjqj1jGeC*wQc&D-e0xW2g;Rd)}CD-s%9A z#C*_#Y0sV0PFx1CZN^yGl=>!5yIl9*TAB9%z-MF5>+B9v0zK>8i&%N9LWN+tSQ>bJ zpNJRdNjUcT@<%UV3y3d$ z@8x^PhrhS7G>%3qZdv{<0qY+L6#`M2F&fKN0y+SV+@U}EPu_U`x_|hE?m*0{ARnm|?8ZEyidT$B8w+P-_(YFWcK8WnNr4^FTE^z+0 zCoIX|%Qun-Z-?Jn>@(}8IxNJ#2fZn*QvL2mmp8!UOf-{sqrAM%JLC%}1JL^h=XE4l zlZ~CH)*)&gDcPLuPJ?B_RAB#1*Y3Q5ySt+4t_>ek=$j#TfWZdc1 zDop6`gv?y}G>m=wQao5aq04ArOX=+jxJN#D9!z*nGW(ZrWoK4XmN1HO5? z{`OsDYSk1I_`xMX--JAyu&Fj0hFV(~Wdtn4&siQO=EiM)k+tR9X<> zCS_$=qJsCr?p7c3P0Q6kr6d~8U&^J(N7oj1V&WHzSJuEaGWSO%rX@@*(PwoBANjyI zP;lzfs#G<7>XUI=yacF3u&JhcpQ@aiw&oX@B2wc1gzUJtFQYNS_r;VUjmk_*=vq=2 z#g0L&P@Za<3Xco&RS}mQR+uzB#W^*t$S+_sP92_Ooh$wzF1d_HB3!D)!4GvrHh6LB zIIZw}K&5+X%dx1>xoCT;c8YhZ9NlhPlHk5VpA{filSMnk?F*1>G#g75t^6bq4%8gS zbr`S09>{qkGrzz;bxnhWQfn&3GKy1U4wE^A4uieg*s~lcAxxiDjW1-8K8sMi20<5- zh!5(#6%muuZZCe;T8*uc6C;XKJt1#llj8;B$grqVL@qzWCKZ_w++c{cOpH}6Yk&29 zXnvLrE5IGWJ!nu_1-Gff6)4v=B)`BGk!5rlh!0sXMsf+!oVAy@-SL1!gBp00)?Yb( z&gRRR470Rq;qxKxTteFo&@*u}JJ&}-{IG0aK0>|UWFI!awI&MsIJ9`djrTSzni~-! zfjIr~4AQ#w<_=Se>=XDQj5^ql7N~KpB-8pDDF^IPWzwMYc~t&oU!^{l`on}5*ac9f z)d*hGuT;mQ*KjS)C!;ef?vWETcGS+dHrb>MmDlvopykrKXc)+@H>p_Dua<{DapmOI zvacDr8`!&hv3-@ka)fQiOJH=1gBH{hC=ap1SulD*rHjylBqq*9eu;H%zEdv||wSJB8 z3(^ggNo$VkOCjw4(3CbzDcod%XEjwB`Ry0g9`t@nR)XG$`1;vTc9DZMXGx_c6x90z=J(7FT3BV^rrHULuRXv5-$82bmo@uZlpH66LG!)B4zaFJ zm6A{i?R=a{Ov%%j<41JWY)XdOr-3*(E>CB;L^`T*5t@VSOqw*3_Q)#Flni~If>IAk z2Ir`0lO7NwHG$A67zaZ`Q_3u_Dcwvi@_SrF@gt(8BURzg?HIFR_x`0pIiLpG!Wth+ zOF2S3L4n0Q%JIeCrfMOW8*JPY zu4o<%IiixROj?C1t5a=?U{y zRQfb0+V*r-vntgBk^{D((#`vORc4+UDvi4l1HF)y7UEC(jmi~7!yJ=y_agi@Zcwqn zC~x6B>?KCiOt>!!JX?3zH^!GWf`wH>>0=7>dqEr9GzS_P@P>Ngq2a>U`q`89oQNm@ zk4`vyLINR0&>K`Snkr{{tsiHpKj1e)g!4pj=C1R5us6_0Z-A+H!? zY*BODA!}{2QPz23wzMP~!FD?^mF{!x7})i)BY8I}v3&U6nr3^eAAa`MLd-_FDx*~n zk8Rp=GXlp;4k%Bfj3?Giusw`UXK!P5G!C`mnQ@i0Z-pw=5hzE=)me_zX~5-AKwi@xf)J!=ug58`?TRze?kc-buPH>Ag~gonReI zY#o)DOtJ+#)vR;bbdJDVcoC_)hB1{IB7e|evs0AXlsfQG4!czGYQxVNPi7O=!S=9c zoHi@S@NW@6Q#)X(d~U3aoocQ20CYfF<>691ek%_nL@}gSxGI@kXpd3=7ds8ihSS(ifHb+F0DcC^EupD9_o>g5noZ>6X4V2T#e7v z$KqbEu(ssdq`kRJ$v*qefJ-gK1P1`EaWu73yj*J})C~nb_ng3Ob_- zdUF}L^2|IaZdi%xyaP(-tb;&a(9p9|6R!zbILDlC#T$O~yx-HKil0L#&+NNe;5)O8 z{(49Chnb$-gBY=ugn%FYoQw58L$>w5gCsu~>+!6_X2tkTHsd+!0Y+7A9nZDpsC>f* zo%)2nQj~quzWsn-^CNHEypECJBHpwiFM^T@^7LJD7J)qfPQbh5cyga~Wa0SnR z@fX4@hPnEd4?E3S{JblKH962%2QoWHFIMm342*6A!>Qois~nQOs)6qHD6H^$)KG;S z1q&DxiaP`t^uUc_BD1V3j=#iaO(mN-IJ7wsUhvEB5W?S+zVIY@J!?{F3G|uoTHN+D z@3(kVIV3$(-x6o#&V%#6*zk=v3KqS-S)4uD^ifnNhKVymb2u=Q)X%HP`92A%TQ>%Kc_fBc8)NK? zLuAnAO{8tR4qubbwxmm!seO4#+@K%$R`W;%jjHNpU9S zkVToB`T5%jOuk7eefKEUblym@raL}p7OA2M;CHmFX4>5&7g+IGZH3(H$d!tQ-^Dh# z)7E_)rm6IURKy^YZ!NM{hS$_?oHn`Vc9M2L+isG!p#65zTBi%GnPV?uz0_ehWxdyd z>WD&Hqc+y@7PcDdi%MUhiZkhTN)~s74~OSgp|^yS$yon7(PL!PwkJ~=9L7(kynuUs zz~vp4Sp~*VRM9SJ_#aXBV-xzNq~aYzyQodDE%v$JQWId9w9&++cZmvXTd<+}kK}Mg z#v|Q9fJ>d6X3&vg0%|M4CAyI>LGx?XJU*6rc?*)Rcg803DRWE)paG4@<4#@DqVT0MKuXK7K^N(d^)02+=l*2a!!-#nP_fS4Iyj zcv~f=f60i`r>8Y_$}LbqVw)kZ?j>ftY>VV5V>DZN!%q#x{aR9-K^0b&gy-^c7pX>) zYC}ucAY#bP*GRACP^QsgU%v}ks|K(EsY|zjJ4(54F17#r^FTlFD+r}5Ki|&^;Qq5C zP$QGrEjaMAq1HZ^$;@CPsK9^i{1VBtDBy=<^|A@VL?DYD!?3L}0qivO|-Ra$5&c`JVfQ~OxEAEcdF`1nQ z23&4Jf|=-UkM63SUfa*5PuIl6#9rx=oraSe74x?n5``A?V_CduS6R_#H5R+wzc0G@ zaklZ*-rn{a7OxR@SA_`(d+aW+2x}8_3D`mJ+KBZ}Im@NBdfBbwDrcpns-HJ!W;X7i z&A3`FkGmaXAB1nARS3>JO*#m4jh#6l_h89Lm2J<*fIQE*) z=J6Wa8KOBmb$D_z?bcdYF&DScjcB3NCKu30Tmzsp*c1V~_)bR2+I%bV52j<)Rc zgtS`~IBnJRs}55)Q;f5|a&F6l+x=*#{^l0YbFP|4RS`iu*TF9R^KiiqwN}x???Ui`D~RGH7@yHd)#* z9BcFpCZZ66&@IBP3B%F{lzO-MUONBqCw}J-1`rmW(H+!$AA-X#0UUzh2sQZY#Pl}` zi>RY@i-|Mtmb+fc0}dF~7~(V+0#gY7*Sv^4*d%cdq{2z#a2^UW>)=b2*uhh@wP%Gh zeh9f3yd(=8T`1Os5p7vuUDgYx8x%A?{Nv0~y) z`}!C2kAwcdG5^C2Me7zOn}#1Calz7s5g1|T19bUcmk1Xv3xH9MAda&kFos}nFmVHI zNBC>|#thtl9Pt?L!+?0z@sFa%XWO}F*Y)$(8BQf^t*dRf>IW_93w?b<#OB%6PEz-3Tz<&Q zLJ<`!!D49EwvMjLhj8$#0X>HMKy^$M>tl_63%ixkFRPgAce8e_jhuN50KC~;4pB5y znPMUZDk3?}WBvQ2uU7(?-7z_{5+^L;?1*Oa`(c2l^q7ypr-%&*;_@b8Er~ICK;RFm z#Mreug`fZ!JUITQ59SabVhFNqaP;7~hX~Cf6l4B{LHsXF(VH2B!ruu1$3DdG3M9k- z%iu3S_zr;a53!HIWWaDsOtLf~04%Mk6Hr-5Ev?f`tZ}F2Jf;5wpg@a5e2Bm+07?bU zpL`Ti^siyocq3_jh-a6qV3cAA<4gz)z^fc|ItYab?5y``$3A2(J@=`MG%Kv$!dYCw z6F46KeLNU<6Zt4i8VozfAWH*=q4j1HOcoA1$07@$1;bJ1r3pCuIVphpU|9Y|aRO05 zOhjiBOg0YhdtP98{>AYAzcBy9Euzx%zntK~4@NzLG!IOpAi{+S!XPx0Fn~EWR9Zir z!xJ7T`qxlP+_1EM1cz$~P;}FKFmcnwZb-&m&(fe(n6y zyU?d`OY*@)vOd(vx3H5F9<_fCzxc2UDjQ*v>YI|`9iyF@JY|>EddG0b=PNXw4VXmy zQ+Nm$a#_KERcIWjTqyoV3G07KQm{>n>Aw>#?mv|X#VhW=Q!xHNn1sjp|D-L-^&F7Q z^KYi2TrU8Dz;^)l6=fEe9AIpEiQ+K0$JUmg!y(lN(Vo8^)(;HbCcET+00InD4pG+# zVEx0rL2nj>)VGw&r36PgU1Qua3!#3l0b}z|c6@f2?z<5SfEmf3K{po(o6#0J@G708%?U0gW3I9|8==UBzAlCuMGo zCzwuLRi>RDdO|3UdO3A+WN8xjo-v?_eV+KMU^87Vp4w#KV*`UH4WFT>s(b=GL4+bm zIGkd!V+m9eHJem1-)G+&EK&G3kkKOV=&GijfqbK{pF;a!8{Q8E^7-LBW~9!+_kRur zr=&y+qJ5vn{-mL@IDcWtdx-&7mC3xYj0a%masN5exJK~C1M(sh#hZY~LXvRrH85Zf z{K;@pM3uGwA{&sJ8yX|s2%O>;o)>H}=KS)_n$|o2`#?7wnM_10zn`fdI zsvdZEN~f%o7PXt_USYgv&2-FxH1i!x0zJ*q+nknVQS;pvH9}kUuZ3K!f;DlY(%gOr zg}&A606s#`noZr-C-QqUb|M|`ZoaHnh;dr}L}_%p`{WE63u;$mzhw01CV3vvNRe)V z#Cj&=4M%glR;Z92n^I2uFE%@Dl{xI^)f2L3m-RiLrD`ms`CKb{*b4fZ<;dW&mXa=F zl_pDpdznfbzIi+c)h`>ZD6JUHh_sXp_0xGn0c@C$nZ`5_N>W(Ko1_TXCx{xwUYK!O z(~LqVFiPFn)WFXWaUE0x7TR%IUfwDvvtt;%eoSDC&iRu|*NMKE&VAPeJ*tuv+wd}L z3%y7*>lSj{B3RAZe)Q<947l)rqaq*fkJ>9>@iN^N)++?nI3t4nA&+E5(t7b|wwS4O z4}AEPJ^A&6s@CSuOQy?Iy~*73Z?e<)RM0gJGvCB+2a{@8JKe68Y>ANuJIZ<4OQX+Z zuZ*vMh->44yqJy1I+*&%Om~<5G&~37hln0D*~K5Pbt`qY3{`N)4cLWPmd{MwzK9*C zvya02C>azHT!cSJHCI`cSmRx1PPXLw)B(s?c|uPTRLRw}b03*bqlU7gx8!d$cypR= ze>MU_8f)ZzO!2)?b6lW}vC*bMC+9V|JItEW9v1^d6J)oqpT<-X80=tEOy_pd5-7E&DRhiyx?GcvB0w>e?)S`Mt6E>~xLHjM-xZPoGopfIaf-yzEWz zcXpZGbO6iIS5XFnH>QNNGiK$%mC3KoMQWKii|*Q~W9{}fY);)Y)Z-}uEU}|g9W%^R zz62B#uJbi#jVF<-yzsL+CqBnJ_;CPO($m8;C5q2k^SHm29CvR>#>d4$=MGW_L3oU+UYyadi<*%C1_pnop3EKCipDklL z4m)BT34wR>UVi;H=T9;kvGQZSIC0v8(A?dDty@ac_8^rO_Q$vE9sI&CGp131d!N^= zBR1db!SBDkt9CzO7iq4tUV{=hcqCei_hnccQ6AzS7y?)r^}g`z$Z*cTy=YPhDKD-^ zLrCU8`oC0!$yf$~dsx7}+61<;B+`)J8hLnj{A_HcW0DfQCd1^W~D(5p|b4 z9pw??SrR_=!2KzUQM_{V%TUP@Ai9TbnF%K*M~FEt_|)EWGvAb)SUoXn=u>B~rmzKD z3m-)9PXT!Lw%nrXfVWSyN8xnoJ{O^h<6j9DY@hSi4%I&gE*g4~n?Ukhw~+06t0c+) z-iRY;A5;gr9CAy%c?@3iR_{{DO!dvfzmmy^8m}`tsu_|{7GKUAXM$ZF5TNj-cFums z1-!#D*^Das5j(m?b@(v5qzFEYZ%oiz11rfL{a^($`NK*zO9QB~9Z^{Sv(UiK=JB@R zWuSc(3|5fv&4RNaEe?kDRw^CCIhwL{I>=ZOZ$*qxW%}fQW}`t?3=$aq-r?0gs!nc$}%FnRF<*#epRlasbJCG0Ppo( zz58%dc-v(W?(%p0nQ_gE1-D)`32biUQJ5k$xbYVXLOX~nNxH+$Rhjvd;8Wn9HA&9u zGVoPK+LX!x8gu~JK!ma?=qmGJ^K@nv!k(I+eWfi?DdVO}X#=LSFUu{lD*U^W7_`a5 zxeTGhxleZI_~f2M>(T#Eq__Xh!Bkfdrx#43qbE$Gq!-kIqwn7AS#vK3n3rRpCKcy0 zNEYqz4+~)#1+DDEBw}e3TZ9fqC6;AO209&FUjy(+dE(>hSadGNRkbewk5HePJbF6m z7bxX{oaA$6E6YkVw2^6D3@OPsL{GlN?gkz-%cwY(B{?qJ<|ySgn5$YqCefa#MFS0x z&M!kECVK8~yf&_3)42pPynNlmbwfyCi|$4tL}QoXQLt+^J%OIhF#DLIa~XP?kRb{f zFww2V?3}W2(o|LEN;OasVu8UpP%+DL>;iFBDA;hDYR&W4JsrW}Azzts=vm<({p??H z5+p5-agpc#p>G5#{+#rz4+z#TyYumch&sQ?PkgeAmMD*!G22jep;TS48u4}>Apt~M z(`zcg8a-EddLOHyNj9iUp0PU6@(QFkdX`w?kFc(RsmW?~RINKK*z@ixmCAAPBT0Mk zqDzDji(?-_mEx})eNJ^mI|;8UDC84Z|6$oq!_2c>$Fy6ee$gVw10YrWz!hU!2T7Gw z<*L)5N2#;3tD@Y5Ngwv)MKTHknhtcmN?%jhhN`Rg@f+dFCH~@Nyy~OZ7=6^G2*L8v z6iQeB0e{A4f{H`EVpHa$w0H(j9+4u*6-k}#I^#pwl5BjY+<8=Bn!JaRw-7n(ZFV4u z64`a#hP`4ka~^;!?w&ihzoksMO}FgJ>!ojAKZr`kSSK_A7mlgcY#Io>inIN(>Q&G) z=?z8GrVx9#2Q#l*y!4DN1B_yV&N(oODWdN|OyL87z`7xzu*n01oy7JY>{QkC_O0m& z+KNGs8R}0_661VIX<~dQ@x=Xcplp`;z-Wm9{)9{Y^!1EhF{RuL<7 zsWb5zIxOW4`u#W8mwCCMa7=0k0$gHEnzSB)LovKiFqy@M5lFJQ6a*#Ba^-jA0Lv*> zkuin`Ap40w?BxuOUAgH?%aB%ig-w~zC@%zb;Lfs%S%DMmAC>>5aYW|BEm-#rx#bY6 zNS}pVHgFH1zw%8+L2w)A;O9w6Lp}`xCA$X>{ZlW71>P z1qn4TKdWAT{_#Mtvjj^p^#M_%p<1jw-L+6UjgNq60qi2L%2u1H;ZSwP0c-XM=8!p2 zzA79edvbT+`uN6+-yhnIT|CviQu*v?%PO%LX*9g4&zFWCe?@-TxBeAiq{C(q4&bIf z?~bwh7&fWSi~OF_Q8~hPpLn5UGKYcDiu@BT-TJ%mSe8)`+Qv1YYgzxemfkaSa;GY< zfKUI-pQ%hHt?J&Kw#xli8|ozviFukYDIbMJf^)`7RPoFgZqwl|8P?Yza$vLuETXcd zr6X2sn`Z!Dc!K}8%2Y2sXEypqMLr~m&1Rbw9L*At#)0anTjqWTL7dmEUIEr1c`6M} z65L;$giGuqgBBIpqwlsyh-t0 zh!t>}|JOXklm`~IMpMHg93TrGD48~e#Jf{q=KYcXzt-6n10^r3DO820_}@(R)`svx znX6>_jDT}U*fr|{r7&cw>-3oa;Pw>x8(Shg6J2qK@;0=6qji9a%6qZt9ft$vMw>$9 z-3`L~+#BC-&u(Vt++_Lpan~`~^10PhdG#X$9s8_z)JGc){%wjGWF1Lq5ATNW)2=Fp z&K1B(r&F#uVU4sl5K*eGY{;ohgQ9MUYH zt9LLfz%1)%cN-Qm#RXBOkPSWd1SVodZrE^wkyz)_`6KXP8Qsuf(m#f-z{{;KP)MH8 zE5TAvr0OblVzk>Y0NzkGC2#;sSkSCmo$fX&iN#Mq3Y?UMRnFS1wWi}tF`8;uV93^ zw&3q~!T7HX5MH`#j(4qXg!!xnogjS)KhO9V2t)JnY~x-wV}cxavJsi7>-wazB_BbISIg1 z6VQmO4j#0e1^rp19cLL|qMoH$#)2i8>LNHvqyKb=O`5+USYV1Vk)9!IZcr<__9qv1;U+RMkluKR(<_0^V@YXm-QBO{Nq zbj{Y!eh%8`)K|q4aq*6iBhvG^HmHf!izX)>Z*){z>Bp+DLn(B+6}B4g@8{u(hI7?& zi#-te7OU0!s@iwh+%hLkvwTCVif;Hw%MJ-d^C1#w+$K`BMCDgDmTYIFh*6fjUR3w4-hH?d|oE z9PSS5kV!|YvcOMx`o19A^Fh!`N2_#L;Zq;;zA6gS)#s1b24{4#8!x;O?#g zg1fuBBxrCaxcdNa^5xun&VBFxc)z-5^{%z0r@Bjab?s)Iui2JP2v=}Eh=P9x7;j_W z-*UyCkfP2FN!SwdZ3wf!8|jMIB@iKd_iS6g_!!Q<#4sYZcYkGteWxM1!5L7t-=!ij zG=0;>675Kd34J!`icwo$c8W=;SZA=4uIhD|(vxosXe7|nIw7VDKfZUaG*pfiRH6HR zCkk#~NYACNz~Bdb((Q|Hb{5kENOnJ?HYS&mlr{f4fPGo_)MPEOPpKt&e(uQ+kJI26 zWLc6H_CZ|IOQOeL&wn@}!NO=j?Qy69xRrR>&Tj?W z8L$3oJ$+DI4Gz3N)ack$iAGsX|2>nr3uBd*5;@ssw6>v$WdBNQB{zROMRW&Y(SKj8+k7WeUEa3@3UZ-@9mpq zWpgQz`}*A8){-&XKHQnW$|D-VcKf-;^t0L>8%_i+eHiw`%Sc!x%CE#AzSl*eSD{wE zB_aGUSlG}vGHwh}yLp+VzSm+i6;Y{QKm;z1TGu{5be6e^ce$p|aj}4g96dN)WuhM= z4R7Rb=70_+snwlqNrZ~CpbNqEt`DRKG%jw0U_*n?G$*qi6sLY@l7;|ErqP2OQfmulwd+YV+W&~twoM@Xumo&Xkaxte-fT`Tcxw8D_0OR$S71b2vEV)}Dn`Uv-AktOy*kyH{f-8_MrI=FgzMVD95b;E;v*$KRIF2zXx+*h#R~LS!4oqz$|9Tvqmr8EeR&Bq*pdapB14y`Mw_f;i z_7xpJJmpZosO@dpvIAqQ-NGP~cfL%*`e;v2&#-*DgZp&Sq3TQL#Jj#v1~E&|lJ%+7 zEj9fdaPyyGl=cR97xSsEz!S^uFP0ml&J}S;rOnkyp}9#bzwcWM;^H1YUqo0xd!8ak zOdF#V5Rt4Ozxa3uM{{vnm88DZGvjmi2eyXqfe;vI?fJuPU)uQ{hv)Y z8Npz{{!V)PJY7SiiD)6S0|o=YXyL;k$jiSgBUgDxW-rs0C@#8)4IC~-6kz$SSz1}{ z=Qy(n;~@CKsmaoapFY6iMzBFLO|+n0cvN)I=1O;M!RJfOOgEcIvykO(F^i=#ZktJv z)eu+?RwW_9Jyo@Rq#u0FwSYz6`QS7!PSc8(vh)eHKUqwJu{kqq7C=FNDh7FA0KSXM z_)T!jC%T0!m5)^{*u%J2$Azm&t~zv3$!?nHx3))=Uvx7}EP2JQWH@|A1m45f(XbD}p98EoR%75Ccq2p;=E z{5$)Q50o;X&eyyY00jny&jbc01O}Fd%#Q-vr;Z*5CoRAk85v-pRwRe!cc}FUi)7?5 zUrt+I->#{{?b9^xNm2%{@MX~?lpjgw>7fNyTukgkYhrTxolSnJ&2#qo92y->s;L;> z6%yong0{?^jJX)}1Clx+Z|d$Xp*fTLB$gIr%m;EV0)D0Z~hT<9t2Z zehy_Vo=Vwblg6p(~zoHjp%W<&PbB^^J#Vt|H$-ZdO*bn+iY++ATqwT z$62Biphn)npZHDTi8bMkT`~7n4C9E1iyKtMX_1xN4NN8=bZyERC!hpM=NoWIcCZ7WQN>w z)ZsoqaCM#x2FsrC4`41HUs~LmSZafaMh@a*7KPi_sj=i9B z+X7)-yClG)C|fIaaHYsoME!l;_Wgpt8G}EKsOVrH9cm(Hl``xF(vYY$cc4se@TU!I;^x$XOXu8%f;E>arjo4F^R%`GR9i8}z6NxWCiNiiWL+_T`2Nm2X@w*D zaAZOgA@@-@NKobn3}Iv=uf39yj7lpHhL zmyJrI{9X(i`4LQeK;o#92(yiaOC?`bP#p9EYI$fY^%wFD zeym%^NWlOql}ffe51a@8&s7?;WRowSFP-_W?g-Yp-hc11BvZ;(a@NW_ROHts^Vq`i z0>~5Me<_O2B>Hpz4)A5_w2uP5pbikY<2byX*kCz^WBGGycNB#Bb(m>@wl3>19LX72 zYi>C6W+Wj!;1dMU?5)$U*pyqBnx!~YSeFJCc7(Rsd+;M;`gx|?V!bBBd(>FBlohVW zYP44suERv0;~zAypK&SQZktqV+)9gW0CEbYKVbf(ONG0O>lF=uD0A}jB7Z;ds4)V(u#d2vB}ws ztIF7H5-X!&r?N=97oIBRrU262@t;!|in(@*>C`Rg-93J(R)4xq)ZE^`v@>MN>z}B& zWB~e7+1Yf_hhN<6$O~Z{D|Mrd^`y*J@T+K!DDs}os!t#H-XKwY!JP012JJc(% z5Rxyvp{cikT@7x1T54gyT5-zA&|nkj!5~Ahf*Ag*4F#zIV^|I`gVcV9^ zLvjzj`_2OWnPc>wD2_WFEXa~42Vcw4WGzt}8_2?YG^3!GDzcus^hZyx_;x>QjGM`} zNaxslV8u?4Z1WHkuG=Wx-fja<+jJ17Ql9PJ`Q)|EU`y|uH;OCNBbL-WndMwluT>j| zG`KKsJe_I#yZXr(PaBmW)bH zuj9^rPFGxcl0LDlS+%(@TzdiOo+4rl$sk$vLSV6ti;fo7D%ZzLtHtpEhhB z-`LUJm|N>!p$9B?uCTY(wa6xwwtW^Fv*z@x@3ptDwiVj@r7uKvcR!^^kUSqTX{T_% z07G|1%bxYkPVsdGmyv{yB9UVzdOF4aZKUKGqRZXun+boi{(~v=?S%hK&8o)>gIaZ~`ze6MHvNg$A&a^F_1<#ra(zRH zgWB|+`t!SOJ8x;VJ4vcq%1uUB;4k{F^i=GV<1MLXqsBbZgo)>@S=NxY>_cH9u|4k? z04Ho6&E)YVDE&@iTi~oGQ^F6?Q=ApZao3Y7PBz$pNa$wp{$%~rNgRqBEpKicEb@@0 zvp!K+OA@ep=*pUnqO|Lx9LY_(i`bL#Mf4`r^h$u1`bS?hR0{EdB5IKsD&&t~+^9oY z=aLaC%I~)!=eHs1zu`r1Nr!j5RI`t+@ZjkL6Zi$uvAoIA1jFk*b1|*FeWilrW=3;z zL7)_=H<}rUa{BfWM45}|;m!1Y))l-EmK7T?leD7{HzT8bgx4|0ULrPwD}idtkV`$3 zL7bP6|C8Oh)Jp7YE_^ugptgWgB)gyxg=lf9voY9FLv?BY4=N%!g=KIPg*bN2je$NZ z#Qc!OyKl=uV`QfREG4kR*mzp=Ul7rxPP|p^`sUHyMR4aJ&7z`ZKet2w{^lk~+iYwK zfafQTJ_@Xp9A@WShcKUO&&AYZISU~|8@}ybCO0d{bO5LOY@ig$n4a8^0%zuJY?t7y z{;35_rKy^F2wOqN1U7_KkfnJPx3WYpU|4r4$rO>Qu@ z75`88Bt{)U;p3U0mm1PzjjtDr83NpV2a19Hi$TSUChN0kZ=*dhI(>o+g)q&`cWfb#&VQI8{nV?Z`A=xv{yQ{@#xv|qf1(}n@xP)y1Lc!jR`n+?{QngfZJOm91^Yjt zRz>))NUQYaT75o|t%Fw6Tn2#d9%?ir8w}#TfSTT)IM4no&UZf?Ifa*bngnqK{IDCA zaG?jVb2Q7{M;)rO<43~R4oC#5m*<1i!woJooFvlK(an4o9Z63f+0 z2jqv`{qS*X(2h|87!zZX#ff5Y{{N7NLkVW7MLpTS1}z8@g{Rmbz?}`-X2K2=#a#}& zbBXBtV|l{03DWNYC!FK~QlwK5Gm?pwh;qNo6AR3(No&-!2^!43Ntb?k?H}{L`Qk!8 zv#70oJz{}_e5o~LvRcMNOJ-3OiU#+?J>PM|4GHwqW=<10{U?IH%Uf!G!>+lJH4CPF zcXaTl!(xZ7Wp-zPe|J~7K`(bWXRP1#X{`;&@@ZSYkl_G7gu&oT&alTK2i;H^b?-$O z&-|m;%*FiNPDh=W4>mV>K2pXz?P$uc3f?8ViRkwI;R3{}LIDnpR40{3+iGNi z!?MvIrdnSCB?<(fmgiW?QdGkoMH_wsamF3kr>gM+`4oRO^za^S2>*E#ms1 zNFj(AJQ0HA;m%7Zj_g^oW^lmCC~=iN4r#niy`c|uzhBybXI6}o+=q#C*p3nD`mc|n zHJa#W_CGvR#I-ZliBpTcdR_&{EHS9g+lR;ZVjG16@V``k>7V_Pm$41cZtPW=&k%*_ z8xiXch0-;Z6mn!r%_|Cu3!hHWDyaNKrY!tDq32Co~x8}6aWh2E4eawa_Mz#JPx zxsUkCAp?ULxEmBe#L}B=BA;#A0*cj5&m}CjY6UsyE|sqA+?@mzG;*p_q82 zHDjHP=pN|ciW(usl(UV3JVzW&Q=IHZniivd-PoO#2hXWiV^oOD{;DEZM;TpzX=2_Q zeKVQ8pD!GpxA@!0p&OUi;}v2IHADtn5WhR;*NcqRQdtpA#7l~Y!l8vI77bTyCV!G* z0+i-cn2WsLF1bSvgkvA3$QUH~i8<5tC)g{2gd}mFO+yj1CO@~Cn!EZ2L?fioP_XDi z#ql)Yo7%conNMnUr#LptkS+(y>?7 zS7+6LDyXq0q$XV$>s9IRPPM#=+e6GoSw;)-$uJ@cTcN~8cTDz*m2i^^SIRt0r<35BcQw$ zT!a8*O!7mR-wTJJes6)G9>IFF-SPhlK`o8-s7Liustnp7{&&99%S8wP?BA7H6VzrW zvPC9@fd{qYwIBF;ZQRqau8>6lKOA=W(EMh!PEkd6LjI}QXB%=0^*HlC*GEP_DV#*r zQH+>OY;HR1lEypPR%M11E4f=z-DhX8QY2+F_^`f%6^?DrNU7NBOh?6bG}p`ql~-b)M4vJ(E=!dMlVVQ!ovM< zLOv7^9P&IccWnsh2|lHX_Z-IgV2Z^|^s#67r@`;P$A3g_qa5RIk1b&+&W6W-ZOvF; zliVFM$1m6>6;mKMYIYx=}EDC0V)e#(3>VvLU43FVW8=JTUVi83-~`Tvg@cw@{kOyk{ddn$4v3&?YK=I zF$MQnm-w)b{ifonI%G zjbwO#P}Gp1I$g%hs#n2Xh;nmX`82!0c~yr7RIM$_-8ARcB_B=u@<>x9CV8Sizk(}F zOc0mI*4@e-h&eKC;1T+QHK_j#Q@GZjYgb)tb!T^W#VA}C>7ARtODTD#z4h3@38qyl znTn3l(Nx&kc0~rLKFFx7JtshmL?&J%ZT?g^pkumUS~4+Kht#AQdu6x{3+S^8NNp*) zKyL?P2LU=fE|)sW>e8Y2uuc!kv=Lv|a|CtKhsPjGEq3qo192WxT*GpOmkE(+pKvzP zwhFU}5jwYaey)Dg*5~h}`Katu=A#^>r8_OFU=(FDUibvS>?Wcz#O0*2!MuTXABy5o zB7Q5bYyNS&B(s(GLqgK6dXPHb2PH2eMq&7arnN<#7$3&tyfvP@p?(EcT&~D>IZF)J zk3-plp~G+OU&~ps*uXi1vC1b%0Wt;J1(3S*_h2E&X0(logmiVB84hQpOZj1K@4dfG zP!^HB9{1{YooEtaJ*DZhwXZB!&t+X)y5{Z zhCkeAPwhLJaRDeez`S!^iE}=jQ#DoxJ*SzrvprMKpFT*(Fu=u5$83$pZk_EoWN(c| zZmn~5MAS)PBN#q;zy5;a&acAk{IteM!&9$%$&|GY7}W0hO4=RD5yt}&!9o1e zA!~h5`vn`}JP)T2*_s~O5d(yu>(P3qO*xoWZc_2^aR*WG2em|XKts2XdA9sPArYZb zr=zxD8dHK=B0xB5C1&S@B{%D$BL-m(L0&T3#$bX(s2#KQ=07x*furz}_WMROn!zvG&-;&lItlgMuCJz`{Z&o#U(fNu@_PvVn z_k;mtNd(G$DL{|-$9i*lrbq~>hEa^Mj4P+<3`DXdv5IKKaKX4W(SpWTm=&jwW^o)H zEN}zPGC<8;k__*?zJOf3ffhDc8|0Pb#8qwloh5>}$|gB^%R`RC!blH&Jx>5FqDtXV z0m7%U<|{<{0UMU_$#dH5jgTTIUI-31x;Q)aD~)2(w*uZlXp5POpV-Bp7CXWEK2mOC zXASw)>sKwxaCW=gNu|eYWy2;`gZuGviO6zSbgi9n$`?m!`mRY$s~UGK><7Oc z3vwkL3{}w;57{~^H%iAfMuyiQJ!!Wc`?MZBatIEHe}fkSZd*zU;9Ix&T=afdZSWS(qwpq#a+Mw#pvr|(`v$?S zo#N3@GiLt$aoD+j(`WDIbwze9s0eHST)pP*)ZSpmJsI(tCZB$dza6Qt_V9rUj+tNy zSJe|sUs_9)yOSoox3nD@bV3FiN5a!$574R-QaN1qH_GSc_?}2&>G(HUlj_wK~ z1+6~5{^&l#>~|d)qyiWYqlkJRuLZ@0wZ;tyI_cM}%G{Qg;;G6V?B{yryqNccLjh=A zFET_}7jOdg2fu+T zs1+d?7-d>-12R#XFFy)G3swwrD>y`iP|Hj#@+~;}pSt`lK;p?0B+85p21b}>l820y zW*~%u0NB^IcU)mXd&@QY)2S#ZR<9?obC8*94}7lolc;trAdV&ag<|{mI*k`7(jT%C zqj^T1bu;jkJK}LjNjXQi4M9Fbu@p~h-xJKGKQ>CSz<|_WOYi~EuyY|I=wc-j7rpJ8 z5!497+P24)82Y$BNTF7>ll_bJQyWd;$0clHz>UIQ__CoG%>tLVxfc%-UxbcO$Usyr zhM^l+fx{R@3*Ae(DcYtrf{N5H)5KMVmcdP3P>P^yZJJo!5GIF~^ZdpA3!Lq;pz2$D z5>jKa{t7ulI}Z32fn{9u*XO$t$ZPGN+UPx&VqW;4NvUTee$q-x=SA<+Hf^bAUL!%J z0i5*A(PY0gT3n8P$}LgHN!m*-)t{D5jO@SU@}sYD&e2#FJbMV=Y!7ulf9N*MU=UR! ztG?V!#9HW{eBw2M#;A?hg2Y`lnHPZ;IzbNKto1hE^PMh;u-CgBMJ-+>*&tP)A4zdj^1QH>ZS4p2%SUBstPX* z|9U#p37_Pg_0}~ER%x@`_Z5hpo@N;s;pu7bi199^>CVbuTPmt)*tnDrajVbu+1s6( z*I5h50Y5v};!UkG+x2ezra$Wg?zX$~!)6whz@Itjve6}m>}&8=r!d^{_FeFsF#uPc zEOpfo=`(nv!|?@8?N8nUBuy7SjmmV>RaeiWXT&K>1%`0ucaE&FS0!Wj3Zg27<#2so z+uF8NYEO0E=KAvfjDB>bDnjQ?_-65n^bf^=ilI|**Ah$jboq}MLUGxCoRVIxv8@u$ zP7-*$Fp*70u{2FhnVW~${*klH*~w4X2zlw$Fa=ZT+-+uo98#N5lN#j-MXnfgZ}zj7&ZpQc zO4x6F51H>e);yks(X1Qy&^CpkN z$9}8^zN+cle#?rzzV>l}#fi#$_GZ+lvK5UnGu;X2cYw8_(AwCQ1o7C6^stgWisY4B z9Z+>r;XchUeUFMha!9=+>!{OdvndM?=b_p1k=okBwmeQJVZ#X5DoUp?HsyNGeYmLA z@0L?3rlN7GLgS}!?(Oczv=e5Y#n8hYp06mXx8`8ibo`7BHMUW&L$S_BdQUf>UnIbZ6c9+*Ubm6(3%Aubc=U z?ul;^{a$Woq^C)u=XCCW3G*vyW#K4h-T2CA*;pE;US`o&6sf0KvbRlJSrR{hOnYqP zJ*oP|?Xy`x^VZ??qSWn^-w-cf#BQ{bh3M_)3-B><6nK$VYe)3kJ#thE-%;|iSPPzx z1$NYB^l&cb6q0z9KGvPDw%;7w-9Hr6tm3WPPs*!dH_5NQSXqrpAp0fdJ;CPn7*Y?s zML3opnG!1dzZGE8uqogzA_Bj{A-leP_ z5rAxWa5%*&#awFRPV#Vl2Ym=UAW71EsrjTd0@NroS_x)kP!K)Xoi&9s&U+I&mhQ8+8&0#)WE>@dY9yE^IU5~n*)vrK} z(;D}N1+tXWsQQMHB`jf7M=hNazB#7a?#`k8!+3k)Ekhjcxs;9SQ?m}VcbxC&}!}=u7!DLQglrOLHiJiTP)IZiL}E=o0WF z>pnM*2+WDA=eObyJSI;?WKyp;d=u^oq>*6op;chr{Ca1=j-UKC;2~g8B4GQeh{0gs z7`;xA-B@4}U?T<|r2_D1B5gVSq$2%LENl9X&|v7j&eH3&O5jk+4k;{f$}HeW+|zpC zB2Z3i07j2-0x%FB%mRno3lhitN8FcM016J5joKIvBLELv2wXfKY#dtz&KL@f#Z<8u zjtYz&!WTk{6g-(R0Ie5Zq!->5LeUt4g`$^w3yLzJ9vTe-7ZNHu1A`?LzBd{yFMw4B z%mR@ViUk}lorT&M;x8!%h!lX`i$)%giM>`;3pd;UoeWKzRU0X(8C(h~AK&sKRD6%c zm7g#_EaSxl9Nx5V9W4q>G8!KO9JZE{${sQrj`R~ltB)x$c9LB?CC5kOKoCwF&-F5zm8dyf#$_r#u2u>;yJp z_LHkO9PH;vP=_!!I0POi6a1G+g{A^u2al5gmhqh zkJ8(eQqwFz1F$$05Tn%c=OFO$FOA_XC*Ymiwm zAK4ez{OS>&$ZSD$(7oJB?_&aqe!HmyyYPe2zsIxw%u6quAR|E|^MhVm1`g!hy$E1n>1lGw z$X0;$>>6RVG~?Q&syT`?MhW3>V6wP1U5guuok3TJUR*I4tPV}U8PnYTp&p6u@P;pI z*B&$4VRiBcEf0ccMFouSCt`bAQIf#)X$f71y>ttFoZT4vxmk$ z0|^hmKGtPZ%k%Ek%A+9Pm;xzu>rD<#+dTpPrUU35#@sk!D2yGtZ+=|w$)6;ywRkXg z!zd>#Mbm|$<`~|I4=@s7J+AaAo#}#r`fvvPj+ObH$PjLtpe?=dfn zm9o@EcpvKDQKy#s`y>o-)aHlnl}^chy>8RE;^(AJeAr@*_0bf7&=V!;jQ$m|j-XS4 z+Vr@^_KfkpT;RCK8h?F$;rcyie+m{*v~j{Yzc^i7zezZ?z5lLw6&w&nXzzz}b6H^1fVlXu`5oL$rLt+L&w+ zVO}a0Pd2Q|^^{|2mW%JpB?&s#_>eEZ{&)>TXd6wc*K=0#ld9r}j%QqpYn2b}{>g`5 z=&3Wwqw39He@W&-Dba>I zL&XyTN2#7+RAw?LRw2fsN`Nq$Csc4|$K_c?LLjE}*Ni2g&1e=`Yw}=-PKHs^E?`sj zvN@lV$qF^O;V>~<5Q`TBK+e_6OlhUiIJ`e8!pokvH>tj-5WWo76Q9lc13!%&c7M_! zkzFf+oy-&xDCROOVXHrFpge7mwzsD7AE3naJC<-Hsce_SJFaEZA=)lELXt9;X?yqO zwQI;d0h(ezxq8@AV@(>A{aZ8Pc#?i<4KJd%XtO<_v%~x0Fzlg^M9b(6Ze#P^?}6;M zdk_h#39;uo>DX~O%ag3cHgk=|`@rLcqfnplLFbw!^FX5f)5o{ML$@$ z7LM{lM>hks_4IPQuLLTMC~m?$iu*BO+qsXAN~lz7anE(ZcG<=P((Z1p=bRnMq9J7+I! zSl23yOD8DHj0DO1ZTCn%m0R~5I;*^RAj*#}#4JLFDAOK{m$6D{VMe z8Jh&e)1L91iCNahE3MlJiXg&2?R708V57hRGJb~7F`1))t%*z8tzZV8391G)?Ls39wGawnMa_JSQ|jAu9oxSl&6;r?KfJ+=7E&K9 z*+7tC;&Z&3c#wf;T>ouq3v6_ z5*yAtOujj!)dqYI|1^Qe^)3Uy7>iT?E>H>-R_X(jkhIgCu7#G7t99>;hyTsH58;i# zMM`Hn=Mowt^2emFl_E2=%(H4NkSgd|sqA*Ji61J7n9bq56?ublgFc2wE;nYIsKqB6 zpBae;=!+gC(~n~E>WhM`?JQp|wxCH`t$5njpnptohnD?g0`NLdt(sKr={Zjv zba;fwm#-!bP7BFGwh{!HLO+`A0-X^=|Ce9u55FgwRy^-M0vogz+CTnPlY;!aID~2o zS_84u|HHmnjhJSYjm(O5Ih?Q97Nozwn2!QFY#-z^wFMETIb4c^Mo(Kq~e4OLj=?I^7)A&{duSZ4m zB*5i7iPs~uMH2o$JCM+i(Cs6gql$@!6ycmnE1k-mb2jPyO`vL}UC~f~ zds8l-6db*VWZd=HZ@_!f)&rw_#3%L3W`sSc{Ev;y2qq|ar$*-I3ye0%Vok;nI zz5SRxxfz0c#kTp6#bfM-o!+ApS`c!T%$msA$_yrq`NRGA&1L6A(XvQa}!-c5{l^vL5dc zL1^}sW~_%9sA$Z=>MV?2T`|`=7Olj z{s*^|VPIiW8~E!y+En7fau!q{+y-A&0q+G3I#&4}4XlRA7p%Se2sf5bMtNsRHTQvjZX%vbJ3o56O2<6- z$bJ}kN_FP(n%w9m9;h5phdj;j_}x49he((x0JBz48g4rH-!H;$Rwr)wJs!6kfEww7 z38xH&eG|wgWI3MG1-q9HDffXLk0)d(a1%}dTr1ZZKH%rJ0lAyruJGRgN5?H?qpOhi zff%Z3xSxa) zFogn+iIvgeJ`+YKz!3U>tE$6ZDRAPpw>#JIyp#;jf_P{F%)=l z8eF(`pII2}--|wQZU%0+4fHY=tQp?|Sc_G16YLcnyc!n=_lv_8gSG%wBz_dK_ou&3 zN*$4*`E4|&Y77y&9c~sYqArp7nK1#-XpwO`Tnjw$28XLnmo@-8(G(ap=DQcKTh` z=DhCvT}F&PjlP^DNrKI>Idx5}LVMcNkAu1>&R0!FBLtAk&&2~DU@ug7hrqq88n!-0 zId~G&K93B2j>ZrUH(WCTHggyWzsUz7wRiUbB1cT?gxC`I8Q%ISgb$C*+RR~+jh;H0 zs(r1O1fVTA@_(4Z;Y9(hx-IPi95{Z{)&j_RorSNjsqDCH%+b66;CKcKFE(*}6n$O{ zgV{C(sv&c}^RV@xjt(aldrN4~SNLuyU$#2qppzs&m#g8Skl{fNI_q57ZSri1JbeZ& z#31S$B{rVt5iQ}u+mFnP$kXGK09l63o&GU;+tK@K3-S;6*k$tZ!8SaA;+_tf=s3y` zB9^jT4`%DU@pzD5Wf})IQ{duT;gp#r14PJ`#{(yE(J)0@9y=zWWCSqsi6iq#!4lyy zT}atsLfA#q{^0%OB3+oE83hqqST-{e9*kQRs8q)&D~OITavHb*bBM2mqtW2o3bP;I z&e;NM|C<@`hk6>y4>NF|e@Ufeh@K7wQU-{5d34fvxa5E7Bat+I zqPS9EIsX3@mfp$O`u@M$0r*cB|Jo5Z#NOBXzf1qW!X!~vLA(E7@eqZIdzxo%o?3qr z_7%urNi12!z9d)&jOVkOc{0IyNm(XO=|R5={oaHjLTk9>%Gt|%?q#&`t_yBJ@(5yI z_tM=jms@>O!=lGq#6{Je8f`-?xzH|& zA!M%3+++tF>9>1+4{5Ohl2fcSH0!d4uXSIT5vu6)DZM>Cbre-)rp z{8f-3`Y#1uN^z*BFA&6yK%J|LR5|(C4ugPP&n(4jMc7$EeVaP~ZN5j!S8qk9n*c6E z$K8NMScg*1cR1~v3V~f2?@SY;*~G8JYMAS_U}=BZDN_1&oz zWB_N+l^CtXOxFv9CJ`q+L1wC~+Y7{(p*7$72aWg8_b=XBP8YQ3P5;-ekQQOizfR^q zGTeeYhgJ~2tNrI*yul4-UjNZCA}aR)VO)?75U^$>P-ZsnRF*q(zUU6nke-qQgq7^8 zu6KhOuyW^}b{Y1b<|$qvocl=@I$*3zIc0^mecf7wcPTYAMgoOvhBxILdf18C__?j+ zZ&1Rv7Ly%W3cd@XX}9BmAr1i{3vGV|c!TeLRh5hLd4R6u`>e^w!I*Y@5B)o`?aBP& z4#M)U7xW+8{&->eAOEP4KW==p1-XIy$Bn1Xzi!~({&hpTU;ZCA-kBjj|Dz*>t&<^? zdkDO3!is(JU?YH=Dq3+M{NeRKra=G9YqFE7sHP?SLRJA3@u0m;*DMRii{vkHC4Nml zG5iKfn*9FBLzo;kbY9Dh!mNIOb2B|uBq00eLdjY6^O&Wjz~s#&Vtl;%Si18iW7L`$ zUCJ8*D1Yh^8?;yRZo7Eea?`LwhVGsaB6m@}af!cQLi{#&^tv^CtH2hO=NFL3h}5Uoh*>>exDCw^7jn@8TGjOZwxK z`B^bR$O~v|jE4;xwdS-=RHTo5dQ;~?Po{N90uSW4=r3Cwd_|ujpF<}uo#7+LMjt|R z!z_u~B*!a!(1U&^!y7zKJDs9+P&AJwPh89pqn)M#q!O2r(Os4ckOG4vi{)tep6TZp zL^(po5ys19`fz^#7BNof5Rm;&hkX_KQNfNX=$hQjPxgDK)F<_#?MH;U)rtY0IG;^h zY(3@V8{S-O6P0yt4u7GqlA{H&TS}w1q~Gw=hugwQsobR<5+bhJ1BFh6QY5=&7cM$0 ztf5>G0m&4NMc_?$VSz-vuK=nkkvKwO2jhf{+5F~YR2G7i*T6~}vAlLF8rzblq|Po& zCJWuDRX=kEUStwK56{5$>&_7eRfevFw%LUk+dxTO7J}qz_AysvKlS_X$GPcKK$Ueg zPmKy8@p2O1mPH{%B*6?WK`twuUlC^~#NY1G0jj5OsgfcH)(v5fWJzrZ6R%&6eYAK` zNS({30@|0DCgV1GIIs5IyI@h6Y0gMh2#*Z zM8+sSHbL6B(+8mfUB@C7!h0JIc5y8Sm)ssV6K>#uciUtfgj z-yr|ptN2r)*NGPSMPR_dGSas1kl8>>F;_udh=-crBms{V43nM$yI|`Ua#@uae2#+8j zQR{9#RbP<2{MahCteu;WaG;}0DmV4;6>Tfe|1^~m>4k;7LO_i#&syPn7svq6u8Sr~ zSHCS|io(~m(-Ku9*8nCjy_NZJ)DU++m0Gs?mmHhs$ zX;D@GdF;kf)#=A=#{vQ|`E_jhjo99U8C^#DP@glJNJEzkXgx~%Hg8HKOLc0UkMDt0 zaF;3dvvT;zg&^2>ST>9w#zk;|)|Da{FjZb07t#Ep3As9GmBs?QNjY5>#nOqyVM4wY zI;TR}E^V|n!l_cbzDI+8*}BSQviha2X)cwg5tA*+;9xhFnI#`UHJ+fdY~&7p?!l9b zpu@)P4U^FUv|mPFyyh_tHI@N4O5jnK7`0p`)5UMYIq`kPFZ6qX4iEAG?qMZbTCg9k zDL$uP`#Puu4DIU$E0*{lRVt?1x;F++?6ZGI($kU1I73yShna9J(=At0EAihc*S6*R zOmOiK1_bD-*5f76R!K14-210f<*{Adnj!Idc85K_qvf>{4`QwH{J5LqxEFX3Y_xI6 z`EAPPKy1xaE8lB2WpvgASeG(vS0aX^A6*I}CS?Bt39wx*8DL*RT{0N>{TA_}=d|N6 zP3aVzG&|)VY}<4QQC%B-hDF61GD#r7)APsgzbb3dI8Or_iY;n!@Vrd%z99SfW_)ZhN<68EGC=t!6E z%Ot$QZarfW#*Ic?xFl#?jDM5mVt8r6~`Ih&46gwZ+J@$(0S!*R* z*-BdQ`PFZnFV|dy`}z~F=tY6g{l9*r+RMPle>|GT7Uy%|1QAbY%_=+H$F*`lGrLfdz4G3*nc!uaALPIaA&0FizWnp1G}lx{$!B=!5TswKC!>ru^q zpH0cW*0XAg7Pcpc?y(vg8(*-8WNq%x8x=QpAt2u7hwo0C^(oUJbLB3|ee$idk*UUDD@R4TS4sWlQ>5y}{_GwcChp4^^=Y=JI8RAbhyN_fmlj@ZopomWm z$pK<*iBG;b!<2MyZgqLF$A?iFj?O$0_~hV+qBiHeIQc1W@D7D~M#z(%Prg~rS$09! zUksSMLLnpn553|q!+?fv{TKB9e?kN5zo7R4wCf+}U&vI8{!K6xa&zv#kg;))|Iup{ z`Cri3SpC<+zE$K7-vC$Jl?S8Sv;_eP=w}8w>pu zzVKtnxfjZ*1W&l$aJ?^0fm%c|s9`*KeS?*dYvnXo2emDG4OSgqp2Tc+f2)3s1-4kXrxnQhrK@QPSU72Tp{X(? zDf-0WDRKczl;Kj)nUt_A!u#AxJ;y9UUm94aAE+X`$$HXrk7k|4n!YYXy?p2GYBKq9 zkDhLw-BIZaAM|1;k(*t~)klmDvz)Eo?dBIo%u-Pc#f5ASF|Vp|GGm{f&v91>pSx%( z-doGS3;7sHDu^uN20Z4Anx)sYM8&FkO3JtI_+b*Q;qwOMycE*iXEv%%yZ1(!B>O=* z&vMa+s<#B!rR<~Ebk2VB9X`-`GOVW}nbSVb-1XW6%W6R>9yjwceL#K*{VCQWHc4`( zn5ywaV;{?M7kjEkO`B;~y<4=dJdUwrx^2Ou3gHG!z=N@6N?n??n2-HX`)VBK_1IGyMpSXS)i;U0c)-WE8^giE@o7qW|K}Ge&)eV` zwec1D-6GmeiX(ZYewN}pW2H<}rFwzI_ik@rDhi}b+bkU29nLIL;SjHsNgKrtvGlIz zCDBWM?~nWzTP&=vP@SW5&RaCZS5S<}_o}Zwo@oX=`SbW3Pv$`-uD(ru{pP}V)WWft zr|XSj_37FA$LB`KI=eFl8{O;{M};`VR%6e4UeCaR`n&e+B;6g?pDNi&Hr~{rin4lD zkb#vIJ{m*PoMNMld2m{b{PY`Wb5YR8qF6}%FbFAUW!xM)|MEZvzDvsT1CICE?m~XP zwEhg1fj zG7p;)c4IK%ysQ@VG4fHKX^T9;Bi3;FRb}>Tl(UHK{=E%I)-%uV)vglPBExf2+eWGb z-nk8A`gx+)g2>9lA>+wQVfZkMh`?9G+Hq^I^6xpgUt|^OgIF9?c@tZEM*`07%1ifv zT_X3q8A2;w9)w#qe)vX}yn6m>lPZNz+0)})Oz$|JP5tfj3c*caM~qa`IIfeYa&STG zqvr!Rv2SZkaB#YL8U*KvjI@S{k*gO6n%kJZw?2%wpLwv^lU;lMYGaUHZ^OPrCC8qq zj^_mbS3*L0*WEWqZ4EiO+v?P%71I+JvJ$>7T3zgD!acn9^sCth_Rd=-q^|lg+q~Cz zRdtf}Bb@JlT`Rtb{n9f8W%a@p@Ec>SnLh7LsFgtry>K5r|F!5g&mZG0*^Mk;y-qDU zrt&^c?xv!F9YdW{=WcS%QpPZ2lYXf3yE=B;i0u1wT!B1p%)s`d<7U`P>nUx1c5=_M z5k9>DKZ^65+UfmI7fiIE>NjwDU8LR{%ia-^I&*wCcJp+ODSRSN^QtbT)2|FZdrv36 z)KV5v@XdbAUi$i>0_BHqmItH~)i>cgvS$P9-Rp5wq*`B=h2=nBzi4L?-(L3^w%eqF z7~aCAFvy^5Z$agk;tp|g>x0{SHe%0?R`V`-c|;xls1iIaVh+hS?Hfd^(2j&>KjNC* zy{Gh{fzWeFYs_e@WY#n_Pl)Yn&%WeSckZPaj<<8mqg?vDE;22pto=Uv-y?$g2ARHC zXg;t|*}<-ppB2yw&Fk)2=<7Ir-^JtWE>=Kbso0Gx)m$_VJjniZG6uIH;Z?Vy(ZG8w zF6Kg(1m44Jwctxhmm*5DK-Ct*-p+*!k?|_o)vgb^DD>&cyU1g^INLLC5=N0;8#1bX zpcT5HnU^vbaobKYWPUO<)_Y`jfQdgBb*OA`Qo#U-8|GcU~Jt;n|I53(H9{(nW=)K@N$jo6J zJWQ9y7dW>ZS+qx0gA+LK(?(LL^~4-KQ`%=9O^nJ_>*pQih_$^?AZ5oN9jd|R(aE(Z z>#3?)(tD*;Gzrt+o73NB& zs9d8t5Ev+%b7U#AexU&-x$d>yc@JT*b+k*)hcJYsws1c3^{#^gWfDzn-z@c*v>&n9 zMPlZn9ujt~n9v>dpu^Zvr6H5slghAor$qHR8SbeHB}!N^H&n_4e8CgxdA+1(;;g8XIQ+kFJ=srm{&kFGK7H$6;`B8Zg6PndKHmA$AsX*};#ink!* zV_f)Uy{RO|BlRQKgBv&u55+^1?HfIwMexT@4*1zSTJbv!)%Q*1x$1qvUN6m}Sm&IE zIl2<`skU#WuXQBxhx=wBHbsyE5+j48I^TU3FUUJp;xouAh)WWSR$%#__kzV3f6!Um zOHEIkwLBPa|Nk%cXwgO_IQtm z?HpcB&Etfx5k1#;I#APm(q=K1A#vt)gt%9Qt(L@~_u*>W&c#bpU;8*1k-EtZSpKTD zef#_! zY3hPu7FL38!U9&@^LyOJPfq&~;|eYzWpM>#mjwvZDRz&QLdtvZS3O4xA3BZ)lp@lPkR?#56*}?&;x&t$H~sQyN}A4SkN8z?r}wqocM+ zj;oV}30J(#>&=Bfa+O&f#i*G*h`IjI_oZ+BJtXmH{h|fciuX&cg;76-u)uTWy#DK9 z!;8dQOUZ8AdOrF4?F&@(e6H`Y1X%87cFubvGlSfZFIN3yrb30QAEVpp+aO%mz-|q8 z)W(j}P#gt<5_#j|C-h#87Yv;0Nt8z2k?*VXw5)-Lwn<)QJnW(!lGUJvh>yn4uYCC-Gp-^%Kn zi7n$Jg&ak9T1}-xjm<9QvO@E{G+UG8tq>lG(yPo#6mYwP#&QRzzNToXc?2?C=Ok;}J7A?OIF4(Z4s#v{(Z(orpIU2|8 z>9llC@A`E$oKZdg8#K7z3xdA!)vCsZ9eB`Ukn-8*N0{j|>GGM9oLw|ninh${>)ehu zatqM*K_WslB?UYp*l-*TNifbWc* z4ZIrEEc%$}TQN>p6R9oVjzHE*8&%f{)r^>PHqUDi6esN&ZmP+g#(6 z4UZ~{1hKhE-jBYYl%pfs8>{=Y^sd**JE*C7xqBTMTlMJ`iy7PcEH>piUc4DPvevv3 zng07XaNoZ#8!gS6Y#}6lieogHsxMgDU!EwJr9E?mJJUq@_2}jpF>|x>3lN_)YjqYn0Ld`K!k{e)*sUaWRU zN>BLn&hQe%O!o3tFWb92JY+pWHgu;xL>3yC?Xw|m!_qa%Qsg(CQh54tY;euTnnm`X zG15kH^nVY@Y@Va@W3ARkX%dRWIx>&N*=SISt?Ykf4XSePIX1*ap ztmWU*LVh?~SG^GV`qM^nc+f@PQhNA#Kl`uevE{6v@_iEEs0iL&I?WuqXF9rkNu}J~}%?^*XyZ&cp($#$`vLEVvW9zt6@1^kOFl6f3Sm6D@ zgD{dcaUUAY>=Nwd&0~8PV+OIxg2Q8iXOl-4LwmlE2&}jMxr_v5m+Bw)!-w#GUPhjO z*NYDgt-{&BW#sRB5sF==qiU!1>bz5QhFUI+du_0|TXY>bI$LYi?SGZ9-BHAJXb7w> z*iFjXY8Tw`$$p_6uh<=ZGeS0QOo=Jwh^W+BPnrH&UmGKlfZ~knmBVunRp~V^4L-K^ zNC@p`v*do^$*M6kL>||htW~Bw*`K*(Qv<%UYS%Q}Bp_|l#4FNJ6;P)%#SSeu3Ba#p zpJr?Z&yBrFRHe7x(k*^|Tr8z*@@}`?Zf1j;ROtiVt{Bw4Lqw6}AlgVBL-O&lf8o&= zPO?iG!g-Lcn-G4)q_F?o-Pe_qvgQcF42>BHEj8^Z{9arGc0-+k0fr)5sSoDV8P%9b zN%GAqUPiJ-`&Uy57Y(!ZYnxxwUwzvVz|CovS|0VOcBm%Z(1-L6`HXjkMP_)5>*e*+ zxtt62KDBD8E8p2W`t+Pmw+r>_L?vS zHywzRtsHT&M$IPStIt1FDr5xHHyjE+N3tLZ;EoFWFmJ1v$!amC-6FVxv4^qo{RMA` zY5q}=_{uiD#)Ozlqk^pKmX=+idfsHtN7fvOoLw(PcgRC`{QkV_=!1j)}z< zyHRiE?7DuKw)3M6<(UZM%W*z^GR}95*b|4I)y`~D8C-35797&EcBZHK?il%AkWwhP zV=96|n8-b1tXg`w=ylT&xTytLi?#5(_>=V8r5j~IuHQc0Uf=igsgTQF0zmG

FOu55@z(#) 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 Q_7U*AV(4?hLjBzT0N{_7a{vGU diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/multistream_MurmurHash3_generate_bitstream.sh b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/multistream_MurmurHash3_generate_bitstream.sh new file mode 100755 index 00000000..7096d86f --- /dev/null +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/multistream_MurmurHash3_generate_bitstream.sh @@ -0,0 +1,35 @@ +#!/bin/bash +TARGET=hw +# TARGET=hw_emu +# DEBUG=-g + +TOP=workload +XO='/home/ylxiao/workspace/rapidstream-cookbook/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/multistream_MurmurHash3.xo' +>&2 echo "Using the default clock target of the platform." +PLATFORM="" +if [ -z $PLATFORM ]; then echo Please edit this file and set a valid PLATFORM= on line "${LINENO}"; exit; fi + +OUTPUT_DIR="$(pwd)/vitis_run_${TARGET}" + +MAX_SYNTH_JOBS=8 +STRATEGY="Explore" +PLACEMENT_STRATEGY="EarlyBlockPlacement" + +v++ ${DEBUG} \ + --link \ + --output "${OUTPUT_DIR}/${TOP}_${PLATFORM}.xclbin" \ + --kernel ${TOP} \ + --platform ${PLATFORM} \ + --target ${TARGET} \ + --report_level 2 \ + --temp_dir "${OUTPUT_DIR}/${TOP}_${PLATFORM}.temp" \ + --optimize 3 \ + --connectivity.nk ${TOP}:1:${TOP} \ + --save-temps \ + "${XO}" \ + --vivado.synth.jobs ${MAX_SYNTH_JOBS} \ + --vivado.prop=run.impl_1.STEPS.PHYS_OPT_DESIGN.IS_ENABLED=1 \ + --vivado.prop=run.impl_1.STEPS.OPT_DESIGN.ARGS.DIRECTIVE=$STRATEGY \ + --vivado.prop=run.impl_1.STEPS.PLACE_DESIGN.ARGS.DIRECTIVE=$PLACEMENT_STRATEGY \ + --vivado.prop=run.impl_1.STEPS.PHYS_OPT_DESIGN.ARGS.DIRECTIVE=$STRATEGY \ + --vivado.prop=run.impl_1.STEPS.ROUTE_DESIGN.ARGS.DIRECTIVE=$STRATEGY \ diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report.json b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report.json index 4d40a0f7..e33fa203 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report.json +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report.json @@ -8,7 +8,7 @@ "BRAM_18K": 0, "DSP": 0, "FF": 41, - "LUT": 209, + "LUT": 204, "URAM": 0 } }, @@ -20,8 +20,8 @@ "total": { "BRAM_18K": 0, "DSP": 0, - "FF": 935, - "LUT": 5078, + "FF": 1065, + "LUT": 4853, "URAM": 0 } }, @@ -58,9 +58,9 @@ "source": "hls", "total": { "BRAM_18K": 0, - "DSP": 14, - "FF": 1034, - "LUT": 515, + "DSP": 15, + "FF": 1126, + "LUT": 601, "URAM": 0 } }, @@ -73,7 +73,7 @@ "BRAM_18K": 0, "DSP": 0, "FF": 138, - "LUT": 635, + "LUT": 625, "URAM": 0 } }, @@ -86,7 +86,7 @@ "BRAM_18K": 0, "DSP": 0, "FF": 170, - "LUT": 297, + "LUT": 285, "URAM": 0 } }, @@ -99,7 +99,7 @@ "BRAM_18K": 0, "DSP": 0, "FF": 394, - "LUT": 419, + "LUT": 409, "URAM": 0 } }, @@ -111,8 +111,8 @@ "total": { "BRAM_18K": 0, "DSP": 0, - "FF": 55, - "LUT": 146, + "FF": 68, + "LUT": 164, "URAM": 0 } }, @@ -122,11 +122,11 @@ "area": { "source": "hls", "total": { - "BRAM_18K": 4, + "BRAM_18K": 64, "DSP": 0, - "FF": 784, - "LUT": 3449, - "URAM": 4 + "FF": 828, + "LUT": 3778, + "URAM": 16 } }, "count": 3 @@ -163,8 +163,8 @@ "total": { "BRAM_18K": 0, "DSP": 0, - "FF": 6011, - "LUT": 11050, + "FF": 6037, + "LUT": 11067, "URAM": 0 } }, @@ -173,11 +173,11 @@ }, "source": "hls", "total": { - "BRAM_18K": 12, - "DSP": 420, - "FF": 189355, - "LUT": 533801, - "URAM": 12 + "BRAM_18K": 192, + "DSP": 450, + "FF": 193183, + "LUT": 536043, + "URAM": 48 } }, "name": "workload", diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report.yaml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report.yaml index d21fb2a1..a43629b6 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report.yaml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report.yaml @@ -10,11 +10,11 @@ performance: area: source: hls total: - BRAM_18K: 12 - DSP: 420 - FF: 189355 - LUT: 533801 - URAM: 12 + BRAM_18K: 192 + DSP: 450 + FF: 193183 + LUT: 536043 + URAM: 48 breakdown: bloom_aggregate_SPLIT: count: 10 @@ -24,7 +24,7 @@ area: BRAM_18K: 0 DSP: 0 FF: 41 - LUT: 209 + LUT: 204 URAM: 0 bloom_arb_forwarder: count: 6 @@ -33,8 +33,8 @@ area: total: BRAM_18K: 0 DSP: 0 - FF: 935 - LUT: 5078 + FF: 1065 + LUT: 4853 URAM: 0 bloom_arbiter_ratemonitor: count: 6 @@ -62,9 +62,9 @@ area: source: hls total: BRAM_18K: 0 - DSP: 14 - FF: 1034 - LUT: 515 + DSP: 15 + FF: 1126 + LUT: 601 URAM: 0 computeHash_Feeder: count: 10 @@ -74,7 +74,7 @@ area: BRAM_18K: 0 DSP: 0 FF: 138 - LUT: 635 + LUT: 625 URAM: 0 loadBV: count: 1 @@ -84,7 +84,7 @@ area: BRAM_18K: 0 DSP: 0 FF: 170 - LUT: 297 + LUT: 285 URAM: 0 loadKey: count: 1 @@ -94,7 +94,7 @@ area: BRAM_18K: 0 DSP: 0 FF: 394 - LUT: 419 + LUT: 409 URAM: 0 packOutput: count: 10 @@ -103,19 +103,19 @@ area: total: BRAM_18K: 0 DSP: 0 - FF: 55 - LUT: 146 + FF: 68 + LUT: 164 URAM: 0 queryResult_per_hash: count: 3 area: source: hls total: - BRAM_18K: 4 + BRAM_18K: 64 DSP: 0 - FF: 784 - LUT: 3449 - URAM: 4 + FF: 828 + LUT: 3778 + URAM: 16 shuffle_TtoS_per_hash: count: 6 area: @@ -143,6 +143,6 @@ area: total: BRAM_18K: 0 DSP: 0 - FF: 6011 - LUT: 11050 + FF: 6037 + LUT: 11067 URAM: 0 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT.verbose.sched.rpt.xml index 9bbdf624..c8f63d42 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT.verbose.sched.rpt.xml @@ -1,7 +1,7 @@

-Fri Jul 12 15:09:47 2024 +Mon Jul 22 13:45:05 2024 2022.2 (Build 3670227 on Oct 13 2022) project @@ -15,7 +15,7 @@
Clock, Target, Estimated, Uncertainty -3.33 ns, 1.972 ns, 0.90 ns +3.33 ns, 1.820 ns, 0.90 ns
diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT_Pipeline_VITIS_LOOP_324_1.sched.adb.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT_Pipeline_VITIS_LOOP_324_1.sched.adb.xml index 0954d88e..07476f54 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT_Pipeline_VITIS_LOOP_324_1.sched.adb.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT_Pipeline_VITIS_LOOP_324_1.sched.adb.xml @@ -158,9 +158,9 @@ while.cond:1 %specpipeline_ln0 = specpipeline void @_ssdm_op_SpecPipeline, i32 4 - + @@ -173,9 +173,9 @@ while.cond:2 %tmp = partselect i23 @_ssdm_op_PartSelect.i23.i32.i32.i32, i32 %nu - + diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT_Pipeline_VITIS_LOOP_324_1.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT_Pipeline_VITIS_LOOP_324_1.verbose.sched.rpt.xml index 7e30d8a9..23224075 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT_Pipeline_VITIS_LOOP_324_1.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT_Pipeline_VITIS_LOOP_324_1.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:47 2024 +Mon Jul 22 13:45:05 2024 2022.2 (Build 3670227 on Oct 13 2022) project @@ -15,7 +15,7 @@
Clock, Target, Estimated, Uncertainty -3.33 ns, 1.972 ns, 0.90 ns +3.33 ns, 1.820 ns, 0.90 ns
diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT_Pipeline_VITIS_LOOP_324_1_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT_Pipeline_VITIS_LOOP_324_1_csynth.xml index 78ef81ae..4652883f 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT_Pipeline_VITIS_LOOP_324_1_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT_Pipeline_VITIS_LOOP_324_1_csynth.xml @@ -18,7 +18,7 @@ no ns -1.972 +1.820 clock cycles @@ -48,7 +48,7 @@ 37 -153 +148 0 0 0 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT_csynth.xml index 86bdf916..874187b0 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_aggregate_SPLIT_csynth.xml @@ -18,7 +18,7 @@ no ns -1.972 +1.820 clock cycles @@ -36,7 +36,7 @@ 41 -209 +204 0 0 0 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder.sched.adb.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder.sched.adb.xml index 257bc3c9..97429308 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder.sched.adb.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder.sched.adb.xml @@ -803,9 +803,9 @@ entry:169 %call_ln0 = call void @bloom_arb_forwarder_Pipeline_INIT_LOOP, i24 %bl - + @@ -833,9 +833,9 @@ entry:156 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_HASH_ - + @@ -878,9 +878,9 @@ entry:159 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_HASH_ - + @@ -923,9 +923,9 @@ entry:162 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_HASH_ - + @@ -968,9 +968,9 @@ entry:165 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_HASH_ - + @@ -1046,9 +1046,9 @@ entry:170 %empty_106 = wait i32 @_ssdm_op_Wait - + @@ -2639,9 +2639,9 @@ entry:104 %specbitsmap_ln0 = specbitsmap void @_ssdm_op_SpecBitsMap, i65 %arb_st - + diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder.verbose.sched.rpt.xml index 652dae3f..9b35a6de 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:54 2024 +Mon Jul 22 13:45:12 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_Pipeline_INIT_LOOP.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_Pipeline_INIT_LOOP.verbose.sched.rpt.xml index 8fe034a6..922c550f 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_Pipeline_INIT_LOOP.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_Pipeline_INIT_LOOP.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:50 2024 +Mon Jul 22 13:45:07 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_Pipeline_MAIN_LOOP.sched.adb.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_Pipeline_MAIN_LOOP.sched.adb.xml index f50d5fbe..3b9a7b54 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_Pipeline_MAIN_LOOP.sched.adb.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_Pipeline_MAIN_LOOP.sched.adb.xml @@ -353,9 +353,9 @@ newFuncRoot:21 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_ - + @@ -398,9 +398,9 @@ newFuncRoot:24 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_ - + @@ -443,9 +443,9 @@ newFuncRoot:27 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_ - + @@ -488,9 +488,9 @@ newFuncRoot:30 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_ - + @@ -518,9 +518,9 @@ newFuncRoot:32 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_ - + @@ -548,9 +548,9 @@ newFuncRoot:34 %zext_ln392_cast = zext i3 %zext_ln392_read - + @@ -578,9 +578,9 @@ newFuncRoot:36 %zext_ln146_6_cast = zext i2 %zext_ln146_6_read - + @@ -608,9 +608,9 @@ newFuncRoot:38 %zext_ln146_4_cast = zext i2 %zext_ln146_4_read - + @@ -638,9 +638,9 @@ newFuncRoot:40 %zext_ln146_2_cast = zext i1 %zext_ln146_2_read - + @@ -653,9 +653,9 @@ newFuncRoot:41 %zext_ln146_1_cast = zext i6 %zext_ln146_1_read - + @@ -1753,7 +1753,7 @@ while.cond:5 %p_load = load i32 %empty_16 @@ -1766,9 +1766,9 @@ while.cond:6 %icmp_ln399 = icmp_slt i32 %total_num_reads_11, i32 2560 - + @@ -1781,9 +1781,9 @@ while.cond:7 %tmp_6 = partselect i23 @_ssdm_op_PartSelect.i23.i32.i32.i32, i32 % - + @@ -1796,9 +1796,9 @@ while.cond:8 %icmp_ln400 = icmp_slt i23 %tmp_6, i23 1 - + @@ -1811,9 +1811,9 @@ while.cond:9 %tmp_8 = partselect i23 @_ssdm_op_PartSelect.i23.i32.i32.i32, i32 % - + @@ -1826,9 +1826,9 @@ while.cond:10 %icmp_ln401 = icmp_slt i23 %tmp_8, i23 1 - + @@ -1841,9 +1841,9 @@ while.cond:11 %tmp_10 = partselect i23 @_ssdm_op_PartSelect.i23.i32.i32.i32, i32 - + @@ -1856,9 +1856,9 @@ while.cond:12 %icmp_ln402 = icmp_slt i23 %tmp_10, i23 1 - + @@ -1871,9 +1871,9 @@ while.cond:13 %tmp_12 = partselect i23 @_ssdm_op_PartSelect.i23.i32.i32.i32, i32 - + @@ -1886,9 +1886,9 @@ while.cond:14 %icmp_ln403 = icmp_slt i23 %tmp_12, i23 1 - + @@ -1901,9 +1901,9 @@ while.cond:15 %tmp_16 = partselect i23 @_ssdm_op_PartSelect.i23.i32.i32.i32, i32 - + @@ -2125,7 +2125,7 @@ if.then189:0 %hash_stream_0_read = read i33 @_ssdm_op_Read.ap_fifo.volatile.i33P - + - + @@ -2161,9 +2161,9 @@ if.then189:2 %zext_ln1514 = zext i6 %ret_V - + @@ -2269,9 +2269,9 @@ if.then189:8 %store_ln433 = store i1 1, i1 %bloom_arb_forwarder_int_int_istream_ - + @@ -2305,9 +2305,9 @@ if.then189:10 %store_ln434 = store i24 %cur_metadata_iidx_V, i24 %bloom_arb_forw - + @@ -2509,7 +2509,7 @@ if.then189.1:0 %hash_stream_1_read = read i33 @_ssdm_op_Read.ap_fifo.volatile.i3 - + - + @@ -2545,9 +2545,9 @@ if.then189.1:2 %zext_ln1514_1 = zext i6 %ret_V_1 - + @@ -2653,9 +2653,9 @@ if.then189.1:8 %store_ln433 = store i1 1, i1 %bloom_arb_forwarder_int_int_istrea - + @@ -2707,9 +2707,9 @@ if.then189.1:11 %store_ln434 = store i1 1, i1 %bloom_arb_forwarder_int_int_istre - + @@ -2945,7 +2945,7 @@ if.then189.2:0 %hash_stream_2_read = read i33 @_ssdm_op_Read.ap_fifo.volatile.i3 - + - + @@ -2981,9 +2981,9 @@ if.then189.2:2 %zext_ln1514_2 = zext i6 %ret_V_2 - + @@ -3089,9 +3089,9 @@ if.then189.2:8 %store_ln433 = store i1 1, i1 %bloom_arb_forwarder_int_int_istrea - + @@ -3143,9 +3143,9 @@ if.then189.2:11 %store_ln434 = store i2 2, i2 %bloom_arb_forwarder_int_int_istre - + @@ -3381,7 +3381,7 @@ if.then189.3:0 %hash_stream_3_read = read i33 @_ssdm_op_Read.ap_fifo.volatile.i3 - + - + @@ -3417,9 +3417,9 @@ if.then189.3:2 %zext_ln1514_3 = zext i6 %ret_V_3 - + @@ -3525,9 +3525,9 @@ if.then189.3:8 %store_ln433 = store i1 1, i1 %bloom_arb_forwarder_int_int_istrea - + @@ -3579,9 +3579,9 @@ if.then189.3:11 %store_ln434 = store i2 3, i2 %bloom_arb_forwarder_int_int_istre - + @@ -3817,7 +3817,7 @@ if.then189.4:0 %hash_stream_4_read = read i33 @_ssdm_op_Read.ap_fifo.volatile.i3 - + - + @@ -3853,9 +3853,9 @@ if.then189.4:2 %zext_ln1514_4 = zext i6 %ret_V_4 - + @@ -3961,9 +3961,9 @@ if.then189.4:8 %store_ln433 = store i1 1, i1 %bloom_arb_forwarder_int_int_istrea - + @@ -4015,9 +4015,9 @@ if.then189.4:11 %store_ln434 = store i3 4, i3 %bloom_arb_forwarder_int_int_istre - + @@ -4183,9 +4183,9 @@ for.body221:4 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_H - + @@ -4199,9 +4199,9 @@ for.body221:5 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_H - + @@ -4401,9 +4401,9 @@ for.inc247:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_HA - + @@ -4417,9 +4417,9 @@ for.inc247:2 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_HA - + @@ -4602,9 +4602,9 @@ for.inc247.122:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -4618,9 +4618,9 @@ for.inc247.122:2 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -4803,9 +4803,9 @@ for.inc247.239:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -4819,9 +4819,9 @@ for.inc247.239:2 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -5004,9 +5004,9 @@ for.inc247.356:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -5020,9 +5020,9 @@ for.inc247.356:2 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -5205,9 +5205,9 @@ for.body221.1:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED - + @@ -5407,9 +5407,9 @@ for.inc247.1:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_ - + @@ -5592,9 +5592,9 @@ for.inc247.1.1:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -5777,9 +5777,9 @@ for.inc247.1.2:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -5962,9 +5962,9 @@ for.inc247.1.3:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -6147,9 +6147,9 @@ for.body221.2:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED - + @@ -6349,9 +6349,9 @@ for.inc247.2:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_ - + @@ -6534,9 +6534,9 @@ for.inc247.2.1:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -6719,9 +6719,9 @@ for.inc247.2.2:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -6904,9 +6904,9 @@ for.inc247.2.3:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -7089,9 +7089,9 @@ for.body221.3:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED - + @@ -7291,9 +7291,9 @@ for.inc247.3:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_ - + @@ -7476,9 +7476,9 @@ for.inc247.3.1:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -7661,9 +7661,9 @@ for.inc247.3.2:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -7846,9 +7846,9 @@ for.inc247.3.3:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -8031,9 +8031,9 @@ for.body221.4:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED - + @@ -8233,9 +8233,9 @@ for.inc247.4:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_ - + @@ -8418,9 +8418,9 @@ for.inc247.4.1:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -8603,9 +8603,9 @@ for.inc247.4.2:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -8788,9 +8788,9 @@ for.inc247.4.3:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -8973,9 +8973,9 @@ for.body221.5:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED - + @@ -9175,9 +9175,9 @@ for.inc247.5:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_ - + @@ -9360,9 +9360,9 @@ for.inc247.5.1:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -9545,9 +9545,9 @@ for.inc247.5.2:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -9730,9 +9730,9 @@ for.inc247.5.3:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -9915,9 +9915,9 @@ for.body221.6:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED - + @@ -10117,9 +10117,9 @@ for.inc247.6:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_ - + @@ -10302,9 +10302,9 @@ for.inc247.6.1:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -10487,9 +10487,9 @@ for.inc247.6.2:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -10672,9 +10672,9 @@ for.inc247.6.3:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -10857,9 +10857,9 @@ for.body221.7:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED - + @@ -11059,9 +11059,9 @@ for.inc247.7:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKED_ - + @@ -11244,9 +11244,9 @@ for.inc247.7.1:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -11429,9 +11429,9 @@ for.inc247.7.2:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + @@ -11614,9 +11614,9 @@ for.inc247.7.3:1 %bloom_arb_forwarder_int_int_istream_ap_uint_32_5_ostream_PACKE - + diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml index d8c19cbf..207ac791 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:54 2024 +Mon Jul 22 13:45:11 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_Pipeline_MAIN_LOOP_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_Pipeline_MAIN_LOOP_csynth.xml index 0b7d3622..583dc4f8 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_Pipeline_MAIN_LOOP_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_Pipeline_MAIN_LOOP_csynth.xml @@ -48,7 +48,7 @@ 483 -4512 +4287 0 0 0 @@ -302,7 +302,7 @@ ap_none in -6 +19 data @@ -324,7 +324,7 @@ ap_none in -6 +19 data @@ -357,7 +357,7 @@ ap_none in -6 +19 data @@ -390,7 +390,7 @@ ap_none in -6 +19 data @@ -423,7 +423,7 @@ ap_none in -6 +19 data @@ -1974,7 +1974,7 @@ ap_vld out -6 +19 data @@ -2051,7 +2051,7 @@ ap_vld out -6 +19 data @@ -2150,7 +2150,7 @@ ap_vld out -6 +19 data @@ -2249,7 +2249,7 @@ ap_vld out -6 +19 data @@ -2348,7 +2348,7 @@ ap_vld out -6 +19 data diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_csynth.xml index cfc80ea6..376732bc 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arb_forwarder_csynth.xml @@ -35,8 +35,8 @@ -935 -5078 +1065 +4853 0 0 0 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arbiter_ratemonitor.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arbiter_ratemonitor.verbose.sched.rpt.xml index a3e9af66..7fabdabb 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arbiter_ratemonitor.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arbiter_ratemonitor.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:10:42 2024 +Mon Jul 22 13:46:09 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arbiter_ratemonitor_Pipeline_INIT_LOOP_2.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arbiter_ratemonitor_Pipeline_INIT_LOOP_2.verbose.sched.rpt.xml index 70699ca9..aee33577 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arbiter_ratemonitor_Pipeline_INIT_LOOP_2.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arbiter_ratemonitor_Pipeline_INIT_LOOP_2.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:52 2024 +Mon Jul 22 13:45:10 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arbiter_ratemonitor_Pipeline_MAIN_LOOP.sched.adb.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arbiter_ratemonitor_Pipeline_MAIN_LOOP.sched.adb.xml index 63b64d32..ef8e3eea 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arbiter_ratemonitor_Pipeline_MAIN_LOOP.sched.adb.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arbiter_ratemonitor_Pipeline_MAIN_LOOP.sched.adb.xml @@ -3064,7 +3064,7 @@ while.cond:62 %add_ln475 = add i32 %add_ln475_3, i32 %inc61630_lcssa54_load diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arbiter_ratemonitor_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arbiter_ratemonitor_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml index 9cb2c52b..2754cfbd 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arbiter_ratemonitor_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_arbiter_ratemonitor_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:10:38 2024 +Mon Jul 22 13:46:05 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_hier_arbiter_atom.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_hier_arbiter_atom.verbose.sched.rpt.xml index eefc4466..38ec094b 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_hier_arbiter_atom.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_hier_arbiter_atom.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:49 2024 +Mon Jul 22 13:45:06 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_hier_arbiter_atom_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_hier_arbiter_atom_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml index a1afc735..d466cec1 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_hier_arbiter_atom_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/bloom_hier_arbiter_atom_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:49 2024 +Mon Jul 22 13:45:05 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer.sched.adb.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer.sched.adb.xml index f590973b..1f9393cd 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer.sched.adb.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer.sched.adb.xml @@ -61,10 +61,10 @@ entry:14 %empty = nbreadreq i1 @_ssdm_op_NbReadReq.ap_fifo.i33P0A, i33 %key_stre - + @@ -76,10 +76,10 @@ entry:15 %empty_12 = nbreadreq i1 @_ssdm_op_NbReadReq.ap_fifo.i33P0A, i33 %key_s - + @@ -94,10 +94,10 @@ entry:16 %empty_13 = nbwritereq i1 @_ssdm_op_NbWriteReq.ap_fifo.i33P0A, i33 %has - + diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer.verbose.sched.rpt.xml index 8a68c0af..23abdf06 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:46 2024 +Mon Jul 22 13:45:05 2024 2022.2 (Build 3670227 on Oct 13 2022) project @@ -24,7 +24,7 @@
, min, max, min, max, min, max, Type -527, 527, 1.755 us, 1.755 us, 528, 528, no +4194319, 4194319, 13.967 ms, 13.967 ms, 4194320, 4194320, no
diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer_Pipeline_MAIN_LOOP.sched.adb.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer_Pipeline_MAIN_LOOP.sched.adb.xml index 5b22476b..551951f8 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer_Pipeline_MAIN_LOOP.sched.adb.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer_Pipeline_MAIN_LOOP.sched.adb.xml @@ -89,7 +89,7 @@ - + - + @@ -179,9 +179,9 @@ newFuncRoot:5 %br_ln0 = br void %for.body.i - + @@ -194,9 +194,9 @@ for.body.i:0 %total_num_writes_1 = load i10 %total_num_writes - + @@ -211,7 +211,7 @@ for.body.i:1 %icmp_ln216 = icmp_eq i10 %total_num_writes_1, i10 512 @@ -224,9 +224,9 @@ for.body.i:2 %empty = speclooptripcount i32 @_ssdm_op_SpecLoopTripCount, i64 512 - + @@ -255,9 +255,9 @@ for.body.i:4 %br_ln216 = br i1 %icmp_ln216, void %for.body.i.split, void %while. - + @@ -669,57 +669,42 @@ for.body.i.split:22 %h1_5 = mul i32 %h1_4, i32 2246822507 - + - - - - -NULL - - - - - - - - + - + NULL - + - + LogicGate - + @@ -728,16 +713,16 @@ for.body.i.split:26 %h1_6 = xor i25 %zext_ln174, i25 %trunc_ln146 - + Multiplier - + @@ -746,49 +731,49 @@ for.body.i.split:27 %h1_7 = mul i25 %h1_6, i25 11710005 - + Multiplier - + - + NULL - + - + - + NULL - + - + @@ -810,7 +795,7 @@ while.end.exitStub:0 %ret_ln0 = ret - + NULL @@ -825,7 +810,7 @@ for.body.i.split:0 %specpipeline_ln217 = specpipeline void @_ssdm_op_SpecPipelin - + NULL @@ -840,6 +825,21 @@ for.body.i.split:1 %specloopname_ln213 = specloopname void @_ssdm_op_SpecLoopNam + +NULL + + + + + + + + + + LogicGate @@ -847,12 +847,12 @@ for.body.i.split:1 %specloopname_ln213 = specloopname void @_ssdm_op_SpecLoopNam - + - + @@ -862,9 +862,9 @@ for.body.i.split:30 %h1_9 = xor i9 %trunc_ln2, i9 %trunc_ln146_1 - + diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml index 92cf3c7e..4acbf3f8 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:46 2024 +Mon Jul 22 13:45:05 2024 2022.2 (Build 3670227 on Oct 13 2022) project @@ -24,7 +24,7 @@
, min, max, min, max, min, max, Type -525, 525, 1.748 us, 1.748 us, 525, 525, no +4194317, 4194317, 13.967 ms, 13.967 ms, 4194317, 4194317, no
@@ -35,7 +35,7 @@ Loop Name, min, max, Latency, achieved, target, Count, Pipelined -523, 523, 13, 1, 1, 512, yes +4194315, 4194315, 13, 1, 1, 4194304, yes
diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer_Pipeline_MAIN_LOOP_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer_Pipeline_MAIN_LOOP_csynth.xml index 04a55afe..35a96070 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer_Pipeline_MAIN_LOOP_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer_Pipeline_MAIN_LOOP_csynth.xml @@ -22,21 +22,21 @@ clock cycles -525 -525 -525 -1.748 us -1.748 us -1.748 us -525 -525 +4194317 +4194317 +4194317 +13.967 ms +13.967 ms +13.967 ms +4194317 +4194317 2.43 -512 -523 -1741 +4194304 +4194315 +13967068 1 13 @@ -47,9 +47,9 @@ -14 -1030 -477 +15 +1122 +563 0 0 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer_csynth.xml index b91620f4..8b33fa26 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Computer_csynth.xml @@ -22,22 +22,22 @@ clock cycles -527 -527 -527 -1.755 us -1.755 us -1.755 us -528 -528 +4194319 +4194319 +4194319 +13.967 ms +13.967 ms +13.967 ms +4194320 +4194320 -14 -1034 -515 +15 +1126 +601 0 0 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder.verbose.sched.rpt.xml index ab1bbea9..cf7d8ab2 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:45 2024 +Mon Jul 22 13:45:06 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder_Pipeline_VITIS_LOOP_222_1.sched.adb.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder_Pipeline_VITIS_LOOP_222_1.sched.adb.xml index 29d1c3f5..b13b0169 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder_Pipeline_VITIS_LOOP_222_1.sched.adb.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder_Pipeline_VITIS_LOOP_222_1.sched.adb.xml @@ -296,9 +296,9 @@ while.cond:5 %total_num_writes_4 = load i32 %total_num_writes - + @@ -311,9 +311,9 @@ while.cond:6 %tmp = partselect i23 @_ssdm_op_PartSelect.i23.i32.i32.i32, i32 %to - + @@ -328,7 +328,7 @@ while.cond:7 %icmp_ln222 = icmp_slt i23 %tmp, i23 1 @@ -404,9 +404,9 @@ for.body16:1 %specloopname_ln226 = specloopname void @_ssdm_op_SpecLoopName, voi - + @@ -420,9 +420,9 @@ for.body16:2 %tmp_1 = partselect i23 @_ssdm_op_PartSelect.i23.i32.i32.i32, i32 % - + diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder_Pipeline_VITIS_LOOP_222_1.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder_Pipeline_VITIS_LOOP_222_1.verbose.sched.rpt.xml index 1a771320..9a33f5b6 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder_Pipeline_VITIS_LOOP_222_1.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder_Pipeline_VITIS_LOOP_222_1.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:45 2024 +Mon Jul 22 13:45:06 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder_Pipeline_VITIS_LOOP_222_1_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder_Pipeline_VITIS_LOOP_222_1_csynth.xml index 38d6d665..a0915479 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder_Pipeline_VITIS_LOOP_222_1_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder_Pipeline_VITIS_LOOP_222_1_csynth.xml @@ -48,7 +48,7 @@ 134 -579 +569 0 0 0 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder_csynth.xml index fb241a96..2c19c65f 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/computeHash_Feeder_csynth.xml @@ -36,7 +36,7 @@ 138 -635 +625 0 0 0 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/csynth.xml index 393d1772..0c5a9301 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/csynth.xml @@ -540,12 +540,12 @@
- - - - - - - + + + + + + + diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV.verbose.sched.rpt.xml index f633b798..c4dc6934 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:49 2024 +Mon Jul 22 13:45:06 2024 2022.2 (Build 3670227 on Oct 13 2022) project @@ -15,7 +15,7 @@
Clock, Target, Estimated, Uncertainty -3.33 ns, 2.029 ns, 0.90 ns +3.33 ns, 1.880 ns, 0.90 ns
diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV_Pipeline_VITIS_LOOP_181_1.sched.adb.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV_Pipeline_VITIS_LOOP_181_1.sched.adb.xml index d1deadb7..c81cf785 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV_Pipeline_VITIS_LOOP_181_1.sched.adb.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV_Pipeline_VITIS_LOOP_181_1.sched.adb.xml @@ -188,9 +188,9 @@ for.cond:0 %i_resp_1 = load i32 %i_resp - + @@ -203,9 +203,9 @@ for.cond:2 %tmp = partselect i28 @_ssdm_op_PartSelect.i28.i32.i32.i32, i32 %i_re - + @@ -451,9 +451,9 @@ for.body:1 %specloopname_ln185 = specloopname void @_ssdm_op_SpecLoopName, void - + @@ -467,9 +467,9 @@ for.body:2 %tmp_1 = partselect i28 @_ssdm_op_PartSelect.i28.i32.i32.i32, i32 %i_ - + diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV_Pipeline_VITIS_LOOP_181_1.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV_Pipeline_VITIS_LOOP_181_1.verbose.sched.rpt.xml index 9661eff3..5e9240d6 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV_Pipeline_VITIS_LOOP_181_1.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV_Pipeline_VITIS_LOOP_181_1.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:49 2024 +Mon Jul 22 13:45:06 2024 2022.2 (Build 3670227 on Oct 13 2022) project @@ -15,7 +15,7 @@
Clock, Target, Estimated, Uncertainty -3.33 ns, 2.029 ns, 0.90 ns +3.33 ns, 1.880 ns, 0.90 ns
diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV_Pipeline_VITIS_LOOP_181_1_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV_Pipeline_VITIS_LOOP_181_1_csynth.xml index b363bb46..c1dd0a90 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV_Pipeline_VITIS_LOOP_181_1_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV_Pipeline_VITIS_LOOP_181_1_csynth.xml @@ -18,7 +18,7 @@ no ns -2.029 +1.880 clock cycles @@ -48,7 +48,7 @@ 166 -232 +220 0 0 0 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV_csynth.xml index 482d13c5..87df15f4 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadBV_csynth.xml @@ -18,7 +18,7 @@ no ns -2.029 +1.880 clock cycles @@ -36,7 +36,7 @@ 170 -297 +285 0 0 0 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey.verbose.sched.rpt.xml index ba8fdfdf..df895a0c 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:48 2024 +Mon Jul 22 13:45:06 2024 2022.2 (Build 3670227 on Oct 13 2022) project @@ -15,7 +15,7 @@
Clock, Target, Estimated, Uncertainty -3.33 ns, 1.972 ns, 0.90 ns +3.33 ns, 1.829 ns, 0.90 ns
diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey_Pipeline_VITIS_LOOP_194_1.sched.adb.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey_Pipeline_VITIS_LOOP_194_1.sched.adb.xml index 9b261d4c..8e9c0c05 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey_Pipeline_VITIS_LOOP_194_1.sched.adb.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey_Pipeline_VITIS_LOOP_194_1.sched.adb.xml @@ -293,9 +293,9 @@ for.cond:0 %i_resp_1 = load i32 %i_resp - + @@ -308,9 +308,9 @@ for.cond:2 %tmp = partselect i23 @_ssdm_op_PartSelect.i23.i32.i32.i32, i32 %i_re - + @@ -675,9 +675,9 @@ for.body:1 %specloopname_ln198 = specloopname void @_ssdm_op_SpecLoopName, void - + @@ -691,9 +691,9 @@ for.body:2 %tmp_1 = partselect i23 @_ssdm_op_PartSelect.i23.i32.i32.i32, i32 %i_ - + diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey_Pipeline_VITIS_LOOP_194_1.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey_Pipeline_VITIS_LOOP_194_1.verbose.sched.rpt.xml index a6e38872..fe174781 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey_Pipeline_VITIS_LOOP_194_1.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey_Pipeline_VITIS_LOOP_194_1.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:48 2024 +Mon Jul 22 13:45:06 2024 2022.2 (Build 3670227 on Oct 13 2022) project @@ -15,7 +15,7 @@
Clock, Target, Estimated, Uncertainty -3.33 ns, 1.972 ns, 0.90 ns +3.33 ns, 1.829 ns, 0.90 ns
diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey_Pipeline_VITIS_LOOP_194_1_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey_Pipeline_VITIS_LOOP_194_1_csynth.xml index 61df12cc..e8ef48e2 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey_Pipeline_VITIS_LOOP_194_1_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey_Pipeline_VITIS_LOOP_194_1_csynth.xml @@ -18,7 +18,7 @@ no ns -1.972 +1.829 clock cycles @@ -48,7 +48,7 @@ 390 -291 +281 0 0 0 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey_csynth.xml index ac0ccc0f..8cd985b5 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/loadKey_csynth.xml @@ -18,7 +18,7 @@ no ns -1.972 +1.829 clock cycles @@ -36,7 +36,7 @@ 394 -419 +409 0 0 0 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput.verbose.sched.rpt.xml index 2ad846fc..11120793 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:48 2024 +Mon Jul 22 13:45:30 2024 2022.2 (Build 3670227 on Oct 13 2022) project @@ -24,7 +24,7 @@
, min, max, min, max, min, max, Type -516, 516, 1.718 us, 1.718 us, 517, 517, no +4194308, 4194308, 13.967 ms, 13.967 ms, 4194309, 4194309, no
diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput_Pipeline_VITIS_LOOP_317_1.sched.adb.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput_Pipeline_VITIS_LOOP_317_1.sched.adb.xml index 68d3d80e..c3b49c78 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput_Pipeline_VITIS_LOOP_317_1.sched.adb.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput_Pipeline_VITIS_LOOP_317_1.sched.adb.xml @@ -38,7 +38,7 @@ newFuncRoot:0 %p_Val2_s = alloca i32 1 - + - + @@ -113,9 +113,9 @@ newFuncRoot:5 %br_ln0 = br void %for.body - + @@ -143,9 +143,9 @@ for.body:1 %specpipeline_ln0 = specpipeline void @_ssdm_op_SpecPipeline, i32 429 - + @@ -160,7 +160,7 @@ for.body:2 %icmp_ln317 = icmp_eq i10 %i_1, i10 512 @@ -173,9 +173,9 @@ for.body:3 %empty = speclooptripcount i32 @_ssdm_op_SpecLoopTripCount, i64 512, - + @@ -204,9 +204,9 @@ for.body:5 %br_ln317 = br i1 %icmp_ln317, void %for.body.split, void %for.end.ex - + @@ -252,9 +252,9 @@ for.body.split:8 %br_ln321 = br i1 %icmp_ln321, void %for.body.split.for.inc_cri - + diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput_Pipeline_VITIS_LOOP_317_1.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput_Pipeline_VITIS_LOOP_317_1.verbose.sched.rpt.xml index 0a74d843..13e6db03 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput_Pipeline_VITIS_LOOP_317_1.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput_Pipeline_VITIS_LOOP_317_1.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:48 2024 +Mon Jul 22 13:45:30 2024 2022.2 (Build 3670227 on Oct 13 2022) project @@ -24,7 +24,7 @@
, min, max, min, max, min, max, Type -514, 514, 1.712 us, 1.712 us, 514, 514, no +4194306, 4194306, 13.967 ms, 13.967 ms, 4194306, 4194306, no
@@ -35,7 +35,7 @@ Loop Name, min, max, Latency, achieved, target, Count, Pipelined -512, 512, 2, 1, 1, 512, yes +4194304, 4194304, 2, 1, 1, 4194304, yes
diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput_Pipeline_VITIS_LOOP_317_1_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput_Pipeline_VITIS_LOOP_317_1_csynth.xml index 6a5ffe9d..428eb239 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput_Pipeline_VITIS_LOOP_317_1_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput_Pipeline_VITIS_LOOP_317_1_csynth.xml @@ -22,21 +22,21 @@ clock cycles -514 -514 -514 -1.712 us -1.712 us -1.712 us -514 -514 +4194306 +4194306 +4194306 +13.967 ms +13.967 ms +13.967 ms +4194306 +4194306 2.43 -512 -512 -1704 +4194304 +4194304 +13967032 1 2 @@ -47,8 +47,8 @@ -51 -108 +64 +126 0 0 0 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput_csynth.xml index b6575653..6dd842e7 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/packOutput_csynth.xml @@ -22,21 +22,21 @@ clock cycles -516 -516 -516 -1.718 us -1.718 us -1.718 us -517 -517 +4194308 +4194308 +4194308 +13.967 ms +13.967 ms +13.967 ms +4194309 +4194309 -55 -146 +68 +164 0 0 0 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash.verbose.sched.rpt.xml index 225c0b5a..6ca6322e 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:52 2024 +Mon Jul 22 13:45:36 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_LOAD_BV_VALUES.sched.adb.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_LOAD_BV_VALUES.sched.adb.xml index f0d4097b..4b5ea095 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_LOAD_BV_VALUES.sched.adb.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_LOAD_BV_VALUES.sched.adb.xml @@ -3,13 +3,13 @@ - + - + @@ -29,7 +29,7 @@ - + - + @@ -209,9 +209,9 @@ newFuncRoot:11 %br_ln0 = br void %for.body220 - + @@ -224,9 +224,9 @@ for.body220:0 %i_1 = load i5 %i - + @@ -241,7 +241,7 @@ for.body220:1 %icmp_ln460 = icmp_eq i5 %i_1, i5 16 @@ -254,9 +254,9 @@ for.body220:2 %empty = speclooptripcount i32 @_ssdm_op_SpecLoopTripCount, i64 16 - + @@ -285,9 +285,9 @@ for.body220:4 %br_ln460 = br i1 %icmp_ln460, void %for.body220.split, void %whil - + @@ -301,9 +301,9 @@ for.body220.split:0 %element_idx = trunc i5 %i_1 - + @@ -333,9 +333,9 @@ for.body220.split:6 %icmp_ln465 = icmp_eq i2 %tmp, i2 0 - + @@ -433,9 +433,9 @@ arrayidx226102.exit:0 %br_ln467 = br void %for.inc231 - + @@ -461,18 +461,18 @@ for.inc231:1 %br_ln460 = br void %for.body220 -NULL +FIFO - + - + @@ -482,60 +482,79 @@ for.body220.split:1 %specpipeline_ln461 = specpipeline void @_ssdm_op_SpecPipeli - + - + - -FIFO + +NULL + + + + + + + + + + + + + + + +NULL - + - + - + NULL - + - + - + NULL - + - + NULL @@ -543,7 +562,7 @@ for.body220.split:7 %zext_ln469 = zext i1 %element_idx - + - + NULL @@ -559,7 +578,7 @@ if.else:0 %bv_buf_URAMS_V_addr = getelementptr i32 %bv_buf_URAMS_V, i64 0, i64 % - + - + NULL @@ -575,7 +594,7 @@ if.else:1 %bv_buf_URAMS_V_1_addr = getelementptr i32 %bv_buf_URAMS_V_1, i64 0, i - + - + NULL @@ -591,7 +610,7 @@ if.else:2 %bv_buf_URAMS_V_2_addr = getelementptr i32 %bv_buf_URAMS_V_2, i64 0, i - + - -NULL + +RAM_T2P_URAM - + + - + - + - + NULL - + + - + - + - -NULL + +RAM_T2P_URAM - + + - + - + - + NULL - + + - + - + - -RAM_T2P_BRAM + +RAM_T2P_URAM - - + + - + - + - + NULL - - + + - + - + - -RAM_T2P_BRAM + +RAM_T2P_URAM - - + + - + - + - + NULL - - - - - - - - - - - -RAM_T2P_BRAM - - - - + + - + - + - + NULL - - + - + - -RAM_T2P_BRAM + +NULL - - + - + - + NULL - - + - + - + NULL - + - + - + - - - -RAM_T2P_URAM +RAM_T2P_BRAM - + - + - + NULL - + - + - + -RAM_T2P_URAM +RAM_T2P_BRAM - + - + - + NULL - + - + - + -RAM_T2P_URAM +RAM_T2P_BRAM - + - + - + NULL - + - + - + -RAM_T2P_URAM +RAM_T2P_BRAM - + - + - + NULL - + - + - + diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_LOAD_BV_VALUES.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_LOAD_BV_VALUES.verbose.sched.rpt.xml index 7f937f5c..30756b8c 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_LOAD_BV_VALUES.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_LOAD_BV_VALUES.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:50 2024 +Mon Jul 22 13:45:35 2024 2022.2 (Build 3670227 on Oct 13 2022) project @@ -15,7 +15,7 @@
Clock, Target, Estimated, Uncertainty -3.33 ns, 2.411 ns, 0.90 ns +3.33 ns, 1.792 ns, 0.90 ns
@@ -24,7 +24,7 @@
, min, max, min, max, min, max, Type -19, 19, 63.270 ns, 63.270 ns, 19, 19, no +131075, 131075, 0.436 ms, 0.436 ms, 131075, 131075, no
@@ -35,7 +35,7 @@ Loop Name, min, max, Latency, achieved, target, Count, Pipelined -17, 17, 3, 1, 1, 16, yes +131073, 131073, 3, 1, 1, 131072, yes
diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_LOAD_BV_VALUES_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_LOAD_BV_VALUES_csynth.xml index b1f95c2e..1498dc81 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_LOAD_BV_VALUES_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_LOAD_BV_VALUES_csynth.xml @@ -18,25 +18,25 @@ no ns -2.411 +1.792 clock cycles -19 -19 -19 -63.270 ns -63.270 ns -63.270 ns -19 -19 +131075 +131075 +131075 +0.436 ms +0.436 ms +0.436 ms +131075 +131075 2.43 -16 -17 -56 +131072 +131073 +436473 1 3 @@ -47,8 +47,8 @@ -53 -79 +89 +96 0 0 0 @@ -170,7 +170,7 @@ ap_memory out -1 +14 address @@ -214,7 +214,7 @@ ap_memory out -1 +14 address @@ -258,7 +258,7 @@ ap_memory out -1 +14 address @@ -302,7 +302,7 @@ ap_memory out -1 +14 address @@ -346,7 +346,7 @@ ap_memory out -1 +14 address @@ -390,7 +390,7 @@ ap_memory out -1 +14 address @@ -434,7 +434,7 @@ ap_memory out -1 +14 address @@ -478,7 +478,7 @@ ap_memory out -1 +14 address diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_PROCESS_QUERIES.sched.adb.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_PROCESS_QUERIES.sched.adb.xml index 94098dac..8caa4536 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_PROCESS_QUERIES.sched.adb.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_PROCESS_QUERIES.sched.adb.xml @@ -1645,7 +1645,7 @@ while.cond:16 %num_writes_17 = load i32 %num_writes @@ -1839,12 +1839,12 @@ if.then247:3 %packed_hash_md_sidx_V = partselect i8 @_ssdm_op_PartSelect.i8.i65. - + - + @@ -1856,9 +1856,9 @@ if.then247:4 %tmp_4 = bitselect i1 @_ssdm_op_BitSelect.i1.i65.i32, i65 %bv_looku - + @@ -1873,7 +1873,7 @@ if.then247:6 %zext_ln541 = zext i1 %tmp_4 - + - + @@ -2074,12 +2074,12 @@ if.then280:3 %packed_hash_md_sidx_V_1 = partselect i8 @_ssdm_op_PartSelect.i8.i6 - + - + @@ -2091,9 +2091,9 @@ if.then280:4 %tmp_8 = bitselect i1 @_ssdm_op_BitSelect.i1.i65.i32, i65 %bv_looku - + @@ -2108,7 +2108,7 @@ if.then280:6 %zext_ln541_1 = zext i1 %tmp_8 - + - + @@ -2309,12 +2309,12 @@ if.then247.1:3 %packed_hash_md_sidx_V_2 = partselect i8 @_ssdm_op_PartSelect.i8. - + - + @@ -2326,9 +2326,9 @@ if.then247.1:4 %tmp_15 = bitselect i1 @_ssdm_op_BitSelect.i1.i65.i32, i65 %bv_lo - + @@ -2343,7 +2343,7 @@ if.then247.1:6 %zext_ln541_2 = zext i1 %tmp_15 - + - + @@ -2544,12 +2544,12 @@ if.then280.1:3 %packed_hash_md_sidx_V_3 = partselect i8 @_ssdm_op_PartSelect.i8. - + - + @@ -2561,9 +2561,9 @@ if.then280.1:4 %tmp_21 = bitselect i1 @_ssdm_op_BitSelect.i1.i65.i32, i65 %bv_lo - + @@ -2578,7 +2578,7 @@ if.then280.1:6 %zext_ln541_3 = zext i1 %tmp_21 - + - + @@ -2664,10 +2664,10 @@ if.then280.1:13 %br_ln531 = br void %if.end314.1 - + @@ -2696,7 +2696,7 @@ for.inc358.1:3 %xor_ln901_4 = xor i1 %empty_23, i1 1 @@ -2779,12 +2779,12 @@ if.then247.2:3 %packed_hash_md_sidx_V_4 = partselect i8 @_ssdm_op_PartSelect.i8. - + - + @@ -2796,9 +2796,9 @@ if.then247.2:4 %tmp_27 = bitselect i1 @_ssdm_op_BitSelect.i1.i65.i32, i65 %bv_lo - + @@ -2813,7 +2813,7 @@ if.then247.2:6 %zext_ln541_4 = zext i1 %tmp_27 - + - + @@ -2899,10 +2899,10 @@ if.then247.2:13 %br_ln505 = br void %if.end270.2 - + @@ -2931,7 +2931,7 @@ if.end270.2:5 %xor_ln901_5 = xor i1 %empty_22, i1 1 @@ -3014,12 +3014,12 @@ if.then280.2:3 %packed_hash_md_sidx_V_5 = partselect i8 @_ssdm_op_PartSelect.i8. - + - + @@ -3031,9 +3031,9 @@ if.then280.2:4 %tmp_33 = bitselect i1 @_ssdm_op_BitSelect.i1.i65.i32, i65 %bv_lo - + @@ -3048,7 +3048,7 @@ if.then280.2:6 %zext_ln541_5 = zext i1 %tmp_33 - + - + @@ -3134,10 +3134,10 @@ if.then280.2:13 %br_ln531 = br void %if.end314.2 - + @@ -3166,7 +3166,7 @@ for.inc358.2:3 %xor_ln901_6 = xor i1 %empty_21, i1 1 @@ -3249,12 +3249,12 @@ if.then247.3:3 %packed_hash_md_sidx_V_6 = partselect i8 @_ssdm_op_PartSelect.i8. - + - + @@ -3266,9 +3266,9 @@ if.then247.3:4 %tmp_39 = bitselect i1 @_ssdm_op_BitSelect.i1.i65.i32, i65 %bv_lo - + @@ -3283,7 +3283,7 @@ if.then247.3:6 %zext_ln541_6 = zext i1 %tmp_39 - + - + @@ -3369,10 +3369,10 @@ if.then247.3:13 %br_ln505 = br void %if.end270.3 - + @@ -3401,7 +3401,7 @@ if.end270.3:5 %xor_ln901_7 = xor i1 %empty_20, i1 1 @@ -3484,12 +3484,12 @@ if.then280.3:3 %packed_hash_md_sidx_V_7 = partselect i8 @_ssdm_op_PartSelect.i8. - + - + @@ -3501,9 +3501,9 @@ if.then280.3:4 %tmp_45 = bitselect i1 @_ssdm_op_BitSelect.i1.i65.i32, i65 %bv_lo - + @@ -3518,7 +3518,7 @@ if.then280.3:6 %zext_ln541_7 = zext i1 %tmp_45 - + - + @@ -3604,10 +3604,10 @@ if.then280.3:13 %br_ln531 = br void %if.end314.3 - + @@ -3636,7 +3636,7 @@ for.body364:3 %xor_ln901_8 = xor i1 %empty_19, i1 1 @@ -3719,12 +3719,12 @@ if.then374:3 %packed_hash_md_sidx_V_8 = partselect i8 @_ssdm_op_PartSelect.i8.i6 - + - + @@ -3736,9 +3736,9 @@ if.then374:4 %tmp_48 = bitselect i1 @_ssdm_op_BitSelect.i1.i65.i32, i65 %bv_look - + @@ -3753,7 +3753,7 @@ if.then374:6 %zext_ln541_8 = zext i1 %tmp_48 - + - + @@ -3839,10 +3839,10 @@ if.then374:13 %br_ln583 = br void %if.end409 - + @@ -3871,7 +3871,7 @@ if.end409:5 %xor_ln901_9 = xor i1 %empty_18, i1 1 @@ -3954,12 +3954,12 @@ if.then420:3 %packed_hash_md_sidx_V_9 = partselect i8 @_ssdm_op_PartSelect.i8.i6 - + - + @@ -3971,9 +3971,9 @@ if.then420:4 %tmp_50 = bitselect i1 @_ssdm_op_BitSelect.i1.i65.i32, i65 %bv_look - + @@ -3988,7 +3988,7 @@ if.then420:6 %zext_ln541_9 = zext i1 %tmp_50 - + - + @@ -4074,10 +4074,10 @@ if.then420:13 %br_ln609 = br void %if.end455 - + @@ -4106,7 +4106,7 @@ for.inc502:3 %xor_ln901_10 = xor i1 %empty_17, i1 1 @@ -4189,12 +4189,12 @@ if.then374.1:3 %packed_hash_md_sidx_V_10 = partselect i8 @_ssdm_op_PartSelect.i8 - + - + @@ -4206,9 +4206,9 @@ if.then374.1:4 %tmp_52 = bitselect i1 @_ssdm_op_BitSelect.i1.i65.i32, i65 %bv_lo - + @@ -4223,7 +4223,7 @@ if.then374.1:6 %zext_ln541_10 = zext i1 %tmp_52 - + - + @@ -4309,10 +4309,10 @@ if.then374.1:13 %br_ln583 = br void %if.end409.1 - + @@ -4341,7 +4341,7 @@ if.end409.1:5 %xor_ln901_11 = xor i1 %empty_16, i1 1 @@ -4424,12 +4424,12 @@ if.then420.1:3 %packed_hash_md_sidx_V_11 = partselect i8 @_ssdm_op_PartSelect.i8 - + - + @@ -4441,9 +4441,9 @@ if.then420.1:4 %tmp_54 = bitselect i1 @_ssdm_op_BitSelect.i1.i65.i32, i65 %bv_lo - + @@ -4458,7 +4458,7 @@ if.then420.1:6 %zext_ln541_11 = zext i1 %tmp_54 - + - + @@ -4544,10 +4544,10 @@ if.then420.1:13 %br_ln609 = br void %if.end455.1 - + @@ -4576,7 +4576,7 @@ for.inc502.1:3 %xor_ln901_12 = xor i1 %empty_15, i1 1 @@ -4659,12 +4659,12 @@ if.then374.2:3 %packed_hash_md_sidx_V_12 = partselect i8 @_ssdm_op_PartSelect.i8 - + - + @@ -4676,9 +4676,9 @@ if.then374.2:4 %tmp_56 = bitselect i1 @_ssdm_op_BitSelect.i1.i65.i32, i65 %bv_lo - + @@ -4693,7 +4693,7 @@ if.then374.2:6 %zext_ln541_12 = zext i1 %tmp_56 - + - + @@ -4779,10 +4779,10 @@ if.then374.2:13 %br_ln583 = br void %if.end409.2 - + @@ -4811,7 +4811,7 @@ if.end409.2:5 %xor_ln901_13 = xor i1 %empty_14, i1 1 @@ -4894,12 +4894,12 @@ if.then420.2:3 %packed_hash_md_sidx_V_13 = partselect i8 @_ssdm_op_PartSelect.i8 - + - + @@ -4911,9 +4911,9 @@ if.then420.2:4 %tmp_58 = bitselect i1 @_ssdm_op_BitSelect.i1.i65.i32, i65 %bv_lo - + @@ -4928,7 +4928,7 @@ if.then420.2:6 %zext_ln541_13 = zext i1 %tmp_58 - + - + @@ -5014,10 +5014,10 @@ if.then420.2:13 %br_ln609 = br void %if.end455.2 - + @@ -5046,7 +5046,7 @@ for.inc502.2:3 %xor_ln901_14 = xor i1 %empty_13, i1 1 @@ -5129,12 +5129,12 @@ if.then374.3:3 %packed_hash_md_sidx_V_14 = partselect i8 @_ssdm_op_PartSelect.i8 - + - + @@ -5146,9 +5146,9 @@ if.then374.3:4 %tmp_60 = bitselect i1 @_ssdm_op_BitSelect.i1.i65.i32, i65 %bv_lo - + @@ -5163,7 +5163,7 @@ if.then374.3:6 %zext_ln541_14 = zext i1 %tmp_60 - + - + @@ -5249,10 +5249,10 @@ if.then374.3:13 %br_ln583 = br void %if.end409.3 - + @@ -5281,7 +5281,7 @@ if.end409.3:5 %xor_ln901_15 = xor i1 %empty, i1 1 @@ -5364,12 +5364,12 @@ if.then420.3:3 %packed_hash_md_sidx_V_15 = partselect i8 @_ssdm_op_PartSelect.i8 - + - + @@ -5381,9 +5381,9 @@ if.then420.3:4 %tmp_62 = bitselect i1 @_ssdm_op_BitSelect.i1.i65.i32, i65 %bv_lo - + @@ -5398,7 +5398,7 @@ if.then420.3:6 %zext_ln541_15 = zext i1 %tmp_62 - + - + @@ -5519,9 +5519,9 @@ if.then247:5 %zext_ln1514 = zext i5 %ret_V - + @@ -5667,9 +5667,9 @@ if.then280:5 %zext_ln1514_1 = zext i5 %ret_V_1 - + @@ -6115,9 +6115,9 @@ if.then247.1:5 %zext_ln1514_2 = zext i5 %ret_V_2 - + @@ -6263,9 +6263,9 @@ if.then280.1:5 %zext_ln1514_3 = zext i5 %ret_V_3 - + @@ -6711,9 +6711,9 @@ if.then247.2:5 %zext_ln1514_4 = zext i5 %ret_V_4 - + @@ -6859,9 +6859,9 @@ if.then280.2:5 %zext_ln1514_5 = zext i5 %ret_V_5 - + @@ -7009,10 +7009,10 @@ land.lhs.true320.2:0 %p_4 = bitconcatenate i34 @_ssdm_op_BitConcatenate.i34.i1.i - + @@ -7043,7 +7043,7 @@ land.lhs.true320.2:2 %add_ln540_2 = add i32 %num_writes_4, i32 1 @@ -7060,7 +7060,7 @@ land.lhs.true320.2:3 %xor_ln535_2 = xor i1 %tmp_11, i1 1 @@ -7159,10 +7159,10 @@ land.lhs.true342.2:0 %p_5 = bitconcatenate i34 @_ssdm_op_BitConcatenate.i34.i1.i - + @@ -7193,7 +7193,7 @@ land.lhs.true342.2:2 %add_ln549_2 = add i32 %num_writes_7, i32 1 @@ -7210,7 +7210,7 @@ land.lhs.true342.2:3 %xor_ln544_2 = xor i1 %tmp_12, i1 1 @@ -7307,9 +7307,9 @@ if.then247.3:5 %zext_ln1514_6 = zext i5 %ret_V_6 - + @@ -7455,9 +7455,9 @@ if.then280.3:5 %zext_ln1514_7 = zext i5 %ret_V_7 - + @@ -7605,10 +7605,10 @@ land.lhs.true320.3:0 %p_6 = bitconcatenate i34 @_ssdm_op_BitConcatenate.i34.i1.i - + @@ -7639,7 +7639,7 @@ land.lhs.true320.3:2 %add_ln540_3 = add i32 %num_writes_8, i32 1 @@ -7656,7 +7656,7 @@ land.lhs.true320.3:3 %xor_ln535_3 = xor i1 %tmp_16, i1 1 @@ -7755,10 +7755,10 @@ land.lhs.true342.3:0 %p_7 = bitconcatenate i34 @_ssdm_op_BitConcatenate.i34.i1.i - + @@ -7789,7 +7789,7 @@ land.lhs.true342.3:2 %add_ln549_3 = add i32 %num_writes_9, i32 1 @@ -7806,7 +7806,7 @@ land.lhs.true342.3:3 %xor_ln544_3 = xor i1 %tmp_17, i1 1 @@ -7903,9 +7903,9 @@ if.then374:5 %zext_ln1514_8 = zext i5 %ret_V_8 - + @@ -8051,9 +8051,9 @@ if.then420:5 %zext_ln1514_9 = zext i5 %ret_V_9 - + @@ -8201,10 +8201,10 @@ land.lhs.true462:0 %p_8 = bitconcatenate i34 @_ssdm_op_BitConcatenate.i34.i1.i8. - + @@ -8235,7 +8235,7 @@ land.lhs.true462:2 %add_ln618 = add i32 %num_writes_10, i32 1 @@ -8252,7 +8252,7 @@ land.lhs.true462:3 %xor_ln613 = xor i1 %tmp_20, i1 1 @@ -8351,10 +8351,10 @@ land.lhs.true485:0 %p_9 = bitconcatenate i34 @_ssdm_op_BitConcatenate.i34.i1.i8. - + @@ -8385,7 +8385,7 @@ land.lhs.true485:2 %add_ln627 = add i32 %num_writes_5, i32 1 @@ -8402,7 +8402,7 @@ land.lhs.true485:3 %xor_ln622 = xor i1 %tmp_22, i1 1 @@ -8499,9 +8499,9 @@ if.then374.1:5 %zext_ln1514_10 = zext i5 %ret_V_10 - + @@ -8647,9 +8647,9 @@ if.then420.1:5 %zext_ln1514_11 = zext i5 %ret_V_11 - + @@ -8797,10 +8797,10 @@ land.lhs.true462.1:0 %p_10 = bitconcatenate i34 @_ssdm_op_BitConcatenate.i34.i1. - + @@ -8831,7 +8831,7 @@ land.lhs.true462.1:2 %add_ln618_1 = add i32 %num_writes_6, i32 1 @@ -8848,7 +8848,7 @@ land.lhs.true462.1:3 %xor_ln613_1 = xor i1 %tmp_25, i1 1 @@ -8947,10 +8947,10 @@ land.lhs.true485.1:0 %p_11 = bitconcatenate i34 @_ssdm_op_BitConcatenate.i34.i1. - + @@ -8981,7 +8981,7 @@ land.lhs.true485.1:2 %add_ln627_1 = add i32 %num_writes_11, i32 1 @@ -8998,7 +8998,7 @@ land.lhs.true485.1:3 %xor_ln622_1 = xor i1 %tmp_26, i1 1 @@ -9095,9 +9095,9 @@ if.then374.2:5 %zext_ln1514_12 = zext i5 %ret_V_12 - + @@ -9243,9 +9243,9 @@ if.then420.2:5 %zext_ln1514_13 = zext i5 %ret_V_13 - + @@ -9393,10 +9393,10 @@ land.lhs.true462.2:0 %p_12 = bitconcatenate i34 @_ssdm_op_BitConcatenate.i34.i1. - + @@ -9427,7 +9427,7 @@ land.lhs.true462.2:2 %add_ln618_2 = add i32 %num_writes_12, i32 1 @@ -9444,7 +9444,7 @@ land.lhs.true462.2:3 %xor_ln613_2 = xor i1 %tmp_30, i1 1 @@ -9543,10 +9543,10 @@ land.lhs.true485.2:0 %p_13 = bitconcatenate i34 @_ssdm_op_BitConcatenate.i34.i1. - + @@ -9577,7 +9577,7 @@ land.lhs.true485.2:2 %add_ln627_2 = add i32 %num_writes_13, i32 1 @@ -9594,7 +9594,7 @@ land.lhs.true485.2:3 %xor_ln622_2 = xor i1 %tmp_31, i1 1 @@ -9691,9 +9691,9 @@ if.then374.3:5 %zext_ln1514_14 = zext i5 %ret_V_14 - + @@ -9839,9 +9839,9 @@ if.then420.3:5 %zext_ln1514_15 = zext i5 %ret_V_15 - + @@ -9989,10 +9989,10 @@ land.lhs.true462.3:0 %p_14 = bitconcatenate i34 @_ssdm_op_BitConcatenate.i34.i1. - + @@ -10023,7 +10023,7 @@ land.lhs.true462.3:2 %add_ln618_3 = add i32 %num_writes_14, i32 1 @@ -10040,7 +10040,7 @@ land.lhs.true462.3:3 %xor_ln613_3 = xor i1 %tmp_35, i1 1 @@ -10139,10 +10139,10 @@ land.lhs.true485.3:0 %p_0 = bitconcatenate i34 @_ssdm_op_BitConcatenate.i34.i1.i - + @@ -10173,7 +10173,7 @@ land.lhs.true485.3:2 %add_ln627_3 = add i32 %num_writes_15, i32 1 @@ -10190,7 +10190,7 @@ land.lhs.true485.3:3 %xor_ln622_3 = xor i1 %tmp_36, i1 1 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_PROCESS_QUERIES.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_PROCESS_QUERIES.verbose.sched.rpt.xml index f305b561..0e501ee9 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_PROCESS_QUERIES.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_PROCESS_QUERIES.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:51 2024 +Mon Jul 22 13:45:35 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_PROCESS_QUERIES_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_PROCESS_QUERIES_csynth.xml index d0e94f0f..ea52a93d 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_PROCESS_QUERIES_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_Pipeline_PROCESS_QUERIES_csynth.xml @@ -665,7 +665,7 @@ ap_memory out -1 +14 address @@ -698,7 +698,7 @@ ap_memory out -1 +14 address @@ -797,7 +797,7 @@ ap_memory out -1 +14 address @@ -830,7 +830,7 @@ ap_memory out -1 +14 address @@ -929,7 +929,7 @@ ap_memory out -1 +14 address @@ -962,7 +962,7 @@ ap_memory out -1 +14 address @@ -1061,7 +1061,7 @@ ap_memory out -1 +14 address @@ -1094,7 +1094,7 @@ ap_memory out -1 +14 address @@ -1193,7 +1193,7 @@ ap_memory out -1 +14 address @@ -1226,7 +1226,7 @@ ap_memory out -1 +14 address @@ -1325,7 +1325,7 @@ ap_memory out -1 +14 address @@ -1358,7 +1358,7 @@ ap_memory out -1 +14 address @@ -1457,7 +1457,7 @@ ap_memory out -1 +14 address @@ -1490,7 +1490,7 @@ ap_memory out -1 +14 address @@ -1589,7 +1589,7 @@ ap_memory out -1 +14 address @@ -1622,7 +1622,7 @@ ap_memory out -1 +14 address diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_csynth.xml index 3a361f41..9f27557f 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/queryResult_per_hash_csynth.xml @@ -35,10 +35,10 @@ -4 -784 -3449 -4 +64 +828 +3778 +16 0 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_TtoS_per_hash.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_TtoS_per_hash.verbose.sched.rpt.xml index 6bda06d8..87eb8fc2 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_TtoS_per_hash.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_TtoS_per_hash.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:52 2024 +Mon Jul 22 13:45:33 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_TtoS_per_hash_Pipeline_VITIS_LOOP_473_2.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_TtoS_per_hash_Pipeline_VITIS_LOOP_473_2.verbose.sched.rpt.xml index 7fc44f45..444abe2d 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_TtoS_per_hash_Pipeline_VITIS_LOOP_473_2.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_TtoS_per_hash_Pipeline_VITIS_LOOP_473_2.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:51 2024 +Mon Jul 22 13:45:33 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_reordering_per_hash.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_reordering_per_hash.verbose.sched.rpt.xml index f713558e..c0650da5 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_reordering_per_hash.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_reordering_per_hash.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:10:07 2024 +Mon Jul 22 13:45:49 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_reordering_per_hash_Pipeline_MAIN_LOOP.sched.adb.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_reordering_per_hash_Pipeline_MAIN_LOOP.sched.adb.xml index 5318cb43..6e409938 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_reordering_per_hash_Pipeline_MAIN_LOOP.sched.adb.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_reordering_per_hash_Pipeline_MAIN_LOOP.sched.adb.xml @@ -51132,7 +51132,7 @@ valid3214.exit:63 %shufbuf_valid_191 = phi i1 %shufbuf_valid_127, void %valid321 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_reordering_per_hash_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_reordering_per_hash_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml index da1b9115..a62de4da 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_reordering_per_hash_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_reordering_per_hash_Pipeline_MAIN_LOOP.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:10:06 2024 +Mon Jul 22 13:45:48 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_reordering_per_hash_Pipeline_PEEK_EMULATOR_INIT_VITIS_LOOP_368_1.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_reordering_per_hash_Pipeline_PEEK_EMULATOR_INIT_VITIS_LOOP_368_1.verbose.sched.rpt.xml index 8a28a14d..a50e2dd5 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_reordering_per_hash_Pipeline_PEEK_EMULATOR_INIT_VITIS_LOOP_368_1.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/shuffle_reordering_per_hash_Pipeline_PEEK_EMULATOR_INIT_VITIS_LOOP_368_1.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:52 2024 +Mon Jul 22 13:45:33 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/workload.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/workload.verbose.sched.rpt.xml index 43b348c6..c9175253 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/workload.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/workload.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:47 2024 +Mon Jul 22 13:45:31 2024 2022.2 (Build 3670227 on Oct 13 2022) project diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous.verbose.sched.rpt.xml index f8f57c21..302fd5d8 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:49 2024 +Mon Jul 22 13:45:31 2024 2022.2 (Build 3670227 on Oct 13 2022) project @@ -24,7 +24,7 @@
, min, max, min, max, min, max, Type -43, 43, 0.143 us, 0.143 us, 44, 44, no +262155, 262155, 0.873 ms, 0.873 ms, 262156, 262156, no
diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous_Pipeline_VITIS_LOOP_395_1.sched.adb.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous_Pipeline_VITIS_LOOP_395_1.sched.adb.xml index 5640ac3b..11cc32c6 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous_Pipeline_VITIS_LOOP_395_1.sched.adb.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous_Pipeline_VITIS_LOOP_395_1.sched.adb.xml @@ -71,7 +71,7 @@ - + - + @@ -416,9 +416,9 @@ newFuncRoot:22 %br_ln0 = br void %for.inc - + @@ -431,9 +431,9 @@ for.inc:0 %i_1 = load i5 %i - + @@ -512,7 +512,7 @@ for.inc:2 %specpipeline_ln0 = specpipeline void @_ssdm_op_SpecPipeline, i32 4294 @@ -525,9 +525,9 @@ for.inc:4 %empty = speclooptripcount i32 @_ssdm_op_SpecLoopTripCount, i64 16, i6 - + @@ -861,9 +861,9 @@ for.inc.split:20 %to_store_s4_k1_V = trunc i33 %packed_outputs_stream_s4_kp1_s_r - + @@ -877,9 +877,9 @@ for.inc.split:21 %trunc_ln406 = trunc i5 %i_1 - + @@ -893,9 +893,9 @@ for.inc.split:22 %shl_ln406_2 = bitconcatenate i10 @_ssdm_op_BitConcatenate.i10. - + @@ -941,9 +941,9 @@ for.inc.split:28 %trunc_ln406_3 = partselect i58 @_ssdm_op_PartSelect.i58.i64.i3 - + diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous_Pipeline_VITIS_LOOP_395_1.verbose.sched.rpt.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous_Pipeline_VITIS_LOOP_395_1.verbose.sched.rpt.xml index 06f0f4f1..5affa344 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous_Pipeline_VITIS_LOOP_395_1.verbose.sched.rpt.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous_Pipeline_VITIS_LOOP_395_1.verbose.sched.rpt.xml @@ -1,7 +1,7 @@
-Fri Jul 12 15:09:49 2024 +Mon Jul 22 13:45:31 2024 2022.2 (Build 3670227 on Oct 13 2022) project @@ -24,7 +24,7 @@
, min, max, min, max, min, max, Type -41, 41, 0.137 us, 0.137 us, 41, 41, no +262153, 262153, 0.873 ms, 0.873 ms, 262153, 262153, no
@@ -35,7 +35,7 @@ Loop Name, min, max, Latency, achieved, target, Count, Pipelined -39, 39, 10, 2, 1, 16, yes +262151, 262151, 10, 2, 1, 131072, yes
diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous_Pipeline_VITIS_LOOP_395_1_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous_Pipeline_VITIS_LOOP_395_1_csynth.xml index a75a60ed..e4963528 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous_Pipeline_VITIS_LOOP_395_1_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous_Pipeline_VITIS_LOOP_395_1_csynth.xml @@ -22,21 +22,21 @@ clock cycles -41 -41 -41 -0.137 us -0.137 us -0.137 us -41 -41 +262153 +262153 +262153 +0.873 ms +0.873 ms +0.873 ms +262153 +262153 2.43 -16 -39 -129 +131072 +262151 +872962 2 10 @@ -47,8 +47,8 @@ -1298 -2480 +1324 +2497 0 0 0 diff --git a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous_csynth.xml b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous_csynth.xml index 664152f7..f534f863 100644 --- a/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous_csynth.xml +++ b/benchmarks/tapa_flow/bloomFilter/b3_8_5_8/design/generated/report/writeOutput_synchronous_csynth.xml @@ -22,22 +22,22 @@ clock cycles -43 -43 -43 -0.143 us -0.143 us -0.143 us -44 -44 +262155 +262155 +262155 +0.873 ms +0.873 ms +0.873 ms +262156 +262156 0 -6011 -11050 +6037 +11067 0 0 diff --git a/benchmarks/tapa_flow/sextans/Makefile b/benchmarks/tapa_flow/sextans/Makefile index 3933f8b5..78ead83a 100644 --- a/benchmarks/tapa_flow/sextans/Makefile +++ b/benchmarks/tapa_flow/sextans/Makefile @@ -20,15 +20,6 @@ show_groups: rapidstream $(GRP_UTIL) -i $(TEMP_DIR)/passes/0-imported.json \ -o $(TEMP_DIR)/module_types.csv - - - -show_groups: - rapidstream $(GRP_UTIL) -i $(TEMP_DIR)/passes/0-imported.json \ - -o $(TEMP_DIR)/module_types.csv - - - clean: rm -rf $(TEMP_DIR) *.log rm -rf .Xil .run diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/Makefile b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/Makefile deleted file mode 100644 index 5f299d36..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# Copyright (c) 2024 RapidStream Design Automation, Inc. and contributors. All rights reserved. -# The contributor(s) of this file has/have agreed to the RapidStream Contributor License Agreement. - -ROOT_DIR := $(shell git rev-parse --show-toplevel) -GRP_UTIL := $(ROOT_DIR)/common/util/get_group.py -TEMP_DIR := $(CURDIR)/build -RS_TARGET := $(CURDIR)/$(TEMP_DIR)/dse/candidate_0/exported/impl/vitis_run_hw -TAPA_XO := $(CURDIR)/design/generated/unikernel.xo -PLATFORM := xilinx_u280_gen3x16_xdma_1_202211_1 -PART := xcu280-fsvh2892-2L-e -RUN_FILE := $(CURDIR)/run.py - -all: $(RS_TARGET) - -$(RS_TARGET):$(TAPA_XO) - rapidstream $(RUN_FILE) - - -show_groups: - rapidstream $(GRP_UTIL) -i $(TEMP_DIR)/passes/0-imported.json \ - -o $(TEMP_DIR)/module_types.csv - - - -clean: - rm -rf $(TEMP_DIR) *.log - rm -rf .Xil .run - rm -rf *.exe - rm -rf .ipcache diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/README.md b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/README.md deleted file mode 100644 index 83b44056..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/README.md +++ /dev/null @@ -1,184 +0,0 @@ - - -RapidStream Logo - -# TAPA Flow: K Nearest Neighbour - -## Introduction - - -In this recipe, we demonstrate how to use RapidStream to optimize TAPA projects. The basic steps include: - -- Compile the HLS C++ code into a Vitis-compatible .xo file using TAPA. -- Optimize the .xo file with RapidStream to obtain an optimized .xo file. -- Use Vitis to compile the optimized .xo file into an .xclbin file for FPGA deployment. - -## Tutorial - -### Step 1 (Done): Generate the Xilinx Object File (`.xo`) - - -We utilize TAPA to generate the `.xo` file. If you have not installed TAPA, we've already compiled the C++ source to `.xo` using TAPA. The original C++ source files are located in [design/src](design/src). The generated `.xo` file can be found at [design/generated/unikernel.xo](design/generated/unikernel.xo). To compile C++ to `.xo` using TAPA, we use the script [design/run_tapa.sh](design/run_tapa.sh), with the detailed commands shown below. For your convenience, we have also backed up all the generated metadata by TAPA in the [design/generated](design/generated/) directory. - -```bash -WORK_DIR=generated -tapac \ - --work-dir ${WORK_DIR} \ - --top unikernel \ - --part-num xcu280-fsvh2892-2L-e \ - --clock-period 3.33 \ - -o ${WORK_DIR}/unikernel.xo \ - --connectivity config/link_config.ini \ - src/unikernel.cpp \ - 2>&1 | tee tapa.log - -``` - -### Step 2: Use Rapidstream to Optimize `.xo` Design - -The RapidStream flow conducts design space exploration and generates solutions by taking all TAPA-generated `.xo` file as the input. -The RapidStream flow for TAPA requires the following key inputs: - -- **Platform**: The Vitis platform (e.g., `xilinx_u280_gen3x16_xdma_1_202211_1`). -- **Device**: virtual device define by calling rapidstream APIs based on platform (e.g., `get_u280_vitis_device_factory`). -- **.xo file**: The `.xo` file generated by TAPA -- **Connectivity** (.ini): Include the configuration file for `v++` ([link_config.ini](design/config/link_config.ini)). -- **top_module_name**: Top module name for the kernel. -- **Clock**: All the clock and frequencies. -- **Flatten Module**: Within a design, not all modules need to be optimized. The flatten module name is the target module rapidstream will optimize. - -The Python snippet below shows how we initiate rapidstream instance to set up the rapidstream environment. - -```Python -from rapidstream import get_u280_vitis_device_factory, RapidStreamTAPA -import os - -CURR_DIR = os.path.dirname(os.path.abspath(__file__)) -INI_PATH = f"{CURR_DIR}/design/config/link_config.ini" -VITIS_PLATFORM = "xilinx_u280_gen3x16_xdma_1_202211_1" -XO_PATH = f"{CURR_DIR}/design/generated/unikernel.xo" -kernel_name = "unikernel" -factory = get_u280_vitis_device_factory(VITIS_PLATFORM) -rs = RapidStreamTAPA(f"{CURR_DIR}/build") -rs.set_virtual_device(factory.generate_virtual_device()) -rs.add_xo_file(XO_PATH) -rs.set_vitis_platform(VITIS_PLATFORM) -rs.set_vitis_connectivity_config(INI_PATH) -rs.set_top_module_name(kernel_name) -rs.add_clock("ap_clk", 3.33) -rs.add_flatten_targets([kernel_name]) -``` - -The HBM AXI port connection is described in [design/config/link_config.ini](design/config/link_config.ini). - -```bash -[connectivity] -sp=unikernel.in_0:HBM[0] -sp=unikernel.out_0:HBM[1] -sp=unikernel.in_1:HBM[2] -sp=unikernel.out_1:HBM[3] -sp=unikernel.in_2:HBM[4] -sp=unikernel.out_2:HBM[5] -sp=unikernel.in_3:HBM[6] -sp=unikernel.out_3:HBM[7] -sp=unikernel.in_4:HBM[8] -sp=unikernel.out_4:HBM[9] -sp=unikernel.in_5:HBM[10] -sp=unikernel.out_5:HBM[11] -sp=unikernel.in_6:HBM[12] -sp=unikernel.out_6:HBM[13] -sp=unikernel.in_7:HBM[14] -sp=unikernel.out_7:HBM[15] -sp=unikernel.in_8:HBM[17] -sp=unikernel.out_8:HBM[18] -sp=unikernel.in_9:HBM[19] -sp=unikernel.out_9:HBM[20] -sp=unikernel.in_10:HBM[21] -sp=unikernel.out_10:HBM[22] -sp=unikernel.in_11:HBM[23] -sp=unikernel.out_11:HBM[24] -``` - -As a result, it is necessary to assign the kernel ports to the appropriate slots. The Python code below demonstrates this process. For comprehensive linking details, please refer to the [design/config/link_config.ini](design/config/link_config.ini) file. - - ```Python -right_slot = "SLOT_X1Y0:SLOT_X1Y0" -left_slot = "SLOT_X0Y0:SLOT_X0Y0" -left_args = [ - "in_0", - "out_0", - "in_1", - "out_1", - "in_2", - "out_2", - "in_3", - "out_3", - "in_4", - "out_4", - "in_5", - "out_5", - "in_6", - "out_6", - "in_7", - "out_7", -] -for arg in left_args: - rs.assign_port_to_region(f"m_axi_{arg}_.*", left_slot) -right_args = [ - "in_8", - "out_8", - "in_9", - "out_9", - "in_10", - "out_10", - "in_11", - "out_11", -] -for arg in right_args: - rs.assign_port_to_region(f"m_axi_{arg}_.*", right_slot) -rs.assign_port_to_region("s_axi_control_.*", left_slot) -rs.assign_port_to_region("ap_clk", left_slot) -rs.assign_port_to_region("ap_rst_n", left_slot) -rs.assign_port_to_region("interrupt", left_slot) -``` - -For the complete detail, please refore to [./run.py](./run.py) file. Call the rapidstream by launching the command below or `make all`. - -```bash -rapidstream run.py -``` - -If everything is successful, you should at least get one optimized `.xclbin` file. - - - -### Step 3: Check the Group Module Report - - -RapidStream mandates a clear distinction between communication and computation within user designs. - -- In `Group modules`, users are tasked solely with defining inter-submodule communication. For those familiar with Vivado IP Integrator flow, crafting a Group module mirrors the process of connecting IPs in IPI. RapidStream subsequently integrates appropriate pipeline registers into these Group modules. - -- In `Leaf modules`, users retain the flexibility to implement diverse computational patterns, as RapidStream leaves these Leaf modules unchanged. - -For further details, please consult the [code style](https://docs.rapidstream-da.com/required-coding-style/) section in our Documentation. - -To generate a report on group types, execute the commands below or `run make show_groups`: - -```bash -rapidstream ../../../../common/util/get_group.py \ - -i build/passes/0-imported.json \ - -o build/module_types.csv -``` - -The module types for your design can be found in `build/module_types.csv`. Below, we list the four Group modules. In this design, `unikernel` serves as a Group module, while the other three modules are added by RapidStream. - -| Module Name | Group Type | -|:--------------------------------:|:--------------:| -| unikernel | grouped_module | -|__rs_ap_ctrl_start_ready_pipeline | grouped_module | -|__rs_ff_pipeline | grouped_module | -|__rs_hs_pipeline | grouped_module | diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/config/link_config.ini b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/config/link_config.ini deleted file mode 100644 index 5ea6616e..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/config/link_config.ini +++ /dev/null @@ -1,25 +0,0 @@ -[connectivity] -sp=unikernel.in_0:HBM[0] -sp=unikernel.out_0:HBM[1] -sp=unikernel.in_1:HBM[2] -sp=unikernel.out_1:HBM[3] -sp=unikernel.in_2:HBM[4] -sp=unikernel.out_2:HBM[5] -sp=unikernel.in_3:HBM[6] -sp=unikernel.out_3:HBM[7] -sp=unikernel.in_4:HBM[8] -sp=unikernel.out_4:HBM[9] -sp=unikernel.in_5:HBM[10] -sp=unikernel.out_5:HBM[11] -sp=unikernel.in_6:HBM[12] -sp=unikernel.out_6:HBM[13] -sp=unikernel.in_7:HBM[14] -sp=unikernel.out_7:HBM[15] -sp=unikernel.in_8:HBM[17] -sp=unikernel.out_8:HBM[18] -sp=unikernel.in_9:HBM[19] -sp=unikernel.out_9:HBM[20] -sp=unikernel.in_10:HBM[21] -sp=unikernel.out_10:HBM[22] -sp=unikernel.in_11:HBM[23] -sp=unikernel.out_11:HBM[24] diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/cpp/HEAT3D.cpp b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/cpp/HEAT3D.cpp deleted file mode 100644 index 5f6ea038..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/cpp/HEAT3D.cpp +++ /dev/null @@ -1,171 +0,0 @@ - - - #include - -#include "math.h" - - - - #include "ap_int.h" - -#include - - const int WIDTH_FACTOR = 512/32; - - - #include - -template -T HLS_REG(T in){ -#pragma HLS pipeline -#pragma HLS inline off -#pragma HLS interface port=return register - return in; -} -float HEAT3D_stencil_kernel(float in_1_0_0, float in_0_0_1, - float in_0_0_m1, float in_0_0_0, float in_0_m1_0, float in_m1_0_0, - float in_0_1_0) -{ - /* - (cal1 + cal2 + cal3 + in(0, 0, 0)) - */ - const float cal1 = ((in_1_0_0 - ((float)2 * in_0_0_0) + in_m1_0_0) / (float)8); - const float cal2 = ((in_0_1_0 - ((float)2 * in_0_0_0) + in_0_m1_0) / (float)8); - const float cal3 = ((in_0_0_1 - ((float)2 * in_0_0_0) + in_0_0_m1) / (float)8); - return (cal1 + cal2 + cal3 + in_0_0_0); -} // stencil kernel definition -void HEAT3D(tapa::istream >&in, tapa::ostream >&out, //int useless, - int iters) -{ -#pragma HLS disaggregate variable = in -#pragma HLS interface ap_fifo port = in._ -#pragma HLS aggregate variable = in._ bit -#pragma HLS interface ap_fifo port = in._peek -#pragma HLS aggregate variable = in._peek bit -void(in._.empty()); -void(in._peek.empty()); - -#pragma HLS disaggregate variable = out -#pragma HLS interface ap_fifo port = out._ -#pragma HLS aggregate variable = out._ bit -void(out._.full()); - - - ap_uint<512> in_block_m16; - hls::stream, 15> in_stream_m15_to_m2; - ap_uint<512> in_block_m1; - ap_uint<512> in_block_0; - ap_uint<512> in_block_1; - hls::stream, 15> in_stream_2_to_15; - ap_uint<512> in_block_16; - in_block_m16 = in.read(); - for (int i = 16 + -15; i < 16 + -1; i++) { - in_stream_m15_to_m2 << in.read(); - } - in_block_m1 = in.read(); - in_block_0 = in.read(); - in_block_1 = in.read(); - for (int i = 16 + 2; i < 16 + 16; i++) { - in_stream_2_to_15 << in.read(); - } - in_block_16 = in.read(); - MAJOR_LOOP: - for (int i = 0; i < 256/WIDTH_FACTOR*256 / 12 + (16 +17)*(iters-1); i++) { -#pragma HLS pipeline II=1 - ap_uint<512> out_temp; - COMPUTE_LOOP: - for (int k = 0; k < 16; k++) { -#pragma HLS unroll - float in_1_0_0[16], in_0_0_1[16], in_0_0_m1[16], in_0_0_0[16], in_0_m1_0[16], in_m1_0_0[16], in_0_1_0[16]; -#pragma HLS array_partition variable=in_1_0_0 complete dim=0 -#pragma HLS array_partition variable=in_0_0_1 complete dim=0 -#pragma HLS array_partition variable=in_0_0_m1 complete dim=0 -#pragma HLS array_partition variable=in_0_0_0 complete dim=0 -#pragma HLS array_partition variable=in_0_m1_0 complete dim=0 -#pragma HLS array_partition variable=in_m1_0_0 complete dim=0 -#pragma HLS array_partition variable=in_0_1_0 complete dim=0 - unsigned int idx_k = k << 5; - uint32_t temp_in_1_0_0 = in_block_16.range(idx_k+31, idx_k); - in_1_0_0[k] = *((float*)(&temp_in_1_0_0)); - uint32_t temp_in_0_0_1 = (k<15)?in_block_0.range(idx_k + 63, idx_k + 32) : in_block_1.range(idx_k + -449, idx_k + -480); - in_0_0_1[k] = *((float*)(&temp_in_0_0_1)); - uint32_t temp_in_0_0_m1 = (k<1)?in_block_m1.range(idx_k + 511, idx_k + 480) : in_block_0.range(idx_k + -1, idx_k + -32); - in_0_0_m1[k] = *((float*)(&temp_in_0_0_m1)); - uint32_t temp_in_0_0_0 = in_block_0.range(idx_k+31, idx_k); - in_0_0_0[k] = *((float*)(&temp_in_0_0_0)); - uint32_t temp_in_0_m1_0 = in_block_m1.range(idx_k+31, idx_k); - in_0_m1_0[k] = *((float*)(&temp_in_0_m1_0)); - uint32_t temp_in_m1_0_0 = in_block_m16.range(idx_k+31, idx_k); - in_m1_0_0[k] = *((float*)(&temp_in_m1_0_0)); - uint32_t temp_in_0_1_0 = in_block_1.range(idx_k+31, idx_k); - in_0_1_0[k] = *((float*)(&temp_in_0_1_0)); - float result = HEAT3D_stencil_kernel(in_1_0_0[k], in_0_0_1[k], in_0_0_m1[k], in_0_0_0[k], in_0_m1_0[k], in_m1_0_0[k], in_0_1_0[k]); - out_temp.range(idx_k+31, idx_k) = *((uint32_t *)(&result)); - } - out.write(out_temp); - in_block_m16 = in_stream_m15_to_m2.read(); - in_stream_m15_to_m2 << HLS_REG(in_block_m1); - in_block_m1 = HLS_REG(in_block_0); - in_block_0 = HLS_REG(in_block_1); - in_block_1 = in_stream_2_to_15.read(); - in_stream_2_to_15 << HLS_REG(in_block_16); - unsigned int idx_in = 16 + (i + 17); - in_block_16 = HLS_REG(in.read()); - } - ap_uint<512> popout_in_stream_m15_to_m2; - for (int i = 0; i < 14; i++) { -#pragma HLS pipeline II=1 - in_stream_m15_to_m2 >> popout_in_stream_m15_to_m2; - } - ap_uint<512> popout_in_stream_2_to_15; - for (int i = 0; i < 14; i++) { -#pragma HLS pipeline II=1 - in_stream_2_to_15 >> popout_in_stream_2_to_15; - } - return; -} // stencil kernel definition -void load(tapa::async_mmap >& a, tapa::async_mmap >& b, - tapa::ostream > &stream_out, tapa::istream > &stream_in, - uint32_t iters) { -#pragma HLS inline off - unsigned int loop_bound = 256/WIDTH_FACTOR*256 / 12 + (16 +17)*(iters-1) + 17 + 16; - for(int k_wr_req = (17 + 16), k_wr_resp = (17 + 16), k_rd_req = 0, k_rd_resp = 0; k_rd_resp < loop_bound || k_wr_resp < loop_bound; ) { - // read from a - if (k_rd_req < loop_bound && a.read_addr.try_write(k_rd_req)) { - k_rd_req++; - } - if (k_rd_resp < loop_bound && !a.read_data.empty() && !stream_out.full()) { - ap_uint<512> temp = a.read_data.read(nullptr); - stream_out.write(temp); - k_rd_resp++; - } - // write to b - if (k_wr_req < loop_bound && !b.write_addr.full() && !b.write_data.full() && !stream_in.empty()) { - b.write_addr.write(k_wr_req); - b.write_data.write(stream_in.read()); - k_wr_req++; - } - if (!b.write_resp.empty()) { - k_wr_resp += (unsigned int)(b.write_resp.read()) + 1; - } - } -} -void inter_kernel(uint64_t a, uint64_t b, - tapa::ostream > &stream_out, tapa::istream > &stream_in, - uint32_t iters); -void unikernel(uint64_t in_0, uint64_t out_0, //HBM 0 1 - uint64_t in_1, uint64_t out_1, - uint64_t in_2, uint64_t out_2, - uint64_t in_3, uint64_t out_3, - uint64_t in_4, uint64_t out_4, - uint64_t in_5, uint64_t out_5, - uint64_t in_6, uint64_t out_6, - uint64_t in_7, uint64_t out_7, - uint64_t in_8, uint64_t out_8, - uint64_t in_9, uint64_t out_9, - uint64_t in_10, uint64_t out_10, - uint64_t in_11, uint64_t out_11, - // tapa::mmap in_12, tapa::mmap out_12, - // tapa::mmap in_13, tapa::mmap out_13, - // tapa::mmap in_14, tapa::mmap out_14, - uint32_t iters); diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/cpp/inter_kernel.cpp b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/cpp/inter_kernel.cpp deleted file mode 100644 index 10749e91..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/cpp/inter_kernel.cpp +++ /dev/null @@ -1,157 +0,0 @@ - - - #include - -#include "math.h" - - - - #include "ap_int.h" - -#include - - const int WIDTH_FACTOR = 512/32; - - - #include - -template -T HLS_REG(T in){ -#pragma HLS pipeline -#pragma HLS inline off -#pragma HLS interface port=return register - return in; -} -float HEAT3D_stencil_kernel(float in_1_0_0, float in_0_0_1, - float in_0_0_m1, float in_0_0_0, float in_0_m1_0, float in_m1_0_0, - float in_0_1_0) -{ - /* - (cal1 + cal2 + cal3 + in(0, 0, 0)) - */ - const float cal1 = ((in_1_0_0 - ((float)2 * in_0_0_0) + in_m1_0_0) / (float)8); - const float cal2 = ((in_0_1_0 - ((float)2 * in_0_0_0) + in_0_m1_0) / (float)8); - const float cal3 = ((in_0_0_1 - ((float)2 * in_0_0_0) + in_0_0_m1) / (float)8); - return (cal1 + cal2 + cal3 + in_0_0_0); -} // stencil kernel definition -void HEAT3D(tapa::istream >&in, tapa::ostream >&out, //int useless, - int iters) -; // stencil kernel definition -void load(tapa::async_mmap >& a, tapa::async_mmap >& b, - tapa::ostream > &stream_out, tapa::istream > &stream_in, - uint32_t iters) { -#pragma HLS inline off - unsigned int loop_bound = 256/WIDTH_FACTOR*256 / 12 + (16 +17)*(iters-1) + 17 + 16; - for(int k_wr_req = (17 + 16), k_wr_resp = (17 + 16), k_rd_req = 0, k_rd_resp = 0; k_rd_resp < loop_bound || k_wr_resp < loop_bound; ) { - // read from a - if (k_rd_req < loop_bound && a.read_addr.try_write(k_rd_req)) { - k_rd_req++; - } - if (k_rd_resp < loop_bound && !a.read_data.empty() && !stream_out.full()) { - ap_uint<512> temp = a.read_data.read(nullptr); - stream_out.write(temp); - k_rd_resp++; - } - // write to b - if (k_wr_req < loop_bound && !b.write_addr.full() && !b.write_data.full() && !stream_in.empty()) { - b.write_addr.write(k_wr_req); - b.write_data.write(stream_in.read()); - k_wr_req++; - } - if (!b.write_resp.empty()) { - k_wr_resp += (unsigned int)(b.write_resp.read()) + 1; - } - } -} -void inter_kernel(tapa::async_mmap >& a, tapa::async_mmap >& b, - tapa::ostream > &stream_out, tapa::istream > &stream_in, - uint32_t iters){ -#pragma HLS disaggregate variable = a -#pragma HLS interface ap_fifo port = a.read_addr._ -#pragma HLS aggregate variable = a.read_addr._ bit -#pragma HLS interface ap_fifo port = a.read_data._ -#pragma HLS aggregate variable = a.read_data._ bit -#pragma HLS interface ap_fifo port = a.write_addr._ -#pragma HLS aggregate variable = a.write_addr._ bit -#pragma HLS interface ap_fifo port = a.write_data._ -#pragma HLS aggregate variable = a.write_data._ bit -#pragma HLS interface ap_fifo port = a.write_resp._ -#pragma HLS aggregate variable = a.write_resp._ bit -#pragma HLS disaggregate variable = a .read_data -#pragma HLS interface ap_fifo port = a.read_data._peek -#pragma HLS aggregate variable = a.read_data._peek bit -#pragma HLS disaggregate variable = a .write_resp -#pragma HLS interface ap_fifo port = a.write_resp._peek -#pragma HLS aggregate variable = a.write_resp._peek bit -void(a.read_addr._.full()); -void(a.read_data._.empty()); -void(a.read_data._peek.empty()); -void(a.write_addr._.full()); -void(a.write_data._.full()); -void(a.write_resp._.empty()); -void(a.write_resp._peek.empty()); - -#pragma HLS disaggregate variable = b -#pragma HLS interface ap_fifo port = b.read_addr._ -#pragma HLS aggregate variable = b.read_addr._ bit -#pragma HLS interface ap_fifo port = b.read_data._ -#pragma HLS aggregate variable = b.read_data._ bit -#pragma HLS interface ap_fifo port = b.write_addr._ -#pragma HLS aggregate variable = b.write_addr._ bit -#pragma HLS interface ap_fifo port = b.write_data._ -#pragma HLS aggregate variable = b.write_data._ bit -#pragma HLS interface ap_fifo port = b.write_resp._ -#pragma HLS aggregate variable = b.write_resp._ bit -#pragma HLS disaggregate variable = b .read_data -#pragma HLS interface ap_fifo port = b.read_data._peek -#pragma HLS aggregate variable = b.read_data._peek bit -#pragma HLS disaggregate variable = b .write_resp -#pragma HLS interface ap_fifo port = b.write_resp._peek -#pragma HLS aggregate variable = b.write_resp._peek bit -void(b.read_addr._.full()); -void(b.read_data._.empty()); -void(b.read_data._peek.empty()); -void(b.write_addr._.full()); -void(b.write_data._.full()); -void(b.write_resp._.empty()); -void(b.write_resp._peek.empty()); - -#pragma HLS disaggregate variable = stream_out -#pragma HLS interface ap_fifo port = stream_out._ -#pragma HLS aggregate variable = stream_out._ bit -void(stream_out._.full()); - -#pragma HLS disaggregate variable = stream_in -#pragma HLS interface ap_fifo port = stream_in._ -#pragma HLS aggregate variable = stream_in._ bit -#pragma HLS interface ap_fifo port = stream_in._peek -#pragma HLS aggregate variable = stream_in._peek bit -void(stream_in._.empty()); -void(stream_in._peek.empty()); - - - for(int i = 0; i < iters; i+=1){ - if(i%(2*1)==0){ - load(a, b, stream_out, stream_in, iters); - } - else{ - load(b, a, stream_out, stream_in, iters); - } - } -} -void unikernel(uint64_t in_0, uint64_t out_0, //HBM 0 1 - uint64_t in_1, uint64_t out_1, - uint64_t in_2, uint64_t out_2, - uint64_t in_3, uint64_t out_3, - uint64_t in_4, uint64_t out_4, - uint64_t in_5, uint64_t out_5, - uint64_t in_6, uint64_t out_6, - uint64_t in_7, uint64_t out_7, - uint64_t in_8, uint64_t out_8, - uint64_t in_9, uint64_t out_9, - uint64_t in_10, uint64_t out_10, - uint64_t in_11, uint64_t out_11, - // tapa::mmap in_12, tapa::mmap out_12, - // tapa::mmap in_13, tapa::mmap out_13, - // tapa::mmap in_14, tapa::mmap out_14, - uint32_t iters); diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/cpp/unikernel.cpp b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/cpp/unikernel.cpp deleted file mode 100644 index 9e2fbe10..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/cpp/unikernel.cpp +++ /dev/null @@ -1,192 +0,0 @@ - - - #include - -#include "math.h" - - - - #include "ap_int.h" - -#include - - const int WIDTH_FACTOR = 512/32; - - - #include - -template -T HLS_REG(T in){ -#pragma HLS pipeline -#pragma HLS inline off -#pragma HLS interface port=return register - return in; -} -float HEAT3D_stencil_kernel(float in_1_0_0, float in_0_0_1, - float in_0_0_m1, float in_0_0_0, float in_0_m1_0, float in_m1_0_0, - float in_0_1_0) -{ - /* - (cal1 + cal2 + cal3 + in(0, 0, 0)) - */ - const float cal1 = ((in_1_0_0 - ((float)2 * in_0_0_0) + in_m1_0_0) / (float)8); - const float cal2 = ((in_0_1_0 - ((float)2 * in_0_0_0) + in_0_m1_0) / (float)8); - const float cal3 = ((in_0_0_1 - ((float)2 * in_0_0_0) + in_0_0_m1) / (float)8); - return (cal1 + cal2 + cal3 + in_0_0_0); -} // stencil kernel definition -void HEAT3D(tapa::istream >&in, tapa::ostream >&out, //int useless, - int iters) -; // stencil kernel definition -void load(tapa::async_mmap >& a, tapa::async_mmap >& b, - tapa::ostream > &stream_out, tapa::istream > &stream_in, - uint32_t iters) { -#pragma HLS inline off - unsigned int loop_bound = 256/WIDTH_FACTOR*256 / 12 + (16 +17)*(iters-1) + 17 + 16; - for(int k_wr_req = (17 + 16), k_wr_resp = (17 + 16), k_rd_req = 0, k_rd_resp = 0; k_rd_resp < loop_bound || k_wr_resp < loop_bound; ) { - // read from a - if (k_rd_req < loop_bound && a.read_addr.try_write(k_rd_req)) { - k_rd_req++; - } - if (k_rd_resp < loop_bound && !a.read_data.empty() && !stream_out.full()) { - ap_uint<512> temp = a.read_data.read(nullptr); - stream_out.write(temp); - k_rd_resp++; - } - // write to b - if (k_wr_req < loop_bound && !b.write_addr.full() && !b.write_data.full() && !stream_in.empty()) { - b.write_addr.write(k_wr_req); - b.write_data.write(stream_in.read()); - k_wr_req++; - } - if (!b.write_resp.empty()) { - k_wr_resp += (unsigned int)(b.write_resp.read()) + 1; - } - } -} -void inter_kernel(uint64_t a, uint64_t b, - tapa::ostream > &stream_out, tapa::istream > &stream_in, - uint32_t iters); -extern "C" { - -void unikernel(uint64_t in_0, uint64_t out_0, //HBM 0 1 - uint64_t in_1, uint64_t out_1, - uint64_t in_2, uint64_t out_2, - uint64_t in_3, uint64_t out_3, - uint64_t in_4, uint64_t out_4, - uint64_t in_5, uint64_t out_5, - uint64_t in_6, uint64_t out_6, - uint64_t in_7, uint64_t out_7, - uint64_t in_8, uint64_t out_8, - uint64_t in_9, uint64_t out_9, - uint64_t in_10, uint64_t out_10, - uint64_t in_11, uint64_t out_11, - // tapa::mmap in_12, tapa::mmap out_12, - // tapa::mmap in_13, tapa::mmap out_13, - // tapa::mmap in_14, tapa::mmap out_14, - uint32_t iters){ - -#pragma HLS interface s_axilite port = in_0 bundle = control -{ auto val = reinterpret_cast(in_0); } -{ auto val = reinterpret_cast(in_0); } - -#pragma HLS interface s_axilite port = out_0 bundle = control -{ auto val = reinterpret_cast(out_0); } -{ auto val = reinterpret_cast(out_0); } - -#pragma HLS interface s_axilite port = in_1 bundle = control -{ auto val = reinterpret_cast(in_1); } -{ auto val = reinterpret_cast(in_1); } - -#pragma HLS interface s_axilite port = out_1 bundle = control -{ auto val = reinterpret_cast(out_1); } -{ auto val = reinterpret_cast(out_1); } - -#pragma HLS interface s_axilite port = in_2 bundle = control -{ auto val = reinterpret_cast(in_2); } -{ auto val = reinterpret_cast(in_2); } - -#pragma HLS interface s_axilite port = out_2 bundle = control -{ auto val = reinterpret_cast(out_2); } -{ auto val = reinterpret_cast(out_2); } - -#pragma HLS interface s_axilite port = in_3 bundle = control -{ auto val = reinterpret_cast(in_3); } -{ auto val = reinterpret_cast(in_3); } - -#pragma HLS interface s_axilite port = out_3 bundle = control -{ auto val = reinterpret_cast(out_3); } -{ auto val = reinterpret_cast(out_3); } - -#pragma HLS interface s_axilite port = in_4 bundle = control -{ auto val = reinterpret_cast(in_4); } -{ auto val = reinterpret_cast(in_4); } - -#pragma HLS interface s_axilite port = out_4 bundle = control -{ auto val = reinterpret_cast(out_4); } -{ auto val = reinterpret_cast(out_4); } - -#pragma HLS interface s_axilite port = in_5 bundle = control -{ auto val = reinterpret_cast(in_5); } -{ auto val = reinterpret_cast(in_5); } - -#pragma HLS interface s_axilite port = out_5 bundle = control -{ auto val = reinterpret_cast(out_5); } -{ auto val = reinterpret_cast(out_5); } - -#pragma HLS interface s_axilite port = in_6 bundle = control -{ auto val = reinterpret_cast(in_6); } -{ auto val = reinterpret_cast(in_6); } - -#pragma HLS interface s_axilite port = out_6 bundle = control -{ auto val = reinterpret_cast(out_6); } -{ auto val = reinterpret_cast(out_6); } - -#pragma HLS interface s_axilite port = in_7 bundle = control -{ auto val = reinterpret_cast(in_7); } -{ auto val = reinterpret_cast(in_7); } - -#pragma HLS interface s_axilite port = out_7 bundle = control -{ auto val = reinterpret_cast(out_7); } -{ auto val = reinterpret_cast(out_7); } - -#pragma HLS interface s_axilite port = in_8 bundle = control -{ auto val = reinterpret_cast(in_8); } -{ auto val = reinterpret_cast(in_8); } - -#pragma HLS interface s_axilite port = out_8 bundle = control -{ auto val = reinterpret_cast(out_8); } -{ auto val = reinterpret_cast(out_8); } - -#pragma HLS interface s_axilite port = in_9 bundle = control -{ auto val = reinterpret_cast(in_9); } -{ auto val = reinterpret_cast(in_9); } - -#pragma HLS interface s_axilite port = out_9 bundle = control -{ auto val = reinterpret_cast(out_9); } -{ auto val = reinterpret_cast(out_9); } - -#pragma HLS interface s_axilite port = in_10 bundle = control -{ auto val = reinterpret_cast(in_10); } -{ auto val = reinterpret_cast(in_10); } - -#pragma HLS interface s_axilite port = out_10 bundle = control -{ auto val = reinterpret_cast(out_10); } -{ auto val = reinterpret_cast(out_10); } - -#pragma HLS interface s_axilite port = in_11 bundle = control -{ auto val = reinterpret_cast(in_11); } -{ auto val = reinterpret_cast(in_11); } - -#pragma HLS interface s_axilite port = out_11 bundle = control -{ auto val = reinterpret_cast(out_11); } -{ auto val = reinterpret_cast(out_11); } - -#pragma HLS interface s_axilite port = iters bundle = control -{ auto val = reinterpret_cast(iters); } - - -#pragma HLS interface s_axilite port = return bundle = control -} - - -} // extern "C" diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/flatten/flatten-e756cccc-unikernel.cpp b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/flatten/flatten-e756cccc-unikernel.cpp deleted file mode 100644 index 5bb83bd5..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/flatten/flatten-e756cccc-unikernel.cpp +++ /dev/null @@ -1,201 +0,0 @@ - - - #include - -#include "math.h" - - - - #include "ap_int.h" - -#include - - const int WIDTH_FACTOR = 512/32; - - - #include - -template -T HLS_REG(T in){ -#pragma HLS pipeline -#pragma HLS inline off -#pragma HLS interface port=return register - return in; -} -float HEAT3D_stencil_kernel(float in_1_0_0, float in_0_0_1, - float in_0_0_m1, float in_0_0_0, float in_0_m1_0, float in_m1_0_0, - float in_0_1_0) -{ - /* - (cal1 + cal2 + cal3 + in(0, 0, 0)) - */ - const float cal1 = ((in_1_0_0 - ((float)2 * in_0_0_0) + in_m1_0_0) / (float)8); - const float cal2 = ((in_0_1_0 - ((float)2 * in_0_0_0) + in_0_m1_0) / (float)8); - const float cal3 = ((in_0_0_1 - ((float)2 * in_0_0_0) + in_0_0_m1) / (float)8); - return (cal1 + cal2 + cal3 + in_0_0_0); -} // stencil kernel definition -void HEAT3D(tapa::istream >&in, tapa::ostream >&out, //int useless, - int iters) -{ - ap_uint<512> in_block_m16; - hls::stream, 15> in_stream_m15_to_m2; - ap_uint<512> in_block_m1; - ap_uint<512> in_block_0; - ap_uint<512> in_block_1; - hls::stream, 15> in_stream_2_to_15; - ap_uint<512> in_block_16; - in_block_m16 = in.read(); - for (int i = 16 + -15; i < 16 + -1; i++) { - in_stream_m15_to_m2 << in.read(); - } - in_block_m1 = in.read(); - in_block_0 = in.read(); - in_block_1 = in.read(); - for (int i = 16 + 2; i < 16 + 16; i++) { - in_stream_2_to_15 << in.read(); - } - in_block_16 = in.read(); - MAJOR_LOOP: - for (int i = 0; i < 256/WIDTH_FACTOR*256 / 12 + (16 +17)*(iters-1); i++) { -#pragma HLS pipeline II=1 - ap_uint<512> out_temp; - COMPUTE_LOOP: - for (int k = 0; k < 16; k++) { -#pragma HLS unroll - float in_1_0_0[16], in_0_0_1[16], in_0_0_m1[16], in_0_0_0[16], in_0_m1_0[16], in_m1_0_0[16], in_0_1_0[16]; -#pragma HLS array_partition variable=in_1_0_0 complete dim=0 -#pragma HLS array_partition variable=in_0_0_1 complete dim=0 -#pragma HLS array_partition variable=in_0_0_m1 complete dim=0 -#pragma HLS array_partition variable=in_0_0_0 complete dim=0 -#pragma HLS array_partition variable=in_0_m1_0 complete dim=0 -#pragma HLS array_partition variable=in_m1_0_0 complete dim=0 -#pragma HLS array_partition variable=in_0_1_0 complete dim=0 - unsigned int idx_k = k << 5; - uint32_t temp_in_1_0_0 = in_block_16.range(idx_k+31, idx_k); - in_1_0_0[k] = *((float*)(&temp_in_1_0_0)); - uint32_t temp_in_0_0_1 = (k<15)?in_block_0.range(idx_k + 63, idx_k + 32) : in_block_1.range(idx_k + -449, idx_k + -480); - in_0_0_1[k] = *((float*)(&temp_in_0_0_1)); - uint32_t temp_in_0_0_m1 = (k<1)?in_block_m1.range(idx_k + 511, idx_k + 480) : in_block_0.range(idx_k + -1, idx_k + -32); - in_0_0_m1[k] = *((float*)(&temp_in_0_0_m1)); - uint32_t temp_in_0_0_0 = in_block_0.range(idx_k+31, idx_k); - in_0_0_0[k] = *((float*)(&temp_in_0_0_0)); - uint32_t temp_in_0_m1_0 = in_block_m1.range(idx_k+31, idx_k); - in_0_m1_0[k] = *((float*)(&temp_in_0_m1_0)); - uint32_t temp_in_m1_0_0 = in_block_m16.range(idx_k+31, idx_k); - in_m1_0_0[k] = *((float*)(&temp_in_m1_0_0)); - uint32_t temp_in_0_1_0 = in_block_1.range(idx_k+31, idx_k); - in_0_1_0[k] = *((float*)(&temp_in_0_1_0)); - float result = HEAT3D_stencil_kernel(in_1_0_0[k], in_0_0_1[k], in_0_0_m1[k], in_0_0_0[k], in_0_m1_0[k], in_m1_0_0[k], in_0_1_0[k]); - out_temp.range(idx_k+31, idx_k) = *((uint32_t *)(&result)); - } - out.write(out_temp); - in_block_m16 = in_stream_m15_to_m2.read(); - in_stream_m15_to_m2 << HLS_REG(in_block_m1); - in_block_m1 = HLS_REG(in_block_0); - in_block_0 = HLS_REG(in_block_1); - in_block_1 = in_stream_2_to_15.read(); - in_stream_2_to_15 << HLS_REG(in_block_16); - unsigned int idx_in = 16 + (i + 17); - in_block_16 = HLS_REG(in.read()); - } - ap_uint<512> popout_in_stream_m15_to_m2; - for (int i = 0; i < 14; i++) { -#pragma HLS pipeline II=1 - in_stream_m15_to_m2 >> popout_in_stream_m15_to_m2; - } - ap_uint<512> popout_in_stream_2_to_15; - for (int i = 0; i < 14; i++) { -#pragma HLS pipeline II=1 - in_stream_2_to_15 >> popout_in_stream_2_to_15; - } - return; -} // stencil kernel definition -void load(tapa::async_mmap >& a, tapa::async_mmap >& b, - tapa::ostream > &stream_out, tapa::istream > &stream_in, - uint32_t iters) { -#pragma HLS inline off - unsigned int loop_bound = 256/WIDTH_FACTOR*256 / 12 + (16 +17)*(iters-1) + 17 + 16; - for(int k_wr_req = (17 + 16), k_wr_resp = (17 + 16), k_rd_req = 0, k_rd_resp = 0; k_rd_resp < loop_bound || k_wr_resp < loop_bound; ) { - // read from a - if (k_rd_req < loop_bound && a.read_addr.try_write(k_rd_req)) { - k_rd_req++; - } - if (k_rd_resp < loop_bound && !a.read_data.empty() && !stream_out.full()) { - ap_uint<512> temp = a.read_data.read(nullptr); - stream_out.write(temp); - k_rd_resp++; - } - // write to b - if (k_wr_req < loop_bound && !b.write_addr.full() && !b.write_data.full() && !stream_in.empty()) { - b.write_addr.write(k_wr_req); - b.write_data.write(stream_in.read()); - k_wr_req++; - } - if (!b.write_resp.empty()) { - k_wr_resp += (unsigned int)(b.write_resp.read()) + 1; - } - } -} -void inter_kernel(tapa::async_mmap >& a, tapa::async_mmap >& b, - tapa::ostream > &stream_out, tapa::istream > &stream_in, - uint32_t iters){ - for(int i = 0; i < iters; i+=1){ - if(i%(2*1)==0){ - load(a, b, stream_out, stream_in, iters); - } - else{ - load(b, a, stream_out, stream_in, iters); - } - } -} -void unikernel(tapa::mmap > in_0, tapa::mmap > out_0, //HBM 0 1 - tapa::mmap > in_1, tapa::mmap > out_1, - tapa::mmap > in_2, tapa::mmap > out_2, - tapa::mmap > in_3, tapa::mmap > out_3, - tapa::mmap > in_4, tapa::mmap > out_4, - tapa::mmap > in_5, tapa::mmap > out_5, - tapa::mmap > in_6, tapa::mmap > out_6, - tapa::mmap > in_7, tapa::mmap > out_7, - tapa::mmap > in_8, tapa::mmap > out_8, - tapa::mmap > in_9, tapa::mmap > out_9, - tapa::mmap > in_10, tapa::mmap > out_10, - tapa::mmap > in_11, tapa::mmap > out_11, - // tapa::mmap in_12, tapa::mmap out_12, - // tapa::mmap in_13, tapa::mmap out_13, - // tapa::mmap in_14, tapa::mmap out_14, - uint32_t iters){ - tapa::streams, 15, 3> k_wr; - tapa::streams, 15, 3> k_rd; - tapa::task() - .invoke(inter_kernel, in_0, out_0, k_rd[0], k_wr[0], iters) - .invoke(HEAT3D, k_rd[0], k_wr[0], iters) - .invoke(inter_kernel, in_1, out_1, k_rd[1], k_wr[1], iters) - .invoke(HEAT3D, k_rd[1], k_wr[1], iters) - .invoke(inter_kernel, in_2, out_2, k_rd[2], k_wr[2], iters) - .invoke(HEAT3D, k_rd[2], k_wr[2], iters) - .invoke(inter_kernel, in_3, out_3, k_rd[3], k_wr[3], iters) - .invoke(HEAT3D, k_rd[3], k_wr[3], iters) - .invoke(inter_kernel, in_4, out_4, k_rd[4], k_wr[4], iters) - .invoke(HEAT3D, k_rd[4], k_wr[4], iters) - .invoke(inter_kernel, in_5, out_5, k_rd[5], k_wr[5], iters) - .invoke(HEAT3D, k_rd[5], k_wr[5], iters) - .invoke(inter_kernel, in_6, out_6, k_rd[6], k_wr[6], iters) - .invoke(HEAT3D, k_rd[6], k_wr[6], iters) - .invoke(inter_kernel, in_7, out_7, k_rd[7], k_wr[7], iters) - .invoke(HEAT3D, k_rd[7], k_wr[7], iters) - .invoke(inter_kernel, in_8, out_8, k_rd[8], k_wr[8], iters) - .invoke(HEAT3D, k_rd[8], k_wr[8], iters) - .invoke(inter_kernel, in_9, out_9, k_rd[9], k_wr[9], iters) - .invoke(HEAT3D, k_rd[9], k_wr[9], iters) - .invoke(inter_kernel, in_10, out_10, k_rd[10], k_wr[10], iters) - .invoke(HEAT3D, k_rd[10], k_wr[10], iters) - .invoke(inter_kernel, in_11, out_11, k_rd[11], k_wr[11], iters) - .invoke(HEAT3D, k_rd[11], k_wr[11], iters) - // .invoke(inter_kernel, in_12, out_12, k_rd[12], k_wr[12], iters) - // .invoke(HEAT3D, k_rd[12], k_wr[12], iters) - // .invoke(inter_kernel, in_13, out_13, k_rd[13], k_wr[13], iters) - // .invoke(HEAT3D, k_rd[13], k_wr[13], iters) - // .invoke(inter_kernel, in_14, out_14, k_rd[14], k_wr[14], iters) - // .invoke(HEAT3D, k_rd[14], k_wr[14], iters) - ; -} diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/graph.json b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/graph.json deleted file mode 100644 index 5a19a36b..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/graph.json +++ /dev/null @@ -1,959 +0,0 @@ -{ - "cflags": [ - "-std=c++17", - "-I", - "/home/ylxiao/.local/lib/python3.8/site-packages/tapa/../../../src", - "-isystem", - "/tools/Xilinx/Vitis_HLS/2022.2/include" - ], - "tasks": { - "HEAT3D": { - "code": "\n\n #include \n\n#include \"math.h\"\n\n\n\n #include \"ap_int.h\"\n\n#include \n\n const int WIDTH_FACTOR = 512/32;\n\n\n #include \n\ntemplate\nT HLS_REG(T in){\n#pragma HLS pipeline\n#pragma HLS inline off\n#pragma HLS interface port=return register\n return in;\n}\nfloat HEAT3D_stencil_kernel(float in_1_0_0, float in_0_0_1,\n float in_0_0_m1, float in_0_0_0, float in_0_m1_0, float in_m1_0_0,\n float in_0_1_0)\n{\n /*\n (cal1 + cal2 + cal3 + in(0, 0, 0))\n */\n const float cal1 = ((in_1_0_0 - ((float)2 * in_0_0_0) + in_m1_0_0) / (float)8);\n const float cal2 = ((in_0_1_0 - ((float)2 * in_0_0_0) + in_0_m1_0) / (float)8);\n const float cal3 = ((in_0_0_1 - ((float)2 * in_0_0_0) + in_0_0_m1) / (float)8);\n return (cal1 + cal2 + cal3 + in_0_0_0);\n} // stencil kernel definition\nvoid HEAT3D(tapa::istream >&in, tapa::ostream >&out, //int useless, \n int iters)\n{\n#pragma HLS disaggregate variable = in\n#pragma HLS interface ap_fifo port = in._\n#pragma HLS aggregate variable = in._ bit\n#pragma HLS interface ap_fifo port = in._peek\n#pragma HLS aggregate variable = in._peek bit\nvoid(in._.empty());\nvoid(in._peek.empty());\n\n#pragma HLS disaggregate variable = out\n#pragma HLS interface ap_fifo port = out._\n#pragma HLS aggregate variable = out._ bit\nvoid(out._.full());\n\n\n ap_uint<512> in_block_m16;\n hls::stream, 15> in_stream_m15_to_m2;\n ap_uint<512> in_block_m1;\n ap_uint<512> in_block_0;\n ap_uint<512> in_block_1;\n hls::stream, 15> in_stream_2_to_15;\n ap_uint<512> in_block_16;\n in_block_m16 = in.read();\n for (int i = 16 + -15; i < 16 + -1; i++) {\n in_stream_m15_to_m2 << in.read();\n }\n in_block_m1 = in.read();\n in_block_0 = in.read();\n in_block_1 = in.read();\n for (int i = 16 + 2; i < 16 + 16; i++) {\n in_stream_2_to_15 << in.read();\n }\n in_block_16 = in.read();\n MAJOR_LOOP:\n for (int i = 0; i < 256/WIDTH_FACTOR*256 / 12 + (16 +17)*(iters-1); i++) {\n#pragma HLS pipeline II=1\n ap_uint<512> out_temp;\n COMPUTE_LOOP:\n for (int k = 0; k < 16; k++) {\n#pragma HLS unroll\n float in_1_0_0[16], in_0_0_1[16], in_0_0_m1[16], in_0_0_0[16], in_0_m1_0[16], in_m1_0_0[16], in_0_1_0[16];\n#pragma HLS array_partition variable=in_1_0_0 complete dim=0\n#pragma HLS array_partition variable=in_0_0_1 complete dim=0\n#pragma HLS array_partition variable=in_0_0_m1 complete dim=0\n#pragma HLS array_partition variable=in_0_0_0 complete dim=0\n#pragma HLS array_partition variable=in_0_m1_0 complete dim=0\n#pragma HLS array_partition variable=in_m1_0_0 complete dim=0\n#pragma HLS array_partition variable=in_0_1_0 complete dim=0\n unsigned int idx_k = k << 5;\n uint32_t temp_in_1_0_0 = in_block_16.range(idx_k+31, idx_k);\n in_1_0_0[k] = *((float*)(&temp_in_1_0_0));\n uint32_t temp_in_0_0_1 = (k<15)?in_block_0.range(idx_k + 63, idx_k + 32) : in_block_1.range(idx_k + -449, idx_k + -480);\n in_0_0_1[k] = *((float*)(&temp_in_0_0_1));\n uint32_t temp_in_0_0_m1 = (k<1)?in_block_m1.range(idx_k + 511, idx_k + 480) : in_block_0.range(idx_k + -1, idx_k + -32);\n in_0_0_m1[k] = *((float*)(&temp_in_0_0_m1));\n uint32_t temp_in_0_0_0 = in_block_0.range(idx_k+31, idx_k);\n in_0_0_0[k] = *((float*)(&temp_in_0_0_0));\n uint32_t temp_in_0_m1_0 = in_block_m1.range(idx_k+31, idx_k);\n in_0_m1_0[k] = *((float*)(&temp_in_0_m1_0));\n uint32_t temp_in_m1_0_0 = in_block_m16.range(idx_k+31, idx_k);\n in_m1_0_0[k] = *((float*)(&temp_in_m1_0_0));\n uint32_t temp_in_0_1_0 = in_block_1.range(idx_k+31, idx_k);\n in_0_1_0[k] = *((float*)(&temp_in_0_1_0));\n float result = HEAT3D_stencil_kernel(in_1_0_0[k], in_0_0_1[k], in_0_0_m1[k], in_0_0_0[k], in_0_m1_0[k], in_m1_0_0[k], in_0_1_0[k]);\n out_temp.range(idx_k+31, idx_k) = *((uint32_t *)(&result));\n }\n out.write(out_temp);\n in_block_m16 = in_stream_m15_to_m2.read();\n in_stream_m15_to_m2 << HLS_REG(in_block_m1);\n in_block_m1 = HLS_REG(in_block_0);\n in_block_0 = HLS_REG(in_block_1);\n in_block_1 = in_stream_2_to_15.read();\n in_stream_2_to_15 << HLS_REG(in_block_16);\n unsigned int idx_in = 16 + (i + 17);\n in_block_16 = HLS_REG(in.read());\n }\n ap_uint<512> popout_in_stream_m15_to_m2;\n for (int i = 0; i < 14; i++) {\n#pragma HLS pipeline II=1\n in_stream_m15_to_m2 >> popout_in_stream_m15_to_m2;\n }\n ap_uint<512> popout_in_stream_2_to_15;\n for (int i = 0; i < 14; i++) {\n#pragma HLS pipeline II=1\n in_stream_2_to_15 >> popout_in_stream_2_to_15;\n }\n return;\n} // stencil kernel definition\nvoid load(tapa::async_mmap >& a, tapa::async_mmap >& b,\n tapa::ostream > &stream_out, tapa::istream > &stream_in,\n uint32_t iters) {\n#pragma HLS inline off\n unsigned int loop_bound = 256/WIDTH_FACTOR*256 / 12 + (16 +17)*(iters-1) + 17 + 16;\n for(int k_wr_req = (17 + 16), k_wr_resp = (17 + 16), k_rd_req = 0, k_rd_resp = 0; k_rd_resp < loop_bound || k_wr_resp < loop_bound; ) {\n // read from a\n if (k_rd_req < loop_bound && a.read_addr.try_write(k_rd_req)) {\n k_rd_req++;\n }\n if (k_rd_resp < loop_bound && !a.read_data.empty() && !stream_out.full()) {\n ap_uint<512> temp = a.read_data.read(nullptr);\n stream_out.write(temp);\n k_rd_resp++;\n }\n // write to b\n if (k_wr_req < loop_bound && !b.write_addr.full() && !b.write_data.full() && !stream_in.empty()) {\n b.write_addr.write(k_wr_req);\n b.write_data.write(stream_in.read());\n k_wr_req++;\n }\n if (!b.write_resp.empty()) {\n k_wr_resp += (unsigned int)(b.write_resp.read()) + 1;\n }\n }\n}\nvoid inter_kernel(uint64_t a, uint64_t b,\n tapa::ostream > &stream_out, tapa::istream > &stream_in,\n uint32_t iters);\nvoid unikernel(uint64_t in_0, uint64_t out_0, //HBM 0 1\n uint64_t in_1, uint64_t out_1,\n uint64_t in_2, uint64_t out_2,\n uint64_t in_3, uint64_t out_3,\n uint64_t in_4, uint64_t out_4,\n uint64_t in_5, uint64_t out_5,\n uint64_t in_6, uint64_t out_6,\n uint64_t in_7, uint64_t out_7,\n uint64_t in_8, uint64_t out_8,\n uint64_t in_9, uint64_t out_9,\n uint64_t in_10, uint64_t out_10,\n uint64_t in_11, uint64_t out_11,\n // tapa::mmap in_12, tapa::mmap out_12,\n // tapa::mmap in_13, tapa::mmap out_13,\n // tapa::mmap in_14, tapa::mmap out_14,\n uint32_t iters);\n", - "level": "lower", - "target": "hls", - "vendor": "xilinx" - }, - "inter_kernel": { - "code": "\n\n #include \n\n#include \"math.h\"\n\n\n\n #include \"ap_int.h\"\n\n#include \n\n const int WIDTH_FACTOR = 512/32;\n\n\n #include \n\ntemplate\nT HLS_REG(T in){\n#pragma HLS pipeline\n#pragma HLS inline off\n#pragma HLS interface port=return register\n return in;\n}\nfloat HEAT3D_stencil_kernel(float in_1_0_0, float in_0_0_1,\n float in_0_0_m1, float in_0_0_0, float in_0_m1_0, float in_m1_0_0,\n float in_0_1_0)\n{\n /*\n (cal1 + cal2 + cal3 + in(0, 0, 0))\n */\n const float cal1 = ((in_1_0_0 - ((float)2 * in_0_0_0) + in_m1_0_0) / (float)8);\n const float cal2 = ((in_0_1_0 - ((float)2 * in_0_0_0) + in_0_m1_0) / (float)8);\n const float cal3 = ((in_0_0_1 - ((float)2 * in_0_0_0) + in_0_0_m1) / (float)8);\n return (cal1 + cal2 + cal3 + in_0_0_0);\n} // stencil kernel definition\nvoid HEAT3D(tapa::istream >&in, tapa::ostream >&out, //int useless, \n int iters)\n; // stencil kernel definition\nvoid load(tapa::async_mmap >& a, tapa::async_mmap >& b,\n tapa::ostream > &stream_out, tapa::istream > &stream_in,\n uint32_t iters) {\n#pragma HLS inline off\n unsigned int loop_bound = 256/WIDTH_FACTOR*256 / 12 + (16 +17)*(iters-1) + 17 + 16;\n for(int k_wr_req = (17 + 16), k_wr_resp = (17 + 16), k_rd_req = 0, k_rd_resp = 0; k_rd_resp < loop_bound || k_wr_resp < loop_bound; ) {\n // read from a\n if (k_rd_req < loop_bound && a.read_addr.try_write(k_rd_req)) {\n k_rd_req++;\n }\n if (k_rd_resp < loop_bound && !a.read_data.empty() && !stream_out.full()) {\n ap_uint<512> temp = a.read_data.read(nullptr);\n stream_out.write(temp);\n k_rd_resp++;\n }\n // write to b\n if (k_wr_req < loop_bound && !b.write_addr.full() && !b.write_data.full() && !stream_in.empty()) {\n b.write_addr.write(k_wr_req);\n b.write_data.write(stream_in.read());\n k_wr_req++;\n }\n if (!b.write_resp.empty()) {\n k_wr_resp += (unsigned int)(b.write_resp.read()) + 1;\n }\n }\n}\nvoid inter_kernel(tapa::async_mmap >& a, tapa::async_mmap >& b,\n tapa::ostream > &stream_out, tapa::istream > &stream_in,\n uint32_t iters){\n#pragma HLS disaggregate variable = a\n#pragma HLS interface ap_fifo port = a.read_addr._\n#pragma HLS aggregate variable = a.read_addr._ bit\n#pragma HLS interface ap_fifo port = a.read_data._\n#pragma HLS aggregate variable = a.read_data._ bit\n#pragma HLS interface ap_fifo port = a.write_addr._\n#pragma HLS aggregate variable = a.write_addr._ bit\n#pragma HLS interface ap_fifo port = a.write_data._\n#pragma HLS aggregate variable = a.write_data._ bit\n#pragma HLS interface ap_fifo port = a.write_resp._\n#pragma HLS aggregate variable = a.write_resp._ bit\n#pragma HLS disaggregate variable = a .read_data\n#pragma HLS interface ap_fifo port = a.read_data._peek\n#pragma HLS aggregate variable = a.read_data._peek bit\n#pragma HLS disaggregate variable = a .write_resp\n#pragma HLS interface ap_fifo port = a.write_resp._peek\n#pragma HLS aggregate variable = a.write_resp._peek bit\nvoid(a.read_addr._.full());\nvoid(a.read_data._.empty());\nvoid(a.read_data._peek.empty());\nvoid(a.write_addr._.full());\nvoid(a.write_data._.full());\nvoid(a.write_resp._.empty());\nvoid(a.write_resp._peek.empty());\n\n#pragma HLS disaggregate variable = b\n#pragma HLS interface ap_fifo port = b.read_addr._\n#pragma HLS aggregate variable = b.read_addr._ bit\n#pragma HLS interface ap_fifo port = b.read_data._\n#pragma HLS aggregate variable = b.read_data._ bit\n#pragma HLS interface ap_fifo port = b.write_addr._\n#pragma HLS aggregate variable = b.write_addr._ bit\n#pragma HLS interface ap_fifo port = b.write_data._\n#pragma HLS aggregate variable = b.write_data._ bit\n#pragma HLS interface ap_fifo port = b.write_resp._\n#pragma HLS aggregate variable = b.write_resp._ bit\n#pragma HLS disaggregate variable = b .read_data\n#pragma HLS interface ap_fifo port = b.read_data._peek\n#pragma HLS aggregate variable = b.read_data._peek bit\n#pragma HLS disaggregate variable = b .write_resp\n#pragma HLS interface ap_fifo port = b.write_resp._peek\n#pragma HLS aggregate variable = b.write_resp._peek bit\nvoid(b.read_addr._.full());\nvoid(b.read_data._.empty());\nvoid(b.read_data._peek.empty());\nvoid(b.write_addr._.full());\nvoid(b.write_data._.full());\nvoid(b.write_resp._.empty());\nvoid(b.write_resp._peek.empty());\n\n#pragma HLS disaggregate variable = stream_out\n#pragma HLS interface ap_fifo port = stream_out._\n#pragma HLS aggregate variable = stream_out._ bit\nvoid(stream_out._.full());\n\n#pragma HLS disaggregate variable = stream_in\n#pragma HLS interface ap_fifo port = stream_in._\n#pragma HLS aggregate variable = stream_in._ bit\n#pragma HLS interface ap_fifo port = stream_in._peek\n#pragma HLS aggregate variable = stream_in._peek bit\nvoid(stream_in._.empty());\nvoid(stream_in._peek.empty());\n\n\n for(int i = 0; i < iters; i+=1){\n if(i%(2*1)==0){\n load(a, b, stream_out, stream_in, iters);\n }\n else{\n load(b, a, stream_out, stream_in, iters);\n }\n }\n}\nvoid unikernel(uint64_t in_0, uint64_t out_0, //HBM 0 1\n uint64_t in_1, uint64_t out_1,\n uint64_t in_2, uint64_t out_2,\n uint64_t in_3, uint64_t out_3,\n uint64_t in_4, uint64_t out_4,\n uint64_t in_5, uint64_t out_5,\n uint64_t in_6, uint64_t out_6,\n uint64_t in_7, uint64_t out_7,\n uint64_t in_8, uint64_t out_8,\n uint64_t in_9, uint64_t out_9,\n uint64_t in_10, uint64_t out_10,\n uint64_t in_11, uint64_t out_11,\n // tapa::mmap in_12, tapa::mmap out_12,\n // tapa::mmap in_13, tapa::mmap out_13,\n // tapa::mmap in_14, tapa::mmap out_14,\n uint32_t iters);\n", - "level": "lower", - "target": "hls", - "vendor": "xilinx" - }, - "unikernel": { - "code": "\n\n #include \n\n#include \"math.h\"\n\n\n\n #include \"ap_int.h\"\n\n#include \n\n const int WIDTH_FACTOR = 512/32;\n\n\n #include \n\ntemplate\nT HLS_REG(T in){\n#pragma HLS pipeline\n#pragma HLS inline off\n#pragma HLS interface port=return register\n return in;\n}\nfloat HEAT3D_stencil_kernel(float in_1_0_0, float in_0_0_1,\n float in_0_0_m1, float in_0_0_0, float in_0_m1_0, float in_m1_0_0,\n float in_0_1_0)\n{\n /*\n (cal1 + cal2 + cal3 + in(0, 0, 0))\n */\n const float cal1 = ((in_1_0_0 - ((float)2 * in_0_0_0) + in_m1_0_0) / (float)8);\n const float cal2 = ((in_0_1_0 - ((float)2 * in_0_0_0) + in_0_m1_0) / (float)8);\n const float cal3 = ((in_0_0_1 - ((float)2 * in_0_0_0) + in_0_0_m1) / (float)8);\n return (cal1 + cal2 + cal3 + in_0_0_0);\n} // stencil kernel definition\nvoid HEAT3D(tapa::istream >&in, tapa::ostream >&out, //int useless, \n int iters)\n; // stencil kernel definition\nvoid load(tapa::async_mmap >& a, tapa::async_mmap >& b,\n tapa::ostream > &stream_out, tapa::istream > &stream_in,\n uint32_t iters) {\n#pragma HLS inline off\n unsigned int loop_bound = 256/WIDTH_FACTOR*256 / 12 + (16 +17)*(iters-1) + 17 + 16;\n for(int k_wr_req = (17 + 16), k_wr_resp = (17 + 16), k_rd_req = 0, k_rd_resp = 0; k_rd_resp < loop_bound || k_wr_resp < loop_bound; ) {\n // read from a\n if (k_rd_req < loop_bound && a.read_addr.try_write(k_rd_req)) {\n k_rd_req++;\n }\n if (k_rd_resp < loop_bound && !a.read_data.empty() && !stream_out.full()) {\n ap_uint<512> temp = a.read_data.read(nullptr);\n stream_out.write(temp);\n k_rd_resp++;\n }\n // write to b\n if (k_wr_req < loop_bound && !b.write_addr.full() && !b.write_data.full() && !stream_in.empty()) {\n b.write_addr.write(k_wr_req);\n b.write_data.write(stream_in.read());\n k_wr_req++;\n }\n if (!b.write_resp.empty()) {\n k_wr_resp += (unsigned int)(b.write_resp.read()) + 1;\n }\n }\n}\nvoid inter_kernel(uint64_t a, uint64_t b,\n tapa::ostream > &stream_out, tapa::istream > &stream_in,\n uint32_t iters);\nextern \"C\" {\n\nvoid unikernel(uint64_t in_0, uint64_t out_0, //HBM 0 1\n uint64_t in_1, uint64_t out_1,\n uint64_t in_2, uint64_t out_2,\n uint64_t in_3, uint64_t out_3,\n uint64_t in_4, uint64_t out_4,\n uint64_t in_5, uint64_t out_5,\n uint64_t in_6, uint64_t out_6,\n uint64_t in_7, uint64_t out_7,\n uint64_t in_8, uint64_t out_8,\n uint64_t in_9, uint64_t out_9,\n uint64_t in_10, uint64_t out_10,\n uint64_t in_11, uint64_t out_11,\n // tapa::mmap in_12, tapa::mmap out_12,\n // tapa::mmap in_13, tapa::mmap out_13,\n // tapa::mmap in_14, tapa::mmap out_14,\n uint32_t iters){\n\n#pragma HLS interface s_axilite port = in_0 bundle = control\n{ auto val = reinterpret_cast(in_0); }\n{ auto val = reinterpret_cast(in_0); }\n\n#pragma HLS interface s_axilite port = out_0 bundle = control\n{ auto val = reinterpret_cast(out_0); }\n{ auto val = reinterpret_cast(out_0); }\n\n#pragma HLS interface s_axilite port = in_1 bundle = control\n{ auto val = reinterpret_cast(in_1); }\n{ auto val = reinterpret_cast(in_1); }\n\n#pragma HLS interface s_axilite port = out_1 bundle = control\n{ auto val = reinterpret_cast(out_1); }\n{ auto val = reinterpret_cast(out_1); }\n\n#pragma HLS interface s_axilite port = in_2 bundle = control\n{ auto val = reinterpret_cast(in_2); }\n{ auto val = reinterpret_cast(in_2); }\n\n#pragma HLS interface s_axilite port = out_2 bundle = control\n{ auto val = reinterpret_cast(out_2); }\n{ auto val = reinterpret_cast(out_2); }\n\n#pragma HLS interface s_axilite port = in_3 bundle = control\n{ auto val = reinterpret_cast(in_3); }\n{ auto val = reinterpret_cast(in_3); }\n\n#pragma HLS interface s_axilite port = out_3 bundle = control\n{ auto val = reinterpret_cast(out_3); }\n{ auto val = reinterpret_cast(out_3); }\n\n#pragma HLS interface s_axilite port = in_4 bundle = control\n{ auto val = reinterpret_cast(in_4); }\n{ auto val = reinterpret_cast(in_4); }\n\n#pragma HLS interface s_axilite port = out_4 bundle = control\n{ auto val = reinterpret_cast(out_4); }\n{ auto val = reinterpret_cast(out_4); }\n\n#pragma HLS interface s_axilite port = in_5 bundle = control\n{ auto val = reinterpret_cast(in_5); }\n{ auto val = reinterpret_cast(in_5); }\n\n#pragma HLS interface s_axilite port = out_5 bundle = control\n{ auto val = reinterpret_cast(out_5); }\n{ auto val = reinterpret_cast(out_5); }\n\n#pragma HLS interface s_axilite port = in_6 bundle = control\n{ auto val = reinterpret_cast(in_6); }\n{ auto val = reinterpret_cast(in_6); }\n\n#pragma HLS interface s_axilite port = out_6 bundle = control\n{ auto val = reinterpret_cast(out_6); }\n{ auto val = reinterpret_cast(out_6); }\n\n#pragma HLS interface s_axilite port = in_7 bundle = control\n{ auto val = reinterpret_cast(in_7); }\n{ auto val = reinterpret_cast(in_7); }\n\n#pragma HLS interface s_axilite port = out_7 bundle = control\n{ auto val = reinterpret_cast(out_7); }\n{ auto val = reinterpret_cast(out_7); }\n\n#pragma HLS interface s_axilite port = in_8 bundle = control\n{ auto val = reinterpret_cast(in_8); }\n{ auto val = reinterpret_cast(in_8); }\n\n#pragma HLS interface s_axilite port = out_8 bundle = control\n{ auto val = reinterpret_cast(out_8); }\n{ auto val = reinterpret_cast(out_8); }\n\n#pragma HLS interface s_axilite port = in_9 bundle = control\n{ auto val = reinterpret_cast(in_9); }\n{ auto val = reinterpret_cast(in_9); }\n\n#pragma HLS interface s_axilite port = out_9 bundle = control\n{ auto val = reinterpret_cast(out_9); }\n{ auto val = reinterpret_cast(out_9); }\n\n#pragma HLS interface s_axilite port = in_10 bundle = control\n{ auto val = reinterpret_cast(in_10); }\n{ auto val = reinterpret_cast(in_10); }\n\n#pragma HLS interface s_axilite port = out_10 bundle = control\n{ auto val = reinterpret_cast(out_10); }\n{ auto val = reinterpret_cast(out_10); }\n\n#pragma HLS interface s_axilite port = in_11 bundle = control\n{ auto val = reinterpret_cast(in_11); }\n{ auto val = reinterpret_cast(in_11); }\n\n#pragma HLS interface s_axilite port = out_11 bundle = control\n{ auto val = reinterpret_cast(out_11); }\n{ auto val = reinterpret_cast(out_11); }\n\n#pragma HLS interface s_axilite port = iters bundle = control\n{ auto val = reinterpret_cast(iters); }\n\n\n#pragma HLS interface s_axilite port = return bundle = control\n}\n\n\n} // extern \"C\"\n\n", - "fifos": { - "k_rd_unikernel[0]": { - "consumed_by": [ - "HEAT3D", - 0 - ], - "depth": 3, - "produced_by": [ - "inter_kernel", - 0 - ] - }, - "k_rd_unikernel[10]": { - "consumed_by": [ - "HEAT3D", - 10 - ], - "depth": 3, - "produced_by": [ - "inter_kernel", - 10 - ] - }, - "k_rd_unikernel[11]": { - "consumed_by": [ - "HEAT3D", - 11 - ], - "depth": 3, - "produced_by": [ - "inter_kernel", - 11 - ] - }, - "k_rd_unikernel[1]": { - "consumed_by": [ - "HEAT3D", - 1 - ], - "depth": 3, - "produced_by": [ - "inter_kernel", - 1 - ] - }, - "k_rd_unikernel[2]": { - "consumed_by": [ - "HEAT3D", - 2 - ], - "depth": 3, - "produced_by": [ - "inter_kernel", - 2 - ] - }, - "k_rd_unikernel[3]": { - "consumed_by": [ - "HEAT3D", - 3 - ], - "depth": 3, - "produced_by": [ - "inter_kernel", - 3 - ] - }, - "k_rd_unikernel[4]": { - "consumed_by": [ - "HEAT3D", - 4 - ], - "depth": 3, - "produced_by": [ - "inter_kernel", - 4 - ] - }, - "k_rd_unikernel[5]": { - "consumed_by": [ - "HEAT3D", - 5 - ], - "depth": 3, - "produced_by": [ - "inter_kernel", - 5 - ] - }, - "k_rd_unikernel[6]": { - "consumed_by": [ - "HEAT3D", - 6 - ], - "depth": 3, - "produced_by": [ - "inter_kernel", - 6 - ] - }, - "k_rd_unikernel[7]": { - "consumed_by": [ - "HEAT3D", - 7 - ], - "depth": 3, - "produced_by": [ - "inter_kernel", - 7 - ] - }, - "k_rd_unikernel[8]": { - "consumed_by": [ - "HEAT3D", - 8 - ], - "depth": 3, - "produced_by": [ - "inter_kernel", - 8 - ] - }, - "k_rd_unikernel[9]": { - "consumed_by": [ - "HEAT3D", - 9 - ], - "depth": 3, - "produced_by": [ - "inter_kernel", - 9 - ] - }, - "k_wr_unikernel[0]": { - "consumed_by": [ - "inter_kernel", - 0 - ], - "depth": 3, - "produced_by": [ - "HEAT3D", - 0 - ] - }, - "k_wr_unikernel[10]": { - "consumed_by": [ - "inter_kernel", - 10 - ], - "depth": 3, - "produced_by": [ - "HEAT3D", - 10 - ] - }, - "k_wr_unikernel[11]": { - "consumed_by": [ - "inter_kernel", - 11 - ], - "depth": 3, - "produced_by": [ - "HEAT3D", - 11 - ] - }, - "k_wr_unikernel[1]": { - "consumed_by": [ - "inter_kernel", - 1 - ], - "depth": 3, - "produced_by": [ - "HEAT3D", - 1 - ] - }, - "k_wr_unikernel[2]": { - "consumed_by": [ - "inter_kernel", - 2 - ], - "depth": 3, - "produced_by": [ - "HEAT3D", - 2 - ] - }, - "k_wr_unikernel[3]": { - "consumed_by": [ - "inter_kernel", - 3 - ], - "depth": 3, - "produced_by": [ - "HEAT3D", - 3 - ] - }, - "k_wr_unikernel[4]": { - "consumed_by": [ - "inter_kernel", - 4 - ], - "depth": 3, - "produced_by": [ - "HEAT3D", - 4 - ] - }, - "k_wr_unikernel[5]": { - "consumed_by": [ - "inter_kernel", - 5 - ], - "depth": 3, - "produced_by": [ - "HEAT3D", - 5 - ] - }, - "k_wr_unikernel[6]": { - "consumed_by": [ - "inter_kernel", - 6 - ], - "depth": 3, - "produced_by": [ - "HEAT3D", - 6 - ] - }, - "k_wr_unikernel[7]": { - "consumed_by": [ - "inter_kernel", - 7 - ], - "depth": 3, - "produced_by": [ - "HEAT3D", - 7 - ] - }, - "k_wr_unikernel[8]": { - "consumed_by": [ - "inter_kernel", - 8 - ], - "depth": 3, - "produced_by": [ - "HEAT3D", - 8 - ] - }, - "k_wr_unikernel[9]": { - "consumed_by": [ - "inter_kernel", - 9 - ], - "depth": 3, - "produced_by": [ - "HEAT3D", - 9 - ] - } - }, - "frt_interface": "#include \n#include \n#include \n\n\n\n #include \n\n#include \"math.h\"\n\n\n\n #include \"ap_int.h\"\n\n#include \n\n const int WIDTH_FACTOR = 512/32;\n\n\n #include \n\ntemplate\nT HLS_REG(T in){\n#pragma HLS pipeline\n#pragma HLS inline off\n#pragma HLS interface port=return register\n return in;\n}\nfloat HEAT3D_stencil_kernel(float in_1_0_0, float in_0_0_1,\n float in_0_0_m1, float in_0_0_0, float in_0_m1_0, float in_m1_0_0,\n float in_0_1_0)\n{\n /*\n (cal1 + cal2 + cal3 + in(0, 0, 0))\n */\n const float cal1 = ((in_1_0_0 - ((float)2 * in_0_0_0) + in_m1_0_0) / (float)8);\n const float cal2 = ((in_0_1_0 - ((float)2 * in_0_0_0) + in_0_m1_0) / (float)8);\n const float cal3 = ((in_0_0_1 - ((float)2 * in_0_0_0) + in_0_0_m1) / (float)8);\n return (cal1 + cal2 + cal3 + in_0_0_0);\n} // stencil kernel definition\nvoid HEAT3D(tapa::istream >&in, tapa::ostream >&out, //int useless, \n int iters)\n; // stencil kernel definition\nvoid load(tapa::async_mmap >& a, tapa::async_mmap >& b,\n tapa::ostream > &stream_out, tapa::istream > &stream_in,\n uint32_t iters) {\n#pragma HLS inline off\n unsigned int loop_bound = 256/WIDTH_FACTOR*256 / 12 + (16 +17)*(iters-1) + 17 + 16;\n for(int k_wr_req = (17 + 16), k_wr_resp = (17 + 16), k_rd_req = 0, k_rd_resp = 0; k_rd_resp < loop_bound || k_wr_resp < loop_bound; ) {\n // read from a\n if (k_rd_req < loop_bound && a.read_addr.try_write(k_rd_req)) {\n k_rd_req++;\n }\n if (k_rd_resp < loop_bound && !a.read_data.empty() && !stream_out.full()) {\n ap_uint<512> temp = a.read_data.read(nullptr);\n stream_out.write(temp);\n k_rd_resp++;\n }\n // write to b\n if (k_wr_req < loop_bound && !b.write_addr.full() && !b.write_data.full() && !stream_in.empty()) {\n b.write_addr.write(k_wr_req);\n b.write_data.write(stream_in.read());\n k_wr_req++;\n }\n if (!b.write_resp.empty()) {\n k_wr_resp += (unsigned int)(b.write_resp.read()) + 1;\n }\n }\n}\nvoid inter_kernel(uint64_t a, uint64_t b,\n tapa::ostream > &stream_out, tapa::istream > &stream_in,\n uint32_t iters);\nvoid unikernel(tapa::mmap > in_0, tapa::mmap > out_0, //HBM 0 1\n tapa::mmap > in_1, tapa::mmap > out_1,\n tapa::mmap > in_2, tapa::mmap > out_2,\n tapa::mmap > in_3, tapa::mmap > out_3,\n tapa::mmap > in_4, tapa::mmap > out_4,\n tapa::mmap > in_5, tapa::mmap > out_5,\n tapa::mmap > in_6, tapa::mmap > out_6,\n tapa::mmap > in_7, tapa::mmap > out_7,\n tapa::mmap > in_8, tapa::mmap > out_8,\n tapa::mmap > in_9, tapa::mmap > out_9,\n tapa::mmap > in_10, tapa::mmap > out_10,\n tapa::mmap > in_11, tapa::mmap > out_11,\n // tapa::mmap in_12, tapa::mmap out_12,\n // tapa::mmap in_13, tapa::mmap out_13,\n // tapa::mmap in_14, tapa::mmap out_14,\n uint32_t iters){\n#define TAPAB_APP \"TAPAB_unikernel\"\n#define TAPAB \"TAPAB\"\n const char* _tapa_bitstream = nullptr;\n if ((_tapa_bitstream = getenv(TAPAB_APP)) ||\n (_tapa_bitstream = getenv(TAPAB))) {\n fpga::Instance _tapa_instance(_tapa_bitstream);\n int _tapa_arg_index = 0;\n for (const auto& _tapa_arg_info : _tapa_instance.GetArgsInfo()) {\n if (false) {\n } else if (_tapa_arg_info.name == \"in_0\") {\n auto _tapa_arg = fpga::ReadWrite(in_0.get(), in_0.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"out_0\") {\n auto _tapa_arg = fpga::ReadWrite(out_0.get(), out_0.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"in_1\") {\n auto _tapa_arg = fpga::ReadWrite(in_1.get(), in_1.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"out_1\") {\n auto _tapa_arg = fpga::ReadWrite(out_1.get(), out_1.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"in_2\") {\n auto _tapa_arg = fpga::ReadWrite(in_2.get(), in_2.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"out_2\") {\n auto _tapa_arg = fpga::ReadWrite(out_2.get(), out_2.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"in_3\") {\n auto _tapa_arg = fpga::ReadWrite(in_3.get(), in_3.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"out_3\") {\n auto _tapa_arg = fpga::ReadWrite(out_3.get(), out_3.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"in_4\") {\n auto _tapa_arg = fpga::ReadWrite(in_4.get(), in_4.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"out_4\") {\n auto _tapa_arg = fpga::ReadWrite(out_4.get(), out_4.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"in_5\") {\n auto _tapa_arg = fpga::ReadWrite(in_5.get(), in_5.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"out_5\") {\n auto _tapa_arg = fpga::ReadWrite(out_5.get(), out_5.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"in_6\") {\n auto _tapa_arg = fpga::ReadWrite(in_6.get(), in_6.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"out_6\") {\n auto _tapa_arg = fpga::ReadWrite(out_6.get(), out_6.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"in_7\") {\n auto _tapa_arg = fpga::ReadWrite(in_7.get(), in_7.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"out_7\") {\n auto _tapa_arg = fpga::ReadWrite(out_7.get(), out_7.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"in_8\") {\n auto _tapa_arg = fpga::ReadWrite(in_8.get(), in_8.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"out_8\") {\n auto _tapa_arg = fpga::ReadWrite(out_8.get(), out_8.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"in_9\") {\n auto _tapa_arg = fpga::ReadWrite(in_9.get(), in_9.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"out_9\") {\n auto _tapa_arg = fpga::ReadWrite(out_9.get(), out_9.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"in_10\") {\n auto _tapa_arg = fpga::ReadWrite(in_10.get(), in_10.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"out_10\") {\n auto _tapa_arg = fpga::ReadWrite(out_10.get(), out_10.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"in_11\") {\n auto _tapa_arg = fpga::ReadWrite(in_11.get(), in_11.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"out_11\") {\n auto _tapa_arg = fpga::ReadWrite(out_11.get(), out_11.size());\n _tapa_instance.SetArg(_tapa_arg_index, _tapa_arg);\n } else if (_tapa_arg_info.name == \"iters\") {\n _tapa_instance.SetArg(_tapa_arg_index, iters);\n } else {\n std::stringstream ss;\n ss << \"unknown argument: \" << _tapa_arg_info;\n throw std::runtime_error(ss.str());\n }\n ++_tapa_arg_index;\n }\n _tapa_instance.WriteToDevice();\n _tapa_instance.Exec();\n _tapa_instance.ReadFromDevice();\n _tapa_instance.Finish();\n } else {\n throw std::runtime_error(\"no bitstream found; please set `\" TAPAB_APP\n \"` or `\" TAPAB \"`\");\n }\n}\n", - "level": "upper", - "ports": [ - { - "cat": "mmap", - "name": "in_0", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "out_0", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "in_1", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "out_1", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "in_2", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "out_2", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "in_3", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "out_3", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "in_4", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "out_4", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "in_5", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "out_5", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "in_6", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "out_6", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "in_7", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "out_7", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "in_8", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "out_8", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "in_9", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "out_9", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "in_10", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "out_10", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "in_11", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "mmap", - "name": "out_11", - "type": "ap_uint<512>*", - "width": 512 - }, - { - "cat": "scalar", - "name": "iters", - "type": "uint32_t", - "width": 32 - } - ], - "target": "hls", - "tasks": { - "HEAT3D": [ - { - "args": { - "in": { - "arg": "k_rd_unikernel[0]", - "cat": "istream" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "out": { - "arg": "k_wr_unikernel[0]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "in": { - "arg": "k_rd_unikernel[1]", - "cat": "istream" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "out": { - "arg": "k_wr_unikernel[1]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "in": { - "arg": "k_rd_unikernel[2]", - "cat": "istream" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "out": { - "arg": "k_wr_unikernel[2]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "in": { - "arg": "k_rd_unikernel[3]", - "cat": "istream" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "out": { - "arg": "k_wr_unikernel[3]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "in": { - "arg": "k_rd_unikernel[4]", - "cat": "istream" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "out": { - "arg": "k_wr_unikernel[4]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "in": { - "arg": "k_rd_unikernel[5]", - "cat": "istream" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "out": { - "arg": "k_wr_unikernel[5]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "in": { - "arg": "k_rd_unikernel[6]", - "cat": "istream" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "out": { - "arg": "k_wr_unikernel[6]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "in": { - "arg": "k_rd_unikernel[7]", - "cat": "istream" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "out": { - "arg": "k_wr_unikernel[7]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "in": { - "arg": "k_rd_unikernel[8]", - "cat": "istream" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "out": { - "arg": "k_wr_unikernel[8]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "in": { - "arg": "k_rd_unikernel[9]", - "cat": "istream" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "out": { - "arg": "k_wr_unikernel[9]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "in": { - "arg": "k_rd_unikernel[10]", - "cat": "istream" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "out": { - "arg": "k_wr_unikernel[10]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "in": { - "arg": "k_rd_unikernel[11]", - "cat": "istream" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "out": { - "arg": "k_wr_unikernel[11]", - "cat": "ostream" - } - }, - "step": 0 - } - ], - "inter_kernel": [ - { - "args": { - "a": { - "arg": "in_0", - "cat": "async_mmap" - }, - "b": { - "arg": "out_0", - "cat": "async_mmap" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "stream_in": { - "arg": "k_wr_unikernel[0]", - "cat": "istream" - }, - "stream_out": { - "arg": "k_rd_unikernel[0]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "a": { - "arg": "in_1", - "cat": "async_mmap" - }, - "b": { - "arg": "out_1", - "cat": "async_mmap" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "stream_in": { - "arg": "k_wr_unikernel[1]", - "cat": "istream" - }, - "stream_out": { - "arg": "k_rd_unikernel[1]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "a": { - "arg": "in_2", - "cat": "async_mmap" - }, - "b": { - "arg": "out_2", - "cat": "async_mmap" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "stream_in": { - "arg": "k_wr_unikernel[2]", - "cat": "istream" - }, - "stream_out": { - "arg": "k_rd_unikernel[2]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "a": { - "arg": "in_3", - "cat": "async_mmap" - }, - "b": { - "arg": "out_3", - "cat": "async_mmap" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "stream_in": { - "arg": "k_wr_unikernel[3]", - "cat": "istream" - }, - "stream_out": { - "arg": "k_rd_unikernel[3]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "a": { - "arg": "in_4", - "cat": "async_mmap" - }, - "b": { - "arg": "out_4", - "cat": "async_mmap" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "stream_in": { - "arg": "k_wr_unikernel[4]", - "cat": "istream" - }, - "stream_out": { - "arg": "k_rd_unikernel[4]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "a": { - "arg": "in_5", - "cat": "async_mmap" - }, - "b": { - "arg": "out_5", - "cat": "async_mmap" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "stream_in": { - "arg": "k_wr_unikernel[5]", - "cat": "istream" - }, - "stream_out": { - "arg": "k_rd_unikernel[5]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "a": { - "arg": "in_6", - "cat": "async_mmap" - }, - "b": { - "arg": "out_6", - "cat": "async_mmap" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "stream_in": { - "arg": "k_wr_unikernel[6]", - "cat": "istream" - }, - "stream_out": { - "arg": "k_rd_unikernel[6]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "a": { - "arg": "in_7", - "cat": "async_mmap" - }, - "b": { - "arg": "out_7", - "cat": "async_mmap" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "stream_in": { - "arg": "k_wr_unikernel[7]", - "cat": "istream" - }, - "stream_out": { - "arg": "k_rd_unikernel[7]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "a": { - "arg": "in_8", - "cat": "async_mmap" - }, - "b": { - "arg": "out_8", - "cat": "async_mmap" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "stream_in": { - "arg": "k_wr_unikernel[8]", - "cat": "istream" - }, - "stream_out": { - "arg": "k_rd_unikernel[8]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "a": { - "arg": "in_9", - "cat": "async_mmap" - }, - "b": { - "arg": "out_9", - "cat": "async_mmap" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "stream_in": { - "arg": "k_wr_unikernel[9]", - "cat": "istream" - }, - "stream_out": { - "arg": "k_rd_unikernel[9]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "a": { - "arg": "in_10", - "cat": "async_mmap" - }, - "b": { - "arg": "out_10", - "cat": "async_mmap" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "stream_in": { - "arg": "k_wr_unikernel[10]", - "cat": "istream" - }, - "stream_out": { - "arg": "k_rd_unikernel[10]", - "cat": "ostream" - } - }, - "step": 0 - }, - { - "args": { - "a": { - "arg": "in_11", - "cat": "async_mmap" - }, - "b": { - "arg": "out_11", - "cat": "async_mmap" - }, - "iters": { - "arg": "iters", - "cat": "scalar" - }, - "stream_in": { - "arg": "k_wr_unikernel[11]", - "cat": "istream" - }, - "stream_out": { - "arg": "k_rd_unikernel[11]", - "cat": "ostream" - } - }, - "step": 0 - } - ] - }, - "vendor": "xilinx" - } - }, - "top": "unikernel" -} diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D.v deleted file mode 100644 index c75336fa..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D.v +++ /dev/null @@ -1,781 +0,0 @@ -// ============================================================== -// RTL generated by Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Version: 2022.2 -// Copyright (C) Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// -// =========================================================== - -`timescale 1 ns / 1 ps - -(* CORE_GENERATION_INFO="HEAT3D_HEAT3D,hls_ip_2022_2,{HLS_INPUT_TYPE=cxx,HLS_INPUT_FLOAT=0,HLS_INPUT_FIXED=0,HLS_INPUT_PART=xcu280-fsvh2892-2L-e,HLS_INPUT_CLOCK=3.330000,HLS_INPUT_ARCH=others,HLS_SYN_CLOCK=2.430900,HLS_SYN_LAT=-1,HLS_SYN_TPT=none,HLS_SYN_MEM=0,HLS_SYN_DSP=0,HLS_SYN_FF=85918,HLS_SYN_LUT=40261,HLS_VERSION=2022_2}" *) - -module HEAT3D ( - ap_clk, - ap_rst_n, - ap_start, - ap_done, - ap_idle, - ap_ready, - in_s_dout, - in_s_empty_n, - in_s_read, - in_peek_dout, - in_peek_empty_n, - in_peek_read, - out_r_din, - out_r_full_n, - out_r_write, - iters -); - -parameter ap_ST_fsm_state1 = 17'd1; -parameter ap_ST_fsm_state2 = 17'd2; -parameter ap_ST_fsm_state3 = 17'd4; -parameter ap_ST_fsm_state4 = 17'd8; -parameter ap_ST_fsm_state5 = 17'd16; -parameter ap_ST_fsm_state6 = 17'd32; -parameter ap_ST_fsm_state7 = 17'd64; -parameter ap_ST_fsm_state8 = 17'd128; -parameter ap_ST_fsm_state9 = 17'd256; -parameter ap_ST_fsm_state10 = 17'd512; -parameter ap_ST_fsm_state11 = 17'd1024; -parameter ap_ST_fsm_state12 = 17'd2048; -parameter ap_ST_fsm_state13 = 17'd4096; -parameter ap_ST_fsm_state14 = 17'd8192; -parameter ap_ST_fsm_state15 = 17'd16384; -parameter ap_ST_fsm_state16 = 17'd32768; -parameter ap_ST_fsm_state17 = 17'd65536; - -input ap_clk; -input ap_rst_n; -input ap_start; -output ap_done; -output ap_idle; -output ap_ready; -input [512:0] in_s_dout; -input in_s_empty_n; -output in_s_read; -input [512:0] in_peek_dout; -input in_peek_empty_n; -output in_peek_read; -output [512:0] out_r_din; -input out_r_full_n; -output out_r_write; -input [31:0] iters; - -reg ap_done; -reg ap_idle; -reg ap_ready; -reg in_s_read; -reg out_r_write; - - reg ap_rst_n_inv; -(* fsm_encoding = "none" *) reg [16:0] ap_CS_fsm; -wire ap_CS_fsm_state1; -reg in_s_blk_n; -wire ap_CS_fsm_state4; -wire ap_CS_fsm_state5; -wire ap_CS_fsm_state6; -wire ap_CS_fsm_state9; -wire [511:0] in_block_m16_V_fu_148_p1; -reg [511:0] in_block_m16_V_reg_205; -wire [511:0] in_block_m1_fu_152_p1; -reg [511:0] in_block_m1_reg_210; -wire [511:0] in_block_0_fu_156_p1; -reg [511:0] in_block_0_reg_215; -wire [511:0] in_block_1_fu_160_p1; -reg [511:0] in_block_1_reg_220; -wire [511:0] in_block_16_V_fu_164_p1; -reg [511:0] in_block_16_V_reg_225; -wire [31:0] add_ln73_fu_178_p2; -reg [31:0] add_ln73_reg_230; -wire ap_CS_fsm_state10; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_start; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_done; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_idle; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_ready; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_in_s_read; -wire [511:0] grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_in_stream_m15_to_m2_din; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_in_stream_m15_to_m2_write; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_start; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_done; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_idle; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_ready; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_in_s_read; -wire [511:0] grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_in_stream_2_to_15_din; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_in_stream_2_to_15_write; -wire grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_start; -wire grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_done; -wire grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_idle; -wire grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_ready; -wire grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_m15_to_m2_read; -wire [511:0] grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_m15_to_m2_din; -wire grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_m15_to_m2_write; -wire grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_2_to_15_read; -wire [511:0] grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_2_to_15_din; -wire grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_2_to_15_write; -wire grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_s_read; -wire [512:0] grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_out_r_din; -wire grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_out_r_write; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_start; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_done; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_idle; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_ready; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_in_stream_m15_to_m2_read; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_start; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_done; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_idle; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_ready; -wire grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_in_stream_2_to_15_read; -reg grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_start_reg; -wire ap_CS_fsm_state2; -wire ap_CS_fsm_state3; -reg [511:0] in_stream_m15_to_m2_din; -wire in_stream_m15_to_m2_full_n; -reg in_stream_m15_to_m2_write; -reg grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_start_reg; -wire ap_CS_fsm_state7; -wire ap_CS_fsm_state8; -reg [511:0] in_stream_2_to_15_din; -wire in_stream_2_to_15_full_n; -reg in_stream_2_to_15_write; -reg grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_start_reg; -wire ap_CS_fsm_state11; -wire [511:0] in_stream_m15_to_m2_dout; -wire in_stream_m15_to_m2_empty_n; -reg in_stream_m15_to_m2_read; -wire [511:0] in_stream_2_to_15_dout; -wire in_stream_2_to_15_empty_n; -reg in_stream_2_to_15_read; -reg grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_start_reg; -wire ap_CS_fsm_state13; -wire ap_CS_fsm_state14; -reg grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_start_reg; -wire ap_CS_fsm_state16; -wire ap_CS_fsm_state17; -reg ap_block_state1; -wire [31:0] add_ln73_1_fu_173_p2; -wire [31:0] shl_ln73_fu_168_p2; -reg [16:0] ap_NS_fsm; -reg ap_ST_fsm_state1_blk; -wire ap_ST_fsm_state2_blk; -reg ap_ST_fsm_state3_blk; -reg ap_ST_fsm_state4_blk; -reg ap_ST_fsm_state5_blk; -reg ap_ST_fsm_state6_blk; -wire ap_ST_fsm_state7_blk; -reg ap_ST_fsm_state8_blk; -reg ap_ST_fsm_state9_blk; -wire ap_ST_fsm_state10_blk; -reg ap_ST_fsm_state11_blk; -wire ap_ST_fsm_state12_blk; -wire ap_ST_fsm_state13_blk; -reg ap_ST_fsm_state14_blk; -wire ap_ST_fsm_state15_blk; -wire ap_ST_fsm_state16_blk; -reg ap_ST_fsm_state17_blk; -wire ap_ce_reg; - -// power-on initialization -initial begin -#0 ap_CS_fsm = 17'd1; -#0 grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_start_reg = 1'b0; -#0 grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_start_reg = 1'b0; -#0 grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_start_reg = 1'b0; -#0 grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_start_reg = 1'b0; -#0 grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_start_reg = 1'b0; -end - -HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_62_1 grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108( - .ap_clk(ap_clk), - .ap_rst(ap_rst_n_inv), - .ap_start(grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_start), - .ap_done(grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_done), - .ap_idle(grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_idle), - .ap_ready(grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_ready), - .in_s_dout(in_s_dout), - .in_s_empty_n(in_s_empty_n), - .in_s_read(grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_in_s_read), - .in_stream_m15_to_m2_din(grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_in_stream_m15_to_m2_din), - .in_stream_m15_to_m2_full_n(in_stream_m15_to_m2_full_n), - .in_stream_m15_to_m2_write(grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_in_stream_m15_to_m2_write) -); - -HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_68_2 grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115( - .ap_clk(ap_clk), - .ap_rst(ap_rst_n_inv), - .ap_start(grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_start), - .ap_done(grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_done), - .ap_idle(grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_idle), - .ap_ready(grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_ready), - .in_s_dout(in_s_dout), - .in_s_empty_n(in_s_empty_n), - .in_s_read(grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_in_s_read), - .in_stream_2_to_15_din(grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_in_stream_2_to_15_din), - .in_stream_2_to_15_full_n(in_stream_2_to_15_full_n), - .in_stream_2_to_15_write(grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_in_stream_2_to_15_write) -); - -HEAT3D_HEAT3D_Pipeline_MAJOR_LOOP grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122( - .ap_clk(ap_clk), - .ap_rst(ap_rst_n_inv), - .ap_start(grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_start), - .ap_done(grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_done), - .ap_idle(grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_idle), - .ap_ready(grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_ready), - .in_stream_m15_to_m2_dout(in_stream_m15_to_m2_dout), - .in_stream_m15_to_m2_empty_n(in_stream_m15_to_m2_empty_n), - .in_stream_m15_to_m2_read(grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_m15_to_m2_read), - .in_stream_m15_to_m2_din(grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_m15_to_m2_din), - .in_stream_m15_to_m2_full_n(in_stream_m15_to_m2_full_n), - .in_stream_m15_to_m2_write(grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_m15_to_m2_write), - .in_stream_2_to_15_dout(in_stream_2_to_15_dout), - .in_stream_2_to_15_empty_n(in_stream_2_to_15_empty_n), - .in_stream_2_to_15_read(grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_2_to_15_read), - .in_stream_2_to_15_din(grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_2_to_15_din), - .in_stream_2_to_15_full_n(in_stream_2_to_15_full_n), - .in_stream_2_to_15_write(grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_2_to_15_write), - .in_s_dout(in_s_dout), - .in_s_empty_n(in_s_empty_n), - .in_s_read(grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_s_read), - .out_r_din(grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_out_r_din), - .out_r_full_n(out_r_full_n), - .out_r_write(grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_out_r_write), - .in_block_1(in_block_1_reg_220), - .in_block_m1(in_block_m1_reg_210), - .in_block_0(in_block_0_reg_215), - .in_block_16_V(in_block_16_V_reg_225), - .in_block_m16_V(in_block_m16_V_reg_205), - .add_ln73(add_ln73_reg_230) -); - -HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_116_3 grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138( - .ap_clk(ap_clk), - .ap_rst(ap_rst_n_inv), - .ap_start(grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_start), - .ap_done(grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_done), - .ap_idle(grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_idle), - .ap_ready(grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_ready), - .in_stream_m15_to_m2_dout(in_stream_m15_to_m2_dout), - .in_stream_m15_to_m2_empty_n(in_stream_m15_to_m2_empty_n), - .in_stream_m15_to_m2_read(grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_in_stream_m15_to_m2_read) -); - -HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_121_4 grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143( - .ap_clk(ap_clk), - .ap_rst(ap_rst_n_inv), - .ap_start(grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_start), - .ap_done(grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_done), - .ap_idle(grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_idle), - .ap_ready(grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_ready), - .in_stream_2_to_15_dout(in_stream_2_to_15_dout), - .in_stream_2_to_15_empty_n(in_stream_2_to_15_empty_n), - .in_stream_2_to_15_read(grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_in_stream_2_to_15_read) -); - -HEAT3D_fifo_w512_d15_A in_stream_m15_to_m2_fifo_U( - .clk(ap_clk), - .reset(ap_rst_n_inv), - .if_read_ce(1'b1), - .if_write_ce(1'b1), - .if_din(in_stream_m15_to_m2_din), - .if_full_n(in_stream_m15_to_m2_full_n), - .if_write(in_stream_m15_to_m2_write), - .if_dout(in_stream_m15_to_m2_dout), - .if_empty_n(in_stream_m15_to_m2_empty_n), - .if_read(in_stream_m15_to_m2_read) -); - -HEAT3D_fifo_w512_d15_A in_stream_2_to_15_fifo_U( - .clk(ap_clk), - .reset(ap_rst_n_inv), - .if_read_ce(1'b1), - .if_write_ce(1'b1), - .if_din(in_stream_2_to_15_din), - .if_full_n(in_stream_2_to_15_full_n), - .if_write(in_stream_2_to_15_write), - .if_dout(in_stream_2_to_15_dout), - .if_empty_n(in_stream_2_to_15_empty_n), - .if_read(in_stream_2_to_15_read) -); - -always @ (posedge ap_clk) begin - if (ap_rst_n_inv == 1'b1) begin - ap_CS_fsm <= ap_ST_fsm_state1; - end else begin - ap_CS_fsm <= ap_NS_fsm; - end -end - -always @ (posedge ap_clk) begin - if (ap_rst_n_inv == 1'b1) begin - grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_start_reg <= 1'b0; - end else begin - if ((1'b1 == ap_CS_fsm_state10)) begin - grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_start_reg <= 1'b1; - end else if ((grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_ready == 1'b1)) begin - grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_start_reg <= 1'b0; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst_n_inv == 1'b1) begin - grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_start_reg <= 1'b0; - end else begin - if ((1'b1 == ap_CS_fsm_state13)) begin - grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_start_reg <= 1'b1; - end else if ((grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_ready == 1'b1)) begin - grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_start_reg <= 1'b0; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst_n_inv == 1'b1) begin - grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_start_reg <= 1'b0; - end else begin - if ((1'b1 == ap_CS_fsm_state16)) begin - grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_start_reg <= 1'b1; - end else if ((grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_ready == 1'b1)) begin - grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_start_reg <= 1'b0; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst_n_inv == 1'b1) begin - grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_start_reg <= 1'b0; - end else begin - if ((1'b1 == ap_CS_fsm_state2)) begin - grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_start_reg <= 1'b1; - end else if ((grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_ready == 1'b1)) begin - grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_start_reg <= 1'b0; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst_n_inv == 1'b1) begin - grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_start_reg <= 1'b0; - end else begin - if ((1'b1 == ap_CS_fsm_state7)) begin - grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_start_reg <= 1'b1; - end else if ((grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_ready == 1'b1)) begin - grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_start_reg <= 1'b0; - end - end -end - -always @ (posedge ap_clk) begin - if ((1'b1 == ap_CS_fsm_state10)) begin - add_ln73_reg_230 <= add_ln73_fu_178_p2; - end -end - -always @ (posedge ap_clk) begin - if ((1'b1 == ap_CS_fsm_state5)) begin - in_block_0_reg_215 <= in_block_0_fu_156_p1; - end -end - -always @ (posedge ap_clk) begin - if ((1'b1 == ap_CS_fsm_state9)) begin - in_block_16_V_reg_225 <= in_block_16_V_fu_164_p1; - end -end - -always @ (posedge ap_clk) begin - if ((1'b1 == ap_CS_fsm_state6)) begin - in_block_1_reg_220 <= in_block_1_fu_160_p1; - end -end - -always @ (posedge ap_clk) begin - if ((1'b1 == ap_CS_fsm_state1)) begin - in_block_m16_V_reg_205 <= in_block_m16_V_fu_148_p1; - end -end - -always @ (posedge ap_clk) begin - if ((1'b1 == ap_CS_fsm_state4)) begin - in_block_m1_reg_210 <= in_block_m1_fu_152_p1; - end -end - -assign ap_ST_fsm_state10_blk = 1'b0; - -always @ (*) begin - if ((grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_done == 1'b0)) begin - ap_ST_fsm_state11_blk = 1'b1; - end else begin - ap_ST_fsm_state11_blk = 1'b0; - end -end - -assign ap_ST_fsm_state12_blk = 1'b0; - -assign ap_ST_fsm_state13_blk = 1'b0; - -always @ (*) begin - if ((grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_done == 1'b0)) begin - ap_ST_fsm_state14_blk = 1'b1; - end else begin - ap_ST_fsm_state14_blk = 1'b0; - end -end - -assign ap_ST_fsm_state15_blk = 1'b0; - -assign ap_ST_fsm_state16_blk = 1'b0; - -always @ (*) begin - if ((grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_done == 1'b0)) begin - ap_ST_fsm_state17_blk = 1'b1; - end else begin - ap_ST_fsm_state17_blk = 1'b0; - end -end - -always @ (*) begin - if (((in_s_empty_n == 1'b0) | (ap_start == 1'b0))) begin - ap_ST_fsm_state1_blk = 1'b1; - end else begin - ap_ST_fsm_state1_blk = 1'b0; - end -end - -assign ap_ST_fsm_state2_blk = 1'b0; - -always @ (*) begin - if ((grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_done == 1'b0)) begin - ap_ST_fsm_state3_blk = 1'b1; - end else begin - ap_ST_fsm_state3_blk = 1'b0; - end -end - -always @ (*) begin - if ((in_s_empty_n == 1'b0)) begin - ap_ST_fsm_state4_blk = 1'b1; - end else begin - ap_ST_fsm_state4_blk = 1'b0; - end -end - -always @ (*) begin - if ((in_s_empty_n == 1'b0)) begin - ap_ST_fsm_state5_blk = 1'b1; - end else begin - ap_ST_fsm_state5_blk = 1'b0; - end -end - -always @ (*) begin - if ((in_s_empty_n == 1'b0)) begin - ap_ST_fsm_state6_blk = 1'b1; - end else begin - ap_ST_fsm_state6_blk = 1'b0; - end -end - -assign ap_ST_fsm_state7_blk = 1'b0; - -always @ (*) begin - if ((grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_done == 1'b0)) begin - ap_ST_fsm_state8_blk = 1'b1; - end else begin - ap_ST_fsm_state8_blk = 1'b0; - end -end - -always @ (*) begin - if ((in_s_empty_n == 1'b0)) begin - ap_ST_fsm_state9_blk = 1'b1; - end else begin - ap_ST_fsm_state9_blk = 1'b0; - end -end - -always @ (*) begin - if (((1'b1 == ap_CS_fsm_state17) & (grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_done == 1'b1))) begin - ap_done = 1'b1; - end else begin - ap_done = 1'b0; - end -end - -always @ (*) begin - if (((ap_start == 1'b0) & (1'b1 == ap_CS_fsm_state1))) begin - ap_idle = 1'b1; - end else begin - ap_idle = 1'b0; - end -end - -always @ (*) begin - if (((1'b1 == ap_CS_fsm_state17) & (grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_done == 1'b1))) begin - ap_ready = 1'b1; - end else begin - ap_ready = 1'b0; - end -end - -always @ (*) begin - if (((1'b1 == ap_CS_fsm_state9) | (1'b1 == ap_CS_fsm_state6) | (1'b1 == ap_CS_fsm_state5) | (1'b1 == ap_CS_fsm_state4) | ((ap_start == 1'b1) & (1'b1 == ap_CS_fsm_state1)))) begin - in_s_blk_n = in_s_empty_n; - end else begin - in_s_blk_n = 1'b1; - end -end - -always @ (*) begin - if ((((in_s_empty_n == 1'b1) & (1'b1 == ap_CS_fsm_state9)) | ((in_s_empty_n == 1'b1) & (1'b1 == ap_CS_fsm_state6)) | ((in_s_empty_n == 1'b1) & (1'b1 == ap_CS_fsm_state5)) | ((in_s_empty_n == 1'b1) & (1'b1 == ap_CS_fsm_state4)) | (~((in_s_empty_n == 1'b0) | (ap_start == 1'b0)) & (1'b1 == ap_CS_fsm_state1)))) begin - in_s_read = 1'b1; - end else if ((1'b1 == ap_CS_fsm_state11)) begin - in_s_read = grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_s_read; - end else if ((1'b1 == ap_CS_fsm_state8)) begin - in_s_read = grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_in_s_read; - end else if ((1'b1 == ap_CS_fsm_state3)) begin - in_s_read = grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_in_s_read; - end else begin - in_s_read = 1'b0; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state11)) begin - in_stream_2_to_15_din = grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_2_to_15_din; - end else if ((1'b1 == ap_CS_fsm_state8)) begin - in_stream_2_to_15_din = grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_in_stream_2_to_15_din; - end else begin - in_stream_2_to_15_din = grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_2_to_15_din; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state17)) begin - in_stream_2_to_15_read = grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_in_stream_2_to_15_read; - end else if ((1'b1 == ap_CS_fsm_state11)) begin - in_stream_2_to_15_read = grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_2_to_15_read; - end else begin - in_stream_2_to_15_read = 1'b0; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state11)) begin - in_stream_2_to_15_write = grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_2_to_15_write; - end else if ((1'b1 == ap_CS_fsm_state8)) begin - in_stream_2_to_15_write = grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_in_stream_2_to_15_write; - end else begin - in_stream_2_to_15_write = 1'b0; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state11)) begin - in_stream_m15_to_m2_din = grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_m15_to_m2_din; - end else if ((1'b1 == ap_CS_fsm_state3)) begin - in_stream_m15_to_m2_din = grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_in_stream_m15_to_m2_din; - end else begin - in_stream_m15_to_m2_din = grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_m15_to_m2_din; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state14)) begin - in_stream_m15_to_m2_read = grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_in_stream_m15_to_m2_read; - end else if ((1'b1 == ap_CS_fsm_state11)) begin - in_stream_m15_to_m2_read = grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_m15_to_m2_read; - end else begin - in_stream_m15_to_m2_read = 1'b0; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state11)) begin - in_stream_m15_to_m2_write = grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_in_stream_m15_to_m2_write; - end else if ((1'b1 == ap_CS_fsm_state3)) begin - in_stream_m15_to_m2_write = grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_in_stream_m15_to_m2_write; - end else begin - in_stream_m15_to_m2_write = 1'b0; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state11)) begin - out_r_write = grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_out_r_write; - end else begin - out_r_write = 1'b0; - end -end - -always @ (*) begin - case (ap_CS_fsm) - ap_ST_fsm_state1 : begin - if ((~((in_s_empty_n == 1'b0) | (ap_start == 1'b0)) & (1'b1 == ap_CS_fsm_state1))) begin - ap_NS_fsm = ap_ST_fsm_state2; - end else begin - ap_NS_fsm = ap_ST_fsm_state1; - end - end - ap_ST_fsm_state2 : begin - ap_NS_fsm = ap_ST_fsm_state3; - end - ap_ST_fsm_state3 : begin - if (((1'b1 == ap_CS_fsm_state3) & (grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_done == 1'b1))) begin - ap_NS_fsm = ap_ST_fsm_state4; - end else begin - ap_NS_fsm = ap_ST_fsm_state3; - end - end - ap_ST_fsm_state4 : begin - if (((in_s_empty_n == 1'b1) & (1'b1 == ap_CS_fsm_state4))) begin - ap_NS_fsm = ap_ST_fsm_state5; - end else begin - ap_NS_fsm = ap_ST_fsm_state4; - end - end - ap_ST_fsm_state5 : begin - if (((in_s_empty_n == 1'b1) & (1'b1 == ap_CS_fsm_state5))) begin - ap_NS_fsm = ap_ST_fsm_state6; - end else begin - ap_NS_fsm = ap_ST_fsm_state5; - end - end - ap_ST_fsm_state6 : begin - if (((in_s_empty_n == 1'b1) & (1'b1 == ap_CS_fsm_state6))) begin - ap_NS_fsm = ap_ST_fsm_state7; - end else begin - ap_NS_fsm = ap_ST_fsm_state6; - end - end - ap_ST_fsm_state7 : begin - ap_NS_fsm = ap_ST_fsm_state8; - end - ap_ST_fsm_state8 : begin - if (((1'b1 == ap_CS_fsm_state8) & (grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_done == 1'b1))) begin - ap_NS_fsm = ap_ST_fsm_state9; - end else begin - ap_NS_fsm = ap_ST_fsm_state8; - end - end - ap_ST_fsm_state9 : begin - if (((in_s_empty_n == 1'b1) & (1'b1 == ap_CS_fsm_state9))) begin - ap_NS_fsm = ap_ST_fsm_state10; - end else begin - ap_NS_fsm = ap_ST_fsm_state9; - end - end - ap_ST_fsm_state10 : begin - ap_NS_fsm = ap_ST_fsm_state11; - end - ap_ST_fsm_state11 : begin - if (((1'b1 == ap_CS_fsm_state11) & (grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_done == 1'b1))) begin - ap_NS_fsm = ap_ST_fsm_state12; - end else begin - ap_NS_fsm = ap_ST_fsm_state11; - end - end - ap_ST_fsm_state12 : begin - ap_NS_fsm = ap_ST_fsm_state13; - end - ap_ST_fsm_state13 : begin - ap_NS_fsm = ap_ST_fsm_state14; - end - ap_ST_fsm_state14 : begin - if (((1'b1 == ap_CS_fsm_state14) & (grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_done == 1'b1))) begin - ap_NS_fsm = ap_ST_fsm_state15; - end else begin - ap_NS_fsm = ap_ST_fsm_state14; - end - end - ap_ST_fsm_state15 : begin - ap_NS_fsm = ap_ST_fsm_state16; - end - ap_ST_fsm_state16 : begin - ap_NS_fsm = ap_ST_fsm_state17; - end - ap_ST_fsm_state17 : begin - if (((1'b1 == ap_CS_fsm_state17) & (grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_done == 1'b1))) begin - ap_NS_fsm = ap_ST_fsm_state1; - end else begin - ap_NS_fsm = ap_ST_fsm_state17; - end - end - default : begin - ap_NS_fsm = 'bx; - end - endcase -end - -assign add_ln73_1_fu_173_p2 = (iters + 32'd308); - -assign add_ln73_fu_178_p2 = (add_ln73_1_fu_173_p2 + shl_ln73_fu_168_p2); - -assign ap_CS_fsm_state1 = ap_CS_fsm[32'd0]; - -assign ap_CS_fsm_state10 = ap_CS_fsm[32'd9]; - -assign ap_CS_fsm_state11 = ap_CS_fsm[32'd10]; - -assign ap_CS_fsm_state13 = ap_CS_fsm[32'd12]; - -assign ap_CS_fsm_state14 = ap_CS_fsm[32'd13]; - -assign ap_CS_fsm_state16 = ap_CS_fsm[32'd15]; - -assign ap_CS_fsm_state17 = ap_CS_fsm[32'd16]; - -assign ap_CS_fsm_state2 = ap_CS_fsm[32'd1]; - -assign ap_CS_fsm_state3 = ap_CS_fsm[32'd2]; - -assign ap_CS_fsm_state4 = ap_CS_fsm[32'd3]; - -assign ap_CS_fsm_state5 = ap_CS_fsm[32'd4]; - -assign ap_CS_fsm_state6 = ap_CS_fsm[32'd5]; - -assign ap_CS_fsm_state7 = ap_CS_fsm[32'd6]; - -assign ap_CS_fsm_state8 = ap_CS_fsm[32'd7]; - -assign ap_CS_fsm_state9 = ap_CS_fsm[32'd8]; - -always @ (*) begin - ap_block_state1 = ((in_s_empty_n == 1'b0) | (ap_start == 1'b0)); -end - -always @ (*) begin - ap_rst_n_inv = ~ap_rst_n; -end - -assign grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_start = grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_ap_start_reg; - -assign grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_start = grp_HEAT3D_Pipeline_VITIS_LOOP_116_3_fu_138_ap_start_reg; - -assign grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_start = grp_HEAT3D_Pipeline_VITIS_LOOP_121_4_fu_143_ap_start_reg; - -assign grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_start = grp_HEAT3D_Pipeline_VITIS_LOOP_62_1_fu_108_ap_start_reg; - -assign grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_start = grp_HEAT3D_Pipeline_VITIS_LOOP_68_2_fu_115_ap_start_reg; - -assign in_block_0_fu_156_p1 = in_s_dout[511:0]; - -assign in_block_16_V_fu_164_p1 = in_s_dout[511:0]; - -assign in_block_1_fu_160_p1 = in_s_dout[511:0]; - -assign in_block_m16_V_fu_148_p1 = in_s_dout[511:0]; - -assign in_block_m1_fu_152_p1 = in_s_dout[511:0]; - -assign in_peek_read = 1'b0; - -assign out_r_din = grp_HEAT3D_Pipeline_MAJOR_LOOP_fu_122_out_r_din; - -assign shl_ln73_fu_168_p2 = iters << 32'd5; - -endmodule //HEAT3D diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_MAJOR_LOOP.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_MAJOR_LOOP.v deleted file mode 100644 index 30808d5e..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_MAJOR_LOOP.v +++ /dev/null @@ -1,4531 +0,0 @@ -// ============================================================== -// RTL generated by Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Version: 2022.2 -// Copyright (C) Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// -// =========================================================== - -`timescale 1 ns / 1 ps - -module HEAT3D_HEAT3D_Pipeline_MAJOR_LOOP ( - ap_clk, - ap_rst, - ap_start, - ap_done, - ap_idle, - ap_ready, - in_stream_m15_to_m2_dout, - in_stream_m15_to_m2_empty_n, - in_stream_m15_to_m2_read, - in_stream_m15_to_m2_din, - in_stream_m15_to_m2_full_n, - in_stream_m15_to_m2_write, - in_stream_2_to_15_dout, - in_stream_2_to_15_empty_n, - in_stream_2_to_15_read, - in_stream_2_to_15_din, - in_stream_2_to_15_full_n, - in_stream_2_to_15_write, - in_s_dout, - in_s_empty_n, - in_s_read, - out_r_din, - out_r_full_n, - out_r_write, - in_block_1, - in_block_m1, - in_block_0, - in_block_16_V, - in_block_m16_V, - add_ln73 -); - -parameter ap_ST_fsm_pp0_stage0 = 1'd1; - -input ap_clk; -input ap_rst; -input ap_start; -output ap_done; -output ap_idle; -output ap_ready; -input [511:0] in_stream_m15_to_m2_dout; -input in_stream_m15_to_m2_empty_n; -output in_stream_m15_to_m2_read; -output [511:0] in_stream_m15_to_m2_din; -input in_stream_m15_to_m2_full_n; -output in_stream_m15_to_m2_write; -input [511:0] in_stream_2_to_15_dout; -input in_stream_2_to_15_empty_n; -output in_stream_2_to_15_read; -output [511:0] in_stream_2_to_15_din; -input in_stream_2_to_15_full_n; -output in_stream_2_to_15_write; -input [512:0] in_s_dout; -input in_s_empty_n; -output in_s_read; -output [512:0] out_r_din; -input out_r_full_n; -output out_r_write; -input [511:0] in_block_1; -input [511:0] in_block_m1; -input [511:0] in_block_0; -input [511:0] in_block_16_V; -input [511:0] in_block_m16_V; -input [31:0] add_ln73; - -reg ap_idle; -reg in_stream_m15_to_m2_read; -reg in_stream_m15_to_m2_write; -reg in_stream_2_to_15_read; -reg in_stream_2_to_15_write; -reg in_s_read; -reg out_r_write; - -(* fsm_encoding = "none" *) reg [0:0] ap_CS_fsm; -wire ap_CS_fsm_pp0_stage0; -wire ap_enable_reg_pp0_iter0; -reg ap_enable_reg_pp0_iter1; -reg ap_enable_reg_pp0_iter2; -reg ap_enable_reg_pp0_iter3; -reg ap_enable_reg_pp0_iter4; -reg ap_enable_reg_pp0_iter5; -reg ap_enable_reg_pp0_iter6; -reg ap_enable_reg_pp0_iter7; -reg ap_enable_reg_pp0_iter8; -reg ap_enable_reg_pp0_iter9; -reg ap_enable_reg_pp0_iter10; -reg ap_enable_reg_pp0_iter11; -reg ap_enable_reg_pp0_iter12; -reg ap_enable_reg_pp0_iter13; -reg ap_enable_reg_pp0_iter14; -reg ap_enable_reg_pp0_iter15; -reg ap_enable_reg_pp0_iter16; -reg ap_enable_reg_pp0_iter17; -reg ap_enable_reg_pp0_iter18; -reg ap_enable_reg_pp0_iter19; -reg ap_enable_reg_pp0_iter20; -reg ap_enable_reg_pp0_iter21; -reg ap_enable_reg_pp0_iter22; -reg ap_enable_reg_pp0_iter23; -reg ap_enable_reg_pp0_iter24; -reg ap_enable_reg_pp0_iter25; -reg ap_enable_reg_pp0_iter26; -reg ap_enable_reg_pp0_iter27; -reg ap_enable_reg_pp0_iter28; -reg ap_enable_reg_pp0_iter29; -reg ap_enable_reg_pp0_iter30; -reg ap_enable_reg_pp0_iter31; -reg ap_enable_reg_pp0_iter32; -reg ap_enable_reg_pp0_iter33; -reg ap_enable_reg_pp0_iter34; -reg ap_enable_reg_pp0_iter35; -reg ap_enable_reg_pp0_iter36; -reg ap_enable_reg_pp0_iter37; -reg ap_enable_reg_pp0_iter38; -reg ap_enable_reg_pp0_iter39; -reg ap_enable_reg_pp0_iter40; -reg ap_enable_reg_pp0_iter41; -reg ap_enable_reg_pp0_iter42; -reg ap_enable_reg_pp0_iter43; -reg ap_enable_reg_pp0_iter44; -reg ap_enable_reg_pp0_iter45; -reg ap_idle_pp0; -wire ap_block_state1_pp0_stage0_iter0; -reg ap_block_state2_pp0_stage0_iter1; -wire ap_block_state3_pp0_stage0_iter2; -wire ap_block_state4_pp0_stage0_iter3; -wire ap_block_state5_pp0_stage0_iter4; -wire ap_block_state6_pp0_stage0_iter5; -wire ap_block_state7_pp0_stage0_iter6; -wire ap_block_state8_pp0_stage0_iter7; -wire ap_block_state9_pp0_stage0_iter8; -wire ap_block_state10_pp0_stage0_iter9; -wire ap_block_state11_pp0_stage0_iter10; -wire ap_block_state12_pp0_stage0_iter11; -wire ap_block_state13_pp0_stage0_iter12; -wire ap_block_state14_pp0_stage0_iter13; -wire ap_block_state15_pp0_stage0_iter14; -wire ap_block_state16_pp0_stage0_iter15; -wire ap_block_state17_pp0_stage0_iter16; -wire ap_block_state18_pp0_stage0_iter17; -wire ap_block_state19_pp0_stage0_iter18; -wire ap_block_state20_pp0_stage0_iter19; -wire ap_block_state21_pp0_stage0_iter20; -wire ap_block_state22_pp0_stage0_iter21; -wire ap_block_state23_pp0_stage0_iter22; -wire ap_block_state24_pp0_stage0_iter23; -wire ap_block_state25_pp0_stage0_iter24; -wire ap_block_state26_pp0_stage0_iter25; -wire ap_block_state27_pp0_stage0_iter26; -wire ap_block_state28_pp0_stage0_iter27; -wire ap_block_state29_pp0_stage0_iter28; -wire ap_block_state30_pp0_stage0_iter29; -wire ap_block_state31_pp0_stage0_iter30; -wire ap_block_state32_pp0_stage0_iter31; -wire ap_block_state33_pp0_stage0_iter32; -wire ap_block_state34_pp0_stage0_iter33; -wire ap_block_state35_pp0_stage0_iter34; -wire ap_block_state36_pp0_stage0_iter35; -wire ap_block_state37_pp0_stage0_iter36; -wire ap_block_state38_pp0_stage0_iter37; -wire ap_block_state39_pp0_stage0_iter38; -wire ap_block_state40_pp0_stage0_iter39; -wire ap_block_state41_pp0_stage0_iter40; -wire ap_block_state42_pp0_stage0_iter41; -wire ap_block_state43_pp0_stage0_iter42; -wire ap_block_state44_pp0_stage0_iter43; -wire ap_block_state45_pp0_stage0_iter44; -reg ap_block_state46_pp0_stage0_iter45; -reg ap_block_pp0_stage0_subdone; -wire [0:0] icmp_ln73_fu_463_p2; -reg ap_condition_exit_pp0_iter0_stage0; -wire ap_loop_exit_ready; -reg ap_ready_int; -reg out_r_blk_n; -wire ap_block_pp0_stage0; -reg in_stream_m15_to_m2_i_blk_n; -reg in_stream_m15_to_m2_o_blk_n; -reg in_stream_2_to_15_i_blk_n; -reg in_stream_2_to_15_o_blk_n; -reg in_s_blk_n; -reg ap_block_pp0_stage0_11001; -wire [31:0] bitcast_ln91_fu_518_p1; -wire [31:0] bitcast_ln93_fu_535_p1; -wire [31:0] bitcast_ln95_fu_545_p1; -wire [31:0] bitcast_ln101_fu_573_p1; -wire [31:0] bitcast_ln91_1_fu_604_p1; -wire [31:0] bitcast_ln91_2_fu_681_p1; -wire [31:0] bitcast_ln91_3_fu_758_p1; -wire [31:0] bitcast_ln91_4_fu_835_p1; -wire [31:0] bitcast_ln91_5_fu_912_p1; -wire [31:0] bitcast_ln91_6_fu_989_p1; -wire [31:0] bitcast_ln91_7_fu_1066_p1; -wire [31:0] bitcast_ln91_8_fu_1143_p1; -wire [31:0] bitcast_ln91_9_fu_1220_p1; -wire [31:0] bitcast_ln91_10_fu_1297_p1; -wire [31:0] bitcast_ln91_11_fu_1374_p1; -wire [31:0] bitcast_ln91_12_fu_1451_p1; -wire [31:0] bitcast_ln91_13_fu_1528_p1; -wire [31:0] bitcast_ln91_14_fu_1605_p1; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_223_ap_return; -reg [31:0] result_reg_2296; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_234_ap_return; -reg [31:0] result_1_reg_2301; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_245_ap_return; -reg [31:0] result_2_reg_2306; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_256_ap_return; -reg [31:0] result_3_reg_2311; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_267_ap_return; -reg [31:0] result_4_reg_2316; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_278_ap_return; -reg [31:0] result_5_reg_2321; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_289_ap_return; -reg [31:0] result_6_reg_2326; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_300_ap_return; -reg [31:0] result_7_reg_2331; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_311_ap_return; -reg [31:0] result_8_reg_2336; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_322_ap_return; -reg [31:0] result_9_reg_2341; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_333_ap_return; -reg [31:0] result_10_reg_2346; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_344_ap_return; -reg [31:0] result_11_reg_2351; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_355_ap_return; -reg [31:0] result_12_reg_2356; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_366_ap_return; -reg [31:0] result_13_reg_2361; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_377_ap_return; -reg [31:0] result_14_reg_2366; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_388_ap_return; -reg [31:0] result_15_reg_2371; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_223_in_1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_223_in_0_m1_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_223_in_m1_0_0; -reg grp_HEAT3D_stencil_kernel_fu_223_ap_ce; -wire ap_block_state1_pp0_stage0_iter0_ignore_call21; -reg ap_block_state2_pp0_stage0_iter1_ignore_call21; -wire ap_block_state3_pp0_stage0_iter2_ignore_call21; -wire ap_block_state4_pp0_stage0_iter3_ignore_call21; -wire ap_block_state5_pp0_stage0_iter4_ignore_call21; -wire ap_block_state6_pp0_stage0_iter5_ignore_call21; -wire ap_block_state7_pp0_stage0_iter6_ignore_call21; -wire ap_block_state8_pp0_stage0_iter7_ignore_call21; -wire ap_block_state9_pp0_stage0_iter8_ignore_call21; -wire ap_block_state10_pp0_stage0_iter9_ignore_call21; -wire ap_block_state11_pp0_stage0_iter10_ignore_call21; -wire ap_block_state12_pp0_stage0_iter11_ignore_call21; -wire ap_block_state13_pp0_stage0_iter12_ignore_call21; -wire ap_block_state14_pp0_stage0_iter13_ignore_call21; -wire ap_block_state15_pp0_stage0_iter14_ignore_call21; -wire ap_block_state16_pp0_stage0_iter15_ignore_call21; -wire ap_block_state17_pp0_stage0_iter16_ignore_call21; -wire ap_block_state18_pp0_stage0_iter17_ignore_call21; -wire ap_block_state19_pp0_stage0_iter18_ignore_call21; -wire ap_block_state20_pp0_stage0_iter19_ignore_call21; -wire ap_block_state21_pp0_stage0_iter20_ignore_call21; -wire ap_block_state22_pp0_stage0_iter21_ignore_call21; -wire ap_block_state23_pp0_stage0_iter22_ignore_call21; -wire ap_block_state24_pp0_stage0_iter23_ignore_call21; -wire ap_block_state25_pp0_stage0_iter24_ignore_call21; -wire ap_block_state26_pp0_stage0_iter25_ignore_call21; -wire ap_block_state27_pp0_stage0_iter26_ignore_call21; -wire ap_block_state28_pp0_stage0_iter27_ignore_call21; -wire ap_block_state29_pp0_stage0_iter28_ignore_call21; -wire ap_block_state30_pp0_stage0_iter29_ignore_call21; -wire ap_block_state31_pp0_stage0_iter30_ignore_call21; -wire ap_block_state32_pp0_stage0_iter31_ignore_call21; -wire ap_block_state33_pp0_stage0_iter32_ignore_call21; -wire ap_block_state34_pp0_stage0_iter33_ignore_call21; -wire ap_block_state35_pp0_stage0_iter34_ignore_call21; -wire ap_block_state36_pp0_stage0_iter35_ignore_call21; -wire ap_block_state37_pp0_stage0_iter36_ignore_call21; -wire ap_block_state38_pp0_stage0_iter37_ignore_call21; -wire ap_block_state39_pp0_stage0_iter38_ignore_call21; -wire ap_block_state40_pp0_stage0_iter39_ignore_call21; -wire ap_block_state41_pp0_stage0_iter40_ignore_call21; -wire ap_block_state42_pp0_stage0_iter41_ignore_call21; -wire ap_block_state43_pp0_stage0_iter42_ignore_call21; -wire ap_block_state44_pp0_stage0_iter43_ignore_call21; -wire ap_block_state45_pp0_stage0_iter44_ignore_call21; -reg ap_block_state46_pp0_stage0_iter45_ignore_call21; -reg ap_block_pp0_stage0_11001_ignoreCallOp97; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_234_in_1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_234_in_0_m1_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_234_in_m1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_234_in_0_1_0; -reg grp_HEAT3D_stencil_kernel_fu_234_ap_ce; -wire ap_block_state1_pp0_stage0_iter0_ignore_call33; -reg ap_block_state2_pp0_stage0_iter1_ignore_call33; -wire ap_block_state3_pp0_stage0_iter2_ignore_call33; -wire ap_block_state4_pp0_stage0_iter3_ignore_call33; -wire ap_block_state5_pp0_stage0_iter4_ignore_call33; -wire ap_block_state6_pp0_stage0_iter5_ignore_call33; -wire ap_block_state7_pp0_stage0_iter6_ignore_call33; -wire ap_block_state8_pp0_stage0_iter7_ignore_call33; -wire ap_block_state9_pp0_stage0_iter8_ignore_call33; -wire ap_block_state10_pp0_stage0_iter9_ignore_call33; -wire ap_block_state11_pp0_stage0_iter10_ignore_call33; -wire ap_block_state12_pp0_stage0_iter11_ignore_call33; -wire ap_block_state13_pp0_stage0_iter12_ignore_call33; -wire ap_block_state14_pp0_stage0_iter13_ignore_call33; -wire ap_block_state15_pp0_stage0_iter14_ignore_call33; -wire ap_block_state16_pp0_stage0_iter15_ignore_call33; -wire ap_block_state17_pp0_stage0_iter16_ignore_call33; -wire ap_block_state18_pp0_stage0_iter17_ignore_call33; -wire ap_block_state19_pp0_stage0_iter18_ignore_call33; -wire ap_block_state20_pp0_stage0_iter19_ignore_call33; -wire ap_block_state21_pp0_stage0_iter20_ignore_call33; -wire ap_block_state22_pp0_stage0_iter21_ignore_call33; -wire ap_block_state23_pp0_stage0_iter22_ignore_call33; -wire ap_block_state24_pp0_stage0_iter23_ignore_call33; -wire ap_block_state25_pp0_stage0_iter24_ignore_call33; -wire ap_block_state26_pp0_stage0_iter25_ignore_call33; -wire ap_block_state27_pp0_stage0_iter26_ignore_call33; -wire ap_block_state28_pp0_stage0_iter27_ignore_call33; -wire ap_block_state29_pp0_stage0_iter28_ignore_call33; -wire ap_block_state30_pp0_stage0_iter29_ignore_call33; -wire ap_block_state31_pp0_stage0_iter30_ignore_call33; -wire ap_block_state32_pp0_stage0_iter31_ignore_call33; -wire ap_block_state33_pp0_stage0_iter32_ignore_call33; -wire ap_block_state34_pp0_stage0_iter33_ignore_call33; -wire ap_block_state35_pp0_stage0_iter34_ignore_call33; -wire ap_block_state36_pp0_stage0_iter35_ignore_call33; -wire ap_block_state37_pp0_stage0_iter36_ignore_call33; -wire ap_block_state38_pp0_stage0_iter37_ignore_call33; -wire ap_block_state39_pp0_stage0_iter38_ignore_call33; -wire ap_block_state40_pp0_stage0_iter39_ignore_call33; -wire ap_block_state41_pp0_stage0_iter40_ignore_call33; -wire ap_block_state42_pp0_stage0_iter41_ignore_call33; -wire ap_block_state43_pp0_stage0_iter42_ignore_call33; -wire ap_block_state44_pp0_stage0_iter43_ignore_call33; -wire ap_block_state45_pp0_stage0_iter44_ignore_call33; -reg ap_block_state46_pp0_stage0_iter45_ignore_call33; -reg ap_block_pp0_stage0_11001_ignoreCallOp108; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_245_in_1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_245_in_0_m1_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_245_in_m1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_245_in_0_1_0; -reg grp_HEAT3D_stencil_kernel_fu_245_ap_ce; -wire ap_block_state1_pp0_stage0_iter0_ignore_call45; -reg ap_block_state2_pp0_stage0_iter1_ignore_call45; -wire ap_block_state3_pp0_stage0_iter2_ignore_call45; -wire ap_block_state4_pp0_stage0_iter3_ignore_call45; -wire ap_block_state5_pp0_stage0_iter4_ignore_call45; -wire ap_block_state6_pp0_stage0_iter5_ignore_call45; -wire ap_block_state7_pp0_stage0_iter6_ignore_call45; -wire ap_block_state8_pp0_stage0_iter7_ignore_call45; -wire ap_block_state9_pp0_stage0_iter8_ignore_call45; -wire ap_block_state10_pp0_stage0_iter9_ignore_call45; -wire ap_block_state11_pp0_stage0_iter10_ignore_call45; -wire ap_block_state12_pp0_stage0_iter11_ignore_call45; -wire ap_block_state13_pp0_stage0_iter12_ignore_call45; -wire ap_block_state14_pp0_stage0_iter13_ignore_call45; -wire ap_block_state15_pp0_stage0_iter14_ignore_call45; -wire ap_block_state16_pp0_stage0_iter15_ignore_call45; -wire ap_block_state17_pp0_stage0_iter16_ignore_call45; -wire ap_block_state18_pp0_stage0_iter17_ignore_call45; -wire ap_block_state19_pp0_stage0_iter18_ignore_call45; -wire ap_block_state20_pp0_stage0_iter19_ignore_call45; -wire ap_block_state21_pp0_stage0_iter20_ignore_call45; -wire ap_block_state22_pp0_stage0_iter21_ignore_call45; -wire ap_block_state23_pp0_stage0_iter22_ignore_call45; -wire ap_block_state24_pp0_stage0_iter23_ignore_call45; -wire ap_block_state25_pp0_stage0_iter24_ignore_call45; -wire ap_block_state26_pp0_stage0_iter25_ignore_call45; -wire ap_block_state27_pp0_stage0_iter26_ignore_call45; -wire ap_block_state28_pp0_stage0_iter27_ignore_call45; -wire ap_block_state29_pp0_stage0_iter28_ignore_call45; -wire ap_block_state30_pp0_stage0_iter29_ignore_call45; -wire ap_block_state31_pp0_stage0_iter30_ignore_call45; -wire ap_block_state32_pp0_stage0_iter31_ignore_call45; -wire ap_block_state33_pp0_stage0_iter32_ignore_call45; -wire ap_block_state34_pp0_stage0_iter33_ignore_call45; -wire ap_block_state35_pp0_stage0_iter34_ignore_call45; -wire ap_block_state36_pp0_stage0_iter35_ignore_call45; -wire ap_block_state37_pp0_stage0_iter36_ignore_call45; -wire ap_block_state38_pp0_stage0_iter37_ignore_call45; -wire ap_block_state39_pp0_stage0_iter38_ignore_call45; -wire ap_block_state40_pp0_stage0_iter39_ignore_call45; -wire ap_block_state41_pp0_stage0_iter40_ignore_call45; -wire ap_block_state42_pp0_stage0_iter41_ignore_call45; -wire ap_block_state43_pp0_stage0_iter42_ignore_call45; -wire ap_block_state44_pp0_stage0_iter43_ignore_call45; -wire ap_block_state45_pp0_stage0_iter44_ignore_call45; -reg ap_block_state46_pp0_stage0_iter45_ignore_call45; -reg ap_block_pp0_stage0_11001_ignoreCallOp119; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_256_in_1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_256_in_0_m1_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_256_in_m1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_256_in_0_1_0; -reg grp_HEAT3D_stencil_kernel_fu_256_ap_ce; -wire ap_block_state1_pp0_stage0_iter0_ignore_call57; -reg ap_block_state2_pp0_stage0_iter1_ignore_call57; -wire ap_block_state3_pp0_stage0_iter2_ignore_call57; -wire ap_block_state4_pp0_stage0_iter3_ignore_call57; -wire ap_block_state5_pp0_stage0_iter4_ignore_call57; -wire ap_block_state6_pp0_stage0_iter5_ignore_call57; -wire ap_block_state7_pp0_stage0_iter6_ignore_call57; -wire ap_block_state8_pp0_stage0_iter7_ignore_call57; -wire ap_block_state9_pp0_stage0_iter8_ignore_call57; -wire ap_block_state10_pp0_stage0_iter9_ignore_call57; -wire ap_block_state11_pp0_stage0_iter10_ignore_call57; -wire ap_block_state12_pp0_stage0_iter11_ignore_call57; -wire ap_block_state13_pp0_stage0_iter12_ignore_call57; -wire ap_block_state14_pp0_stage0_iter13_ignore_call57; -wire ap_block_state15_pp0_stage0_iter14_ignore_call57; -wire ap_block_state16_pp0_stage0_iter15_ignore_call57; -wire ap_block_state17_pp0_stage0_iter16_ignore_call57; -wire ap_block_state18_pp0_stage0_iter17_ignore_call57; -wire ap_block_state19_pp0_stage0_iter18_ignore_call57; -wire ap_block_state20_pp0_stage0_iter19_ignore_call57; -wire ap_block_state21_pp0_stage0_iter20_ignore_call57; -wire ap_block_state22_pp0_stage0_iter21_ignore_call57; -wire ap_block_state23_pp0_stage0_iter22_ignore_call57; -wire ap_block_state24_pp0_stage0_iter23_ignore_call57; -wire ap_block_state25_pp0_stage0_iter24_ignore_call57; -wire ap_block_state26_pp0_stage0_iter25_ignore_call57; -wire ap_block_state27_pp0_stage0_iter26_ignore_call57; -wire ap_block_state28_pp0_stage0_iter27_ignore_call57; -wire ap_block_state29_pp0_stage0_iter28_ignore_call57; -wire ap_block_state30_pp0_stage0_iter29_ignore_call57; -wire ap_block_state31_pp0_stage0_iter30_ignore_call57; -wire ap_block_state32_pp0_stage0_iter31_ignore_call57; -wire ap_block_state33_pp0_stage0_iter32_ignore_call57; -wire ap_block_state34_pp0_stage0_iter33_ignore_call57; -wire ap_block_state35_pp0_stage0_iter34_ignore_call57; -wire ap_block_state36_pp0_stage0_iter35_ignore_call57; -wire ap_block_state37_pp0_stage0_iter36_ignore_call57; -wire ap_block_state38_pp0_stage0_iter37_ignore_call57; -wire ap_block_state39_pp0_stage0_iter38_ignore_call57; -wire ap_block_state40_pp0_stage0_iter39_ignore_call57; -wire ap_block_state41_pp0_stage0_iter40_ignore_call57; -wire ap_block_state42_pp0_stage0_iter41_ignore_call57; -wire ap_block_state43_pp0_stage0_iter42_ignore_call57; -wire ap_block_state44_pp0_stage0_iter43_ignore_call57; -wire ap_block_state45_pp0_stage0_iter44_ignore_call57; -reg ap_block_state46_pp0_stage0_iter45_ignore_call57; -reg ap_block_pp0_stage0_11001_ignoreCallOp130; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_267_in_1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_267_in_0_m1_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_267_in_m1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_267_in_0_1_0; -reg grp_HEAT3D_stencil_kernel_fu_267_ap_ce; -wire ap_block_state1_pp0_stage0_iter0_ignore_call69; -reg ap_block_state2_pp0_stage0_iter1_ignore_call69; -wire ap_block_state3_pp0_stage0_iter2_ignore_call69; -wire ap_block_state4_pp0_stage0_iter3_ignore_call69; -wire ap_block_state5_pp0_stage0_iter4_ignore_call69; -wire ap_block_state6_pp0_stage0_iter5_ignore_call69; -wire ap_block_state7_pp0_stage0_iter6_ignore_call69; -wire ap_block_state8_pp0_stage0_iter7_ignore_call69; -wire ap_block_state9_pp0_stage0_iter8_ignore_call69; -wire ap_block_state10_pp0_stage0_iter9_ignore_call69; -wire ap_block_state11_pp0_stage0_iter10_ignore_call69; -wire ap_block_state12_pp0_stage0_iter11_ignore_call69; -wire ap_block_state13_pp0_stage0_iter12_ignore_call69; -wire ap_block_state14_pp0_stage0_iter13_ignore_call69; -wire ap_block_state15_pp0_stage0_iter14_ignore_call69; -wire ap_block_state16_pp0_stage0_iter15_ignore_call69; -wire ap_block_state17_pp0_stage0_iter16_ignore_call69; -wire ap_block_state18_pp0_stage0_iter17_ignore_call69; -wire ap_block_state19_pp0_stage0_iter18_ignore_call69; -wire ap_block_state20_pp0_stage0_iter19_ignore_call69; -wire ap_block_state21_pp0_stage0_iter20_ignore_call69; -wire ap_block_state22_pp0_stage0_iter21_ignore_call69; -wire ap_block_state23_pp0_stage0_iter22_ignore_call69; -wire ap_block_state24_pp0_stage0_iter23_ignore_call69; -wire ap_block_state25_pp0_stage0_iter24_ignore_call69; -wire ap_block_state26_pp0_stage0_iter25_ignore_call69; -wire ap_block_state27_pp0_stage0_iter26_ignore_call69; -wire ap_block_state28_pp0_stage0_iter27_ignore_call69; -wire ap_block_state29_pp0_stage0_iter28_ignore_call69; -wire ap_block_state30_pp0_stage0_iter29_ignore_call69; -wire ap_block_state31_pp0_stage0_iter30_ignore_call69; -wire ap_block_state32_pp0_stage0_iter31_ignore_call69; -wire ap_block_state33_pp0_stage0_iter32_ignore_call69; -wire ap_block_state34_pp0_stage0_iter33_ignore_call69; -wire ap_block_state35_pp0_stage0_iter34_ignore_call69; -wire ap_block_state36_pp0_stage0_iter35_ignore_call69; -wire ap_block_state37_pp0_stage0_iter36_ignore_call69; -wire ap_block_state38_pp0_stage0_iter37_ignore_call69; -wire ap_block_state39_pp0_stage0_iter38_ignore_call69; -wire ap_block_state40_pp0_stage0_iter39_ignore_call69; -wire ap_block_state41_pp0_stage0_iter40_ignore_call69; -wire ap_block_state42_pp0_stage0_iter41_ignore_call69; -wire ap_block_state43_pp0_stage0_iter42_ignore_call69; -wire ap_block_state44_pp0_stage0_iter43_ignore_call69; -wire ap_block_state45_pp0_stage0_iter44_ignore_call69; -reg ap_block_state46_pp0_stage0_iter45_ignore_call69; -reg ap_block_pp0_stage0_11001_ignoreCallOp141; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_278_in_1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_278_in_0_m1_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_278_in_m1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_278_in_0_1_0; -reg grp_HEAT3D_stencil_kernel_fu_278_ap_ce; -wire ap_block_state1_pp0_stage0_iter0_ignore_call81; -reg ap_block_state2_pp0_stage0_iter1_ignore_call81; -wire ap_block_state3_pp0_stage0_iter2_ignore_call81; -wire ap_block_state4_pp0_stage0_iter3_ignore_call81; -wire ap_block_state5_pp0_stage0_iter4_ignore_call81; -wire ap_block_state6_pp0_stage0_iter5_ignore_call81; -wire ap_block_state7_pp0_stage0_iter6_ignore_call81; -wire ap_block_state8_pp0_stage0_iter7_ignore_call81; -wire ap_block_state9_pp0_stage0_iter8_ignore_call81; -wire ap_block_state10_pp0_stage0_iter9_ignore_call81; -wire ap_block_state11_pp0_stage0_iter10_ignore_call81; -wire ap_block_state12_pp0_stage0_iter11_ignore_call81; -wire ap_block_state13_pp0_stage0_iter12_ignore_call81; -wire ap_block_state14_pp0_stage0_iter13_ignore_call81; -wire ap_block_state15_pp0_stage0_iter14_ignore_call81; -wire ap_block_state16_pp0_stage0_iter15_ignore_call81; -wire ap_block_state17_pp0_stage0_iter16_ignore_call81; -wire ap_block_state18_pp0_stage0_iter17_ignore_call81; -wire ap_block_state19_pp0_stage0_iter18_ignore_call81; -wire ap_block_state20_pp0_stage0_iter19_ignore_call81; -wire ap_block_state21_pp0_stage0_iter20_ignore_call81; -wire ap_block_state22_pp0_stage0_iter21_ignore_call81; -wire ap_block_state23_pp0_stage0_iter22_ignore_call81; -wire ap_block_state24_pp0_stage0_iter23_ignore_call81; -wire ap_block_state25_pp0_stage0_iter24_ignore_call81; -wire ap_block_state26_pp0_stage0_iter25_ignore_call81; -wire ap_block_state27_pp0_stage0_iter26_ignore_call81; -wire ap_block_state28_pp0_stage0_iter27_ignore_call81; -wire ap_block_state29_pp0_stage0_iter28_ignore_call81; -wire ap_block_state30_pp0_stage0_iter29_ignore_call81; -wire ap_block_state31_pp0_stage0_iter30_ignore_call81; -wire ap_block_state32_pp0_stage0_iter31_ignore_call81; -wire ap_block_state33_pp0_stage0_iter32_ignore_call81; -wire ap_block_state34_pp0_stage0_iter33_ignore_call81; -wire ap_block_state35_pp0_stage0_iter34_ignore_call81; -wire ap_block_state36_pp0_stage0_iter35_ignore_call81; -wire ap_block_state37_pp0_stage0_iter36_ignore_call81; -wire ap_block_state38_pp0_stage0_iter37_ignore_call81; -wire ap_block_state39_pp0_stage0_iter38_ignore_call81; -wire ap_block_state40_pp0_stage0_iter39_ignore_call81; -wire ap_block_state41_pp0_stage0_iter40_ignore_call81; -wire ap_block_state42_pp0_stage0_iter41_ignore_call81; -wire ap_block_state43_pp0_stage0_iter42_ignore_call81; -wire ap_block_state44_pp0_stage0_iter43_ignore_call81; -wire ap_block_state45_pp0_stage0_iter44_ignore_call81; -reg ap_block_state46_pp0_stage0_iter45_ignore_call81; -reg ap_block_pp0_stage0_11001_ignoreCallOp152; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_289_in_1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_289_in_0_m1_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_289_in_m1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_289_in_0_1_0; -reg grp_HEAT3D_stencil_kernel_fu_289_ap_ce; -wire ap_block_state1_pp0_stage0_iter0_ignore_call93; -reg ap_block_state2_pp0_stage0_iter1_ignore_call93; -wire ap_block_state3_pp0_stage0_iter2_ignore_call93; -wire ap_block_state4_pp0_stage0_iter3_ignore_call93; -wire ap_block_state5_pp0_stage0_iter4_ignore_call93; -wire ap_block_state6_pp0_stage0_iter5_ignore_call93; -wire ap_block_state7_pp0_stage0_iter6_ignore_call93; -wire ap_block_state8_pp0_stage0_iter7_ignore_call93; -wire ap_block_state9_pp0_stage0_iter8_ignore_call93; -wire ap_block_state10_pp0_stage0_iter9_ignore_call93; -wire ap_block_state11_pp0_stage0_iter10_ignore_call93; -wire ap_block_state12_pp0_stage0_iter11_ignore_call93; -wire ap_block_state13_pp0_stage0_iter12_ignore_call93; -wire ap_block_state14_pp0_stage0_iter13_ignore_call93; -wire ap_block_state15_pp0_stage0_iter14_ignore_call93; -wire ap_block_state16_pp0_stage0_iter15_ignore_call93; -wire ap_block_state17_pp0_stage0_iter16_ignore_call93; -wire ap_block_state18_pp0_stage0_iter17_ignore_call93; -wire ap_block_state19_pp0_stage0_iter18_ignore_call93; -wire ap_block_state20_pp0_stage0_iter19_ignore_call93; -wire ap_block_state21_pp0_stage0_iter20_ignore_call93; -wire ap_block_state22_pp0_stage0_iter21_ignore_call93; -wire ap_block_state23_pp0_stage0_iter22_ignore_call93; -wire ap_block_state24_pp0_stage0_iter23_ignore_call93; -wire ap_block_state25_pp0_stage0_iter24_ignore_call93; -wire ap_block_state26_pp0_stage0_iter25_ignore_call93; -wire ap_block_state27_pp0_stage0_iter26_ignore_call93; -wire ap_block_state28_pp0_stage0_iter27_ignore_call93; -wire ap_block_state29_pp0_stage0_iter28_ignore_call93; -wire ap_block_state30_pp0_stage0_iter29_ignore_call93; -wire ap_block_state31_pp0_stage0_iter30_ignore_call93; -wire ap_block_state32_pp0_stage0_iter31_ignore_call93; -wire ap_block_state33_pp0_stage0_iter32_ignore_call93; -wire ap_block_state34_pp0_stage0_iter33_ignore_call93; -wire ap_block_state35_pp0_stage0_iter34_ignore_call93; -wire ap_block_state36_pp0_stage0_iter35_ignore_call93; -wire ap_block_state37_pp0_stage0_iter36_ignore_call93; -wire ap_block_state38_pp0_stage0_iter37_ignore_call93; -wire ap_block_state39_pp0_stage0_iter38_ignore_call93; -wire ap_block_state40_pp0_stage0_iter39_ignore_call93; -wire ap_block_state41_pp0_stage0_iter40_ignore_call93; -wire ap_block_state42_pp0_stage0_iter41_ignore_call93; -wire ap_block_state43_pp0_stage0_iter42_ignore_call93; -wire ap_block_state44_pp0_stage0_iter43_ignore_call93; -wire ap_block_state45_pp0_stage0_iter44_ignore_call93; -reg ap_block_state46_pp0_stage0_iter45_ignore_call93; -reg ap_block_pp0_stage0_11001_ignoreCallOp163; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_300_in_1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_300_in_0_m1_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_300_in_m1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_300_in_0_1_0; -reg grp_HEAT3D_stencil_kernel_fu_300_ap_ce; -wire ap_block_state1_pp0_stage0_iter0_ignore_call105; -reg ap_block_state2_pp0_stage0_iter1_ignore_call105; -wire ap_block_state3_pp0_stage0_iter2_ignore_call105; -wire ap_block_state4_pp0_stage0_iter3_ignore_call105; -wire ap_block_state5_pp0_stage0_iter4_ignore_call105; -wire ap_block_state6_pp0_stage0_iter5_ignore_call105; -wire ap_block_state7_pp0_stage0_iter6_ignore_call105; -wire ap_block_state8_pp0_stage0_iter7_ignore_call105; -wire ap_block_state9_pp0_stage0_iter8_ignore_call105; -wire ap_block_state10_pp0_stage0_iter9_ignore_call105; -wire ap_block_state11_pp0_stage0_iter10_ignore_call105; -wire ap_block_state12_pp0_stage0_iter11_ignore_call105; -wire ap_block_state13_pp0_stage0_iter12_ignore_call105; -wire ap_block_state14_pp0_stage0_iter13_ignore_call105; -wire ap_block_state15_pp0_stage0_iter14_ignore_call105; -wire ap_block_state16_pp0_stage0_iter15_ignore_call105; -wire ap_block_state17_pp0_stage0_iter16_ignore_call105; -wire ap_block_state18_pp0_stage0_iter17_ignore_call105; -wire ap_block_state19_pp0_stage0_iter18_ignore_call105; -wire ap_block_state20_pp0_stage0_iter19_ignore_call105; -wire ap_block_state21_pp0_stage0_iter20_ignore_call105; -wire ap_block_state22_pp0_stage0_iter21_ignore_call105; -wire ap_block_state23_pp0_stage0_iter22_ignore_call105; -wire ap_block_state24_pp0_stage0_iter23_ignore_call105; -wire ap_block_state25_pp0_stage0_iter24_ignore_call105; -wire ap_block_state26_pp0_stage0_iter25_ignore_call105; -wire ap_block_state27_pp0_stage0_iter26_ignore_call105; -wire ap_block_state28_pp0_stage0_iter27_ignore_call105; -wire ap_block_state29_pp0_stage0_iter28_ignore_call105; -wire ap_block_state30_pp0_stage0_iter29_ignore_call105; -wire ap_block_state31_pp0_stage0_iter30_ignore_call105; -wire ap_block_state32_pp0_stage0_iter31_ignore_call105; -wire ap_block_state33_pp0_stage0_iter32_ignore_call105; -wire ap_block_state34_pp0_stage0_iter33_ignore_call105; -wire ap_block_state35_pp0_stage0_iter34_ignore_call105; -wire ap_block_state36_pp0_stage0_iter35_ignore_call105; -wire ap_block_state37_pp0_stage0_iter36_ignore_call105; -wire ap_block_state38_pp0_stage0_iter37_ignore_call105; -wire ap_block_state39_pp0_stage0_iter38_ignore_call105; -wire ap_block_state40_pp0_stage0_iter39_ignore_call105; -wire ap_block_state41_pp0_stage0_iter40_ignore_call105; -wire ap_block_state42_pp0_stage0_iter41_ignore_call105; -wire ap_block_state43_pp0_stage0_iter42_ignore_call105; -wire ap_block_state44_pp0_stage0_iter43_ignore_call105; -wire ap_block_state45_pp0_stage0_iter44_ignore_call105; -reg ap_block_state46_pp0_stage0_iter45_ignore_call105; -reg ap_block_pp0_stage0_11001_ignoreCallOp174; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_311_in_1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_311_in_0_m1_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_311_in_m1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_311_in_0_1_0; -reg grp_HEAT3D_stencil_kernel_fu_311_ap_ce; -wire ap_block_state1_pp0_stage0_iter0_ignore_call117; -reg ap_block_state2_pp0_stage0_iter1_ignore_call117; -wire ap_block_state3_pp0_stage0_iter2_ignore_call117; -wire ap_block_state4_pp0_stage0_iter3_ignore_call117; -wire ap_block_state5_pp0_stage0_iter4_ignore_call117; -wire ap_block_state6_pp0_stage0_iter5_ignore_call117; -wire ap_block_state7_pp0_stage0_iter6_ignore_call117; -wire ap_block_state8_pp0_stage0_iter7_ignore_call117; -wire ap_block_state9_pp0_stage0_iter8_ignore_call117; -wire ap_block_state10_pp0_stage0_iter9_ignore_call117; -wire ap_block_state11_pp0_stage0_iter10_ignore_call117; -wire ap_block_state12_pp0_stage0_iter11_ignore_call117; -wire ap_block_state13_pp0_stage0_iter12_ignore_call117; -wire ap_block_state14_pp0_stage0_iter13_ignore_call117; -wire ap_block_state15_pp0_stage0_iter14_ignore_call117; -wire ap_block_state16_pp0_stage0_iter15_ignore_call117; -wire ap_block_state17_pp0_stage0_iter16_ignore_call117; -wire ap_block_state18_pp0_stage0_iter17_ignore_call117; -wire ap_block_state19_pp0_stage0_iter18_ignore_call117; -wire ap_block_state20_pp0_stage0_iter19_ignore_call117; -wire ap_block_state21_pp0_stage0_iter20_ignore_call117; -wire ap_block_state22_pp0_stage0_iter21_ignore_call117; -wire ap_block_state23_pp0_stage0_iter22_ignore_call117; -wire ap_block_state24_pp0_stage0_iter23_ignore_call117; -wire ap_block_state25_pp0_stage0_iter24_ignore_call117; -wire ap_block_state26_pp0_stage0_iter25_ignore_call117; -wire ap_block_state27_pp0_stage0_iter26_ignore_call117; -wire ap_block_state28_pp0_stage0_iter27_ignore_call117; -wire ap_block_state29_pp0_stage0_iter28_ignore_call117; -wire ap_block_state30_pp0_stage0_iter29_ignore_call117; -wire ap_block_state31_pp0_stage0_iter30_ignore_call117; -wire ap_block_state32_pp0_stage0_iter31_ignore_call117; -wire ap_block_state33_pp0_stage0_iter32_ignore_call117; -wire ap_block_state34_pp0_stage0_iter33_ignore_call117; -wire ap_block_state35_pp0_stage0_iter34_ignore_call117; -wire ap_block_state36_pp0_stage0_iter35_ignore_call117; -wire ap_block_state37_pp0_stage0_iter36_ignore_call117; -wire ap_block_state38_pp0_stage0_iter37_ignore_call117; -wire ap_block_state39_pp0_stage0_iter38_ignore_call117; -wire ap_block_state40_pp0_stage0_iter39_ignore_call117; -wire ap_block_state41_pp0_stage0_iter40_ignore_call117; -wire ap_block_state42_pp0_stage0_iter41_ignore_call117; -wire ap_block_state43_pp0_stage0_iter42_ignore_call117; -wire ap_block_state44_pp0_stage0_iter43_ignore_call117; -wire ap_block_state45_pp0_stage0_iter44_ignore_call117; -reg ap_block_state46_pp0_stage0_iter45_ignore_call117; -reg ap_block_pp0_stage0_11001_ignoreCallOp185; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_322_in_1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_322_in_0_m1_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_322_in_m1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_322_in_0_1_0; -reg grp_HEAT3D_stencil_kernel_fu_322_ap_ce; -wire ap_block_state1_pp0_stage0_iter0_ignore_call129; -reg ap_block_state2_pp0_stage0_iter1_ignore_call129; -wire ap_block_state3_pp0_stage0_iter2_ignore_call129; -wire ap_block_state4_pp0_stage0_iter3_ignore_call129; -wire ap_block_state5_pp0_stage0_iter4_ignore_call129; -wire ap_block_state6_pp0_stage0_iter5_ignore_call129; -wire ap_block_state7_pp0_stage0_iter6_ignore_call129; -wire ap_block_state8_pp0_stage0_iter7_ignore_call129; -wire ap_block_state9_pp0_stage0_iter8_ignore_call129; -wire ap_block_state10_pp0_stage0_iter9_ignore_call129; -wire ap_block_state11_pp0_stage0_iter10_ignore_call129; -wire ap_block_state12_pp0_stage0_iter11_ignore_call129; -wire ap_block_state13_pp0_stage0_iter12_ignore_call129; -wire ap_block_state14_pp0_stage0_iter13_ignore_call129; -wire ap_block_state15_pp0_stage0_iter14_ignore_call129; -wire ap_block_state16_pp0_stage0_iter15_ignore_call129; -wire ap_block_state17_pp0_stage0_iter16_ignore_call129; -wire ap_block_state18_pp0_stage0_iter17_ignore_call129; -wire ap_block_state19_pp0_stage0_iter18_ignore_call129; -wire ap_block_state20_pp0_stage0_iter19_ignore_call129; -wire ap_block_state21_pp0_stage0_iter20_ignore_call129; -wire ap_block_state22_pp0_stage0_iter21_ignore_call129; -wire ap_block_state23_pp0_stage0_iter22_ignore_call129; -wire ap_block_state24_pp0_stage0_iter23_ignore_call129; -wire ap_block_state25_pp0_stage0_iter24_ignore_call129; -wire ap_block_state26_pp0_stage0_iter25_ignore_call129; -wire ap_block_state27_pp0_stage0_iter26_ignore_call129; -wire ap_block_state28_pp0_stage0_iter27_ignore_call129; -wire ap_block_state29_pp0_stage0_iter28_ignore_call129; -wire ap_block_state30_pp0_stage0_iter29_ignore_call129; -wire ap_block_state31_pp0_stage0_iter30_ignore_call129; -wire ap_block_state32_pp0_stage0_iter31_ignore_call129; -wire ap_block_state33_pp0_stage0_iter32_ignore_call129; -wire ap_block_state34_pp0_stage0_iter33_ignore_call129; -wire ap_block_state35_pp0_stage0_iter34_ignore_call129; -wire ap_block_state36_pp0_stage0_iter35_ignore_call129; -wire ap_block_state37_pp0_stage0_iter36_ignore_call129; -wire ap_block_state38_pp0_stage0_iter37_ignore_call129; -wire ap_block_state39_pp0_stage0_iter38_ignore_call129; -wire ap_block_state40_pp0_stage0_iter39_ignore_call129; -wire ap_block_state41_pp0_stage0_iter40_ignore_call129; -wire ap_block_state42_pp0_stage0_iter41_ignore_call129; -wire ap_block_state43_pp0_stage0_iter42_ignore_call129; -wire ap_block_state44_pp0_stage0_iter43_ignore_call129; -wire ap_block_state45_pp0_stage0_iter44_ignore_call129; -reg ap_block_state46_pp0_stage0_iter45_ignore_call129; -reg ap_block_pp0_stage0_11001_ignoreCallOp196; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_333_in_1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_333_in_0_m1_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_333_in_m1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_333_in_0_1_0; -reg grp_HEAT3D_stencil_kernel_fu_333_ap_ce; -wire ap_block_state1_pp0_stage0_iter0_ignore_call141; -reg ap_block_state2_pp0_stage0_iter1_ignore_call141; -wire ap_block_state3_pp0_stage0_iter2_ignore_call141; -wire ap_block_state4_pp0_stage0_iter3_ignore_call141; -wire ap_block_state5_pp0_stage0_iter4_ignore_call141; -wire ap_block_state6_pp0_stage0_iter5_ignore_call141; -wire ap_block_state7_pp0_stage0_iter6_ignore_call141; -wire ap_block_state8_pp0_stage0_iter7_ignore_call141; -wire ap_block_state9_pp0_stage0_iter8_ignore_call141; -wire ap_block_state10_pp0_stage0_iter9_ignore_call141; -wire ap_block_state11_pp0_stage0_iter10_ignore_call141; -wire ap_block_state12_pp0_stage0_iter11_ignore_call141; -wire ap_block_state13_pp0_stage0_iter12_ignore_call141; -wire ap_block_state14_pp0_stage0_iter13_ignore_call141; -wire ap_block_state15_pp0_stage0_iter14_ignore_call141; -wire ap_block_state16_pp0_stage0_iter15_ignore_call141; -wire ap_block_state17_pp0_stage0_iter16_ignore_call141; -wire ap_block_state18_pp0_stage0_iter17_ignore_call141; -wire ap_block_state19_pp0_stage0_iter18_ignore_call141; -wire ap_block_state20_pp0_stage0_iter19_ignore_call141; -wire ap_block_state21_pp0_stage0_iter20_ignore_call141; -wire ap_block_state22_pp0_stage0_iter21_ignore_call141; -wire ap_block_state23_pp0_stage0_iter22_ignore_call141; -wire ap_block_state24_pp0_stage0_iter23_ignore_call141; -wire ap_block_state25_pp0_stage0_iter24_ignore_call141; -wire ap_block_state26_pp0_stage0_iter25_ignore_call141; -wire ap_block_state27_pp0_stage0_iter26_ignore_call141; -wire ap_block_state28_pp0_stage0_iter27_ignore_call141; -wire ap_block_state29_pp0_stage0_iter28_ignore_call141; -wire ap_block_state30_pp0_stage0_iter29_ignore_call141; -wire ap_block_state31_pp0_stage0_iter30_ignore_call141; -wire ap_block_state32_pp0_stage0_iter31_ignore_call141; -wire ap_block_state33_pp0_stage0_iter32_ignore_call141; -wire ap_block_state34_pp0_stage0_iter33_ignore_call141; -wire ap_block_state35_pp0_stage0_iter34_ignore_call141; -wire ap_block_state36_pp0_stage0_iter35_ignore_call141; -wire ap_block_state37_pp0_stage0_iter36_ignore_call141; -wire ap_block_state38_pp0_stage0_iter37_ignore_call141; -wire ap_block_state39_pp0_stage0_iter38_ignore_call141; -wire ap_block_state40_pp0_stage0_iter39_ignore_call141; -wire ap_block_state41_pp0_stage0_iter40_ignore_call141; -wire ap_block_state42_pp0_stage0_iter41_ignore_call141; -wire ap_block_state43_pp0_stage0_iter42_ignore_call141; -wire ap_block_state44_pp0_stage0_iter43_ignore_call141; -wire ap_block_state45_pp0_stage0_iter44_ignore_call141; -reg ap_block_state46_pp0_stage0_iter45_ignore_call141; -reg ap_block_pp0_stage0_11001_ignoreCallOp207; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_344_in_1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_344_in_0_m1_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_344_in_m1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_344_in_0_1_0; -reg grp_HEAT3D_stencil_kernel_fu_344_ap_ce; -wire ap_block_state1_pp0_stage0_iter0_ignore_call153; -reg ap_block_state2_pp0_stage0_iter1_ignore_call153; -wire ap_block_state3_pp0_stage0_iter2_ignore_call153; -wire ap_block_state4_pp0_stage0_iter3_ignore_call153; -wire ap_block_state5_pp0_stage0_iter4_ignore_call153; -wire ap_block_state6_pp0_stage0_iter5_ignore_call153; -wire ap_block_state7_pp0_stage0_iter6_ignore_call153; -wire ap_block_state8_pp0_stage0_iter7_ignore_call153; -wire ap_block_state9_pp0_stage0_iter8_ignore_call153; -wire ap_block_state10_pp0_stage0_iter9_ignore_call153; -wire ap_block_state11_pp0_stage0_iter10_ignore_call153; -wire ap_block_state12_pp0_stage0_iter11_ignore_call153; -wire ap_block_state13_pp0_stage0_iter12_ignore_call153; -wire ap_block_state14_pp0_stage0_iter13_ignore_call153; -wire ap_block_state15_pp0_stage0_iter14_ignore_call153; -wire ap_block_state16_pp0_stage0_iter15_ignore_call153; -wire ap_block_state17_pp0_stage0_iter16_ignore_call153; -wire ap_block_state18_pp0_stage0_iter17_ignore_call153; -wire ap_block_state19_pp0_stage0_iter18_ignore_call153; -wire ap_block_state20_pp0_stage0_iter19_ignore_call153; -wire ap_block_state21_pp0_stage0_iter20_ignore_call153; -wire ap_block_state22_pp0_stage0_iter21_ignore_call153; -wire ap_block_state23_pp0_stage0_iter22_ignore_call153; -wire ap_block_state24_pp0_stage0_iter23_ignore_call153; -wire ap_block_state25_pp0_stage0_iter24_ignore_call153; -wire ap_block_state26_pp0_stage0_iter25_ignore_call153; -wire ap_block_state27_pp0_stage0_iter26_ignore_call153; -wire ap_block_state28_pp0_stage0_iter27_ignore_call153; -wire ap_block_state29_pp0_stage0_iter28_ignore_call153; -wire ap_block_state30_pp0_stage0_iter29_ignore_call153; -wire ap_block_state31_pp0_stage0_iter30_ignore_call153; -wire ap_block_state32_pp0_stage0_iter31_ignore_call153; -wire ap_block_state33_pp0_stage0_iter32_ignore_call153; -wire ap_block_state34_pp0_stage0_iter33_ignore_call153; -wire ap_block_state35_pp0_stage0_iter34_ignore_call153; -wire ap_block_state36_pp0_stage0_iter35_ignore_call153; -wire ap_block_state37_pp0_stage0_iter36_ignore_call153; -wire ap_block_state38_pp0_stage0_iter37_ignore_call153; -wire ap_block_state39_pp0_stage0_iter38_ignore_call153; -wire ap_block_state40_pp0_stage0_iter39_ignore_call153; -wire ap_block_state41_pp0_stage0_iter40_ignore_call153; -wire ap_block_state42_pp0_stage0_iter41_ignore_call153; -wire ap_block_state43_pp0_stage0_iter42_ignore_call153; -wire ap_block_state44_pp0_stage0_iter43_ignore_call153; -wire ap_block_state45_pp0_stage0_iter44_ignore_call153; -reg ap_block_state46_pp0_stage0_iter45_ignore_call153; -reg ap_block_pp0_stage0_11001_ignoreCallOp218; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_355_in_1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_355_in_0_m1_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_355_in_m1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_355_in_0_1_0; -reg grp_HEAT3D_stencil_kernel_fu_355_ap_ce; -wire ap_block_state1_pp0_stage0_iter0_ignore_call165; -reg ap_block_state2_pp0_stage0_iter1_ignore_call165; -wire ap_block_state3_pp0_stage0_iter2_ignore_call165; -wire ap_block_state4_pp0_stage0_iter3_ignore_call165; -wire ap_block_state5_pp0_stage0_iter4_ignore_call165; -wire ap_block_state6_pp0_stage0_iter5_ignore_call165; -wire ap_block_state7_pp0_stage0_iter6_ignore_call165; -wire ap_block_state8_pp0_stage0_iter7_ignore_call165; -wire ap_block_state9_pp0_stage0_iter8_ignore_call165; -wire ap_block_state10_pp0_stage0_iter9_ignore_call165; -wire ap_block_state11_pp0_stage0_iter10_ignore_call165; -wire ap_block_state12_pp0_stage0_iter11_ignore_call165; -wire ap_block_state13_pp0_stage0_iter12_ignore_call165; -wire ap_block_state14_pp0_stage0_iter13_ignore_call165; -wire ap_block_state15_pp0_stage0_iter14_ignore_call165; -wire ap_block_state16_pp0_stage0_iter15_ignore_call165; -wire ap_block_state17_pp0_stage0_iter16_ignore_call165; -wire ap_block_state18_pp0_stage0_iter17_ignore_call165; -wire ap_block_state19_pp0_stage0_iter18_ignore_call165; -wire ap_block_state20_pp0_stage0_iter19_ignore_call165; -wire ap_block_state21_pp0_stage0_iter20_ignore_call165; -wire ap_block_state22_pp0_stage0_iter21_ignore_call165; -wire ap_block_state23_pp0_stage0_iter22_ignore_call165; -wire ap_block_state24_pp0_stage0_iter23_ignore_call165; -wire ap_block_state25_pp0_stage0_iter24_ignore_call165; -wire ap_block_state26_pp0_stage0_iter25_ignore_call165; -wire ap_block_state27_pp0_stage0_iter26_ignore_call165; -wire ap_block_state28_pp0_stage0_iter27_ignore_call165; -wire ap_block_state29_pp0_stage0_iter28_ignore_call165; -wire ap_block_state30_pp0_stage0_iter29_ignore_call165; -wire ap_block_state31_pp0_stage0_iter30_ignore_call165; -wire ap_block_state32_pp0_stage0_iter31_ignore_call165; -wire ap_block_state33_pp0_stage0_iter32_ignore_call165; -wire ap_block_state34_pp0_stage0_iter33_ignore_call165; -wire ap_block_state35_pp0_stage0_iter34_ignore_call165; -wire ap_block_state36_pp0_stage0_iter35_ignore_call165; -wire ap_block_state37_pp0_stage0_iter36_ignore_call165; -wire ap_block_state38_pp0_stage0_iter37_ignore_call165; -wire ap_block_state39_pp0_stage0_iter38_ignore_call165; -wire ap_block_state40_pp0_stage0_iter39_ignore_call165; -wire ap_block_state41_pp0_stage0_iter40_ignore_call165; -wire ap_block_state42_pp0_stage0_iter41_ignore_call165; -wire ap_block_state43_pp0_stage0_iter42_ignore_call165; -wire ap_block_state44_pp0_stage0_iter43_ignore_call165; -wire ap_block_state45_pp0_stage0_iter44_ignore_call165; -reg ap_block_state46_pp0_stage0_iter45_ignore_call165; -reg ap_block_pp0_stage0_11001_ignoreCallOp229; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_366_in_1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_366_in_0_m1_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_366_in_m1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_366_in_0_1_0; -reg grp_HEAT3D_stencil_kernel_fu_366_ap_ce; -wire ap_block_state1_pp0_stage0_iter0_ignore_call177; -reg ap_block_state2_pp0_stage0_iter1_ignore_call177; -wire ap_block_state3_pp0_stage0_iter2_ignore_call177; -wire ap_block_state4_pp0_stage0_iter3_ignore_call177; -wire ap_block_state5_pp0_stage0_iter4_ignore_call177; -wire ap_block_state6_pp0_stage0_iter5_ignore_call177; -wire ap_block_state7_pp0_stage0_iter6_ignore_call177; -wire ap_block_state8_pp0_stage0_iter7_ignore_call177; -wire ap_block_state9_pp0_stage0_iter8_ignore_call177; -wire ap_block_state10_pp0_stage0_iter9_ignore_call177; -wire ap_block_state11_pp0_stage0_iter10_ignore_call177; -wire ap_block_state12_pp0_stage0_iter11_ignore_call177; -wire ap_block_state13_pp0_stage0_iter12_ignore_call177; -wire ap_block_state14_pp0_stage0_iter13_ignore_call177; -wire ap_block_state15_pp0_stage0_iter14_ignore_call177; -wire ap_block_state16_pp0_stage0_iter15_ignore_call177; -wire ap_block_state17_pp0_stage0_iter16_ignore_call177; -wire ap_block_state18_pp0_stage0_iter17_ignore_call177; -wire ap_block_state19_pp0_stage0_iter18_ignore_call177; -wire ap_block_state20_pp0_stage0_iter19_ignore_call177; -wire ap_block_state21_pp0_stage0_iter20_ignore_call177; -wire ap_block_state22_pp0_stage0_iter21_ignore_call177; -wire ap_block_state23_pp0_stage0_iter22_ignore_call177; -wire ap_block_state24_pp0_stage0_iter23_ignore_call177; -wire ap_block_state25_pp0_stage0_iter24_ignore_call177; -wire ap_block_state26_pp0_stage0_iter25_ignore_call177; -wire ap_block_state27_pp0_stage0_iter26_ignore_call177; -wire ap_block_state28_pp0_stage0_iter27_ignore_call177; -wire ap_block_state29_pp0_stage0_iter28_ignore_call177; -wire ap_block_state30_pp0_stage0_iter29_ignore_call177; -wire ap_block_state31_pp0_stage0_iter30_ignore_call177; -wire ap_block_state32_pp0_stage0_iter31_ignore_call177; -wire ap_block_state33_pp0_stage0_iter32_ignore_call177; -wire ap_block_state34_pp0_stage0_iter33_ignore_call177; -wire ap_block_state35_pp0_stage0_iter34_ignore_call177; -wire ap_block_state36_pp0_stage0_iter35_ignore_call177; -wire ap_block_state37_pp0_stage0_iter36_ignore_call177; -wire ap_block_state38_pp0_stage0_iter37_ignore_call177; -wire ap_block_state39_pp0_stage0_iter38_ignore_call177; -wire ap_block_state40_pp0_stage0_iter39_ignore_call177; -wire ap_block_state41_pp0_stage0_iter40_ignore_call177; -wire ap_block_state42_pp0_stage0_iter41_ignore_call177; -wire ap_block_state43_pp0_stage0_iter42_ignore_call177; -wire ap_block_state44_pp0_stage0_iter43_ignore_call177; -wire ap_block_state45_pp0_stage0_iter44_ignore_call177; -reg ap_block_state46_pp0_stage0_iter45_ignore_call177; -reg ap_block_pp0_stage0_11001_ignoreCallOp240; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_377_in_1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_377_in_0_m1_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_377_in_m1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_377_in_0_1_0; -reg grp_HEAT3D_stencil_kernel_fu_377_ap_ce; -wire ap_block_state1_pp0_stage0_iter0_ignore_call189; -reg ap_block_state2_pp0_stage0_iter1_ignore_call189; -wire ap_block_state3_pp0_stage0_iter2_ignore_call189; -wire ap_block_state4_pp0_stage0_iter3_ignore_call189; -wire ap_block_state5_pp0_stage0_iter4_ignore_call189; -wire ap_block_state6_pp0_stage0_iter5_ignore_call189; -wire ap_block_state7_pp0_stage0_iter6_ignore_call189; -wire ap_block_state8_pp0_stage0_iter7_ignore_call189; -wire ap_block_state9_pp0_stage0_iter8_ignore_call189; -wire ap_block_state10_pp0_stage0_iter9_ignore_call189; -wire ap_block_state11_pp0_stage0_iter10_ignore_call189; -wire ap_block_state12_pp0_stage0_iter11_ignore_call189; -wire ap_block_state13_pp0_stage0_iter12_ignore_call189; -wire ap_block_state14_pp0_stage0_iter13_ignore_call189; -wire ap_block_state15_pp0_stage0_iter14_ignore_call189; -wire ap_block_state16_pp0_stage0_iter15_ignore_call189; -wire ap_block_state17_pp0_stage0_iter16_ignore_call189; -wire ap_block_state18_pp0_stage0_iter17_ignore_call189; -wire ap_block_state19_pp0_stage0_iter18_ignore_call189; -wire ap_block_state20_pp0_stage0_iter19_ignore_call189; -wire ap_block_state21_pp0_stage0_iter20_ignore_call189; -wire ap_block_state22_pp0_stage0_iter21_ignore_call189; -wire ap_block_state23_pp0_stage0_iter22_ignore_call189; -wire ap_block_state24_pp0_stage0_iter23_ignore_call189; -wire ap_block_state25_pp0_stage0_iter24_ignore_call189; -wire ap_block_state26_pp0_stage0_iter25_ignore_call189; -wire ap_block_state27_pp0_stage0_iter26_ignore_call189; -wire ap_block_state28_pp0_stage0_iter27_ignore_call189; -wire ap_block_state29_pp0_stage0_iter28_ignore_call189; -wire ap_block_state30_pp0_stage0_iter29_ignore_call189; -wire ap_block_state31_pp0_stage0_iter30_ignore_call189; -wire ap_block_state32_pp0_stage0_iter31_ignore_call189; -wire ap_block_state33_pp0_stage0_iter32_ignore_call189; -wire ap_block_state34_pp0_stage0_iter33_ignore_call189; -wire ap_block_state35_pp0_stage0_iter34_ignore_call189; -wire ap_block_state36_pp0_stage0_iter35_ignore_call189; -wire ap_block_state37_pp0_stage0_iter36_ignore_call189; -wire ap_block_state38_pp0_stage0_iter37_ignore_call189; -wire ap_block_state39_pp0_stage0_iter38_ignore_call189; -wire ap_block_state40_pp0_stage0_iter39_ignore_call189; -wire ap_block_state41_pp0_stage0_iter40_ignore_call189; -wire ap_block_state42_pp0_stage0_iter41_ignore_call189; -wire ap_block_state43_pp0_stage0_iter42_ignore_call189; -wire ap_block_state44_pp0_stage0_iter43_ignore_call189; -wire ap_block_state45_pp0_stage0_iter44_ignore_call189; -reg ap_block_state46_pp0_stage0_iter45_ignore_call189; -reg ap_block_pp0_stage0_11001_ignoreCallOp251; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_388_in_1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_388_in_m1_0_0; -wire [31:0] grp_HEAT3D_stencil_kernel_fu_388_in_0_1_0; -reg grp_HEAT3D_stencil_kernel_fu_388_ap_ce; -wire ap_block_state1_pp0_stage0_iter0_ignore_call197; -reg ap_block_state2_pp0_stage0_iter1_ignore_call197; -wire ap_block_state3_pp0_stage0_iter2_ignore_call197; -wire ap_block_state4_pp0_stage0_iter3_ignore_call197; -wire ap_block_state5_pp0_stage0_iter4_ignore_call197; -wire ap_block_state6_pp0_stage0_iter5_ignore_call197; -wire ap_block_state7_pp0_stage0_iter6_ignore_call197; -wire ap_block_state8_pp0_stage0_iter7_ignore_call197; -wire ap_block_state9_pp0_stage0_iter8_ignore_call197; -wire ap_block_state10_pp0_stage0_iter9_ignore_call197; -wire ap_block_state11_pp0_stage0_iter10_ignore_call197; -wire ap_block_state12_pp0_stage0_iter11_ignore_call197; -wire ap_block_state13_pp0_stage0_iter12_ignore_call197; -wire ap_block_state14_pp0_stage0_iter13_ignore_call197; -wire ap_block_state15_pp0_stage0_iter14_ignore_call197; -wire ap_block_state16_pp0_stage0_iter15_ignore_call197; -wire ap_block_state17_pp0_stage0_iter16_ignore_call197; -wire ap_block_state18_pp0_stage0_iter17_ignore_call197; -wire ap_block_state19_pp0_stage0_iter18_ignore_call197; -wire ap_block_state20_pp0_stage0_iter19_ignore_call197; -wire ap_block_state21_pp0_stage0_iter20_ignore_call197; -wire ap_block_state22_pp0_stage0_iter21_ignore_call197; -wire ap_block_state23_pp0_stage0_iter22_ignore_call197; -wire ap_block_state24_pp0_stage0_iter23_ignore_call197; -wire ap_block_state25_pp0_stage0_iter24_ignore_call197; -wire ap_block_state26_pp0_stage0_iter25_ignore_call197; -wire ap_block_state27_pp0_stage0_iter26_ignore_call197; -wire ap_block_state28_pp0_stage0_iter27_ignore_call197; -wire ap_block_state29_pp0_stage0_iter28_ignore_call197; -wire ap_block_state30_pp0_stage0_iter29_ignore_call197; -wire ap_block_state31_pp0_stage0_iter30_ignore_call197; -wire ap_block_state32_pp0_stage0_iter31_ignore_call197; -wire ap_block_state33_pp0_stage0_iter32_ignore_call197; -wire ap_block_state34_pp0_stage0_iter33_ignore_call197; -wire ap_block_state35_pp0_stage0_iter34_ignore_call197; -wire ap_block_state36_pp0_stage0_iter35_ignore_call197; -wire ap_block_state37_pp0_stage0_iter36_ignore_call197; -wire ap_block_state38_pp0_stage0_iter37_ignore_call197; -wire ap_block_state39_pp0_stage0_iter38_ignore_call197; -wire ap_block_state40_pp0_stage0_iter39_ignore_call197; -wire ap_block_state41_pp0_stage0_iter40_ignore_call197; -wire ap_block_state42_pp0_stage0_iter41_ignore_call197; -wire ap_block_state43_pp0_stage0_iter42_ignore_call197; -wire ap_block_state44_pp0_stage0_iter43_ignore_call197; -wire ap_block_state45_pp0_stage0_iter44_ignore_call197; -reg ap_block_state46_pp0_stage0_iter45_ignore_call197; -reg ap_block_pp0_stage0_11001_ignoreCallOp258; -wire p_1_HLS_REG_ap_uint_512_s_fu_399_ap_ready; -wire [511:0] p_1_HLS_REG_ap_uint_512_s_fu_399_ap_return; -wire ref_tmp1_HLS_REG_ap_uint_512_s_fu_405_ap_ready; -wire [511:0] ref_tmp1_HLS_REG_ap_uint_512_s_fu_405_ap_return; -wire ref_tmp2_HLS_REG_ap_uint_512_s_fu_410_ap_ready; -wire [511:0] ref_tmp2_HLS_REG_ap_uint_512_s_fu_410_ap_return; -wire p_0_HLS_REG_ap_uint_512_s_fu_415_ap_ready; -wire [511:0] p_0_HLS_REG_ap_uint_512_s_fu_415_ap_return; -wire in_block_16_V_1_HLS_REG_ap_uint_512_s_fu_421_ap_ready; -wire [511:0] in_block_16_V_1_HLS_REG_ap_uint_512_s_fu_421_in_r; -wire [511:0] in_block_16_V_1_HLS_REG_ap_uint_512_s_fu_421_ap_return; -reg [511:0] p_Val2_s_fu_124; -wire ap_loop_init; -reg [511:0] p_Val2_1_fu_128; -reg [30:0] i_4_fu_132; -wire [30:0] add_ln73_1_fu_469_p2; -reg [30:0] ap_sig_allocacmp_i_4_load; -reg [511:0] p_Val2_2_fu_136; -reg [511:0] p_Val2_3_fu_140; -reg [511:0] p_Val2_4_fu_144; -reg ap_block_pp0_stage0_01001; -wire [31:0] zext_ln73_fu_459_p1; -wire [31:0] temp_in_1_0_0_fu_499_p1; -wire [31:0] temp_in_0_0_1_fu_508_p4; -wire [31:0] temp_in_0_0_m1_fu_525_p4; -wire [31:0] temp_in_0_0_0_1_fu_541_p1; -wire [31:0] temp_in_0_m1_0_fu_551_p1; -wire [31:0] temp_in_m1_0_0_fu_560_p1; -wire [31:0] temp_in_0_1_0_15_fu_569_p1; -wire [31:0] temp_in_1_0_0_1_fu_579_p4; -wire [31:0] temp_in_0_0_1_9_fu_594_p4; -wire [31:0] temp_in_0_m1_0_1_fu_611_p4; -wire [31:0] temp_in_m1_0_0_1_fu_626_p4; -wire [31:0] temp_in_0_1_0_1_fu_641_p4; -wire [31:0] temp_in_1_0_0_2_fu_656_p4; -wire [31:0] temp_in_0_0_1_10_fu_671_p4; -wire [31:0] temp_in_0_m1_0_2_fu_688_p4; -wire [31:0] temp_in_m1_0_0_2_fu_703_p4; -wire [31:0] temp_in_0_1_0_2_fu_718_p4; -wire [31:0] temp_in_1_0_0_3_fu_733_p4; -wire [31:0] temp_in_0_0_1_11_fu_748_p4; -wire [31:0] temp_in_0_m1_0_3_fu_765_p4; -wire [31:0] temp_in_m1_0_0_3_fu_780_p4; -wire [31:0] temp_in_0_1_0_3_fu_795_p4; -wire [31:0] temp_in_1_0_0_4_fu_810_p4; -wire [31:0] temp_in_0_0_1_12_fu_825_p4; -wire [31:0] temp_in_0_m1_0_4_fu_842_p4; -wire [31:0] temp_in_m1_0_0_4_fu_857_p4; -wire [31:0] temp_in_0_1_0_4_fu_872_p4; -wire [31:0] temp_in_1_0_0_5_fu_887_p4; -wire [31:0] temp_in_0_0_1_13_fu_902_p4; -wire [31:0] temp_in_0_m1_0_5_fu_919_p4; -wire [31:0] temp_in_m1_0_0_5_fu_934_p4; -wire [31:0] temp_in_0_1_0_5_fu_949_p4; -wire [31:0] temp_in_1_0_0_6_fu_964_p4; -wire [31:0] temp_in_0_0_1_14_fu_979_p4; -wire [31:0] temp_in_0_m1_0_6_fu_996_p4; -wire [31:0] temp_in_m1_0_0_6_fu_1011_p4; -wire [31:0] temp_in_0_1_0_6_fu_1026_p4; -wire [31:0] temp_in_1_0_0_7_fu_1041_p4; -wire [31:0] temp_in_0_0_1_15_fu_1056_p4; -wire [31:0] temp_in_0_m1_0_7_fu_1073_p4; -wire [31:0] temp_in_m1_0_0_7_fu_1088_p4; -wire [31:0] temp_in_0_1_0_7_fu_1103_p4; -wire [31:0] temp_in_1_0_0_8_fu_1118_p4; -wire [31:0] temp_in_0_0_1_16_fu_1133_p4; -wire [31:0] temp_in_0_m1_0_8_fu_1150_p4; -wire [31:0] temp_in_m1_0_0_8_fu_1165_p4; -wire [31:0] temp_in_0_1_0_8_fu_1180_p4; -wire [31:0] temp_in_1_0_0_9_fu_1195_p4; -wire [31:0] temp_in_0_0_1_17_fu_1210_p4; -wire [31:0] temp_in_0_m1_0_9_fu_1227_p4; -wire [31:0] temp_in_m1_0_0_9_fu_1242_p4; -wire [31:0] temp_in_0_1_0_9_fu_1257_p4; -wire [31:0] temp_in_1_0_0_10_fu_1272_p4; -wire [31:0] temp_in_0_0_1_18_fu_1287_p4; -wire [31:0] temp_in_0_m1_0_10_fu_1304_p4; -wire [31:0] temp_in_m1_0_0_10_fu_1319_p4; -wire [31:0] temp_in_0_1_0_10_fu_1334_p4; -wire [31:0] temp_in_1_0_0_11_fu_1349_p4; -wire [31:0] temp_in_0_0_1_19_fu_1364_p4; -wire [31:0] temp_in_0_m1_0_11_fu_1381_p4; -wire [31:0] temp_in_m1_0_0_11_fu_1396_p4; -wire [31:0] temp_in_0_1_0_11_fu_1411_p4; -wire [31:0] temp_in_1_0_0_12_fu_1426_p4; -wire [31:0] temp_in_0_0_1_20_fu_1441_p4; -wire [31:0] temp_in_0_m1_0_12_fu_1458_p4; -wire [31:0] temp_in_m1_0_0_12_fu_1473_p4; -wire [31:0] temp_in_0_1_0_12_fu_1488_p4; -wire [31:0] temp_in_1_0_0_13_fu_1503_p4; -wire [31:0] temp_in_0_0_1_21_fu_1518_p4; -wire [31:0] temp_in_0_m1_0_13_fu_1535_p4; -wire [31:0] temp_in_m1_0_0_13_fu_1550_p4; -wire [31:0] temp_in_0_1_0_13_fu_1565_p4; -wire [31:0] temp_in_1_0_0_14_fu_1580_p4; -wire [31:0] temp_in_0_0_1_22_fu_1595_p4; -wire [31:0] temp_in_0_m1_0_14_fu_1611_p4; -wire [31:0] temp_in_m1_0_0_14_fu_1626_p4; -wire [31:0] temp_in_0_1_0_14_fu_1641_p4; -wire [31:0] temp_in_1_0_0_15_fu_1656_p4; -wire [31:0] temp_in_m1_0_0_15_fu_1671_p4; -wire [31:0] temp_in_0_1_0_fu_1686_p4; -wire [31:0] bitcast_ln103_15_fu_1776_p1; -wire [31:0] bitcast_ln103_14_fu_1773_p1; -wire [31:0] bitcast_ln103_13_fu_1770_p1; -wire [31:0] bitcast_ln103_12_fu_1767_p1; -wire [31:0] bitcast_ln103_11_fu_1764_p1; -wire [31:0] bitcast_ln103_10_fu_1761_p1; -wire [31:0] bitcast_ln103_9_fu_1758_p1; -wire [31:0] bitcast_ln103_8_fu_1755_p1; -wire [31:0] bitcast_ln103_7_fu_1752_p1; -wire [31:0] bitcast_ln103_6_fu_1749_p1; -wire [31:0] bitcast_ln103_5_fu_1746_p1; -wire [31:0] bitcast_ln103_4_fu_1743_p1; -wire [31:0] bitcast_ln103_3_fu_1740_p1; -wire [31:0] bitcast_ln103_2_fu_1737_p1; -wire [31:0] bitcast_ln103_1_fu_1734_p1; -wire [31:0] bitcast_ln103_fu_1731_p1; -reg ap_done_reg; -wire ap_continue_int; -reg ap_done_int; -reg ap_loop_exit_ready_pp0_iter1_reg; -reg ap_loop_exit_ready_pp0_iter2_reg; -reg ap_loop_exit_ready_pp0_iter3_reg; -reg ap_loop_exit_ready_pp0_iter4_reg; -reg ap_loop_exit_ready_pp0_iter5_reg; -reg ap_loop_exit_ready_pp0_iter6_reg; -reg ap_loop_exit_ready_pp0_iter7_reg; -reg ap_loop_exit_ready_pp0_iter8_reg; -reg ap_loop_exit_ready_pp0_iter9_reg; -reg ap_loop_exit_ready_pp0_iter10_reg; -reg ap_loop_exit_ready_pp0_iter11_reg; -reg ap_loop_exit_ready_pp0_iter12_reg; -reg ap_loop_exit_ready_pp0_iter13_reg; -reg ap_loop_exit_ready_pp0_iter14_reg; -reg ap_loop_exit_ready_pp0_iter15_reg; -reg ap_loop_exit_ready_pp0_iter16_reg; -reg ap_loop_exit_ready_pp0_iter17_reg; -reg ap_loop_exit_ready_pp0_iter18_reg; -reg ap_loop_exit_ready_pp0_iter19_reg; -reg ap_loop_exit_ready_pp0_iter20_reg; -reg ap_loop_exit_ready_pp0_iter21_reg; -reg ap_loop_exit_ready_pp0_iter22_reg; -reg ap_loop_exit_ready_pp0_iter23_reg; -reg ap_loop_exit_ready_pp0_iter24_reg; -reg ap_loop_exit_ready_pp0_iter25_reg; -reg ap_loop_exit_ready_pp0_iter26_reg; -reg ap_loop_exit_ready_pp0_iter27_reg; -reg ap_loop_exit_ready_pp0_iter28_reg; -reg ap_loop_exit_ready_pp0_iter29_reg; -reg ap_loop_exit_ready_pp0_iter30_reg; -reg ap_loop_exit_ready_pp0_iter31_reg; -reg ap_loop_exit_ready_pp0_iter32_reg; -reg ap_loop_exit_ready_pp0_iter33_reg; -reg ap_loop_exit_ready_pp0_iter34_reg; -reg ap_loop_exit_ready_pp0_iter35_reg; -reg ap_loop_exit_ready_pp0_iter36_reg; -reg ap_loop_exit_ready_pp0_iter37_reg; -reg ap_loop_exit_ready_pp0_iter38_reg; -reg ap_loop_exit_ready_pp0_iter39_reg; -reg ap_loop_exit_ready_pp0_iter40_reg; -reg ap_loop_exit_ready_pp0_iter41_reg; -reg ap_loop_exit_ready_pp0_iter42_reg; -reg ap_loop_exit_ready_pp0_iter43_reg; -reg ap_loop_exit_ready_pp0_iter44_reg; -reg [0:0] ap_NS_fsm; -wire ap_enable_pp0; -wire ap_start_int; -wire ap_ce_reg; - -// power-on initialization -initial begin -#0 ap_CS_fsm = 1'd1; -#0 ap_enable_reg_pp0_iter1 = 1'b0; -#0 ap_enable_reg_pp0_iter2 = 1'b0; -#0 ap_enable_reg_pp0_iter3 = 1'b0; -#0 ap_enable_reg_pp0_iter4 = 1'b0; -#0 ap_enable_reg_pp0_iter5 = 1'b0; -#0 ap_enable_reg_pp0_iter6 = 1'b0; -#0 ap_enable_reg_pp0_iter7 = 1'b0; -#0 ap_enable_reg_pp0_iter8 = 1'b0; -#0 ap_enable_reg_pp0_iter9 = 1'b0; -#0 ap_enable_reg_pp0_iter10 = 1'b0; -#0 ap_enable_reg_pp0_iter11 = 1'b0; -#0 ap_enable_reg_pp0_iter12 = 1'b0; -#0 ap_enable_reg_pp0_iter13 = 1'b0; -#0 ap_enable_reg_pp0_iter14 = 1'b0; -#0 ap_enable_reg_pp0_iter15 = 1'b0; -#0 ap_enable_reg_pp0_iter16 = 1'b0; -#0 ap_enable_reg_pp0_iter17 = 1'b0; -#0 ap_enable_reg_pp0_iter18 = 1'b0; -#0 ap_enable_reg_pp0_iter19 = 1'b0; -#0 ap_enable_reg_pp0_iter20 = 1'b0; -#0 ap_enable_reg_pp0_iter21 = 1'b0; -#0 ap_enable_reg_pp0_iter22 = 1'b0; -#0 ap_enable_reg_pp0_iter23 = 1'b0; -#0 ap_enable_reg_pp0_iter24 = 1'b0; -#0 ap_enable_reg_pp0_iter25 = 1'b0; -#0 ap_enable_reg_pp0_iter26 = 1'b0; -#0 ap_enable_reg_pp0_iter27 = 1'b0; -#0 ap_enable_reg_pp0_iter28 = 1'b0; -#0 ap_enable_reg_pp0_iter29 = 1'b0; -#0 ap_enable_reg_pp0_iter30 = 1'b0; -#0 ap_enable_reg_pp0_iter31 = 1'b0; -#0 ap_enable_reg_pp0_iter32 = 1'b0; -#0 ap_enable_reg_pp0_iter33 = 1'b0; -#0 ap_enable_reg_pp0_iter34 = 1'b0; -#0 ap_enable_reg_pp0_iter35 = 1'b0; -#0 ap_enable_reg_pp0_iter36 = 1'b0; -#0 ap_enable_reg_pp0_iter37 = 1'b0; -#0 ap_enable_reg_pp0_iter38 = 1'b0; -#0 ap_enable_reg_pp0_iter39 = 1'b0; -#0 ap_enable_reg_pp0_iter40 = 1'b0; -#0 ap_enable_reg_pp0_iter41 = 1'b0; -#0 ap_enable_reg_pp0_iter42 = 1'b0; -#0 ap_enable_reg_pp0_iter43 = 1'b0; -#0 ap_enable_reg_pp0_iter44 = 1'b0; -#0 ap_enable_reg_pp0_iter45 = 1'b0; -#0 ap_done_reg = 1'b0; -end - -HEAT3D_HEAT3D_stencil_kernel grp_HEAT3D_stencil_kernel_fu_223( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .in_1_0_0(grp_HEAT3D_stencil_kernel_fu_223_in_1_0_0), - .in_0_0_1(bitcast_ln91_fu_518_p1), - .in_0_0_m1(bitcast_ln93_fu_535_p1), - .in_0_0_0(bitcast_ln95_fu_545_p1), - .in_0_m1_0(grp_HEAT3D_stencil_kernel_fu_223_in_0_m1_0), - .in_m1_0_0(grp_HEAT3D_stencil_kernel_fu_223_in_m1_0_0), - .in_0_1_0(bitcast_ln101_fu_573_p1), - .ap_return(grp_HEAT3D_stencil_kernel_fu_223_ap_return), - .ap_ce(grp_HEAT3D_stencil_kernel_fu_223_ap_ce) -); - -HEAT3D_HEAT3D_stencil_kernel grp_HEAT3D_stencil_kernel_fu_234( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .in_1_0_0(grp_HEAT3D_stencil_kernel_fu_234_in_1_0_0), - .in_0_0_1(bitcast_ln91_1_fu_604_p1), - .in_0_0_m1(bitcast_ln95_fu_545_p1), - .in_0_0_0(bitcast_ln91_fu_518_p1), - .in_0_m1_0(grp_HEAT3D_stencil_kernel_fu_234_in_0_m1_0), - .in_m1_0_0(grp_HEAT3D_stencil_kernel_fu_234_in_m1_0_0), - .in_0_1_0(grp_HEAT3D_stencil_kernel_fu_234_in_0_1_0), - .ap_return(grp_HEAT3D_stencil_kernel_fu_234_ap_return), - .ap_ce(grp_HEAT3D_stencil_kernel_fu_234_ap_ce) -); - -HEAT3D_HEAT3D_stencil_kernel grp_HEAT3D_stencil_kernel_fu_245( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .in_1_0_0(grp_HEAT3D_stencil_kernel_fu_245_in_1_0_0), - .in_0_0_1(bitcast_ln91_2_fu_681_p1), - .in_0_0_m1(bitcast_ln91_fu_518_p1), - .in_0_0_0(bitcast_ln91_1_fu_604_p1), - .in_0_m1_0(grp_HEAT3D_stencil_kernel_fu_245_in_0_m1_0), - .in_m1_0_0(grp_HEAT3D_stencil_kernel_fu_245_in_m1_0_0), - .in_0_1_0(grp_HEAT3D_stencil_kernel_fu_245_in_0_1_0), - .ap_return(grp_HEAT3D_stencil_kernel_fu_245_ap_return), - .ap_ce(grp_HEAT3D_stencil_kernel_fu_245_ap_ce) -); - -HEAT3D_HEAT3D_stencil_kernel grp_HEAT3D_stencil_kernel_fu_256( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .in_1_0_0(grp_HEAT3D_stencil_kernel_fu_256_in_1_0_0), - .in_0_0_1(bitcast_ln91_3_fu_758_p1), - .in_0_0_m1(bitcast_ln91_1_fu_604_p1), - .in_0_0_0(bitcast_ln91_2_fu_681_p1), - .in_0_m1_0(grp_HEAT3D_stencil_kernel_fu_256_in_0_m1_0), - .in_m1_0_0(grp_HEAT3D_stencil_kernel_fu_256_in_m1_0_0), - .in_0_1_0(grp_HEAT3D_stencil_kernel_fu_256_in_0_1_0), - .ap_return(grp_HEAT3D_stencil_kernel_fu_256_ap_return), - .ap_ce(grp_HEAT3D_stencil_kernel_fu_256_ap_ce) -); - -HEAT3D_HEAT3D_stencil_kernel grp_HEAT3D_stencil_kernel_fu_267( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .in_1_0_0(grp_HEAT3D_stencil_kernel_fu_267_in_1_0_0), - .in_0_0_1(bitcast_ln91_4_fu_835_p1), - .in_0_0_m1(bitcast_ln91_2_fu_681_p1), - .in_0_0_0(bitcast_ln91_3_fu_758_p1), - .in_0_m1_0(grp_HEAT3D_stencil_kernel_fu_267_in_0_m1_0), - .in_m1_0_0(grp_HEAT3D_stencil_kernel_fu_267_in_m1_0_0), - .in_0_1_0(grp_HEAT3D_stencil_kernel_fu_267_in_0_1_0), - .ap_return(grp_HEAT3D_stencil_kernel_fu_267_ap_return), - .ap_ce(grp_HEAT3D_stencil_kernel_fu_267_ap_ce) -); - -HEAT3D_HEAT3D_stencil_kernel grp_HEAT3D_stencil_kernel_fu_278( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .in_1_0_0(grp_HEAT3D_stencil_kernel_fu_278_in_1_0_0), - .in_0_0_1(bitcast_ln91_5_fu_912_p1), - .in_0_0_m1(bitcast_ln91_3_fu_758_p1), - .in_0_0_0(bitcast_ln91_4_fu_835_p1), - .in_0_m1_0(grp_HEAT3D_stencil_kernel_fu_278_in_0_m1_0), - .in_m1_0_0(grp_HEAT3D_stencil_kernel_fu_278_in_m1_0_0), - .in_0_1_0(grp_HEAT3D_stencil_kernel_fu_278_in_0_1_0), - .ap_return(grp_HEAT3D_stencil_kernel_fu_278_ap_return), - .ap_ce(grp_HEAT3D_stencil_kernel_fu_278_ap_ce) -); - -HEAT3D_HEAT3D_stencil_kernel grp_HEAT3D_stencil_kernel_fu_289( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .in_1_0_0(grp_HEAT3D_stencil_kernel_fu_289_in_1_0_0), - .in_0_0_1(bitcast_ln91_6_fu_989_p1), - .in_0_0_m1(bitcast_ln91_4_fu_835_p1), - .in_0_0_0(bitcast_ln91_5_fu_912_p1), - .in_0_m1_0(grp_HEAT3D_stencil_kernel_fu_289_in_0_m1_0), - .in_m1_0_0(grp_HEAT3D_stencil_kernel_fu_289_in_m1_0_0), - .in_0_1_0(grp_HEAT3D_stencil_kernel_fu_289_in_0_1_0), - .ap_return(grp_HEAT3D_stencil_kernel_fu_289_ap_return), - .ap_ce(grp_HEAT3D_stencil_kernel_fu_289_ap_ce) -); - -HEAT3D_HEAT3D_stencil_kernel grp_HEAT3D_stencil_kernel_fu_300( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .in_1_0_0(grp_HEAT3D_stencil_kernel_fu_300_in_1_0_0), - .in_0_0_1(bitcast_ln91_7_fu_1066_p1), - .in_0_0_m1(bitcast_ln91_5_fu_912_p1), - .in_0_0_0(bitcast_ln91_6_fu_989_p1), - .in_0_m1_0(grp_HEAT3D_stencil_kernel_fu_300_in_0_m1_0), - .in_m1_0_0(grp_HEAT3D_stencil_kernel_fu_300_in_m1_0_0), - .in_0_1_0(grp_HEAT3D_stencil_kernel_fu_300_in_0_1_0), - .ap_return(grp_HEAT3D_stencil_kernel_fu_300_ap_return), - .ap_ce(grp_HEAT3D_stencil_kernel_fu_300_ap_ce) -); - -HEAT3D_HEAT3D_stencil_kernel grp_HEAT3D_stencil_kernel_fu_311( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .in_1_0_0(grp_HEAT3D_stencil_kernel_fu_311_in_1_0_0), - .in_0_0_1(bitcast_ln91_8_fu_1143_p1), - .in_0_0_m1(bitcast_ln91_6_fu_989_p1), - .in_0_0_0(bitcast_ln91_7_fu_1066_p1), - .in_0_m1_0(grp_HEAT3D_stencil_kernel_fu_311_in_0_m1_0), - .in_m1_0_0(grp_HEAT3D_stencil_kernel_fu_311_in_m1_0_0), - .in_0_1_0(grp_HEAT3D_stencil_kernel_fu_311_in_0_1_0), - .ap_return(grp_HEAT3D_stencil_kernel_fu_311_ap_return), - .ap_ce(grp_HEAT3D_stencil_kernel_fu_311_ap_ce) -); - -HEAT3D_HEAT3D_stencil_kernel grp_HEAT3D_stencil_kernel_fu_322( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .in_1_0_0(grp_HEAT3D_stencil_kernel_fu_322_in_1_0_0), - .in_0_0_1(bitcast_ln91_9_fu_1220_p1), - .in_0_0_m1(bitcast_ln91_7_fu_1066_p1), - .in_0_0_0(bitcast_ln91_8_fu_1143_p1), - .in_0_m1_0(grp_HEAT3D_stencil_kernel_fu_322_in_0_m1_0), - .in_m1_0_0(grp_HEAT3D_stencil_kernel_fu_322_in_m1_0_0), - .in_0_1_0(grp_HEAT3D_stencil_kernel_fu_322_in_0_1_0), - .ap_return(grp_HEAT3D_stencil_kernel_fu_322_ap_return), - .ap_ce(grp_HEAT3D_stencil_kernel_fu_322_ap_ce) -); - -HEAT3D_HEAT3D_stencil_kernel grp_HEAT3D_stencil_kernel_fu_333( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .in_1_0_0(grp_HEAT3D_stencil_kernel_fu_333_in_1_0_0), - .in_0_0_1(bitcast_ln91_10_fu_1297_p1), - .in_0_0_m1(bitcast_ln91_8_fu_1143_p1), - .in_0_0_0(bitcast_ln91_9_fu_1220_p1), - .in_0_m1_0(grp_HEAT3D_stencil_kernel_fu_333_in_0_m1_0), - .in_m1_0_0(grp_HEAT3D_stencil_kernel_fu_333_in_m1_0_0), - .in_0_1_0(grp_HEAT3D_stencil_kernel_fu_333_in_0_1_0), - .ap_return(grp_HEAT3D_stencil_kernel_fu_333_ap_return), - .ap_ce(grp_HEAT3D_stencil_kernel_fu_333_ap_ce) -); - -HEAT3D_HEAT3D_stencil_kernel grp_HEAT3D_stencil_kernel_fu_344( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .in_1_0_0(grp_HEAT3D_stencil_kernel_fu_344_in_1_0_0), - .in_0_0_1(bitcast_ln91_11_fu_1374_p1), - .in_0_0_m1(bitcast_ln91_9_fu_1220_p1), - .in_0_0_0(bitcast_ln91_10_fu_1297_p1), - .in_0_m1_0(grp_HEAT3D_stencil_kernel_fu_344_in_0_m1_0), - .in_m1_0_0(grp_HEAT3D_stencil_kernel_fu_344_in_m1_0_0), - .in_0_1_0(grp_HEAT3D_stencil_kernel_fu_344_in_0_1_0), - .ap_return(grp_HEAT3D_stencil_kernel_fu_344_ap_return), - .ap_ce(grp_HEAT3D_stencil_kernel_fu_344_ap_ce) -); - -HEAT3D_HEAT3D_stencil_kernel grp_HEAT3D_stencil_kernel_fu_355( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .in_1_0_0(grp_HEAT3D_stencil_kernel_fu_355_in_1_0_0), - .in_0_0_1(bitcast_ln91_12_fu_1451_p1), - .in_0_0_m1(bitcast_ln91_10_fu_1297_p1), - .in_0_0_0(bitcast_ln91_11_fu_1374_p1), - .in_0_m1_0(grp_HEAT3D_stencil_kernel_fu_355_in_0_m1_0), - .in_m1_0_0(grp_HEAT3D_stencil_kernel_fu_355_in_m1_0_0), - .in_0_1_0(grp_HEAT3D_stencil_kernel_fu_355_in_0_1_0), - .ap_return(grp_HEAT3D_stencil_kernel_fu_355_ap_return), - .ap_ce(grp_HEAT3D_stencil_kernel_fu_355_ap_ce) -); - -HEAT3D_HEAT3D_stencil_kernel grp_HEAT3D_stencil_kernel_fu_366( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .in_1_0_0(grp_HEAT3D_stencil_kernel_fu_366_in_1_0_0), - .in_0_0_1(bitcast_ln91_13_fu_1528_p1), - .in_0_0_m1(bitcast_ln91_11_fu_1374_p1), - .in_0_0_0(bitcast_ln91_12_fu_1451_p1), - .in_0_m1_0(grp_HEAT3D_stencil_kernel_fu_366_in_0_m1_0), - .in_m1_0_0(grp_HEAT3D_stencil_kernel_fu_366_in_m1_0_0), - .in_0_1_0(grp_HEAT3D_stencil_kernel_fu_366_in_0_1_0), - .ap_return(grp_HEAT3D_stencil_kernel_fu_366_ap_return), - .ap_ce(grp_HEAT3D_stencil_kernel_fu_366_ap_ce) -); - -HEAT3D_HEAT3D_stencil_kernel grp_HEAT3D_stencil_kernel_fu_377( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .in_1_0_0(grp_HEAT3D_stencil_kernel_fu_377_in_1_0_0), - .in_0_0_1(bitcast_ln91_14_fu_1605_p1), - .in_0_0_m1(bitcast_ln91_12_fu_1451_p1), - .in_0_0_0(bitcast_ln91_13_fu_1528_p1), - .in_0_m1_0(grp_HEAT3D_stencil_kernel_fu_377_in_0_m1_0), - .in_m1_0_0(grp_HEAT3D_stencil_kernel_fu_377_in_m1_0_0), - .in_0_1_0(grp_HEAT3D_stencil_kernel_fu_377_in_0_1_0), - .ap_return(grp_HEAT3D_stencil_kernel_fu_377_ap_return), - .ap_ce(grp_HEAT3D_stencil_kernel_fu_377_ap_ce) -); - -HEAT3D_HEAT3D_stencil_kernel grp_HEAT3D_stencil_kernel_fu_388( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .in_1_0_0(grp_HEAT3D_stencil_kernel_fu_388_in_1_0_0), - .in_0_0_1(bitcast_ln101_fu_573_p1), - .in_0_0_m1(bitcast_ln91_13_fu_1528_p1), - .in_0_0_0(bitcast_ln91_14_fu_1605_p1), - .in_0_m1_0(bitcast_ln93_fu_535_p1), - .in_m1_0_0(grp_HEAT3D_stencil_kernel_fu_388_in_m1_0_0), - .in_0_1_0(grp_HEAT3D_stencil_kernel_fu_388_in_0_1_0), - .ap_return(grp_HEAT3D_stencil_kernel_fu_388_ap_return), - .ap_ce(grp_HEAT3D_stencil_kernel_fu_388_ap_ce) -); - -HEAT3D_HLS_REG_ap_uint_512_s p_1_HLS_REG_ap_uint_512_s_fu_399( - .ap_ready(p_1_HLS_REG_ap_uint_512_s_fu_399_ap_ready), - .in_r(p_Val2_3_fu_140), - .ap_return(p_1_HLS_REG_ap_uint_512_s_fu_399_ap_return) -); - -HEAT3D_HLS_REG_ap_uint_512_s ref_tmp1_HLS_REG_ap_uint_512_s_fu_405( - .ap_ready(ref_tmp1_HLS_REG_ap_uint_512_s_fu_405_ap_ready), - .in_r(p_Val2_2_fu_136), - .ap_return(ref_tmp1_HLS_REG_ap_uint_512_s_fu_405_ap_return) -); - -HEAT3D_HLS_REG_ap_uint_512_s ref_tmp2_HLS_REG_ap_uint_512_s_fu_410( - .ap_ready(ref_tmp2_HLS_REG_ap_uint_512_s_fu_410_ap_ready), - .in_r(p_Val2_4_fu_144), - .ap_return(ref_tmp2_HLS_REG_ap_uint_512_s_fu_410_ap_return) -); - -HEAT3D_HLS_REG_ap_uint_512_s p_0_HLS_REG_ap_uint_512_s_fu_415( - .ap_ready(p_0_HLS_REG_ap_uint_512_s_fu_415_ap_ready), - .in_r(p_Val2_1_fu_128), - .ap_return(p_0_HLS_REG_ap_uint_512_s_fu_415_ap_return) -); - -HEAT3D_HLS_REG_ap_uint_512_s in_block_16_V_1_HLS_REG_ap_uint_512_s_fu_421( - .ap_ready(in_block_16_V_1_HLS_REG_ap_uint_512_s_fu_421_ap_ready), - .in_r(in_block_16_V_1_HLS_REG_ap_uint_512_s_fu_421_in_r), - .ap_return(in_block_16_V_1_HLS_REG_ap_uint_512_s_fu_421_ap_return) -); - -HEAT3D_flow_control_loop_pipe_sequential_init flow_control_loop_pipe_sequential_init_U( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .ap_start(ap_start), - .ap_ready(ap_ready), - .ap_done(ap_done), - .ap_start_int(ap_start_int), - .ap_loop_init(ap_loop_init), - .ap_ready_int(ap_ready_int), - .ap_loop_exit_ready(ap_condition_exit_pp0_iter0_stage0), - .ap_loop_exit_done(ap_done_int), - .ap_continue_int(ap_continue_int), - .ap_done_int(ap_done_int) -); - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_CS_fsm <= ap_ST_fsm_pp0_stage0; - end else begin - ap_CS_fsm <= ap_NS_fsm; - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_done_reg <= 1'b0; - end else begin - if ((ap_continue_int == 1'b1)) begin - ap_done_reg <= 1'b0; - end else if (((ap_loop_exit_ready_pp0_iter44_reg == 1'b1) & (1'b0 == ap_block_pp0_stage0_subdone))) begin - ap_done_reg <= 1'b1; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter1 <= 1'b0; - end else begin - if ((1'b1 == ap_condition_exit_pp0_iter0_stage0)) begin - ap_enable_reg_pp0_iter1 <= 1'b0; - end else if (((1'b0 == ap_block_pp0_stage0_subdone) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_enable_reg_pp0_iter1 <= ap_start_int; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter10 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter10 <= ap_enable_reg_pp0_iter9; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter11 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter11 <= ap_enable_reg_pp0_iter10; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter12 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter12 <= ap_enable_reg_pp0_iter11; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter13 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter13 <= ap_enable_reg_pp0_iter12; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter14 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter14 <= ap_enable_reg_pp0_iter13; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter15 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter15 <= ap_enable_reg_pp0_iter14; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter16 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter16 <= ap_enable_reg_pp0_iter15; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter17 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter17 <= ap_enable_reg_pp0_iter16; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter18 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter18 <= ap_enable_reg_pp0_iter17; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter19 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter19 <= ap_enable_reg_pp0_iter18; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter2 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter2 <= ap_enable_reg_pp0_iter1; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter20 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter20 <= ap_enable_reg_pp0_iter19; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter21 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter21 <= ap_enable_reg_pp0_iter20; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter22 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter22 <= ap_enable_reg_pp0_iter21; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter23 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter23 <= ap_enable_reg_pp0_iter22; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter24 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter24 <= ap_enable_reg_pp0_iter23; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter25 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter25 <= ap_enable_reg_pp0_iter24; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter26 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter26 <= ap_enable_reg_pp0_iter25; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter27 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter27 <= ap_enable_reg_pp0_iter26; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter28 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter28 <= ap_enable_reg_pp0_iter27; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter29 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter29 <= ap_enable_reg_pp0_iter28; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter3 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter3 <= ap_enable_reg_pp0_iter2; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter30 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter30 <= ap_enable_reg_pp0_iter29; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter31 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter31 <= ap_enable_reg_pp0_iter30; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter32 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter32 <= ap_enable_reg_pp0_iter31; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter33 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter33 <= ap_enable_reg_pp0_iter32; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter34 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter34 <= ap_enable_reg_pp0_iter33; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter35 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter35 <= ap_enable_reg_pp0_iter34; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter36 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter36 <= ap_enable_reg_pp0_iter35; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter37 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter37 <= ap_enable_reg_pp0_iter36; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter38 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter38 <= ap_enable_reg_pp0_iter37; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter39 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter39 <= ap_enable_reg_pp0_iter38; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter4 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter4 <= ap_enable_reg_pp0_iter3; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter40 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter40 <= ap_enable_reg_pp0_iter39; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter41 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter41 <= ap_enable_reg_pp0_iter40; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter42 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter42 <= ap_enable_reg_pp0_iter41; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter43 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter43 <= ap_enable_reg_pp0_iter42; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter44 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter44 <= ap_enable_reg_pp0_iter43; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter45 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter45 <= ap_enable_reg_pp0_iter44; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter5 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter5 <= ap_enable_reg_pp0_iter4; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter6 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter6 <= ap_enable_reg_pp0_iter5; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter7 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter7 <= ap_enable_reg_pp0_iter6; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter8 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter8 <= ap_enable_reg_pp0_iter7; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter9 <= 1'b0; - end else begin - if ((1'b0 == ap_block_pp0_stage0_subdone)) begin - ap_enable_reg_pp0_iter9 <= ap_enable_reg_pp0_iter8; - end - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - if (((icmp_ln73_fu_463_p2 == 1'd1) & (ap_enable_reg_pp0_iter0 == 1'b1))) begin - i_4_fu_132 <= add_ln73_1_fu_469_p2; - end else if ((ap_loop_init == 1'b1)) begin - i_4_fu_132 <= 31'd0; - end - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - if ((ap_loop_init == 1'b1)) begin - p_Val2_1_fu_128 <= in_block_16_V; - end else if ((ap_enable_reg_pp0_iter1 == 1'b1)) begin - p_Val2_1_fu_128 <= in_block_16_V_1_HLS_REG_ap_uint_512_s_fu_421_ap_return; - end - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - if ((ap_loop_init == 1'b1)) begin - p_Val2_2_fu_136 <= in_block_0; - end else if ((ap_enable_reg_pp0_iter1 == 1'b1)) begin - p_Val2_2_fu_136 <= ref_tmp2_HLS_REG_ap_uint_512_s_fu_410_ap_return; - end - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - if ((ap_loop_init == 1'b1)) begin - p_Val2_3_fu_140 <= in_block_m1; - end else if ((ap_enable_reg_pp0_iter1 == 1'b1)) begin - p_Val2_3_fu_140 <= ref_tmp1_HLS_REG_ap_uint_512_s_fu_405_ap_return; - end - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - if ((ap_loop_init == 1'b1)) begin - p_Val2_4_fu_144 <= in_block_1; - end else if ((ap_enable_reg_pp0_iter1 == 1'b1)) begin - p_Val2_4_fu_144 <= in_stream_2_to_15_dout; - end - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - if ((ap_loop_init == 1'b1)) begin - p_Val2_s_fu_124 <= in_block_m16_V; - end else if ((ap_enable_reg_pp0_iter1 == 1'b1)) begin - p_Val2_s_fu_124 <= in_stream_m15_to_m2_dout; - end - end -end - -always @ (posedge ap_clk) begin - if ((1'b0 == ap_block_pp0_stage0_11001)) begin - ap_loop_exit_ready_pp0_iter10_reg <= ap_loop_exit_ready_pp0_iter9_reg; - ap_loop_exit_ready_pp0_iter11_reg <= ap_loop_exit_ready_pp0_iter10_reg; - ap_loop_exit_ready_pp0_iter12_reg <= ap_loop_exit_ready_pp0_iter11_reg; - ap_loop_exit_ready_pp0_iter13_reg <= ap_loop_exit_ready_pp0_iter12_reg; - ap_loop_exit_ready_pp0_iter14_reg <= ap_loop_exit_ready_pp0_iter13_reg; - ap_loop_exit_ready_pp0_iter15_reg <= ap_loop_exit_ready_pp0_iter14_reg; - ap_loop_exit_ready_pp0_iter16_reg <= ap_loop_exit_ready_pp0_iter15_reg; - ap_loop_exit_ready_pp0_iter17_reg <= ap_loop_exit_ready_pp0_iter16_reg; - ap_loop_exit_ready_pp0_iter18_reg <= ap_loop_exit_ready_pp0_iter17_reg; - ap_loop_exit_ready_pp0_iter19_reg <= ap_loop_exit_ready_pp0_iter18_reg; - ap_loop_exit_ready_pp0_iter20_reg <= ap_loop_exit_ready_pp0_iter19_reg; - ap_loop_exit_ready_pp0_iter21_reg <= ap_loop_exit_ready_pp0_iter20_reg; - ap_loop_exit_ready_pp0_iter22_reg <= ap_loop_exit_ready_pp0_iter21_reg; - ap_loop_exit_ready_pp0_iter23_reg <= ap_loop_exit_ready_pp0_iter22_reg; - ap_loop_exit_ready_pp0_iter24_reg <= ap_loop_exit_ready_pp0_iter23_reg; - ap_loop_exit_ready_pp0_iter25_reg <= ap_loop_exit_ready_pp0_iter24_reg; - ap_loop_exit_ready_pp0_iter26_reg <= ap_loop_exit_ready_pp0_iter25_reg; - ap_loop_exit_ready_pp0_iter27_reg <= ap_loop_exit_ready_pp0_iter26_reg; - ap_loop_exit_ready_pp0_iter28_reg <= ap_loop_exit_ready_pp0_iter27_reg; - ap_loop_exit_ready_pp0_iter29_reg <= ap_loop_exit_ready_pp0_iter28_reg; - ap_loop_exit_ready_pp0_iter30_reg <= ap_loop_exit_ready_pp0_iter29_reg; - ap_loop_exit_ready_pp0_iter31_reg <= ap_loop_exit_ready_pp0_iter30_reg; - ap_loop_exit_ready_pp0_iter32_reg <= ap_loop_exit_ready_pp0_iter31_reg; - ap_loop_exit_ready_pp0_iter33_reg <= ap_loop_exit_ready_pp0_iter32_reg; - ap_loop_exit_ready_pp0_iter34_reg <= ap_loop_exit_ready_pp0_iter33_reg; - ap_loop_exit_ready_pp0_iter35_reg <= ap_loop_exit_ready_pp0_iter34_reg; - ap_loop_exit_ready_pp0_iter36_reg <= ap_loop_exit_ready_pp0_iter35_reg; - ap_loop_exit_ready_pp0_iter37_reg <= ap_loop_exit_ready_pp0_iter36_reg; - ap_loop_exit_ready_pp0_iter38_reg <= ap_loop_exit_ready_pp0_iter37_reg; - ap_loop_exit_ready_pp0_iter39_reg <= ap_loop_exit_ready_pp0_iter38_reg; - ap_loop_exit_ready_pp0_iter3_reg <= ap_loop_exit_ready_pp0_iter2_reg; - ap_loop_exit_ready_pp0_iter40_reg <= ap_loop_exit_ready_pp0_iter39_reg; - ap_loop_exit_ready_pp0_iter41_reg <= ap_loop_exit_ready_pp0_iter40_reg; - ap_loop_exit_ready_pp0_iter42_reg <= ap_loop_exit_ready_pp0_iter41_reg; - ap_loop_exit_ready_pp0_iter43_reg <= ap_loop_exit_ready_pp0_iter42_reg; - ap_loop_exit_ready_pp0_iter44_reg <= ap_loop_exit_ready_pp0_iter43_reg; - ap_loop_exit_ready_pp0_iter4_reg <= ap_loop_exit_ready_pp0_iter3_reg; - ap_loop_exit_ready_pp0_iter5_reg <= ap_loop_exit_ready_pp0_iter4_reg; - ap_loop_exit_ready_pp0_iter6_reg <= ap_loop_exit_ready_pp0_iter5_reg; - ap_loop_exit_ready_pp0_iter7_reg <= ap_loop_exit_ready_pp0_iter6_reg; - ap_loop_exit_ready_pp0_iter8_reg <= ap_loop_exit_ready_pp0_iter7_reg; - ap_loop_exit_ready_pp0_iter9_reg <= ap_loop_exit_ready_pp0_iter8_reg; - result_10_reg_2346 <= grp_HEAT3D_stencil_kernel_fu_333_ap_return; - result_11_reg_2351 <= grp_HEAT3D_stencil_kernel_fu_344_ap_return; - result_12_reg_2356 <= grp_HEAT3D_stencil_kernel_fu_355_ap_return; - result_13_reg_2361 <= grp_HEAT3D_stencil_kernel_fu_366_ap_return; - result_14_reg_2366 <= grp_HEAT3D_stencil_kernel_fu_377_ap_return; - result_15_reg_2371 <= grp_HEAT3D_stencil_kernel_fu_388_ap_return; - result_1_reg_2301 <= grp_HEAT3D_stencil_kernel_fu_234_ap_return; - result_2_reg_2306 <= grp_HEAT3D_stencil_kernel_fu_245_ap_return; - result_3_reg_2311 <= grp_HEAT3D_stencil_kernel_fu_256_ap_return; - result_4_reg_2316 <= grp_HEAT3D_stencil_kernel_fu_267_ap_return; - result_5_reg_2321 <= grp_HEAT3D_stencil_kernel_fu_278_ap_return; - result_6_reg_2326 <= grp_HEAT3D_stencil_kernel_fu_289_ap_return; - result_7_reg_2331 <= grp_HEAT3D_stencil_kernel_fu_300_ap_return; - result_8_reg_2336 <= grp_HEAT3D_stencil_kernel_fu_311_ap_return; - result_9_reg_2341 <= grp_HEAT3D_stencil_kernel_fu_322_ap_return; - result_reg_2296 <= grp_HEAT3D_stencil_kernel_fu_223_ap_return; - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_loop_exit_ready_pp0_iter1_reg <= ap_loop_exit_ready; - ap_loop_exit_ready_pp0_iter2_reg <= ap_loop_exit_ready_pp0_iter1_reg; - end -end - -always @ (*) begin - if (((icmp_ln73_fu_463_p2 == 1'd0) & (1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_condition_exit_pp0_iter0_stage0 = 1'b1; - end else begin - ap_condition_exit_pp0_iter0_stage0 = 1'b0; - end -end - -always @ (*) begin - if (((ap_loop_exit_ready_pp0_iter44_reg == 1'b1) & (1'b0 == ap_block_pp0_stage0_subdone))) begin - ap_done_int = 1'b1; - end else begin - ap_done_int = ap_done_reg; - end -end - -always @ (*) begin - if (((ap_start_int == 1'b0) & (1'b1 == ap_CS_fsm_pp0_stage0) & (ap_idle_pp0 == 1'b1))) begin - ap_idle = 1'b1; - end else begin - ap_idle = 1'b0; - end -end - -always @ (*) begin - if (((ap_enable_reg_pp0_iter26 == 1'b0) & (ap_enable_reg_pp0_iter25 == 1'b0) & (ap_enable_reg_pp0_iter24 == 1'b0) & (ap_enable_reg_pp0_iter23 == 1'b0) & (ap_enable_reg_pp0_iter22 == 1'b0) & (ap_enable_reg_pp0_iter21 == 1'b0) & (ap_enable_reg_pp0_iter20 == 1'b0) & (ap_enable_reg_pp0_iter19 == 1'b0) & (ap_enable_reg_pp0_iter18 == 1'b0) & (ap_enable_reg_pp0_iter17 == 1'b0) & (ap_enable_reg_pp0_iter16 == 1'b0) & (ap_enable_reg_pp0_iter15 == 1'b0) & (ap_enable_reg_pp0_iter14 == 1'b0) & (ap_enable_reg_pp0_iter13 == 1'b0) & (ap_enable_reg_pp0_iter12 == 1'b0) & (ap_enable_reg_pp0_iter11 == 1'b0) & (ap_enable_reg_pp0_iter10 == 1'b0) & (ap_enable_reg_pp0_iter9 == 1'b0) & (ap_enable_reg_pp0_iter8 == 1'b0) & (ap_enable_reg_pp0_iter7 == 1'b0) & (ap_enable_reg_pp0_iter6 == 1'b0) & (ap_enable_reg_pp0_iter5 == 1'b0) & (ap_enable_reg_pp0_iter4 == 1'b0) & (ap_enable_reg_pp0_iter3 == 1'b0) & (ap_enable_reg_pp0_iter2 == 1'b0) & (ap_enable_reg_pp0_iter1 == 1'b0) & (ap_enable_reg_pp0_iter0 == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b0) & (ap_enable_reg_pp0_iter44 == 1'b0) & (ap_enable_reg_pp0_iter43 == 1'b0) & (ap_enable_reg_pp0_iter42 == 1'b0) & (ap_enable_reg_pp0_iter41 == 1'b0) & (ap_enable_reg_pp0_iter40 == 1'b0) & (ap_enable_reg_pp0_iter39 == 1'b0) & (ap_enable_reg_pp0_iter38 == 1'b0) & (ap_enable_reg_pp0_iter37 == 1'b0) & (ap_enable_reg_pp0_iter36 == 1'b0) & (ap_enable_reg_pp0_iter35 == 1'b0) & (ap_enable_reg_pp0_iter34 == 1'b0) & (ap_enable_reg_pp0_iter33 == 1'b0) & (ap_enable_reg_pp0_iter32 == 1'b0) & (ap_enable_reg_pp0_iter31 == 1'b0) & (ap_enable_reg_pp0_iter30 == 1'b0) & (ap_enable_reg_pp0_iter29 == 1'b0) & (ap_enable_reg_pp0_iter28 == 1'b0) & (ap_enable_reg_pp0_iter27 == 1'b0))) begin - ap_idle_pp0 = 1'b1; - end else begin - ap_idle_pp0 = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_ready_int = 1'b1; - end else begin - ap_ready_int = 1'b0; - end -end - -always @ (*) begin - if (((ap_loop_init == 1'b1) & (1'b0 == ap_block_pp0_stage0) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_sig_allocacmp_i_4_load = 31'd0; - end else begin - ap_sig_allocacmp_i_4_load = i_4_fu_132; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001_ignoreCallOp97) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - grp_HEAT3D_stencil_kernel_fu_223_ap_ce = 1'b1; - end else begin - grp_HEAT3D_stencil_kernel_fu_223_ap_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001_ignoreCallOp108) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - grp_HEAT3D_stencil_kernel_fu_234_ap_ce = 1'b1; - end else begin - grp_HEAT3D_stencil_kernel_fu_234_ap_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001_ignoreCallOp119) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - grp_HEAT3D_stencil_kernel_fu_245_ap_ce = 1'b1; - end else begin - grp_HEAT3D_stencil_kernel_fu_245_ap_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001_ignoreCallOp130) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - grp_HEAT3D_stencil_kernel_fu_256_ap_ce = 1'b1; - end else begin - grp_HEAT3D_stencil_kernel_fu_256_ap_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001_ignoreCallOp141) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - grp_HEAT3D_stencil_kernel_fu_267_ap_ce = 1'b1; - end else begin - grp_HEAT3D_stencil_kernel_fu_267_ap_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001_ignoreCallOp152) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - grp_HEAT3D_stencil_kernel_fu_278_ap_ce = 1'b1; - end else begin - grp_HEAT3D_stencil_kernel_fu_278_ap_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001_ignoreCallOp163) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - grp_HEAT3D_stencil_kernel_fu_289_ap_ce = 1'b1; - end else begin - grp_HEAT3D_stencil_kernel_fu_289_ap_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001_ignoreCallOp174) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - grp_HEAT3D_stencil_kernel_fu_300_ap_ce = 1'b1; - end else begin - grp_HEAT3D_stencil_kernel_fu_300_ap_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001_ignoreCallOp185) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - grp_HEAT3D_stencil_kernel_fu_311_ap_ce = 1'b1; - end else begin - grp_HEAT3D_stencil_kernel_fu_311_ap_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001_ignoreCallOp196) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - grp_HEAT3D_stencil_kernel_fu_322_ap_ce = 1'b1; - end else begin - grp_HEAT3D_stencil_kernel_fu_322_ap_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001_ignoreCallOp207) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - grp_HEAT3D_stencil_kernel_fu_333_ap_ce = 1'b1; - end else begin - grp_HEAT3D_stencil_kernel_fu_333_ap_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001_ignoreCallOp218) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - grp_HEAT3D_stencil_kernel_fu_344_ap_ce = 1'b1; - end else begin - grp_HEAT3D_stencil_kernel_fu_344_ap_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001_ignoreCallOp229) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - grp_HEAT3D_stencil_kernel_fu_355_ap_ce = 1'b1; - end else begin - grp_HEAT3D_stencil_kernel_fu_355_ap_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001_ignoreCallOp240) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - grp_HEAT3D_stencil_kernel_fu_366_ap_ce = 1'b1; - end else begin - grp_HEAT3D_stencil_kernel_fu_366_ap_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001_ignoreCallOp251) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - grp_HEAT3D_stencil_kernel_fu_377_ap_ce = 1'b1; - end else begin - grp_HEAT3D_stencil_kernel_fu_377_ap_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001_ignoreCallOp258) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - grp_HEAT3D_stencil_kernel_fu_388_ap_ce = 1'b1; - end else begin - grp_HEAT3D_stencil_kernel_fu_388_ap_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_s_blk_n = in_s_empty_n; - end else begin - in_s_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_s_read = 1'b1; - end else begin - in_s_read = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_stream_2_to_15_i_blk_n = in_stream_2_to_15_empty_n; - end else begin - in_stream_2_to_15_i_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_stream_2_to_15_o_blk_n = in_stream_2_to_15_full_n; - end else begin - in_stream_2_to_15_o_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_stream_2_to_15_read = 1'b1; - end else begin - in_stream_2_to_15_read = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_stream_2_to_15_write = 1'b1; - end else begin - in_stream_2_to_15_write = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_stream_m15_to_m2_i_blk_n = in_stream_m15_to_m2_empty_n; - end else begin - in_stream_m15_to_m2_i_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_stream_m15_to_m2_o_blk_n = in_stream_m15_to_m2_full_n; - end else begin - in_stream_m15_to_m2_o_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_stream_m15_to_m2_read = 1'b1; - end else begin - in_stream_m15_to_m2_read = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_stream_m15_to_m2_write = 1'b1; - end else begin - in_stream_m15_to_m2_write = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter45 == 1'b1))) begin - out_r_blk_n = out_r_full_n; - end else begin - out_r_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter45 == 1'b1))) begin - out_r_write = 1'b1; - end else begin - out_r_write = 1'b0; - end -end - -always @ (*) begin - case (ap_CS_fsm) - ap_ST_fsm_pp0_stage0 : begin - ap_NS_fsm = ap_ST_fsm_pp0_stage0; - end - default : begin - ap_NS_fsm = 'bx; - end - endcase -end - -assign add_ln73_1_fu_469_p2 = (ap_sig_allocacmp_i_4_load + 31'd1); - -assign ap_CS_fsm_pp0_stage0 = ap_CS_fsm[32'd0]; - -assign ap_block_pp0_stage0 = ~(1'b1 == 1'b1); - -always @ (*) begin - ap_block_pp0_stage0_01001 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001_ignoreCallOp108 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001_ignoreCallOp119 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001_ignoreCallOp130 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001_ignoreCallOp141 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001_ignoreCallOp152 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001_ignoreCallOp163 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001_ignoreCallOp174 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001_ignoreCallOp185 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001_ignoreCallOp196 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001_ignoreCallOp207 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001_ignoreCallOp218 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001_ignoreCallOp229 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001_ignoreCallOp240 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001_ignoreCallOp251 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001_ignoreCallOp258 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001_ignoreCallOp97 = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -always @ (*) begin - ap_block_pp0_stage0_subdone = (((out_r_full_n == 1'b0) & (ap_enable_reg_pp0_iter45 == 1'b1)) | ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)))); -end - -assign ap_block_state10_pp0_stage0_iter9 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28_ignore_call93 = ~(1'b1 == 1'b1); - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1_ignore_call105 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1_ignore_call117 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1_ignore_call129 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1_ignore_call141 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1_ignore_call153 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1_ignore_call165 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1_ignore_call177 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1_ignore_call189 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1_ignore_call197 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1_ignore_call21 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1_ignore_call33 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1_ignore_call45 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1_ignore_call57 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1_ignore_call69 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1_ignore_call81 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1_ignore_call93 = ((in_s_empty_n == 1'b0) | (in_stream_2_to_15_full_n == 1'b0) | (in_stream_2_to_15_empty_n == 1'b0) | (in_stream_m15_to_m2_full_n == 1'b0) | (in_stream_m15_to_m2_empty_n == 1'b0)); -end - -assign ap_block_state30_pp0_stage0_iter29 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state44_pp0_stage0_iter43_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state45_pp0_stage0_iter44_ignore_call93 = ~(1'b1 == 1'b1); - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45 = (out_r_full_n == 1'b0); -end - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45_ignore_call105 = (out_r_full_n == 1'b0); -end - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45_ignore_call117 = (out_r_full_n == 1'b0); -end - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45_ignore_call129 = (out_r_full_n == 1'b0); -end - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45_ignore_call141 = (out_r_full_n == 1'b0); -end - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45_ignore_call153 = (out_r_full_n == 1'b0); -end - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45_ignore_call165 = (out_r_full_n == 1'b0); -end - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45_ignore_call177 = (out_r_full_n == 1'b0); -end - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45_ignore_call189 = (out_r_full_n == 1'b0); -end - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45_ignore_call197 = (out_r_full_n == 1'b0); -end - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45_ignore_call21 = (out_r_full_n == 1'b0); -end - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45_ignore_call33 = (out_r_full_n == 1'b0); -end - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45_ignore_call45 = (out_r_full_n == 1'b0); -end - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45_ignore_call57 = (out_r_full_n == 1'b0); -end - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45_ignore_call69 = (out_r_full_n == 1'b0); -end - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45_ignore_call81 = (out_r_full_n == 1'b0); -end - -always @ (*) begin - ap_block_state46_pp0_stage0_iter45_ignore_call93 = (out_r_full_n == 1'b0); -end - -assign ap_block_state4_pp0_stage0_iter3 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8_ignore_call105 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8_ignore_call117 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8_ignore_call129 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8_ignore_call141 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8_ignore_call153 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8_ignore_call165 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8_ignore_call177 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8_ignore_call189 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8_ignore_call197 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8_ignore_call21 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8_ignore_call33 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8_ignore_call45 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8_ignore_call57 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8_ignore_call69 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8_ignore_call81 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8_ignore_call93 = ~(1'b1 == 1'b1); - -assign ap_enable_pp0 = (ap_idle_pp0 ^ 1'b1); - -assign ap_enable_reg_pp0_iter0 = ap_start_int; - -assign ap_loop_exit_ready = ap_condition_exit_pp0_iter0_stage0; - -assign bitcast_ln101_fu_573_p1 = temp_in_0_1_0_15_fu_569_p1; - -assign bitcast_ln103_10_fu_1761_p1 = result_10_reg_2346; - -assign bitcast_ln103_11_fu_1764_p1 = result_11_reg_2351; - -assign bitcast_ln103_12_fu_1767_p1 = result_12_reg_2356; - -assign bitcast_ln103_13_fu_1770_p1 = result_13_reg_2361; - -assign bitcast_ln103_14_fu_1773_p1 = result_14_reg_2366; - -assign bitcast_ln103_15_fu_1776_p1 = result_15_reg_2371; - -assign bitcast_ln103_1_fu_1734_p1 = result_1_reg_2301; - -assign bitcast_ln103_2_fu_1737_p1 = result_2_reg_2306; - -assign bitcast_ln103_3_fu_1740_p1 = result_3_reg_2311; - -assign bitcast_ln103_4_fu_1743_p1 = result_4_reg_2316; - -assign bitcast_ln103_5_fu_1746_p1 = result_5_reg_2321; - -assign bitcast_ln103_6_fu_1749_p1 = result_6_reg_2326; - -assign bitcast_ln103_7_fu_1752_p1 = result_7_reg_2331; - -assign bitcast_ln103_8_fu_1755_p1 = result_8_reg_2336; - -assign bitcast_ln103_9_fu_1758_p1 = result_9_reg_2341; - -assign bitcast_ln103_fu_1731_p1 = result_reg_2296; - -assign bitcast_ln91_10_fu_1297_p1 = temp_in_0_0_1_18_fu_1287_p4; - -assign bitcast_ln91_11_fu_1374_p1 = temp_in_0_0_1_19_fu_1364_p4; - -assign bitcast_ln91_12_fu_1451_p1 = temp_in_0_0_1_20_fu_1441_p4; - -assign bitcast_ln91_13_fu_1528_p1 = temp_in_0_0_1_21_fu_1518_p4; - -assign bitcast_ln91_14_fu_1605_p1 = temp_in_0_0_1_22_fu_1595_p4; - -assign bitcast_ln91_1_fu_604_p1 = temp_in_0_0_1_9_fu_594_p4; - -assign bitcast_ln91_2_fu_681_p1 = temp_in_0_0_1_10_fu_671_p4; - -assign bitcast_ln91_3_fu_758_p1 = temp_in_0_0_1_11_fu_748_p4; - -assign bitcast_ln91_4_fu_835_p1 = temp_in_0_0_1_12_fu_825_p4; - -assign bitcast_ln91_5_fu_912_p1 = temp_in_0_0_1_13_fu_902_p4; - -assign bitcast_ln91_6_fu_989_p1 = temp_in_0_0_1_14_fu_979_p4; - -assign bitcast_ln91_7_fu_1066_p1 = temp_in_0_0_1_15_fu_1056_p4; - -assign bitcast_ln91_8_fu_1143_p1 = temp_in_0_0_1_16_fu_1133_p4; - -assign bitcast_ln91_9_fu_1220_p1 = temp_in_0_0_1_17_fu_1210_p4; - -assign bitcast_ln91_fu_518_p1 = temp_in_0_0_1_fu_508_p4; - -assign bitcast_ln93_fu_535_p1 = temp_in_0_0_m1_fu_525_p4; - -assign bitcast_ln95_fu_545_p1 = temp_in_0_0_0_1_fu_541_p1; - -assign grp_HEAT3D_stencil_kernel_fu_223_in_0_m1_0 = temp_in_0_m1_0_fu_551_p1; - -assign grp_HEAT3D_stencil_kernel_fu_223_in_1_0_0 = temp_in_1_0_0_fu_499_p1; - -assign grp_HEAT3D_stencil_kernel_fu_223_in_m1_0_0 = temp_in_m1_0_0_fu_560_p1; - -assign grp_HEAT3D_stencil_kernel_fu_234_in_0_1_0 = temp_in_0_1_0_1_fu_641_p4; - -assign grp_HEAT3D_stencil_kernel_fu_234_in_0_m1_0 = temp_in_0_m1_0_1_fu_611_p4; - -assign grp_HEAT3D_stencil_kernel_fu_234_in_1_0_0 = temp_in_1_0_0_1_fu_579_p4; - -assign grp_HEAT3D_stencil_kernel_fu_234_in_m1_0_0 = temp_in_m1_0_0_1_fu_626_p4; - -assign grp_HEAT3D_stencil_kernel_fu_245_in_0_1_0 = temp_in_0_1_0_2_fu_718_p4; - -assign grp_HEAT3D_stencil_kernel_fu_245_in_0_m1_0 = temp_in_0_m1_0_2_fu_688_p4; - -assign grp_HEAT3D_stencil_kernel_fu_245_in_1_0_0 = temp_in_1_0_0_2_fu_656_p4; - -assign grp_HEAT3D_stencil_kernel_fu_245_in_m1_0_0 = temp_in_m1_0_0_2_fu_703_p4; - -assign grp_HEAT3D_stencil_kernel_fu_256_in_0_1_0 = temp_in_0_1_0_3_fu_795_p4; - -assign grp_HEAT3D_stencil_kernel_fu_256_in_0_m1_0 = temp_in_0_m1_0_3_fu_765_p4; - -assign grp_HEAT3D_stencil_kernel_fu_256_in_1_0_0 = temp_in_1_0_0_3_fu_733_p4; - -assign grp_HEAT3D_stencil_kernel_fu_256_in_m1_0_0 = temp_in_m1_0_0_3_fu_780_p4; - -assign grp_HEAT3D_stencil_kernel_fu_267_in_0_1_0 = temp_in_0_1_0_4_fu_872_p4; - -assign grp_HEAT3D_stencil_kernel_fu_267_in_0_m1_0 = temp_in_0_m1_0_4_fu_842_p4; - -assign grp_HEAT3D_stencil_kernel_fu_267_in_1_0_0 = temp_in_1_0_0_4_fu_810_p4; - -assign grp_HEAT3D_stencil_kernel_fu_267_in_m1_0_0 = temp_in_m1_0_0_4_fu_857_p4; - -assign grp_HEAT3D_stencil_kernel_fu_278_in_0_1_0 = temp_in_0_1_0_5_fu_949_p4; - -assign grp_HEAT3D_stencil_kernel_fu_278_in_0_m1_0 = temp_in_0_m1_0_5_fu_919_p4; - -assign grp_HEAT3D_stencil_kernel_fu_278_in_1_0_0 = temp_in_1_0_0_5_fu_887_p4; - -assign grp_HEAT3D_stencil_kernel_fu_278_in_m1_0_0 = temp_in_m1_0_0_5_fu_934_p4; - -assign grp_HEAT3D_stencil_kernel_fu_289_in_0_1_0 = temp_in_0_1_0_6_fu_1026_p4; - -assign grp_HEAT3D_stencil_kernel_fu_289_in_0_m1_0 = temp_in_0_m1_0_6_fu_996_p4; - -assign grp_HEAT3D_stencil_kernel_fu_289_in_1_0_0 = temp_in_1_0_0_6_fu_964_p4; - -assign grp_HEAT3D_stencil_kernel_fu_289_in_m1_0_0 = temp_in_m1_0_0_6_fu_1011_p4; - -assign grp_HEAT3D_stencil_kernel_fu_300_in_0_1_0 = temp_in_0_1_0_7_fu_1103_p4; - -assign grp_HEAT3D_stencil_kernel_fu_300_in_0_m1_0 = temp_in_0_m1_0_7_fu_1073_p4; - -assign grp_HEAT3D_stencil_kernel_fu_300_in_1_0_0 = temp_in_1_0_0_7_fu_1041_p4; - -assign grp_HEAT3D_stencil_kernel_fu_300_in_m1_0_0 = temp_in_m1_0_0_7_fu_1088_p4; - -assign grp_HEAT3D_stencil_kernel_fu_311_in_0_1_0 = temp_in_0_1_0_8_fu_1180_p4; - -assign grp_HEAT3D_stencil_kernel_fu_311_in_0_m1_0 = temp_in_0_m1_0_8_fu_1150_p4; - -assign grp_HEAT3D_stencil_kernel_fu_311_in_1_0_0 = temp_in_1_0_0_8_fu_1118_p4; - -assign grp_HEAT3D_stencil_kernel_fu_311_in_m1_0_0 = temp_in_m1_0_0_8_fu_1165_p4; - -assign grp_HEAT3D_stencil_kernel_fu_322_in_0_1_0 = temp_in_0_1_0_9_fu_1257_p4; - -assign grp_HEAT3D_stencil_kernel_fu_322_in_0_m1_0 = temp_in_0_m1_0_9_fu_1227_p4; - -assign grp_HEAT3D_stencil_kernel_fu_322_in_1_0_0 = temp_in_1_0_0_9_fu_1195_p4; - -assign grp_HEAT3D_stencil_kernel_fu_322_in_m1_0_0 = temp_in_m1_0_0_9_fu_1242_p4; - -assign grp_HEAT3D_stencil_kernel_fu_333_in_0_1_0 = temp_in_0_1_0_10_fu_1334_p4; - -assign grp_HEAT3D_stencil_kernel_fu_333_in_0_m1_0 = temp_in_0_m1_0_10_fu_1304_p4; - -assign grp_HEAT3D_stencil_kernel_fu_333_in_1_0_0 = temp_in_1_0_0_10_fu_1272_p4; - -assign grp_HEAT3D_stencil_kernel_fu_333_in_m1_0_0 = temp_in_m1_0_0_10_fu_1319_p4; - -assign grp_HEAT3D_stencil_kernel_fu_344_in_0_1_0 = temp_in_0_1_0_11_fu_1411_p4; - -assign grp_HEAT3D_stencil_kernel_fu_344_in_0_m1_0 = temp_in_0_m1_0_11_fu_1381_p4; - -assign grp_HEAT3D_stencil_kernel_fu_344_in_1_0_0 = temp_in_1_0_0_11_fu_1349_p4; - -assign grp_HEAT3D_stencil_kernel_fu_344_in_m1_0_0 = temp_in_m1_0_0_11_fu_1396_p4; - -assign grp_HEAT3D_stencil_kernel_fu_355_in_0_1_0 = temp_in_0_1_0_12_fu_1488_p4; - -assign grp_HEAT3D_stencil_kernel_fu_355_in_0_m1_0 = temp_in_0_m1_0_12_fu_1458_p4; - -assign grp_HEAT3D_stencil_kernel_fu_355_in_1_0_0 = temp_in_1_0_0_12_fu_1426_p4; - -assign grp_HEAT3D_stencil_kernel_fu_355_in_m1_0_0 = temp_in_m1_0_0_12_fu_1473_p4; - -assign grp_HEAT3D_stencil_kernel_fu_366_in_0_1_0 = temp_in_0_1_0_13_fu_1565_p4; - -assign grp_HEAT3D_stencil_kernel_fu_366_in_0_m1_0 = temp_in_0_m1_0_13_fu_1535_p4; - -assign grp_HEAT3D_stencil_kernel_fu_366_in_1_0_0 = temp_in_1_0_0_13_fu_1503_p4; - -assign grp_HEAT3D_stencil_kernel_fu_366_in_m1_0_0 = temp_in_m1_0_0_13_fu_1550_p4; - -assign grp_HEAT3D_stencil_kernel_fu_377_in_0_1_0 = temp_in_0_1_0_14_fu_1641_p4; - -assign grp_HEAT3D_stencil_kernel_fu_377_in_0_m1_0 = temp_in_0_m1_0_14_fu_1611_p4; - -assign grp_HEAT3D_stencil_kernel_fu_377_in_1_0_0 = temp_in_1_0_0_14_fu_1580_p4; - -assign grp_HEAT3D_stencil_kernel_fu_377_in_m1_0_0 = temp_in_m1_0_0_14_fu_1626_p4; - -assign grp_HEAT3D_stencil_kernel_fu_388_in_0_1_0 = temp_in_0_1_0_fu_1686_p4; - -assign grp_HEAT3D_stencil_kernel_fu_388_in_1_0_0 = temp_in_1_0_0_15_fu_1656_p4; - -assign grp_HEAT3D_stencil_kernel_fu_388_in_m1_0_0 = temp_in_m1_0_0_15_fu_1671_p4; - -assign icmp_ln73_fu_463_p2 = (($signed(zext_ln73_fu_459_p1) < $signed(add_ln73)) ? 1'b1 : 1'b0); - -assign in_block_16_V_1_HLS_REG_ap_uint_512_s_fu_421_in_r = in_s_dout[511:0]; - -assign in_stream_2_to_15_din = p_0_HLS_REG_ap_uint_512_s_fu_415_ap_return; - -assign in_stream_m15_to_m2_din = p_1_HLS_REG_ap_uint_512_s_fu_399_ap_return; - -assign out_r_din = {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{1'd0}, {bitcast_ln103_15_fu_1776_p1}}}, {bitcast_ln103_14_fu_1773_p1}}}, {bitcast_ln103_13_fu_1770_p1}}}, {bitcast_ln103_12_fu_1767_p1}}}, {bitcast_ln103_11_fu_1764_p1}}}, {bitcast_ln103_10_fu_1761_p1}}}, {bitcast_ln103_9_fu_1758_p1}}}, {bitcast_ln103_8_fu_1755_p1}}}, {bitcast_ln103_7_fu_1752_p1}}}, {bitcast_ln103_6_fu_1749_p1}}}, {bitcast_ln103_5_fu_1746_p1}}}, {bitcast_ln103_4_fu_1743_p1}}}, {bitcast_ln103_3_fu_1740_p1}}}, {bitcast_ln103_2_fu_1737_p1}}}, {bitcast_ln103_1_fu_1734_p1}}}, {bitcast_ln103_fu_1731_p1}}; - -assign temp_in_0_0_0_1_fu_541_p1 = p_Val2_2_fu_136[31:0]; - -assign temp_in_0_0_1_10_fu_671_p4 = {{p_Val2_2_fu_136[127:96]}}; - -assign temp_in_0_0_1_11_fu_748_p4 = {{p_Val2_2_fu_136[159:128]}}; - -assign temp_in_0_0_1_12_fu_825_p4 = {{p_Val2_2_fu_136[191:160]}}; - -assign temp_in_0_0_1_13_fu_902_p4 = {{p_Val2_2_fu_136[223:192]}}; - -assign temp_in_0_0_1_14_fu_979_p4 = {{p_Val2_2_fu_136[255:224]}}; - -assign temp_in_0_0_1_15_fu_1056_p4 = {{p_Val2_2_fu_136[287:256]}}; - -assign temp_in_0_0_1_16_fu_1133_p4 = {{p_Val2_2_fu_136[319:288]}}; - -assign temp_in_0_0_1_17_fu_1210_p4 = {{p_Val2_2_fu_136[351:320]}}; - -assign temp_in_0_0_1_18_fu_1287_p4 = {{p_Val2_2_fu_136[383:352]}}; - -assign temp_in_0_0_1_19_fu_1364_p4 = {{p_Val2_2_fu_136[415:384]}}; - -assign temp_in_0_0_1_20_fu_1441_p4 = {{p_Val2_2_fu_136[447:416]}}; - -assign temp_in_0_0_1_21_fu_1518_p4 = {{p_Val2_2_fu_136[479:448]}}; - -assign temp_in_0_0_1_22_fu_1595_p4 = {{p_Val2_2_fu_136[511:480]}}; - -assign temp_in_0_0_1_9_fu_594_p4 = {{p_Val2_2_fu_136[95:64]}}; - -assign temp_in_0_0_1_fu_508_p4 = {{p_Val2_2_fu_136[63:32]}}; - -assign temp_in_0_0_m1_fu_525_p4 = {{p_Val2_3_fu_140[511:480]}}; - -assign temp_in_0_1_0_10_fu_1334_p4 = {{p_Val2_4_fu_144[351:320]}}; - -assign temp_in_0_1_0_11_fu_1411_p4 = {{p_Val2_4_fu_144[383:352]}}; - -assign temp_in_0_1_0_12_fu_1488_p4 = {{p_Val2_4_fu_144[415:384]}}; - -assign temp_in_0_1_0_13_fu_1565_p4 = {{p_Val2_4_fu_144[447:416]}}; - -assign temp_in_0_1_0_14_fu_1641_p4 = {{p_Val2_4_fu_144[479:448]}}; - -assign temp_in_0_1_0_15_fu_569_p1 = p_Val2_4_fu_144[31:0]; - -assign temp_in_0_1_0_1_fu_641_p4 = {{p_Val2_4_fu_144[63:32]}}; - -assign temp_in_0_1_0_2_fu_718_p4 = {{p_Val2_4_fu_144[95:64]}}; - -assign temp_in_0_1_0_3_fu_795_p4 = {{p_Val2_4_fu_144[127:96]}}; - -assign temp_in_0_1_0_4_fu_872_p4 = {{p_Val2_4_fu_144[159:128]}}; - -assign temp_in_0_1_0_5_fu_949_p4 = {{p_Val2_4_fu_144[191:160]}}; - -assign temp_in_0_1_0_6_fu_1026_p4 = {{p_Val2_4_fu_144[223:192]}}; - -assign temp_in_0_1_0_7_fu_1103_p4 = {{p_Val2_4_fu_144[255:224]}}; - -assign temp_in_0_1_0_8_fu_1180_p4 = {{p_Val2_4_fu_144[287:256]}}; - -assign temp_in_0_1_0_9_fu_1257_p4 = {{p_Val2_4_fu_144[319:288]}}; - -assign temp_in_0_1_0_fu_1686_p4 = {{p_Val2_4_fu_144[511:480]}}; - -assign temp_in_0_m1_0_10_fu_1304_p4 = {{p_Val2_3_fu_140[351:320]}}; - -assign temp_in_0_m1_0_11_fu_1381_p4 = {{p_Val2_3_fu_140[383:352]}}; - -assign temp_in_0_m1_0_12_fu_1458_p4 = {{p_Val2_3_fu_140[415:384]}}; - -assign temp_in_0_m1_0_13_fu_1535_p4 = {{p_Val2_3_fu_140[447:416]}}; - -assign temp_in_0_m1_0_14_fu_1611_p4 = {{p_Val2_3_fu_140[479:448]}}; - -assign temp_in_0_m1_0_1_fu_611_p4 = {{p_Val2_3_fu_140[63:32]}}; - -assign temp_in_0_m1_0_2_fu_688_p4 = {{p_Val2_3_fu_140[95:64]}}; - -assign temp_in_0_m1_0_3_fu_765_p4 = {{p_Val2_3_fu_140[127:96]}}; - -assign temp_in_0_m1_0_4_fu_842_p4 = {{p_Val2_3_fu_140[159:128]}}; - -assign temp_in_0_m1_0_5_fu_919_p4 = {{p_Val2_3_fu_140[191:160]}}; - -assign temp_in_0_m1_0_6_fu_996_p4 = {{p_Val2_3_fu_140[223:192]}}; - -assign temp_in_0_m1_0_7_fu_1073_p4 = {{p_Val2_3_fu_140[255:224]}}; - -assign temp_in_0_m1_0_8_fu_1150_p4 = {{p_Val2_3_fu_140[287:256]}}; - -assign temp_in_0_m1_0_9_fu_1227_p4 = {{p_Val2_3_fu_140[319:288]}}; - -assign temp_in_0_m1_0_fu_551_p1 = p_Val2_3_fu_140[31:0]; - -assign temp_in_1_0_0_10_fu_1272_p4 = {{p_Val2_1_fu_128[351:320]}}; - -assign temp_in_1_0_0_11_fu_1349_p4 = {{p_Val2_1_fu_128[383:352]}}; - -assign temp_in_1_0_0_12_fu_1426_p4 = {{p_Val2_1_fu_128[415:384]}}; - -assign temp_in_1_0_0_13_fu_1503_p4 = {{p_Val2_1_fu_128[447:416]}}; - -assign temp_in_1_0_0_14_fu_1580_p4 = {{p_Val2_1_fu_128[479:448]}}; - -assign temp_in_1_0_0_15_fu_1656_p4 = {{p_Val2_1_fu_128[511:480]}}; - -assign temp_in_1_0_0_1_fu_579_p4 = {{p_Val2_1_fu_128[63:32]}}; - -assign temp_in_1_0_0_2_fu_656_p4 = {{p_Val2_1_fu_128[95:64]}}; - -assign temp_in_1_0_0_3_fu_733_p4 = {{p_Val2_1_fu_128[127:96]}}; - -assign temp_in_1_0_0_4_fu_810_p4 = {{p_Val2_1_fu_128[159:128]}}; - -assign temp_in_1_0_0_5_fu_887_p4 = {{p_Val2_1_fu_128[191:160]}}; - -assign temp_in_1_0_0_6_fu_964_p4 = {{p_Val2_1_fu_128[223:192]}}; - -assign temp_in_1_0_0_7_fu_1041_p4 = {{p_Val2_1_fu_128[255:224]}}; - -assign temp_in_1_0_0_8_fu_1118_p4 = {{p_Val2_1_fu_128[287:256]}}; - -assign temp_in_1_0_0_9_fu_1195_p4 = {{p_Val2_1_fu_128[319:288]}}; - -assign temp_in_1_0_0_fu_499_p1 = p_Val2_1_fu_128[31:0]; - -assign temp_in_m1_0_0_10_fu_1319_p4 = {{p_Val2_s_fu_124[351:320]}}; - -assign temp_in_m1_0_0_11_fu_1396_p4 = {{p_Val2_s_fu_124[383:352]}}; - -assign temp_in_m1_0_0_12_fu_1473_p4 = {{p_Val2_s_fu_124[415:384]}}; - -assign temp_in_m1_0_0_13_fu_1550_p4 = {{p_Val2_s_fu_124[447:416]}}; - -assign temp_in_m1_0_0_14_fu_1626_p4 = {{p_Val2_s_fu_124[479:448]}}; - -assign temp_in_m1_0_0_15_fu_1671_p4 = {{p_Val2_s_fu_124[511:480]}}; - -assign temp_in_m1_0_0_1_fu_626_p4 = {{p_Val2_s_fu_124[63:32]}}; - -assign temp_in_m1_0_0_2_fu_703_p4 = {{p_Val2_s_fu_124[95:64]}}; - -assign temp_in_m1_0_0_3_fu_780_p4 = {{p_Val2_s_fu_124[127:96]}}; - -assign temp_in_m1_0_0_4_fu_857_p4 = {{p_Val2_s_fu_124[159:128]}}; - -assign temp_in_m1_0_0_5_fu_934_p4 = {{p_Val2_s_fu_124[191:160]}}; - -assign temp_in_m1_0_0_6_fu_1011_p4 = {{p_Val2_s_fu_124[223:192]}}; - -assign temp_in_m1_0_0_7_fu_1088_p4 = {{p_Val2_s_fu_124[255:224]}}; - -assign temp_in_m1_0_0_8_fu_1165_p4 = {{p_Val2_s_fu_124[287:256]}}; - -assign temp_in_m1_0_0_9_fu_1242_p4 = {{p_Val2_s_fu_124[319:288]}}; - -assign temp_in_m1_0_0_fu_560_p1 = p_Val2_s_fu_124[31:0]; - -assign zext_ln73_fu_459_p1 = ap_sig_allocacmp_i_4_load; - -endmodule //HEAT3D_HEAT3D_Pipeline_MAJOR_LOOP diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_116_3.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_116_3.v deleted file mode 100644 index 30e9826e..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_116_3.v +++ /dev/null @@ -1,231 +0,0 @@ -// ============================================================== -// RTL generated by Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Version: 2022.2 -// Copyright (C) Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// -// =========================================================== - -`timescale 1 ns / 1 ps - -module HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_116_3 ( - ap_clk, - ap_rst, - ap_start, - ap_done, - ap_idle, - ap_ready, - in_stream_m15_to_m2_dout, - in_stream_m15_to_m2_empty_n, - in_stream_m15_to_m2_read -); - -parameter ap_ST_fsm_pp0_stage0 = 1'd1; - -input ap_clk; -input ap_rst; -input ap_start; -output ap_done; -output ap_idle; -output ap_ready; -input [511:0] in_stream_m15_to_m2_dout; -input in_stream_m15_to_m2_empty_n; -output in_stream_m15_to_m2_read; - -reg ap_idle; -reg in_stream_m15_to_m2_read; - -(* fsm_encoding = "none" *) reg [0:0] ap_CS_fsm; -wire ap_CS_fsm_pp0_stage0; -wire ap_enable_reg_pp0_iter0; -reg ap_enable_reg_pp0_iter1; -reg ap_idle_pp0; -wire ap_block_state1_pp0_stage0_iter0; -reg ap_block_state2_pp0_stage0_iter1; -reg ap_block_pp0_stage0_subdone; -wire [0:0] icmp_ln116_fu_50_p2; -reg ap_condition_exit_pp0_iter0_stage0; -wire ap_loop_exit_ready; -reg ap_ready_int; -reg in_stream_m15_to_m2_blk_n; -wire ap_block_pp0_stage0; -reg [3:0] i_5_fu_32; -wire [3:0] i_7_fu_56_p2; -wire ap_loop_init; -reg ap_block_pp0_stage0_11001; -reg [3:0] ap_sig_allocacmp_i; -reg ap_done_reg; -wire ap_continue_int; -reg ap_done_int; -reg [0:0] ap_NS_fsm; -wire ap_enable_pp0; -wire ap_start_int; -wire ap_ce_reg; - -// power-on initialization -initial begin -#0 ap_CS_fsm = 1'd1; -#0 ap_enable_reg_pp0_iter1 = 1'b0; -#0 ap_done_reg = 1'b0; -end - -HEAT3D_flow_control_loop_pipe_sequential_init flow_control_loop_pipe_sequential_init_U( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .ap_start(ap_start), - .ap_ready(ap_ready), - .ap_done(ap_done), - .ap_start_int(ap_start_int), - .ap_loop_init(ap_loop_init), - .ap_ready_int(ap_ready_int), - .ap_loop_exit_ready(ap_condition_exit_pp0_iter0_stage0), - .ap_loop_exit_done(ap_done_int), - .ap_continue_int(ap_continue_int), - .ap_done_int(ap_done_int) -); - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_CS_fsm <= ap_ST_fsm_pp0_stage0; - end else begin - ap_CS_fsm <= ap_NS_fsm; - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_done_reg <= 1'b0; - end else begin - if ((ap_continue_int == 1'b1)) begin - ap_done_reg <= 1'b0; - end else if (((ap_loop_exit_ready == 1'b1) & (1'b0 == ap_block_pp0_stage0_subdone) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_done_reg <= 1'b1; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter1 <= 1'b0; - end else begin - if ((1'b1 == ap_condition_exit_pp0_iter0_stage0)) begin - ap_enable_reg_pp0_iter1 <= 1'b0; - end else if (((1'b0 == ap_block_pp0_stage0_subdone) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_enable_reg_pp0_iter1 <= ap_start_int; - end - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - if (((icmp_ln116_fu_50_p2 == 1'd0) & (ap_enable_reg_pp0_iter0 == 1'b1))) begin - i_5_fu_32 <= i_7_fu_56_p2; - end else if ((ap_loop_init == 1'b1)) begin - i_5_fu_32 <= 4'd0; - end - end -end - -always @ (*) begin - if (((icmp_ln116_fu_50_p2 == 1'd1) & (1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_condition_exit_pp0_iter0_stage0 = 1'b1; - end else begin - ap_condition_exit_pp0_iter0_stage0 = 1'b0; - end -end - -always @ (*) begin - if (((ap_loop_exit_ready == 1'b1) & (1'b0 == ap_block_pp0_stage0_subdone) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_done_int = 1'b1; - end else begin - ap_done_int = ap_done_reg; - end -end - -always @ (*) begin - if (((ap_idle_pp0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (ap_start_int == 1'b0))) begin - ap_idle = 1'b1; - end else begin - ap_idle = 1'b0; - end -end - -always @ (*) begin - if (((ap_enable_reg_pp0_iter1 == 1'b0) & (ap_enable_reg_pp0_iter0 == 1'b0))) begin - ap_idle_pp0 = 1'b1; - end else begin - ap_idle_pp0 = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_ready_int = 1'b1; - end else begin - ap_ready_int = 1'b0; - end -end - -always @ (*) begin - if (((ap_loop_init == 1'b1) & (1'b0 == ap_block_pp0_stage0) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_sig_allocacmp_i = 4'd0; - end else begin - ap_sig_allocacmp_i = i_5_fu_32; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_stream_m15_to_m2_blk_n = in_stream_m15_to_m2_empty_n; - end else begin - in_stream_m15_to_m2_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_stream_m15_to_m2_read = 1'b1; - end else begin - in_stream_m15_to_m2_read = 1'b0; - end -end - -always @ (*) begin - case (ap_CS_fsm) - ap_ST_fsm_pp0_stage0 : begin - ap_NS_fsm = ap_ST_fsm_pp0_stage0; - end - default : begin - ap_NS_fsm = 'bx; - end - endcase -end - -assign ap_CS_fsm_pp0_stage0 = ap_CS_fsm[32'd0]; - -assign ap_block_pp0_stage0 = ~(1'b1 == 1'b1); - -always @ (*) begin - ap_block_pp0_stage0_11001 = ((in_stream_m15_to_m2_empty_n == 1'b0) & (ap_enable_reg_pp0_iter1 == 1'b1)); -end - -always @ (*) begin - ap_block_pp0_stage0_subdone = ((in_stream_m15_to_m2_empty_n == 1'b0) & (ap_enable_reg_pp0_iter1 == 1'b1)); -end - -assign ap_block_state1_pp0_stage0_iter0 = ~(1'b1 == 1'b1); - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1 = (in_stream_m15_to_m2_empty_n == 1'b0); -end - -assign ap_enable_pp0 = (ap_idle_pp0 ^ 1'b1); - -assign ap_enable_reg_pp0_iter0 = ap_start_int; - -assign ap_loop_exit_ready = ap_condition_exit_pp0_iter0_stage0; - -assign i_7_fu_56_p2 = (ap_sig_allocacmp_i + 4'd1); - -assign icmp_ln116_fu_50_p2 = ((ap_sig_allocacmp_i == 4'd14) ? 1'b1 : 1'b0); - -endmodule //HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_116_3 diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_121_4.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_121_4.v deleted file mode 100644 index 2fdfd046..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_121_4.v +++ /dev/null @@ -1,231 +0,0 @@ -// ============================================================== -// RTL generated by Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Version: 2022.2 -// Copyright (C) Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// -// =========================================================== - -`timescale 1 ns / 1 ps - -module HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_121_4 ( - ap_clk, - ap_rst, - ap_start, - ap_done, - ap_idle, - ap_ready, - in_stream_2_to_15_dout, - in_stream_2_to_15_empty_n, - in_stream_2_to_15_read -); - -parameter ap_ST_fsm_pp0_stage0 = 1'd1; - -input ap_clk; -input ap_rst; -input ap_start; -output ap_done; -output ap_idle; -output ap_ready; -input [511:0] in_stream_2_to_15_dout; -input in_stream_2_to_15_empty_n; -output in_stream_2_to_15_read; - -reg ap_idle; -reg in_stream_2_to_15_read; - -(* fsm_encoding = "none" *) reg [0:0] ap_CS_fsm; -wire ap_CS_fsm_pp0_stage0; -wire ap_enable_reg_pp0_iter0; -reg ap_enable_reg_pp0_iter1; -reg ap_idle_pp0; -wire ap_block_state1_pp0_stage0_iter0; -reg ap_block_state2_pp0_stage0_iter1; -reg ap_block_pp0_stage0_subdone; -wire [0:0] icmp_ln121_fu_50_p2; -reg ap_condition_exit_pp0_iter0_stage0; -wire ap_loop_exit_ready; -reg ap_ready_int; -reg in_stream_2_to_15_blk_n; -wire ap_block_pp0_stage0; -reg [3:0] i_fu_32; -wire [3:0] i_6_fu_56_p2; -wire ap_loop_init; -reg ap_block_pp0_stage0_11001; -reg [3:0] ap_sig_allocacmp_i_5; -reg ap_done_reg; -wire ap_continue_int; -reg ap_done_int; -reg [0:0] ap_NS_fsm; -wire ap_enable_pp0; -wire ap_start_int; -wire ap_ce_reg; - -// power-on initialization -initial begin -#0 ap_CS_fsm = 1'd1; -#0 ap_enable_reg_pp0_iter1 = 1'b0; -#0 ap_done_reg = 1'b0; -end - -HEAT3D_flow_control_loop_pipe_sequential_init flow_control_loop_pipe_sequential_init_U( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .ap_start(ap_start), - .ap_ready(ap_ready), - .ap_done(ap_done), - .ap_start_int(ap_start_int), - .ap_loop_init(ap_loop_init), - .ap_ready_int(ap_ready_int), - .ap_loop_exit_ready(ap_condition_exit_pp0_iter0_stage0), - .ap_loop_exit_done(ap_done_int), - .ap_continue_int(ap_continue_int), - .ap_done_int(ap_done_int) -); - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_CS_fsm <= ap_ST_fsm_pp0_stage0; - end else begin - ap_CS_fsm <= ap_NS_fsm; - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_done_reg <= 1'b0; - end else begin - if ((ap_continue_int == 1'b1)) begin - ap_done_reg <= 1'b0; - end else if (((ap_loop_exit_ready == 1'b1) & (1'b0 == ap_block_pp0_stage0_subdone) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_done_reg <= 1'b1; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter1 <= 1'b0; - end else begin - if ((1'b1 == ap_condition_exit_pp0_iter0_stage0)) begin - ap_enable_reg_pp0_iter1 <= 1'b0; - end else if (((1'b0 == ap_block_pp0_stage0_subdone) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_enable_reg_pp0_iter1 <= ap_start_int; - end - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - if (((icmp_ln121_fu_50_p2 == 1'd0) & (ap_enable_reg_pp0_iter0 == 1'b1))) begin - i_fu_32 <= i_6_fu_56_p2; - end else if ((ap_loop_init == 1'b1)) begin - i_fu_32 <= 4'd0; - end - end -end - -always @ (*) begin - if (((icmp_ln121_fu_50_p2 == 1'd1) & (1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_condition_exit_pp0_iter0_stage0 = 1'b1; - end else begin - ap_condition_exit_pp0_iter0_stage0 = 1'b0; - end -end - -always @ (*) begin - if (((ap_loop_exit_ready == 1'b1) & (1'b0 == ap_block_pp0_stage0_subdone) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_done_int = 1'b1; - end else begin - ap_done_int = ap_done_reg; - end -end - -always @ (*) begin - if (((ap_idle_pp0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (ap_start_int == 1'b0))) begin - ap_idle = 1'b1; - end else begin - ap_idle = 1'b0; - end -end - -always @ (*) begin - if (((ap_enable_reg_pp0_iter1 == 1'b0) & (ap_enable_reg_pp0_iter0 == 1'b0))) begin - ap_idle_pp0 = 1'b1; - end else begin - ap_idle_pp0 = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_ready_int = 1'b1; - end else begin - ap_ready_int = 1'b0; - end -end - -always @ (*) begin - if (((ap_loop_init == 1'b1) & (1'b0 == ap_block_pp0_stage0) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_sig_allocacmp_i_5 = 4'd0; - end else begin - ap_sig_allocacmp_i_5 = i_fu_32; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_stream_2_to_15_blk_n = in_stream_2_to_15_empty_n; - end else begin - in_stream_2_to_15_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_stream_2_to_15_read = 1'b1; - end else begin - in_stream_2_to_15_read = 1'b0; - end -end - -always @ (*) begin - case (ap_CS_fsm) - ap_ST_fsm_pp0_stage0 : begin - ap_NS_fsm = ap_ST_fsm_pp0_stage0; - end - default : begin - ap_NS_fsm = 'bx; - end - endcase -end - -assign ap_CS_fsm_pp0_stage0 = ap_CS_fsm[32'd0]; - -assign ap_block_pp0_stage0 = ~(1'b1 == 1'b1); - -always @ (*) begin - ap_block_pp0_stage0_11001 = ((in_stream_2_to_15_empty_n == 1'b0) & (ap_enable_reg_pp0_iter1 == 1'b1)); -end - -always @ (*) begin - ap_block_pp0_stage0_subdone = ((in_stream_2_to_15_empty_n == 1'b0) & (ap_enable_reg_pp0_iter1 == 1'b1)); -end - -assign ap_block_state1_pp0_stage0_iter0 = ~(1'b1 == 1'b1); - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1 = (in_stream_2_to_15_empty_n == 1'b0); -end - -assign ap_enable_pp0 = (ap_idle_pp0 ^ 1'b1); - -assign ap_enable_reg_pp0_iter0 = ap_start_int; - -assign ap_loop_exit_ready = ap_condition_exit_pp0_iter0_stage0; - -assign i_6_fu_56_p2 = (ap_sig_allocacmp_i_5 + 4'd1); - -assign icmp_ln121_fu_50_p2 = ((ap_sig_allocacmp_i_5 == 4'd14) ? 1'b1 : 1'b0); - -endmodule //HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_121_4 diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_62_1.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_62_1.v deleted file mode 100644 index f4008adf..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_62_1.v +++ /dev/null @@ -1,262 +0,0 @@ -// ============================================================== -// RTL generated by Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Version: 2022.2 -// Copyright (C) Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// -// =========================================================== - -`timescale 1 ns / 1 ps - -module HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_62_1 ( - ap_clk, - ap_rst, - ap_start, - ap_done, - ap_idle, - ap_ready, - in_s_dout, - in_s_empty_n, - in_s_read, - in_stream_m15_to_m2_din, - in_stream_m15_to_m2_full_n, - in_stream_m15_to_m2_write -); - -parameter ap_ST_fsm_pp0_stage0 = 1'd1; - -input ap_clk; -input ap_rst; -input ap_start; -output ap_done; -output ap_idle; -output ap_ready; -input [512:0] in_s_dout; -input in_s_empty_n; -output in_s_read; -output [511:0] in_stream_m15_to_m2_din; -input in_stream_m15_to_m2_full_n; -output in_stream_m15_to_m2_write; - -reg ap_idle; -reg in_s_read; -reg in_stream_m15_to_m2_write; - -(* fsm_encoding = "none" *) reg [0:0] ap_CS_fsm; -wire ap_CS_fsm_pp0_stage0; -wire ap_enable_reg_pp0_iter0; -reg ap_enable_reg_pp0_iter1; -reg ap_idle_pp0; -wire ap_block_state1_pp0_stage0_iter0; -reg ap_block_state2_pp0_stage0_iter1; -reg ap_block_pp0_stage0_subdone; -wire [0:0] icmp_ln62_fu_61_p2; -reg ap_condition_exit_pp0_iter0_stage0; -wire ap_loop_exit_ready; -reg ap_ready_int; -reg in_s_blk_n; -wire ap_block_pp0_stage0; -reg in_stream_m15_to_m2_blk_n; -reg [3:0] i_fu_36; -wire [3:0] i_4_fu_67_p2; -wire ap_loop_init; -reg ap_block_pp0_stage0_11001; -reg [3:0] ap_sig_allocacmp_i_3; -reg ap_block_pp0_stage0_01001; -reg ap_done_reg; -wire ap_continue_int; -reg ap_done_int; -reg [0:0] ap_NS_fsm; -wire ap_enable_pp0; -wire ap_start_int; -wire ap_ce_reg; - -// power-on initialization -initial begin -#0 ap_CS_fsm = 1'd1; -#0 ap_enable_reg_pp0_iter1 = 1'b0; -#0 ap_done_reg = 1'b0; -end - -HEAT3D_flow_control_loop_pipe_sequential_init flow_control_loop_pipe_sequential_init_U( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .ap_start(ap_start), - .ap_ready(ap_ready), - .ap_done(ap_done), - .ap_start_int(ap_start_int), - .ap_loop_init(ap_loop_init), - .ap_ready_int(ap_ready_int), - .ap_loop_exit_ready(ap_condition_exit_pp0_iter0_stage0), - .ap_loop_exit_done(ap_done_int), - .ap_continue_int(ap_continue_int), - .ap_done_int(ap_done_int) -); - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_CS_fsm <= ap_ST_fsm_pp0_stage0; - end else begin - ap_CS_fsm <= ap_NS_fsm; - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_done_reg <= 1'b0; - end else begin - if ((ap_continue_int == 1'b1)) begin - ap_done_reg <= 1'b0; - end else if (((ap_loop_exit_ready == 1'b1) & (1'b0 == ap_block_pp0_stage0_subdone) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_done_reg <= 1'b1; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter1 <= 1'b0; - end else begin - if ((1'b1 == ap_condition_exit_pp0_iter0_stage0)) begin - ap_enable_reg_pp0_iter1 <= 1'b0; - end else if (((1'b0 == ap_block_pp0_stage0_subdone) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_enable_reg_pp0_iter1 <= ap_start_int; - end - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - if (((icmp_ln62_fu_61_p2 == 1'd0) & (ap_enable_reg_pp0_iter0 == 1'b1))) begin - i_fu_36 <= i_4_fu_67_p2; - end else if ((ap_loop_init == 1'b1)) begin - i_fu_36 <= 4'd1; - end - end -end - -always @ (*) begin - if (((icmp_ln62_fu_61_p2 == 1'd1) & (1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_condition_exit_pp0_iter0_stage0 = 1'b1; - end else begin - ap_condition_exit_pp0_iter0_stage0 = 1'b0; - end -end - -always @ (*) begin - if (((ap_loop_exit_ready == 1'b1) & (1'b0 == ap_block_pp0_stage0_subdone) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_done_int = 1'b1; - end else begin - ap_done_int = ap_done_reg; - end -end - -always @ (*) begin - if (((ap_idle_pp0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (ap_start_int == 1'b0))) begin - ap_idle = 1'b1; - end else begin - ap_idle = 1'b0; - end -end - -always @ (*) begin - if (((ap_enable_reg_pp0_iter1 == 1'b0) & (ap_enable_reg_pp0_iter0 == 1'b0))) begin - ap_idle_pp0 = 1'b1; - end else begin - ap_idle_pp0 = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_ready_int = 1'b1; - end else begin - ap_ready_int = 1'b0; - end -end - -always @ (*) begin - if (((ap_loop_init == 1'b1) & (1'b0 == ap_block_pp0_stage0) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_sig_allocacmp_i_3 = 4'd1; - end else begin - ap_sig_allocacmp_i_3 = i_fu_36; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_s_blk_n = in_s_empty_n; - end else begin - in_s_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_s_read = 1'b1; - end else begin - in_s_read = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_stream_m15_to_m2_blk_n = in_stream_m15_to_m2_full_n; - end else begin - in_stream_m15_to_m2_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_stream_m15_to_m2_write = 1'b1; - end else begin - in_stream_m15_to_m2_write = 1'b0; - end -end - -always @ (*) begin - case (ap_CS_fsm) - ap_ST_fsm_pp0_stage0 : begin - ap_NS_fsm = ap_ST_fsm_pp0_stage0; - end - default : begin - ap_NS_fsm = 'bx; - end - endcase -end - -assign ap_CS_fsm_pp0_stage0 = ap_CS_fsm[32'd0]; - -assign ap_block_pp0_stage0 = ~(1'b1 == 1'b1); - -always @ (*) begin - ap_block_pp0_stage0_01001 = ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_stream_m15_to_m2_full_n == 1'b0) | (in_s_empty_n == 1'b0))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001 = ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_stream_m15_to_m2_full_n == 1'b0) | (in_s_empty_n == 1'b0))); -end - -always @ (*) begin - ap_block_pp0_stage0_subdone = ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_stream_m15_to_m2_full_n == 1'b0) | (in_s_empty_n == 1'b0))); -end - -assign ap_block_state1_pp0_stage0_iter0 = ~(1'b1 == 1'b1); - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1 = ((in_stream_m15_to_m2_full_n == 1'b0) | (in_s_empty_n == 1'b0)); -end - -assign ap_enable_pp0 = (ap_idle_pp0 ^ 1'b1); - -assign ap_enable_reg_pp0_iter0 = ap_start_int; - -assign ap_loop_exit_ready = ap_condition_exit_pp0_iter0_stage0; - -assign i_4_fu_67_p2 = (ap_sig_allocacmp_i_3 + 4'd1); - -assign icmp_ln62_fu_61_p2 = ((ap_sig_allocacmp_i_3 == 4'd15) ? 1'b1 : 1'b0); - -assign in_stream_m15_to_m2_din = in_s_dout[511:0]; - -endmodule //HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_62_1 diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_68_2.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_68_2.v deleted file mode 100644 index 456fe6dc..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_68_2.v +++ /dev/null @@ -1,262 +0,0 @@ -// ============================================================== -// RTL generated by Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Version: 2022.2 -// Copyright (C) Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// -// =========================================================== - -`timescale 1 ns / 1 ps - -module HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_68_2 ( - ap_clk, - ap_rst, - ap_start, - ap_done, - ap_idle, - ap_ready, - in_s_dout, - in_s_empty_n, - in_s_read, - in_stream_2_to_15_din, - in_stream_2_to_15_full_n, - in_stream_2_to_15_write -); - -parameter ap_ST_fsm_pp0_stage0 = 1'd1; - -input ap_clk; -input ap_rst; -input ap_start; -output ap_done; -output ap_idle; -output ap_ready; -input [512:0] in_s_dout; -input in_s_empty_n; -output in_s_read; -output [511:0] in_stream_2_to_15_din; -input in_stream_2_to_15_full_n; -output in_stream_2_to_15_write; - -reg ap_idle; -reg in_s_read; -reg in_stream_2_to_15_write; - -(* fsm_encoding = "none" *) reg [0:0] ap_CS_fsm; -wire ap_CS_fsm_pp0_stage0; -wire ap_enable_reg_pp0_iter0; -reg ap_enable_reg_pp0_iter1; -reg ap_idle_pp0; -wire ap_block_state1_pp0_stage0_iter0; -reg ap_block_state2_pp0_stage0_iter1; -reg ap_block_pp0_stage0_subdone; -wire [0:0] icmp_ln68_fu_63_p2; -reg ap_condition_exit_pp0_iter0_stage0; -wire ap_loop_exit_ready; -reg ap_ready_int; -reg in_s_blk_n; -wire ap_block_pp0_stage0; -reg in_stream_2_to_15_blk_n; -reg [5:0] i_fu_38; -wire [5:0] i_2_fu_69_p2; -wire ap_loop_init; -reg ap_block_pp0_stage0_11001; -reg [5:0] ap_sig_allocacmp_i_1; -reg ap_block_pp0_stage0_01001; -reg ap_done_reg; -wire ap_continue_int; -reg ap_done_int; -reg [0:0] ap_NS_fsm; -wire ap_enable_pp0; -wire ap_start_int; -wire ap_ce_reg; - -// power-on initialization -initial begin -#0 ap_CS_fsm = 1'd1; -#0 ap_enable_reg_pp0_iter1 = 1'b0; -#0 ap_done_reg = 1'b0; -end - -HEAT3D_flow_control_loop_pipe_sequential_init flow_control_loop_pipe_sequential_init_U( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .ap_start(ap_start), - .ap_ready(ap_ready), - .ap_done(ap_done), - .ap_start_int(ap_start_int), - .ap_loop_init(ap_loop_init), - .ap_ready_int(ap_ready_int), - .ap_loop_exit_ready(ap_condition_exit_pp0_iter0_stage0), - .ap_loop_exit_done(ap_done_int), - .ap_continue_int(ap_continue_int), - .ap_done_int(ap_done_int) -); - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_CS_fsm <= ap_ST_fsm_pp0_stage0; - end else begin - ap_CS_fsm <= ap_NS_fsm; - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_done_reg <= 1'b0; - end else begin - if ((ap_continue_int == 1'b1)) begin - ap_done_reg <= 1'b0; - end else if (((ap_loop_exit_ready == 1'b1) & (1'b0 == ap_block_pp0_stage0_subdone) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_done_reg <= 1'b1; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter1 <= 1'b0; - end else begin - if ((1'b1 == ap_condition_exit_pp0_iter0_stage0)) begin - ap_enable_reg_pp0_iter1 <= 1'b0; - end else if (((1'b0 == ap_block_pp0_stage0_subdone) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_enable_reg_pp0_iter1 <= ap_start_int; - end - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - if (((icmp_ln68_fu_63_p2 == 1'd0) & (ap_enable_reg_pp0_iter0 == 1'b1))) begin - i_fu_38 <= i_2_fu_69_p2; - end else if ((ap_loop_init == 1'b1)) begin - i_fu_38 <= 6'd18; - end - end -end - -always @ (*) begin - if (((icmp_ln68_fu_63_p2 == 1'd1) & (1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_condition_exit_pp0_iter0_stage0 = 1'b1; - end else begin - ap_condition_exit_pp0_iter0_stage0 = 1'b0; - end -end - -always @ (*) begin - if (((ap_loop_exit_ready == 1'b1) & (1'b0 == ap_block_pp0_stage0_subdone) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_done_int = 1'b1; - end else begin - ap_done_int = ap_done_reg; - end -end - -always @ (*) begin - if (((ap_idle_pp0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (ap_start_int == 1'b0))) begin - ap_idle = 1'b1; - end else begin - ap_idle = 1'b0; - end -end - -always @ (*) begin - if (((ap_enable_reg_pp0_iter1 == 1'b0) & (ap_enable_reg_pp0_iter0 == 1'b0))) begin - ap_idle_pp0 = 1'b1; - end else begin - ap_idle_pp0 = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_ready_int = 1'b1; - end else begin - ap_ready_int = 1'b0; - end -end - -always @ (*) begin - if (((ap_loop_init == 1'b1) & (1'b0 == ap_block_pp0_stage0) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_sig_allocacmp_i_1 = 6'd18; - end else begin - ap_sig_allocacmp_i_1 = i_fu_38; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_s_blk_n = in_s_empty_n; - end else begin - in_s_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_s_read = 1'b1; - end else begin - in_s_read = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_stream_2_to_15_blk_n = in_stream_2_to_15_full_n; - end else begin - in_stream_2_to_15_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - in_stream_2_to_15_write = 1'b1; - end else begin - in_stream_2_to_15_write = 1'b0; - end -end - -always @ (*) begin - case (ap_CS_fsm) - ap_ST_fsm_pp0_stage0 : begin - ap_NS_fsm = ap_ST_fsm_pp0_stage0; - end - default : begin - ap_NS_fsm = 'bx; - end - endcase -end - -assign ap_CS_fsm_pp0_stage0 = ap_CS_fsm[32'd0]; - -assign ap_block_pp0_stage0 = ~(1'b1 == 1'b1); - -always @ (*) begin - ap_block_pp0_stage0_01001 = ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_stream_2_to_15_full_n == 1'b0) | (in_s_empty_n == 1'b0))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001 = ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_stream_2_to_15_full_n == 1'b0) | (in_s_empty_n == 1'b0))); -end - -always @ (*) begin - ap_block_pp0_stage0_subdone = ((ap_enable_reg_pp0_iter1 == 1'b1) & ((in_stream_2_to_15_full_n == 1'b0) | (in_s_empty_n == 1'b0))); -end - -assign ap_block_state1_pp0_stage0_iter0 = ~(1'b1 == 1'b1); - -always @ (*) begin - ap_block_state2_pp0_stage0_iter1 = ((in_stream_2_to_15_full_n == 1'b0) | (in_s_empty_n == 1'b0)); -end - -assign ap_enable_pp0 = (ap_idle_pp0 ^ 1'b1); - -assign ap_enable_reg_pp0_iter0 = ap_start_int; - -assign ap_loop_exit_ready = ap_condition_exit_pp0_iter0_stage0; - -assign i_2_fu_69_p2 = (ap_sig_allocacmp_i_1 + 6'd1); - -assign icmp_ln68_fu_63_p2 = ((ap_sig_allocacmp_i_1 == 6'd32) ? 1'b1 : 1'b0); - -assign in_stream_2_to_15_din = in_s_dout[511:0]; - -endmodule //HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_68_2 diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_stencil_kernel.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_stencil_kernel.v deleted file mode 100644 index e96d479d..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HEAT3D_stencil_kernel.v +++ /dev/null @@ -1,746 +0,0 @@ -// ============================================================== -// RTL generated by Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Version: 2022.2 -// Copyright (C) Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// -// =========================================================== - -`timescale 1 ns / 1 ps - -module HEAT3D_HEAT3D_stencil_kernel ( - ap_clk, - ap_rst, - in_1_0_0, - in_0_0_1, - in_0_0_m1, - in_0_0_0, - in_0_m1_0, - in_m1_0_0, - in_0_1_0, - ap_return, - ap_ce -); - - -input ap_clk; -input ap_rst; -input [31:0] in_1_0_0; -input [31:0] in_0_0_1; -input [31:0] in_0_0_m1; -input [31:0] in_0_0_0; -input [31:0] in_0_m1_0; -input [31:0] in_m1_0_0; -input [31:0] in_0_1_0; -output [31:0] ap_return; -input ap_ce; - -reg[31:0] ap_return; - -reg [31:0] in_0_1_0_read_reg_119; -wire ap_block_state1_pp0_stage0_iter0; -wire ap_block_state2_pp0_stage0_iter1; -wire ap_block_state3_pp0_stage0_iter2; -wire ap_block_state4_pp0_stage0_iter3; -wire ap_block_state5_pp0_stage0_iter4; -wire ap_block_state6_pp0_stage0_iter5; -wire ap_block_state7_pp0_stage0_iter6; -wire ap_block_state8_pp0_stage0_iter7; -wire ap_block_state9_pp0_stage0_iter8; -wire ap_block_state10_pp0_stage0_iter9; -wire ap_block_state11_pp0_stage0_iter10; -wire ap_block_state12_pp0_stage0_iter11; -wire ap_block_state13_pp0_stage0_iter12; -wire ap_block_state14_pp0_stage0_iter13; -wire ap_block_state15_pp0_stage0_iter14; -wire ap_block_state16_pp0_stage0_iter15; -wire ap_block_state17_pp0_stage0_iter16; -wire ap_block_state18_pp0_stage0_iter17; -wire ap_block_state19_pp0_stage0_iter18; -wire ap_block_state20_pp0_stage0_iter19; -wire ap_block_state21_pp0_stage0_iter20; -wire ap_block_state22_pp0_stage0_iter21; -wire ap_block_state23_pp0_stage0_iter22; -wire ap_block_state24_pp0_stage0_iter23; -wire ap_block_state25_pp0_stage0_iter24; -wire ap_block_state26_pp0_stage0_iter25; -wire ap_block_state27_pp0_stage0_iter26; -wire ap_block_state28_pp0_stage0_iter27; -wire ap_block_state29_pp0_stage0_iter28; -wire ap_block_state30_pp0_stage0_iter29; -wire ap_block_state31_pp0_stage0_iter30; -wire ap_block_state32_pp0_stage0_iter31; -wire ap_block_state33_pp0_stage0_iter32; -wire ap_block_state34_pp0_stage0_iter33; -wire ap_block_state35_pp0_stage0_iter34; -wire ap_block_state36_pp0_stage0_iter35; -wire ap_block_state37_pp0_stage0_iter36; -wire ap_block_state38_pp0_stage0_iter37; -wire ap_block_state39_pp0_stage0_iter38; -wire ap_block_state40_pp0_stage0_iter39; -wire ap_block_state41_pp0_stage0_iter40; -wire ap_block_state42_pp0_stage0_iter41; -wire ap_block_state43_pp0_stage0_iter42; -wire ap_block_pp0_stage0_11001; -reg [31:0] in_0_1_0_read_reg_119_pp0_iter1_reg; -reg [31:0] in_0_1_0_read_reg_119_pp0_iter2_reg; -reg [31:0] in_0_1_0_read_reg_119_pp0_iter3_reg; -reg [31:0] in_m1_0_0_read_reg_124; -reg [31:0] in_m1_0_0_read_reg_124_pp0_iter1_reg; -reg [31:0] in_m1_0_0_read_reg_124_pp0_iter2_reg; -reg [31:0] in_m1_0_0_read_reg_124_pp0_iter3_reg; -reg [31:0] in_m1_0_0_read_reg_124_pp0_iter4_reg; -reg [31:0] in_m1_0_0_read_reg_124_pp0_iter5_reg; -reg [31:0] in_m1_0_0_read_reg_124_pp0_iter6_reg; -reg [31:0] in_m1_0_0_read_reg_124_pp0_iter7_reg; -reg [31:0] in_m1_0_0_read_reg_124_pp0_iter8_reg; -reg [31:0] in_m1_0_0_read_reg_124_pp0_iter9_reg; -reg [31:0] in_m1_0_0_read_reg_124_pp0_iter10_reg; -reg [31:0] in_0_m1_0_read_reg_129; -reg [31:0] in_0_m1_0_read_reg_129_pp0_iter1_reg; -reg [31:0] in_0_m1_0_read_reg_129_pp0_iter2_reg; -reg [31:0] in_0_m1_0_read_reg_129_pp0_iter3_reg; -reg [31:0] in_0_m1_0_read_reg_129_pp0_iter4_reg; -reg [31:0] in_0_m1_0_read_reg_129_pp0_iter5_reg; -reg [31:0] in_0_m1_0_read_reg_129_pp0_iter6_reg; -reg [31:0] in_0_m1_0_read_reg_129_pp0_iter7_reg; -reg [31:0] in_0_m1_0_read_reg_129_pp0_iter8_reg; -reg [31:0] in_0_m1_0_read_reg_129_pp0_iter9_reg; -reg [31:0] in_0_m1_0_read_reg_129_pp0_iter10_reg; -reg [31:0] in_0_0_0_read_reg_134; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter1_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter2_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter3_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter4_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter5_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter6_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter7_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter8_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter9_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter10_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter11_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter12_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter13_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter14_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter15_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter16_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter17_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter18_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter19_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter20_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter21_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter22_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter23_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter24_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter25_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter26_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter27_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter28_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter29_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter30_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter31_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter32_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter33_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter34_reg; -reg [31:0] in_0_0_0_read_reg_134_pp0_iter35_reg; -reg [31:0] in_0_0_m1_read_reg_140; -reg [31:0] in_0_0_m1_read_reg_140_pp0_iter1_reg; -reg [31:0] in_0_0_m1_read_reg_140_pp0_iter2_reg; -reg [31:0] in_0_0_m1_read_reg_140_pp0_iter3_reg; -reg [31:0] in_0_0_m1_read_reg_140_pp0_iter4_reg; -reg [31:0] in_0_0_m1_read_reg_140_pp0_iter5_reg; -reg [31:0] in_0_0_m1_read_reg_140_pp0_iter6_reg; -reg [31:0] in_0_0_m1_read_reg_140_pp0_iter7_reg; -reg [31:0] in_0_0_m1_read_reg_140_pp0_iter8_reg; -reg [31:0] in_0_0_m1_read_reg_140_pp0_iter9_reg; -reg [31:0] in_0_0_m1_read_reg_140_pp0_iter10_reg; -reg [31:0] in_0_0_1_read_reg_145; -reg [31:0] in_0_0_1_read_reg_145_pp0_iter1_reg; -reg [31:0] in_0_0_1_read_reg_145_pp0_iter2_reg; -reg [31:0] in_0_0_1_read_reg_145_pp0_iter3_reg; -reg [31:0] in_1_0_0_read_reg_150; -reg [31:0] in_1_0_0_read_reg_150_pp0_iter1_reg; -reg [31:0] in_1_0_0_read_reg_150_pp0_iter2_reg; -reg [31:0] in_1_0_0_read_reg_150_pp0_iter3_reg; -wire [31:0] grp_fu_98_p2; -reg [31:0] mul_reg_155; -wire [31:0] grp_fu_62_p2; -reg [31:0] sub_reg_162; -wire [31:0] grp_fu_66_p2; -reg [31:0] sub2_reg_167; -wire [31:0] grp_fu_70_p2; -reg [31:0] sub6_reg_172; -wire [31:0] grp_fu_74_p2; -reg [31:0] add_reg_177; -wire [31:0] grp_fu_78_p2; -reg [31:0] add3_reg_182; -wire [31:0] grp_fu_82_p2; -reg [31:0] add7_reg_187; -reg [31:0] add7_reg_187_pp0_iter18_reg; -reg [31:0] add7_reg_187_pp0_iter19_reg; -reg [31:0] add7_reg_187_pp0_iter20_reg; -reg [31:0] add7_reg_187_pp0_iter21_reg; -reg [31:0] add7_reg_187_pp0_iter22_reg; -reg [31:0] add7_reg_187_pp0_iter23_reg; -reg [31:0] add7_reg_187_pp0_iter24_reg; -wire [31:0] grp_fu_104_p2; -reg [31:0] cal1_reg_192; -wire [31:0] grp_fu_109_p2; -reg [31:0] cal2_reg_197; -wire [31:0] grp_fu_114_p2; -reg [31:0] cal3_reg_202; -wire [31:0] grp_fu_86_p2; -reg [31:0] add9_reg_207; -wire [31:0] grp_fu_90_p2; -reg [31:0] add1_reg_212; -wire ap_block_pp0_stage0; -reg grp_fu_62_ce; -reg grp_fu_66_ce; -reg grp_fu_70_ce; -reg grp_fu_74_ce; -reg grp_fu_78_ce; -reg grp_fu_82_ce; -reg grp_fu_86_ce; -reg grp_fu_90_ce; -wire [31:0] grp_fu_94_p2; -reg grp_fu_94_ce; -reg grp_fu_98_ce; -reg grp_fu_104_ce; -reg grp_fu_109_ce; -reg grp_fu_114_ce; -reg ap_ce_reg; -reg [31:0] in_1_0_0_int_reg; -reg [31:0] in_0_0_1_int_reg; -reg [31:0] in_0_0_m1_int_reg; -reg [31:0] in_0_0_0_int_reg; -reg [31:0] in_0_m1_0_int_reg; -reg [31:0] in_m1_0_0_int_reg; -reg [31:0] in_0_1_0_int_reg; -reg [31:0] ap_return_int_reg; - -HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0 #( - .ID( 1 ), - .NUM_STAGE( 7 ), - .din0_WIDTH( 32 ), - .din1_WIDTH( 32 ), - .dout_WIDTH( 32 )) -fsub_32ns_32ns_32_7_full_dsp_0_U5( - .clk(ap_clk), - .reset(ap_rst), - .din0(in_1_0_0_read_reg_150_pp0_iter3_reg), - .din1(mul_reg_155), - .ce(grp_fu_62_ce), - .dout(grp_fu_62_p2) -); - -HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0 #( - .ID( 1 ), - .NUM_STAGE( 7 ), - .din0_WIDTH( 32 ), - .din1_WIDTH( 32 ), - .dout_WIDTH( 32 )) -fsub_32ns_32ns_32_7_full_dsp_0_U6( - .clk(ap_clk), - .reset(ap_rst), - .din0(in_0_1_0_read_reg_119_pp0_iter3_reg), - .din1(mul_reg_155), - .ce(grp_fu_66_ce), - .dout(grp_fu_66_p2) -); - -HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0 #( - .ID( 1 ), - .NUM_STAGE( 7 ), - .din0_WIDTH( 32 ), - .din1_WIDTH( 32 ), - .dout_WIDTH( 32 )) -fsub_32ns_32ns_32_7_full_dsp_0_U7( - .clk(ap_clk), - .reset(ap_rst), - .din0(in_0_0_1_read_reg_145_pp0_iter3_reg), - .din1(mul_reg_155), - .ce(grp_fu_70_ce), - .dout(grp_fu_70_p2) -); - -HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0 #( - .ID( 1 ), - .NUM_STAGE( 7 ), - .din0_WIDTH( 32 ), - .din1_WIDTH( 32 ), - .dout_WIDTH( 32 )) -fadd_32ns_32ns_32_7_full_dsp_0_U8( - .clk(ap_clk), - .reset(ap_rst), - .din0(sub_reg_162), - .din1(in_m1_0_0_read_reg_124_pp0_iter10_reg), - .ce(grp_fu_74_ce), - .dout(grp_fu_74_p2) -); - -HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0 #( - .ID( 1 ), - .NUM_STAGE( 7 ), - .din0_WIDTH( 32 ), - .din1_WIDTH( 32 ), - .dout_WIDTH( 32 )) -fadd_32ns_32ns_32_7_full_dsp_0_U9( - .clk(ap_clk), - .reset(ap_rst), - .din0(sub2_reg_167), - .din1(in_0_m1_0_read_reg_129_pp0_iter10_reg), - .ce(grp_fu_78_ce), - .dout(grp_fu_78_p2) -); - -HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0 #( - .ID( 1 ), - .NUM_STAGE( 7 ), - .din0_WIDTH( 32 ), - .din1_WIDTH( 32 ), - .dout_WIDTH( 32 )) -fadd_32ns_32ns_32_7_full_dsp_0_U10( - .clk(ap_clk), - .reset(ap_rst), - .din0(sub6_reg_172), - .din1(in_0_0_m1_read_reg_140_pp0_iter10_reg), - .ce(grp_fu_82_ce), - .dout(grp_fu_82_p2) -); - -HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0 #( - .ID( 1 ), - .NUM_STAGE( 7 ), - .din0_WIDTH( 32 ), - .din1_WIDTH( 32 ), - .dout_WIDTH( 32 )) -fadd_32ns_32ns_32_7_full_dsp_0_U11( - .clk(ap_clk), - .reset(ap_rst), - .din0(cal1_reg_192), - .din1(cal2_reg_197), - .ce(grp_fu_86_ce), - .dout(grp_fu_86_p2) -); - -HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0 #( - .ID( 1 ), - .NUM_STAGE( 7 ), - .din0_WIDTH( 32 ), - .din1_WIDTH( 32 ), - .dout_WIDTH( 32 )) -fadd_32ns_32ns_32_7_full_dsp_0_U12( - .clk(ap_clk), - .reset(ap_rst), - .din0(add9_reg_207), - .din1(cal3_reg_202), - .ce(grp_fu_90_ce), - .dout(grp_fu_90_p2) -); - -HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0 #( - .ID( 1 ), - .NUM_STAGE( 7 ), - .din0_WIDTH( 32 ), - .din1_WIDTH( 32 ), - .dout_WIDTH( 32 )) -fadd_32ns_32ns_32_7_full_dsp_0_U13( - .clk(ap_clk), - .reset(ap_rst), - .din0(add1_reg_212), - .din1(in_0_0_0_read_reg_134_pp0_iter35_reg), - .ce(grp_fu_94_ce), - .dout(grp_fu_94_p2) -); - -HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0 #( - .ID( 1 ), - .NUM_STAGE( 4 ), - .din0_WIDTH( 32 ), - .din1_WIDTH( 32 ), - .dout_WIDTH( 32 )) -fmul_32ns_32ns_32_4_max_dsp_0_U14( - .clk(ap_clk), - .reset(ap_rst), - .din0(in_0_0_0_int_reg), - .din1(32'd1073741824), - .ce(grp_fu_98_ce), - .dout(grp_fu_98_p2) -); - -HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0 #( - .ID( 1 ), - .NUM_STAGE( 4 ), - .din0_WIDTH( 32 ), - .din1_WIDTH( 32 ), - .dout_WIDTH( 32 )) -fmul_32ns_32ns_32_4_max_dsp_0_U15( - .clk(ap_clk), - .reset(ap_rst), - .din0(add_reg_177), - .din1(32'd1040187392), - .ce(grp_fu_104_ce), - .dout(grp_fu_104_p2) -); - -HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0 #( - .ID( 1 ), - .NUM_STAGE( 4 ), - .din0_WIDTH( 32 ), - .din1_WIDTH( 32 ), - .dout_WIDTH( 32 )) -fmul_32ns_32ns_32_4_max_dsp_0_U16( - .clk(ap_clk), - .reset(ap_rst), - .din0(add3_reg_182), - .din1(32'd1040187392), - .ce(grp_fu_109_ce), - .dout(grp_fu_109_p2) -); - -HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0 #( - .ID( 1 ), - .NUM_STAGE( 4 ), - .din0_WIDTH( 32 ), - .din1_WIDTH( 32 ), - .dout_WIDTH( 32 )) -fmul_32ns_32ns_32_4_max_dsp_0_U17( - .clk(ap_clk), - .reset(ap_rst), - .din0(add7_reg_187_pp0_iter24_reg), - .din1(32'd1040187392), - .ce(grp_fu_114_ce), - .dout(grp_fu_114_p2) -); - -always @ (posedge ap_clk) begin - ap_ce_reg <= ap_ce; -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_ce_reg))) begin - add1_reg_212 <= grp_fu_90_p2; - add3_reg_182 <= grp_fu_78_p2; - add7_reg_187 <= grp_fu_82_p2; - add7_reg_187_pp0_iter18_reg <= add7_reg_187; - add7_reg_187_pp0_iter19_reg <= add7_reg_187_pp0_iter18_reg; - add7_reg_187_pp0_iter20_reg <= add7_reg_187_pp0_iter19_reg; - add7_reg_187_pp0_iter21_reg <= add7_reg_187_pp0_iter20_reg; - add7_reg_187_pp0_iter22_reg <= add7_reg_187_pp0_iter21_reg; - add7_reg_187_pp0_iter23_reg <= add7_reg_187_pp0_iter22_reg; - add7_reg_187_pp0_iter24_reg <= add7_reg_187_pp0_iter23_reg; - add9_reg_207 <= grp_fu_86_p2; - add_reg_177 <= grp_fu_74_p2; - cal1_reg_192 <= grp_fu_104_p2; - cal2_reg_197 <= grp_fu_109_p2; - cal3_reg_202 <= grp_fu_114_p2; - in_0_0_0_read_reg_134 <= in_0_0_0_int_reg; - in_0_0_0_read_reg_134_pp0_iter10_reg <= in_0_0_0_read_reg_134_pp0_iter9_reg; - in_0_0_0_read_reg_134_pp0_iter11_reg <= in_0_0_0_read_reg_134_pp0_iter10_reg; - in_0_0_0_read_reg_134_pp0_iter12_reg <= in_0_0_0_read_reg_134_pp0_iter11_reg; - in_0_0_0_read_reg_134_pp0_iter13_reg <= in_0_0_0_read_reg_134_pp0_iter12_reg; - in_0_0_0_read_reg_134_pp0_iter14_reg <= in_0_0_0_read_reg_134_pp0_iter13_reg; - in_0_0_0_read_reg_134_pp0_iter15_reg <= in_0_0_0_read_reg_134_pp0_iter14_reg; - in_0_0_0_read_reg_134_pp0_iter16_reg <= in_0_0_0_read_reg_134_pp0_iter15_reg; - in_0_0_0_read_reg_134_pp0_iter17_reg <= in_0_0_0_read_reg_134_pp0_iter16_reg; - in_0_0_0_read_reg_134_pp0_iter18_reg <= in_0_0_0_read_reg_134_pp0_iter17_reg; - in_0_0_0_read_reg_134_pp0_iter19_reg <= in_0_0_0_read_reg_134_pp0_iter18_reg; - in_0_0_0_read_reg_134_pp0_iter1_reg <= in_0_0_0_read_reg_134; - in_0_0_0_read_reg_134_pp0_iter20_reg <= in_0_0_0_read_reg_134_pp0_iter19_reg; - in_0_0_0_read_reg_134_pp0_iter21_reg <= in_0_0_0_read_reg_134_pp0_iter20_reg; - in_0_0_0_read_reg_134_pp0_iter22_reg <= in_0_0_0_read_reg_134_pp0_iter21_reg; - in_0_0_0_read_reg_134_pp0_iter23_reg <= in_0_0_0_read_reg_134_pp0_iter22_reg; - in_0_0_0_read_reg_134_pp0_iter24_reg <= in_0_0_0_read_reg_134_pp0_iter23_reg; - in_0_0_0_read_reg_134_pp0_iter25_reg <= in_0_0_0_read_reg_134_pp0_iter24_reg; - in_0_0_0_read_reg_134_pp0_iter26_reg <= in_0_0_0_read_reg_134_pp0_iter25_reg; - in_0_0_0_read_reg_134_pp0_iter27_reg <= in_0_0_0_read_reg_134_pp0_iter26_reg; - in_0_0_0_read_reg_134_pp0_iter28_reg <= in_0_0_0_read_reg_134_pp0_iter27_reg; - in_0_0_0_read_reg_134_pp0_iter29_reg <= in_0_0_0_read_reg_134_pp0_iter28_reg; - in_0_0_0_read_reg_134_pp0_iter2_reg <= in_0_0_0_read_reg_134_pp0_iter1_reg; - in_0_0_0_read_reg_134_pp0_iter30_reg <= in_0_0_0_read_reg_134_pp0_iter29_reg; - in_0_0_0_read_reg_134_pp0_iter31_reg <= in_0_0_0_read_reg_134_pp0_iter30_reg; - in_0_0_0_read_reg_134_pp0_iter32_reg <= in_0_0_0_read_reg_134_pp0_iter31_reg; - in_0_0_0_read_reg_134_pp0_iter33_reg <= in_0_0_0_read_reg_134_pp0_iter32_reg; - in_0_0_0_read_reg_134_pp0_iter34_reg <= in_0_0_0_read_reg_134_pp0_iter33_reg; - in_0_0_0_read_reg_134_pp0_iter35_reg <= in_0_0_0_read_reg_134_pp0_iter34_reg; - in_0_0_0_read_reg_134_pp0_iter3_reg <= in_0_0_0_read_reg_134_pp0_iter2_reg; - in_0_0_0_read_reg_134_pp0_iter4_reg <= in_0_0_0_read_reg_134_pp0_iter3_reg; - in_0_0_0_read_reg_134_pp0_iter5_reg <= in_0_0_0_read_reg_134_pp0_iter4_reg; - in_0_0_0_read_reg_134_pp0_iter6_reg <= in_0_0_0_read_reg_134_pp0_iter5_reg; - in_0_0_0_read_reg_134_pp0_iter7_reg <= in_0_0_0_read_reg_134_pp0_iter6_reg; - in_0_0_0_read_reg_134_pp0_iter8_reg <= in_0_0_0_read_reg_134_pp0_iter7_reg; - in_0_0_0_read_reg_134_pp0_iter9_reg <= in_0_0_0_read_reg_134_pp0_iter8_reg; - in_0_0_1_read_reg_145 <= in_0_0_1_int_reg; - in_0_0_1_read_reg_145_pp0_iter1_reg <= in_0_0_1_read_reg_145; - in_0_0_1_read_reg_145_pp0_iter2_reg <= in_0_0_1_read_reg_145_pp0_iter1_reg; - in_0_0_1_read_reg_145_pp0_iter3_reg <= in_0_0_1_read_reg_145_pp0_iter2_reg; - in_0_0_m1_read_reg_140 <= in_0_0_m1_int_reg; - in_0_0_m1_read_reg_140_pp0_iter10_reg <= in_0_0_m1_read_reg_140_pp0_iter9_reg; - in_0_0_m1_read_reg_140_pp0_iter1_reg <= in_0_0_m1_read_reg_140; - in_0_0_m1_read_reg_140_pp0_iter2_reg <= in_0_0_m1_read_reg_140_pp0_iter1_reg; - in_0_0_m1_read_reg_140_pp0_iter3_reg <= in_0_0_m1_read_reg_140_pp0_iter2_reg; - in_0_0_m1_read_reg_140_pp0_iter4_reg <= in_0_0_m1_read_reg_140_pp0_iter3_reg; - in_0_0_m1_read_reg_140_pp0_iter5_reg <= in_0_0_m1_read_reg_140_pp0_iter4_reg; - in_0_0_m1_read_reg_140_pp0_iter6_reg <= in_0_0_m1_read_reg_140_pp0_iter5_reg; - in_0_0_m1_read_reg_140_pp0_iter7_reg <= in_0_0_m1_read_reg_140_pp0_iter6_reg; - in_0_0_m1_read_reg_140_pp0_iter8_reg <= in_0_0_m1_read_reg_140_pp0_iter7_reg; - in_0_0_m1_read_reg_140_pp0_iter9_reg <= in_0_0_m1_read_reg_140_pp0_iter8_reg; - in_0_1_0_read_reg_119 <= in_0_1_0_int_reg; - in_0_1_0_read_reg_119_pp0_iter1_reg <= in_0_1_0_read_reg_119; - in_0_1_0_read_reg_119_pp0_iter2_reg <= in_0_1_0_read_reg_119_pp0_iter1_reg; - in_0_1_0_read_reg_119_pp0_iter3_reg <= in_0_1_0_read_reg_119_pp0_iter2_reg; - in_0_m1_0_read_reg_129 <= in_0_m1_0_int_reg; - in_0_m1_0_read_reg_129_pp0_iter10_reg <= in_0_m1_0_read_reg_129_pp0_iter9_reg; - in_0_m1_0_read_reg_129_pp0_iter1_reg <= in_0_m1_0_read_reg_129; - in_0_m1_0_read_reg_129_pp0_iter2_reg <= in_0_m1_0_read_reg_129_pp0_iter1_reg; - in_0_m1_0_read_reg_129_pp0_iter3_reg <= in_0_m1_0_read_reg_129_pp0_iter2_reg; - in_0_m1_0_read_reg_129_pp0_iter4_reg <= in_0_m1_0_read_reg_129_pp0_iter3_reg; - in_0_m1_0_read_reg_129_pp0_iter5_reg <= in_0_m1_0_read_reg_129_pp0_iter4_reg; - in_0_m1_0_read_reg_129_pp0_iter6_reg <= in_0_m1_0_read_reg_129_pp0_iter5_reg; - in_0_m1_0_read_reg_129_pp0_iter7_reg <= in_0_m1_0_read_reg_129_pp0_iter6_reg; - in_0_m1_0_read_reg_129_pp0_iter8_reg <= in_0_m1_0_read_reg_129_pp0_iter7_reg; - in_0_m1_0_read_reg_129_pp0_iter9_reg <= in_0_m1_0_read_reg_129_pp0_iter8_reg; - in_1_0_0_read_reg_150 <= in_1_0_0_int_reg; - in_1_0_0_read_reg_150_pp0_iter1_reg <= in_1_0_0_read_reg_150; - in_1_0_0_read_reg_150_pp0_iter2_reg <= in_1_0_0_read_reg_150_pp0_iter1_reg; - in_1_0_0_read_reg_150_pp0_iter3_reg <= in_1_0_0_read_reg_150_pp0_iter2_reg; - in_m1_0_0_read_reg_124 <= in_m1_0_0_int_reg; - in_m1_0_0_read_reg_124_pp0_iter10_reg <= in_m1_0_0_read_reg_124_pp0_iter9_reg; - in_m1_0_0_read_reg_124_pp0_iter1_reg <= in_m1_0_0_read_reg_124; - in_m1_0_0_read_reg_124_pp0_iter2_reg <= in_m1_0_0_read_reg_124_pp0_iter1_reg; - in_m1_0_0_read_reg_124_pp0_iter3_reg <= in_m1_0_0_read_reg_124_pp0_iter2_reg; - in_m1_0_0_read_reg_124_pp0_iter4_reg <= in_m1_0_0_read_reg_124_pp0_iter3_reg; - in_m1_0_0_read_reg_124_pp0_iter5_reg <= in_m1_0_0_read_reg_124_pp0_iter4_reg; - in_m1_0_0_read_reg_124_pp0_iter6_reg <= in_m1_0_0_read_reg_124_pp0_iter5_reg; - in_m1_0_0_read_reg_124_pp0_iter7_reg <= in_m1_0_0_read_reg_124_pp0_iter6_reg; - in_m1_0_0_read_reg_124_pp0_iter8_reg <= in_m1_0_0_read_reg_124_pp0_iter7_reg; - in_m1_0_0_read_reg_124_pp0_iter9_reg <= in_m1_0_0_read_reg_124_pp0_iter8_reg; - mul_reg_155 <= grp_fu_98_p2; - sub2_reg_167 <= grp_fu_66_p2; - sub6_reg_172 <= grp_fu_70_p2; - sub_reg_162 <= grp_fu_62_p2; - end -end - -always @ (posedge ap_clk) begin - if ((1'b1 == ap_ce_reg)) begin - ap_return_int_reg <= grp_fu_94_p2; - end -end - -always @ (posedge ap_clk) begin - if ((1'b1 == ap_ce)) begin - in_0_0_0_int_reg <= in_0_0_0; - in_0_0_1_int_reg <= in_0_0_1; - in_0_0_m1_int_reg <= in_0_0_m1; - in_0_1_0_int_reg <= in_0_1_0; - in_0_m1_0_int_reg <= in_0_m1_0; - in_1_0_0_int_reg <= in_1_0_0; - in_m1_0_0_int_reg <= in_m1_0_0; - end -end - -always @ (*) begin - if ((1'b0 == ap_ce_reg)) begin - ap_return = ap_return_int_reg; - end else if ((1'b1 == ap_ce_reg)) begin - ap_return = grp_fu_94_p2; - end else begin - ap_return = 'bx; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_ce_reg))) begin - grp_fu_104_ce = 1'b1; - end else begin - grp_fu_104_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_ce_reg))) begin - grp_fu_109_ce = 1'b1; - end else begin - grp_fu_109_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_ce_reg))) begin - grp_fu_114_ce = 1'b1; - end else begin - grp_fu_114_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_ce_reg))) begin - grp_fu_62_ce = 1'b1; - end else begin - grp_fu_62_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_ce_reg))) begin - grp_fu_66_ce = 1'b1; - end else begin - grp_fu_66_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_ce_reg))) begin - grp_fu_70_ce = 1'b1; - end else begin - grp_fu_70_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_ce_reg))) begin - grp_fu_74_ce = 1'b1; - end else begin - grp_fu_74_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_ce_reg))) begin - grp_fu_78_ce = 1'b1; - end else begin - grp_fu_78_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_ce_reg))) begin - grp_fu_82_ce = 1'b1; - end else begin - grp_fu_82_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_ce_reg))) begin - grp_fu_86_ce = 1'b1; - end else begin - grp_fu_86_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_ce_reg))) begin - grp_fu_90_ce = 1'b1; - end else begin - grp_fu_90_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_ce_reg))) begin - grp_fu_94_ce = 1'b1; - end else begin - grp_fu_94_ce = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_ce_reg))) begin - grp_fu_98_ce = 1'b1; - end else begin - grp_fu_98_ce = 1'b0; - end -end - -assign ap_block_pp0_stage0 = ~(1'b1 == 1'b1); - -assign ap_block_pp0_stage0_11001 = ~(1'b1 == 1'b1); - -assign ap_block_state10_pp0_stage0_iter9 = ~(1'b1 == 1'b1); - -assign ap_block_state11_pp0_stage0_iter10 = ~(1'b1 == 1'b1); - -assign ap_block_state12_pp0_stage0_iter11 = ~(1'b1 == 1'b1); - -assign ap_block_state13_pp0_stage0_iter12 = ~(1'b1 == 1'b1); - -assign ap_block_state14_pp0_stage0_iter13 = ~(1'b1 == 1'b1); - -assign ap_block_state15_pp0_stage0_iter14 = ~(1'b1 == 1'b1); - -assign ap_block_state16_pp0_stage0_iter15 = ~(1'b1 == 1'b1); - -assign ap_block_state17_pp0_stage0_iter16 = ~(1'b1 == 1'b1); - -assign ap_block_state18_pp0_stage0_iter17 = ~(1'b1 == 1'b1); - -assign ap_block_state19_pp0_stage0_iter18 = ~(1'b1 == 1'b1); - -assign ap_block_state1_pp0_stage0_iter0 = ~(1'b1 == 1'b1); - -assign ap_block_state20_pp0_stage0_iter19 = ~(1'b1 == 1'b1); - -assign ap_block_state21_pp0_stage0_iter20 = ~(1'b1 == 1'b1); - -assign ap_block_state22_pp0_stage0_iter21 = ~(1'b1 == 1'b1); - -assign ap_block_state23_pp0_stage0_iter22 = ~(1'b1 == 1'b1); - -assign ap_block_state24_pp0_stage0_iter23 = ~(1'b1 == 1'b1); - -assign ap_block_state25_pp0_stage0_iter24 = ~(1'b1 == 1'b1); - -assign ap_block_state26_pp0_stage0_iter25 = ~(1'b1 == 1'b1); - -assign ap_block_state27_pp0_stage0_iter26 = ~(1'b1 == 1'b1); - -assign ap_block_state28_pp0_stage0_iter27 = ~(1'b1 == 1'b1); - -assign ap_block_state29_pp0_stage0_iter28 = ~(1'b1 == 1'b1); - -assign ap_block_state2_pp0_stage0_iter1 = ~(1'b1 == 1'b1); - -assign ap_block_state30_pp0_stage0_iter29 = ~(1'b1 == 1'b1); - -assign ap_block_state31_pp0_stage0_iter30 = ~(1'b1 == 1'b1); - -assign ap_block_state32_pp0_stage0_iter31 = ~(1'b1 == 1'b1); - -assign ap_block_state33_pp0_stage0_iter32 = ~(1'b1 == 1'b1); - -assign ap_block_state34_pp0_stage0_iter33 = ~(1'b1 == 1'b1); - -assign ap_block_state35_pp0_stage0_iter34 = ~(1'b1 == 1'b1); - -assign ap_block_state36_pp0_stage0_iter35 = ~(1'b1 == 1'b1); - -assign ap_block_state37_pp0_stage0_iter36 = ~(1'b1 == 1'b1); - -assign ap_block_state38_pp0_stage0_iter37 = ~(1'b1 == 1'b1); - -assign ap_block_state39_pp0_stage0_iter38 = ~(1'b1 == 1'b1); - -assign ap_block_state3_pp0_stage0_iter2 = ~(1'b1 == 1'b1); - -assign ap_block_state40_pp0_stage0_iter39 = ~(1'b1 == 1'b1); - -assign ap_block_state41_pp0_stage0_iter40 = ~(1'b1 == 1'b1); - -assign ap_block_state42_pp0_stage0_iter41 = ~(1'b1 == 1'b1); - -assign ap_block_state43_pp0_stage0_iter42 = ~(1'b1 == 1'b1); - -assign ap_block_state4_pp0_stage0_iter3 = ~(1'b1 == 1'b1); - -assign ap_block_state5_pp0_stage0_iter4 = ~(1'b1 == 1'b1); - -assign ap_block_state6_pp0_stage0_iter5 = ~(1'b1 == 1'b1); - -assign ap_block_state7_pp0_stage0_iter6 = ~(1'b1 == 1'b1); - -assign ap_block_state8_pp0_stage0_iter7 = ~(1'b1 == 1'b1); - -assign ap_block_state9_pp0_stage0_iter8 = ~(1'b1 == 1'b1); - -endmodule //HEAT3D_HEAT3D_stencil_kernel diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HLS_REG_ap_uint_512_s.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HLS_REG_ap_uint_512_s.v deleted file mode 100644 index 3642685b..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_HLS_REG_ap_uint_512_s.v +++ /dev/null @@ -1,25 +0,0 @@ -// ============================================================== -// RTL generated by Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Version: 2022.2 -// Copyright (C) Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// -// =========================================================== - -`timescale 1 ns / 1 ps - -module HEAT3D_HLS_REG_ap_uint_512_s ( - ap_ready, - in_r, - ap_return -); - - -output ap_ready; -input [511:0] in_r; -output [511:0] ap_return; - -assign ap_ready = 1'b1; - -assign ap_return = in_r; - -endmodule //HEAT3D_HLS_REG_ap_uint_512_s diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0.v deleted file mode 100644 index c192cb50..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0.v +++ /dev/null @@ -1,76 +0,0 @@ -// ============================================================== -// Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Version: 2022.2 -// Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// ============================================================== - -`timescale 1ns/1ps - -module HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0 -#(parameter - ID = 1, - NUM_STAGE = 3, - din0_WIDTH = 32, - din1_WIDTH = 32, - dout_WIDTH = 32 -)( - input wire clk, - input wire reset, - input wire ce, - input wire [din0_WIDTH-1:0] din0, - input wire [din1_WIDTH-1:0] din1, - output wire [dout_WIDTH-1:0] dout -); -//------------------------Local signal------------------- -wire aclk; -wire aclken; -wire a_tvalid; -wire [31:0] a_tdata; -wire b_tvalid; -wire [31:0] b_tdata; -wire r_tvalid; -wire [31:0] r_tdata; -reg [din0_WIDTH-1:0] din0_buf1; -reg [din1_WIDTH-1:0] din1_buf1; -reg ce_r; -wire [dout_WIDTH-1:0] dout_i; -reg [dout_WIDTH-1:0] dout_r; -//------------------------Instantiation------------------ -HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0_ip HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0_ip_u ( - .aclk ( aclk ), - .aclken ( aclken ), - .s_axis_a_tvalid ( a_tvalid ), - .s_axis_a_tdata ( a_tdata ), - .s_axis_b_tvalid ( b_tvalid ), - .s_axis_b_tdata ( b_tdata ), - .m_axis_result_tvalid ( r_tvalid ), - .m_axis_result_tdata ( r_tdata ) -); -//------------------------Body--------------------------- -assign aclk = clk; -assign aclken = ce_r; -assign a_tvalid = 1'b1; -assign a_tdata = din0_buf1; -assign b_tvalid = 1'b1; -assign b_tdata = din1_buf1; -assign dout_i = r_tdata; - -always @(posedge clk) begin - if (ce) begin - din0_buf1 <= din0; - din1_buf1 <= din1; - end -end - -always @ (posedge clk) begin - ce_r <= ce; -end - -always @ (posedge clk) begin - if (ce_r) begin - dout_r <= dout_i; - end -end - -assign dout = ce_r?dout_i:dout_r; -endmodule diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0_ip.tcl b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0_ip.tcl deleted file mode 100644 index ed99e679..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0_ip.tcl +++ /dev/null @@ -1,45 +0,0 @@ -# BEGIN Vivado Commands -set vivado_ver [version -short] -set fpo_ver 7.1 -if {[regexp -nocase {2015\.1.*} $vivado_ver match]} { - set fpo_ver 7.0 -} -create_ip -name floating_point -version $fpo_ver -vendor xilinx.com -library ip -module_name HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0_ip -# BEGIN Vivado Commands -# BEGIN Vivado Parameters -set_property -dict [list CONFIG.a_precision_type Single \ - CONFIG.a_tuser_width 1 \ - CONFIG.add_sub_value Add \ - CONFIG.b_tuser_width 1 \ - CONFIG.c_a_exponent_width 8 \ - CONFIG.c_a_fraction_width 24 \ - CONFIG.c_compare_operation Programmable \ - CONFIG.c_has_divide_by_zero false \ - CONFIG.c_has_invalid_op false \ - CONFIG.c_has_overflow false \ - CONFIG.c_has_underflow false \ - CONFIG.c_latency 5 \ - CONFIG.c_mult_usage Full_Usage \ - CONFIG.c_optimization Speed_Optimized \ - CONFIG.c_rate 1 \ - CONFIG.c_result_exponent_width 8 \ - CONFIG.c_result_fraction_width 24 \ - CONFIG.component_name HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0_ip \ - CONFIG.flow_control NonBlocking \ - CONFIG.has_a_tlast false \ - CONFIG.has_a_tuser false \ - CONFIG.has_aclken true \ - CONFIG.has_aresetn false \ - CONFIG.has_b_tlast false \ - CONFIG.has_b_tuser false \ - CONFIG.has_operation_tlast false \ - CONFIG.has_operation_tuser false \ - CONFIG.has_result_tready false \ - CONFIG.maximum_latency false \ - CONFIG.operation_tuser_width 1 \ - CONFIG.operation_type Add_Subtract \ - CONFIG.result_precision_type Single \ - CONFIG.result_tlast_behv Null] -objects [get_ips HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0_ip] -quiet -# END Vivado Parameters -set_property generate_synth_checkpoint false [get_files HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0_ip.xci] -generate_target {synthesis simulation} [get_files HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0_ip.xci] diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fifo_w512_d15_A.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fifo_w512_d15_A.v deleted file mode 100644 index 4bc05680..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fifo_w512_d15_A.v +++ /dev/null @@ -1,189 +0,0 @@ -// ============================================================== -// Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Version: 2022.2 -// Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// ============================================================== -// 67d7842dbbe25473c3c32b93c0da8047785f30d78e8a024de1b57352245f9689 - -`timescale 1ns/1ps - -module HEAT3D_fifo_w512_d15_A -#(parameter - MEM_STYLE = "auto", - DATA_WIDTH = 512, - ADDR_WIDTH = 4, - DEPTH = 14) -( - // system signal - input wire clk, - input wire reset, - - // write - output wire if_full_n, - input wire if_write_ce, - input wire if_write, - input wire [DATA_WIDTH-1:0] if_din, - - // read - output wire if_empty_n, - input wire if_read_ce, - input wire if_read, - output wire [DATA_WIDTH-1:0] if_dout -); -//------------------------Parameter---------------------- - -//------------------------Local signal------------------- - reg [ADDR_WIDTH-1:0] waddr = 1'b0; - reg [ADDR_WIDTH-1:0] raddr = 1'b0; - wire [ADDR_WIDTH-1:0] wnext; - wire [ADDR_WIDTH-1:0] rnext; - wire push; - wire pop; - reg [ADDR_WIDTH:0] mOutPtr = 1'b0; - reg empty_n = 1'b0; - reg full_n = 1'b1; - // has almost full? no - // has output register? - reg dout_vld = 1'b0;//yes - -//------------------------Instantiation------------------ - HEAT3D_fifo_w512_d15_A_ram - #( .MEM_STYLE (MEM_STYLE), - .DATA_WIDTH (DATA_WIDTH), - .ADDR_WIDTH (ADDR_WIDTH), - .DEPTH (DEPTH) - ) U_HEAT3D_fifo_w512_d15_A_ram ( - .clk (clk), - .reset (reset), - .we (push), - .waddr (waddr), - .din (if_din), - .raddr (rnext), - .rden (pop), - .dout (if_dout) - ); - -//------------------------Task and function-------------- - -//------------------------Body--------------------------- - // has num_data_valid ? no - - // has almost full ? - assign if_full_n = full_n; //no - - // has output register? - assign if_empty_n = dout_vld; // yes - assign pop = empty_n & if_read_ce & (if_read | ~dout_vld); // yes - assign push = full_n & if_write_ce & if_write; - assign wnext = !push ? waddr : - (waddr == DEPTH - 1) ? 1'b0 : - waddr + 1'b1; - assign rnext = !pop ? raddr : - (raddr == DEPTH - 1) ? 1'b0 : - raddr + 1'b1; - - // waddr - always @(posedge clk ) begin - if (reset == 1'b1) - waddr <= 1'b0; - else - waddr <= wnext; - end - - // raddr - always @(posedge clk ) begin - if (reset == 1'b1) - raddr <= 1'b0; - else - raddr <= rnext; - end - - // mOutPtr - always @(posedge clk ) begin - if (reset == 1'b1) - mOutPtr <= 1'b0; - else if (push & ~pop) - mOutPtr <= mOutPtr + 1'b1; - else if (~push & pop) - mOutPtr <= mOutPtr - 1'b1; - end - - // full_n - always @(posedge clk ) begin - if (reset == 1'b1) - full_n <= 1'b1; - else if (push & ~pop) - full_n <= (mOutPtr != DEPTH - 1); - else if (~push & pop) - full_n <= 1'b1; - end - - // almost_full_n - - // empty_n - always @(posedge clk ) begin - if (reset == 1'b1) - empty_n <= 1'b0; - else if (push & ~pop) - empty_n <= 1'b1; - else if (~push & pop) - empty_n <= (mOutPtr != 1'b1); - end - - // if_num_data_valid - - // dout_vld - always @(posedge clk ) begin - if (reset == 1'b1) - dout_vld <= 1'b0; - else if (pop) - dout_vld <= 1'b1; - else if (if_read_ce & if_read) - dout_vld <= 1'b0; - end // - -endmodule - - -module HEAT3D_fifo_w512_d15_A_ram -#(parameter - MEM_STYLE = "auto", - DATA_WIDTH = 512, - ADDR_WIDTH = 4, - DEPTH = 14) -( - input wire clk, - input wire reset, - input wire we, - input wire [ADDR_WIDTH-1:0] waddr, - input wire [DATA_WIDTH-1:0] din, - input wire [ADDR_WIDTH-1:0] raddr, - //output register? - input wire rden, - output reg [DATA_WIDTH-1:0] dout //yes -); - - (* ram_style = MEM_STYLE, rw_addr_collision = "yes" *) - reg [DATA_WIDTH-1:0] mem[0:DEPTH-1]; - reg [ADDR_WIDTH-1:0] raddr_reg; - - //write to ram - always @(posedge clk) begin - if (we) - mem[waddr] <= din; - end - - //buffer the raddr - always @(posedge clk) begin - raddr_reg <= raddr; - end - - //read from ram, output register? - always @(posedge clk ) begin - if (reset) - dout <= 0; - else if (rden) - dout <= mem[raddr_reg]; - end// yes - -endmodule diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_flow_control_loop_pipe_sequential_init.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_flow_control_loop_pipe_sequential_init.v deleted file mode 100644 index fc33e2d8..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_flow_control_loop_pipe_sequential_init.v +++ /dev/null @@ -1,104 +0,0 @@ -// ============================================================== -// Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Tool Version Limit: 2019.12 -// Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// ============================================================== - -`timescale 1 ns / 1 ps - -module HEAT3D_flow_control_loop_pipe_sequential_init( - ap_clk, - ap_rst, - ap_start, - ap_ready, - ap_done, - ap_start_int, - ap_ready_int, - ap_done_int, - ap_continue_int, - ap_loop_init, - ap_loop_exit_ready, - ap_loop_exit_done -); - -input ap_clk; -input ap_rst; - -//Block level handshake with outside loop -input ap_start; -output ap_ready; -output ap_done; - -//Block level handshake with loop body -output ap_start_int; -input ap_ready_int; -input ap_done_int; -output ap_continue_int; - -//Init live in variables -output ap_loop_init; -wire ap_loop_init; -reg ap_loop_init_int; -reg ap_done; -reg ap_done_cache; - -//Exit signal from loop body -input ap_loop_exit_ready; -input ap_loop_exit_done; - -// power-on initialization -initial begin -#0 ap_loop_init_int = 1'b1; -#0 ap_done_cache = 1'b0; -end - -assign ap_start_int = ap_start; - -assign ap_continue_int = 1'b1; - -assign ap_ready = ap_loop_exit_ready; - -//ap_loop_init is valid for the first II -//of the first loop run so as to enable -//the init block ops which are pushed into -//the first state of the pipeline region -always @ (posedge ap_clk) -begin - if (ap_rst == 1'b1) begin - ap_loop_init_int <= 1'b1; - end else if(ap_loop_exit_done == 1'b1) begin - ap_loop_init_int <= 1'b1; - end else if(ap_ready_int == 1'b1) begin - ap_loop_init_int <= 1'b0; - end -end - -assign ap_loop_init = ap_loop_init_int & ap_start; - -// if no ap_continue port and current module is not top module, -// ap_done handshakes with ap_start. Internally, flow control sends out -// ap_conintue_int = 1'b1 so the ap_done_int is asserted high for 1 clock cycle. -// ap_done_cache is used to record ap_done_int, and de-assert if ap_start_int -// is asserted, so DUT can start the next run -always @(posedge ap_clk) -begin - if (ap_rst == 1'b1) begin - ap_done_cache <= 1'b0; - end else if (ap_done_int == 1'b1) begin - ap_done_cache <= 1'b1; - end else if (ap_start_int == 1'b1) begin - ap_done_cache <= 1'b0; - end -end - -// if no ap_continue port and current module is not top module, ap_done handshakes with ap_start -always @(*) -begin - if ((ap_done_int == 1'b1) || ((ap_done_cache == 1'b1) && (ap_start_int == 1'b0))) begin - ap_done = 1'b1; - end else begin - ap_done = 1'b0; - end -end - -endmodule diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0.v deleted file mode 100644 index b9238a38..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0.v +++ /dev/null @@ -1,76 +0,0 @@ -// ============================================================== -// Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Version: 2022.2 -// Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// ============================================================== - -`timescale 1ns/1ps - -module HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0 -#(parameter - ID = 1, - NUM_STAGE = 3, - din0_WIDTH = 32, - din1_WIDTH = 32, - dout_WIDTH = 32 -)( - input wire clk, - input wire reset, - input wire ce, - input wire [din0_WIDTH-1:0] din0, - input wire [din1_WIDTH-1:0] din1, - output wire [dout_WIDTH-1:0] dout -); -//------------------------Local signal------------------- -wire aclk; -wire aclken; -wire a_tvalid; -wire [31:0] a_tdata; -wire b_tvalid; -wire [31:0] b_tdata; -wire r_tvalid; -wire [31:0] r_tdata; -reg [din0_WIDTH-1:0] din0_buf1; -reg [din1_WIDTH-1:0] din1_buf1; -reg ce_r; -wire [dout_WIDTH-1:0] dout_i; -reg [dout_WIDTH-1:0] dout_r; -//------------------------Instantiation------------------ -HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0_ip HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0_ip_u ( - .aclk ( aclk ), - .aclken ( aclken ), - .s_axis_a_tvalid ( a_tvalid ), - .s_axis_a_tdata ( a_tdata ), - .s_axis_b_tvalid ( b_tvalid ), - .s_axis_b_tdata ( b_tdata ), - .m_axis_result_tvalid ( r_tvalid ), - .m_axis_result_tdata ( r_tdata ) -); -//------------------------Body--------------------------- -assign aclk = clk; -assign aclken = ce_r; -assign a_tvalid = 1'b1; -assign a_tdata = din0_buf1; -assign b_tvalid = 1'b1; -assign b_tdata = din1_buf1; -assign dout_i = r_tdata; - -always @(posedge clk) begin - if (ce) begin - din0_buf1 <= din0; - din1_buf1 <= din1; - end -end - -always @ (posedge clk) begin - ce_r <= ce; -end - -always @ (posedge clk) begin - if (ce_r) begin - dout_r <= dout_i; - end -end - -assign dout = ce_r?dout_i:dout_r; -endmodule diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0_ip.tcl b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0_ip.tcl deleted file mode 100644 index b6e101b2..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0_ip.tcl +++ /dev/null @@ -1,45 +0,0 @@ -# BEGIN Vivado Commands -set vivado_ver [version -short] -set fpo_ver 7.1 -if {[regexp -nocase {2015\.1.*} $vivado_ver match]} { - set fpo_ver 7.0 -} -create_ip -name floating_point -version $fpo_ver -vendor xilinx.com -library ip -module_name HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0_ip -# BEGIN Vivado Commands -# BEGIN Vivado Parameters -set_property -dict [list CONFIG.a_precision_type Single \ - CONFIG.a_tuser_width 1 \ - CONFIG.add_sub_value Both \ - CONFIG.b_tuser_width 1 \ - CONFIG.c_a_exponent_width 8 \ - CONFIG.c_a_fraction_width 24 \ - CONFIG.c_compare_operation Programmable \ - CONFIG.c_has_divide_by_zero false \ - CONFIG.c_has_invalid_op false \ - CONFIG.c_has_overflow false \ - CONFIG.c_has_underflow false \ - CONFIG.c_latency 2 \ - CONFIG.c_mult_usage Max_Usage \ - CONFIG.c_optimization Speed_Optimized \ - CONFIG.c_rate 1 \ - CONFIG.c_result_exponent_width 8 \ - CONFIG.c_result_fraction_width 24 \ - CONFIG.component_name HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0_ip \ - CONFIG.flow_control NonBlocking \ - CONFIG.has_a_tlast false \ - CONFIG.has_a_tuser false \ - CONFIG.has_aclken true \ - CONFIG.has_aresetn false \ - CONFIG.has_b_tlast false \ - CONFIG.has_b_tuser false \ - CONFIG.has_operation_tlast false \ - CONFIG.has_operation_tuser false \ - CONFIG.has_result_tready false \ - CONFIG.maximum_latency false \ - CONFIG.operation_tuser_width 1 \ - CONFIG.operation_type Multiply \ - CONFIG.result_precision_type Single \ - CONFIG.result_tlast_behv Null] -objects [get_ips HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0_ip] -quiet -# END Vivado Parameters -set_property generate_synth_checkpoint false [get_files HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0_ip.xci] -generate_target {synthesis simulation} [get_files HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0_ip.xci] diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0.v deleted file mode 100644 index da8b9134..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0.v +++ /dev/null @@ -1,76 +0,0 @@ -// ============================================================== -// Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Version: 2022.2 -// Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// ============================================================== - -`timescale 1ns/1ps - -module HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0 -#(parameter - ID = 1, - NUM_STAGE = 3, - din0_WIDTH = 32, - din1_WIDTH = 32, - dout_WIDTH = 32 -)( - input wire clk, - input wire reset, - input wire ce, - input wire [din0_WIDTH-1:0] din0, - input wire [din1_WIDTH-1:0] din1, - output wire [dout_WIDTH-1:0] dout -); -//------------------------Local signal------------------- -wire aclk; -wire aclken; -wire a_tvalid; -wire [31:0] a_tdata; -wire b_tvalid; -wire [31:0] b_tdata; -wire r_tvalid; -wire [31:0] r_tdata; -reg [din0_WIDTH-1:0] din0_buf1; -reg [din1_WIDTH-1:0] din1_buf1; -reg ce_r; -wire [dout_WIDTH-1:0] dout_i; -reg [dout_WIDTH-1:0] dout_r; -//------------------------Instantiation------------------ -HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0_ip HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0_ip_u ( - .aclk ( aclk ), - .aclken ( aclken ), - .s_axis_a_tvalid ( a_tvalid ), - .s_axis_a_tdata ( a_tdata ), - .s_axis_b_tvalid ( b_tvalid ), - .s_axis_b_tdata ( b_tdata ), - .m_axis_result_tvalid ( r_tvalid ), - .m_axis_result_tdata ( r_tdata ) -); -//------------------------Body--------------------------- -assign aclk = clk; -assign aclken = ce_r; -assign a_tvalid = 1'b1; -assign a_tdata = din0_buf1; -assign b_tvalid = 1'b1; -assign b_tdata = din1_buf1; -assign dout_i = r_tdata; - -always @(posedge clk) begin - if (ce) begin - din0_buf1 <= din0; - din1_buf1 <= din1; - end -end - -always @ (posedge clk) begin - ce_r <= ce; -end - -always @ (posedge clk) begin - if (ce_r) begin - dout_r <= dout_i; - end -end - -assign dout = ce_r?dout_i:dout_r; -endmodule diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0_ip.tcl b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0_ip.tcl deleted file mode 100644 index 5783d463..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0_ip.tcl +++ /dev/null @@ -1,45 +0,0 @@ -# BEGIN Vivado Commands -set vivado_ver [version -short] -set fpo_ver 7.1 -if {[regexp -nocase {2015\.1.*} $vivado_ver match]} { - set fpo_ver 7.0 -} -create_ip -name floating_point -version $fpo_ver -vendor xilinx.com -library ip -module_name HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0_ip -# BEGIN Vivado Commands -# BEGIN Vivado Parameters -set_property -dict [list CONFIG.a_precision_type Single \ - CONFIG.a_tuser_width 1 \ - CONFIG.add_sub_value Subtract \ - CONFIG.b_tuser_width 1 \ - CONFIG.c_a_exponent_width 8 \ - CONFIG.c_a_fraction_width 24 \ - CONFIG.c_compare_operation Programmable \ - CONFIG.c_has_divide_by_zero false \ - CONFIG.c_has_invalid_op false \ - CONFIG.c_has_overflow false \ - CONFIG.c_has_underflow false \ - CONFIG.c_latency 5 \ - CONFIG.c_mult_usage Full_Usage \ - CONFIG.c_optimization Speed_Optimized \ - CONFIG.c_rate 1 \ - CONFIG.c_result_exponent_width 8 \ - CONFIG.c_result_fraction_width 24 \ - CONFIG.component_name HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0_ip \ - CONFIG.flow_control NonBlocking \ - CONFIG.has_a_tlast false \ - CONFIG.has_a_tuser false \ - CONFIG.has_aclken true \ - CONFIG.has_aresetn false \ - CONFIG.has_b_tlast false \ - CONFIG.has_b_tuser false \ - CONFIG.has_operation_tlast false \ - CONFIG.has_operation_tuser false \ - CONFIG.has_result_tready false \ - CONFIG.maximum_latency false \ - CONFIG.operation_tuser_width 1 \ - CONFIG.operation_type Add_Subtract \ - CONFIG.result_precision_type Single \ - CONFIG.result_tlast_behv Null] -objects [get_ips HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0_ip] -quiet -# END Vivado Parameters -set_property generate_synth_checkpoint false [get_files HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0_ip.xci] -generate_target {synthesis simulation} [get_files HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0_ip.xci] diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/a_axi_write_broadcastor_1_to_3.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/a_axi_write_broadcastor_1_to_3.v deleted file mode 100644 index d84fe57e..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/a_axi_write_broadcastor_1_to_3.v +++ /dev/null @@ -1,269 +0,0 @@ - -module a_axi_write_broadcastor_1_to_3 ( - ap_clk, - - s_axi_control_AWVALID_slr_0, - s_axi_control_AWREADY_slr_0, - s_axi_control_AWADDR_slr_0, - s_axi_control_WVALID_slr_0, - s_axi_control_WREADY_slr_0, - s_axi_control_WDATA_slr_0, - s_axi_control_WSTRB_slr_0, - s_axi_control_AWVALID_slr_1, - s_axi_control_AWREADY_slr_1, - s_axi_control_AWADDR_slr_1, - s_axi_control_WVALID_slr_1, - s_axi_control_WREADY_slr_1, - s_axi_control_WDATA_slr_1, - s_axi_control_WSTRB_slr_1, - s_axi_control_AWVALID_slr_2, - s_axi_control_AWREADY_slr_2, - s_axi_control_AWADDR_slr_2, - s_axi_control_WVALID_slr_2, - s_axi_control_WREADY_slr_2, - s_axi_control_WDATA_slr_2, - s_axi_control_WSTRB_slr_2, - s_axi_control_AWVALID, - s_axi_control_AWREADY, - s_axi_control_AWADDR, - s_axi_control_WVALID, - s_axi_control_WREADY, - s_axi_control_WDATA, - s_axi_control_WSTRB -); - parameter C_S_AXI_CONTROL_DATA_WIDTH = 32; - parameter C_S_AXI_CONTROL_ADDR_WIDTH = 9; - parameter C_S_AXI_DATA_WIDTH = 32; - parameter C_S_AXI_CONTROL_WSTRB_WIDTH = 32 / 8; - parameter C_S_AXI_WSTRB_WIDTH = 32 / 8; - - input ap_clk; - - input s_axi_control_AWVALID; - output s_axi_control_AWREADY; - input [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR; - input s_axi_control_WVALID; - output s_axi_control_WREADY; - input [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA; - input [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB; - - output s_axi_control_AWVALID_slr_0; - input s_axi_control_AWREADY_slr_0; - output [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR_slr_0; - output s_axi_control_WVALID_slr_0; - input s_axi_control_WREADY_slr_0; - output [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA_slr_0; - output [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB_slr_0; - - output s_axi_control_AWVALID_slr_1; - input s_axi_control_AWREADY_slr_1; - output [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR_slr_1; - output s_axi_control_WVALID_slr_1; - input s_axi_control_WREADY_slr_1; - output [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA_slr_1; - output [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB_slr_1; - - output s_axi_control_AWVALID_slr_2; - input s_axi_control_AWREADY_slr_2; - output [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR_slr_2; - output s_axi_control_WVALID_slr_2; - input s_axi_control_WREADY_slr_2; - output [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA_slr_2; - output [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB_slr_2; - - wire s_axi_control_AWVALID_slr_0_inner; - wire s_axi_control_AWREADY_slr_0_inner; - wire [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR_slr_0_inner; - wire s_axi_control_WVALID_slr_0_inner; - wire s_axi_control_WREADY_slr_0_inner; - wire [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA_slr_0_inner; - wire [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB_slr_0_inner; - - wire s_axi_control_AWVALID_slr_1_inner; - wire s_axi_control_AWREADY_slr_1_inner; - wire [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR_slr_1_inner; - wire s_axi_control_WVALID_slr_1_inner; - wire s_axi_control_WREADY_slr_1_inner; - wire [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA_slr_1_inner; - wire [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB_slr_1_inner; - - wire s_axi_control_AWVALID_slr_2_inner; - wire s_axi_control_AWREADY_slr_2_inner; - wire [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR_slr_2_inner; - wire s_axi_control_WVALID_slr_2_inner; - wire s_axi_control_WREADY_slr_2_inner; - wire [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA_slr_2_inner; - wire [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB_slr_2_inner; - - // broadcast the AW channel - assign s_axi_control_AWADDR_slr_0_inner = s_axi_control_AWADDR; - assign s_axi_control_AWADDR_slr_1_inner = s_axi_control_AWADDR; - assign s_axi_control_AWADDR_slr_2_inner = s_axi_control_AWADDR; - - assign s_axi_control_AWVALID_slr_0_inner = s_axi_control_AWVALID; - assign s_axi_control_AWVALID_slr_1_inner = s_axi_control_AWVALID; - assign s_axi_control_AWVALID_slr_2_inner = s_axi_control_AWVALID; - - assign s_axi_control_AWREADY = s_axi_control_AWREADY_slr_0_inner & - s_axi_control_AWREADY_slr_1_inner & - s_axi_control_AWREADY_slr_2_inner; - - // broadcast the W channel - assign s_axi_control_WDATA_slr_0_inner = s_axi_control_WDATA; - assign s_axi_control_WDATA_slr_1_inner = s_axi_control_WDATA; - assign s_axi_control_WDATA_slr_2_inner = s_axi_control_WDATA; - - assign s_axi_control_WSTRB_slr_0_inner = s_axi_control_WSTRB; - assign s_axi_control_WSTRB_slr_1_inner = s_axi_control_WSTRB; - assign s_axi_control_WSTRB_slr_2_inner = s_axi_control_WSTRB; - - assign s_axi_control_WVALID_slr_0_inner = s_axi_control_WVALID; - assign s_axi_control_WVALID_slr_1_inner = s_axi_control_WVALID; - assign s_axi_control_WVALID_slr_2_inner = s_axi_control_WVALID; - - assign s_axi_control_WREADY = s_axi_control_WREADY_slr_0_inner & - s_axi_control_WREADY_slr_1_inner & - s_axi_control_WREADY_slr_2_inner; - - relay_station - #( - .DATA_WIDTH(C_S_AXI_CONTROL_ADDR_WIDTH), - .DEPTH(24), - .ADDR_WIDTH(1), - .LEVEL( 3 ) - ) - AW_pipeline_slr_0 - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din (s_axi_control_AWADDR_slr_0_inner), - .if_full_n (s_axi_control_AWREADY_slr_0_inner), - .if_write (s_axi_control_AWVALID_slr_0_inner), - - .if_dout (s_axi_control_AWADDR_slr_0), - .if_empty_n (s_axi_control_AWVALID_slr_0), - .if_read (s_axi_control_AWREADY_slr_0) - ); - - relay_station - #( - .DATA_WIDTH(C_S_AXI_CONTROL_DATA_WIDTH + C_S_AXI_CONTROL_WSTRB_WIDTH), - .DEPTH(24), - .ADDR_WIDTH(1), - .LEVEL( 3 ) - ) - W_pipeline_slr_0 - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din ({s_axi_control_WDATA_slr_0_inner, s_axi_control_WSTRB_slr_0_inner}), - .if_full_n (s_axi_control_WREADY_slr_0_inner), - .if_write (s_axi_control_WVALID_slr_0_inner), - - .if_dout ({s_axi_control_WDATA_slr_0, s_axi_control_WSTRB_slr_0}), - .if_empty_n (s_axi_control_WVALID_slr_0), - .if_read (s_axi_control_WREADY_slr_0) - ); - - - relay_station - #( - .DATA_WIDTH(C_S_AXI_CONTROL_ADDR_WIDTH), - .DEPTH(24), - .ADDR_WIDTH(1), - .LEVEL( 3 ) - ) - AW_pipeline_slr_1 - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din (s_axi_control_AWADDR_slr_1_inner), - .if_full_n (s_axi_control_AWREADY_slr_1_inner), - .if_write (s_axi_control_AWVALID_slr_1_inner), - - .if_dout (s_axi_control_AWADDR_slr_1), - .if_empty_n (s_axi_control_AWVALID_slr_1), - .if_read (s_axi_control_AWREADY_slr_1) - ); - - relay_station - #( - .DATA_WIDTH(C_S_AXI_CONTROL_DATA_WIDTH + C_S_AXI_CONTROL_WSTRB_WIDTH), - .DEPTH(24), - .ADDR_WIDTH(1), - .LEVEL( 3 ) - ) - W_pipeline_slr_1 - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din ({s_axi_control_WDATA_slr_1_inner, s_axi_control_WSTRB_slr_1_inner}), - .if_full_n (s_axi_control_WREADY_slr_1_inner), - .if_write (s_axi_control_WVALID_slr_1_inner), - - .if_dout ({s_axi_control_WDATA_slr_1, s_axi_control_WSTRB_slr_1}), - .if_empty_n (s_axi_control_WVALID_slr_1), - .if_read (s_axi_control_WREADY_slr_1) - ); - - - relay_station - #( - .DATA_WIDTH(C_S_AXI_CONTROL_ADDR_WIDTH), - .DEPTH(24), - .ADDR_WIDTH(1), - .LEVEL( 3 ) - ) - AW_pipeline_slr_2 - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din (s_axi_control_AWADDR_slr_2_inner), - .if_full_n (s_axi_control_AWREADY_slr_2_inner), - .if_write (s_axi_control_AWVALID_slr_2_inner), - - .if_dout (s_axi_control_AWADDR_slr_2), - .if_empty_n (s_axi_control_AWVALID_slr_2), - .if_read (s_axi_control_AWREADY_slr_2) - ); - - relay_station - #( - .DATA_WIDTH(C_S_AXI_CONTROL_DATA_WIDTH + C_S_AXI_CONTROL_WSTRB_WIDTH), - .DEPTH(24), - .ADDR_WIDTH(1), - .LEVEL( 3 ) - ) - W_pipeline_slr_2 - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din ({s_axi_control_WDATA_slr_2_inner, s_axi_control_WSTRB_slr_2_inner}), - .if_full_n (s_axi_control_WREADY_slr_2_inner), - .if_write (s_axi_control_WVALID_slr_2_inner), - - .if_dout ({s_axi_control_WDATA_slr_2, s_axi_control_WSTRB_slr_2}), - .if_empty_n (s_axi_control_WVALID_slr_2), - .if_read (s_axi_control_WREADY_slr_2) - ); - - -endmodule diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/a_axi_write_broadcastor_1_to_4.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/a_axi_write_broadcastor_1_to_4.v deleted file mode 100644 index 055ed0bd..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/a_axi_write_broadcastor_1_to_4.v +++ /dev/null @@ -1,346 +0,0 @@ - -module a_axi_write_broadcastor_1_to_4 ( - ap_clk, - - s_axi_control_AWVALID_slr_0, - s_axi_control_AWREADY_slr_0, - s_axi_control_AWADDR_slr_0, - s_axi_control_WVALID_slr_0, - s_axi_control_WREADY_slr_0, - s_axi_control_WDATA_slr_0, - s_axi_control_WSTRB_slr_0, - s_axi_control_AWVALID_slr_1, - s_axi_control_AWREADY_slr_1, - s_axi_control_AWADDR_slr_1, - s_axi_control_WVALID_slr_1, - s_axi_control_WREADY_slr_1, - s_axi_control_WDATA_slr_1, - s_axi_control_WSTRB_slr_1, - s_axi_control_AWVALID_slr_2, - s_axi_control_AWREADY_slr_2, - s_axi_control_AWADDR_slr_2, - s_axi_control_WVALID_slr_2, - s_axi_control_WREADY_slr_2, - s_axi_control_WDATA_slr_2, - s_axi_control_WSTRB_slr_2, - s_axi_control_AWVALID_slr_3, - s_axi_control_AWREADY_slr_3, - s_axi_control_AWADDR_slr_3, - s_axi_control_WVALID_slr_3, - s_axi_control_WREADY_slr_3, - s_axi_control_WDATA_slr_3, - s_axi_control_WSTRB_slr_3, - s_axi_control_AWVALID, - s_axi_control_AWREADY, - s_axi_control_AWADDR, - s_axi_control_WVALID, - s_axi_control_WREADY, - s_axi_control_WDATA, - s_axi_control_WSTRB -); - parameter C_S_AXI_CONTROL_DATA_WIDTH = 32; - parameter C_S_AXI_CONTROL_ADDR_WIDTH = 9; - parameter C_S_AXI_DATA_WIDTH = 32; - parameter C_S_AXI_CONTROL_WSTRB_WIDTH = 32 / 8; - parameter C_S_AXI_WSTRB_WIDTH = 32 / 8; - - input ap_clk; - input s_axi_control_AWVALID; - output s_axi_control_AWREADY; - input [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR; - input s_axi_control_WVALID; - output s_axi_control_WREADY; - input [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA; - input [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB; - - output s_axi_control_AWVALID_slr_0; - input s_axi_control_AWREADY_slr_0; - output [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR_slr_0; - output s_axi_control_WVALID_slr_0; - input s_axi_control_WREADY_slr_0; - output [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA_slr_0; - output [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB_slr_0; - - output s_axi_control_AWVALID_slr_1; - input s_axi_control_AWREADY_slr_1; - output [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR_slr_1; - output s_axi_control_WVALID_slr_1; - input s_axi_control_WREADY_slr_1; - output [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA_slr_1; - output [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB_slr_1; - - output s_axi_control_AWVALID_slr_2; - input s_axi_control_AWREADY_slr_2; - output [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR_slr_2; - output s_axi_control_WVALID_slr_2; - input s_axi_control_WREADY_slr_2; - output [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA_slr_2; - output [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB_slr_2; - - output s_axi_control_AWVALID_slr_3; - input s_axi_control_AWREADY_slr_3; - output [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR_slr_3; - output s_axi_control_WVALID_slr_3; - input s_axi_control_WREADY_slr_3; - output [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA_slr_3; - output [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB_slr_3; - - wire s_axi_control_AWVALID_slr_0_inner; - wire s_axi_control_AWREADY_slr_0_inner; - wire [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR_slr_0_inner; - wire s_axi_control_WVALID_slr_0_inner; - wire s_axi_control_WREADY_slr_0_inner; - wire [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA_slr_0_inner; - wire [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB_slr_0_inner; - - wire s_axi_control_AWVALID_slr_1_inner; - wire s_axi_control_AWREADY_slr_1_inner; - wire [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR_slr_1_inner; - wire s_axi_control_WVALID_slr_1_inner; - wire s_axi_control_WREADY_slr_1_inner; - wire [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA_slr_1_inner; - wire [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB_slr_1_inner; - - wire s_axi_control_AWVALID_slr_2_inner; - wire s_axi_control_AWREADY_slr_2_inner; - wire [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR_slr_2_inner; - wire s_axi_control_WVALID_slr_2_inner; - wire s_axi_control_WREADY_slr_2_inner; - wire [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA_slr_2_inner; - wire [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB_slr_2_inner; - - wire s_axi_control_AWVALID_slr_3_inner; - wire s_axi_control_AWREADY_slr_3_inner; - wire [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR_slr_3_inner; - wire s_axi_control_WVALID_slr_3_inner; - wire s_axi_control_WREADY_slr_3_inner; - wire [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA_slr_3_inner; - wire [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB_slr_3_inner; - - // broadcast the AW channel - assign s_axi_control_AWADDR_slr_0_inner = s_axi_control_AWADDR; - assign s_axi_control_AWADDR_slr_1_inner = s_axi_control_AWADDR; - assign s_axi_control_AWADDR_slr_2_inner = s_axi_control_AWADDR; - assign s_axi_control_AWADDR_slr_3_inner = s_axi_control_AWADDR; - - assign s_axi_control_AWVALID_slr_0_inner = s_axi_control_AWVALID; - assign s_axi_control_AWVALID_slr_1_inner = s_axi_control_AWVALID; - assign s_axi_control_AWVALID_slr_2_inner = s_axi_control_AWVALID; - assign s_axi_control_AWVALID_slr_3_inner = s_axi_control_AWVALID; - - assign s_axi_control_AWREADY = s_axi_control_AWREADY_slr_0_inner & - s_axi_control_AWREADY_slr_1_inner & - s_axi_control_AWREADY_slr_2_inner & - s_axi_control_AWREADY_slr_3_inner; - - // broadcast the W channel - assign s_axi_control_WDATA_slr_0_inner = s_axi_control_WDATA; - assign s_axi_control_WDATA_slr_1_inner = s_axi_control_WDATA; - assign s_axi_control_WDATA_slr_2_inner = s_axi_control_WDATA; - assign s_axi_control_WDATA_slr_3_inner = s_axi_control_WDATA; - - assign s_axi_control_WSTRB_slr_0_inner = s_axi_control_WSTRB; - assign s_axi_control_WSTRB_slr_1_inner = s_axi_control_WSTRB; - assign s_axi_control_WSTRB_slr_2_inner = s_axi_control_WSTRB; - assign s_axi_control_WSTRB_slr_3_inner = s_axi_control_WSTRB; - - assign s_axi_control_WVALID_slr_0_inner = s_axi_control_WVALID; - assign s_axi_control_WVALID_slr_1_inner = s_axi_control_WVALID; - assign s_axi_control_WVALID_slr_2_inner = s_axi_control_WVALID; - assign s_axi_control_WVALID_slr_3_inner = s_axi_control_WVALID; - - assign s_axi_control_WREADY = s_axi_control_WREADY_slr_0_inner & - s_axi_control_WREADY_slr_1_inner & - s_axi_control_WREADY_slr_2_inner & - s_axi_control_WREADY_slr_3_inner; - - relay_station - #( - .DATA_WIDTH(C_S_AXI_CONTROL_ADDR_WIDTH), - .DEPTH(24), - .ADDR_WIDTH(1), - .LEVEL( 3 ) - ) - AW_pipeline_slr_0 - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din (s_axi_control_AWADDR_slr_0_inner), - .if_full_n (s_axi_control_AWREADY_slr_0_inner), - .if_write (s_axi_control_AWVALID_slr_0_inner), - - .if_dout (s_axi_control_AWADDR_slr_0), - .if_empty_n (s_axi_control_AWVALID_slr_0), - .if_read (s_axi_control_AWREADY_slr_0) - ); - - relay_station - #( - .DATA_WIDTH(C_S_AXI_CONTROL_DATA_WIDTH + C_S_AXI_CONTROL_WSTRB_WIDTH), - .DEPTH(24), - .ADDR_WIDTH(1), - .LEVEL( 3 ) - ) - W_pipeline_slr_0 - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din ({s_axi_control_WDATA_slr_0_inner, s_axi_control_WSTRB_slr_0_inner}), - .if_full_n (s_axi_control_WREADY_slr_0_inner), - .if_write (s_axi_control_WVALID_slr_0_inner), - - .if_dout ({s_axi_control_WDATA_slr_0, s_axi_control_WSTRB_slr_0}), - .if_empty_n (s_axi_control_WVALID_slr_0), - .if_read (s_axi_control_WREADY_slr_0) - ); - - - relay_station - #( - .DATA_WIDTH(C_S_AXI_CONTROL_ADDR_WIDTH), - .DEPTH(24), - .ADDR_WIDTH(1), - .LEVEL( 3 ) - ) - AW_pipeline_slr_1 - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din (s_axi_control_AWADDR_slr_1_inner), - .if_full_n (s_axi_control_AWREADY_slr_1_inner), - .if_write (s_axi_control_AWVALID_slr_1_inner), - - .if_dout (s_axi_control_AWADDR_slr_1), - .if_empty_n (s_axi_control_AWVALID_slr_1), - .if_read (s_axi_control_AWREADY_slr_1) - ); - - relay_station - #( - .DATA_WIDTH(C_S_AXI_CONTROL_DATA_WIDTH + C_S_AXI_CONTROL_WSTRB_WIDTH), - .DEPTH(24), - .ADDR_WIDTH(1), - .LEVEL( 3 ) - ) - W_pipeline_slr_1 - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din ({s_axi_control_WDATA_slr_1_inner, s_axi_control_WSTRB_slr_1_inner}), - .if_full_n (s_axi_control_WREADY_slr_1_inner), - .if_write (s_axi_control_WVALID_slr_1_inner), - - .if_dout ({s_axi_control_WDATA_slr_1, s_axi_control_WSTRB_slr_1}), - .if_empty_n (s_axi_control_WVALID_slr_1), - .if_read (s_axi_control_WREADY_slr_1) - ); - - - relay_station - #( - .DATA_WIDTH(C_S_AXI_CONTROL_ADDR_WIDTH), - .DEPTH(24), - .ADDR_WIDTH(1), - .LEVEL( 3 ) - ) - AW_pipeline_slr_2 - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din (s_axi_control_AWADDR_slr_2_inner), - .if_full_n (s_axi_control_AWREADY_slr_2_inner), - .if_write (s_axi_control_AWVALID_slr_2_inner), - - .if_dout (s_axi_control_AWADDR_slr_2), - .if_empty_n (s_axi_control_AWVALID_slr_2), - .if_read (s_axi_control_AWREADY_slr_2) - ); - - relay_station - #( - .DATA_WIDTH(C_S_AXI_CONTROL_DATA_WIDTH + C_S_AXI_CONTROL_WSTRB_WIDTH), - .DEPTH(24), - .ADDR_WIDTH(1), - .LEVEL( 3 ) - ) - W_pipeline_slr_2 - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din ({s_axi_control_WDATA_slr_2_inner, s_axi_control_WSTRB_slr_2_inner}), - .if_full_n (s_axi_control_WREADY_slr_2_inner), - .if_write (s_axi_control_WVALID_slr_2_inner), - - .if_dout ({s_axi_control_WDATA_slr_2, s_axi_control_WSTRB_slr_2}), - .if_empty_n (s_axi_control_WVALID_slr_2), - .if_read (s_axi_control_WREADY_slr_2) - ); - - - relay_station - #( - .DATA_WIDTH(C_S_AXI_CONTROL_ADDR_WIDTH), - .DEPTH(24), - .ADDR_WIDTH(1), - .LEVEL( 3 ) - ) - AW_pipeline_slr_3 - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din (s_axi_control_AWADDR_slr_3_inner), - .if_full_n (s_axi_control_AWREADY_slr_3_inner), - .if_write (s_axi_control_AWVALID_slr_3_inner), - - .if_dout (s_axi_control_AWADDR_slr_3), - .if_empty_n (s_axi_control_AWVALID_slr_3), - .if_read (s_axi_control_AWREADY_slr_3) - ); - - relay_station - #( - .DATA_WIDTH(C_S_AXI_CONTROL_DATA_WIDTH + C_S_AXI_CONTROL_WSTRB_WIDTH), - .DEPTH(24), - .ADDR_WIDTH(1), - .LEVEL( 3 ) - ) - W_pipeline_slr_3 - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din ({s_axi_control_WDATA_slr_3_inner, s_axi_control_WSTRB_slr_3_inner}), - .if_full_n (s_axi_control_WREADY_slr_3_inner), - .if_write (s_axi_control_WVALID_slr_3_inner), - - .if_dout ({s_axi_control_WDATA_slr_3, s_axi_control_WSTRB_slr_3}), - .if_empty_n (s_axi_control_WVALID_slr_3), - .if_read (s_axi_control_WREADY_slr_3) - ); - - - -endmodule diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/arbiter.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/arbiter.v deleted file mode 100644 index cfac70d1..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/arbiter.v +++ /dev/null @@ -1,159 +0,0 @@ -/* - -Copyright (c) 2014-2021 Alex Forencich - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -// Language: Verilog 2001 - -`resetall -`timescale 1ns / 1ps -`default_nettype none - -/* - * Arbiter module - */ -module arbiter # -( - parameter PORTS = 4, - // select round robin arbitration - parameter ARB_TYPE_ROUND_ROBIN = 0, - // blocking arbiter enable - parameter ARB_BLOCK = 0, - // block on acknowledge assert when nonzero, request deassert when 0 - parameter ARB_BLOCK_ACK = 1, - // LSB priority selection - parameter ARB_LSB_HIGH_PRIORITY = 0 -) -( - input wire clk, - input wire rst, - - input wire [PORTS-1:0] request, - input wire [PORTS-1:0] acknowledge, - - output wire [PORTS-1:0] grant, - output wire grant_valid, - output wire [$clog2(PORTS)-1:0] grant_encoded -); - -reg [PORTS-1:0] grant_reg = 0, grant_next; -reg grant_valid_reg = 0, grant_valid_next; -reg [$clog2(PORTS)-1:0] grant_encoded_reg = 0, grant_encoded_next; - -assign grant_valid = grant_valid_reg; -assign grant = grant_reg; -assign grant_encoded = grant_encoded_reg; - -wire request_valid; -wire [$clog2(PORTS)-1:0] request_index; -wire [PORTS-1:0] request_mask; - -priority_encoder #( - .WIDTH(PORTS), - .LSB_HIGH_PRIORITY(ARB_LSB_HIGH_PRIORITY) -) -priority_encoder_inst ( - .input_unencoded(request), - .output_valid(request_valid), - .output_encoded(request_index), - .output_unencoded(request_mask) -); - -reg [PORTS-1:0] mask_reg = 0, mask_next; - -wire masked_request_valid; -wire [$clog2(PORTS)-1:0] masked_request_index; -wire [PORTS-1:0] masked_request_mask; - -priority_encoder #( - .WIDTH(PORTS), - .LSB_HIGH_PRIORITY(ARB_LSB_HIGH_PRIORITY) -) -priority_encoder_masked ( - .input_unencoded(request & mask_reg), - .output_valid(masked_request_valid), - .output_encoded(masked_request_index), - .output_unencoded(masked_request_mask) -); - -always @* begin - grant_next = 0; - grant_valid_next = 0; - grant_encoded_next = 0; - mask_next = mask_reg; - - if (ARB_BLOCK && !ARB_BLOCK_ACK && grant_reg & request) begin - // granted request still asserted; hold it - grant_valid_next = grant_valid_reg; - grant_next = grant_reg; - grant_encoded_next = grant_encoded_reg; - end else if (ARB_BLOCK && ARB_BLOCK_ACK && grant_valid && !(grant_reg & acknowledge)) begin - // granted request not yet acknowledged; hold it - grant_valid_next = grant_valid_reg; - grant_next = grant_reg; - grant_encoded_next = grant_encoded_reg; - end else if (request_valid) begin - if (ARB_TYPE_ROUND_ROBIN) begin - if (masked_request_valid) begin - grant_valid_next = 1; - grant_next = masked_request_mask; - grant_encoded_next = masked_request_index; - if (ARB_LSB_HIGH_PRIORITY) begin - mask_next = {PORTS{1'b1}} << (masked_request_index + 1); - end else begin - mask_next = {PORTS{1'b1}} >> (PORTS - masked_request_index); - end - end else begin - grant_valid_next = 1; - grant_next = request_mask; - grant_encoded_next = request_index; - if (ARB_LSB_HIGH_PRIORITY) begin - mask_next = {PORTS{1'b1}} << (request_index + 1); - end else begin - mask_next = {PORTS{1'b1}} >> (PORTS - request_index); - end - end - end else begin - grant_valid_next = 1; - grant_next = request_mask; - grant_encoded_next = request_index; - end - end -end - -always @(posedge clk) begin - if (rst) begin - grant_reg <= 0; - grant_valid_reg <= 0; - grant_encoded_reg <= 0; - mask_reg <= 0; - end else begin - grant_reg <= grant_next; - grant_valid_reg <= grant_valid_next; - grant_encoded_reg <= grant_encoded_next; - mask_reg <= mask_next; - end -end - -endmodule - -`resetall diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/async_mmap.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/async_mmap.v deleted file mode 100644 index 2dd27717..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/async_mmap.v +++ /dev/null @@ -1,524 +0,0 @@ -`default_nettype none - -module async_mmap #( - parameter BufferSize = 32, - parameter BufferSizeLog = 5, - parameter AddrWidth = 64, - parameter AxiSideAddrWidth = 64, - parameter DataWidth = 512, - parameter DataWidthBytesLog = 6, // must equal log2(DataWidth/8) - parameter WaitTimeWidth = 4, - parameter BurstLenWidth = 8, - // implement the FIFOs for the read channel - // if set to 0: disconnect the data link - parameter EnableReadChannel = 1, - parameter EnableWriteChannel= 1, - // for burst inference - parameter MaxWaitTime = 3, - parameter MaxBurstLen = 15 -) ( - (* RS_CLK *) input wire clk, - (* RS_RST *) input wire rst, // active high - - // base address for the memory region - (* RS_FF = "offset" *) input wire [63:0] offset, - - // axi write addr channel - (* RS_HS = "aw.valid" *) output wire m_axi_AWVALID, - (* RS_HS = "aw.ready" *) input wire m_axi_AWREADY, - (* RS_HS = "aw.data" *) output wire [AxiSideAddrWidth-1:0] m_axi_AWADDR, - (* RS_HS = "aw.data" *) output wire [0:0] m_axi_AWID, - (* RS_HS = "aw.data" *) output wire [7:0] m_axi_AWLEN, - (* RS_HS = "aw.data" *) output wire [2:0] m_axi_AWSIZE, - (* RS_HS = "aw.data" *) output wire [1:0] m_axi_AWBURST, - (* RS_HS = "aw.data" *) output wire [0:0] m_axi_AWLOCK, - (* RS_HS = "aw.data" *) output wire [3:0] m_axi_AWCACHE, - (* RS_HS = "aw.data" *) output wire [2:0] m_axi_AWPROT, - (* RS_HS = "aw.data" *) output wire [3:0] m_axi_AWQOS, - - // axi write data channel - (* RS_HS = "w.valid" *) output wire m_axi_WVALID, - (* RS_HS = "w.ready" *) input wire m_axi_WREADY, - (* RS_HS = "w.data" *) output wire [DataWidth-1:0] m_axi_WDATA, - (* RS_HS = "w.data" *) output wire [DataWidth/8-1:0] m_axi_WSTRB, - (* RS_HS = "w.data" *) output wire m_axi_WLAST, - - // axi write acknowledge channel - (* RS_HS = "b.valid" *) input wire m_axi_BVALID, - (* RS_HS = "b.ready" *) output wire m_axi_BREADY, - (* RS_HS = "b.data" *) input wire [1:0] m_axi_BRESP, - (* RS_HS = "b.data" *) input wire [0:0] m_axi_BID, - - // axi read addr channel - (* RS_HS = "ar.valid" *) output wire m_axi_ARVALID, - (* RS_HS = "ar.ready" *) input wire m_axi_ARREADY, - (* RS_HS = "ar.data" *) output wire [AxiSideAddrWidth-1:0] m_axi_ARADDR, - (* RS_HS = "ar.data" *) output wire [0:0] m_axi_ARID, - (* RS_HS = "ar.data" *) output wire [7:0] m_axi_ARLEN, - (* RS_HS = "ar.data" *) output wire [2:0] m_axi_ARSIZE, - (* RS_HS = "ar.data" *) output wire [1:0] m_axi_ARBURST, - (* RS_HS = "ar.data" *) output wire [0:0] m_axi_ARLOCK, - (* RS_HS = "ar.data" *) output wire [3:0] m_axi_ARCACHE, - (* RS_HS = "ar.data" *) output wire [2:0] m_axi_ARPROT, - (* RS_HS = "ar.data" *) output wire [3:0] m_axi_ARQOS, - - // axi read response channel - (* RS_HS = "r.valid" *) input wire m_axi_RVALID, - (* RS_HS = "r.ready" *) output wire m_axi_RREADY, - (* RS_HS = "r.data" *) input wire [DataWidth-1:0] m_axi_RDATA, - (* RS_HS = "r.data" *) input wire m_axi_RLAST, - (* RS_HS = "r.data" *) input wire [0:0] m_axi_RID, - (* RS_HS = "r.data" *) input wire [1:0] m_axi_RRESP, - - - // push read addr here - (* RS_HS = "read_addr.data" *) input wire [AddrWidth-1:0] read_addr_din, - (* RS_HS = "read_addr.valid" *) input wire read_addr_write, - (* RS_HS = "read_addr.ready" *) output wire read_addr_full_n, - - // pop read resp here - (* RS_HS = "read_data.data" *) output wire [DataWidth-1:0] read_data_dout, - (* RS_HS = "read_data.ready" *) input wire read_data_read, - (* RS_HS = "read_data.valid" *) output wire read_data_empty_n, - - // push write addr and data here - (* RS_HS = "write_addr.data" *) input wire [AddrWidth-1:0] write_addr_din, - (* RS_HS = "write_addr.valid" *) input wire write_addr_write, - (* RS_HS = "write_addr.ready" *) output wire write_addr_full_n, - (* RS_HS = "write_data.data" *) input wire [DataWidth-1:0] write_data_din, - (* RS_HS = "write_data.valid" *) input wire write_data_write, - (* RS_HS = "write_data.ready" *) output wire write_data_full_n, - - // pop write resp here - (* RS_HS = "write_resp.data" *) output wire [7:0] write_resp_dout, - (* RS_HS = "write_resp.ready" *) input wire write_resp_read, - (* RS_HS = "write_resp.valid" *) output wire write_resp_empty_n -); - - // write addr buffer, from user to burst detector - wire [AddrWidth-1:0] write_addr_dout; - wire write_addr_empty_n; - wire write_addr_read; - - relay_station #( - .DATA_WIDTH(AddrWidth), - .ADDR_WIDTH(BufferSizeLog), - .DEPTH (BufferSize), - .LEVEL (1), - .CONNECT (EnableWriteChannel) - ) write_addr ( - .clk (clk), - .reset(rst), - - // from user - .if_full_n (write_addr_full_n), - .if_write_ce(1'b1), - .if_write (write_addr_write), - .if_din (offset + (write_addr_din << $clog2(DataWidth/8))), - - // to burst detector - .if_empty_n(write_addr_empty_n), - .if_read_ce(1'b1), - .if_read (write_addr_read), - .if_dout (write_addr_dout) - ); - - // burst write addr buffer, from burst detector to axi - wire [BurstLenWidth+AddrWidth-1:0] burst_write_addr_din; - wire burst_write_addr_full_n; - wire burst_write_addr_write; - wire [AddrWidth-1:0] burst_write_addr_dout_addr; - wire [BurstLenWidth-1:0] burst_write_addr_dout_burst_len; - wire burst_write_addr_empty_n; - wire burst_write_addr_read; - - wire [BurstLenWidth-1:0] burst_write_len_din; - wire burst_write_len_full_n; - wire burst_write_len_write; - wire [BurstLenWidth-1:0] burst_write_len_dout; - wire burst_write_len_empty_n; - wire burst_write_len_read; - - wire [BurstLenWidth-1:0] write_req_din; - wire write_req_write; - wire write_req_full_n; - wire [BurstLenWidth-1:0] write_req_dout; - wire write_req_read; - wire write_req_empty_n; - - wire burst_write_last_din; - wire burst_write_last_full_n; - wire burst_write_last_write; - wire burst_write_last_dout; - wire burst_write_last_empty_n; - - detect_burst #( - .AddrWidth (AddrWidth), - .DataWidthBytesLog(DataWidthBytesLog), - .WaitTimeWidth (WaitTimeWidth), - .BurstLenWidth (BurstLenWidth) - ) detect_burst_write ( - .clk(clk), - .rst(rst), - - .max_wait_time(MaxWaitTime[WaitTimeWidth-1:0]), - .max_burst_len(MaxBurstLen[BurstLenWidth-1:0]), - - // input: individual addresses - .addr_dout (write_addr_dout), - .addr_empty_n(write_addr_empty_n), - .addr_read (write_addr_read), - - // output: inferred burst addresses - .addr_din (burst_write_addr_din), - .addr_full_n(burst_write_addr_full_n), - .addr_write (burst_write_addr_write), - - // output: used to generate the "last" signals - .burst_len_0_din (burst_write_len_din), - .burst_len_0_full_n(burst_write_len_full_n), - .burst_len_0_write (burst_write_len_write), - - // output: used to generate write responses - .burst_len_1_din (write_req_din), - .burst_len_1_full_n(write_req_full_n), - .burst_len_1_write (write_req_write) - ); - - relay_station #( - .DATA_WIDTH(BurstLenWidth + AddrWidth), - .ADDR_WIDTH(BufferSizeLog), - .DEPTH (BufferSize), - .LEVEL (1), - .CONNECT (EnableWriteChannel) - ) burst_write_addr ( - .clk (clk), - .reset(rst), - - // from burst detector - .if_full_n (burst_write_addr_full_n), - .if_write_ce(1'b1), - .if_write (burst_write_addr_write), - .if_din (burst_write_addr_din), - - // to axi - .if_empty_n(burst_write_addr_empty_n), - .if_read_ce(1'b1), - .if_read (burst_write_addr_read), - .if_dout ({burst_write_addr_dout_burst_len, burst_write_addr_dout_addr}) - ); - - relay_station #( - .DATA_WIDTH(BurstLenWidth), - .ADDR_WIDTH(BufferSizeLog), - .DEPTH (BufferSize), - .LEVEL (1), - .CONNECT (EnableWriteChannel) - ) burst_write_len ( - .clk (clk), - .reset(rst), - - // from burst detector - .if_full_n (burst_write_len_full_n), - .if_write_ce(1'b1), - .if_write (burst_write_len_write), - .if_din (burst_write_len_din), - - // to last generator - .if_empty_n(burst_write_len_empty_n), - .if_read_ce(1'b1), - .if_read (burst_write_len_read), - .if_dout (burst_write_len_dout) - ); - - // generate last signal for W channel - generate_last #( - .BurstLenWidth(BurstLenWidth) - ) generate_last_unit( - .clk(clk), - .rst(rst), - - .burst_len_dout (burst_write_len_dout), - .burst_len_empty_n(burst_write_len_empty_n), - .burst_len_read (burst_write_len_read), - - .last_din (burst_write_last_din), - .last_full_n(burst_write_last_full_n), - .last_write (burst_write_last_write) - ); - - // write req buffer that remembers the burst length of each write transaction - relay_station #( - .DATA_WIDTH(BurstLenWidth), - .ADDR_WIDTH(BufferSizeLog), - .DEPTH (BufferSize), - .LEVEL (1), - .CONNECT (EnableWriteChannel) - ) write_req ( - .clk (clk), - .reset(rst), - - // from burst detector - .if_full_n (write_req_full_n), - .if_write_ce(1'b1), - .if_write (write_req_write), - .if_din (write_req_din), - - // to write resp buffer - .if_empty_n(write_req_empty_n), - .if_read_ce(1'b1), - .if_read (write_req_read), - .if_dout (write_req_dout) - ); - - // write data buffer - wire [DataWidth-1:0] write_data_dout; - wire write_data_empty_n; - relay_station #( - .DATA_WIDTH(DataWidth), - .ADDR_WIDTH(BufferSizeLog), - .DEPTH (BufferSize), - .LEVEL (1), - .CONNECT (EnableWriteChannel) - ) write_data ( - .clk (clk), - .reset(rst), - - // from user - .if_full_n (write_data_full_n), - .if_write_ce(1'b1), - .if_write (write_data_write), - .if_din (write_data_din), - - // to axi - .if_empty_n(write_data_empty_n), - .if_read_ce(1'b1), - // deal with when data-relay_station is non empty but last-relay_station is empty - .if_read (m_axi_WREADY && burst_write_last_empty_n), - .if_dout (write_data_dout) - ); - - // this relay_station should be synchronized with the wr_data relay_station - relay_station #( - .DATA_WIDTH(1), - .ADDR_WIDTH(BufferSizeLog), - .DEPTH (BufferSize), - .LEVEL (1), - .CONNECT (EnableWriteChannel) - ) burst_write_last ( - .clk (clk), - .reset(rst), - - // from burst detector - .if_full_n (burst_write_last_full_n), - .if_write_ce(1'b1), - .if_write (burst_write_last_write), - .if_din (burst_write_last_din), - - // to axi - .if_empty_n(burst_write_last_empty_n), - .if_read_ce(1'b1), - // deal with when last-relay_station is non-empty while data-relay_station is empty - .if_read (m_axi_WREADY && write_data_empty_n), - .if_dout (burst_write_last_dout) - ); - - // write resp buffer - wire [BurstLenWidth-1:0] write_resp_din = write_req_dout; - wire write_resp_write = m_axi_BVALID && write_req_empty_n; - wire write_resp_full_n; - relay_station #( - .DATA_WIDTH(BurstLenWidth), - .ADDR_WIDTH(BufferSizeLog), - .DEPTH (BufferSize), - .LEVEL (1), - .CONNECT (EnableWriteChannel) - ) write_resp ( - .clk (clk), - .reset(rst), - - // from write req buffer and axi - .if_full_n (write_resp_full_n), - .if_write_ce(1'b1), - .if_write (write_resp_write), - .if_din (write_resp_din), - - // to user - .if_empty_n(write_resp_empty_n), - .if_read_ce(1'b1), - .if_read (write_resp_read), - .if_dout (write_resp_dout) - ); - - // AW channel - assign burst_write_addr_read = m_axi_AWREADY; - assign m_axi_AWVALID = burst_write_addr_empty_n; - assign m_axi_AWADDR = {{(AxiSideAddrWidth - AddrWidth){1'b0}}, burst_write_addr_dout_addr}; - assign m_axi_AWID = 0; - assign m_axi_AWLEN = burst_write_addr_dout_burst_len; - assign m_axi_AWSIZE = DataWidthBytesLog; - assign m_axi_AWBURST = 1; // INCR mode - assign m_axi_AWLOCK = 0; // Xilinx only supports 0 - assign m_axi_AWCACHE = 4'b0011; // Xilinx only supports 4'b0011 - assign m_axi_AWPROT = 0; - assign m_axi_AWQOS = 0; - - // W channel - assign m_axi_WVALID = write_data_empty_n && burst_write_last_empty_n; - assign m_axi_WDATA = write_data_dout; - assign m_axi_WSTRB = {(DataWidth/8){1'b1}}; // assume every bit is valid - assign m_axi_WLAST = burst_write_last_dout; - - // B channel - assign m_axi_BREADY = write_resp_full_n && write_req_empty_n; - assign write_req_read = write_resp_full_n && m_axi_BVALID; - - // read addr buffer, from user to burst detector - wire [AddrWidth-1:0] read_addr_dout; - wire read_addr_empty_n; - wire read_addr_read; - - relay_station #( - .DATA_WIDTH(AddrWidth), - .ADDR_WIDTH(BufferSizeLog), - .DEPTH (BufferSize), - .LEVEL (1), - .CONNECT (EnableReadChannel) - ) read_addr ( - .clk (clk), - .reset(rst), - - // from user - .if_full_n (read_addr_full_n), - .if_write_ce(1'b1), - .if_write (read_addr_write), - .if_din (offset + (read_addr_din << $clog2(DataWidth/8))), - - // to axi - .if_empty_n(read_addr_empty_n), - .if_read_ce(1'b1), - .if_read (read_addr_read), - .if_dout (read_addr_dout) - ); - - wire [BurstLenWidth+AddrWidth-1:0] burst_read_addr_din; - wire burst_read_addr_full_n; - wire burst_read_addr_write; - wire [AddrWidth-1:0] burst_read_addr_dout_addr; - wire [BurstLenWidth-1:0] burst_read_addr_dout_burst_len; - wire burst_read_addr_empty_n; - wire burst_read_addr_read; - - relay_station #( - .DATA_WIDTH(BurstLenWidth + AddrWidth), - .ADDR_WIDTH(BufferSizeLog), - .DEPTH (BufferSize), - .LEVEL (1), - .CONNECT (EnableReadChannel) - ) burst_read_addr ( - .clk (clk), - .reset(rst), - - // from burst detector - .if_full_n (burst_read_addr_full_n), - .if_write_ce(1'b1), - .if_write (burst_read_addr_write), - .if_din (burst_read_addr_din), - - // to axi - .if_empty_n(burst_read_addr_empty_n), - .if_read_ce(1'b1), - .if_read (burst_read_addr_read), - .if_dout ({burst_read_addr_dout_burst_len, burst_read_addr_dout_addr}) - ); - - detect_burst #( - .AddrWidth (AddrWidth), - .DataWidthBytesLog(DataWidthBytesLog), - .WaitTimeWidth (WaitTimeWidth), - .BurstLenWidth (BurstLenWidth) - ) detect_burst_read ( - .clk(clk), - .rst(rst), - - .max_wait_time(MaxWaitTime[WaitTimeWidth-1:0]), - .max_burst_len(MaxBurstLen[BurstLenWidth-1:0]), - - // input: individual addresses - .addr_dout (read_addr_dout), - .addr_empty_n(read_addr_empty_n), - .addr_read (read_addr_read), - - // output: inferred burst addresses - .addr_din (burst_read_addr_din), - .addr_full_n(burst_read_addr_full_n), - .addr_write (burst_read_addr_write), - - // output: used to generate the "last" signals, unused - .burst_len_0_din (), - .burst_len_0_full_n(1'b1), - .burst_len_0_write (), - - // output: used to generate write responses, unused - .burst_len_1_din (), - .burst_len_1_full_n(1'b1), - .burst_len_1_write () - ); - - // read resp buffer - wire [DataWidth-1:0] read_data_din; - wire read_data_write; - wire read_data_full_n; - relay_station #( - .DATA_WIDTH(DataWidth), - .ADDR_WIDTH(BufferSizeLog), - .DEPTH (BufferSize), - .LEVEL (1), - .CONNECT (EnableReadChannel) - ) read_data ( - .clk (clk), - .reset(rst), - - // from axi - .if_full_n (read_data_full_n), - .if_write_ce(1'b1), - .if_write (read_data_write), - .if_din (read_data_din), - - // to user - .if_empty_n(read_data_empty_n), - .if_read_ce(1'b1), - .if_read (read_data_read), - .if_dout (read_data_dout) - ); - - // AR channel - assign burst_read_addr_read = m_axi_ARREADY; - assign m_axi_ARVALID = burst_read_addr_empty_n; - assign m_axi_ARADDR = {{(AxiSideAddrWidth - AddrWidth){1'b0}}, burst_read_addr_dout_addr}; - assign m_axi_ARID = 0; - assign m_axi_ARLEN = burst_read_addr_dout_burst_len; - assign m_axi_ARSIZE = DataWidthBytesLog; - assign m_axi_ARBURST = 1; // INCR mode - assign m_axi_ARLOCK = 0; // Xilinx only supports 0 - assign m_axi_ARCACHE = 4'b0011; // Xilinx only supports 4'b0011 - assign m_axi_ARPROT = 0; - assign m_axi_ARQOS = 0; - - // R channel - assign m_axi_RREADY = read_data_full_n; - assign read_data_write = m_axi_RVALID; - assign read_data_din = m_axi_RDATA; - - // unused input signals - wire _unused = &{1'b0, - m_axi_BRESP, - m_axi_BID, - m_axi_RLAST, - m_axi_RID, - m_axi_RRESP, - 1'b0}; - -endmodule // async_mmap - -`default_nettype wire diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_crossbar.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_crossbar.v deleted file mode 100644 index 991d4540..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_crossbar.v +++ /dev/null @@ -1,391 +0,0 @@ -/* - -Copyright (c) 2018 Alex Forencich - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -// Language: Verilog 2001 - -`resetall -`timescale 1ns / 1ps -`default_nettype none - -/* - * AXI4 crossbar - */ -module axi_crossbar # -( - // Number of AXI inputs (slave interfaces) - parameter S_COUNT = 4, - // Number of AXI outputs (master interfaces) - parameter M_COUNT = 4, - // Width of data bus in bits - parameter DATA_WIDTH = 32, - // Width of address bus in bits - parameter ADDR_WIDTH = 32, - // Width of wstrb (width of data bus in words) - parameter STRB_WIDTH = (DATA_WIDTH/8), - // Input ID field width (from AXI masters) - parameter S_ID_WIDTH = 8, - // Output ID field width (towards AXI slaves) - // Additional bits required for response routing - parameter M_ID_WIDTH = S_ID_WIDTH+$clog2(S_COUNT), - // Propagate awuser signal - parameter AWUSER_ENABLE = 0, - // Width of awuser signal - parameter AWUSER_WIDTH = 1, - // Propagate wuser signal - parameter WUSER_ENABLE = 0, - // Width of wuser signal - parameter WUSER_WIDTH = 1, - // Propagate buser signal - parameter BUSER_ENABLE = 0, - // Width of buser signal - parameter BUSER_WIDTH = 1, - // Propagate aruser signal - parameter ARUSER_ENABLE = 0, - // Width of aruser signal - parameter ARUSER_WIDTH = 1, - // Propagate ruser signal - parameter RUSER_ENABLE = 0, - // Width of ruser signal - parameter RUSER_WIDTH = 1, - // Number of concurrent unique IDs for each slave interface - // S_COUNT concatenated fields of 32 bits - parameter S_THREADS = {S_COUNT{32'd2}}, - // Number of concurrent operations for each slave interface - // S_COUNT concatenated fields of 32 bits - parameter S_ACCEPT = {S_COUNT{32'd16}}, - // Number of regions per master interface - parameter M_REGIONS = 1, - // Master interface base addresses - // M_COUNT concatenated fields of M_REGIONS concatenated fields of ADDR_WIDTH bits - // set to zero for default addressing based on M_ADDR_WIDTH - parameter M_BASE_ADDR = 0, - // Master interface address widths - // M_COUNT concatenated fields of M_REGIONS concatenated fields of 32 bits - parameter M_ADDR_WIDTH = {M_COUNT{{M_REGIONS{32'd24}}}}, - // Read connections between interfaces - // M_COUNT concatenated fields of S_COUNT bits - parameter M_CONNECT_READ = {M_COUNT{{S_COUNT{1'b1}}}}, - // Write connections between interfaces - // M_COUNT concatenated fields of S_COUNT bits - parameter M_CONNECT_WRITE = {M_COUNT{{S_COUNT{1'b1}}}}, - // Number of concurrent operations for each master interface - // M_COUNT concatenated fields of 32 bits - parameter M_ISSUE = {M_COUNT{32'd4}}, - // Secure master (fail operations based on awprot/arprot) - // M_COUNT bits - parameter M_SECURE = {M_COUNT{1'b0}}, - // Slave interface AW channel register type (input) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter S_AW_REG_TYPE = {S_COUNT{2'd0}}, - // Slave interface W channel register type (input) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter S_W_REG_TYPE = {S_COUNT{2'd0}}, - // Slave interface B channel register type (output) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter S_B_REG_TYPE = {S_COUNT{2'd1}}, - // Slave interface AR channel register type (input) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter S_AR_REG_TYPE = {S_COUNT{2'd0}}, - // Slave interface R channel register type (output) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter S_R_REG_TYPE = {S_COUNT{2'd2}}, - // Master interface AW channel register type (output) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter M_AW_REG_TYPE = {M_COUNT{2'd1}}, - // Master interface W channel register type (output) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter M_W_REG_TYPE = {M_COUNT{2'd2}}, - // Master interface B channel register type (input) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter M_B_REG_TYPE = {M_COUNT{2'd0}}, - // Master interface AR channel register type (output) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter M_AR_REG_TYPE = {M_COUNT{2'd1}}, - // Master interface R channel register type (input) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter M_R_REG_TYPE = {M_COUNT{2'd0}} -) -( - input wire clk, - input wire rst, - - /* - * AXI slave interfaces - */ - input wire [S_COUNT*S_ID_WIDTH-1:0] s_axi_awid, - input wire [S_COUNT*ADDR_WIDTH-1:0] s_axi_awaddr, - input wire [S_COUNT*8-1:0] s_axi_awlen, - input wire [S_COUNT*3-1:0] s_axi_awsize, - input wire [S_COUNT*2-1:0] s_axi_awburst, - input wire [S_COUNT-1:0] s_axi_awlock, - input wire [S_COUNT*4-1:0] s_axi_awcache, - input wire [S_COUNT*3-1:0] s_axi_awprot, - input wire [S_COUNT*4-1:0] s_axi_awqos, - input wire [S_COUNT*AWUSER_WIDTH-1:0] s_axi_awuser, - input wire [S_COUNT-1:0] s_axi_awvalid, - output wire [S_COUNT-1:0] s_axi_awready, - input wire [S_COUNT*DATA_WIDTH-1:0] s_axi_wdata, - input wire [S_COUNT*STRB_WIDTH-1:0] s_axi_wstrb, - input wire [S_COUNT-1:0] s_axi_wlast, - input wire [S_COUNT*WUSER_WIDTH-1:0] s_axi_wuser, - input wire [S_COUNT-1:0] s_axi_wvalid, - output wire [S_COUNT-1:0] s_axi_wready, - output wire [S_COUNT*S_ID_WIDTH-1:0] s_axi_bid, - output wire [S_COUNT*2-1:0] s_axi_bresp, - output wire [S_COUNT*BUSER_WIDTH-1:0] s_axi_buser, - output wire [S_COUNT-1:0] s_axi_bvalid, - input wire [S_COUNT-1:0] s_axi_bready, - input wire [S_COUNT*S_ID_WIDTH-1:0] s_axi_arid, - input wire [S_COUNT*ADDR_WIDTH-1:0] s_axi_araddr, - input wire [S_COUNT*8-1:0] s_axi_arlen, - input wire [S_COUNT*3-1:0] s_axi_arsize, - input wire [S_COUNT*2-1:0] s_axi_arburst, - input wire [S_COUNT-1:0] s_axi_arlock, - input wire [S_COUNT*4-1:0] s_axi_arcache, - input wire [S_COUNT*3-1:0] s_axi_arprot, - input wire [S_COUNT*4-1:0] s_axi_arqos, - input wire [S_COUNT*ARUSER_WIDTH-1:0] s_axi_aruser, - input wire [S_COUNT-1:0] s_axi_arvalid, - output wire [S_COUNT-1:0] s_axi_arready, - output wire [S_COUNT*S_ID_WIDTH-1:0] s_axi_rid, - output wire [S_COUNT*DATA_WIDTH-1:0] s_axi_rdata, - output wire [S_COUNT*2-1:0] s_axi_rresp, - output wire [S_COUNT-1:0] s_axi_rlast, - output wire [S_COUNT*RUSER_WIDTH-1:0] s_axi_ruser, - output wire [S_COUNT-1:0] s_axi_rvalid, - input wire [S_COUNT-1:0] s_axi_rready, - - /* - * AXI master interfaces - */ - output wire [M_COUNT*M_ID_WIDTH-1:0] m_axi_awid, - output wire [M_COUNT*ADDR_WIDTH-1:0] m_axi_awaddr, - output wire [M_COUNT*8-1:0] m_axi_awlen, - output wire [M_COUNT*3-1:0] m_axi_awsize, - output wire [M_COUNT*2-1:0] m_axi_awburst, - output wire [M_COUNT-1:0] m_axi_awlock, - output wire [M_COUNT*4-1:0] m_axi_awcache, - output wire [M_COUNT*3-1:0] m_axi_awprot, - output wire [M_COUNT*4-1:0] m_axi_awqos, - output wire [M_COUNT*4-1:0] m_axi_awregion, - output wire [M_COUNT*AWUSER_WIDTH-1:0] m_axi_awuser, - output wire [M_COUNT-1:0] m_axi_awvalid, - input wire [M_COUNT-1:0] m_axi_awready, - output wire [M_COUNT*DATA_WIDTH-1:0] m_axi_wdata, - output wire [M_COUNT*STRB_WIDTH-1:0] m_axi_wstrb, - output wire [M_COUNT-1:0] m_axi_wlast, - output wire [M_COUNT*WUSER_WIDTH-1:0] m_axi_wuser, - output wire [M_COUNT-1:0] m_axi_wvalid, - input wire [M_COUNT-1:0] m_axi_wready, - input wire [M_COUNT*M_ID_WIDTH-1:0] m_axi_bid, - input wire [M_COUNT*2-1:0] m_axi_bresp, - input wire [M_COUNT*BUSER_WIDTH-1:0] m_axi_buser, - input wire [M_COUNT-1:0] m_axi_bvalid, - output wire [M_COUNT-1:0] m_axi_bready, - output wire [M_COUNT*M_ID_WIDTH-1:0] m_axi_arid, - output wire [M_COUNT*ADDR_WIDTH-1:0] m_axi_araddr, - output wire [M_COUNT*8-1:0] m_axi_arlen, - output wire [M_COUNT*3-1:0] m_axi_arsize, - output wire [M_COUNT*2-1:0] m_axi_arburst, - output wire [M_COUNT-1:0] m_axi_arlock, - output wire [M_COUNT*4-1:0] m_axi_arcache, - output wire [M_COUNT*3-1:0] m_axi_arprot, - output wire [M_COUNT*4-1:0] m_axi_arqos, - output wire [M_COUNT*4-1:0] m_axi_arregion, - output wire [M_COUNT*ARUSER_WIDTH-1:0] m_axi_aruser, - output wire [M_COUNT-1:0] m_axi_arvalid, - input wire [M_COUNT-1:0] m_axi_arready, - input wire [M_COUNT*M_ID_WIDTH-1:0] m_axi_rid, - input wire [M_COUNT*DATA_WIDTH-1:0] m_axi_rdata, - input wire [M_COUNT*2-1:0] m_axi_rresp, - input wire [M_COUNT-1:0] m_axi_rlast, - input wire [M_COUNT*RUSER_WIDTH-1:0] m_axi_ruser, - input wire [M_COUNT-1:0] m_axi_rvalid, - output wire [M_COUNT-1:0] m_axi_rready -); - -axi_crossbar_wr #( - .S_COUNT(S_COUNT), - .M_COUNT(M_COUNT), - .DATA_WIDTH(DATA_WIDTH), - .ADDR_WIDTH(ADDR_WIDTH), - .STRB_WIDTH(STRB_WIDTH), - .S_ID_WIDTH(S_ID_WIDTH), - .M_ID_WIDTH(M_ID_WIDTH), - .AWUSER_ENABLE(AWUSER_ENABLE), - .AWUSER_WIDTH(AWUSER_WIDTH), - .WUSER_ENABLE(WUSER_ENABLE), - .WUSER_WIDTH(WUSER_WIDTH), - .BUSER_ENABLE(BUSER_ENABLE), - .BUSER_WIDTH(BUSER_WIDTH), - .S_THREADS(S_THREADS), - .S_ACCEPT(S_ACCEPT), - .M_REGIONS(M_REGIONS), - .M_BASE_ADDR(M_BASE_ADDR), - .M_ADDR_WIDTH(M_ADDR_WIDTH), - .M_CONNECT(M_CONNECT_WRITE), - .M_ISSUE(M_ISSUE), - .M_SECURE(M_SECURE), - .S_AW_REG_TYPE(S_AW_REG_TYPE), - .S_W_REG_TYPE (S_W_REG_TYPE), - .S_B_REG_TYPE (S_B_REG_TYPE) -) -axi_crossbar_wr_inst ( - .clk(clk), - .rst(rst), - - /* - * AXI slave interfaces - */ - .s_axi_awid(s_axi_awid), - .s_axi_awaddr(s_axi_awaddr), - .s_axi_awlen(s_axi_awlen), - .s_axi_awsize(s_axi_awsize), - .s_axi_awburst(s_axi_awburst), - .s_axi_awlock(s_axi_awlock), - .s_axi_awcache(s_axi_awcache), - .s_axi_awprot(s_axi_awprot), - .s_axi_awqos(s_axi_awqos), - .s_axi_awuser(s_axi_awuser), - .s_axi_awvalid(s_axi_awvalid), - .s_axi_awready(s_axi_awready), - .s_axi_wdata(s_axi_wdata), - .s_axi_wstrb(s_axi_wstrb), - .s_axi_wlast(s_axi_wlast), - .s_axi_wuser(s_axi_wuser), - .s_axi_wvalid(s_axi_wvalid), - .s_axi_wready(s_axi_wready), - .s_axi_bid(s_axi_bid), - .s_axi_bresp(s_axi_bresp), - .s_axi_buser(s_axi_buser), - .s_axi_bvalid(s_axi_bvalid), - .s_axi_bready(s_axi_bready), - - /* - * AXI master interfaces - */ - .m_axi_awid(m_axi_awid), - .m_axi_awaddr(m_axi_awaddr), - .m_axi_awlen(m_axi_awlen), - .m_axi_awsize(m_axi_awsize), - .m_axi_awburst(m_axi_awburst), - .m_axi_awlock(m_axi_awlock), - .m_axi_awcache(m_axi_awcache), - .m_axi_awprot(m_axi_awprot), - .m_axi_awqos(m_axi_awqos), - .m_axi_awregion(m_axi_awregion), - .m_axi_awuser(m_axi_awuser), - .m_axi_awvalid(m_axi_awvalid), - .m_axi_awready(m_axi_awready), - .m_axi_wdata(m_axi_wdata), - .m_axi_wstrb(m_axi_wstrb), - .m_axi_wlast(m_axi_wlast), - .m_axi_wuser(m_axi_wuser), - .m_axi_wvalid(m_axi_wvalid), - .m_axi_wready(m_axi_wready), - .m_axi_bid(m_axi_bid), - .m_axi_bresp(m_axi_bresp), - .m_axi_buser(m_axi_buser), - .m_axi_bvalid(m_axi_bvalid), - .m_axi_bready(m_axi_bready) -); - -axi_crossbar_rd #( - .S_COUNT(S_COUNT), - .M_COUNT(M_COUNT), - .DATA_WIDTH(DATA_WIDTH), - .ADDR_WIDTH(ADDR_WIDTH), - .STRB_WIDTH(STRB_WIDTH), - .S_ID_WIDTH(S_ID_WIDTH), - .M_ID_WIDTH(M_ID_WIDTH), - .ARUSER_ENABLE(ARUSER_ENABLE), - .ARUSER_WIDTH(ARUSER_WIDTH), - .RUSER_ENABLE(RUSER_ENABLE), - .RUSER_WIDTH(RUSER_WIDTH), - .S_THREADS(S_THREADS), - .S_ACCEPT(S_ACCEPT), - .M_REGIONS(M_REGIONS), - .M_BASE_ADDR(M_BASE_ADDR), - .M_ADDR_WIDTH(M_ADDR_WIDTH), - .M_CONNECT(M_CONNECT_READ), - .M_ISSUE(M_ISSUE), - .M_SECURE(M_SECURE), - .S_AR_REG_TYPE(S_AR_REG_TYPE), - .S_R_REG_TYPE (S_R_REG_TYPE) -) -axi_crossbar_rd_inst ( - .clk(clk), - .rst(rst), - - /* - * AXI slave interfaces - */ - .s_axi_arid(s_axi_arid), - .s_axi_araddr(s_axi_araddr), - .s_axi_arlen(s_axi_arlen), - .s_axi_arsize(s_axi_arsize), - .s_axi_arburst(s_axi_arburst), - .s_axi_arlock(s_axi_arlock), - .s_axi_arcache(s_axi_arcache), - .s_axi_arprot(s_axi_arprot), - .s_axi_arqos(s_axi_arqos), - .s_axi_aruser(s_axi_aruser), - .s_axi_arvalid(s_axi_arvalid), - .s_axi_arready(s_axi_arready), - .s_axi_rid(s_axi_rid), - .s_axi_rdata(s_axi_rdata), - .s_axi_rresp(s_axi_rresp), - .s_axi_rlast(s_axi_rlast), - .s_axi_ruser(s_axi_ruser), - .s_axi_rvalid(s_axi_rvalid), - .s_axi_rready(s_axi_rready), - - /* - * AXI master interfaces - */ - .m_axi_arid(m_axi_arid), - .m_axi_araddr(m_axi_araddr), - .m_axi_arlen(m_axi_arlen), - .m_axi_arsize(m_axi_arsize), - .m_axi_arburst(m_axi_arburst), - .m_axi_arlock(m_axi_arlock), - .m_axi_arcache(m_axi_arcache), - .m_axi_arprot(m_axi_arprot), - .m_axi_arqos(m_axi_arqos), - .m_axi_arregion(m_axi_arregion), - .m_axi_aruser(m_axi_aruser), - .m_axi_arvalid(m_axi_arvalid), - .m_axi_arready(m_axi_arready), - .m_axi_rid(m_axi_rid), - .m_axi_rdata(m_axi_rdata), - .m_axi_rresp(m_axi_rresp), - .m_axi_rlast(m_axi_rlast), - .m_axi_ruser(m_axi_ruser), - .m_axi_rvalid(m_axi_rvalid), - .m_axi_rready(m_axi_rready) -); - -endmodule - -`resetall diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_crossbar_addr.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_crossbar_addr.v deleted file mode 100644 index 7b784652..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_crossbar_addr.v +++ /dev/null @@ -1,418 +0,0 @@ -/* - -Copyright (c) 2018 Alex Forencich - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -// Language: Verilog 2001 - -`resetall -`timescale 1ns / 1ps -`default_nettype none - -/* - * AXI4 crossbar address decode and admission control - */ -module axi_crossbar_addr # -( - // Slave interface index - parameter S = 0, - // Number of AXI inputs (slave interfaces) - parameter S_COUNT = 4, - // Number of AXI outputs (master interfaces) - parameter M_COUNT = 4, - // Width of address bus in bits - parameter ADDR_WIDTH = 32, - // ID field width - parameter ID_WIDTH = 8, - // Number of concurrent unique IDs - parameter S_THREADS = 32'd2, - // Number of concurrent operations - parameter S_ACCEPT = 32'd16, - // Number of regions per master interface - parameter M_REGIONS = 1, - // Master interface base addresses - // M_COUNT concatenated fields of M_REGIONS concatenated fields of ADDR_WIDTH bits - // set to zero for default addressing based on M_ADDR_WIDTH - parameter M_BASE_ADDR = 0, - // Master interface address widths - // M_COUNT concatenated fields of M_REGIONS concatenated fields of 32 bits - parameter M_ADDR_WIDTH = {M_COUNT{{M_REGIONS{32'd24}}}}, - // Connections between interfaces - // M_COUNT concatenated fields of S_COUNT bits - parameter M_CONNECT = {M_COUNT{{S_COUNT{1'b1}}}}, - // Secure master (fail operations based on awprot/arprot) - // M_COUNT bits - parameter M_SECURE = {M_COUNT{1'b0}}, - // Enable write command output - parameter WC_OUTPUT = 0 -) -( - input wire clk, - input wire rst, - - /* - * Address input - */ - input wire [ID_WIDTH-1:0] s_axi_aid, - input wire [ADDR_WIDTH-1:0] s_axi_aaddr, - input wire [2:0] s_axi_aprot, - input wire [3:0] s_axi_aqos, - input wire s_axi_avalid, - output wire s_axi_aready, - - /* - * Address output - */ - output wire [3:0] m_axi_aregion, - output wire [$clog2(M_COUNT)-1:0] m_select, - output wire m_axi_avalid, - input wire m_axi_aready, - - /* - * Write command output - */ - output wire [$clog2(M_COUNT)-1:0] m_wc_select, - output wire m_wc_decerr, - output wire m_wc_valid, - input wire m_wc_ready, - - /* - * Reply command output - */ - output wire m_rc_decerr, - output wire m_rc_valid, - input wire m_rc_ready, - - /* - * Completion input - */ - input wire [ID_WIDTH-1:0] s_cpl_id, - input wire s_cpl_valid -); - -parameter CL_S_COUNT = $clog2(S_COUNT); -parameter CL_M_COUNT = $clog2(M_COUNT); - -parameter S_INT_THREADS = S_THREADS > S_ACCEPT ? S_ACCEPT : S_THREADS; -parameter CL_S_INT_THREADS = $clog2(S_INT_THREADS); -parameter CL_S_ACCEPT = $clog2(S_ACCEPT); - -// default address computation -function [M_COUNT*M_REGIONS*ADDR_WIDTH-1:0] calcBaseAddrs(input [31:0] dummy); - integer i; - reg [ADDR_WIDTH-1:0] base; - reg [ADDR_WIDTH-1:0] width; - reg [ADDR_WIDTH-1:0] size; - reg [ADDR_WIDTH-1:0] mask; - begin - calcBaseAddrs = {M_COUNT*M_REGIONS*ADDR_WIDTH{1'b0}}; - base = 0; - for (i = 0; i < M_COUNT*M_REGIONS; i = i + 1) begin - width = M_ADDR_WIDTH[i*32 +: 32]; - mask = {ADDR_WIDTH{1'b1}} >> (ADDR_WIDTH - width); - size = mask + 1; - if (width > 0) begin - if ((base & mask) != 0) begin - base = base + size - (base & mask); // align - end - calcBaseAddrs[i * ADDR_WIDTH +: ADDR_WIDTH] = base; - base = base + size; // increment - end - end - end -endfunction - -parameter M_BASE_ADDR_INT = M_BASE_ADDR ? M_BASE_ADDR : calcBaseAddrs(0); - -integer i, j; - -// check configuration -initial begin - if (S_ACCEPT < 1) begin - $error("Error: need at least 1 accept (instance %m)"); - $finish; - end - - if (S_THREADS < 1) begin - $error("Error: need at least 1 thread (instance %m)"); - $finish; - end - - if (S_THREADS > S_ACCEPT) begin - $warning("Warning: requested thread count larger than accept count; limiting thread count to accept count (instance %m)"); - end - - if (M_REGIONS < 1) begin - $error("Error: need at least 1 region (instance %m)"); - $finish; - end - - for (i = 0; i < M_COUNT*M_REGIONS; i = i + 1) begin - if (M_ADDR_WIDTH[i*32 +: 32] && (M_ADDR_WIDTH[i*32 +: 32] < 12 || M_ADDR_WIDTH[i*32 +: 32] > ADDR_WIDTH)) begin - $error("Error: address width out of range (instance %m)"); - $finish; - end - end - - $display("Addressing configuration for axi_crossbar_addr instance %m"); - for (i = 0; i < M_COUNT*M_REGIONS; i = i + 1) begin - if (M_ADDR_WIDTH[i*32 +: 32]) begin - $display("%2d (%2d): %x / %02d -- %x-%x", - i/M_REGIONS, i%M_REGIONS, - M_BASE_ADDR_INT[i*ADDR_WIDTH +: ADDR_WIDTH], - M_ADDR_WIDTH[i*32 +: 32], - M_BASE_ADDR_INT[i*ADDR_WIDTH +: ADDR_WIDTH] & ({ADDR_WIDTH{1'b1}} << M_ADDR_WIDTH[i*32 +: 32]), - M_BASE_ADDR_INT[i*ADDR_WIDTH +: ADDR_WIDTH] | ({ADDR_WIDTH{1'b1}} >> (ADDR_WIDTH - M_ADDR_WIDTH[i*32 +: 32])) - ); - end - end - - for (i = 0; i < M_COUNT*M_REGIONS; i = i + 1) begin - if ((M_BASE_ADDR_INT[i*ADDR_WIDTH +: ADDR_WIDTH] & (2**M_ADDR_WIDTH[i*32 +: 32]-1)) != 0) begin - $display("Region not aligned:"); - $display("%2d (%2d): %x / %2d -- %x-%x", - i/M_REGIONS, i%M_REGIONS, - M_BASE_ADDR_INT[i*ADDR_WIDTH +: ADDR_WIDTH], - M_ADDR_WIDTH[i*32 +: 32], - M_BASE_ADDR_INT[i*ADDR_WIDTH +: ADDR_WIDTH] & ({ADDR_WIDTH{1'b1}} << M_ADDR_WIDTH[i*32 +: 32]), - M_BASE_ADDR_INT[i*ADDR_WIDTH +: ADDR_WIDTH] | ({ADDR_WIDTH{1'b1}} >> (ADDR_WIDTH - M_ADDR_WIDTH[i*32 +: 32])) - ); - $error("Error: address range not aligned (instance %m)"); - $finish; - end - end - - for (i = 0; i < M_COUNT*M_REGIONS; i = i + 1) begin - for (j = i+1; j < M_COUNT*M_REGIONS; j = j + 1) begin - if (M_ADDR_WIDTH[i*32 +: 32] && M_ADDR_WIDTH[j*32 +: 32]) begin - if (((M_BASE_ADDR_INT[i*ADDR_WIDTH +: ADDR_WIDTH] & ({ADDR_WIDTH{1'b1}} << M_ADDR_WIDTH[i*32 +: 32])) <= (M_BASE_ADDR_INT[j*ADDR_WIDTH +: ADDR_WIDTH] | ({ADDR_WIDTH{1'b1}} >> (ADDR_WIDTH - M_ADDR_WIDTH[j*32 +: 32])))) - && ((M_BASE_ADDR_INT[j*ADDR_WIDTH +: ADDR_WIDTH] & ({ADDR_WIDTH{1'b1}} << M_ADDR_WIDTH[j*32 +: 32])) <= (M_BASE_ADDR_INT[i*ADDR_WIDTH +: ADDR_WIDTH] | ({ADDR_WIDTH{1'b1}} >> (ADDR_WIDTH - M_ADDR_WIDTH[i*32 +: 32]))))) begin - $display("Overlapping regions:"); - $display("%2d (%2d): %x / %2d -- %x-%x", - i/M_REGIONS, i%M_REGIONS, - M_BASE_ADDR_INT[i*ADDR_WIDTH +: ADDR_WIDTH], - M_ADDR_WIDTH[i*32 +: 32], - M_BASE_ADDR_INT[i*ADDR_WIDTH +: ADDR_WIDTH] & ({ADDR_WIDTH{1'b1}} << M_ADDR_WIDTH[i*32 +: 32]), - M_BASE_ADDR_INT[i*ADDR_WIDTH +: ADDR_WIDTH] | ({ADDR_WIDTH{1'b1}} >> (ADDR_WIDTH - M_ADDR_WIDTH[i*32 +: 32])) - ); - $display("%2d (%2d): %x / %2d -- %x-%x", - j/M_REGIONS, j%M_REGIONS, - M_BASE_ADDR_INT[j*ADDR_WIDTH +: ADDR_WIDTH], - M_ADDR_WIDTH[j*32 +: 32], - M_BASE_ADDR_INT[j*ADDR_WIDTH +: ADDR_WIDTH] & ({ADDR_WIDTH{1'b1}} << M_ADDR_WIDTH[j*32 +: 32]), - M_BASE_ADDR_INT[j*ADDR_WIDTH +: ADDR_WIDTH] | ({ADDR_WIDTH{1'b1}} >> (ADDR_WIDTH - M_ADDR_WIDTH[j*32 +: 32])) - ); - $error("Error: address ranges overlap (instance %m)"); - $finish; - end - end - end - end -end - -localparam [2:0] - STATE_IDLE = 3'd0, - STATE_DECODE = 3'd1; - -reg [2:0] state_reg = STATE_IDLE, state_next; - -reg s_axi_aready_reg = 0, s_axi_aready_next; - -reg [3:0] m_axi_aregion_reg = 4'd0, m_axi_aregion_next; -reg [CL_M_COUNT-1:0] m_select_reg = 0, m_select_next; -reg m_axi_avalid_reg = 1'b0, m_axi_avalid_next; -reg m_decerr_reg = 1'b0, m_decerr_next; -reg m_wc_valid_reg = 1'b0, m_wc_valid_next; -reg m_rc_valid_reg = 1'b0, m_rc_valid_next; - -assign s_axi_aready = s_axi_aready_reg; - -assign m_axi_aregion = m_axi_aregion_reg; -assign m_select = m_select_reg; -assign m_axi_avalid = m_axi_avalid_reg; - -assign m_wc_select = m_select_reg; -assign m_wc_decerr = m_decerr_reg; -assign m_wc_valid = m_wc_valid_reg; - -assign m_rc_decerr = m_decerr_reg; -assign m_rc_valid = m_rc_valid_reg; - -reg match; -reg trans_start; -reg trans_complete; - -reg [$clog2(S_ACCEPT+1)-1:0] trans_count_reg = 0; -wire trans_limit = trans_count_reg >= S_ACCEPT && !trans_complete; - -// transfer ID thread tracking -reg [ID_WIDTH-1:0] thread_id_reg[S_INT_THREADS-1:0]; -reg [CL_M_COUNT-1:0] thread_m_reg[S_INT_THREADS-1:0]; -reg [3:0] thread_region_reg[S_INT_THREADS-1:0]; -reg [$clog2(S_ACCEPT+1)-1:0] thread_count_reg[S_INT_THREADS-1:0]; - -wire [S_INT_THREADS-1:0] thread_active; -wire [S_INT_THREADS-1:0] thread_match; -wire [S_INT_THREADS-1:0] thread_match_dest; -wire [S_INT_THREADS-1:0] thread_cpl_match; -wire [S_INT_THREADS-1:0] thread_trans_start; -wire [S_INT_THREADS-1:0] thread_trans_complete; - -generate - genvar n; - - for (n = 0; n < S_INT_THREADS; n = n + 1) begin - initial begin - thread_count_reg[n] <= 0; - end - - assign thread_active[n] = thread_count_reg[n] != 0; - assign thread_match[n] = thread_active[n] && thread_id_reg[n] == s_axi_aid; - assign thread_match_dest[n] = thread_match[n] && thread_m_reg[n] == m_select_next && (M_REGIONS < 2 || thread_region_reg[n] == m_axi_aregion_next); - assign thread_cpl_match[n] = thread_active[n] && thread_id_reg[n] == s_cpl_id; - assign thread_trans_start[n] = (thread_match[n] || (!thread_active[n] && !thread_match && !(thread_trans_start & ({S_INT_THREADS{1'b1}} >> (S_INT_THREADS-n))))) && trans_start; - assign thread_trans_complete[n] = thread_cpl_match[n] && trans_complete; - - always @(posedge clk) begin - if (rst) begin - thread_count_reg[n] <= 0; - end else begin - if (thread_trans_start[n] && !thread_trans_complete[n]) begin - thread_count_reg[n] <= thread_count_reg[n] + 1; - end else if (!thread_trans_start[n] && thread_trans_complete[n]) begin - thread_count_reg[n] <= thread_count_reg[n] - 1; - end - end - - if (thread_trans_start[n]) begin - thread_id_reg[n] <= s_axi_aid; - thread_m_reg[n] <= m_select_next; - thread_region_reg[n] <= m_axi_aregion_next; - end - end - end -endgenerate - -always @* begin - state_next = STATE_IDLE; - - match = 1'b0; - trans_start = 1'b0; - trans_complete = 1'b0; - - s_axi_aready_next = 1'b0; - - m_axi_aregion_next = m_axi_aregion_reg; - m_select_next = m_select_reg; - m_axi_avalid_next = m_axi_avalid_reg && !m_axi_aready; - m_decerr_next = m_decerr_reg; - m_wc_valid_next = m_wc_valid_reg && !m_wc_ready; - m_rc_valid_next = m_rc_valid_reg && !m_rc_ready; - - case (state_reg) - STATE_IDLE: begin - // idle state, store values - s_axi_aready_next = 1'b0; - - if (s_axi_avalid && !s_axi_aready) begin - match = 1'b0; - for (i = 0; i < M_COUNT; i = i + 1) begin - for (j = 0; j < M_REGIONS; j = j + 1) begin - if (M_ADDR_WIDTH[(i*M_REGIONS+j)*32 +: 32] && (!M_SECURE[i] || !s_axi_aprot[1]) && (M_CONNECT & (1 << (S+i*S_COUNT))) && (s_axi_aaddr >> M_ADDR_WIDTH[(i*M_REGIONS+j)*32 +: 32]) == (M_BASE_ADDR_INT[(i*M_REGIONS+j)*ADDR_WIDTH +: ADDR_WIDTH] >> M_ADDR_WIDTH[(i*M_REGIONS+j)*32 +: 32])) begin - m_select_next = i; - m_axi_aregion_next = j; - match = 1'b1; - end - end - end - - if (match) begin - // address decode successful - if (!trans_limit && (thread_match_dest || (!(&thread_active) && !thread_match))) begin - // transaction limit not reached - m_axi_avalid_next = 1'b1; - m_decerr_next = 1'b0; - m_wc_valid_next = WC_OUTPUT; - m_rc_valid_next = 1'b0; - trans_start = 1'b1; - state_next = STATE_DECODE; - end else begin - // transaction limit reached; block in idle - state_next = STATE_IDLE; - end - end else begin - // decode error - m_axi_avalid_next = 1'b0; - m_decerr_next = 1'b1; - m_wc_valid_next = WC_OUTPUT; - m_rc_valid_next = 1'b1; - state_next = STATE_DECODE; - end - end else begin - state_next = STATE_IDLE; - end - end - STATE_DECODE: begin - if (!m_axi_avalid_next && (!m_wc_valid_next || !WC_OUTPUT) && !m_rc_valid_next) begin - s_axi_aready_next = 1'b1; - state_next = STATE_IDLE; - end else begin - state_next = STATE_DECODE; - end - end - endcase - - // manage completions - trans_complete = s_cpl_valid; -end - -always @(posedge clk) begin - if (rst) begin - state_reg <= STATE_IDLE; - s_axi_aready_reg <= 1'b0; - m_axi_avalid_reg <= 1'b0; - m_wc_valid_reg <= 1'b0; - m_rc_valid_reg <= 1'b0; - - trans_count_reg <= 0; - end else begin - state_reg <= state_next; - s_axi_aready_reg <= s_axi_aready_next; - m_axi_avalid_reg <= m_axi_avalid_next; - m_wc_valid_reg <= m_wc_valid_next; - m_rc_valid_reg <= m_rc_valid_next; - - if (trans_start && !trans_complete) begin - trans_count_reg <= trans_count_reg + 1; - end else if (!trans_start && trans_complete) begin - trans_count_reg <= trans_count_reg - 1; - end - end - - m_axi_aregion_reg <= m_axi_aregion_next; - m_select_reg <= m_select_next; - m_decerr_reg <= m_decerr_next; -end - -endmodule - -`resetall diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_crossbar_rd.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_crossbar_rd.v deleted file mode 100644 index 2b1410ac..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_crossbar_rd.v +++ /dev/null @@ -1,569 +0,0 @@ -/* - -Copyright (c) 2018 Alex Forencich - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -// Language: Verilog 2001 - -`resetall -`timescale 1ns / 1ps -`default_nettype none - -/* - * AXI4 crossbar (read) - */ -module axi_crossbar_rd # -( - // Number of AXI inputs (slave interfaces) - parameter S_COUNT = 4, - // Number of AXI outputs (master interfaces) - parameter M_COUNT = 4, - // Width of data bus in bits - parameter DATA_WIDTH = 32, - // Width of address bus in bits - parameter ADDR_WIDTH = 32, - // Width of wstrb (width of data bus in words) - parameter STRB_WIDTH = (DATA_WIDTH/8), - // Input ID field width (from AXI masters) - parameter S_ID_WIDTH = 8, - // Output ID field width (towards AXI slaves) - // Additional bits required for response routing - parameter M_ID_WIDTH = S_ID_WIDTH+$clog2(S_COUNT), - // Propagate aruser signal - parameter ARUSER_ENABLE = 0, - // Width of aruser signal - parameter ARUSER_WIDTH = 1, - // Propagate ruser signal - parameter RUSER_ENABLE = 0, - // Width of ruser signal - parameter RUSER_WIDTH = 1, - // Number of concurrent unique IDs for each slave interface - // S_COUNT concatenated fields of 32 bits - parameter S_THREADS = {S_COUNT{32'd2}}, - // Number of concurrent operations for each slave interface - // S_COUNT concatenated fields of 32 bits - parameter S_ACCEPT = {S_COUNT{32'd16}}, - // Number of regions per master interface - parameter M_REGIONS = 1, - // Master interface base addresses - // M_COUNT concatenated fields of M_REGIONS concatenated fields of ADDR_WIDTH bits - // set to zero for default addressing based on M_ADDR_WIDTH - parameter M_BASE_ADDR = 0, - // Master interface address widths - // M_COUNT concatenated fields of M_REGIONS concatenated fields of 32 bits - parameter M_ADDR_WIDTH = {M_COUNT{{M_REGIONS{32'd24}}}}, - // Read connections between interfaces - // M_COUNT concatenated fields of S_COUNT bits - parameter M_CONNECT = {M_COUNT{{S_COUNT{1'b1}}}}, - // Number of concurrent operations for each master interface - // M_COUNT concatenated fields of 32 bits - parameter M_ISSUE = {M_COUNT{32'd4}}, - // Secure master (fail operations based on awprot/arprot) - // M_COUNT bits - parameter M_SECURE = {M_COUNT{1'b0}}, - // Slave interface AR channel register type (input) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter S_AR_REG_TYPE = {S_COUNT{2'd0}}, - // Slave interface R channel register type (output) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter S_R_REG_TYPE = {S_COUNT{2'd2}}, - // Master interface AR channel register type (output) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter M_AR_REG_TYPE = {M_COUNT{2'd1}}, - // Master interface R channel register type (input) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter M_R_REG_TYPE = {M_COUNT{2'd0}} -) -( - input wire clk, - input wire rst, - - /* - * AXI slave interfaces - */ - input wire [S_COUNT*S_ID_WIDTH-1:0] s_axi_arid, - input wire [S_COUNT*ADDR_WIDTH-1:0] s_axi_araddr, - input wire [S_COUNT*8-1:0] s_axi_arlen, - input wire [S_COUNT*3-1:0] s_axi_arsize, - input wire [S_COUNT*2-1:0] s_axi_arburst, - input wire [S_COUNT-1:0] s_axi_arlock, - input wire [S_COUNT*4-1:0] s_axi_arcache, - input wire [S_COUNT*3-1:0] s_axi_arprot, - input wire [S_COUNT*4-1:0] s_axi_arqos, - input wire [S_COUNT*ARUSER_WIDTH-1:0] s_axi_aruser, - input wire [S_COUNT-1:0] s_axi_arvalid, - output wire [S_COUNT-1:0] s_axi_arready, - output wire [S_COUNT*S_ID_WIDTH-1:0] s_axi_rid, - output wire [S_COUNT*DATA_WIDTH-1:0] s_axi_rdata, - output wire [S_COUNT*2-1:0] s_axi_rresp, - output wire [S_COUNT-1:0] s_axi_rlast, - output wire [S_COUNT*RUSER_WIDTH-1:0] s_axi_ruser, - output wire [S_COUNT-1:0] s_axi_rvalid, - input wire [S_COUNT-1:0] s_axi_rready, - - /* - * AXI master interfaces - */ - output wire [M_COUNT*M_ID_WIDTH-1:0] m_axi_arid, - output wire [M_COUNT*ADDR_WIDTH-1:0] m_axi_araddr, - output wire [M_COUNT*8-1:0] m_axi_arlen, - output wire [M_COUNT*3-1:0] m_axi_arsize, - output wire [M_COUNT*2-1:0] m_axi_arburst, - output wire [M_COUNT-1:0] m_axi_arlock, - output wire [M_COUNT*4-1:0] m_axi_arcache, - output wire [M_COUNT*3-1:0] m_axi_arprot, - output wire [M_COUNT*4-1:0] m_axi_arqos, - output wire [M_COUNT*4-1:0] m_axi_arregion, - output wire [M_COUNT*ARUSER_WIDTH-1:0] m_axi_aruser, - output wire [M_COUNT-1:0] m_axi_arvalid, - input wire [M_COUNT-1:0] m_axi_arready, - input wire [M_COUNT*M_ID_WIDTH-1:0] m_axi_rid, - input wire [M_COUNT*DATA_WIDTH-1:0] m_axi_rdata, - input wire [M_COUNT*2-1:0] m_axi_rresp, - input wire [M_COUNT-1:0] m_axi_rlast, - input wire [M_COUNT*RUSER_WIDTH-1:0] m_axi_ruser, - input wire [M_COUNT-1:0] m_axi_rvalid, - output wire [M_COUNT-1:0] m_axi_rready -); - -parameter CL_S_COUNT = $clog2(S_COUNT); -parameter CL_M_COUNT = $clog2(M_COUNT); -parameter M_COUNT_P1 = M_COUNT+1; -parameter CL_M_COUNT_P1 = $clog2(M_COUNT_P1); - -integer i; - -// check configuration -initial begin - if (M_ID_WIDTH < S_ID_WIDTH+$clog2(S_COUNT)) begin - $error("Error: M_ID_WIDTH must be at least $clog2(S_COUNT) larger than S_ID_WIDTH (instance %m)"); - $finish; - end - - for (i = 0; i < M_COUNT*M_REGIONS; i = i + 1) begin - if (M_ADDR_WIDTH[i*32 +: 32] && (M_ADDR_WIDTH[i*32 +: 32] < 12 || M_ADDR_WIDTH[i*32 +: 32] > ADDR_WIDTH)) begin - $error("Error: value out of range (instance %m)"); - $finish; - end - end -end - -wire [S_COUNT*S_ID_WIDTH-1:0] int_s_axi_arid; -wire [S_COUNT*ADDR_WIDTH-1:0] int_s_axi_araddr; -wire [S_COUNT*8-1:0] int_s_axi_arlen; -wire [S_COUNT*3-1:0] int_s_axi_arsize; -wire [S_COUNT*2-1:0] int_s_axi_arburst; -wire [S_COUNT-1:0] int_s_axi_arlock; -wire [S_COUNT*4-1:0] int_s_axi_arcache; -wire [S_COUNT*3-1:0] int_s_axi_arprot; -wire [S_COUNT*4-1:0] int_s_axi_arqos; -wire [S_COUNT*4-1:0] int_s_axi_arregion; -wire [S_COUNT*ARUSER_WIDTH-1:0] int_s_axi_aruser; -wire [S_COUNT-1:0] int_s_axi_arvalid; -wire [S_COUNT-1:0] int_s_axi_arready; - -wire [S_COUNT*M_COUNT-1:0] int_axi_arvalid; -wire [M_COUNT*S_COUNT-1:0] int_axi_arready; - -wire [M_COUNT*M_ID_WIDTH-1:0] int_m_axi_rid; -wire [M_COUNT*DATA_WIDTH-1:0] int_m_axi_rdata; -wire [M_COUNT*2-1:0] int_m_axi_rresp; -wire [M_COUNT-1:0] int_m_axi_rlast; -wire [M_COUNT*RUSER_WIDTH-1:0] int_m_axi_ruser; -wire [M_COUNT-1:0] int_m_axi_rvalid; -wire [M_COUNT-1:0] int_m_axi_rready; - -wire [M_COUNT*S_COUNT-1:0] int_axi_rvalid; -wire [S_COUNT*M_COUNT-1:0] int_axi_rready; - -generate - - genvar m, n; - - for (m = 0; m < S_COUNT; m = m + 1) begin : s_ifaces - // address decode and admission control - wire [CL_M_COUNT-1:0] a_select; - - wire m_axi_avalid; - wire m_axi_aready; - - wire m_rc_decerr; - wire m_rc_valid; - wire m_rc_ready; - - wire [S_ID_WIDTH-1:0] s_cpl_id; - wire s_cpl_valid; - - axi_crossbar_addr #( - .S(m), - .S_COUNT(S_COUNT), - .M_COUNT(M_COUNT), - .ADDR_WIDTH(ADDR_WIDTH), - .ID_WIDTH(S_ID_WIDTH), - .S_THREADS(S_THREADS[m*32 +: 32]), - .S_ACCEPT(S_ACCEPT[m*32 +: 32]), - .M_REGIONS(M_REGIONS), - .M_BASE_ADDR(M_BASE_ADDR), - .M_ADDR_WIDTH(M_ADDR_WIDTH), - .M_CONNECT(M_CONNECT), - .M_SECURE(M_SECURE), - .WC_OUTPUT(0) - ) - addr_inst ( - .clk(clk), - .rst(rst), - - /* - * Address input - */ - .s_axi_aid(int_s_axi_arid[m*S_ID_WIDTH +: S_ID_WIDTH]), - .s_axi_aaddr(int_s_axi_araddr[m*ADDR_WIDTH +: ADDR_WIDTH]), - .s_axi_aprot(int_s_axi_arprot[m*3 +: 3]), - .s_axi_aqos(int_s_axi_arqos[m*4 +: 4]), - .s_axi_avalid(int_s_axi_arvalid[m]), - .s_axi_aready(int_s_axi_arready[m]), - - /* - * Address output - */ - .m_axi_aregion(int_s_axi_arregion[m*4 +: 4]), - .m_select(a_select), - .m_axi_avalid(m_axi_avalid), - .m_axi_aready(m_axi_aready), - - /* - * Write command output - */ - .m_wc_select(), - .m_wc_decerr(), - .m_wc_valid(), - .m_wc_ready(1'b1), - - /* - * Response command output - */ - .m_rc_decerr(m_rc_decerr), - .m_rc_valid(m_rc_valid), - .m_rc_ready(m_rc_ready), - - /* - * Completion input - */ - .s_cpl_id(s_cpl_id), - .s_cpl_valid(s_cpl_valid) - ); - - assign int_axi_arvalid[m*M_COUNT +: M_COUNT] = m_axi_avalid << a_select; - assign m_axi_aready = int_axi_arready[a_select*S_COUNT+m]; - - // decode error handling - reg [S_ID_WIDTH-1:0] decerr_m_axi_rid_reg = {S_ID_WIDTH{1'b0}}, decerr_m_axi_rid_next; - reg decerr_m_axi_rlast_reg = 1'b0, decerr_m_axi_rlast_next; - reg decerr_m_axi_rvalid_reg = 1'b0, decerr_m_axi_rvalid_next; - wire decerr_m_axi_rready; - - reg [7:0] decerr_len_reg = 8'd0, decerr_len_next; - - assign m_rc_ready = !decerr_m_axi_rvalid_reg; - - always @* begin - decerr_len_next = decerr_len_reg; - decerr_m_axi_rid_next = decerr_m_axi_rid_reg; - decerr_m_axi_rlast_next = decerr_m_axi_rlast_reg; - decerr_m_axi_rvalid_next = decerr_m_axi_rvalid_reg; - - if (decerr_m_axi_rvalid_reg) begin - if (decerr_m_axi_rready) begin - if (decerr_len_reg > 0) begin - decerr_len_next = decerr_len_reg-1; - decerr_m_axi_rlast_next = (decerr_len_next == 0); - decerr_m_axi_rvalid_next = 1'b1; - end else begin - decerr_m_axi_rvalid_next = 1'b0; - end - end - end else if (m_rc_valid && m_rc_ready) begin - decerr_len_next = int_s_axi_arlen[m*8 +: 8]; - decerr_m_axi_rid_next = int_s_axi_arid[m*S_ID_WIDTH +: S_ID_WIDTH]; - decerr_m_axi_rlast_next = (decerr_len_next == 0); - decerr_m_axi_rvalid_next = 1'b1; - end - end - - always @(posedge clk) begin - if (rst) begin - decerr_m_axi_rvalid_reg <= 1'b0; - end else begin - decerr_m_axi_rvalid_reg <= decerr_m_axi_rvalid_next; - end - - decerr_m_axi_rid_reg <= decerr_m_axi_rid_next; - decerr_m_axi_rlast_reg <= decerr_m_axi_rlast_next; - decerr_len_reg <= decerr_len_next; - end - - // read response arbitration - wire [M_COUNT_P1-1:0] r_request; - wire [M_COUNT_P1-1:0] r_acknowledge; - wire [M_COUNT_P1-1:0] r_grant; - wire r_grant_valid; - wire [CL_M_COUNT_P1-1:0] r_grant_encoded; - - arbiter #( - .PORTS(M_COUNT_P1), - .ARB_TYPE_ROUND_ROBIN(1), - .ARB_BLOCK(1), - .ARB_BLOCK_ACK(1), - .ARB_LSB_HIGH_PRIORITY(1) - ) - r_arb_inst ( - .clk(clk), - .rst(rst), - .request(r_request), - .acknowledge(r_acknowledge), - .grant(r_grant), - .grant_valid(r_grant_valid), - .grant_encoded(r_grant_encoded) - ); - - // read response mux - wire [S_ID_WIDTH-1:0] m_axi_rid_mux = {decerr_m_axi_rid_reg, int_m_axi_rid} >> r_grant_encoded*M_ID_WIDTH; - wire [DATA_WIDTH-1:0] m_axi_rdata_mux = {{DATA_WIDTH{1'b0}}, int_m_axi_rdata} >> r_grant_encoded*DATA_WIDTH; - wire [1:0] m_axi_rresp_mux = {2'b11, int_m_axi_rresp} >> r_grant_encoded*2; - wire m_axi_rlast_mux = {decerr_m_axi_rlast_reg, int_m_axi_rlast} >> r_grant_encoded; - wire [RUSER_WIDTH-1:0] m_axi_ruser_mux = {{RUSER_WIDTH{1'b0}}, int_m_axi_ruser} >> r_grant_encoded*RUSER_WIDTH; - wire m_axi_rvalid_mux = ({decerr_m_axi_rvalid_reg, int_m_axi_rvalid} >> r_grant_encoded) & r_grant_valid; - wire m_axi_rready_mux; - - assign int_axi_rready[m*M_COUNT +: M_COUNT] = (r_grant_valid && m_axi_rready_mux) << r_grant_encoded; - assign decerr_m_axi_rready = (r_grant_valid && m_axi_rready_mux) && (r_grant_encoded == M_COUNT_P1-1); - - for (n = 0; n < M_COUNT; n = n + 1) begin - assign r_request[n] = int_axi_rvalid[n*S_COUNT+m] && !r_grant[n]; - assign r_acknowledge[n] = r_grant[n] && int_axi_rvalid[n*S_COUNT+m] && m_axi_rlast_mux && m_axi_rready_mux; - end - - assign r_request[M_COUNT_P1-1] = decerr_m_axi_rvalid_reg && !r_grant[M_COUNT_P1-1]; - assign r_acknowledge[M_COUNT_P1-1] = r_grant[M_COUNT_P1-1] && decerr_m_axi_rvalid_reg && decerr_m_axi_rlast_reg && m_axi_rready_mux; - - assign s_cpl_id = m_axi_rid_mux; - assign s_cpl_valid = m_axi_rvalid_mux && m_axi_rready_mux && m_axi_rlast_mux; - - // S side register - axi_register_rd #( - .DATA_WIDTH(DATA_WIDTH), - .ADDR_WIDTH(ADDR_WIDTH), - .STRB_WIDTH(STRB_WIDTH), - .ID_WIDTH(S_ID_WIDTH), - .ARUSER_ENABLE(ARUSER_ENABLE), - .ARUSER_WIDTH(ARUSER_WIDTH), - .RUSER_ENABLE(RUSER_ENABLE), - .RUSER_WIDTH(RUSER_WIDTH), - .AR_REG_TYPE(S_AR_REG_TYPE[m*2 +: 2]), - .R_REG_TYPE(S_R_REG_TYPE[m*2 +: 2]) - ) - reg_inst ( - .clk(clk), - .rst(rst), - .s_axi_arid(s_axi_arid[m*S_ID_WIDTH +: S_ID_WIDTH]), - .s_axi_araddr(s_axi_araddr[m*ADDR_WIDTH +: ADDR_WIDTH]), - .s_axi_arlen(s_axi_arlen[m*8 +: 8]), - .s_axi_arsize(s_axi_arsize[m*3 +: 3]), - .s_axi_arburst(s_axi_arburst[m*2 +: 2]), - .s_axi_arlock(s_axi_arlock[m]), - .s_axi_arcache(s_axi_arcache[m*4 +: 4]), - .s_axi_arprot(s_axi_arprot[m*3 +: 3]), - .s_axi_arqos(s_axi_arqos[m*4 +: 4]), - .s_axi_arregion(4'd0), - .s_axi_aruser(s_axi_aruser[m*ARUSER_WIDTH +: ARUSER_WIDTH]), - .s_axi_arvalid(s_axi_arvalid[m]), - .s_axi_arready(s_axi_arready[m]), - .s_axi_rid(s_axi_rid[m*S_ID_WIDTH +: S_ID_WIDTH]), - .s_axi_rdata(s_axi_rdata[m*DATA_WIDTH +: DATA_WIDTH]), - .s_axi_rresp(s_axi_rresp[m*2 +: 2]), - .s_axi_rlast(s_axi_rlast[m]), - .s_axi_ruser(s_axi_ruser[m*RUSER_WIDTH +: RUSER_WIDTH]), - .s_axi_rvalid(s_axi_rvalid[m]), - .s_axi_rready(s_axi_rready[m]), - .m_axi_arid(int_s_axi_arid[m*S_ID_WIDTH +: S_ID_WIDTH]), - .m_axi_araddr(int_s_axi_araddr[m*ADDR_WIDTH +: ADDR_WIDTH]), - .m_axi_arlen(int_s_axi_arlen[m*8 +: 8]), - .m_axi_arsize(int_s_axi_arsize[m*3 +: 3]), - .m_axi_arburst(int_s_axi_arburst[m*2 +: 2]), - .m_axi_arlock(int_s_axi_arlock[m]), - .m_axi_arcache(int_s_axi_arcache[m*4 +: 4]), - .m_axi_arprot(int_s_axi_arprot[m*3 +: 3]), - .m_axi_arqos(int_s_axi_arqos[m*4 +: 4]), - .m_axi_arregion(), - .m_axi_aruser(int_s_axi_aruser[m*ARUSER_WIDTH +: ARUSER_WIDTH]), - .m_axi_arvalid(int_s_axi_arvalid[m]), - .m_axi_arready(int_s_axi_arready[m]), - .m_axi_rid(m_axi_rid_mux), - .m_axi_rdata(m_axi_rdata_mux), - .m_axi_rresp(m_axi_rresp_mux), - .m_axi_rlast(m_axi_rlast_mux), - .m_axi_ruser(m_axi_ruser_mux), - .m_axi_rvalid(m_axi_rvalid_mux), - .m_axi_rready(m_axi_rready_mux) - ); - end // s_ifaces - - for (n = 0; n < M_COUNT; n = n + 1) begin : m_ifaces - // in-flight transaction count - wire trans_start; - wire trans_complete; - reg [$clog2(M_ISSUE[n*32 +: 32]+1)-1:0] trans_count_reg = 0; - - wire trans_limit = trans_count_reg >= M_ISSUE[n*32 +: 32] && !trans_complete; - - always @(posedge clk) begin - if (rst) begin - trans_count_reg <= 0; - end else begin - if (trans_start && !trans_complete) begin - trans_count_reg <= trans_count_reg + 1; - end else if (!trans_start && trans_complete) begin - trans_count_reg <= trans_count_reg - 1; - end - end - end - - // address arbitration - wire [S_COUNT-1:0] a_request; - wire [S_COUNT-1:0] a_acknowledge; - wire [S_COUNT-1:0] a_grant; - wire a_grant_valid; - wire [CL_S_COUNT-1:0] a_grant_encoded; - - arbiter #( - .PORTS(S_COUNT), - .ARB_TYPE_ROUND_ROBIN(1), - .ARB_BLOCK(1), - .ARB_BLOCK_ACK(1), - .ARB_LSB_HIGH_PRIORITY(1) - ) - a_arb_inst ( - .clk(clk), - .rst(rst), - .request(a_request), - .acknowledge(a_acknowledge), - .grant(a_grant), - .grant_valid(a_grant_valid), - .grant_encoded(a_grant_encoded) - ); - - // address mux - wire [M_ID_WIDTH-1:0] s_axi_arid_mux = int_s_axi_arid[a_grant_encoded*S_ID_WIDTH +: S_ID_WIDTH] | (a_grant_encoded << S_ID_WIDTH); - wire [ADDR_WIDTH-1:0] s_axi_araddr_mux = int_s_axi_araddr[a_grant_encoded*ADDR_WIDTH +: ADDR_WIDTH]; - wire [7:0] s_axi_arlen_mux = int_s_axi_arlen[a_grant_encoded*8 +: 8]; - wire [2:0] s_axi_arsize_mux = int_s_axi_arsize[a_grant_encoded*3 +: 3]; - wire [1:0] s_axi_arburst_mux = int_s_axi_arburst[a_grant_encoded*2 +: 2]; - wire s_axi_arlock_mux = int_s_axi_arlock[a_grant_encoded]; - wire [3:0] s_axi_arcache_mux = int_s_axi_arcache[a_grant_encoded*4 +: 4]; - wire [2:0] s_axi_arprot_mux = int_s_axi_arprot[a_grant_encoded*3 +: 3]; - wire [3:0] s_axi_arqos_mux = int_s_axi_arqos[a_grant_encoded*4 +: 4]; - wire [3:0] s_axi_arregion_mux = int_s_axi_arregion[a_grant_encoded*4 +: 4]; - wire [ARUSER_WIDTH-1:0] s_axi_aruser_mux = int_s_axi_aruser[a_grant_encoded*ARUSER_WIDTH +: ARUSER_WIDTH]; - wire s_axi_arvalid_mux = int_axi_arvalid[a_grant_encoded*M_COUNT+n] && a_grant_valid; - wire s_axi_arready_mux; - - assign int_axi_arready[n*S_COUNT +: S_COUNT] = (a_grant_valid && s_axi_arready_mux) << a_grant_encoded; - - for (m = 0; m < S_COUNT; m = m + 1) begin - assign a_request[m] = int_axi_arvalid[m*M_COUNT+n] && !a_grant[m] && !trans_limit; - assign a_acknowledge[m] = a_grant[m] && int_axi_arvalid[m*M_COUNT+n] && s_axi_arready_mux; - end - - assign trans_start = s_axi_arvalid_mux && s_axi_arready_mux && a_grant_valid; - - // read response forwarding - wire [CL_S_COUNT-1:0] r_select = m_axi_rid[n*M_ID_WIDTH +: M_ID_WIDTH] >> S_ID_WIDTH; - - assign int_axi_rvalid[n*S_COUNT +: S_COUNT] = int_m_axi_rvalid[n] << r_select; - assign int_m_axi_rready[n] = int_axi_rready[r_select*M_COUNT+n]; - - assign trans_complete = int_m_axi_rvalid[n] && int_m_axi_rready[n] && int_m_axi_rlast[n]; - - // M side register - axi_register_rd #( - .DATA_WIDTH(DATA_WIDTH), - .ADDR_WIDTH(ADDR_WIDTH), - .STRB_WIDTH(STRB_WIDTH), - .ID_WIDTH(M_ID_WIDTH), - .ARUSER_ENABLE(ARUSER_ENABLE), - .ARUSER_WIDTH(ARUSER_WIDTH), - .RUSER_ENABLE(RUSER_ENABLE), - .RUSER_WIDTH(RUSER_WIDTH), - .AR_REG_TYPE(M_AR_REG_TYPE[n*2 +: 2]), - .R_REG_TYPE(M_R_REG_TYPE[n*2 +: 2]) - ) - reg_inst ( - .clk(clk), - .rst(rst), - .s_axi_arid(s_axi_arid_mux), - .s_axi_araddr(s_axi_araddr_mux), - .s_axi_arlen(s_axi_arlen_mux), - .s_axi_arsize(s_axi_arsize_mux), - .s_axi_arburst(s_axi_arburst_mux), - .s_axi_arlock(s_axi_arlock_mux), - .s_axi_arcache(s_axi_arcache_mux), - .s_axi_arprot(s_axi_arprot_mux), - .s_axi_arqos(s_axi_arqos_mux), - .s_axi_arregion(s_axi_arregion_mux), - .s_axi_aruser(s_axi_aruser_mux), - .s_axi_arvalid(s_axi_arvalid_mux), - .s_axi_arready(s_axi_arready_mux), - .s_axi_rid(int_m_axi_rid[n*M_ID_WIDTH +: M_ID_WIDTH]), - .s_axi_rdata(int_m_axi_rdata[n*DATA_WIDTH +: DATA_WIDTH]), - .s_axi_rresp(int_m_axi_rresp[n*2 +: 2]), - .s_axi_rlast(int_m_axi_rlast[n]), - .s_axi_ruser(int_m_axi_ruser[n*RUSER_WIDTH +: RUSER_WIDTH]), - .s_axi_rvalid(int_m_axi_rvalid[n]), - .s_axi_rready(int_m_axi_rready[n]), - .m_axi_arid(m_axi_arid[n*M_ID_WIDTH +: M_ID_WIDTH]), - .m_axi_araddr(m_axi_araddr[n*ADDR_WIDTH +: ADDR_WIDTH]), - .m_axi_arlen(m_axi_arlen[n*8 +: 8]), - .m_axi_arsize(m_axi_arsize[n*3 +: 3]), - .m_axi_arburst(m_axi_arburst[n*2 +: 2]), - .m_axi_arlock(m_axi_arlock[n]), - .m_axi_arcache(m_axi_arcache[n*4 +: 4]), - .m_axi_arprot(m_axi_arprot[n*3 +: 3]), - .m_axi_arqos(m_axi_arqos[n*4 +: 4]), - .m_axi_arregion(m_axi_arregion[n*4 +: 4]), - .m_axi_aruser(m_axi_aruser[n*ARUSER_WIDTH +: ARUSER_WIDTH]), - .m_axi_arvalid(m_axi_arvalid[n]), - .m_axi_arready(m_axi_arready[n]), - .m_axi_rid(m_axi_rid[n*M_ID_WIDTH +: M_ID_WIDTH]), - .m_axi_rdata(m_axi_rdata[n*DATA_WIDTH +: DATA_WIDTH]), - .m_axi_rresp(m_axi_rresp[n*2 +: 2]), - .m_axi_rlast(m_axi_rlast[n]), - .m_axi_ruser(m_axi_ruser[n*RUSER_WIDTH +: RUSER_WIDTH]), - .m_axi_rvalid(m_axi_rvalid[n]), - .m_axi_rready(m_axi_rready[n]) - ); - end // m_ifaces - -endgenerate - -endmodule - -`resetall diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_crossbar_wr.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_crossbar_wr.v deleted file mode 100644 index 5f556653..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_crossbar_wr.v +++ /dev/null @@ -1,678 +0,0 @@ -/* - -Copyright (c) 2018 Alex Forencich - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -// Language: Verilog 2001 - -`resetall -`timescale 1ns / 1ps -`default_nettype none - -/* - * AXI4 crossbar (write) - */ -module axi_crossbar_wr # -( - // Number of AXI inputs (slave interfaces) - parameter S_COUNT = 4, - // Number of AXI outputs (master interfaces) - parameter M_COUNT = 4, - // Width of data bus in bits - parameter DATA_WIDTH = 32, - // Width of address bus in bits - parameter ADDR_WIDTH = 32, - // Width of wstrb (width of data bus in words) - parameter STRB_WIDTH = (DATA_WIDTH/8), - // Input ID field width (from AXI masters) - parameter S_ID_WIDTH = 8, - // Output ID field width (towards AXI slaves) - // Additional bits required for response routing - parameter M_ID_WIDTH = S_ID_WIDTH+$clog2(S_COUNT), - // Propagate awuser signal - parameter AWUSER_ENABLE = 0, - // Width of awuser signal - parameter AWUSER_WIDTH = 1, - // Propagate wuser signal - parameter WUSER_ENABLE = 0, - // Width of wuser signal - parameter WUSER_WIDTH = 1, - // Propagate buser signal - parameter BUSER_ENABLE = 0, - // Width of buser signal - parameter BUSER_WIDTH = 1, - // Number of concurrent unique IDs for each slave interface - // S_COUNT concatenated fields of 32 bits - parameter S_THREADS = {S_COUNT{32'd2}}, - // Number of concurrent operations for each slave interface - // S_COUNT concatenated fields of 32 bits - parameter S_ACCEPT = {S_COUNT{32'd16}}, - // Number of regions per master interface - parameter M_REGIONS = 1, - // Master interface base addresses - // M_COUNT concatenated fields of M_REGIONS concatenated fields of ADDR_WIDTH bits - // set to zero for default addressing based on M_ADDR_WIDTH - parameter M_BASE_ADDR = 0, - // Master interface address widths - // M_COUNT concatenated fields of M_REGIONS concatenated fields of 32 bits - parameter M_ADDR_WIDTH = {M_COUNT{{M_REGIONS{32'd24}}}}, - // Write connections between interfaces - // M_COUNT concatenated fields of S_COUNT bits - parameter M_CONNECT = {M_COUNT{{S_COUNT{1'b1}}}}, - // Number of concurrent operations for each master interface - // M_COUNT concatenated fields of 32 bits - parameter M_ISSUE = {M_COUNT{32'd4}}, - // Secure master (fail operations based on awprot/arprot) - // M_COUNT bits - parameter M_SECURE = {M_COUNT{1'b0}}, - // Slave interface AW channel register type (input) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter S_AW_REG_TYPE = {S_COUNT{2'd0}}, - // Slave interface W channel register type (input) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter S_W_REG_TYPE = {S_COUNT{2'd0}}, - // Slave interface B channel register type (output) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter S_B_REG_TYPE = {S_COUNT{2'd1}}, - // Master interface AW channel register type (output) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter M_AW_REG_TYPE = {M_COUNT{2'd1}}, - // Master interface W channel register type (output) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter M_W_REG_TYPE = {M_COUNT{2'd2}}, - // Master interface B channel register type (input) - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter M_B_REG_TYPE = {M_COUNT{2'd0}} -) -( - input wire clk, - input wire rst, - - /* - * AXI slave interfaces - */ - input wire [S_COUNT*S_ID_WIDTH-1:0] s_axi_awid, - input wire [S_COUNT*ADDR_WIDTH-1:0] s_axi_awaddr, - input wire [S_COUNT*8-1:0] s_axi_awlen, - input wire [S_COUNT*3-1:0] s_axi_awsize, - input wire [S_COUNT*2-1:0] s_axi_awburst, - input wire [S_COUNT-1:0] s_axi_awlock, - input wire [S_COUNT*4-1:0] s_axi_awcache, - input wire [S_COUNT*3-1:0] s_axi_awprot, - input wire [S_COUNT*4-1:0] s_axi_awqos, - input wire [S_COUNT*AWUSER_WIDTH-1:0] s_axi_awuser, - input wire [S_COUNT-1:0] s_axi_awvalid, - output wire [S_COUNT-1:0] s_axi_awready, - input wire [S_COUNT*DATA_WIDTH-1:0] s_axi_wdata, - input wire [S_COUNT*STRB_WIDTH-1:0] s_axi_wstrb, - input wire [S_COUNT-1:0] s_axi_wlast, - input wire [S_COUNT*WUSER_WIDTH-1:0] s_axi_wuser, - input wire [S_COUNT-1:0] s_axi_wvalid, - output wire [S_COUNT-1:0] s_axi_wready, - output wire [S_COUNT*S_ID_WIDTH-1:0] s_axi_bid, - output wire [S_COUNT*2-1:0] s_axi_bresp, - output wire [S_COUNT*BUSER_WIDTH-1:0] s_axi_buser, - output wire [S_COUNT-1:0] s_axi_bvalid, - input wire [S_COUNT-1:0] s_axi_bready, - - /* - * AXI master interfaces - */ - output wire [M_COUNT*M_ID_WIDTH-1:0] m_axi_awid, - output wire [M_COUNT*ADDR_WIDTH-1:0] m_axi_awaddr, - output wire [M_COUNT*8-1:0] m_axi_awlen, - output wire [M_COUNT*3-1:0] m_axi_awsize, - output wire [M_COUNT*2-1:0] m_axi_awburst, - output wire [M_COUNT-1:0] m_axi_awlock, - output wire [M_COUNT*4-1:0] m_axi_awcache, - output wire [M_COUNT*3-1:0] m_axi_awprot, - output wire [M_COUNT*4-1:0] m_axi_awqos, - output wire [M_COUNT*4-1:0] m_axi_awregion, - output wire [M_COUNT*AWUSER_WIDTH-1:0] m_axi_awuser, - output wire [M_COUNT-1:0] m_axi_awvalid, - input wire [M_COUNT-1:0] m_axi_awready, - output wire [M_COUNT*DATA_WIDTH-1:0] m_axi_wdata, - output wire [M_COUNT*STRB_WIDTH-1:0] m_axi_wstrb, - output wire [M_COUNT-1:0] m_axi_wlast, - output wire [M_COUNT*WUSER_WIDTH-1:0] m_axi_wuser, - output wire [M_COUNT-1:0] m_axi_wvalid, - input wire [M_COUNT-1:0] m_axi_wready, - input wire [M_COUNT*M_ID_WIDTH-1:0] m_axi_bid, - input wire [M_COUNT*2-1:0] m_axi_bresp, - input wire [M_COUNT*BUSER_WIDTH-1:0] m_axi_buser, - input wire [M_COUNT-1:0] m_axi_bvalid, - output wire [M_COUNT-1:0] m_axi_bready -); - -parameter CL_S_COUNT = $clog2(S_COUNT); -parameter CL_M_COUNT = $clog2(M_COUNT); -parameter M_COUNT_P1 = M_COUNT+1; -parameter CL_M_COUNT_P1 = $clog2(M_COUNT_P1); - -integer i; - -// check configuration -initial begin - if (M_ID_WIDTH < S_ID_WIDTH+$clog2(S_COUNT)) begin - $error("Error: M_ID_WIDTH must be at least $clog2(S_COUNT) larger than S_ID_WIDTH (instance %m)"); - $finish; - end - - for (i = 0; i < M_COUNT*M_REGIONS; i = i + 1) begin - if (M_ADDR_WIDTH[i*32 +: 32] && (M_ADDR_WIDTH[i*32 +: 32] < 12 || M_ADDR_WIDTH[i*32 +: 32] > ADDR_WIDTH)) begin - $error("Error: value out of range (instance %m)"); - $finish; - end - end -end - -wire [S_COUNT*S_ID_WIDTH-1:0] int_s_axi_awid; -wire [S_COUNT*ADDR_WIDTH-1:0] int_s_axi_awaddr; -wire [S_COUNT*8-1:0] int_s_axi_awlen; -wire [S_COUNT*3-1:0] int_s_axi_awsize; -wire [S_COUNT*2-1:0] int_s_axi_awburst; -wire [S_COUNT-1:0] int_s_axi_awlock; -wire [S_COUNT*4-1:0] int_s_axi_awcache; -wire [S_COUNT*3-1:0] int_s_axi_awprot; -wire [S_COUNT*4-1:0] int_s_axi_awqos; -wire [S_COUNT*4-1:0] int_s_axi_awregion; -wire [S_COUNT*AWUSER_WIDTH-1:0] int_s_axi_awuser; -wire [S_COUNT-1:0] int_s_axi_awvalid; -wire [S_COUNT-1:0] int_s_axi_awready; - -wire [S_COUNT*M_COUNT-1:0] int_axi_awvalid; -wire [M_COUNT*S_COUNT-1:0] int_axi_awready; - -wire [S_COUNT*DATA_WIDTH-1:0] int_s_axi_wdata; -wire [S_COUNT*STRB_WIDTH-1:0] int_s_axi_wstrb; -wire [S_COUNT-1:0] int_s_axi_wlast; -wire [S_COUNT*WUSER_WIDTH-1:0] int_s_axi_wuser; -wire [S_COUNT-1:0] int_s_axi_wvalid; -wire [S_COUNT-1:0] int_s_axi_wready; - -wire [S_COUNT*M_COUNT-1:0] int_axi_wvalid; -wire [M_COUNT*S_COUNT-1:0] int_axi_wready; - -wire [M_COUNT*M_ID_WIDTH-1:0] int_m_axi_bid; -wire [M_COUNT*2-1:0] int_m_axi_bresp; -wire [M_COUNT*BUSER_WIDTH-1:0] int_m_axi_buser; -wire [M_COUNT-1:0] int_m_axi_bvalid; -wire [M_COUNT-1:0] int_m_axi_bready; - -wire [M_COUNT*S_COUNT-1:0] int_axi_bvalid; -wire [S_COUNT*M_COUNT-1:0] int_axi_bready; - -generate - - genvar m, n; - - for (m = 0; m < S_COUNT; m = m + 1) begin : s_ifaces - // address decode and admission control - wire [CL_M_COUNT-1:0] a_select; - - wire m_axi_avalid; - wire m_axi_aready; - - wire [CL_M_COUNT-1:0] m_wc_select; - wire m_wc_decerr; - wire m_wc_valid; - wire m_wc_ready; - - wire m_rc_decerr; - wire m_rc_valid; - wire m_rc_ready; - - wire [S_ID_WIDTH-1:0] s_cpl_id; - wire s_cpl_valid; - - axi_crossbar_addr #( - .S(m), - .S_COUNT(S_COUNT), - .M_COUNT(M_COUNT), - .ADDR_WIDTH(ADDR_WIDTH), - .ID_WIDTH(S_ID_WIDTH), - .S_THREADS(S_THREADS[m*32 +: 32]), - .S_ACCEPT(S_ACCEPT[m*32 +: 32]), - .M_REGIONS(M_REGIONS), - .M_BASE_ADDR(M_BASE_ADDR), - .M_ADDR_WIDTH(M_ADDR_WIDTH), - .M_CONNECT(M_CONNECT), - .M_SECURE(M_SECURE), - .WC_OUTPUT(1) - ) - addr_inst ( - .clk(clk), - .rst(rst), - - /* - * Address input - */ - .s_axi_aid(int_s_axi_awid[m*S_ID_WIDTH +: S_ID_WIDTH]), - .s_axi_aaddr(int_s_axi_awaddr[m*ADDR_WIDTH +: ADDR_WIDTH]), - .s_axi_aprot(int_s_axi_awprot[m*3 +: 3]), - .s_axi_aqos(int_s_axi_awqos[m*4 +: 4]), - .s_axi_avalid(int_s_axi_awvalid[m]), - .s_axi_aready(int_s_axi_awready[m]), - - /* - * Address output - */ - .m_axi_aregion(int_s_axi_awregion[m*4 +: 4]), - .m_select(a_select), - .m_axi_avalid(m_axi_avalid), - .m_axi_aready(m_axi_aready), - - /* - * Write command output - */ - .m_wc_select(m_wc_select), - .m_wc_decerr(m_wc_decerr), - .m_wc_valid(m_wc_valid), - .m_wc_ready(m_wc_ready), - - /* - * Response command output - */ - .m_rc_decerr(m_rc_decerr), - .m_rc_valid(m_rc_valid), - .m_rc_ready(m_rc_ready), - - /* - * Completion input - */ - .s_cpl_id(s_cpl_id), - .s_cpl_valid(s_cpl_valid) - ); - - assign int_axi_awvalid[m*M_COUNT +: M_COUNT] = m_axi_avalid << a_select; - assign m_axi_aready = int_axi_awready[a_select*S_COUNT+m]; - - // write command handling - reg [CL_M_COUNT-1:0] w_select_reg = 0, w_select_next; - reg w_drop_reg = 1'b0, w_drop_next; - reg w_select_valid_reg = 1'b0, w_select_valid_next; - - assign m_wc_ready = !w_select_valid_reg; - - always @* begin - w_select_next = w_select_reg; - w_drop_next = w_drop_reg && !(int_s_axi_wvalid[m] && int_s_axi_wready[m] && int_s_axi_wlast[m]); - w_select_valid_next = w_select_valid_reg && !(int_s_axi_wvalid[m] && int_s_axi_wready[m] && int_s_axi_wlast[m]); - - if (m_wc_valid && !w_select_valid_reg) begin - w_select_next = m_wc_select; - w_drop_next = m_wc_decerr; - w_select_valid_next = m_wc_valid; - end - end - - always @(posedge clk) begin - if (rst) begin - w_select_valid_reg <= 1'b0; - end else begin - w_select_valid_reg <= w_select_valid_next; - end - - w_select_reg <= w_select_next; - w_drop_reg <= w_drop_next; - end - - // write data forwarding - assign int_axi_wvalid[m*M_COUNT +: M_COUNT] = (int_s_axi_wvalid[m] && w_select_valid_reg && !w_drop_reg) << w_select_reg; - assign int_s_axi_wready[m] = int_axi_wready[w_select_reg*S_COUNT+m] || w_drop_reg; - - // decode error handling - reg [S_ID_WIDTH-1:0] decerr_m_axi_bid_reg = {S_ID_WIDTH{1'b0}}, decerr_m_axi_bid_next; - reg decerr_m_axi_bvalid_reg = 1'b0, decerr_m_axi_bvalid_next; - wire decerr_m_axi_bready; - - assign m_rc_ready = !decerr_m_axi_bvalid_reg; - - always @* begin - decerr_m_axi_bid_next = decerr_m_axi_bid_reg; - decerr_m_axi_bvalid_next = decerr_m_axi_bvalid_reg; - - if (decerr_m_axi_bvalid_reg) begin - if (decerr_m_axi_bready) begin - decerr_m_axi_bvalid_next = 1'b0; - end - end else if (m_rc_valid && m_rc_ready) begin - decerr_m_axi_bid_next = int_s_axi_awid[m*S_ID_WIDTH +: S_ID_WIDTH]; - decerr_m_axi_bvalid_next = 1'b1; - end - end - - always @(posedge clk) begin - if (rst) begin - decerr_m_axi_bvalid_reg <= 1'b0; - end else begin - decerr_m_axi_bvalid_reg <= decerr_m_axi_bvalid_next; - end - - decerr_m_axi_bid_reg <= decerr_m_axi_bid_next; - end - - // write response arbitration - wire [M_COUNT_P1-1:0] b_request; - wire [M_COUNT_P1-1:0] b_acknowledge; - wire [M_COUNT_P1-1:0] b_grant; - wire b_grant_valid; - wire [CL_M_COUNT_P1-1:0] b_grant_encoded; - - arbiter #( - .PORTS(M_COUNT_P1), - .ARB_TYPE_ROUND_ROBIN(1), - .ARB_BLOCK(1), - .ARB_BLOCK_ACK(1), - .ARB_LSB_HIGH_PRIORITY(1) - ) - b_arb_inst ( - .clk(clk), - .rst(rst), - .request(b_request), - .acknowledge(b_acknowledge), - .grant(b_grant), - .grant_valid(b_grant_valid), - .grant_encoded(b_grant_encoded) - ); - - // write response mux - wire [S_ID_WIDTH-1:0] m_axi_bid_mux = {decerr_m_axi_bid_reg, int_m_axi_bid} >> b_grant_encoded*M_ID_WIDTH; - wire [1:0] m_axi_bresp_mux = {2'b11, int_m_axi_bresp} >> b_grant_encoded*2; - wire [BUSER_WIDTH-1:0] m_axi_buser_mux = {{BUSER_WIDTH{1'b0}}, int_m_axi_buser} >> b_grant_encoded*BUSER_WIDTH; - wire m_axi_bvalid_mux = ({decerr_m_axi_bvalid_reg, int_m_axi_bvalid} >> b_grant_encoded) & b_grant_valid; - wire m_axi_bready_mux; - - assign int_axi_bready[m*M_COUNT +: M_COUNT] = (b_grant_valid && m_axi_bready_mux) << b_grant_encoded; - assign decerr_m_axi_bready = (b_grant_valid && m_axi_bready_mux) && (b_grant_encoded == M_COUNT_P1-1); - - for (n = 0; n < M_COUNT; n = n + 1) begin - assign b_request[n] = int_axi_bvalid[n*S_COUNT+m] && !b_grant[n]; - assign b_acknowledge[n] = b_grant[n] && int_axi_bvalid[n*S_COUNT+m] && m_axi_bready_mux; - end - - assign b_request[M_COUNT_P1-1] = decerr_m_axi_bvalid_reg && !b_grant[M_COUNT_P1-1]; - assign b_acknowledge[M_COUNT_P1-1] = b_grant[M_COUNT_P1-1] && decerr_m_axi_bvalid_reg && m_axi_bready_mux; - - assign s_cpl_id = m_axi_bid_mux; - assign s_cpl_valid = m_axi_bvalid_mux && m_axi_bready_mux; - - // S side register - axi_register_wr #( - .DATA_WIDTH(DATA_WIDTH), - .ADDR_WIDTH(ADDR_WIDTH), - .STRB_WIDTH(STRB_WIDTH), - .ID_WIDTH(S_ID_WIDTH), - .AWUSER_ENABLE(AWUSER_ENABLE), - .AWUSER_WIDTH(AWUSER_WIDTH), - .WUSER_ENABLE(WUSER_ENABLE), - .WUSER_WIDTH(WUSER_WIDTH), - .BUSER_ENABLE(BUSER_ENABLE), - .BUSER_WIDTH(BUSER_WIDTH), - .AW_REG_TYPE(S_AW_REG_TYPE[m*2 +: 2]), - .W_REG_TYPE(S_W_REG_TYPE[m*2 +: 2]), - .B_REG_TYPE(S_B_REG_TYPE[m*2 +: 2]) - ) - reg_inst ( - .clk(clk), - .rst(rst), - .s_axi_awid(s_axi_awid[m*S_ID_WIDTH +: S_ID_WIDTH]), - .s_axi_awaddr(s_axi_awaddr[m*ADDR_WIDTH +: ADDR_WIDTH]), - .s_axi_awlen(s_axi_awlen[m*8 +: 8]), - .s_axi_awsize(s_axi_awsize[m*3 +: 3]), - .s_axi_awburst(s_axi_awburst[m*2 +: 2]), - .s_axi_awlock(s_axi_awlock[m]), - .s_axi_awcache(s_axi_awcache[m*4 +: 4]), - .s_axi_awprot(s_axi_awprot[m*3 +: 3]), - .s_axi_awqos(s_axi_awqos[m*4 +: 4]), - .s_axi_awregion(4'd0), - .s_axi_awuser(s_axi_awuser[m*AWUSER_WIDTH +: AWUSER_WIDTH]), - .s_axi_awvalid(s_axi_awvalid[m]), - .s_axi_awready(s_axi_awready[m]), - .s_axi_wdata(s_axi_wdata[m*DATA_WIDTH +: DATA_WIDTH]), - .s_axi_wstrb(s_axi_wstrb[m*STRB_WIDTH +: STRB_WIDTH]), - .s_axi_wlast(s_axi_wlast[m]), - .s_axi_wuser(s_axi_wuser[m*WUSER_WIDTH +: WUSER_WIDTH]), - .s_axi_wvalid(s_axi_wvalid[m]), - .s_axi_wready(s_axi_wready[m]), - .s_axi_bid(s_axi_bid[m*S_ID_WIDTH +: S_ID_WIDTH]), - .s_axi_bresp(s_axi_bresp[m*2 +: 2]), - .s_axi_buser(s_axi_buser[m*BUSER_WIDTH +: BUSER_WIDTH]), - .s_axi_bvalid(s_axi_bvalid[m]), - .s_axi_bready(s_axi_bready[m]), - .m_axi_awid(int_s_axi_awid[m*S_ID_WIDTH +: S_ID_WIDTH]), - .m_axi_awaddr(int_s_axi_awaddr[m*ADDR_WIDTH +: ADDR_WIDTH]), - .m_axi_awlen(int_s_axi_awlen[m*8 +: 8]), - .m_axi_awsize(int_s_axi_awsize[m*3 +: 3]), - .m_axi_awburst(int_s_axi_awburst[m*2 +: 2]), - .m_axi_awlock(int_s_axi_awlock[m]), - .m_axi_awcache(int_s_axi_awcache[m*4 +: 4]), - .m_axi_awprot(int_s_axi_awprot[m*3 +: 3]), - .m_axi_awqos(int_s_axi_awqos[m*4 +: 4]), - .m_axi_awregion(), - .m_axi_awuser(int_s_axi_awuser[m*AWUSER_WIDTH +: AWUSER_WIDTH]), - .m_axi_awvalid(int_s_axi_awvalid[m]), - .m_axi_awready(int_s_axi_awready[m]), - .m_axi_wdata(int_s_axi_wdata[m*DATA_WIDTH +: DATA_WIDTH]), - .m_axi_wstrb(int_s_axi_wstrb[m*STRB_WIDTH +: STRB_WIDTH]), - .m_axi_wlast(int_s_axi_wlast[m]), - .m_axi_wuser(int_s_axi_wuser[m*WUSER_WIDTH +: WUSER_WIDTH]), - .m_axi_wvalid(int_s_axi_wvalid[m]), - .m_axi_wready(int_s_axi_wready[m]), - .m_axi_bid(m_axi_bid_mux), - .m_axi_bresp(m_axi_bresp_mux), - .m_axi_buser(m_axi_buser_mux), - .m_axi_bvalid(m_axi_bvalid_mux), - .m_axi_bready(m_axi_bready_mux) - ); - end // s_ifaces - - for (n = 0; n < M_COUNT; n = n + 1) begin : m_ifaces - // in-flight transaction count - wire trans_start; - wire trans_complete; - reg [$clog2(M_ISSUE[n*32 +: 32]+1)-1:0] trans_count_reg = 0; - - wire trans_limit = trans_count_reg >= M_ISSUE[n*32 +: 32] && !trans_complete; - - always @(posedge clk) begin - if (rst) begin - trans_count_reg <= 0; - end else begin - if (trans_start && !trans_complete) begin - trans_count_reg <= trans_count_reg + 1; - end else if (!trans_start && trans_complete) begin - trans_count_reg <= trans_count_reg - 1; - end - end - end - - // address arbitration - reg [CL_S_COUNT-1:0] w_select_reg = 0, w_select_next; - reg w_select_valid_reg = 1'b0, w_select_valid_next; - reg w_select_new_reg = 1'b0, w_select_new_next; - - wire [S_COUNT-1:0] a_request; - wire [S_COUNT-1:0] a_acknowledge; - wire [S_COUNT-1:0] a_grant; - wire a_grant_valid; - wire [CL_S_COUNT-1:0] a_grant_encoded; - - arbiter #( - .PORTS(S_COUNT), - .ARB_TYPE_ROUND_ROBIN(1), - .ARB_BLOCK(1), - .ARB_BLOCK_ACK(1), - .ARB_LSB_HIGH_PRIORITY(1) - ) - a_arb_inst ( - .clk(clk), - .rst(rst), - .request(a_request), - .acknowledge(a_acknowledge), - .grant(a_grant), - .grant_valid(a_grant_valid), - .grant_encoded(a_grant_encoded) - ); - - // address mux - wire [M_ID_WIDTH-1:0] s_axi_awid_mux = int_s_axi_awid[a_grant_encoded*S_ID_WIDTH +: S_ID_WIDTH] | (a_grant_encoded << S_ID_WIDTH); - wire [ADDR_WIDTH-1:0] s_axi_awaddr_mux = int_s_axi_awaddr[a_grant_encoded*ADDR_WIDTH +: ADDR_WIDTH]; - wire [7:0] s_axi_awlen_mux = int_s_axi_awlen[a_grant_encoded*8 +: 8]; - wire [2:0] s_axi_awsize_mux = int_s_axi_awsize[a_grant_encoded*3 +: 3]; - wire [1:0] s_axi_awburst_mux = int_s_axi_awburst[a_grant_encoded*2 +: 2]; - wire s_axi_awlock_mux = int_s_axi_awlock[a_grant_encoded]; - wire [3:0] s_axi_awcache_mux = int_s_axi_awcache[a_grant_encoded*4 +: 4]; - wire [2:0] s_axi_awprot_mux = int_s_axi_awprot[a_grant_encoded*3 +: 3]; - wire [3:0] s_axi_awqos_mux = int_s_axi_awqos[a_grant_encoded*4 +: 4]; - wire [3:0] s_axi_awregion_mux = int_s_axi_awregion[a_grant_encoded*4 +: 4]; - wire [AWUSER_WIDTH-1:0] s_axi_awuser_mux = int_s_axi_awuser[a_grant_encoded*AWUSER_WIDTH +: AWUSER_WIDTH]; - wire s_axi_awvalid_mux = int_axi_awvalid[a_grant_encoded*M_COUNT+n] && a_grant_valid; - wire s_axi_awready_mux; - - assign int_axi_awready[n*S_COUNT +: S_COUNT] = (a_grant_valid && s_axi_awready_mux) << a_grant_encoded; - - for (m = 0; m < S_COUNT; m = m + 1) begin - assign a_request[m] = int_axi_awvalid[m*M_COUNT+n] && !a_grant[m] && !trans_limit && !w_select_valid_next; - assign a_acknowledge[m] = a_grant[m] && int_axi_awvalid[m*M_COUNT+n] && s_axi_awready_mux; - end - - assign trans_start = s_axi_awvalid_mux && s_axi_awready_mux && a_grant_valid; - - // write data mux - wire [DATA_WIDTH-1:0] s_axi_wdata_mux = int_s_axi_wdata[w_select_reg*DATA_WIDTH +: DATA_WIDTH]; - wire [STRB_WIDTH-1:0] s_axi_wstrb_mux = int_s_axi_wstrb[w_select_reg*STRB_WIDTH +: STRB_WIDTH]; - wire s_axi_wlast_mux = int_s_axi_wlast[w_select_reg]; - wire [WUSER_WIDTH-1:0] s_axi_wuser_mux = int_s_axi_wuser[w_select_reg*WUSER_WIDTH +: WUSER_WIDTH]; - wire s_axi_wvalid_mux = int_axi_wvalid[w_select_reg*M_COUNT+n] && w_select_valid_reg; - wire s_axi_wready_mux; - - assign int_axi_wready[n*S_COUNT +: S_COUNT] = (w_select_valid_reg && s_axi_wready_mux) << w_select_reg; - - // write data routing - always @* begin - w_select_next = w_select_reg; - w_select_valid_next = w_select_valid_reg && !(s_axi_wvalid_mux && s_axi_wready_mux && s_axi_wlast_mux); - w_select_new_next = w_select_new_reg || !a_grant_valid || a_acknowledge; - - if (a_grant_valid && !w_select_valid_reg && w_select_new_reg) begin - w_select_next = a_grant_encoded; - w_select_valid_next = a_grant_valid; - w_select_new_next = 1'b0; - end - end - - always @(posedge clk) begin - if (rst) begin - w_select_valid_reg <= 1'b0; - w_select_new_reg <= 1'b1; - end else begin - w_select_valid_reg <= w_select_valid_next; - w_select_new_reg <= w_select_new_next; - end - - w_select_reg <= w_select_next; - end - - // write response forwarding - wire [CL_S_COUNT-1:0] b_select = m_axi_bid[n*M_ID_WIDTH +: M_ID_WIDTH] >> S_ID_WIDTH; - - assign int_axi_bvalid[n*S_COUNT +: S_COUNT] = int_m_axi_bvalid[n] << b_select; - assign int_m_axi_bready[n] = int_axi_bready[b_select*M_COUNT+n]; - - assign trans_complete = int_m_axi_bvalid[n] && int_m_axi_bready[n]; - - // M side register - axi_register_wr #( - .DATA_WIDTH(DATA_WIDTH), - .ADDR_WIDTH(ADDR_WIDTH), - .STRB_WIDTH(STRB_WIDTH), - .ID_WIDTH(M_ID_WIDTH), - .AWUSER_ENABLE(AWUSER_ENABLE), - .AWUSER_WIDTH(AWUSER_WIDTH), - .WUSER_ENABLE(WUSER_ENABLE), - .WUSER_WIDTH(WUSER_WIDTH), - .BUSER_ENABLE(BUSER_ENABLE), - .BUSER_WIDTH(BUSER_WIDTH), - .AW_REG_TYPE(M_AW_REG_TYPE[n*2 +: 2]), - .W_REG_TYPE(M_W_REG_TYPE[n*2 +: 2]), - .B_REG_TYPE(M_B_REG_TYPE[n*2 +: 2]) - ) - reg_inst ( - .clk(clk), - .rst(rst), - .s_axi_awid(s_axi_awid_mux), - .s_axi_awaddr(s_axi_awaddr_mux), - .s_axi_awlen(s_axi_awlen_mux), - .s_axi_awsize(s_axi_awsize_mux), - .s_axi_awburst(s_axi_awburst_mux), - .s_axi_awlock(s_axi_awlock_mux), - .s_axi_awcache(s_axi_awcache_mux), - .s_axi_awprot(s_axi_awprot_mux), - .s_axi_awqos(s_axi_awqos_mux), - .s_axi_awregion(s_axi_awregion_mux), - .s_axi_awuser(s_axi_awuser_mux), - .s_axi_awvalid(s_axi_awvalid_mux), - .s_axi_awready(s_axi_awready_mux), - .s_axi_wdata(s_axi_wdata_mux), - .s_axi_wstrb(s_axi_wstrb_mux), - .s_axi_wlast(s_axi_wlast_mux), - .s_axi_wuser(s_axi_wuser_mux), - .s_axi_wvalid(s_axi_wvalid_mux), - .s_axi_wready(s_axi_wready_mux), - .s_axi_bid(int_m_axi_bid[n*M_ID_WIDTH +: M_ID_WIDTH]), - .s_axi_bresp(int_m_axi_bresp[n*2 +: 2]), - .s_axi_buser(int_m_axi_buser[n*BUSER_WIDTH +: BUSER_WIDTH]), - .s_axi_bvalid(int_m_axi_bvalid[n]), - .s_axi_bready(int_m_axi_bready[n]), - .m_axi_awid(m_axi_awid[n*M_ID_WIDTH +: M_ID_WIDTH]), - .m_axi_awaddr(m_axi_awaddr[n*ADDR_WIDTH +: ADDR_WIDTH]), - .m_axi_awlen(m_axi_awlen[n*8 +: 8]), - .m_axi_awsize(m_axi_awsize[n*3 +: 3]), - .m_axi_awburst(m_axi_awburst[n*2 +: 2]), - .m_axi_awlock(m_axi_awlock[n]), - .m_axi_awcache(m_axi_awcache[n*4 +: 4]), - .m_axi_awprot(m_axi_awprot[n*3 +: 3]), - .m_axi_awqos(m_axi_awqos[n*4 +: 4]), - .m_axi_awregion(m_axi_awregion[n*4 +: 4]), - .m_axi_awuser(m_axi_awuser[n*AWUSER_WIDTH +: AWUSER_WIDTH]), - .m_axi_awvalid(m_axi_awvalid[n]), - .m_axi_awready(m_axi_awready[n]), - .m_axi_wdata(m_axi_wdata[n*DATA_WIDTH +: DATA_WIDTH]), - .m_axi_wstrb(m_axi_wstrb[n*STRB_WIDTH +: STRB_WIDTH]), - .m_axi_wlast(m_axi_wlast[n]), - .m_axi_wuser(m_axi_wuser[n*WUSER_WIDTH +: WUSER_WIDTH]), - .m_axi_wvalid(m_axi_wvalid[n]), - .m_axi_wready(m_axi_wready[n]), - .m_axi_bid(m_axi_bid[n*M_ID_WIDTH +: M_ID_WIDTH]), - .m_axi_bresp(m_axi_bresp[n*2 +: 2]), - .m_axi_buser(m_axi_buser[n*BUSER_WIDTH +: BUSER_WIDTH]), - .m_axi_bvalid(m_axi_bvalid[n]), - .m_axi_bready(m_axi_bready[n]) - ); - end // m_ifaces - -endgenerate - -endmodule - -`resetall diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_pipeline.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_pipeline.v deleted file mode 100644 index 7f3d08fe..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_pipeline.v +++ /dev/null @@ -1,214 +0,0 @@ -module axi_pipeline #( - parameter - C_M_AXI_ID_WIDTH = 8, - C_M_AXI_ADDR_WIDTH = 32, - C_M_AXI_DATA_WIDTH = 512, - C_M_AXI_WSTRB_WIDTH = (512 / 8), - - PIPELINE_LEVEL = 3, - EnableReadChannel = 1, - EnableWriteChannel = 1 -) -( - input ap_clk, - - // pipeline in - input in_AWVALID, - output in_AWREADY, - input [C_M_AXI_ADDR_WIDTH - 1:0] in_AWADDR, - input [1:0] in_AWBURST, - input [7:0] in_AWLEN, - input [2:0] in_AWSIZE, - input [C_M_AXI_ID_WIDTH - 1:0] in_AWID, - - input in_WVALID, - output in_WREADY, - input [C_M_AXI_DATA_WIDTH - 1:0] in_WDATA, - input [C_M_AXI_WSTRB_WIDTH - 1:0] in_WSTRB, - input in_WLAST, - - output in_BVALID, - input in_BREADY, - output [1:0] in_BRESP, - output [C_M_AXI_ID_WIDTH - 1:0] in_BID, - - input in_ARVALID, - output in_ARREADY, - input [C_M_AXI_ADDR_WIDTH - 1:0] in_ARADDR, - input [1:0] in_ARBURST, - input [7:0] in_ARLEN, - input [2:0] in_ARSIZE, - input [C_M_AXI_ID_WIDTH - 1:0] in_ARID, - - output in_RVALID, - input in_RREADY, - output [C_M_AXI_DATA_WIDTH - 1:0] in_RDATA, - output in_RLAST, - output [C_M_AXI_ID_WIDTH - 1:0] in_RID, - output [1:0] in_RRESP, - - // pipeline out - output out_AWVALID, - input out_AWREADY, - output [C_M_AXI_ADDR_WIDTH - 1:0] out_AWADDR, - output [1:0] out_AWBURST, - output [7:0] out_AWLEN, - output [2:0] out_AWSIZE, - output [C_M_AXI_ID_WIDTH - 1:0] out_AWID, - - output out_WVALID, - input out_WREADY, - output [C_M_AXI_DATA_WIDTH - 1:0] out_WDATA, - output [C_M_AXI_WSTRB_WIDTH - 1:0] out_WSTRB, - output out_WLAST, - - input out_BVALID, - output out_BREADY, - input [1:0] out_BRESP, - input [C_M_AXI_ID_WIDTH - 1:0] out_BID, - - output out_ARVALID, - input out_ARREADY, - output [C_M_AXI_ADDR_WIDTH - 1:0] out_ARADDR, - output [1:0] out_ARBURST, - output [7:0] out_ARLEN, - output [2:0] out_ARSIZE, - output [C_M_AXI_ID_WIDTH - 1:0] out_ARID, - - input out_RVALID, - output out_RREADY, - input [C_M_AXI_DATA_WIDTH - 1:0] out_RDATA, - input out_RLAST, - input [C_M_AXI_ID_WIDTH - 1:0] out_RID, - input [1:0] out_RRESP -); - - relay_station - #( - .DATA_WIDTH ( C_M_AXI_ADDR_WIDTH + C_M_AXI_ID_WIDTH + 8 + 3 + 2 ), - .DEPTH ( 2 ), - .ADDR_WIDTH ( 1 ), - .LEVEL ( PIPELINE_LEVEL ), - .CONNECT ( EnableWriteChannel ) - ) - AW_pipeline - ( - .clk ( ap_clk ), - .reset ( 1'b0 ), - .if_read_ce ( 1'b1 ), - .if_write_ce ( 1'b1 ), - - .if_din ( {in_AWADDR, in_AWID, in_AWLEN, in_AWSIZE, in_AWBURST} ), - .if_full_n ( in_AWREADY ), - .if_write ( in_AWVALID ), - - .if_dout ( {out_AWADDR, out_AWID, out_AWLEN, out_AWSIZE, out_AWBURST} ), - .if_empty_n ( out_AWVALID ), - .if_read ( out_AWREADY ) - ); - - relay_station - #( - .DATA_WIDTH( - C_M_AXI_DATA_WIDTH + C_M_AXI_WSTRB_WIDTH + 1 - ), - .DEPTH(2), - .ADDR_WIDTH(1), - .LEVEL( PIPELINE_LEVEL ), - .CONNECT ( EnableWriteChannel ) - ) - W_pipeline - ( - .clk (ap_clk), - .reset ( 1'b0 ), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din ({in_WDATA, in_WSTRB, in_WLAST}), - .if_full_n ( in_WREADY), - .if_write ( in_WVALID), - - .if_dout ({out_WDATA, out_WSTRB, out_WLAST}), - .if_empty_n (out_WVALID), - .if_read (out_WREADY) - ); - - relay_station - #( - .DATA_WIDTH( - C_M_AXI_ADDR_WIDTH + C_M_AXI_ID_WIDTH + 8 + 3 + 2 - ), - .DEPTH(2), - .ADDR_WIDTH(1), - .LEVEL( PIPELINE_LEVEL ), - .CONNECT( EnableReadChannel ) - ) - AR_pipeline - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din ({ in_ARADDR, in_ARID, in_ARLEN, in_ARSIZE, in_ARBURST}), - .if_full_n ( in_ARREADY), - .if_write ( in_ARVALID), - - .if_dout ({out_ARADDR, out_ARID, out_ARLEN, out_ARSIZE, out_ARBURST}), - .if_empty_n (out_ARVALID), - .if_read (out_ARREADY) - ); - - relay_station - #( - .DATA_WIDTH( - C_M_AXI_DATA_WIDTH + 1 + C_M_AXI_ID_WIDTH + 2 - ), - .DEPTH(2), - .ADDR_WIDTH(1), - .LEVEL( PIPELINE_LEVEL ), - .CONNECT( EnableReadChannel ) - ) - R_pipeline - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din ({out_RDATA, out_RLAST, out_RID, out_RRESP}), - .if_full_n ( out_RREADY), - .if_write ( out_RVALID), - - .if_dout ({in_RDATA, in_RLAST, in_RID, in_RRESP}), - .if_empty_n (in_RVALID), - .if_read (in_RREADY) - ); - - relay_station - #( - .DATA_WIDTH( - 2 + C_M_AXI_ID_WIDTH - ), - .DEPTH(2), - .ADDR_WIDTH(1), - .LEVEL( PIPELINE_LEVEL ), - .CONNECT( EnableWriteChannel ) - ) - B_pipeline - ( - .clk (ap_clk), - .reset (1'b0), - .if_read_ce (1'b1), - .if_write_ce(1'b1), - - .if_din ({out_BRESP, out_BID}), - .if_full_n (out_BREADY), - .if_write (out_BVALID), - - .if_dout ({ in_BRESP, in_BID}), - .if_empty_n (in_BVALID), - .if_read (in_BREADY) - ); - -endmodule diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_register_rd.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_register_rd.v deleted file mode 100644 index c0df03a0..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_register_rd.v +++ /dev/null @@ -1,530 +0,0 @@ -/* - -Copyright (c) 2018 Alex Forencich - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -// Language: Verilog 2001 - -`resetall -`timescale 1ns / 1ps -`default_nettype none - -/* - * AXI4 register (read) - */ -module axi_register_rd # -( - // Width of data bus in bits - parameter DATA_WIDTH = 32, - // Width of address bus in bits - parameter ADDR_WIDTH = 32, - // Width of wstrb (width of data bus in words) - parameter STRB_WIDTH = (DATA_WIDTH/8), - // Width of ID signal - parameter ID_WIDTH = 8, - // Propagate aruser signal - parameter ARUSER_ENABLE = 0, - // Width of aruser signal - parameter ARUSER_WIDTH = 1, - // Propagate ruser signal - parameter RUSER_ENABLE = 0, - // Width of ruser signal - parameter RUSER_WIDTH = 1, - // AR channel register type - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter AR_REG_TYPE = 1, - // R channel register type - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter R_REG_TYPE = 2 -) -( - input wire clk, - input wire rst, - - /* - * AXI slave interface - */ - input wire [ID_WIDTH-1:0] s_axi_arid, - input wire [ADDR_WIDTH-1:0] s_axi_araddr, - input wire [7:0] s_axi_arlen, - input wire [2:0] s_axi_arsize, - input wire [1:0] s_axi_arburst, - input wire s_axi_arlock, - input wire [3:0] s_axi_arcache, - input wire [2:0] s_axi_arprot, - input wire [3:0] s_axi_arqos, - input wire [3:0] s_axi_arregion, - input wire [ARUSER_WIDTH-1:0] s_axi_aruser, - input wire s_axi_arvalid, - output wire s_axi_arready, - output wire [ID_WIDTH-1:0] s_axi_rid, - output wire [DATA_WIDTH-1:0] s_axi_rdata, - output wire [1:0] s_axi_rresp, - output wire s_axi_rlast, - output wire [RUSER_WIDTH-1:0] s_axi_ruser, - output wire s_axi_rvalid, - input wire s_axi_rready, - - /* - * AXI master interface - */ - output wire [ID_WIDTH-1:0] m_axi_arid, - output wire [ADDR_WIDTH-1:0] m_axi_araddr, - output wire [7:0] m_axi_arlen, - output wire [2:0] m_axi_arsize, - output wire [1:0] m_axi_arburst, - output wire m_axi_arlock, - output wire [3:0] m_axi_arcache, - output wire [2:0] m_axi_arprot, - output wire [3:0] m_axi_arqos, - output wire [3:0] m_axi_arregion, - output wire [ARUSER_WIDTH-1:0] m_axi_aruser, - output wire m_axi_arvalid, - input wire m_axi_arready, - input wire [ID_WIDTH-1:0] m_axi_rid, - input wire [DATA_WIDTH-1:0] m_axi_rdata, - input wire [1:0] m_axi_rresp, - input wire m_axi_rlast, - input wire [RUSER_WIDTH-1:0] m_axi_ruser, - input wire m_axi_rvalid, - output wire m_axi_rready -); - -generate - -// AR channel - -if (AR_REG_TYPE > 1) begin -// skid buffer, no bubble cycles - -// datapath registers -reg s_axi_arready_reg = 1'b0; - -reg [ID_WIDTH-1:0] m_axi_arid_reg = {ID_WIDTH{1'b0}}; -reg [ADDR_WIDTH-1:0] m_axi_araddr_reg = {ADDR_WIDTH{1'b0}}; -reg [7:0] m_axi_arlen_reg = 8'd0; -reg [2:0] m_axi_arsize_reg = 3'd0; -reg [1:0] m_axi_arburst_reg = 2'd0; -reg m_axi_arlock_reg = 1'b0; -reg [3:0] m_axi_arcache_reg = 4'd0; -reg [2:0] m_axi_arprot_reg = 3'd0; -reg [3:0] m_axi_arqos_reg = 4'd0; -reg [3:0] m_axi_arregion_reg = 4'd0; -reg [ARUSER_WIDTH-1:0] m_axi_aruser_reg = {ARUSER_WIDTH{1'b0}}; -reg m_axi_arvalid_reg = 1'b0, m_axi_arvalid_next; - -reg [ID_WIDTH-1:0] temp_m_axi_arid_reg = {ID_WIDTH{1'b0}}; -reg [ADDR_WIDTH-1:0] temp_m_axi_araddr_reg = {ADDR_WIDTH{1'b0}}; -reg [7:0] temp_m_axi_arlen_reg = 8'd0; -reg [2:0] temp_m_axi_arsize_reg = 3'd0; -reg [1:0] temp_m_axi_arburst_reg = 2'd0; -reg temp_m_axi_arlock_reg = 1'b0; -reg [3:0] temp_m_axi_arcache_reg = 4'd0; -reg [2:0] temp_m_axi_arprot_reg = 3'd0; -reg [3:0] temp_m_axi_arqos_reg = 4'd0; -reg [3:0] temp_m_axi_arregion_reg = 4'd0; -reg [ARUSER_WIDTH-1:0] temp_m_axi_aruser_reg = {ARUSER_WIDTH{1'b0}}; -reg temp_m_axi_arvalid_reg = 1'b0, temp_m_axi_arvalid_next; - -// datapath control -reg store_axi_ar_input_to_output; -reg store_axi_ar_input_to_temp; -reg store_axi_ar_temp_to_output; - -assign s_axi_arready = s_axi_arready_reg; - -assign m_axi_arid = m_axi_arid_reg; -assign m_axi_araddr = m_axi_araddr_reg; -assign m_axi_arlen = m_axi_arlen_reg; -assign m_axi_arsize = m_axi_arsize_reg; -assign m_axi_arburst = m_axi_arburst_reg; -assign m_axi_arlock = m_axi_arlock_reg; -assign m_axi_arcache = m_axi_arcache_reg; -assign m_axi_arprot = m_axi_arprot_reg; -assign m_axi_arqos = m_axi_arqos_reg; -assign m_axi_arregion = m_axi_arregion_reg; -assign m_axi_aruser = ARUSER_ENABLE ? m_axi_aruser_reg : {ARUSER_WIDTH{1'b0}}; -assign m_axi_arvalid = m_axi_arvalid_reg; - -// enable ready input next cycle if output is ready or the temp reg will not be filled on the next cycle (output reg empty or no input) -wire s_axi_arready_early = m_axi_arready | (~temp_m_axi_arvalid_reg & (~m_axi_arvalid_reg | ~s_axi_arvalid)); - -always @* begin - // transfer sink ready state to source - m_axi_arvalid_next = m_axi_arvalid_reg; - temp_m_axi_arvalid_next = temp_m_axi_arvalid_reg; - - store_axi_ar_input_to_output = 1'b0; - store_axi_ar_input_to_temp = 1'b0; - store_axi_ar_temp_to_output = 1'b0; - - if (s_axi_arready_reg) begin - // input is ready - if (m_axi_arready | ~m_axi_arvalid_reg) begin - // output is ready or currently not valid, transfer data to output - m_axi_arvalid_next = s_axi_arvalid; - store_axi_ar_input_to_output = 1'b1; - end else begin - // output is not ready, store input in temp - temp_m_axi_arvalid_next = s_axi_arvalid; - store_axi_ar_input_to_temp = 1'b1; - end - end else if (m_axi_arready) begin - // input is not ready, but output is ready - m_axi_arvalid_next = temp_m_axi_arvalid_reg; - temp_m_axi_arvalid_next = 1'b0; - store_axi_ar_temp_to_output = 1'b1; - end -end - -always @(posedge clk) begin - if (rst) begin - s_axi_arready_reg <= 1'b0; - m_axi_arvalid_reg <= 1'b0; - temp_m_axi_arvalid_reg <= 1'b0; - end else begin - s_axi_arready_reg <= s_axi_arready_early; - m_axi_arvalid_reg <= m_axi_arvalid_next; - temp_m_axi_arvalid_reg <= temp_m_axi_arvalid_next; - end - - // datapath - if (store_axi_ar_input_to_output) begin - m_axi_arid_reg <= s_axi_arid; - m_axi_araddr_reg <= s_axi_araddr; - m_axi_arlen_reg <= s_axi_arlen; - m_axi_arsize_reg <= s_axi_arsize; - m_axi_arburst_reg <= s_axi_arburst; - m_axi_arlock_reg <= s_axi_arlock; - m_axi_arcache_reg <= s_axi_arcache; - m_axi_arprot_reg <= s_axi_arprot; - m_axi_arqos_reg <= s_axi_arqos; - m_axi_arregion_reg <= s_axi_arregion; - m_axi_aruser_reg <= s_axi_aruser; - end else if (store_axi_ar_temp_to_output) begin - m_axi_arid_reg <= temp_m_axi_arid_reg; - m_axi_araddr_reg <= temp_m_axi_araddr_reg; - m_axi_arlen_reg <= temp_m_axi_arlen_reg; - m_axi_arsize_reg <= temp_m_axi_arsize_reg; - m_axi_arburst_reg <= temp_m_axi_arburst_reg; - m_axi_arlock_reg <= temp_m_axi_arlock_reg; - m_axi_arcache_reg <= temp_m_axi_arcache_reg; - m_axi_arprot_reg <= temp_m_axi_arprot_reg; - m_axi_arqos_reg <= temp_m_axi_arqos_reg; - m_axi_arregion_reg <= temp_m_axi_arregion_reg; - m_axi_aruser_reg <= temp_m_axi_aruser_reg; - end - - if (store_axi_ar_input_to_temp) begin - temp_m_axi_arid_reg <= s_axi_arid; - temp_m_axi_araddr_reg <= s_axi_araddr; - temp_m_axi_arlen_reg <= s_axi_arlen; - temp_m_axi_arsize_reg <= s_axi_arsize; - temp_m_axi_arburst_reg <= s_axi_arburst; - temp_m_axi_arlock_reg <= s_axi_arlock; - temp_m_axi_arcache_reg <= s_axi_arcache; - temp_m_axi_arprot_reg <= s_axi_arprot; - temp_m_axi_arqos_reg <= s_axi_arqos; - temp_m_axi_arregion_reg <= s_axi_arregion; - temp_m_axi_aruser_reg <= s_axi_aruser; - end -end - -end else if (AR_REG_TYPE == 1) begin -// simple register, inserts bubble cycles - -// datapath registers -reg s_axi_arready_reg = 1'b0; - -reg [ID_WIDTH-1:0] m_axi_arid_reg = {ID_WIDTH{1'b0}}; -reg [ADDR_WIDTH-1:0] m_axi_araddr_reg = {ADDR_WIDTH{1'b0}}; -reg [7:0] m_axi_arlen_reg = 8'd0; -reg [2:0] m_axi_arsize_reg = 3'd0; -reg [1:0] m_axi_arburst_reg = 2'd0; -reg m_axi_arlock_reg = 1'b0; -reg [3:0] m_axi_arcache_reg = 4'd0; -reg [2:0] m_axi_arprot_reg = 3'd0; -reg [3:0] m_axi_arqos_reg = 4'd0; -reg [3:0] m_axi_arregion_reg = 4'd0; -reg [ARUSER_WIDTH-1:0] m_axi_aruser_reg = {ARUSER_WIDTH{1'b0}}; -reg m_axi_arvalid_reg = 1'b0, m_axi_arvalid_next; - -// datapath control -reg store_axi_ar_input_to_output; - -assign s_axi_arready = s_axi_arready_reg; - -assign m_axi_arid = m_axi_arid_reg; -assign m_axi_araddr = m_axi_araddr_reg; -assign m_axi_arlen = m_axi_arlen_reg; -assign m_axi_arsize = m_axi_arsize_reg; -assign m_axi_arburst = m_axi_arburst_reg; -assign m_axi_arlock = m_axi_arlock_reg; -assign m_axi_arcache = m_axi_arcache_reg; -assign m_axi_arprot = m_axi_arprot_reg; -assign m_axi_arqos = m_axi_arqos_reg; -assign m_axi_arregion = m_axi_arregion_reg; -assign m_axi_aruser = ARUSER_ENABLE ? m_axi_aruser_reg : {ARUSER_WIDTH{1'b0}}; -assign m_axi_arvalid = m_axi_arvalid_reg; - -// enable ready input next cycle if output buffer will be empty -wire s_axi_arready_early = !m_axi_arvalid_next; - -always @* begin - // transfer sink ready state to source - m_axi_arvalid_next = m_axi_arvalid_reg; - - store_axi_ar_input_to_output = 1'b0; - - if (s_axi_arready_reg) begin - m_axi_arvalid_next = s_axi_arvalid; - store_axi_ar_input_to_output = 1'b1; - end else if (m_axi_arready) begin - m_axi_arvalid_next = 1'b0; - end -end - -always @(posedge clk) begin - if (rst) begin - s_axi_arready_reg <= 1'b0; - m_axi_arvalid_reg <= 1'b0; - end else begin - s_axi_arready_reg <= s_axi_arready_early; - m_axi_arvalid_reg <= m_axi_arvalid_next; - end - - // datapath - if (store_axi_ar_input_to_output) begin - m_axi_arid_reg <= s_axi_arid; - m_axi_araddr_reg <= s_axi_araddr; - m_axi_arlen_reg <= s_axi_arlen; - m_axi_arsize_reg <= s_axi_arsize; - m_axi_arburst_reg <= s_axi_arburst; - m_axi_arlock_reg <= s_axi_arlock; - m_axi_arcache_reg <= s_axi_arcache; - m_axi_arprot_reg <= s_axi_arprot; - m_axi_arqos_reg <= s_axi_arqos; - m_axi_arregion_reg <= s_axi_arregion; - m_axi_aruser_reg <= s_axi_aruser; - end -end - -end else begin - - // bypass AR channel - assign m_axi_arid = s_axi_arid; - assign m_axi_araddr = s_axi_araddr; - assign m_axi_arlen = s_axi_arlen; - assign m_axi_arsize = s_axi_arsize; - assign m_axi_arburst = s_axi_arburst; - assign m_axi_arlock = s_axi_arlock; - assign m_axi_arcache = s_axi_arcache; - assign m_axi_arprot = s_axi_arprot; - assign m_axi_arqos = s_axi_arqos; - assign m_axi_arregion = s_axi_arregion; - assign m_axi_aruser = ARUSER_ENABLE ? s_axi_aruser : {ARUSER_WIDTH{1'b0}}; - assign m_axi_arvalid = s_axi_arvalid; - assign s_axi_arready = m_axi_arready; - -end - -// R channel - -if (R_REG_TYPE > 1) begin -// skid buffer, no bubble cycles - -// datapath registers -reg m_axi_rready_reg = 1'b0; - -reg [ID_WIDTH-1:0] s_axi_rid_reg = {ID_WIDTH{1'b0}}; -reg [DATA_WIDTH-1:0] s_axi_rdata_reg = {DATA_WIDTH{1'b0}}; -reg [1:0] s_axi_rresp_reg = 2'b0; -reg s_axi_rlast_reg = 1'b0; -reg [RUSER_WIDTH-1:0] s_axi_ruser_reg = {RUSER_WIDTH{1'b0}}; -reg s_axi_rvalid_reg = 1'b0, s_axi_rvalid_next; - -reg [ID_WIDTH-1:0] temp_s_axi_rid_reg = {ID_WIDTH{1'b0}}; -reg [DATA_WIDTH-1:0] temp_s_axi_rdata_reg = {DATA_WIDTH{1'b0}}; -reg [1:0] temp_s_axi_rresp_reg = 2'b0; -reg temp_s_axi_rlast_reg = 1'b0; -reg [RUSER_WIDTH-1:0] temp_s_axi_ruser_reg = {RUSER_WIDTH{1'b0}}; -reg temp_s_axi_rvalid_reg = 1'b0, temp_s_axi_rvalid_next; - -// datapath control -reg store_axi_r_input_to_output; -reg store_axi_r_input_to_temp; -reg store_axi_r_temp_to_output; - -assign m_axi_rready = m_axi_rready_reg; - -assign s_axi_rid = s_axi_rid_reg; -assign s_axi_rdata = s_axi_rdata_reg; -assign s_axi_rresp = s_axi_rresp_reg; -assign s_axi_rlast = s_axi_rlast_reg; -assign s_axi_ruser = RUSER_ENABLE ? s_axi_ruser_reg : {RUSER_WIDTH{1'b0}}; -assign s_axi_rvalid = s_axi_rvalid_reg; - -// enable ready input next cycle if output is ready or the temp reg will not be filled on the next cycle (output reg empty or no input) -wire m_axi_rready_early = s_axi_rready | (~temp_s_axi_rvalid_reg & (~s_axi_rvalid_reg | ~m_axi_rvalid)); - -always @* begin - // transfer sink ready state to source - s_axi_rvalid_next = s_axi_rvalid_reg; - temp_s_axi_rvalid_next = temp_s_axi_rvalid_reg; - - store_axi_r_input_to_output = 1'b0; - store_axi_r_input_to_temp = 1'b0; - store_axi_r_temp_to_output = 1'b0; - - if (m_axi_rready_reg) begin - // input is ready - if (s_axi_rready | ~s_axi_rvalid_reg) begin - // output is ready or currently not valid, transfer data to output - s_axi_rvalid_next = m_axi_rvalid; - store_axi_r_input_to_output = 1'b1; - end else begin - // output is not ready, store input in temp - temp_s_axi_rvalid_next = m_axi_rvalid; - store_axi_r_input_to_temp = 1'b1; - end - end else if (s_axi_rready) begin - // input is not ready, but output is ready - s_axi_rvalid_next = temp_s_axi_rvalid_reg; - temp_s_axi_rvalid_next = 1'b0; - store_axi_r_temp_to_output = 1'b1; - end -end - -always @(posedge clk) begin - if (rst) begin - m_axi_rready_reg <= 1'b0; - s_axi_rvalid_reg <= 1'b0; - temp_s_axi_rvalid_reg <= 1'b0; - end else begin - m_axi_rready_reg <= m_axi_rready_early; - s_axi_rvalid_reg <= s_axi_rvalid_next; - temp_s_axi_rvalid_reg <= temp_s_axi_rvalid_next; - end - - // datapath - if (store_axi_r_input_to_output) begin - s_axi_rid_reg <= m_axi_rid; - s_axi_rdata_reg <= m_axi_rdata; - s_axi_rresp_reg <= m_axi_rresp; - s_axi_rlast_reg <= m_axi_rlast; - s_axi_ruser_reg <= m_axi_ruser; - end else if (store_axi_r_temp_to_output) begin - s_axi_rid_reg <= temp_s_axi_rid_reg; - s_axi_rdata_reg <= temp_s_axi_rdata_reg; - s_axi_rresp_reg <= temp_s_axi_rresp_reg; - s_axi_rlast_reg <= temp_s_axi_rlast_reg; - s_axi_ruser_reg <= temp_s_axi_ruser_reg; - end - - if (store_axi_r_input_to_temp) begin - temp_s_axi_rid_reg <= m_axi_rid; - temp_s_axi_rdata_reg <= m_axi_rdata; - temp_s_axi_rresp_reg <= m_axi_rresp; - temp_s_axi_rlast_reg <= m_axi_rlast; - temp_s_axi_ruser_reg <= m_axi_ruser; - end -end - -end else if (R_REG_TYPE == 1) begin -// simple register, inserts bubble cycles - -// datapath registers -reg m_axi_rready_reg = 1'b0; - -reg [ID_WIDTH-1:0] s_axi_rid_reg = {ID_WIDTH{1'b0}}; -reg [DATA_WIDTH-1:0] s_axi_rdata_reg = {DATA_WIDTH{1'b0}}; -reg [1:0] s_axi_rresp_reg = 2'b0; -reg s_axi_rlast_reg = 1'b0; -reg [RUSER_WIDTH-1:0] s_axi_ruser_reg = {RUSER_WIDTH{1'b0}}; -reg s_axi_rvalid_reg = 1'b0, s_axi_rvalid_next; - -// datapath control -reg store_axi_r_input_to_output; - -assign m_axi_rready = m_axi_rready_reg; - -assign s_axi_rid = s_axi_rid_reg; -assign s_axi_rdata = s_axi_rdata_reg; -assign s_axi_rresp = s_axi_rresp_reg; -assign s_axi_rlast = s_axi_rlast_reg; -assign s_axi_ruser = RUSER_ENABLE ? s_axi_ruser_reg : {RUSER_WIDTH{1'b0}}; -assign s_axi_rvalid = s_axi_rvalid_reg; - -// enable ready input next cycle if output buffer will be empty -wire m_axi_rready_early = !s_axi_rvalid_next; - -always @* begin - // transfer sink ready state to source - s_axi_rvalid_next = s_axi_rvalid_reg; - - store_axi_r_input_to_output = 1'b0; - - if (m_axi_rready_reg) begin - s_axi_rvalid_next = m_axi_rvalid; - store_axi_r_input_to_output = 1'b1; - end else if (s_axi_rready) begin - s_axi_rvalid_next = 1'b0; - end -end - -always @(posedge clk) begin - if (rst) begin - m_axi_rready_reg <= 1'b0; - s_axi_rvalid_reg <= 1'b0; - end else begin - m_axi_rready_reg <= m_axi_rready_early; - s_axi_rvalid_reg <= s_axi_rvalid_next; - end - - // datapath - if (store_axi_r_input_to_output) begin - s_axi_rid_reg <= m_axi_rid; - s_axi_rdata_reg <= m_axi_rdata; - s_axi_rresp_reg <= m_axi_rresp; - s_axi_rlast_reg <= m_axi_rlast; - s_axi_ruser_reg <= m_axi_ruser; - end -end - -end else begin - - // bypass R channel - assign s_axi_rid = m_axi_rid; - assign s_axi_rdata = m_axi_rdata; - assign s_axi_rresp = m_axi_rresp; - assign s_axi_rlast = m_axi_rlast; - assign s_axi_ruser = RUSER_ENABLE ? m_axi_ruser : {RUSER_WIDTH{1'b0}}; - assign s_axi_rvalid = m_axi_rvalid; - assign m_axi_rready = s_axi_rready; - -end - -endgenerate - -endmodule - -`resetall diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_register_wr.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_register_wr.v deleted file mode 100644 index 9176d6ba..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/axi_register_wr.v +++ /dev/null @@ -1,691 +0,0 @@ -/* - -Copyright (c) 2018 Alex Forencich - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -// Language: Verilog 2001 - -`resetall -`timescale 1ns / 1ps -`default_nettype none - -/* - * AXI4 register (write) - */ -module axi_register_wr # -( - // Width of data bus in bits - parameter DATA_WIDTH = 32, - // Width of address bus in bits - parameter ADDR_WIDTH = 32, - // Width of wstrb (width of data bus in words) - parameter STRB_WIDTH = (DATA_WIDTH/8), - // Width of ID signal - parameter ID_WIDTH = 8, - // Propagate awuser signal - parameter AWUSER_ENABLE = 0, - // Width of awuser signal - parameter AWUSER_WIDTH = 1, - // Propagate wuser signal - parameter WUSER_ENABLE = 0, - // Width of wuser signal - parameter WUSER_WIDTH = 1, - // Propagate buser signal - parameter BUSER_ENABLE = 0, - // Width of buser signal - parameter BUSER_WIDTH = 1, - // AW channel register type - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter AW_REG_TYPE = 1, - // W channel register type - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter W_REG_TYPE = 2, - // B channel register type - // 0 to bypass, 1 for simple buffer, 2 for skid buffer - parameter B_REG_TYPE = 1 -) -( - input wire clk, - input wire rst, - - /* - * AXI slave interface - */ - input wire [ID_WIDTH-1:0] s_axi_awid, - input wire [ADDR_WIDTH-1:0] s_axi_awaddr, - input wire [7:0] s_axi_awlen, - input wire [2:0] s_axi_awsize, - input wire [1:0] s_axi_awburst, - input wire s_axi_awlock, - input wire [3:0] s_axi_awcache, - input wire [2:0] s_axi_awprot, - input wire [3:0] s_axi_awqos, - input wire [3:0] s_axi_awregion, - input wire [AWUSER_WIDTH-1:0] s_axi_awuser, - input wire s_axi_awvalid, - output wire s_axi_awready, - input wire [DATA_WIDTH-1:0] s_axi_wdata, - input wire [STRB_WIDTH-1:0] s_axi_wstrb, - input wire s_axi_wlast, - input wire [WUSER_WIDTH-1:0] s_axi_wuser, - input wire s_axi_wvalid, - output wire s_axi_wready, - output wire [ID_WIDTH-1:0] s_axi_bid, - output wire [1:0] s_axi_bresp, - output wire [BUSER_WIDTH-1:0] s_axi_buser, - output wire s_axi_bvalid, - input wire s_axi_bready, - - /* - * AXI master interface - */ - output wire [ID_WIDTH-1:0] m_axi_awid, - output wire [ADDR_WIDTH-1:0] m_axi_awaddr, - output wire [7:0] m_axi_awlen, - output wire [2:0] m_axi_awsize, - output wire [1:0] m_axi_awburst, - output wire m_axi_awlock, - output wire [3:0] m_axi_awcache, - output wire [2:0] m_axi_awprot, - output wire [3:0] m_axi_awqos, - output wire [3:0] m_axi_awregion, - output wire [AWUSER_WIDTH-1:0] m_axi_awuser, - output wire m_axi_awvalid, - input wire m_axi_awready, - output wire [DATA_WIDTH-1:0] m_axi_wdata, - output wire [STRB_WIDTH-1:0] m_axi_wstrb, - output wire m_axi_wlast, - output wire [WUSER_WIDTH-1:0] m_axi_wuser, - output wire m_axi_wvalid, - input wire m_axi_wready, - input wire [ID_WIDTH-1:0] m_axi_bid, - input wire [1:0] m_axi_bresp, - input wire [BUSER_WIDTH-1:0] m_axi_buser, - input wire m_axi_bvalid, - output wire m_axi_bready -); - -generate - -// AW channel - -if (AW_REG_TYPE > 1) begin -// skid buffer, no bubble cycles - -// datapath registers -reg s_axi_awready_reg = 1'b0; - -reg [ID_WIDTH-1:0] m_axi_awid_reg = {ID_WIDTH{1'b0}}; -reg [ADDR_WIDTH-1:0] m_axi_awaddr_reg = {ADDR_WIDTH{1'b0}}; -reg [7:0] m_axi_awlen_reg = 8'd0; -reg [2:0] m_axi_awsize_reg = 3'd0; -reg [1:0] m_axi_awburst_reg = 2'd0; -reg m_axi_awlock_reg = 1'b0; -reg [3:0] m_axi_awcache_reg = 4'd0; -reg [2:0] m_axi_awprot_reg = 3'd0; -reg [3:0] m_axi_awqos_reg = 4'd0; -reg [3:0] m_axi_awregion_reg = 4'd0; -reg [AWUSER_WIDTH-1:0] m_axi_awuser_reg = {AWUSER_WIDTH{1'b0}}; -reg m_axi_awvalid_reg = 1'b0, m_axi_awvalid_next; - -reg [ID_WIDTH-1:0] temp_m_axi_awid_reg = {ID_WIDTH{1'b0}}; -reg [ADDR_WIDTH-1:0] temp_m_axi_awaddr_reg = {ADDR_WIDTH{1'b0}}; -reg [7:0] temp_m_axi_awlen_reg = 8'd0; -reg [2:0] temp_m_axi_awsize_reg = 3'd0; -reg [1:0] temp_m_axi_awburst_reg = 2'd0; -reg temp_m_axi_awlock_reg = 1'b0; -reg [3:0] temp_m_axi_awcache_reg = 4'd0; -reg [2:0] temp_m_axi_awprot_reg = 3'd0; -reg [3:0] temp_m_axi_awqos_reg = 4'd0; -reg [3:0] temp_m_axi_awregion_reg = 4'd0; -reg [AWUSER_WIDTH-1:0] temp_m_axi_awuser_reg = {AWUSER_WIDTH{1'b0}}; -reg temp_m_axi_awvalid_reg = 1'b0, temp_m_axi_awvalid_next; - -// datapath control -reg store_axi_aw_input_to_output; -reg store_axi_aw_input_to_temp; -reg store_axi_aw_temp_to_output; - -assign s_axi_awready = s_axi_awready_reg; - -assign m_axi_awid = m_axi_awid_reg; -assign m_axi_awaddr = m_axi_awaddr_reg; -assign m_axi_awlen = m_axi_awlen_reg; -assign m_axi_awsize = m_axi_awsize_reg; -assign m_axi_awburst = m_axi_awburst_reg; -assign m_axi_awlock = m_axi_awlock_reg; -assign m_axi_awcache = m_axi_awcache_reg; -assign m_axi_awprot = m_axi_awprot_reg; -assign m_axi_awqos = m_axi_awqos_reg; -assign m_axi_awregion = m_axi_awregion_reg; -assign m_axi_awuser = AWUSER_ENABLE ? m_axi_awuser_reg : {AWUSER_WIDTH{1'b0}}; -assign m_axi_awvalid = m_axi_awvalid_reg; - -// enable ready input next cycle if output is ready or the temp reg will not be filled on the next cycle (output reg empty or no input) -wire s_axi_awready_early = m_axi_awready | (~temp_m_axi_awvalid_reg & (~m_axi_awvalid_reg | ~s_axi_awvalid)); - -always @* begin - // transfer sink ready state to source - m_axi_awvalid_next = m_axi_awvalid_reg; - temp_m_axi_awvalid_next = temp_m_axi_awvalid_reg; - - store_axi_aw_input_to_output = 1'b0; - store_axi_aw_input_to_temp = 1'b0; - store_axi_aw_temp_to_output = 1'b0; - - if (s_axi_awready_reg) begin - // input is ready - if (m_axi_awready | ~m_axi_awvalid_reg) begin - // output is ready or currently not valid, transfer data to output - m_axi_awvalid_next = s_axi_awvalid; - store_axi_aw_input_to_output = 1'b1; - end else begin - // output is not ready, store input in temp - temp_m_axi_awvalid_next = s_axi_awvalid; - store_axi_aw_input_to_temp = 1'b1; - end - end else if (m_axi_awready) begin - // input is not ready, but output is ready - m_axi_awvalid_next = temp_m_axi_awvalid_reg; - temp_m_axi_awvalid_next = 1'b0; - store_axi_aw_temp_to_output = 1'b1; - end -end - -always @(posedge clk) begin - if (rst) begin - s_axi_awready_reg <= 1'b0; - m_axi_awvalid_reg <= 1'b0; - temp_m_axi_awvalid_reg <= 1'b0; - end else begin - s_axi_awready_reg <= s_axi_awready_early; - m_axi_awvalid_reg <= m_axi_awvalid_next; - temp_m_axi_awvalid_reg <= temp_m_axi_awvalid_next; - end - - // datapath - if (store_axi_aw_input_to_output) begin - m_axi_awid_reg <= s_axi_awid; - m_axi_awaddr_reg <= s_axi_awaddr; - m_axi_awlen_reg <= s_axi_awlen; - m_axi_awsize_reg <= s_axi_awsize; - m_axi_awburst_reg <= s_axi_awburst; - m_axi_awlock_reg <= s_axi_awlock; - m_axi_awcache_reg <= s_axi_awcache; - m_axi_awprot_reg <= s_axi_awprot; - m_axi_awqos_reg <= s_axi_awqos; - m_axi_awregion_reg <= s_axi_awregion; - m_axi_awuser_reg <= s_axi_awuser; - end else if (store_axi_aw_temp_to_output) begin - m_axi_awid_reg <= temp_m_axi_awid_reg; - m_axi_awaddr_reg <= temp_m_axi_awaddr_reg; - m_axi_awlen_reg <= temp_m_axi_awlen_reg; - m_axi_awsize_reg <= temp_m_axi_awsize_reg; - m_axi_awburst_reg <= temp_m_axi_awburst_reg; - m_axi_awlock_reg <= temp_m_axi_awlock_reg; - m_axi_awcache_reg <= temp_m_axi_awcache_reg; - m_axi_awprot_reg <= temp_m_axi_awprot_reg; - m_axi_awqos_reg <= temp_m_axi_awqos_reg; - m_axi_awregion_reg <= temp_m_axi_awregion_reg; - m_axi_awuser_reg <= temp_m_axi_awuser_reg; - end - - if (store_axi_aw_input_to_temp) begin - temp_m_axi_awid_reg <= s_axi_awid; - temp_m_axi_awaddr_reg <= s_axi_awaddr; - temp_m_axi_awlen_reg <= s_axi_awlen; - temp_m_axi_awsize_reg <= s_axi_awsize; - temp_m_axi_awburst_reg <= s_axi_awburst; - temp_m_axi_awlock_reg <= s_axi_awlock; - temp_m_axi_awcache_reg <= s_axi_awcache; - temp_m_axi_awprot_reg <= s_axi_awprot; - temp_m_axi_awqos_reg <= s_axi_awqos; - temp_m_axi_awregion_reg <= s_axi_awregion; - temp_m_axi_awuser_reg <= s_axi_awuser; - end -end - -end else if (AW_REG_TYPE == 1) begin -// simple register, inserts bubble cycles - -// datapath registers -reg s_axi_awready_reg = 1'b0; - -reg [ID_WIDTH-1:0] m_axi_awid_reg = {ID_WIDTH{1'b0}}; -reg [ADDR_WIDTH-1:0] m_axi_awaddr_reg = {ADDR_WIDTH{1'b0}}; -reg [7:0] m_axi_awlen_reg = 8'd0; -reg [2:0] m_axi_awsize_reg = 3'd0; -reg [1:0] m_axi_awburst_reg = 2'd0; -reg m_axi_awlock_reg = 1'b0; -reg [3:0] m_axi_awcache_reg = 4'd0; -reg [2:0] m_axi_awprot_reg = 3'd0; -reg [3:0] m_axi_awqos_reg = 4'd0; -reg [3:0] m_axi_awregion_reg = 4'd0; -reg [AWUSER_WIDTH-1:0] m_axi_awuser_reg = {AWUSER_WIDTH{1'b0}}; -reg m_axi_awvalid_reg = 1'b0, m_axi_awvalid_next; - -// datapath control -reg store_axi_aw_input_to_output; - -assign s_axi_awready = s_axi_awready_reg; - -assign m_axi_awid = m_axi_awid_reg; -assign m_axi_awaddr = m_axi_awaddr_reg; -assign m_axi_awlen = m_axi_awlen_reg; -assign m_axi_awsize = m_axi_awsize_reg; -assign m_axi_awburst = m_axi_awburst_reg; -assign m_axi_awlock = m_axi_awlock_reg; -assign m_axi_awcache = m_axi_awcache_reg; -assign m_axi_awprot = m_axi_awprot_reg; -assign m_axi_awqos = m_axi_awqos_reg; -assign m_axi_awregion = m_axi_awregion_reg; -assign m_axi_awuser = AWUSER_ENABLE ? m_axi_awuser_reg : {AWUSER_WIDTH{1'b0}}; -assign m_axi_awvalid = m_axi_awvalid_reg; - -// enable ready input next cycle if output buffer will be empty -wire s_axi_awready_eawly = !m_axi_awvalid_next; - -always @* begin - // transfer sink ready state to source - m_axi_awvalid_next = m_axi_awvalid_reg; - - store_axi_aw_input_to_output = 1'b0; - - if (s_axi_awready_reg) begin - m_axi_awvalid_next = s_axi_awvalid; - store_axi_aw_input_to_output = 1'b1; - end else if (m_axi_awready) begin - m_axi_awvalid_next = 1'b0; - end -end - -always @(posedge clk) begin - if (rst) begin - s_axi_awready_reg <= 1'b0; - m_axi_awvalid_reg <= 1'b0; - end else begin - s_axi_awready_reg <= s_axi_awready_eawly; - m_axi_awvalid_reg <= m_axi_awvalid_next; - end - - // datapath - if (store_axi_aw_input_to_output) begin - m_axi_awid_reg <= s_axi_awid; - m_axi_awaddr_reg <= s_axi_awaddr; - m_axi_awlen_reg <= s_axi_awlen; - m_axi_awsize_reg <= s_axi_awsize; - m_axi_awburst_reg <= s_axi_awburst; - m_axi_awlock_reg <= s_axi_awlock; - m_axi_awcache_reg <= s_axi_awcache; - m_axi_awprot_reg <= s_axi_awprot; - m_axi_awqos_reg <= s_axi_awqos; - m_axi_awregion_reg <= s_axi_awregion; - m_axi_awuser_reg <= s_axi_awuser; - end -end - -end else begin - - // bypass AW channel - assign m_axi_awid = s_axi_awid; - assign m_axi_awaddr = s_axi_awaddr; - assign m_axi_awlen = s_axi_awlen; - assign m_axi_awsize = s_axi_awsize; - assign m_axi_awburst = s_axi_awburst; - assign m_axi_awlock = s_axi_awlock; - assign m_axi_awcache = s_axi_awcache; - assign m_axi_awprot = s_axi_awprot; - assign m_axi_awqos = s_axi_awqos; - assign m_axi_awregion = s_axi_awregion; - assign m_axi_awuser = AWUSER_ENABLE ? s_axi_awuser : {AWUSER_WIDTH{1'b0}}; - assign m_axi_awvalid = s_axi_awvalid; - assign s_axi_awready = m_axi_awready; - -end - -// W channel - -if (W_REG_TYPE > 1) begin -// skid buffer, no bubble cycles - -// datapath registers -reg s_axi_wready_reg = 1'b0; - -reg [DATA_WIDTH-1:0] m_axi_wdata_reg = {DATA_WIDTH{1'b0}}; -reg [STRB_WIDTH-1:0] m_axi_wstrb_reg = {STRB_WIDTH{1'b0}}; -reg m_axi_wlast_reg = 1'b0; -reg [WUSER_WIDTH-1:0] m_axi_wuser_reg = {WUSER_WIDTH{1'b0}}; -reg m_axi_wvalid_reg = 1'b0, m_axi_wvalid_next; - -reg [DATA_WIDTH-1:0] temp_m_axi_wdata_reg = {DATA_WIDTH{1'b0}}; -reg [STRB_WIDTH-1:0] temp_m_axi_wstrb_reg = {STRB_WIDTH{1'b0}}; -reg temp_m_axi_wlast_reg = 1'b0; -reg [WUSER_WIDTH-1:0] temp_m_axi_wuser_reg = {WUSER_WIDTH{1'b0}}; -reg temp_m_axi_wvalid_reg = 1'b0, temp_m_axi_wvalid_next; - -// datapath control -reg store_axi_w_input_to_output; -reg store_axi_w_input_to_temp; -reg store_axi_w_temp_to_output; - -assign s_axi_wready = s_axi_wready_reg; - -assign m_axi_wdata = m_axi_wdata_reg; -assign m_axi_wstrb = m_axi_wstrb_reg; -assign m_axi_wlast = m_axi_wlast_reg; -assign m_axi_wuser = WUSER_ENABLE ? m_axi_wuser_reg : {WUSER_WIDTH{1'b0}}; -assign m_axi_wvalid = m_axi_wvalid_reg; - -// enable ready input next cycle if output is ready or the temp reg will not be filled on the next cycle (output reg empty or no input) -wire s_axi_wready_early = m_axi_wready | (~temp_m_axi_wvalid_reg & (~m_axi_wvalid_reg | ~s_axi_wvalid)); - -always @* begin - // transfer sink ready state to source - m_axi_wvalid_next = m_axi_wvalid_reg; - temp_m_axi_wvalid_next = temp_m_axi_wvalid_reg; - - store_axi_w_input_to_output = 1'b0; - store_axi_w_input_to_temp = 1'b0; - store_axi_w_temp_to_output = 1'b0; - - if (s_axi_wready_reg) begin - // input is ready - if (m_axi_wready | ~m_axi_wvalid_reg) begin - // output is ready or currently not valid, transfer data to output - m_axi_wvalid_next = s_axi_wvalid; - store_axi_w_input_to_output = 1'b1; - end else begin - // output is not ready, store input in temp - temp_m_axi_wvalid_next = s_axi_wvalid; - store_axi_w_input_to_temp = 1'b1; - end - end else if (m_axi_wready) begin - // input is not ready, but output is ready - m_axi_wvalid_next = temp_m_axi_wvalid_reg; - temp_m_axi_wvalid_next = 1'b0; - store_axi_w_temp_to_output = 1'b1; - end -end - -always @(posedge clk) begin - if (rst) begin - s_axi_wready_reg <= 1'b0; - m_axi_wvalid_reg <= 1'b0; - temp_m_axi_wvalid_reg <= 1'b0; - end else begin - s_axi_wready_reg <= s_axi_wready_early; - m_axi_wvalid_reg <= m_axi_wvalid_next; - temp_m_axi_wvalid_reg <= temp_m_axi_wvalid_next; - end - - // datapath - if (store_axi_w_input_to_output) begin - m_axi_wdata_reg <= s_axi_wdata; - m_axi_wstrb_reg <= s_axi_wstrb; - m_axi_wlast_reg <= s_axi_wlast; - m_axi_wuser_reg <= s_axi_wuser; - end else if (store_axi_w_temp_to_output) begin - m_axi_wdata_reg <= temp_m_axi_wdata_reg; - m_axi_wstrb_reg <= temp_m_axi_wstrb_reg; - m_axi_wlast_reg <= temp_m_axi_wlast_reg; - m_axi_wuser_reg <= temp_m_axi_wuser_reg; - end - - if (store_axi_w_input_to_temp) begin - temp_m_axi_wdata_reg <= s_axi_wdata; - temp_m_axi_wstrb_reg <= s_axi_wstrb; - temp_m_axi_wlast_reg <= s_axi_wlast; - temp_m_axi_wuser_reg <= s_axi_wuser; - end -end - -end else if (W_REG_TYPE == 1) begin -// simple register, inserts bubble cycles - -// datapath registers -reg s_axi_wready_reg = 1'b0; - -reg [DATA_WIDTH-1:0] m_axi_wdata_reg = {DATA_WIDTH{1'b0}}; -reg [STRB_WIDTH-1:0] m_axi_wstrb_reg = {STRB_WIDTH{1'b0}}; -reg m_axi_wlast_reg = 1'b0; -reg [WUSER_WIDTH-1:0] m_axi_wuser_reg = {WUSER_WIDTH{1'b0}}; -reg m_axi_wvalid_reg = 1'b0, m_axi_wvalid_next; - -// datapath control -reg store_axi_w_input_to_output; - -assign s_axi_wready = s_axi_wready_reg; - -assign m_axi_wdata = m_axi_wdata_reg; -assign m_axi_wstrb = m_axi_wstrb_reg; -assign m_axi_wlast = m_axi_wlast_reg; -assign m_axi_wuser = WUSER_ENABLE ? m_axi_wuser_reg : {WUSER_WIDTH{1'b0}}; -assign m_axi_wvalid = m_axi_wvalid_reg; - -// enable ready input next cycle if output buffer will be empty -wire s_axi_wready_ewly = !m_axi_wvalid_next; - -always @* begin - // transfer sink ready state to source - m_axi_wvalid_next = m_axi_wvalid_reg; - - store_axi_w_input_to_output = 1'b0; - - if (s_axi_wready_reg) begin - m_axi_wvalid_next = s_axi_wvalid; - store_axi_w_input_to_output = 1'b1; - end else if (m_axi_wready) begin - m_axi_wvalid_next = 1'b0; - end -end - -always @(posedge clk) begin - if (rst) begin - s_axi_wready_reg <= 1'b0; - m_axi_wvalid_reg <= 1'b0; - end else begin - s_axi_wready_reg <= s_axi_wready_ewly; - m_axi_wvalid_reg <= m_axi_wvalid_next; - end - - // datapath - if (store_axi_w_input_to_output) begin - m_axi_wdata_reg <= s_axi_wdata; - m_axi_wstrb_reg <= s_axi_wstrb; - m_axi_wlast_reg <= s_axi_wlast; - m_axi_wuser_reg <= s_axi_wuser; - end -end - -end else begin - - // bypass W channel - assign m_axi_wdata = s_axi_wdata; - assign m_axi_wstrb = s_axi_wstrb; - assign m_axi_wlast = s_axi_wlast; - assign m_axi_wuser = WUSER_ENABLE ? s_axi_wuser : {WUSER_WIDTH{1'b0}}; - assign m_axi_wvalid = s_axi_wvalid; - assign s_axi_wready = m_axi_wready; - -end - -// B channel - -if (B_REG_TYPE > 1) begin -// skid buffer, no bubble cycles - -// datapath registers -reg m_axi_bready_reg = 1'b0; - -reg [ID_WIDTH-1:0] s_axi_bid_reg = {ID_WIDTH{1'b0}}; -reg [1:0] s_axi_bresp_reg = 2'b0; -reg [BUSER_WIDTH-1:0] s_axi_buser_reg = {BUSER_WIDTH{1'b0}}; -reg s_axi_bvalid_reg = 1'b0, s_axi_bvalid_next; - -reg [ID_WIDTH-1:0] temp_s_axi_bid_reg = {ID_WIDTH{1'b0}}; -reg [1:0] temp_s_axi_bresp_reg = 2'b0; -reg [BUSER_WIDTH-1:0] temp_s_axi_buser_reg = {BUSER_WIDTH{1'b0}}; -reg temp_s_axi_bvalid_reg = 1'b0, temp_s_axi_bvalid_next; - -// datapath control -reg store_axi_b_input_to_output; -reg store_axi_b_input_to_temp; -reg store_axi_b_temp_to_output; - -assign m_axi_bready = m_axi_bready_reg; - -assign s_axi_bid = s_axi_bid_reg; -assign s_axi_bresp = s_axi_bresp_reg; -assign s_axi_buser = BUSER_ENABLE ? s_axi_buser_reg : {BUSER_WIDTH{1'b0}}; -assign s_axi_bvalid = s_axi_bvalid_reg; - -// enable ready input next cycle if output is ready or the temp reg will not be filled on the next cycle (output reg empty or no input) -wire m_axi_bready_early = s_axi_bready | (~temp_s_axi_bvalid_reg & (~s_axi_bvalid_reg | ~m_axi_bvalid)); - -always @* begin - // transfer sink ready state to source - s_axi_bvalid_next = s_axi_bvalid_reg; - temp_s_axi_bvalid_next = temp_s_axi_bvalid_reg; - - store_axi_b_input_to_output = 1'b0; - store_axi_b_input_to_temp = 1'b0; - store_axi_b_temp_to_output = 1'b0; - - if (m_axi_bready_reg) begin - // input is ready - if (s_axi_bready | ~s_axi_bvalid_reg) begin - // output is ready or currently not valid, transfer data to output - s_axi_bvalid_next = m_axi_bvalid; - store_axi_b_input_to_output = 1'b1; - end else begin - // output is not ready, store input in temp - temp_s_axi_bvalid_next = m_axi_bvalid; - store_axi_b_input_to_temp = 1'b1; - end - end else if (s_axi_bready) begin - // input is not ready, but output is ready - s_axi_bvalid_next = temp_s_axi_bvalid_reg; - temp_s_axi_bvalid_next = 1'b0; - store_axi_b_temp_to_output = 1'b1; - end -end - -always @(posedge clk) begin - if (rst) begin - m_axi_bready_reg <= 1'b0; - s_axi_bvalid_reg <= 1'b0; - temp_s_axi_bvalid_reg <= 1'b0; - end else begin - m_axi_bready_reg <= m_axi_bready_early; - s_axi_bvalid_reg <= s_axi_bvalid_next; - temp_s_axi_bvalid_reg <= temp_s_axi_bvalid_next; - end - - // datapath - if (store_axi_b_input_to_output) begin - s_axi_bid_reg <= m_axi_bid; - s_axi_bresp_reg <= m_axi_bresp; - s_axi_buser_reg <= m_axi_buser; - end else if (store_axi_b_temp_to_output) begin - s_axi_bid_reg <= temp_s_axi_bid_reg; - s_axi_bresp_reg <= temp_s_axi_bresp_reg; - s_axi_buser_reg <= temp_s_axi_buser_reg; - end - - if (store_axi_b_input_to_temp) begin - temp_s_axi_bid_reg <= m_axi_bid; - temp_s_axi_bresp_reg <= m_axi_bresp; - temp_s_axi_buser_reg <= m_axi_buser; - end -end - -end else if (B_REG_TYPE == 1) begin -// simple register, inserts bubble cycles - -// datapath registers -reg m_axi_bready_reg = 1'b0; - -reg [ID_WIDTH-1:0] s_axi_bid_reg = {ID_WIDTH{1'b0}}; -reg [1:0] s_axi_bresp_reg = 2'b0; -reg [BUSER_WIDTH-1:0] s_axi_buser_reg = {BUSER_WIDTH{1'b0}}; -reg s_axi_bvalid_reg = 1'b0, s_axi_bvalid_next; - -// datapath control -reg store_axi_b_input_to_output; - -assign m_axi_bready = m_axi_bready_reg; - -assign s_axi_bid = s_axi_bid_reg; -assign s_axi_bresp = s_axi_bresp_reg; -assign s_axi_buser = BUSER_ENABLE ? s_axi_buser_reg : {BUSER_WIDTH{1'b0}}; -assign s_axi_bvalid = s_axi_bvalid_reg; - -// enable ready input next cycle if output buffer will be empty -wire m_axi_bready_early = !s_axi_bvalid_next; - -always @* begin - // transfer sink ready state to source - s_axi_bvalid_next = s_axi_bvalid_reg; - - store_axi_b_input_to_output = 1'b0; - - if (m_axi_bready_reg) begin - s_axi_bvalid_next = m_axi_bvalid; - store_axi_b_input_to_output = 1'b1; - end else if (s_axi_bready) begin - s_axi_bvalid_next = 1'b0; - end -end - -always @(posedge clk) begin - if (rst) begin - m_axi_bready_reg <= 1'b0; - s_axi_bvalid_reg <= 1'b0; - end else begin - m_axi_bready_reg <= m_axi_bready_early; - s_axi_bvalid_reg <= s_axi_bvalid_next; - end - - // datapath - if (store_axi_b_input_to_output) begin - s_axi_bid_reg <= m_axi_bid; - s_axi_bresp_reg <= m_axi_bresp; - s_axi_buser_reg <= m_axi_buser; - end -end - -end else begin - - // bypass B channel - assign s_axi_bid = m_axi_bid; - assign s_axi_bresp = m_axi_bresp; - assign s_axi_buser = BUSER_ENABLE ? m_axi_buser : {BUSER_WIDTH{1'b0}}; - assign s_axi_bvalid = m_axi_bvalid; - assign m_axi_bready = s_axi_bready; - -end - -endgenerate - -endmodule - -`resetall diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/detect_burst.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/detect_burst.v deleted file mode 100644 index 8abeaa66..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/detect_burst.v +++ /dev/null @@ -1,156 +0,0 @@ -`default_nettype none - -// Detect burst from address stream. -module detect_burst #( - parameter AddrWidth = 64, - parameter DataWidthBytesLog = 6, - parameter WaitTimeWidth = 4, - parameter BurstLenWidth = 8 -) ( - input wire clk, - input wire rst, - - input wire [WaitTimeWidth-1:0] max_wait_time, - input wire [BurstLenWidth-1:0] max_burst_len, // 0 disables detection - - input wire [AddrWidth-1:0] addr_dout, - input wire addr_empty_n, - output reg addr_read, - - output wire [BurstLenWidth+AddrWidth-1:0] addr_din, - input wire addr_full_n, - output wire addr_write, - - output wire [BurstLenWidth-1:0] burst_len_0_din, - input wire burst_len_0_full_n, - output wire burst_len_0_write, - - output wire [BurstLenWidth-1:0] burst_len_1_din, - input wire burst_len_1_full_n, - output wire burst_len_1_write -); - // parameter - localparam NextAddrWidth = AddrWidth - DataWidthBytesLog; - - // state - reg [AddrWidth-1:0] base_addr; - reg base_valid; - reg [BurstLenWidth-1:0] burst_len; - reg [WaitTimeWidth-1:0] wait_time; - reg [NextAddrWidth-1:0] next_addr; - - // logic - reg write_enable; - reg [AddrWidth-1:0] base_addr_next; - reg base_valid_next; - reg [BurstLenWidth-1:0] burst_len_next; - reg [WaitTimeWidth-1:0] wait_time_next; - - wire [NextAddrWidth-1:0] next_addr_next = - base_addr_next[AddrWidth-1:DataWidthBytesLog] + - {{(NextAddrWidth-BurstLenWidth){1'b0}}, burst_len_next} + - {{(NextAddrWidth-1){1'b0}}, 1'b1}; - - assign addr_write = write_enable; - assign burst_len_0_write = write_enable; - assign burst_len_1_write = write_enable; - assign addr_din = {burst_len, base_addr}; - assign burst_len_0_din = burst_len; - assign burst_len_1_din = burst_len; - - // register the input for timing closure - reg addr_empty_n_q; - reg [AddrWidth-1:0] addr_dout_q; - always @(posedge clk) begin - if (addr_full_n && burst_len_0_full_n && burst_len_1_full_n) begin - addr_empty_n_q <= addr_empty_n; - addr_dout_q <= addr_dout; - end - end - wire [AddrWidth-1:0] curr_addr = addr_dout_q; - - always @* begin - // defaults - addr_read = 1'b0; - if (!addr_full_n || !burst_len_0_full_n || !burst_len_1_full_n) begin - addr_read = 1'b0; - end else if (addr_empty_n) begin - // read new item if non-empty - addr_read = 1'b1; - end else if (base_valid) begin - addr_read = 1'b0; - end - end - - always @* begin - // defaults - write_enable = 1'b0; - base_addr_next = base_addr; - base_valid_next = base_valid; - wait_time_next = wait_time; - burst_len_next = burst_len; - if (!addr_full_n || !burst_len_0_full_n || !burst_len_1_full_n) begin - // output FIFO full, do nothing - end else if (addr_empty_n_q) begin - wait_time_next = 0; - if (!base_valid) begin - base_addr_next = curr_addr; - base_valid_next = 1'b1; - - write_enable = 1'b0; - burst_len_next = burst_len; - end else begin - if (next_addr == curr_addr[AddrWidth-1:DataWidthBytesLog] && - burst_len < max_burst_len) begin - burst_len_next = burst_len + 1; - - write_enable = 1'b0; - base_addr_next = base_addr; - base_valid_next = base_valid; - end else begin - // no more burst detected - write_enable = 1'b1; - burst_len_next = 0; - base_addr_next = curr_addr; - - base_valid_next = base_valid; - end - end - end else if (base_valid) begin - if (wait_time < max_wait_time) begin - wait_time_next = wait_time + 1; - - write_enable = 1'b0; - base_addr_next = base_addr; - base_valid_next = base_valid; - burst_len_next = burst_len; - end else begin - write_enable = 1'b1; - wait_time_next = 0; - base_valid_next = 1'b0; - burst_len_next = 0; - - base_addr_next = base_addr; - end - end - end - - always @(posedge clk) begin - if (rst) begin - base_addr <= {AddrWidth{1'b0}}; - base_valid <= 1'd0; - burst_len <= {BurstLenWidth{1'b0}}; - wait_time <= {WaitTimeWidth{1'b0}}; - next_addr <= {{(NextAddrWidth-1){1'b0}}, 1'b1}; - end else begin - base_addr <= base_addr_next; - base_valid <= base_valid_next; - burst_len <= burst_len_next; - wait_time <= wait_time_next; - next_addr <= next_addr_next; - end - end - -endmodule // detect_burst - -`default_nettype wire diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/fifo.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/fifo.v deleted file mode 100644 index d2559d97..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/fifo.v +++ /dev/null @@ -1,107 +0,0 @@ -`default_nettype none - -// first-word fall-through (FWFT) FIFO -module fifo #( - parameter DATA_WIDTH = 32, - parameter ADDR_WIDTH = 5, - parameter DEPTH = 32 -) ( - input wire clk, - input wire reset, - - // write - output wire if_full_n, - input wire if_write_ce, - input wire if_write, - input wire [DATA_WIDTH-1:0] if_din, - - // read - output wire if_empty_n, - input wire if_read_ce, - input wire if_read, - output wire [DATA_WIDTH-1:0] if_dout -); - -generate - if (DEPTH == 1) begin : d1 - fifo_fwd #( - .DATA_WIDTH(DATA_WIDTH) - ) unit ( - .clk (clk), - .reset(reset), - - .if_full_n (if_full_n), - .if_write_ce(if_write_ce), - .if_write (if_write), - .if_din (if_din), - - .if_empty_n(if_empty_n), - .if_read_ce(if_read_ce), - .if_read (if_read), - .if_dout (if_dout) - ); - end else if (DATA_WIDTH >= 36 && DEPTH >= 4096) begin : uram - fifo_bram #( - .MEM_STYLE ("ultra"), - .DATA_WIDTH(DATA_WIDTH), - .ADDR_WIDTH(ADDR_WIDTH), - .DEPTH (DEPTH) - ) unit ( - .clk (clk), - .reset(reset), - - .if_full_n (if_full_n), - .if_write_ce(if_write_ce), - .if_write (if_write), - .if_din (if_din), - - .if_empty_n(if_empty_n), - .if_read_ce(if_read_ce), - .if_read (if_read), - .if_dout (if_dout) - ); - end else if (DEPTH >=128) begin : bram - fifo_bram #( - .MEM_STYLE ("block"), - .DATA_WIDTH(DATA_WIDTH), - .ADDR_WIDTH(ADDR_WIDTH), - .DEPTH (DEPTH) - ) unit ( - .clk (clk), - .reset(reset), - - .if_full_n (if_full_n), - .if_write_ce(if_write_ce), - .if_write (if_write), - .if_din (if_din), - - .if_empty_n(if_empty_n), - .if_read_ce(if_read_ce), - .if_read (if_read), - .if_dout (if_dout) - ); - end else begin : srl - fifo_srl #( - .DATA_WIDTH(DATA_WIDTH), - .ADDR_WIDTH(ADDR_WIDTH), - .DEPTH (DEPTH) - ) unit ( - .clk (clk), - .reset(reset), - - .if_full_n (if_full_n), - .if_write_ce(if_write_ce), - .if_write (if_write), - .if_din (if_din), - - .if_empty_n(if_empty_n), - .if_read_ce(if_read_ce), - .if_read (if_read), - .if_dout (if_dout) - ); - end -endgenerate - -endmodule // fifo - -`default_nettype wire diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/fifo_bram.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/fifo_bram.v deleted file mode 100644 index 8b5aea64..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/fifo_bram.v +++ /dev/null @@ -1,151 +0,0 @@ -`default_nettype none - -// first-word fall-through (FWFT) FIFO using block RAM -// based on HLS generated code -module fifo_bram #( - parameter MEM_STYLE = "auto", - parameter DATA_WIDTH = 32, - parameter ADDR_WIDTH = 5, - parameter DEPTH = 32 -) ( - input wire clk, - input wire reset, - - // write - output wire if_full_n, - input wire if_write_ce, - input wire if_write, - input wire [DATA_WIDTH-1:0] if_din, - - // read - output wire if_empty_n, - input wire if_read_ce, - input wire if_read, - output wire [DATA_WIDTH-1:0] if_dout -); - -(* ram_style = MEM_STYLE *) -reg [DATA_WIDTH-1:0] mem[0:DEPTH-1]; -reg [DATA_WIDTH-1:0] q_buf; -reg [ADDR_WIDTH-1:0] waddr; -reg [ADDR_WIDTH-1:0] raddr; -wire [ADDR_WIDTH-1:0] wnext; -wire [ADDR_WIDTH-1:0] rnext; -wire push; -wire pop; -reg [ADDR_WIDTH-1:0] used; -reg full_n; -reg empty_n; -reg [DATA_WIDTH-1:0] q_tmp; -reg show_ahead; -reg [DATA_WIDTH-1:0] dout_buf; -reg dout_valid; - -localparam DepthM1 = DEPTH[ADDR_WIDTH-1:0] - 1'd1; - -assign if_full_n = full_n; -assign if_empty_n = dout_valid; -assign if_dout = dout_buf; -assign push = full_n & if_write_ce & if_write; -assign pop = empty_n & if_read_ce & (~dout_valid | if_read); -assign wnext = !push ? waddr : - (waddr == DepthM1) ? {ADDR_WIDTH{1'b0}} : waddr + 1'd1; -assign rnext = !pop ? raddr : - (raddr == DepthM1) ? {ADDR_WIDTH{1'b0}} : raddr + 1'd1; - -// waddr -always @(posedge clk) begin - if (reset) - waddr <= {ADDR_WIDTH{1'b0}}; - else - waddr <= wnext; -end - -// raddr -always @(posedge clk) begin - if (reset) - raddr <= {ADDR_WIDTH{1'b0}}; - else - raddr <= rnext; -end - -// used -always @(posedge clk) begin - if (reset) - used <= {ADDR_WIDTH{1'b0}}; - else if (push && !pop) - used <= used + 1'b1; - else if (!push && pop) - used <= used - 1'b1; -end - -// full_n -always @(posedge clk) begin - if (reset) - full_n <= 1'b1; - else if (push && !pop) - full_n <= (used != DepthM1); - else if (!push && pop) - full_n <= 1'b1; -end - -// empty_n -always @(posedge clk) begin - if (reset) - empty_n <= 1'b0; - else if (push && !pop) - empty_n <= 1'b1; - else if (!push && pop) - empty_n <= (used != {{(ADDR_WIDTH-1){1'b0}},1'b1}); -end - -// mem -always @(posedge clk) begin - if (push) - mem[waddr] <= if_din; -end - -// q_buf -always @(posedge clk) begin - q_buf <= mem[rnext]; -end - -// q_tmp -always @(posedge clk) begin - if (reset) - q_tmp <= {DATA_WIDTH{1'b0}}; - else if (push) - q_tmp <= if_din; -end - -// show_ahead -always @(posedge clk) begin - if (reset) - show_ahead <= 1'b0; - else if (push && used == {{(ADDR_WIDTH-1){1'b0}},pop}) - show_ahead <= 1'b1; - else - show_ahead <= 1'b0; -end - -// dout_buf -always @(posedge clk) begin - if (reset) - dout_buf <= {DATA_WIDTH{1'b0}}; - else if (pop) - dout_buf <= show_ahead? q_tmp : q_buf; -end - -// dout_valid -always @(posedge clk) begin - if (reset) - dout_valid <= 1'b0; - else if (pop) - dout_valid <= 1'b1; - else if (if_read_ce & if_read) - dout_valid <= 1'b0; -end - -endmodule // fifo_bram - -`default_nettype wire diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/fifo_fwd.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/fifo_fwd.v deleted file mode 100644 index 870695ea..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/fifo_fwd.v +++ /dev/null @@ -1,58 +0,0 @@ -`default_nettype none - -// first-word fall-through (FWFT) FIFO with latency=0 and depth=1 -module fifo_fwd #( - parameter MEM_STYLE = "", // ignored - parameter DATA_WIDTH = 32, - parameter ADDR_WIDTH = 0, // ignored - parameter DEPTH = 1 // ignored -) ( - input wire clk, - input wire reset, - - // write - output wire if_full_n, - input wire if_write_ce, - input wire if_write, - input wire [DATA_WIDTH-1:0] if_din, - - // read - output wire if_empty_n, - input wire if_read_ce, - input wire if_read, - output wire [DATA_WIDTH-1:0] if_dout -); - reg [DATA_WIDTH-1:0] mem; - reg is_mem_valid; - - // If mem is valid, the FIFO is not empty and is full; if read, mem becomes - // invalid. If mem is not valid, the FIFO is not empty if and only if written - // and is not full; if written but not read, mem becomes valid. - - assign if_empty_n = is_mem_valid || (if_write && if_write_ce); - assign if_full_n = !is_mem_valid; - assign if_dout = is_mem_valid ? mem : if_din; - - always @(posedge clk) begin - if (reset) begin - is_mem_valid <= 1'b0; - end else begin - if (is_mem_valid) begin - if (if_read && if_read_ce) begin - is_mem_valid <= 1'b0; - end - end else begin - if (if_write && if_write_ce && !(if_read && if_read_ce)) begin - is_mem_valid <= 1'b1; - end - end - - if (if_write && if_write_ce) begin - mem <= if_din; - end - end - end - -endmodule // fifo_fwd - -`default_nettype wire diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/fifo_srl.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/fifo_srl.v deleted file mode 100644 index 8ed7a247..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/fifo_srl.v +++ /dev/null @@ -1,84 +0,0 @@ -`default_nettype none - -// first-word fall-through (FWFT) FIFO using shift register LUT -// based on HLS generated code -module fifo_srl #( - parameter MEM_STYLE = "shiftreg", - parameter DATA_WIDTH = 32, - parameter ADDR_WIDTH = 5, - parameter DEPTH = 32 -) ( - input wire clk, - input wire reset, - - // write - output wire if_full_n, - input wire if_write_ce, - input wire if_write, - input wire [DATA_WIDTH-1:0] if_din, - - // read - output wire if_empty_n, - input wire if_read_ce, - input wire if_read, - output wire [DATA_WIDTH-1:0] if_dout -); - parameter REAL_DEPTH = DEPTH < 4 ? 4 : DEPTH; - parameter REAL_ADDR_WIDTH = $clog2(REAL_DEPTH)+1; - - wire [REAL_ADDR_WIDTH - 1:0] shift_reg_addr; - wire [DATA_WIDTH - 1:0] shift_reg_data; - wire [DATA_WIDTH - 1:0] shift_reg_q; - wire shift_reg_ce; - reg [REAL_ADDR_WIDTH:0] out_ptr; - reg internal_empty_n; - reg internal_full_n; - - (* shreg_extract = "yes" *) reg [DATA_WIDTH-1:0] mem [0:REAL_DEPTH-1]; - - assign if_empty_n = internal_empty_n; - assign if_full_n = internal_full_n; - assign shift_reg_data = if_din; - assign if_dout = shift_reg_q; - - assign shift_reg_addr = out_ptr[REAL_ADDR_WIDTH] == 1'b0 ? out_ptr[REAL_ADDR_WIDTH-1:0] : {REAL_ADDR_WIDTH{1'b0}}; - assign shift_reg_ce = (if_write & if_write_ce) & internal_full_n; - - assign shift_reg_q = mem[shift_reg_addr]; - - always @(posedge clk) begin - if (reset) begin - out_ptr <= ~{REAL_ADDR_WIDTH+1{1'b0}}; - internal_empty_n <= 1'b0; - internal_full_n <= 1'b1; - end else begin - if (((if_read && if_read_ce) && internal_empty_n) && - (!(if_write && if_write_ce) || !internal_full_n)) begin - out_ptr <= out_ptr - 1'b1; - if (out_ptr == {(REAL_ADDR_WIDTH+1){1'b0}}) - internal_empty_n <= 1'b0; - internal_full_n <= 1'b1; - end - else if (((if_read & if_read_ce) == 0 | internal_empty_n == 0) && - ((if_write & if_write_ce) == 1 & internal_full_n == 1)) - begin - out_ptr <= out_ptr + 1'b1; - internal_empty_n <= 1'b1; - if (out_ptr == REAL_DEPTH - {{(REAL_ADDR_WIDTH-1){1'b0}}, 2'd2}) - internal_full_n <= 1'b0; - end - end - end - - integer i; - always @(posedge clk) begin - if (shift_reg_ce) begin - for (i = 0; i < REAL_DEPTH - 1; i = i + 1) - mem[i + 1] <= mem[i]; - mem[0] <= shift_reg_data; - end - end - -endmodule // fifo_srl - -`default_nettype wire diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/generate_last.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/generate_last.v deleted file mode 100644 index f592117d..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/generate_last.v +++ /dev/null @@ -1,71 +0,0 @@ -`default_nettype none - -module generate_last #( - parameter BurstLenWidth = 8 -) ( - input wire clk, - input wire rst, - - input wire [BurstLenWidth-1:0] burst_len_dout, - input wire burst_len_empty_n, - output reg burst_len_read, - - output reg last_din, - input wire last_full_n, - output reg last_write -); - - // state - reg busy; - reg [BurstLenWidth-1:0] count; - - // logic - reg busy_next; - reg [BurstLenWidth-1:0] count_next; - - always @* begin - busy_next = busy; - count_next = count; - burst_len_read = 1'b0; - last_write = 1'b0; - - if (last_full_n) begin - if (busy == 1'b0) begin - if (burst_len_empty_n) begin - // read from burst_len - burst_len_read = 1'b1; - count_next = burst_len_dout; - - // write to last - last_write = 1'b1; - last_din = ~|count_next; - - // change busy - if (|count_next) busy_next = 1'b1; - end - end else begin - count_next = count - 1'b1; - - // write to last - last_write = 1'b1; - last_din = ~|count_next; - - // change busy - if (~|count_next) busy_next = 1'b0; - end - end - end - - always @(posedge clk) begin - if (rst) begin - busy <= 1'b0; - count <= {BurstLenWidth{1'b0}}; - end else begin - busy <= busy_next; - count <= count_next; - end - end - -endmodule // generate_last - -`default_nettype wire diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/inter_kernel.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/inter_kernel.v deleted file mode 100644 index 526eac43..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/inter_kernel.v +++ /dev/null @@ -1,576 +0,0 @@ -// ============================================================== -// RTL generated by Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Version: 2022.2 -// Copyright (C) Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// -// =========================================================== - -`timescale 1 ns / 1 ps - -(* CORE_GENERATION_INFO="inter_kernel_inter_kernel,hls_ip_2022_2,{HLS_INPUT_TYPE=cxx,HLS_INPUT_FLOAT=0,HLS_INPUT_FIXED=0,HLS_INPUT_PART=xcu280-fsvh2892-2L-e,HLS_INPUT_CLOCK=3.330000,HLS_INPUT_ARCH=others,HLS_SYN_CLOCK=2.430900,HLS_SYN_LAT=-1,HLS_SYN_TPT=none,HLS_SYN_MEM=0,HLS_SYN_DSP=0,HLS_SYN_FF=384,HLS_SYN_LUT=846,HLS_VERSION=2022_2}" *) - -module inter_kernel ( - ap_clk, - ap_rst_n, - ap_start, - ap_done, - ap_idle, - ap_ready, - a_read_addr_din, - a_read_addr_full_n, - a_read_addr_write, - a_read_data_s_dout, - a_read_data_s_empty_n, - a_read_data_s_read, - a_read_data_peek_dout, - a_read_data_peek_empty_n, - a_read_data_peek_read, - a_write_addr_din, - a_write_addr_full_n, - a_write_addr_write, - a_write_data_din, - a_write_data_full_n, - a_write_data_write, - a_write_resp_s_dout, - a_write_resp_s_empty_n, - a_write_resp_s_read, - a_write_resp_peek_dout, - a_write_resp_peek_empty_n, - a_write_resp_peek_read, - b_read_addr_din, - b_read_addr_full_n, - b_read_addr_write, - b_read_data_s_dout, - b_read_data_s_empty_n, - b_read_data_s_read, - b_read_data_peek_dout, - b_read_data_peek_empty_n, - b_read_data_peek_read, - b_write_addr_din, - b_write_addr_full_n, - b_write_addr_write, - b_write_data_din, - b_write_data_full_n, - b_write_data_write, - b_write_resp_s_dout, - b_write_resp_s_empty_n, - b_write_resp_s_read, - b_write_resp_peek_dout, - b_write_resp_peek_empty_n, - b_write_resp_peek_read, - stream_out_din, - stream_out_full_n, - stream_out_write, - stream_in_s_dout, - stream_in_s_empty_n, - stream_in_s_read, - stream_in_peek_dout, - stream_in_peek_empty_n, - stream_in_peek_read, - iters -); - -parameter ap_ST_fsm_state1 = 3'd1; -parameter ap_ST_fsm_state2 = 3'd2; -parameter ap_ST_fsm_state3 = 3'd4; - -input ap_clk; -input ap_rst_n; -input ap_start; -output ap_done; -output ap_idle; -output ap_ready; -output [64:0] a_read_addr_din; -input a_read_addr_full_n; -output a_read_addr_write; -input [512:0] a_read_data_s_dout; -input a_read_data_s_empty_n; -output a_read_data_s_read; -input [512:0] a_read_data_peek_dout; -input a_read_data_peek_empty_n; -output a_read_data_peek_read; -output [64:0] a_write_addr_din; -input a_write_addr_full_n; -output a_write_addr_write; -output [512:0] a_write_data_din; -input a_write_data_full_n; -output a_write_data_write; -input [8:0] a_write_resp_s_dout; -input a_write_resp_s_empty_n; -output a_write_resp_s_read; -input [8:0] a_write_resp_peek_dout; -input a_write_resp_peek_empty_n; -output a_write_resp_peek_read; -output [64:0] b_read_addr_din; -input b_read_addr_full_n; -output b_read_addr_write; -input [512:0] b_read_data_s_dout; -input b_read_data_s_empty_n; -output b_read_data_s_read; -input [512:0] b_read_data_peek_dout; -input b_read_data_peek_empty_n; -output b_read_data_peek_read; -output [64:0] b_write_addr_din; -input b_write_addr_full_n; -output b_write_addr_write; -output [512:0] b_write_data_din; -input b_write_data_full_n; -output b_write_data_write; -input [8:0] b_write_resp_s_dout; -input b_write_resp_s_empty_n; -output b_write_resp_s_read; -input [8:0] b_write_resp_peek_dout; -input b_write_resp_peek_empty_n; -output b_write_resp_peek_read; -output [512:0] stream_out_din; -input stream_out_full_n; -output stream_out_write; -input [512:0] stream_in_s_dout; -input stream_in_s_empty_n; -output stream_in_s_read; -input [512:0] stream_in_peek_dout; -input stream_in_peek_empty_n; -output stream_in_peek_read; -input [31:0] iters; - -reg ap_done; -reg ap_idle; -reg ap_ready; -reg a_read_addr_write; -reg a_read_data_s_read; -reg a_write_addr_write; -reg a_write_data_write; -reg a_write_resp_s_read; -reg b_read_addr_write; -reg b_read_data_s_read; -reg b_write_addr_write; -reg b_write_data_write; -reg b_write_resp_s_read; -reg stream_out_write; -reg stream_in_s_read; - - reg ap_rst_n_inv; -(* fsm_encoding = "none" *) reg [2:0] ap_CS_fsm; -wire ap_CS_fsm_state1; -wire [0:0] trunc_ln133_fu_250_p1; -reg [0:0] trunc_ln133_reg_282; -wire ap_CS_fsm_state2; -wire [31:0] i_2_fu_259_p2; -reg [31:0] i_2_reg_289; -wire grp_load_fu_218_ap_start; -wire grp_load_fu_218_ap_done; -wire grp_load_fu_218_ap_idle; -wire grp_load_fu_218_ap_ready; -wire [64:0] grp_load_fu_218_b_read_addr_din; -reg grp_load_fu_218_b_read_addr_full_n; -wire grp_load_fu_218_b_read_addr_write; -reg [512:0] grp_load_fu_218_b_read_data_s_dout; -reg grp_load_fu_218_b_read_data_s_empty_n; -wire grp_load_fu_218_b_read_data_s_read; -wire [64:0] grp_load_fu_218_a_write_addr_din; -reg grp_load_fu_218_a_write_addr_full_n; -wire grp_load_fu_218_a_write_addr_write; -wire [512:0] grp_load_fu_218_a_write_data_din; -reg grp_load_fu_218_a_write_data_full_n; -wire grp_load_fu_218_a_write_data_write; -reg [8:0] grp_load_fu_218_a_write_resp_s_dout; -reg grp_load_fu_218_a_write_resp_s_empty_n; -wire grp_load_fu_218_a_write_resp_s_read; -wire [512:0] grp_load_fu_218_stream_out_din; -wire grp_load_fu_218_stream_out_write; -wire grp_load_fu_218_stream_in_s_read; -reg grp_load_fu_218_ap_start_reg; -wire [0:0] icmp_ln133_fu_254_p2; -wire ap_CS_fsm_state3; -reg [31:0] i_fu_72; -reg ap_block_state3_on_subcall_done; -reg [2:0] ap_NS_fsm; -reg ap_ST_fsm_state1_blk; -wire ap_ST_fsm_state2_blk; -reg ap_ST_fsm_state3_blk; -wire ap_ce_reg; - -// power-on initialization -initial begin -#0 ap_CS_fsm = 3'd1; -#0 grp_load_fu_218_ap_start_reg = 1'b0; -end - -inter_kernel_load grp_load_fu_218( - .ap_clk(ap_clk), - .ap_rst(ap_rst_n_inv), - .ap_start(grp_load_fu_218_ap_start), - .ap_done(grp_load_fu_218_ap_done), - .ap_idle(grp_load_fu_218_ap_idle), - .ap_ready(grp_load_fu_218_ap_ready), - .b_read_addr_din(grp_load_fu_218_b_read_addr_din), - .b_read_addr_full_n(grp_load_fu_218_b_read_addr_full_n), - .b_read_addr_write(grp_load_fu_218_b_read_addr_write), - .b_read_data_s_dout(grp_load_fu_218_b_read_data_s_dout), - .b_read_data_s_empty_n(grp_load_fu_218_b_read_data_s_empty_n), - .b_read_data_s_read(grp_load_fu_218_b_read_data_s_read), - .a_write_addr_din(grp_load_fu_218_a_write_addr_din), - .a_write_addr_full_n(grp_load_fu_218_a_write_addr_full_n), - .a_write_addr_write(grp_load_fu_218_a_write_addr_write), - .a_write_data_din(grp_load_fu_218_a_write_data_din), - .a_write_data_full_n(grp_load_fu_218_a_write_data_full_n), - .a_write_data_write(grp_load_fu_218_a_write_data_write), - .a_write_resp_s_dout(grp_load_fu_218_a_write_resp_s_dout), - .a_write_resp_s_empty_n(grp_load_fu_218_a_write_resp_s_empty_n), - .a_write_resp_s_read(grp_load_fu_218_a_write_resp_s_read), - .stream_out_din(grp_load_fu_218_stream_out_din), - .stream_out_full_n(stream_out_full_n), - .stream_out_write(grp_load_fu_218_stream_out_write), - .stream_in_s_dout(stream_in_s_dout), - .stream_in_s_empty_n(stream_in_s_empty_n), - .stream_in_s_read(grp_load_fu_218_stream_in_s_read), - .iters(iters) -); - -always @ (posedge ap_clk) begin - if (ap_rst_n_inv == 1'b1) begin - ap_CS_fsm <= ap_ST_fsm_state1; - end else begin - ap_CS_fsm <= ap_NS_fsm; - end -end - -always @ (posedge ap_clk) begin - if (ap_rst_n_inv == 1'b1) begin - grp_load_fu_218_ap_start_reg <= 1'b0; - end else begin - if ((((trunc_ln133_fu_250_p1 == 1'd1) & (1'b1 == ap_CS_fsm_state2) & (icmp_ln133_fu_254_p2 == 1'd0)) | ((trunc_ln133_fu_250_p1 == 1'd0) & (1'b1 == ap_CS_fsm_state2) & (icmp_ln133_fu_254_p2 == 1'd0)))) begin - grp_load_fu_218_ap_start_reg <= 1'b1; - end else if ((grp_load_fu_218_ap_ready == 1'b1)) begin - grp_load_fu_218_ap_start_reg <= 1'b0; - end - end -end - -always @ (posedge ap_clk) begin - if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b1))) begin - i_fu_72 <= 32'd0; - end else if (((1'b1 == ap_CS_fsm_state3) & (1'b0 == ap_block_state3_on_subcall_done))) begin - i_fu_72 <= i_2_reg_289; - end -end - -always @ (posedge ap_clk) begin - if ((1'b1 == ap_CS_fsm_state2)) begin - i_2_reg_289 <= i_2_fu_259_p2; - trunc_ln133_reg_282 <= trunc_ln133_fu_250_p1; - end -end - -always @ (*) begin - if (((trunc_ln133_reg_282 == 1'd0) & (1'b1 == ap_CS_fsm_state3))) begin - a_read_addr_write = grp_load_fu_218_b_read_addr_write; - end else begin - a_read_addr_write = 1'b0; - end -end - -always @ (*) begin - if (((trunc_ln133_reg_282 == 1'd0) & (1'b1 == ap_CS_fsm_state3))) begin - a_read_data_s_read = grp_load_fu_218_b_read_data_s_read; - end else begin - a_read_data_s_read = 1'b0; - end -end - -always @ (*) begin - if (((trunc_ln133_reg_282 == 1'd1) & (1'b1 == ap_CS_fsm_state3))) begin - a_write_addr_write = grp_load_fu_218_a_write_addr_write; - end else begin - a_write_addr_write = 1'b0; - end -end - -always @ (*) begin - if (((trunc_ln133_reg_282 == 1'd1) & (1'b1 == ap_CS_fsm_state3))) begin - a_write_data_write = grp_load_fu_218_a_write_data_write; - end else begin - a_write_data_write = 1'b0; - end -end - -always @ (*) begin - if (((trunc_ln133_reg_282 == 1'd1) & (1'b1 == ap_CS_fsm_state3))) begin - a_write_resp_s_read = grp_load_fu_218_a_write_resp_s_read; - end else begin - a_write_resp_s_read = 1'b0; - end -end - -always @ (*) begin - if ((ap_start == 1'b0)) begin - ap_ST_fsm_state1_blk = 1'b1; - end else begin - ap_ST_fsm_state1_blk = 1'b0; - end -end - -assign ap_ST_fsm_state2_blk = 1'b0; - -always @ (*) begin - if ((1'b1 == ap_block_state3_on_subcall_done)) begin - ap_ST_fsm_state3_blk = 1'b1; - end else begin - ap_ST_fsm_state3_blk = 1'b0; - end -end - -always @ (*) begin - if (((1'b1 == ap_CS_fsm_state2) & (icmp_ln133_fu_254_p2 == 1'd1))) begin - ap_done = 1'b1; - end else begin - ap_done = 1'b0; - end -end - -always @ (*) begin - if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b0))) begin - ap_idle = 1'b1; - end else begin - ap_idle = 1'b0; - end -end - -always @ (*) begin - if (((1'b1 == ap_CS_fsm_state2) & (icmp_ln133_fu_254_p2 == 1'd1))) begin - ap_ready = 1'b1; - end else begin - ap_ready = 1'b0; - end -end - -always @ (*) begin - if (((trunc_ln133_reg_282 == 1'd1) & (1'b1 == ap_CS_fsm_state3))) begin - b_read_addr_write = grp_load_fu_218_b_read_addr_write; - end else begin - b_read_addr_write = 1'b0; - end -end - -always @ (*) begin - if (((trunc_ln133_reg_282 == 1'd1) & (1'b1 == ap_CS_fsm_state3))) begin - b_read_data_s_read = grp_load_fu_218_b_read_data_s_read; - end else begin - b_read_data_s_read = 1'b0; - end -end - -always @ (*) begin - if (((trunc_ln133_reg_282 == 1'd0) & (1'b1 == ap_CS_fsm_state3))) begin - b_write_addr_write = grp_load_fu_218_a_write_addr_write; - end else begin - b_write_addr_write = 1'b0; - end -end - -always @ (*) begin - if (((trunc_ln133_reg_282 == 1'd0) & (1'b1 == ap_CS_fsm_state3))) begin - b_write_data_write = grp_load_fu_218_a_write_data_write; - end else begin - b_write_data_write = 1'b0; - end -end - -always @ (*) begin - if (((trunc_ln133_reg_282 == 1'd0) & (1'b1 == ap_CS_fsm_state3))) begin - b_write_resp_s_read = grp_load_fu_218_a_write_resp_s_read; - end else begin - b_write_resp_s_read = 1'b0; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state3)) begin - if ((trunc_ln133_reg_282 == 1'd1)) begin - grp_load_fu_218_a_write_addr_full_n = a_write_addr_full_n; - end else if ((trunc_ln133_reg_282 == 1'd0)) begin - grp_load_fu_218_a_write_addr_full_n = b_write_addr_full_n; - end else begin - grp_load_fu_218_a_write_addr_full_n = a_write_addr_full_n; - end - end else begin - grp_load_fu_218_a_write_addr_full_n = a_write_addr_full_n; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state3)) begin - if ((trunc_ln133_reg_282 == 1'd1)) begin - grp_load_fu_218_a_write_data_full_n = a_write_data_full_n; - end else if ((trunc_ln133_reg_282 == 1'd0)) begin - grp_load_fu_218_a_write_data_full_n = b_write_data_full_n; - end else begin - grp_load_fu_218_a_write_data_full_n = a_write_data_full_n; - end - end else begin - grp_load_fu_218_a_write_data_full_n = a_write_data_full_n; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state3)) begin - if ((trunc_ln133_reg_282 == 1'd1)) begin - grp_load_fu_218_a_write_resp_s_dout = a_write_resp_s_dout; - end else if ((trunc_ln133_reg_282 == 1'd0)) begin - grp_load_fu_218_a_write_resp_s_dout = b_write_resp_s_dout; - end else begin - grp_load_fu_218_a_write_resp_s_dout = a_write_resp_s_dout; - end - end else begin - grp_load_fu_218_a_write_resp_s_dout = a_write_resp_s_dout; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state3)) begin - if ((trunc_ln133_reg_282 == 1'd1)) begin - grp_load_fu_218_a_write_resp_s_empty_n = a_write_resp_s_empty_n; - end else if ((trunc_ln133_reg_282 == 1'd0)) begin - grp_load_fu_218_a_write_resp_s_empty_n = b_write_resp_s_empty_n; - end else begin - grp_load_fu_218_a_write_resp_s_empty_n = a_write_resp_s_empty_n; - end - end else begin - grp_load_fu_218_a_write_resp_s_empty_n = a_write_resp_s_empty_n; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state3)) begin - if ((trunc_ln133_reg_282 == 1'd1)) begin - grp_load_fu_218_b_read_addr_full_n = b_read_addr_full_n; - end else if ((trunc_ln133_reg_282 == 1'd0)) begin - grp_load_fu_218_b_read_addr_full_n = a_read_addr_full_n; - end else begin - grp_load_fu_218_b_read_addr_full_n = b_read_addr_full_n; - end - end else begin - grp_load_fu_218_b_read_addr_full_n = b_read_addr_full_n; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state3)) begin - if ((trunc_ln133_reg_282 == 1'd1)) begin - grp_load_fu_218_b_read_data_s_dout = b_read_data_s_dout; - end else if ((trunc_ln133_reg_282 == 1'd0)) begin - grp_load_fu_218_b_read_data_s_dout = a_read_data_s_dout; - end else begin - grp_load_fu_218_b_read_data_s_dout = b_read_data_s_dout; - end - end else begin - grp_load_fu_218_b_read_data_s_dout = b_read_data_s_dout; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state3)) begin - if ((trunc_ln133_reg_282 == 1'd1)) begin - grp_load_fu_218_b_read_data_s_empty_n = b_read_data_s_empty_n; - end else if ((trunc_ln133_reg_282 == 1'd0)) begin - grp_load_fu_218_b_read_data_s_empty_n = a_read_data_s_empty_n; - end else begin - grp_load_fu_218_b_read_data_s_empty_n = b_read_data_s_empty_n; - end - end else begin - grp_load_fu_218_b_read_data_s_empty_n = b_read_data_s_empty_n; - end -end - -always @ (*) begin - if ((((trunc_ln133_reg_282 == 1'd1) & (1'b1 == ap_CS_fsm_state3)) | ((trunc_ln133_reg_282 == 1'd0) & (1'b1 == ap_CS_fsm_state3)))) begin - stream_in_s_read = grp_load_fu_218_stream_in_s_read; - end else begin - stream_in_s_read = 1'b0; - end -end - -always @ (*) begin - if ((((trunc_ln133_reg_282 == 1'd1) & (1'b1 == ap_CS_fsm_state3)) | ((trunc_ln133_reg_282 == 1'd0) & (1'b1 == ap_CS_fsm_state3)))) begin - stream_out_write = grp_load_fu_218_stream_out_write; - end else begin - stream_out_write = 1'b0; - end -end - -always @ (*) begin - case (ap_CS_fsm) - ap_ST_fsm_state1 : begin - if (((1'b1 == ap_CS_fsm_state1) & (ap_start == 1'b1))) begin - ap_NS_fsm = ap_ST_fsm_state2; - end else begin - ap_NS_fsm = ap_ST_fsm_state1; - end - end - ap_ST_fsm_state2 : begin - if (((1'b1 == ap_CS_fsm_state2) & (icmp_ln133_fu_254_p2 == 1'd1))) begin - ap_NS_fsm = ap_ST_fsm_state1; - end else begin - ap_NS_fsm = ap_ST_fsm_state3; - end - end - ap_ST_fsm_state3 : begin - if (((1'b1 == ap_CS_fsm_state3) & (1'b0 == ap_block_state3_on_subcall_done))) begin - ap_NS_fsm = ap_ST_fsm_state2; - end else begin - ap_NS_fsm = ap_ST_fsm_state3; - end - end - default : begin - ap_NS_fsm = 'bx; - end - endcase -end - -assign a_read_addr_din = grp_load_fu_218_b_read_addr_din; - -assign a_read_data_peek_read = 1'b0; - -assign a_write_addr_din = grp_load_fu_218_a_write_addr_din; - -assign a_write_data_din = grp_load_fu_218_a_write_data_din; - -assign a_write_resp_peek_read = 1'b0; - -assign ap_CS_fsm_state1 = ap_CS_fsm[32'd0]; - -assign ap_CS_fsm_state2 = ap_CS_fsm[32'd1]; - -assign ap_CS_fsm_state3 = ap_CS_fsm[32'd2]; - -always @ (*) begin - ap_block_state3_on_subcall_done = (((trunc_ln133_reg_282 == 1'd1) & (grp_load_fu_218_ap_done == 1'b0)) | ((trunc_ln133_reg_282 == 1'd0) & (grp_load_fu_218_ap_done == 1'b0))); -end - -always @ (*) begin - ap_rst_n_inv = ~ap_rst_n; -end - -assign b_read_addr_din = grp_load_fu_218_b_read_addr_din; - -assign b_read_data_peek_read = 1'b0; - -assign b_write_addr_din = grp_load_fu_218_a_write_addr_din; - -assign b_write_data_din = grp_load_fu_218_a_write_data_din; - -assign b_write_resp_peek_read = 1'b0; - -assign grp_load_fu_218_ap_start = grp_load_fu_218_ap_start_reg; - -assign i_2_fu_259_p2 = (i_fu_72 + 32'd1); - -assign icmp_ln133_fu_254_p2 = ((i_fu_72 == iters) ? 1'b1 : 1'b0); - -assign stream_in_peek_read = 1'b0; - -assign stream_out_din = grp_load_fu_218_stream_out_din; - -assign trunc_ln133_fu_250_p1 = i_fu_72[0:0]; - -endmodule //inter_kernel diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/inter_kernel_flow_control_loop_pipe_sequential_init.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/inter_kernel_flow_control_loop_pipe_sequential_init.v deleted file mode 100644 index fad8c899..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/inter_kernel_flow_control_loop_pipe_sequential_init.v +++ /dev/null @@ -1,104 +0,0 @@ -// ============================================================== -// Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Tool Version Limit: 2019.12 -// Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// ============================================================== - -`timescale 1 ns / 1 ps - -module inter_kernel_flow_control_loop_pipe_sequential_init( - ap_clk, - ap_rst, - ap_start, - ap_ready, - ap_done, - ap_start_int, - ap_ready_int, - ap_done_int, - ap_continue_int, - ap_loop_init, - ap_loop_exit_ready, - ap_loop_exit_done -); - -input ap_clk; -input ap_rst; - -//Block level handshake with outside loop -input ap_start; -output ap_ready; -output ap_done; - -//Block level handshake with loop body -output ap_start_int; -input ap_ready_int; -input ap_done_int; -output ap_continue_int; - -//Init live in variables -output ap_loop_init; -wire ap_loop_init; -reg ap_loop_init_int; -reg ap_done; -reg ap_done_cache; - -//Exit signal from loop body -input ap_loop_exit_ready; -input ap_loop_exit_done; - -// power-on initialization -initial begin -#0 ap_loop_init_int = 1'b1; -#0 ap_done_cache = 1'b0; -end - -assign ap_start_int = ap_start; - -assign ap_continue_int = 1'b1; - -assign ap_ready = ap_loop_exit_ready; - -//ap_loop_init is valid for the first II -//of the first loop run so as to enable -//the init block ops which are pushed into -//the first state of the pipeline region -always @ (posedge ap_clk) -begin - if (ap_rst == 1'b1) begin - ap_loop_init_int <= 1'b1; - end else if(ap_loop_exit_done == 1'b1) begin - ap_loop_init_int <= 1'b1; - end else if(ap_ready_int == 1'b1) begin - ap_loop_init_int <= 1'b0; - end -end - -assign ap_loop_init = ap_loop_init_int & ap_start; - -// if no ap_continue port and current module is not top module, -// ap_done handshakes with ap_start. Internally, flow control sends out -// ap_conintue_int = 1'b1 so the ap_done_int is asserted high for 1 clock cycle. -// ap_done_cache is used to record ap_done_int, and de-assert if ap_start_int -// is asserted, so DUT can start the next run -always @(posedge ap_clk) -begin - if (ap_rst == 1'b1) begin - ap_done_cache <= 1'b0; - end else if (ap_done_int == 1'b1) begin - ap_done_cache <= 1'b1; - end else if (ap_start_int == 1'b1) begin - ap_done_cache <= 1'b0; - end -end - -// if no ap_continue port and current module is not top module, ap_done handshakes with ap_start -always @(*) -begin - if ((ap_done_int == 1'b1) || ((ap_done_cache == 1'b1) && (ap_start_int == 1'b0))) begin - ap_done = 1'b1; - end else begin - ap_done = 1'b0; - end -end - -endmodule diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/inter_kernel_load.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/inter_kernel_load.v deleted file mode 100644 index 6b19cd56..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/inter_kernel_load.v +++ /dev/null @@ -1,323 +0,0 @@ -// ============================================================== -// RTL generated by Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Version: 2022.2 -// Copyright (C) Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// -// =========================================================== - -`timescale 1 ns / 1 ps - -module inter_kernel_load ( - ap_clk, - ap_rst, - ap_start, - ap_done, - ap_idle, - ap_ready, - b_read_addr_din, - b_read_addr_full_n, - b_read_addr_write, - b_read_data_s_dout, - b_read_data_s_empty_n, - b_read_data_s_read, - a_write_addr_din, - a_write_addr_full_n, - a_write_addr_write, - a_write_data_din, - a_write_data_full_n, - a_write_data_write, - a_write_resp_s_dout, - a_write_resp_s_empty_n, - a_write_resp_s_read, - stream_out_din, - stream_out_full_n, - stream_out_write, - stream_in_s_dout, - stream_in_s_empty_n, - stream_in_s_read, - iters -); - -parameter ap_ST_fsm_state1 = 3'd1; -parameter ap_ST_fsm_state2 = 3'd2; -parameter ap_ST_fsm_state3 = 3'd4; - -input ap_clk; -input ap_rst; -input ap_start; -output ap_done; -output ap_idle; -output ap_ready; -output [64:0] b_read_addr_din; -input b_read_addr_full_n; -output b_read_addr_write; -input [512:0] b_read_data_s_dout; -input b_read_data_s_empty_n; -output b_read_data_s_read; -output [64:0] a_write_addr_din; -input a_write_addr_full_n; -output a_write_addr_write; -output [512:0] a_write_data_din; -input a_write_data_full_n; -output a_write_data_write; -input [8:0] a_write_resp_s_dout; -input a_write_resp_s_empty_n; -output a_write_resp_s_read; -output [512:0] stream_out_din; -input stream_out_full_n; -output stream_out_write; -input [512:0] stream_in_s_dout; -input stream_in_s_empty_n; -output stream_in_s_read; -input [31:0] iters; - -reg ap_done; -reg ap_idle; -reg ap_ready; -reg b_read_addr_write; -reg b_read_data_s_read; -reg a_write_addr_write; -reg a_write_data_write; -reg a_write_resp_s_read; -reg stream_out_write; -reg stream_in_s_read; - -(* fsm_encoding = "none" *) reg [2:0] ap_CS_fsm; -wire ap_CS_fsm_state1; -wire [31:0] loop_bound_fu_71_p2; -reg [31:0] loop_bound_reg_84; -wire ap_CS_fsm_state2; -wire grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_start; -wire grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_done; -wire grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_idle; -wire grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_ready; -wire grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_a_write_resp_s_read; -wire [64:0] grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_b_read_addr_din; -wire grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_b_read_addr_write; -wire grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_b_read_data_s_read; -wire [512:0] grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_stream_out_din; -wire grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_stream_out_write; -wire [64:0] grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_a_write_addr_din; -wire grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_a_write_addr_write; -wire [512:0] grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_a_write_data_din; -wire grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_a_write_data_write; -wire grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_stream_in_s_read; -reg grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_start_reg; -wire ap_CS_fsm_state3; -wire [31:0] add_ln44_fu_66_p2; -wire [31:0] shl_ln44_fu_61_p2; -reg [2:0] ap_NS_fsm; -reg ap_ST_fsm_state1_blk; -wire ap_ST_fsm_state2_blk; -reg ap_ST_fsm_state3_blk; -wire ap_ce_reg; - -// power-on initialization -initial begin -#0 ap_CS_fsm = 3'd1; -#0 grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_start_reg = 1'b0; -end - -inter_kernel_load_Pipeline_VITIS_LOOP_45_1 grp_load_Pipeline_VITIS_LOOP_45_1_fu_42( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .ap_start(grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_start), - .ap_done(grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_done), - .ap_idle(grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_idle), - .ap_ready(grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_ready), - .a_write_resp_s_dout(a_write_resp_s_dout), - .a_write_resp_s_empty_n(a_write_resp_s_empty_n), - .a_write_resp_s_read(grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_a_write_resp_s_read), - .loop_bound(loop_bound_reg_84), - .b_read_addr_din(grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_b_read_addr_din), - .b_read_addr_full_n(b_read_addr_full_n), - .b_read_addr_write(grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_b_read_addr_write), - .b_read_data_s_dout(b_read_data_s_dout), - .b_read_data_s_empty_n(b_read_data_s_empty_n), - .b_read_data_s_read(grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_b_read_data_s_read), - .stream_out_din(grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_stream_out_din), - .stream_out_full_n(stream_out_full_n), - .stream_out_write(grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_stream_out_write), - .a_write_addr_din(grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_a_write_addr_din), - .a_write_addr_full_n(a_write_addr_full_n), - .a_write_addr_write(grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_a_write_addr_write), - .a_write_data_din(grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_a_write_data_din), - .a_write_data_full_n(a_write_data_full_n), - .a_write_data_write(grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_a_write_data_write), - .stream_in_s_dout(stream_in_s_dout), - .stream_in_s_empty_n(stream_in_s_empty_n), - .stream_in_s_read(grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_stream_in_s_read) -); - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_CS_fsm <= ap_ST_fsm_state1; - end else begin - ap_CS_fsm <= ap_NS_fsm; - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_start_reg <= 1'b0; - end else begin - if ((1'b1 == ap_CS_fsm_state2)) begin - grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_start_reg <= 1'b1; - end else if ((grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_ready == 1'b1)) begin - grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_start_reg <= 1'b0; - end - end -end - -always @ (posedge ap_clk) begin - if ((1'b1 == ap_CS_fsm_state2)) begin - loop_bound_reg_84 <= loop_bound_fu_71_p2; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state3)) begin - a_write_addr_write = grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_a_write_addr_write; - end else begin - a_write_addr_write = 1'b0; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state3)) begin - a_write_data_write = grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_a_write_data_write; - end else begin - a_write_data_write = 1'b0; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state3)) begin - a_write_resp_s_read = grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_a_write_resp_s_read; - end else begin - a_write_resp_s_read = 1'b0; - end -end - -always @ (*) begin - if ((ap_start == 1'b0)) begin - ap_ST_fsm_state1_blk = 1'b1; - end else begin - ap_ST_fsm_state1_blk = 1'b0; - end -end - -assign ap_ST_fsm_state2_blk = 1'b0; - -always @ (*) begin - if ((grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_done == 1'b0)) begin - ap_ST_fsm_state3_blk = 1'b1; - end else begin - ap_ST_fsm_state3_blk = 1'b0; - end -end - -always @ (*) begin - if ((((grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_done == 1'b1) & (1'b1 == ap_CS_fsm_state3)) | ((ap_start == 1'b0) & (1'b1 == ap_CS_fsm_state1)))) begin - ap_done = 1'b1; - end else begin - ap_done = 1'b0; - end -end - -always @ (*) begin - if (((ap_start == 1'b0) & (1'b1 == ap_CS_fsm_state1))) begin - ap_idle = 1'b1; - end else begin - ap_idle = 1'b0; - end -end - -always @ (*) begin - if (((grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_done == 1'b1) & (1'b1 == ap_CS_fsm_state3))) begin - ap_ready = 1'b1; - end else begin - ap_ready = 1'b0; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state3)) begin - b_read_addr_write = grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_b_read_addr_write; - end else begin - b_read_addr_write = 1'b0; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state3)) begin - b_read_data_s_read = grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_b_read_data_s_read; - end else begin - b_read_data_s_read = 1'b0; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state3)) begin - stream_in_s_read = grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_stream_in_s_read; - end else begin - stream_in_s_read = 1'b0; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_state3)) begin - stream_out_write = grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_stream_out_write; - end else begin - stream_out_write = 1'b0; - end -end - -always @ (*) begin - case (ap_CS_fsm) - ap_ST_fsm_state1 : begin - if (((ap_start == 1'b1) & (1'b1 == ap_CS_fsm_state1))) begin - ap_NS_fsm = ap_ST_fsm_state2; - end else begin - ap_NS_fsm = ap_ST_fsm_state1; - end - end - ap_ST_fsm_state2 : begin - ap_NS_fsm = ap_ST_fsm_state3; - end - ap_ST_fsm_state3 : begin - if (((grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_done == 1'b1) & (1'b1 == ap_CS_fsm_state3))) begin - ap_NS_fsm = ap_ST_fsm_state1; - end else begin - ap_NS_fsm = ap_ST_fsm_state3; - end - end - default : begin - ap_NS_fsm = 'bx; - end - endcase -end - -assign a_write_addr_din = grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_a_write_addr_din; - -assign a_write_data_din = grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_a_write_data_din; - -assign add_ln44_fu_66_p2 = (iters + 32'd341); - -assign ap_CS_fsm_state1 = ap_CS_fsm[32'd0]; - -assign ap_CS_fsm_state2 = ap_CS_fsm[32'd1]; - -assign ap_CS_fsm_state3 = ap_CS_fsm[32'd2]; - -assign b_read_addr_din = grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_b_read_addr_din; - -assign grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_start = grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_ap_start_reg; - -assign loop_bound_fu_71_p2 = (add_ln44_fu_66_p2 + shl_ln44_fu_61_p2); - -assign shl_ln44_fu_61_p2 = iters << 32'd5; - -assign stream_out_din = grp_load_Pipeline_VITIS_LOOP_45_1_fu_42_stream_out_din; - -endmodule //inter_kernel_load diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/inter_kernel_load_Pipeline_VITIS_LOOP_45_1.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/inter_kernel_load_Pipeline_VITIS_LOOP_45_1.v deleted file mode 100644 index 6b0bdc26..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/inter_kernel_load_Pipeline_VITIS_LOOP_45_1.v +++ /dev/null @@ -1,662 +0,0 @@ -// ============================================================== -// RTL generated by Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Version: 2022.2 -// Copyright (C) Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// -// =========================================================== - -`timescale 1 ns / 1 ps - -module inter_kernel_load_Pipeline_VITIS_LOOP_45_1 ( - ap_clk, - ap_rst, - ap_start, - ap_done, - ap_idle, - ap_ready, - a_write_resp_s_dout, - a_write_resp_s_empty_n, - a_write_resp_s_read, - loop_bound, - b_read_addr_din, - b_read_addr_full_n, - b_read_addr_write, - b_read_data_s_dout, - b_read_data_s_empty_n, - b_read_data_s_read, - stream_out_din, - stream_out_full_n, - stream_out_write, - a_write_addr_din, - a_write_addr_full_n, - a_write_addr_write, - a_write_data_din, - a_write_data_full_n, - a_write_data_write, - stream_in_s_dout, - stream_in_s_empty_n, - stream_in_s_read -); - -parameter ap_ST_fsm_pp0_stage0 = 2'd1; -parameter ap_ST_fsm_pp0_stage1 = 2'd2; - -input ap_clk; -input ap_rst; -input ap_start; -output ap_done; -output ap_idle; -output ap_ready; -input [8:0] a_write_resp_s_dout; -input a_write_resp_s_empty_n; -output a_write_resp_s_read; -input [31:0] loop_bound; -output [64:0] b_read_addr_din; -input b_read_addr_full_n; -output b_read_addr_write; -input [512:0] b_read_data_s_dout; -input b_read_data_s_empty_n; -output b_read_data_s_read; -output [512:0] stream_out_din; -input stream_out_full_n; -output stream_out_write; -output [64:0] a_write_addr_din; -input a_write_addr_full_n; -output a_write_addr_write; -output [512:0] a_write_data_din; -input a_write_data_full_n; -output a_write_data_write; -input [512:0] stream_in_s_dout; -input stream_in_s_empty_n; -output stream_in_s_read; - -reg ap_idle; -reg a_write_resp_s_read; -reg b_read_addr_write; -reg b_read_data_s_read; -reg stream_out_write; -reg a_write_addr_write; -reg a_write_data_write; -reg stream_in_s_read; - -(* fsm_encoding = "none" *) reg [1:0] ap_CS_fsm; -wire ap_CS_fsm_pp0_stage0; -reg ap_enable_reg_pp0_iter0; -reg ap_enable_reg_pp0_iter1; -reg ap_idle_pp0; -wire ap_CS_fsm_pp0_stage1; -wire [0:0] or_ln45_fu_226_p2; -wire [0:0] tmp_1_nbreadreq_fu_137_p3; -reg ap_predicate_op53_read_state2; -reg ap_block_state2_pp0_stage1_iter0; -reg ap_block_pp0_stage1_subdone; -reg ap_condition_exit_pp0_iter0_stage1; -wire ap_loop_exit_ready; -reg ap_ready_int; -reg a_write_resp_s_blk_n; -wire ap_block_pp0_stage1; -reg stream_out_blk_n; -wire ap_block_pp0_stage0; -reg [0:0] or_ln45_reg_418; -reg [0:0] icmp_ln45_reg_414; -reg [0:0] tmp_3_reg_431; -reg [0:0] tmp_4_reg_435; -reg a_write_addr_blk_n; -reg [0:0] icmp_ln56_reg_439; -reg [0:0] tmp_s_reg_443; -reg [0:0] tmp_5_reg_447; -reg [0:0] tmp_6_reg_451; -reg a_write_data_blk_n; -reg stream_in_s_blk_n; -wire ap_block_state1_pp0_stage0_iter0; -reg ap_predicate_op62_write_state3; -reg ap_predicate_op68_write_state3; -reg ap_predicate_op69_read_state3; -reg ap_predicate_op72_write_state3; -reg ap_block_state3_pp0_stage0_iter1; -reg ap_block_pp0_stage0_11001; -reg signed [31:0] k_wr_req_1_reg_398; -reg ap_block_pp0_stage1_11001; -reg [31:0] k_rd_resp_1_reg_404; -reg [31:0] k_wr_resp_1_reg_409; -wire [0:0] icmp_ln45_fu_216_p2; -wire [0:0] icmp_ln47_fu_232_p2; -reg [0:0] icmp_ln47_reg_422; -wire [31:0] select_ln47_fu_256_p3; -reg [31:0] select_ln47_reg_426; -wire [0:0] tmp_3_nbreadreq_fu_97_p3; -wire [0:0] icmp_ln56_fu_264_p2; -wire [0:0] tmp_s_nbwritereq_fu_113_p3; -wire [0:0] tmp_5_nbwritereq_fu_121_p3; -wire [0:0] tmp_6_nbreadreq_fu_129_p3; -reg [0:0] tmp_1_reg_455; -wire [7:0] trunc_ln85_1_fu_269_p1; -reg [7:0] trunc_ln85_1_reg_459; -reg ap_enable_reg_pp0_iter0_reg; -reg ap_block_pp0_stage0_subdone; -reg [31:0] k_wr_req_fu_68; -wire [31:0] k_wr_req_2_fu_329_p2; -wire ap_loop_init; -reg [31:0] k_rd_resp_fu_72; -wire [31:0] k_rd_resp_2_fu_294_p2; -reg [31:0] k_rd_req_fu_76; -reg [31:0] k_wr_resp_fu_80; -wire [31:0] k_wr_resp_2_fu_352_p2; -reg ap_block_pp0_stage1_01001; -reg ap_block_pp0_stage0_01001; -wire [0:0] icmp_ln45_1_fu_221_p2; -wire signed [31:0] icmp_ln47_fu_232_p0; -wire signed [31:0] sext_ln47_fu_237_p0; -wire signed [63:0] sext_ln47_fu_237_p1; -wire signed [31:0] add_ln48_fu_250_p0; -wire [0:0] select_ln47_fu_256_p0; -wire [31:0] add_ln48_fu_250_p2; -wire signed [31:0] select_ln47_fu_256_p2; -wire signed [31:0] icmp_ln56_fu_264_p0; -wire [511:0] trunc_ln104_fu_281_p1; -wire signed [63:0] sext_ln57_fu_304_p1; -wire [511:0] trunc_ln85_fu_316_p1; -wire [8:0] zext_ln62_fu_339_p1; -wire [8:0] add_ln62_fu_342_p2; -wire [31:0] zext_ln62_1_fu_348_p1; -reg ap_done_reg; -wire ap_continue_int; -reg ap_done_int; -reg [1:0] ap_NS_fsm; -reg ap_idle_pp0_1to1; -wire ap_enable_pp0; -wire ap_start_int; -reg ap_condition_400; -reg ap_condition_406; -reg ap_condition_413; -reg ap_condition_417; -wire ap_ce_reg; - -// power-on initialization -initial begin -#0 ap_CS_fsm = 2'd1; -#0 ap_enable_reg_pp0_iter1 = 1'b0; -#0 ap_enable_reg_pp0_iter0_reg = 1'b0; -#0 ap_done_reg = 1'b0; -end - -inter_kernel_flow_control_loop_pipe_sequential_init flow_control_loop_pipe_sequential_init_U( - .ap_clk(ap_clk), - .ap_rst(ap_rst), - .ap_start(ap_start), - .ap_ready(ap_ready), - .ap_done(ap_done), - .ap_start_int(ap_start_int), - .ap_loop_init(ap_loop_init), - .ap_ready_int(ap_ready_int), - .ap_loop_exit_ready(ap_condition_exit_pp0_iter0_stage1), - .ap_loop_exit_done(ap_done_int), - .ap_continue_int(ap_continue_int), - .ap_done_int(ap_done_int) -); - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_CS_fsm <= ap_ST_fsm_pp0_stage0; - end else begin - ap_CS_fsm <= ap_NS_fsm; - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_done_reg <= 1'b0; - end else begin - if ((ap_continue_int == 1'b1)) begin - ap_done_reg <= 1'b0; - end else if (((ap_loop_exit_ready == 1'b1) & (1'b0 == ap_block_pp0_stage1_subdone) & (1'b1 == ap_CS_fsm_pp0_stage1))) begin - ap_done_reg <= 1'b1; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter0_reg <= 1'b0; - end else begin - if ((1'b1 == ap_CS_fsm_pp0_stage0)) begin - ap_enable_reg_pp0_iter0_reg <= ap_start_int; - end - end -end - -always @ (posedge ap_clk) begin - if (ap_rst == 1'b1) begin - ap_enable_reg_pp0_iter1 <= 1'b0; - end else begin - if (((1'b1 == ap_condition_exit_pp0_iter0_stage1) | ((1'b0 == ap_block_pp0_stage0_subdone) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0)))) begin - ap_enable_reg_pp0_iter1 <= 1'b0; - end else if (((1'b0 == ap_block_pp0_stage1_subdone) & (1'b1 == ap_CS_fsm_pp0_stage1))) begin - ap_enable_reg_pp0_iter1 <= ap_enable_reg_pp0_iter0; - end - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - if ((ap_loop_init == 1'b1)) begin - k_rd_req_fu_76 <= 32'd0; - end else if ((1'b1 == ap_condition_400)) begin - k_rd_req_fu_76 <= select_ln47_reg_426; - end - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - if ((ap_loop_init == 1'b1)) begin - k_rd_resp_fu_72 <= 32'd0; - end else if ((1'b1 == ap_condition_406)) begin - k_rd_resp_fu_72 <= k_rd_resp_2_fu_294_p2; - end - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - if ((ap_loop_init == 1'b1)) begin - k_wr_req_fu_68 <= 32'd33; - end else if ((1'b1 == ap_condition_413)) begin - k_wr_req_fu_68 <= k_wr_req_2_fu_329_p2; - end - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - if ((ap_loop_init == 1'b1)) begin - k_wr_resp_fu_80 <= 32'd33; - end else if ((1'b1 == ap_condition_417)) begin - k_wr_resp_fu_80 <= k_wr_resp_2_fu_352_p2; - end - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage1_11001) & (1'b1 == ap_CS_fsm_pp0_stage1))) begin - icmp_ln45_reg_414 <= icmp_ln45_fu_216_p2; - k_rd_resp_1_reg_404 <= k_rd_resp_fu_72; - k_wr_req_1_reg_398 <= k_wr_req_fu_68; - k_wr_resp_1_reg_409 <= k_wr_resp_fu_80; - or_ln45_reg_418 <= or_ln45_fu_226_p2; - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage1_11001) & (or_ln45_fu_226_p2 == 1'd1) & (1'b1 == ap_CS_fsm_pp0_stage1))) begin - icmp_ln47_reg_422 <= icmp_ln47_fu_232_p2; - icmp_ln56_reg_439 <= icmp_ln56_fu_264_p2; - tmp_1_reg_455 <= tmp_1_nbreadreq_fu_137_p3; - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage1_11001) & (or_ln45_fu_226_p2 == 1'd1) & (1'b1 == ap_CS_fsm_pp0_stage1) & (icmp_ln47_fu_232_p2 == 1'd1))) begin - select_ln47_reg_426 <= select_ln47_fu_256_p3; - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage1_11001) & (or_ln45_fu_226_p2 == 1'd1) & (1'b1 == ap_CS_fsm_pp0_stage1) & (icmp_ln45_fu_216_p2 == 1'd1))) begin - tmp_3_reg_431 <= tmp_3_nbreadreq_fu_97_p3; - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage1_11001) & (or_ln45_fu_226_p2 == 1'd1) & (1'b1 == ap_CS_fsm_pp0_stage1) & (tmp_3_nbreadreq_fu_97_p3 == 1'd1) & (icmp_ln45_fu_216_p2 == 1'd1))) begin - tmp_4_reg_435 <= stream_out_full_n; - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage1_11001) & (or_ln45_fu_226_p2 == 1'd1) & (1'b1 == ap_CS_fsm_pp0_stage1) & (tmp_s_nbwritereq_fu_113_p3 == 1'd1) & (icmp_ln56_fu_264_p2 == 1'd1))) begin - tmp_5_reg_447 <= a_write_data_full_n; - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage1_11001) & (or_ln45_fu_226_p2 == 1'd1) & (1'b1 == ap_CS_fsm_pp0_stage1) & (tmp_5_nbwritereq_fu_121_p3 == 1'd1) & (tmp_s_nbwritereq_fu_113_p3 == 1'd1) & (icmp_ln56_fu_264_p2 == 1'd1))) begin - tmp_6_reg_451 <= tmp_6_nbreadreq_fu_129_p3; - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage1_11001) & (or_ln45_fu_226_p2 == 1'd1) & (1'b1 == ap_CS_fsm_pp0_stage1) & (icmp_ln56_fu_264_p2 == 1'd1))) begin - tmp_s_reg_443 <= a_write_addr_full_n; - end -end - -always @ (posedge ap_clk) begin - if (((1'b0 == ap_block_pp0_stage1_11001) & (tmp_1_nbreadreq_fu_137_p3 == 1'd1) & (or_ln45_fu_226_p2 == 1'd1) & (1'b1 == ap_CS_fsm_pp0_stage1))) begin - trunc_ln85_1_reg_459 <= trunc_ln85_1_fu_269_p1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (tmp_6_reg_451 == 1'd1) & (tmp_5_reg_447 == 1'd1) & (tmp_s_reg_443 == 1'd1) & (icmp_ln56_reg_439 == 1'd1) & (or_ln45_reg_418 == 1'd1))) begin - a_write_addr_blk_n = a_write_addr_full_n; - end else begin - a_write_addr_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (ap_predicate_op68_write_state3 == 1'b1))) begin - a_write_addr_write = 1'b1; - end else begin - a_write_addr_write = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (tmp_6_reg_451 == 1'd1) & (tmp_5_reg_447 == 1'd1) & (tmp_s_reg_443 == 1'd1) & (icmp_ln56_reg_439 == 1'd1) & (or_ln45_reg_418 == 1'd1))) begin - a_write_data_blk_n = a_write_data_full_n; - end else begin - a_write_data_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (ap_predicate_op72_write_state3 == 1'b1))) begin - a_write_data_write = 1'b1; - end else begin - a_write_data_write = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage1) & (ap_predicate_op53_read_state2 == 1'b1) & (ap_enable_reg_pp0_iter0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage1))) begin - a_write_resp_s_blk_n = a_write_resp_s_empty_n; - end else begin - a_write_resp_s_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage1_11001) & (ap_predicate_op53_read_state2 == 1'b1) & (ap_enable_reg_pp0_iter0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage1))) begin - a_write_resp_s_read = 1'b1; - end else begin - a_write_resp_s_read = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage1_subdone) & (or_ln45_fu_226_p2 == 1'd0) & (ap_enable_reg_pp0_iter0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage1))) begin - ap_condition_exit_pp0_iter0_stage1 = 1'b1; - end else begin - ap_condition_exit_pp0_iter0_stage1 = 1'b0; - end -end - -always @ (*) begin - if (((ap_loop_exit_ready == 1'b1) & (1'b0 == ap_block_pp0_stage1_subdone) & (1'b1 == ap_CS_fsm_pp0_stage1))) begin - ap_done_int = 1'b1; - end else begin - ap_done_int = ap_done_reg; - end -end - -always @ (*) begin - if ((1'b1 == ap_CS_fsm_pp0_stage0)) begin - ap_enable_reg_pp0_iter0 = ap_start_int; - end else begin - ap_enable_reg_pp0_iter0 = ap_enable_reg_pp0_iter0_reg; - end -end - -always @ (*) begin - if (((ap_start_int == 1'b0) & (ap_idle_pp0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0))) begin - ap_idle = 1'b1; - end else begin - ap_idle = 1'b0; - end -end - -always @ (*) begin - if (((ap_enable_reg_pp0_iter1 == 1'b0) & (ap_enable_reg_pp0_iter0 == 1'b0))) begin - ap_idle_pp0 = 1'b1; - end else begin - ap_idle_pp0 = 1'b0; - end -end - -always @ (*) begin - if ((ap_enable_reg_pp0_iter1 == 1'b0)) begin - ap_idle_pp0_1to1 = 1'b1; - end else begin - ap_idle_pp0_1to1 = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage1_subdone) & (ap_enable_reg_pp0_iter0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage1))) begin - ap_ready_int = 1'b1; - end else begin - ap_ready_int = 1'b0; - end -end - -always @ (*) begin - if (((b_read_addr_full_n == 1'b1) & (1'b0 == ap_block_pp0_stage1_11001) & (or_ln45_fu_226_p2 == 1'd1) & (ap_enable_reg_pp0_iter0 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage1) & (icmp_ln47_fu_232_p2 == 1'd1))) begin - b_read_addr_write = 1'b1; - end else begin - b_read_addr_write = 1'b0; - end -end - -always @ (*) begin - if (((b_read_data_s_empty_n == 1'b1) & (1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (tmp_4_reg_435 == 1'd1) & (tmp_3_reg_431 == 1'd1) & (icmp_ln45_reg_414 == 1'd1) & (or_ln45_reg_418 == 1'd1))) begin - b_read_data_s_read = 1'b1; - end else begin - b_read_data_s_read = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (tmp_6_reg_451 == 1'd1) & (tmp_5_reg_447 == 1'd1) & (tmp_s_reg_443 == 1'd1) & (icmp_ln56_reg_439 == 1'd1) & (or_ln45_reg_418 == 1'd1))) begin - stream_in_s_blk_n = stream_in_s_empty_n; - end else begin - stream_in_s_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (ap_predicate_op69_read_state3 == 1'b1))) begin - stream_in_s_read = 1'b1; - end else begin - stream_in_s_read = 1'b0; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (tmp_4_reg_435 == 1'd1) & (tmp_3_reg_431 == 1'd1) & (icmp_ln45_reg_414 == 1'd1) & (or_ln45_reg_418 == 1'd1))) begin - stream_out_blk_n = stream_out_full_n; - end else begin - stream_out_blk_n = 1'b1; - end -end - -always @ (*) begin - if (((1'b0 == ap_block_pp0_stage0_11001) & (ap_enable_reg_pp0_iter1 == 1'b1) & (1'b1 == ap_CS_fsm_pp0_stage0) & (ap_predicate_op62_write_state3 == 1'b1))) begin - stream_out_write = 1'b1; - end else begin - stream_out_write = 1'b0; - end -end - -always @ (*) begin - case (ap_CS_fsm) - ap_ST_fsm_pp0_stage0 : begin - if ((~((ap_start_int == 1'b0) & (ap_idle_pp0_1to1 == 1'b1)) & (1'b0 == ap_block_pp0_stage0_subdone))) begin - ap_NS_fsm = ap_ST_fsm_pp0_stage1; - end else begin - ap_NS_fsm = ap_ST_fsm_pp0_stage0; - end - end - ap_ST_fsm_pp0_stage1 : begin - if ((1'b0 == ap_block_pp0_stage1_subdone)) begin - ap_NS_fsm = ap_ST_fsm_pp0_stage0; - end else begin - ap_NS_fsm = ap_ST_fsm_pp0_stage1; - end - end - default : begin - ap_NS_fsm = 'bx; - end - endcase -end - -assign a_write_addr_din = {{1'd0}, {sext_ln57_fu_304_p1}}; - -assign a_write_data_din = {{1'd0}, {trunc_ln85_fu_316_p1}}; - -assign add_ln48_fu_250_p0 = k_rd_req_fu_76; - -assign add_ln48_fu_250_p2 = ($signed(add_ln48_fu_250_p0) + $signed(32'd1)); - -assign add_ln62_fu_342_p2 = (zext_ln62_fu_339_p1 + 9'd1); - -assign ap_CS_fsm_pp0_stage0 = ap_CS_fsm[32'd0]; - -assign ap_CS_fsm_pp0_stage1 = ap_CS_fsm[32'd1]; - -assign ap_block_pp0_stage0 = ~(1'b1 == 1'b1); - -always @ (*) begin - ap_block_pp0_stage0_01001 = ((ap_enable_reg_pp0_iter1 == 1'b1) & (((1'b0 == a_write_data_full_n) & (ap_predicate_op72_write_state3 == 1'b1)) | ((stream_in_s_empty_n == 1'b0) & (ap_predicate_op69_read_state3 == 1'b1)) | ((1'b0 == a_write_addr_full_n) & (ap_predicate_op68_write_state3 == 1'b1)) | ((stream_out_full_n == 1'b0) & (ap_predicate_op62_write_state3 == 1'b1)))); -end - -always @ (*) begin - ap_block_pp0_stage0_11001 = ((ap_enable_reg_pp0_iter1 == 1'b1) & (((1'b0 == a_write_data_full_n) & (ap_predicate_op72_write_state3 == 1'b1)) | ((stream_in_s_empty_n == 1'b0) & (ap_predicate_op69_read_state3 == 1'b1)) | ((1'b0 == a_write_addr_full_n) & (ap_predicate_op68_write_state3 == 1'b1)) | ((stream_out_full_n == 1'b0) & (ap_predicate_op62_write_state3 == 1'b1)))); -end - -always @ (*) begin - ap_block_pp0_stage0_subdone = ((ap_enable_reg_pp0_iter1 == 1'b1) & (((1'b0 == a_write_data_full_n) & (ap_predicate_op72_write_state3 == 1'b1)) | ((stream_in_s_empty_n == 1'b0) & (ap_predicate_op69_read_state3 == 1'b1)) | ((1'b0 == a_write_addr_full_n) & (ap_predicate_op68_write_state3 == 1'b1)) | ((stream_out_full_n == 1'b0) & (ap_predicate_op62_write_state3 == 1'b1)))); -end - -assign ap_block_pp0_stage1 = ~(1'b1 == 1'b1); - -always @ (*) begin - ap_block_pp0_stage1_01001 = ((ap_predicate_op53_read_state2 == 1'b1) & (1'b0 == a_write_resp_s_empty_n) & (ap_enable_reg_pp0_iter0 == 1'b1)); -end - -always @ (*) begin - ap_block_pp0_stage1_11001 = ((ap_predicate_op53_read_state2 == 1'b1) & (1'b0 == a_write_resp_s_empty_n) & (ap_enable_reg_pp0_iter0 == 1'b1)); -end - -always @ (*) begin - ap_block_pp0_stage1_subdone = ((ap_predicate_op53_read_state2 == 1'b1) & (1'b0 == a_write_resp_s_empty_n) & (ap_enable_reg_pp0_iter0 == 1'b1)); -end - -assign ap_block_state1_pp0_stage0_iter0 = ~(1'b1 == 1'b1); - -always @ (*) begin - ap_block_state2_pp0_stage1_iter0 = ((ap_predicate_op53_read_state2 == 1'b1) & (1'b0 == a_write_resp_s_empty_n)); -end - -always @ (*) begin - ap_block_state3_pp0_stage0_iter1 = (((1'b0 == a_write_data_full_n) & (ap_predicate_op72_write_state3 == 1'b1)) | ((stream_in_s_empty_n == 1'b0) & (ap_predicate_op69_read_state3 == 1'b1)) | ((1'b0 == a_write_addr_full_n) & (ap_predicate_op68_write_state3 == 1'b1)) | ((stream_out_full_n == 1'b0) & (ap_predicate_op62_write_state3 == 1'b1))); -end - -always @ (*) begin - ap_condition_400 = ((ap_enable_reg_pp0_iter1 == 1'b1) & (icmp_ln47_reg_422 == 1'd1) & (or_ln45_reg_418 == 1'd1)); -end - -always @ (*) begin - ap_condition_406 = ((ap_enable_reg_pp0_iter1 == 1'b1) & (tmp_4_reg_435 == 1'd1) & (tmp_3_reg_431 == 1'd1) & (icmp_ln45_reg_414 == 1'd1) & (or_ln45_reg_418 == 1'd1)); -end - -always @ (*) begin - ap_condition_413 = ((ap_enable_reg_pp0_iter1 == 1'b1) & (tmp_6_reg_451 == 1'd1) & (tmp_5_reg_447 == 1'd1) & (tmp_s_reg_443 == 1'd1) & (icmp_ln56_reg_439 == 1'd1) & (or_ln45_reg_418 == 1'd1)); -end - -always @ (*) begin - ap_condition_417 = ((ap_enable_reg_pp0_iter1 == 1'b1) & (tmp_1_reg_455 == 1'd1) & (or_ln45_reg_418 == 1'd1)); -end - -assign ap_enable_pp0 = (ap_idle_pp0 ^ 1'b1); - -assign ap_loop_exit_ready = ap_condition_exit_pp0_iter0_stage1; - -always @ (*) begin - ap_predicate_op53_read_state2 = ((tmp_1_nbreadreq_fu_137_p3 == 1'd1) & (or_ln45_fu_226_p2 == 1'd1)); -end - -always @ (*) begin - ap_predicate_op62_write_state3 = ((tmp_4_reg_435 == 1'd1) & (tmp_3_reg_431 == 1'd1) & (icmp_ln45_reg_414 == 1'd1) & (or_ln45_reg_418 == 1'd1)); -end - -always @ (*) begin - ap_predicate_op68_write_state3 = ((tmp_6_reg_451 == 1'd1) & (tmp_5_reg_447 == 1'd1) & (tmp_s_reg_443 == 1'd1) & (icmp_ln56_reg_439 == 1'd1) & (or_ln45_reg_418 == 1'd1)); -end - -always @ (*) begin - ap_predicate_op69_read_state3 = ((tmp_6_reg_451 == 1'd1) & (tmp_5_reg_447 == 1'd1) & (tmp_s_reg_443 == 1'd1) & (icmp_ln56_reg_439 == 1'd1) & (or_ln45_reg_418 == 1'd1)); -end - -always @ (*) begin - ap_predicate_op72_write_state3 = ((tmp_6_reg_451 == 1'd1) & (tmp_5_reg_447 == 1'd1) & (tmp_s_reg_443 == 1'd1) & (icmp_ln56_reg_439 == 1'd1) & (or_ln45_reg_418 == 1'd1)); -end - -assign b_read_addr_din = {{1'd0}, {sext_ln47_fu_237_p1}}; - -assign icmp_ln45_1_fu_221_p2 = ((k_wr_resp_fu_80 < loop_bound) ? 1'b1 : 1'b0); - -assign icmp_ln45_fu_216_p2 = ((k_rd_resp_fu_72 < loop_bound) ? 1'b1 : 1'b0); - -assign icmp_ln47_fu_232_p0 = k_rd_req_fu_76; - -assign icmp_ln47_fu_232_p2 = ((icmp_ln47_fu_232_p0 < loop_bound) ? 1'b1 : 1'b0); - -assign icmp_ln56_fu_264_p0 = k_wr_req_fu_68; - -assign icmp_ln56_fu_264_p2 = ((icmp_ln56_fu_264_p0 < loop_bound) ? 1'b1 : 1'b0); - -assign k_rd_resp_2_fu_294_p2 = (k_rd_resp_1_reg_404 + 32'd1); - -assign k_wr_req_2_fu_329_p2 = ($signed(k_wr_req_1_reg_398) + $signed(32'd1)); - -assign k_wr_resp_2_fu_352_p2 = (zext_ln62_1_fu_348_p1 + k_wr_resp_1_reg_409); - -assign or_ln45_fu_226_p2 = (icmp_ln45_fu_216_p2 | icmp_ln45_1_fu_221_p2); - -assign select_ln47_fu_256_p0 = b_read_addr_full_n; - -assign select_ln47_fu_256_p2 = k_rd_req_fu_76; - -assign select_ln47_fu_256_p3 = ((select_ln47_fu_256_p0[0:0] == 1'b1) ? add_ln48_fu_250_p2 : select_ln47_fu_256_p2); - -assign sext_ln47_fu_237_p0 = k_rd_req_fu_76; - -assign sext_ln47_fu_237_p1 = sext_ln47_fu_237_p0; - -assign sext_ln57_fu_304_p1 = k_wr_req_1_reg_398; - -assign stream_out_din = {{1'd0}, {trunc_ln104_fu_281_p1}}; - -assign tmp_1_nbreadreq_fu_137_p3 = a_write_resp_s_empty_n; - -assign tmp_3_nbreadreq_fu_97_p3 = b_read_data_s_empty_n; - -assign tmp_5_nbwritereq_fu_121_p3 = a_write_data_full_n; - -assign tmp_6_nbreadreq_fu_129_p3 = stream_in_s_empty_n; - -assign tmp_s_nbwritereq_fu_113_p3 = a_write_addr_full_n; - -assign trunc_ln104_fu_281_p1 = b_read_data_s_dout[511:0]; - -assign trunc_ln85_1_fu_269_p1 = a_write_resp_s_dout[7:0]; - -assign trunc_ln85_fu_316_p1 = stream_in_s_dout[511:0]; - -assign zext_ln62_1_fu_348_p1 = add_ln62_fu_342_p2; - -assign zext_ln62_fu_339_p1 = trunc_ln85_1_reg_459; - -endmodule //inter_kernel_load_Pipeline_VITIS_LOOP_45_1 diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/priority_encoder.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/priority_encoder.v deleted file mode 100644 index cf82512b..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/priority_encoder.v +++ /dev/null @@ -1,92 +0,0 @@ -/* - -Copyright (c) 2014-2021 Alex Forencich - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -*/ - -// Language: Verilog 2001 - -`resetall -`timescale 1ns / 1ps -`default_nettype none - -/* - * Priority encoder module - */ -module priority_encoder # -( - parameter WIDTH = 4, - // LSB priority selection - parameter LSB_HIGH_PRIORITY = 0 -) -( - input wire [WIDTH-1:0] input_unencoded, - output wire output_valid, - output wire [$clog2(WIDTH)-1:0] output_encoded, - output wire [WIDTH-1:0] output_unencoded -); - -parameter LEVELS = WIDTH > 2 ? $clog2(WIDTH) : 1; -parameter W = 2**LEVELS; - -// pad input to even power of two -wire [W-1:0] input_padded = {{W-WIDTH{1'b0}}, input_unencoded}; - -wire [W/2-1:0] stage_valid[LEVELS-1:0]; -wire [W/2-1:0] stage_enc[LEVELS-1:0]; - -generate - genvar l, n; - - // process input bits; generate valid bit and encoded bit for each pair - for (n = 0; n < W/2; n = n + 1) begin : loop_in - assign stage_valid[0][n] = |input_padded[n*2+1:n*2]; - if (LSB_HIGH_PRIORITY) begin - // bit 0 is highest priority - assign stage_enc[0][n] = !input_padded[n*2+0]; - end else begin - // bit 0 is lowest priority - assign stage_enc[0][n] = input_padded[n*2+1]; - end - end - - // compress down to single valid bit and encoded bus - for (l = 1; l < LEVELS; l = l + 1) begin : loop_levels - for (n = 0; n < W/(2*2**l); n = n + 1) begin : loop_compress - assign stage_valid[l][n] = |stage_valid[l-1][n*2+1:n*2]; - if (LSB_HIGH_PRIORITY) begin - // bit 0 is highest priority - assign stage_enc[l][(n+1)*(l+1)-1:n*(l+1)] = stage_valid[l-1][n*2+0] ? {1'b0, stage_enc[l-1][(n*2+1)*l-1:(n*2+0)*l]} : {1'b1, stage_enc[l-1][(n*2+2)*l-1:(n*2+1)*l]}; - end else begin - // bit 0 is lowest priority - assign stage_enc[l][(n+1)*(l+1)-1:n*(l+1)] = stage_valid[l-1][n*2+1] ? {1'b1, stage_enc[l-1][(n*2+2)*l-1:(n*2+1)*l]} : {1'b0, stage_enc[l-1][(n*2+1)*l-1:(n*2+0)*l]}; - end - end - end -endgenerate - -assign output_valid = stage_valid[LEVELS-1]; -assign output_encoded = stage_enc[LEVELS-1]; -assign output_unencoded = 1 << output_encoded; - -endmodule - -`resetall diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/relay_station.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/relay_station.v deleted file mode 100644 index b2e39be4..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/relay_station.v +++ /dev/null @@ -1,522 +0,0 @@ -`default_nettype none - -// first-word fall-through (FWFT) FIFO that is friendly for floorplanning -module relay_station #( - parameter DATA_WIDTH = 32, - parameter ADDR_WIDTH = 5, - parameter DEPTH = 2, - parameter LEVEL = 2, - parameter CONNECT = 1 // add api to disconnect the relay station -) ( - input wire clk, - input wire reset, - - // write - output wire if_full_n, - input wire if_write_ce, - input wire if_write, - input wire [DATA_WIDTH-1:0] if_din, - - // read - output wire if_empty_n, - input wire if_read_ce, - input wire if_read, - output wire [DATA_WIDTH-1:0] if_dout -); - - wire full_n [LEVEL:0]; - wire empty_n [LEVEL:0]; - wire [DATA_WIDTH-1:0] data [LEVEL:0]; - - // both full_n and write are registered, thus one level of relay_station cause - // two additional latency for the almost full fifo - parameter GRACE_PERIOD = LEVEL * 2; - parameter REAL_DEPTH = GRACE_PERIOD + DEPTH + 4; - parameter REAL_ADDR_WIDTH = $clog2(REAL_DEPTH); - - genvar i; - generate - if (CONNECT > 0) begin - if (LEVEL > 0) begin - - for (i = 0; i < LEVEL; i = i + 1) begin : inst - if (i < LEVEL - 1) begin - fifo_reg #( - .DATA_WIDTH(DATA_WIDTH) - ) unit ( - .clk(clk), - .reset(reset), - - // connect to fifo[i+1] - .if_empty_n(empty_n[i+1]), - .if_read_ce(if_read_ce), - .if_read (full_n[i+1]), - .if_dout (data[i+1]), - - // connect to fifo[i-1] - .if_full_n (full_n[i]), - .if_write_ce(if_write_ce), - .if_write (empty_n[i]), - .if_din (data[i]) - ); - - end else begin - (* keep = "true" *) fifo_almost_full #( - .DATA_WIDTH(DATA_WIDTH), - .ADDR_WIDTH(REAL_ADDR_WIDTH), - .DEPTH(REAL_DEPTH), - .GRACE_PERIOD(GRACE_PERIOD) - ) unit ( - .clk(clk), - .reset(reset), - - // connect to fifo[i+1] - .if_empty_n(empty_n[i+1]), - .if_read_ce(if_read_ce), - .if_read (full_n[i+1]), - .if_dout (data[i+1]), - - // connect to fifo[i-1] - .if_full_n (full_n[i]), - .if_write_ce(if_write_ce), - .if_write (empty_n[i]), - .if_din (data[i]) - ); - end - end - - // write - assign if_full_n = full_n[0]; // output - assign empty_n[0] = if_write & full_n[0]; // input - assign data[0] = if_din; // input - - // read - assign if_empty_n = empty_n[LEVEL]; // output - assign full_n[LEVEL] = if_read; // input - assign if_dout = data[LEVEL]; // output - - end - - // LEVEL == 0 - else begin - assign if_full_n = if_read; // output - assign if_empty_n = if_write; // output - assign if_dout = if_din; // output - end - end - - // disconnect the relay station - else begin - assign if_full_n = 0; // output - assign if_empty_n = 0; // output - // leave the dout port dangling to facilitate pruning - // assign if_dout = 0; // output - end - endgenerate - -endmodule // relay_station - -///////////////////////////////////////////////////////////// - -module fifo_reg #( - parameter DATA_WIDTH = 32 -) ( - input wire clk, - input wire reset, - - // write - (* keep = "true" *) - output reg if_full_n, - input wire if_write_ce, - input wire if_write, - input wire [DATA_WIDTH-1:0] if_din, - - // read - (* keep = "true" *) - output reg if_empty_n, - input wire if_read_ce, - input wire if_read, - (* keep = "true" *) - output reg [DATA_WIDTH-1:0] if_dout -); - - always @ (posedge clk) begin - if_dout <= if_din; - if_empty_n <= if_write; - if_full_n <= if_read; - end - -endmodule - -///////////////////////////////////////////////////////////////// - -// first-word fall-through (FWFT) FIFO -module fifo_almost_full #( - parameter DATA_WIDTH = 32, - parameter ADDR_WIDTH = 5, - parameter DEPTH = 32, - parameter GRACE_PERIOD = 2 -) ( - input wire clk, - input wire reset, - - // write - output wire if_full_n, - input wire if_write_ce, - input wire if_write, - input wire [DATA_WIDTH-1:0] if_din, - - // read - output wire if_empty_n, - input wire if_read_ce, - input wire if_read, - output wire [DATA_WIDTH-1:0] if_dout -); - -generate - if (DATA_WIDTH >= 36 && DEPTH >= 4096) begin : uram - fifo_bram_almost_full #( - .MEM_STYLE ("ultra"), - .DATA_WIDTH (DATA_WIDTH), - .ADDR_WIDTH (ADDR_WIDTH), - .DEPTH (DEPTH), - .GRACE_PERIOD(GRACE_PERIOD) - ) unit ( - .clk (clk), - .reset(reset), - - .if_full_n (if_full_n), - .if_write_ce(if_write_ce), - .if_write (if_write), - .if_din (if_din), - - .if_empty_n(if_empty_n), - .if_read_ce(if_read_ce), - .if_read (if_read), - .if_dout (if_dout) - ); - end else if (DEPTH >= 128) begin : bram - fifo_bram_almost_full #( - .MEM_STYLE ("block"), - .DATA_WIDTH(DATA_WIDTH), - .ADDR_WIDTH(ADDR_WIDTH), - .DEPTH (DEPTH), - .GRACE_PERIOD(GRACE_PERIOD) /*********/ - ) unit ( - .clk (clk), - .reset(reset), - - .if_full_n (if_full_n), - .if_write_ce(if_write_ce), - .if_write (if_write), - .if_din (if_din), - - .if_empty_n(if_empty_n), - .if_read_ce(if_read_ce), - .if_read (if_read), - .if_dout (if_dout) - ); - end else begin : srl - fifo_srl_almost_full #( - .DATA_WIDTH(DATA_WIDTH), - .ADDR_WIDTH(ADDR_WIDTH), - .DEPTH (DEPTH), - .GRACE_PERIOD(GRACE_PERIOD) /*********/ - ) unit ( - .clk (clk), - .reset(reset), - - .if_full_n (if_full_n), - .if_write_ce(if_write_ce), - .if_write (if_write), - .if_din (if_din), - - .if_empty_n(if_empty_n), - .if_read_ce(if_read_ce), - .if_read (if_read), - .if_dout (if_dout) - ); - end -endgenerate - -endmodule // fifo - -///////////////////////////////////////////////////////////////// - -module fifo_srl_almost_full #( - parameter MEM_STYLE = "shiftreg", - parameter DATA_WIDTH = 32, - parameter ADDR_WIDTH = 4, - parameter DEPTH = 16, - parameter GRACE_PERIOD = 2 -) ( - input wire clk, - input wire reset, - - // write - output wire if_full_n, - input wire if_write_ce, - input wire if_write, - input wire [DATA_WIDTH-1:0] if_din, - - // read - output wire if_empty_n, - input wire if_read_ce, - input wire if_read, - output wire [DATA_WIDTH-1:0] if_dout -); - -parameter REAL_DEPTH = DEPTH < 4 ? 4 : DEPTH; -parameter REAL_ADDR_WIDTH = $clog2(REAL_DEPTH)+1; - -wire[REAL_ADDR_WIDTH - 1:0] shiftReg_addr ; -wire[DATA_WIDTH - 1:0] shiftReg_data, shiftReg_q; -wire shiftReg_ce; -reg[REAL_ADDR_WIDTH:0] mOutPtr = ~{(REAL_ADDR_WIDTH+1){1'b0}}; -reg internal_empty_n = 0, internal_full_n = 1; - -assign if_empty_n = internal_empty_n; - -/*******************************************/ -// assign if_full_n = internal_full_n; -reg almost_full_q; -wire almost_full = mOutPtr >= REAL_DEPTH - 1 - GRACE_PERIOD - 1 && mOutPtr != ~{REAL_ADDR_WIDTH+1{1'b0}}; -always @ (posedge clk) almost_full_q <= almost_full; -assign if_full_n = ~almost_full_q; -/*******************************************/ - -assign shiftReg_data = if_din; -assign if_dout = shiftReg_q; - -always @ (posedge clk) begin - if (reset == 1'b1) - begin - mOutPtr <= ~{REAL_ADDR_WIDTH+1{1'b0}}; - internal_empty_n <= 1'b0; - internal_full_n <= 1'b1; - end - else begin - if (((if_read & if_read_ce) == 1 & internal_empty_n == 1) && - ((if_write & if_write_ce) == 0 | internal_full_n == 0)) - begin - mOutPtr <= mOutPtr - 5'd1; - if (mOutPtr == 0) - internal_empty_n <= 1'b0; - internal_full_n <= 1'b1; - end - else if (((if_read & if_read_ce) == 0 | internal_empty_n == 0) && - ((if_write & if_write_ce) == 1 & internal_full_n == 1)) - begin - mOutPtr <= mOutPtr + 5'd1; - internal_empty_n <= 1'b1; - if (mOutPtr == REAL_DEPTH - 5'd2) - internal_full_n <= 1'b0; - end - end -end - -assign shiftReg_addr = mOutPtr[REAL_ADDR_WIDTH] == 1'b0 ? mOutPtr[REAL_ADDR_WIDTH-1:0]:{REAL_ADDR_WIDTH{1'b0}}; -assign shiftReg_ce = (if_write & if_write_ce) & internal_full_n; - -fifo_srl_almost_full_internal -#( - .DATA_WIDTH(DATA_WIDTH), - .ADDR_WIDTH(REAL_ADDR_WIDTH), - .DEPTH(REAL_DEPTH)) -U_fifo_w32_d16_A_ram ( - .clk(clk), - .data(shiftReg_data), - .ce(shiftReg_ce), - .a(shiftReg_addr), - .q(shiftReg_q)); - -endmodule - -module fifo_srl_almost_full_internal ( - input wire clk, - input wire [DATA_WIDTH-1:0] data, - input wire ce, - input wire [ADDR_WIDTH-1:0] a, - output wire [DATA_WIDTH-1:0] q -); - -parameter DATA_WIDTH = 32'd32; -parameter ADDR_WIDTH = 32'd4; -parameter DEPTH = 5'd16; - -(* shreg_extract = "yes" *) reg[DATA_WIDTH-1:0] SRL_SIG [0:DEPTH-1]; -integer i; - -always @ (posedge clk) - begin - if (ce) - begin - for (i=0;i= DEPTH - 1 - GRACE_PERIOD); -//assign if_full_n = full_n; -assign if_full_n = ~almost_full; -/**************************************/ - -assign if_empty_n = dout_valid; -assign if_dout = dout_buf; -assign push = full_n & if_write_ce & if_write; -assign pop = empty_n & if_read_ce & (~dout_valid | if_read); -assign wnext = !push ? waddr : - (waddr == DepthM1) ? {ADDR_WIDTH{1'b0}} : waddr + 1'd1; -assign rnext = !pop ? raddr : - (raddr == DepthM1) ? {ADDR_WIDTH{1'b0}} : raddr + 1'd1; - - - -// waddr -always @(posedge clk) begin - if (reset) - waddr <= {ADDR_WIDTH{1'b0}}; - else - waddr <= wnext; -end - -// raddr -always @(posedge clk) begin - if (reset) - raddr <= {ADDR_WIDTH{1'b0}}; - else - raddr <= rnext; -end - -// used -always @(posedge clk) begin - if (reset) - used <= {ADDR_WIDTH{1'b0}}; - else if (push && !pop) - used <= used + 1'b1; - else if (!push && pop) - used <= used - 1'b1; -end - -// full_n -always @(posedge clk) begin - if (reset) - full_n <= 1'b1; - else if (push && !pop) - full_n <= (used != DepthM1); - else if (!push && pop) - full_n <= 1'b1; -end - -// empty_n -always @(posedge clk) begin - if (reset) - empty_n <= 1'b0; - else if (push && !pop) - empty_n <= 1'b1; - else if (!push && pop) - empty_n <= (used != {{(ADDR_WIDTH-1){1'b0}},1'b1}); -end - -// mem -always @(posedge clk) begin - if (push) - mem[waddr] <= if_din; -end - -// q_buf -always @(posedge clk) begin - q_buf <= mem[rnext]; -end - -// q_tmp -always @(posedge clk) begin - if (reset) - q_tmp <= {DATA_WIDTH{1'b0}}; - else if (push) - q_tmp <= if_din; -end - -// show_ahead -always @(posedge clk) begin - if (reset) - show_ahead <= 1'b0; - else if (push && used == {{(ADDR_WIDTH-1){1'b0}},pop}) - show_ahead <= 1'b1; - else - show_ahead <= 1'b0; -end - -// dout_buf -always @(posedge clk) begin - if (reset) - dout_buf <= {DATA_WIDTH{1'b0}}; - else if (pop) - dout_buf <= show_ahead? q_tmp : q_buf; -end - -// dout_valid -always @(posedge clk) begin - if (reset) - dout_valid <= 1'b0; - else if (pop) - dout_valid <= 1'b1; - else if (if_read_ce & if_read) - dout_valid <= 1'b0; -end - -endmodule // fifo_bram - -`default_nettype wire diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/unikernel.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/unikernel.v deleted file mode 100644 index a382c8ad..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/unikernel.v +++ /dev/null @@ -1,5943 +0,0 @@ -`timescale 1 ns / 1 ps - -(* CORE_GENERATION_INFO = "unikernel_unikernel,hls_ip_2022_2,{HLS_INPUT_TYPE=cxx,HLS_INPUT_FLOAT=0,HLS_INPUT_FIXED=0,HLS_INPUT_PART=xcu280-fsvh2892-2L-e,HLS_INPUT_CLOCK=3.330000,HLS_INPUT_ARCH=others,HLS_SYN_CLOCK=1.000000,HLS_SYN_LAT=0,HLS_SYN_TPT=none,HLS_SYN_MEM=0,HLS_SYN_DSP=0,HLS_SYN_FF=1754,HLS_SYN_LUT=3176,HLS_VERSION=2022_2}" *) - - -module unikernel -( - s_axi_control_AWVALID, - s_axi_control_AWREADY, - s_axi_control_AWADDR, - s_axi_control_WVALID, - s_axi_control_WREADY, - s_axi_control_WDATA, - s_axi_control_WSTRB, - s_axi_control_ARVALID, - s_axi_control_ARREADY, - s_axi_control_ARADDR, - s_axi_control_RVALID, - s_axi_control_RREADY, - s_axi_control_RDATA, - s_axi_control_RRESP, - s_axi_control_BVALID, - s_axi_control_BREADY, - s_axi_control_BRESP, - ap_clk, - ap_rst_n, - interrupt, - m_axi_in_0_ARADDR, - m_axi_in_0_ARBURST, - m_axi_in_0_ARCACHE, - m_axi_in_0_ARID, - m_axi_in_0_ARLEN, - m_axi_in_0_ARLOCK, - m_axi_in_0_ARPROT, - m_axi_in_0_ARQOS, - m_axi_in_0_ARREADY, - m_axi_in_0_ARSIZE, - m_axi_in_0_ARVALID, - m_axi_in_0_AWADDR, - m_axi_in_0_AWBURST, - m_axi_in_0_AWCACHE, - m_axi_in_0_AWID, - m_axi_in_0_AWLEN, - m_axi_in_0_AWLOCK, - m_axi_in_0_AWPROT, - m_axi_in_0_AWQOS, - m_axi_in_0_AWREADY, - m_axi_in_0_AWSIZE, - m_axi_in_0_AWVALID, - m_axi_in_0_BID, - m_axi_in_0_BREADY, - m_axi_in_0_BRESP, - m_axi_in_0_BVALID, - m_axi_in_0_RDATA, - m_axi_in_0_RID, - m_axi_in_0_RLAST, - m_axi_in_0_RREADY, - m_axi_in_0_RRESP, - m_axi_in_0_RVALID, - m_axi_in_0_WDATA, - m_axi_in_0_WLAST, - m_axi_in_0_WREADY, - m_axi_in_0_WSTRB, - m_axi_in_0_WVALID, - m_axi_out_0_ARADDR, - m_axi_out_0_ARBURST, - m_axi_out_0_ARCACHE, - m_axi_out_0_ARID, - m_axi_out_0_ARLEN, - m_axi_out_0_ARLOCK, - m_axi_out_0_ARPROT, - m_axi_out_0_ARQOS, - m_axi_out_0_ARREADY, - m_axi_out_0_ARSIZE, - m_axi_out_0_ARVALID, - m_axi_out_0_AWADDR, - m_axi_out_0_AWBURST, - m_axi_out_0_AWCACHE, - m_axi_out_0_AWID, - m_axi_out_0_AWLEN, - m_axi_out_0_AWLOCK, - m_axi_out_0_AWPROT, - m_axi_out_0_AWQOS, - m_axi_out_0_AWREADY, - m_axi_out_0_AWSIZE, - m_axi_out_0_AWVALID, - m_axi_out_0_BID, - m_axi_out_0_BREADY, - m_axi_out_0_BRESP, - m_axi_out_0_BVALID, - m_axi_out_0_RDATA, - m_axi_out_0_RID, - m_axi_out_0_RLAST, - m_axi_out_0_RREADY, - m_axi_out_0_RRESP, - m_axi_out_0_RVALID, - m_axi_out_0_WDATA, - m_axi_out_0_WLAST, - m_axi_out_0_WREADY, - m_axi_out_0_WSTRB, - m_axi_out_0_WVALID, - m_axi_in_1_ARADDR, - m_axi_in_1_ARBURST, - m_axi_in_1_ARCACHE, - m_axi_in_1_ARID, - m_axi_in_1_ARLEN, - m_axi_in_1_ARLOCK, - m_axi_in_1_ARPROT, - m_axi_in_1_ARQOS, - m_axi_in_1_ARREADY, - m_axi_in_1_ARSIZE, - m_axi_in_1_ARVALID, - m_axi_in_1_AWADDR, - m_axi_in_1_AWBURST, - m_axi_in_1_AWCACHE, - m_axi_in_1_AWID, - m_axi_in_1_AWLEN, - m_axi_in_1_AWLOCK, - m_axi_in_1_AWPROT, - m_axi_in_1_AWQOS, - m_axi_in_1_AWREADY, - m_axi_in_1_AWSIZE, - m_axi_in_1_AWVALID, - m_axi_in_1_BID, - m_axi_in_1_BREADY, - m_axi_in_1_BRESP, - m_axi_in_1_BVALID, - m_axi_in_1_RDATA, - m_axi_in_1_RID, - m_axi_in_1_RLAST, - m_axi_in_1_RREADY, - m_axi_in_1_RRESP, - m_axi_in_1_RVALID, - m_axi_in_1_WDATA, - m_axi_in_1_WLAST, - m_axi_in_1_WREADY, - m_axi_in_1_WSTRB, - m_axi_in_1_WVALID, - m_axi_out_1_ARADDR, - m_axi_out_1_ARBURST, - m_axi_out_1_ARCACHE, - m_axi_out_1_ARID, - m_axi_out_1_ARLEN, - m_axi_out_1_ARLOCK, - m_axi_out_1_ARPROT, - m_axi_out_1_ARQOS, - m_axi_out_1_ARREADY, - m_axi_out_1_ARSIZE, - m_axi_out_1_ARVALID, - m_axi_out_1_AWADDR, - m_axi_out_1_AWBURST, - m_axi_out_1_AWCACHE, - m_axi_out_1_AWID, - m_axi_out_1_AWLEN, - m_axi_out_1_AWLOCK, - m_axi_out_1_AWPROT, - m_axi_out_1_AWQOS, - m_axi_out_1_AWREADY, - m_axi_out_1_AWSIZE, - m_axi_out_1_AWVALID, - m_axi_out_1_BID, - m_axi_out_1_BREADY, - m_axi_out_1_BRESP, - m_axi_out_1_BVALID, - m_axi_out_1_RDATA, - m_axi_out_1_RID, - m_axi_out_1_RLAST, - m_axi_out_1_RREADY, - m_axi_out_1_RRESP, - m_axi_out_1_RVALID, - m_axi_out_1_WDATA, - m_axi_out_1_WLAST, - m_axi_out_1_WREADY, - m_axi_out_1_WSTRB, - m_axi_out_1_WVALID, - m_axi_in_2_ARADDR, - m_axi_in_2_ARBURST, - m_axi_in_2_ARCACHE, - m_axi_in_2_ARID, - m_axi_in_2_ARLEN, - m_axi_in_2_ARLOCK, - m_axi_in_2_ARPROT, - m_axi_in_2_ARQOS, - m_axi_in_2_ARREADY, - m_axi_in_2_ARSIZE, - m_axi_in_2_ARVALID, - m_axi_in_2_AWADDR, - m_axi_in_2_AWBURST, - m_axi_in_2_AWCACHE, - m_axi_in_2_AWID, - m_axi_in_2_AWLEN, - m_axi_in_2_AWLOCK, - m_axi_in_2_AWPROT, - m_axi_in_2_AWQOS, - m_axi_in_2_AWREADY, - m_axi_in_2_AWSIZE, - m_axi_in_2_AWVALID, - m_axi_in_2_BID, - m_axi_in_2_BREADY, - m_axi_in_2_BRESP, - m_axi_in_2_BVALID, - m_axi_in_2_RDATA, - m_axi_in_2_RID, - m_axi_in_2_RLAST, - m_axi_in_2_RREADY, - m_axi_in_2_RRESP, - m_axi_in_2_RVALID, - m_axi_in_2_WDATA, - m_axi_in_2_WLAST, - m_axi_in_2_WREADY, - m_axi_in_2_WSTRB, - m_axi_in_2_WVALID, - m_axi_out_2_ARADDR, - m_axi_out_2_ARBURST, - m_axi_out_2_ARCACHE, - m_axi_out_2_ARID, - m_axi_out_2_ARLEN, - m_axi_out_2_ARLOCK, - m_axi_out_2_ARPROT, - m_axi_out_2_ARQOS, - m_axi_out_2_ARREADY, - m_axi_out_2_ARSIZE, - m_axi_out_2_ARVALID, - m_axi_out_2_AWADDR, - m_axi_out_2_AWBURST, - m_axi_out_2_AWCACHE, - m_axi_out_2_AWID, - m_axi_out_2_AWLEN, - m_axi_out_2_AWLOCK, - m_axi_out_2_AWPROT, - m_axi_out_2_AWQOS, - m_axi_out_2_AWREADY, - m_axi_out_2_AWSIZE, - m_axi_out_2_AWVALID, - m_axi_out_2_BID, - m_axi_out_2_BREADY, - m_axi_out_2_BRESP, - m_axi_out_2_BVALID, - m_axi_out_2_RDATA, - m_axi_out_2_RID, - m_axi_out_2_RLAST, - m_axi_out_2_RREADY, - m_axi_out_2_RRESP, - m_axi_out_2_RVALID, - m_axi_out_2_WDATA, - m_axi_out_2_WLAST, - m_axi_out_2_WREADY, - m_axi_out_2_WSTRB, - m_axi_out_2_WVALID, - m_axi_in_3_ARADDR, - m_axi_in_3_ARBURST, - m_axi_in_3_ARCACHE, - m_axi_in_3_ARID, - m_axi_in_3_ARLEN, - m_axi_in_3_ARLOCK, - m_axi_in_3_ARPROT, - m_axi_in_3_ARQOS, - m_axi_in_3_ARREADY, - m_axi_in_3_ARSIZE, - m_axi_in_3_ARVALID, - m_axi_in_3_AWADDR, - m_axi_in_3_AWBURST, - m_axi_in_3_AWCACHE, - m_axi_in_3_AWID, - m_axi_in_3_AWLEN, - m_axi_in_3_AWLOCK, - m_axi_in_3_AWPROT, - m_axi_in_3_AWQOS, - m_axi_in_3_AWREADY, - m_axi_in_3_AWSIZE, - m_axi_in_3_AWVALID, - m_axi_in_3_BID, - m_axi_in_3_BREADY, - m_axi_in_3_BRESP, - m_axi_in_3_BVALID, - m_axi_in_3_RDATA, - m_axi_in_3_RID, - m_axi_in_3_RLAST, - m_axi_in_3_RREADY, - m_axi_in_3_RRESP, - m_axi_in_3_RVALID, - m_axi_in_3_WDATA, - m_axi_in_3_WLAST, - m_axi_in_3_WREADY, - m_axi_in_3_WSTRB, - m_axi_in_3_WVALID, - m_axi_out_3_ARADDR, - m_axi_out_3_ARBURST, - m_axi_out_3_ARCACHE, - m_axi_out_3_ARID, - m_axi_out_3_ARLEN, - m_axi_out_3_ARLOCK, - m_axi_out_3_ARPROT, - m_axi_out_3_ARQOS, - m_axi_out_3_ARREADY, - m_axi_out_3_ARSIZE, - m_axi_out_3_ARVALID, - m_axi_out_3_AWADDR, - m_axi_out_3_AWBURST, - m_axi_out_3_AWCACHE, - m_axi_out_3_AWID, - m_axi_out_3_AWLEN, - m_axi_out_3_AWLOCK, - m_axi_out_3_AWPROT, - m_axi_out_3_AWQOS, - m_axi_out_3_AWREADY, - m_axi_out_3_AWSIZE, - m_axi_out_3_AWVALID, - m_axi_out_3_BID, - m_axi_out_3_BREADY, - m_axi_out_3_BRESP, - m_axi_out_3_BVALID, - m_axi_out_3_RDATA, - m_axi_out_3_RID, - m_axi_out_3_RLAST, - m_axi_out_3_RREADY, - m_axi_out_3_RRESP, - m_axi_out_3_RVALID, - m_axi_out_3_WDATA, - m_axi_out_3_WLAST, - m_axi_out_3_WREADY, - m_axi_out_3_WSTRB, - m_axi_out_3_WVALID, - m_axi_in_4_ARADDR, - m_axi_in_4_ARBURST, - m_axi_in_4_ARCACHE, - m_axi_in_4_ARID, - m_axi_in_4_ARLEN, - m_axi_in_4_ARLOCK, - m_axi_in_4_ARPROT, - m_axi_in_4_ARQOS, - m_axi_in_4_ARREADY, - m_axi_in_4_ARSIZE, - m_axi_in_4_ARVALID, - m_axi_in_4_AWADDR, - m_axi_in_4_AWBURST, - m_axi_in_4_AWCACHE, - m_axi_in_4_AWID, - m_axi_in_4_AWLEN, - m_axi_in_4_AWLOCK, - m_axi_in_4_AWPROT, - m_axi_in_4_AWQOS, - m_axi_in_4_AWREADY, - m_axi_in_4_AWSIZE, - m_axi_in_4_AWVALID, - m_axi_in_4_BID, - m_axi_in_4_BREADY, - m_axi_in_4_BRESP, - m_axi_in_4_BVALID, - m_axi_in_4_RDATA, - m_axi_in_4_RID, - m_axi_in_4_RLAST, - m_axi_in_4_RREADY, - m_axi_in_4_RRESP, - m_axi_in_4_RVALID, - m_axi_in_4_WDATA, - m_axi_in_4_WLAST, - m_axi_in_4_WREADY, - m_axi_in_4_WSTRB, - m_axi_in_4_WVALID, - m_axi_out_4_ARADDR, - m_axi_out_4_ARBURST, - m_axi_out_4_ARCACHE, - m_axi_out_4_ARID, - m_axi_out_4_ARLEN, - m_axi_out_4_ARLOCK, - m_axi_out_4_ARPROT, - m_axi_out_4_ARQOS, - m_axi_out_4_ARREADY, - m_axi_out_4_ARSIZE, - m_axi_out_4_ARVALID, - m_axi_out_4_AWADDR, - m_axi_out_4_AWBURST, - m_axi_out_4_AWCACHE, - m_axi_out_4_AWID, - m_axi_out_4_AWLEN, - m_axi_out_4_AWLOCK, - m_axi_out_4_AWPROT, - m_axi_out_4_AWQOS, - m_axi_out_4_AWREADY, - m_axi_out_4_AWSIZE, - m_axi_out_4_AWVALID, - m_axi_out_4_BID, - m_axi_out_4_BREADY, - m_axi_out_4_BRESP, - m_axi_out_4_BVALID, - m_axi_out_4_RDATA, - m_axi_out_4_RID, - m_axi_out_4_RLAST, - m_axi_out_4_RREADY, - m_axi_out_4_RRESP, - m_axi_out_4_RVALID, - m_axi_out_4_WDATA, - m_axi_out_4_WLAST, - m_axi_out_4_WREADY, - m_axi_out_4_WSTRB, - m_axi_out_4_WVALID, - m_axi_in_5_ARADDR, - m_axi_in_5_ARBURST, - m_axi_in_5_ARCACHE, - m_axi_in_5_ARID, - m_axi_in_5_ARLEN, - m_axi_in_5_ARLOCK, - m_axi_in_5_ARPROT, - m_axi_in_5_ARQOS, - m_axi_in_5_ARREADY, - m_axi_in_5_ARSIZE, - m_axi_in_5_ARVALID, - m_axi_in_5_AWADDR, - m_axi_in_5_AWBURST, - m_axi_in_5_AWCACHE, - m_axi_in_5_AWID, - m_axi_in_5_AWLEN, - m_axi_in_5_AWLOCK, - m_axi_in_5_AWPROT, - m_axi_in_5_AWQOS, - m_axi_in_5_AWREADY, - m_axi_in_5_AWSIZE, - m_axi_in_5_AWVALID, - m_axi_in_5_BID, - m_axi_in_5_BREADY, - m_axi_in_5_BRESP, - m_axi_in_5_BVALID, - m_axi_in_5_RDATA, - m_axi_in_5_RID, - m_axi_in_5_RLAST, - m_axi_in_5_RREADY, - m_axi_in_5_RRESP, - m_axi_in_5_RVALID, - m_axi_in_5_WDATA, - m_axi_in_5_WLAST, - m_axi_in_5_WREADY, - m_axi_in_5_WSTRB, - m_axi_in_5_WVALID, - m_axi_out_5_ARADDR, - m_axi_out_5_ARBURST, - m_axi_out_5_ARCACHE, - m_axi_out_5_ARID, - m_axi_out_5_ARLEN, - m_axi_out_5_ARLOCK, - m_axi_out_5_ARPROT, - m_axi_out_5_ARQOS, - m_axi_out_5_ARREADY, - m_axi_out_5_ARSIZE, - m_axi_out_5_ARVALID, - m_axi_out_5_AWADDR, - m_axi_out_5_AWBURST, - m_axi_out_5_AWCACHE, - m_axi_out_5_AWID, - m_axi_out_5_AWLEN, - m_axi_out_5_AWLOCK, - m_axi_out_5_AWPROT, - m_axi_out_5_AWQOS, - m_axi_out_5_AWREADY, - m_axi_out_5_AWSIZE, - m_axi_out_5_AWVALID, - m_axi_out_5_BID, - m_axi_out_5_BREADY, - m_axi_out_5_BRESP, - m_axi_out_5_BVALID, - m_axi_out_5_RDATA, - m_axi_out_5_RID, - m_axi_out_5_RLAST, - m_axi_out_5_RREADY, - m_axi_out_5_RRESP, - m_axi_out_5_RVALID, - m_axi_out_5_WDATA, - m_axi_out_5_WLAST, - m_axi_out_5_WREADY, - m_axi_out_5_WSTRB, - m_axi_out_5_WVALID, - m_axi_in_6_ARADDR, - m_axi_in_6_ARBURST, - m_axi_in_6_ARCACHE, - m_axi_in_6_ARID, - m_axi_in_6_ARLEN, - m_axi_in_6_ARLOCK, - m_axi_in_6_ARPROT, - m_axi_in_6_ARQOS, - m_axi_in_6_ARREADY, - m_axi_in_6_ARSIZE, - m_axi_in_6_ARVALID, - m_axi_in_6_AWADDR, - m_axi_in_6_AWBURST, - m_axi_in_6_AWCACHE, - m_axi_in_6_AWID, - m_axi_in_6_AWLEN, - m_axi_in_6_AWLOCK, - m_axi_in_6_AWPROT, - m_axi_in_6_AWQOS, - m_axi_in_6_AWREADY, - m_axi_in_6_AWSIZE, - m_axi_in_6_AWVALID, - m_axi_in_6_BID, - m_axi_in_6_BREADY, - m_axi_in_6_BRESP, - m_axi_in_6_BVALID, - m_axi_in_6_RDATA, - m_axi_in_6_RID, - m_axi_in_6_RLAST, - m_axi_in_6_RREADY, - m_axi_in_6_RRESP, - m_axi_in_6_RVALID, - m_axi_in_6_WDATA, - m_axi_in_6_WLAST, - m_axi_in_6_WREADY, - m_axi_in_6_WSTRB, - m_axi_in_6_WVALID, - m_axi_out_6_ARADDR, - m_axi_out_6_ARBURST, - m_axi_out_6_ARCACHE, - m_axi_out_6_ARID, - m_axi_out_6_ARLEN, - m_axi_out_6_ARLOCK, - m_axi_out_6_ARPROT, - m_axi_out_6_ARQOS, - m_axi_out_6_ARREADY, - m_axi_out_6_ARSIZE, - m_axi_out_6_ARVALID, - m_axi_out_6_AWADDR, - m_axi_out_6_AWBURST, - m_axi_out_6_AWCACHE, - m_axi_out_6_AWID, - m_axi_out_6_AWLEN, - m_axi_out_6_AWLOCK, - m_axi_out_6_AWPROT, - m_axi_out_6_AWQOS, - m_axi_out_6_AWREADY, - m_axi_out_6_AWSIZE, - m_axi_out_6_AWVALID, - m_axi_out_6_BID, - m_axi_out_6_BREADY, - m_axi_out_6_BRESP, - m_axi_out_6_BVALID, - m_axi_out_6_RDATA, - m_axi_out_6_RID, - m_axi_out_6_RLAST, - m_axi_out_6_RREADY, - m_axi_out_6_RRESP, - m_axi_out_6_RVALID, - m_axi_out_6_WDATA, - m_axi_out_6_WLAST, - m_axi_out_6_WREADY, - m_axi_out_6_WSTRB, - m_axi_out_6_WVALID, - m_axi_in_7_ARADDR, - m_axi_in_7_ARBURST, - m_axi_in_7_ARCACHE, - m_axi_in_7_ARID, - m_axi_in_7_ARLEN, - m_axi_in_7_ARLOCK, - m_axi_in_7_ARPROT, - m_axi_in_7_ARQOS, - m_axi_in_7_ARREADY, - m_axi_in_7_ARSIZE, - m_axi_in_7_ARVALID, - m_axi_in_7_AWADDR, - m_axi_in_7_AWBURST, - m_axi_in_7_AWCACHE, - m_axi_in_7_AWID, - m_axi_in_7_AWLEN, - m_axi_in_7_AWLOCK, - m_axi_in_7_AWPROT, - m_axi_in_7_AWQOS, - m_axi_in_7_AWREADY, - m_axi_in_7_AWSIZE, - m_axi_in_7_AWVALID, - m_axi_in_7_BID, - m_axi_in_7_BREADY, - m_axi_in_7_BRESP, - m_axi_in_7_BVALID, - m_axi_in_7_RDATA, - m_axi_in_7_RID, - m_axi_in_7_RLAST, - m_axi_in_7_RREADY, - m_axi_in_7_RRESP, - m_axi_in_7_RVALID, - m_axi_in_7_WDATA, - m_axi_in_7_WLAST, - m_axi_in_7_WREADY, - m_axi_in_7_WSTRB, - m_axi_in_7_WVALID, - m_axi_out_7_ARADDR, - m_axi_out_7_ARBURST, - m_axi_out_7_ARCACHE, - m_axi_out_7_ARID, - m_axi_out_7_ARLEN, - m_axi_out_7_ARLOCK, - m_axi_out_7_ARPROT, - m_axi_out_7_ARQOS, - m_axi_out_7_ARREADY, - m_axi_out_7_ARSIZE, - m_axi_out_7_ARVALID, - m_axi_out_7_AWADDR, - m_axi_out_7_AWBURST, - m_axi_out_7_AWCACHE, - m_axi_out_7_AWID, - m_axi_out_7_AWLEN, - m_axi_out_7_AWLOCK, - m_axi_out_7_AWPROT, - m_axi_out_7_AWQOS, - m_axi_out_7_AWREADY, - m_axi_out_7_AWSIZE, - m_axi_out_7_AWVALID, - m_axi_out_7_BID, - m_axi_out_7_BREADY, - m_axi_out_7_BRESP, - m_axi_out_7_BVALID, - m_axi_out_7_RDATA, - m_axi_out_7_RID, - m_axi_out_7_RLAST, - m_axi_out_7_RREADY, - m_axi_out_7_RRESP, - m_axi_out_7_RVALID, - m_axi_out_7_WDATA, - m_axi_out_7_WLAST, - m_axi_out_7_WREADY, - m_axi_out_7_WSTRB, - m_axi_out_7_WVALID, - m_axi_in_8_ARADDR, - m_axi_in_8_ARBURST, - m_axi_in_8_ARCACHE, - m_axi_in_8_ARID, - m_axi_in_8_ARLEN, - m_axi_in_8_ARLOCK, - m_axi_in_8_ARPROT, - m_axi_in_8_ARQOS, - m_axi_in_8_ARREADY, - m_axi_in_8_ARSIZE, - m_axi_in_8_ARVALID, - m_axi_in_8_AWADDR, - m_axi_in_8_AWBURST, - m_axi_in_8_AWCACHE, - m_axi_in_8_AWID, - m_axi_in_8_AWLEN, - m_axi_in_8_AWLOCK, - m_axi_in_8_AWPROT, - m_axi_in_8_AWQOS, - m_axi_in_8_AWREADY, - m_axi_in_8_AWSIZE, - m_axi_in_8_AWVALID, - m_axi_in_8_BID, - m_axi_in_8_BREADY, - m_axi_in_8_BRESP, - m_axi_in_8_BVALID, - m_axi_in_8_RDATA, - m_axi_in_8_RID, - m_axi_in_8_RLAST, - m_axi_in_8_RREADY, - m_axi_in_8_RRESP, - m_axi_in_8_RVALID, - m_axi_in_8_WDATA, - m_axi_in_8_WLAST, - m_axi_in_8_WREADY, - m_axi_in_8_WSTRB, - m_axi_in_8_WVALID, - m_axi_out_8_ARADDR, - m_axi_out_8_ARBURST, - m_axi_out_8_ARCACHE, - m_axi_out_8_ARID, - m_axi_out_8_ARLEN, - m_axi_out_8_ARLOCK, - m_axi_out_8_ARPROT, - m_axi_out_8_ARQOS, - m_axi_out_8_ARREADY, - m_axi_out_8_ARSIZE, - m_axi_out_8_ARVALID, - m_axi_out_8_AWADDR, - m_axi_out_8_AWBURST, - m_axi_out_8_AWCACHE, - m_axi_out_8_AWID, - m_axi_out_8_AWLEN, - m_axi_out_8_AWLOCK, - m_axi_out_8_AWPROT, - m_axi_out_8_AWQOS, - m_axi_out_8_AWREADY, - m_axi_out_8_AWSIZE, - m_axi_out_8_AWVALID, - m_axi_out_8_BID, - m_axi_out_8_BREADY, - m_axi_out_8_BRESP, - m_axi_out_8_BVALID, - m_axi_out_8_RDATA, - m_axi_out_8_RID, - m_axi_out_8_RLAST, - m_axi_out_8_RREADY, - m_axi_out_8_RRESP, - m_axi_out_8_RVALID, - m_axi_out_8_WDATA, - m_axi_out_8_WLAST, - m_axi_out_8_WREADY, - m_axi_out_8_WSTRB, - m_axi_out_8_WVALID, - m_axi_in_9_ARADDR, - m_axi_in_9_ARBURST, - m_axi_in_9_ARCACHE, - m_axi_in_9_ARID, - m_axi_in_9_ARLEN, - m_axi_in_9_ARLOCK, - m_axi_in_9_ARPROT, - m_axi_in_9_ARQOS, - m_axi_in_9_ARREADY, - m_axi_in_9_ARSIZE, - m_axi_in_9_ARVALID, - m_axi_in_9_AWADDR, - m_axi_in_9_AWBURST, - m_axi_in_9_AWCACHE, - m_axi_in_9_AWID, - m_axi_in_9_AWLEN, - m_axi_in_9_AWLOCK, - m_axi_in_9_AWPROT, - m_axi_in_9_AWQOS, - m_axi_in_9_AWREADY, - m_axi_in_9_AWSIZE, - m_axi_in_9_AWVALID, - m_axi_in_9_BID, - m_axi_in_9_BREADY, - m_axi_in_9_BRESP, - m_axi_in_9_BVALID, - m_axi_in_9_RDATA, - m_axi_in_9_RID, - m_axi_in_9_RLAST, - m_axi_in_9_RREADY, - m_axi_in_9_RRESP, - m_axi_in_9_RVALID, - m_axi_in_9_WDATA, - m_axi_in_9_WLAST, - m_axi_in_9_WREADY, - m_axi_in_9_WSTRB, - m_axi_in_9_WVALID, - m_axi_out_9_ARADDR, - m_axi_out_9_ARBURST, - m_axi_out_9_ARCACHE, - m_axi_out_9_ARID, - m_axi_out_9_ARLEN, - m_axi_out_9_ARLOCK, - m_axi_out_9_ARPROT, - m_axi_out_9_ARQOS, - m_axi_out_9_ARREADY, - m_axi_out_9_ARSIZE, - m_axi_out_9_ARVALID, - m_axi_out_9_AWADDR, - m_axi_out_9_AWBURST, - m_axi_out_9_AWCACHE, - m_axi_out_9_AWID, - m_axi_out_9_AWLEN, - m_axi_out_9_AWLOCK, - m_axi_out_9_AWPROT, - m_axi_out_9_AWQOS, - m_axi_out_9_AWREADY, - m_axi_out_9_AWSIZE, - m_axi_out_9_AWVALID, - m_axi_out_9_BID, - m_axi_out_9_BREADY, - m_axi_out_9_BRESP, - m_axi_out_9_BVALID, - m_axi_out_9_RDATA, - m_axi_out_9_RID, - m_axi_out_9_RLAST, - m_axi_out_9_RREADY, - m_axi_out_9_RRESP, - m_axi_out_9_RVALID, - m_axi_out_9_WDATA, - m_axi_out_9_WLAST, - m_axi_out_9_WREADY, - m_axi_out_9_WSTRB, - m_axi_out_9_WVALID, - m_axi_in_10_ARADDR, - m_axi_in_10_ARBURST, - m_axi_in_10_ARCACHE, - m_axi_in_10_ARID, - m_axi_in_10_ARLEN, - m_axi_in_10_ARLOCK, - m_axi_in_10_ARPROT, - m_axi_in_10_ARQOS, - m_axi_in_10_ARREADY, - m_axi_in_10_ARSIZE, - m_axi_in_10_ARVALID, - m_axi_in_10_AWADDR, - m_axi_in_10_AWBURST, - m_axi_in_10_AWCACHE, - m_axi_in_10_AWID, - m_axi_in_10_AWLEN, - m_axi_in_10_AWLOCK, - m_axi_in_10_AWPROT, - m_axi_in_10_AWQOS, - m_axi_in_10_AWREADY, - m_axi_in_10_AWSIZE, - m_axi_in_10_AWVALID, - m_axi_in_10_BID, - m_axi_in_10_BREADY, - m_axi_in_10_BRESP, - m_axi_in_10_BVALID, - m_axi_in_10_RDATA, - m_axi_in_10_RID, - m_axi_in_10_RLAST, - m_axi_in_10_RREADY, - m_axi_in_10_RRESP, - m_axi_in_10_RVALID, - m_axi_in_10_WDATA, - m_axi_in_10_WLAST, - m_axi_in_10_WREADY, - m_axi_in_10_WSTRB, - m_axi_in_10_WVALID, - m_axi_out_10_ARADDR, - m_axi_out_10_ARBURST, - m_axi_out_10_ARCACHE, - m_axi_out_10_ARID, - m_axi_out_10_ARLEN, - m_axi_out_10_ARLOCK, - m_axi_out_10_ARPROT, - m_axi_out_10_ARQOS, - m_axi_out_10_ARREADY, - m_axi_out_10_ARSIZE, - m_axi_out_10_ARVALID, - m_axi_out_10_AWADDR, - m_axi_out_10_AWBURST, - m_axi_out_10_AWCACHE, - m_axi_out_10_AWID, - m_axi_out_10_AWLEN, - m_axi_out_10_AWLOCK, - m_axi_out_10_AWPROT, - m_axi_out_10_AWQOS, - m_axi_out_10_AWREADY, - m_axi_out_10_AWSIZE, - m_axi_out_10_AWVALID, - m_axi_out_10_BID, - m_axi_out_10_BREADY, - m_axi_out_10_BRESP, - m_axi_out_10_BVALID, - m_axi_out_10_RDATA, - m_axi_out_10_RID, - m_axi_out_10_RLAST, - m_axi_out_10_RREADY, - m_axi_out_10_RRESP, - m_axi_out_10_RVALID, - m_axi_out_10_WDATA, - m_axi_out_10_WLAST, - m_axi_out_10_WREADY, - m_axi_out_10_WSTRB, - m_axi_out_10_WVALID, - m_axi_in_11_ARADDR, - m_axi_in_11_ARBURST, - m_axi_in_11_ARCACHE, - m_axi_in_11_ARID, - m_axi_in_11_ARLEN, - m_axi_in_11_ARLOCK, - m_axi_in_11_ARPROT, - m_axi_in_11_ARQOS, - m_axi_in_11_ARREADY, - m_axi_in_11_ARSIZE, - m_axi_in_11_ARVALID, - m_axi_in_11_AWADDR, - m_axi_in_11_AWBURST, - m_axi_in_11_AWCACHE, - m_axi_in_11_AWID, - m_axi_in_11_AWLEN, - m_axi_in_11_AWLOCK, - m_axi_in_11_AWPROT, - m_axi_in_11_AWQOS, - m_axi_in_11_AWREADY, - m_axi_in_11_AWSIZE, - m_axi_in_11_AWVALID, - m_axi_in_11_BID, - m_axi_in_11_BREADY, - m_axi_in_11_BRESP, - m_axi_in_11_BVALID, - m_axi_in_11_RDATA, - m_axi_in_11_RID, - m_axi_in_11_RLAST, - m_axi_in_11_RREADY, - m_axi_in_11_RRESP, - m_axi_in_11_RVALID, - m_axi_in_11_WDATA, - m_axi_in_11_WLAST, - m_axi_in_11_WREADY, - m_axi_in_11_WSTRB, - m_axi_in_11_WVALID, - m_axi_out_11_ARADDR, - m_axi_out_11_ARBURST, - m_axi_out_11_ARCACHE, - m_axi_out_11_ARID, - m_axi_out_11_ARLEN, - m_axi_out_11_ARLOCK, - m_axi_out_11_ARPROT, - m_axi_out_11_ARQOS, - m_axi_out_11_ARREADY, - m_axi_out_11_ARSIZE, - m_axi_out_11_ARVALID, - m_axi_out_11_AWADDR, - m_axi_out_11_AWBURST, - m_axi_out_11_AWCACHE, - m_axi_out_11_AWID, - m_axi_out_11_AWLEN, - m_axi_out_11_AWLOCK, - m_axi_out_11_AWPROT, - m_axi_out_11_AWQOS, - m_axi_out_11_AWREADY, - m_axi_out_11_AWSIZE, - m_axi_out_11_AWVALID, - m_axi_out_11_BID, - m_axi_out_11_BREADY, - m_axi_out_11_BRESP, - m_axi_out_11_BVALID, - m_axi_out_11_RDATA, - m_axi_out_11_RID, - m_axi_out_11_RLAST, - m_axi_out_11_RREADY, - m_axi_out_11_RRESP, - m_axi_out_11_RVALID, - m_axi_out_11_WDATA, - m_axi_out_11_WLAST, - m_axi_out_11_WREADY, - m_axi_out_11_WSTRB, - m_axi_out_11_WVALID -); - - parameter C_S_AXI_CONTROL_DATA_WIDTH = 32; - parameter C_S_AXI_CONTROL_ADDR_WIDTH = 9; - parameter C_S_AXI_DATA_WIDTH = 32; - parameter C_S_AXI_CONTROL_WSTRB_WIDTH = 32 / 8; - parameter C_S_AXI_WSTRB_WIDTH = 32 / 8; - (* RS_HS = "s_axi_control_AW.valid" *)input s_axi_control_AWVALID; - (* RS_HS = "s_axi_control_AW.ready" *)output s_axi_control_AWREADY; - (* RS_HS = "s_axi_control_AW.data" *)input [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_AWADDR; - (* RS_HS = "s_axi_control_W.valid" *)input s_axi_control_WVALID; - (* RS_HS = "s_axi_control_W.ready" *)output s_axi_control_WREADY; - (* RS_HS = "s_axi_control_W.data" *)input [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_WDATA; - (* RS_HS = "s_axi_control_W.data" *)input [C_S_AXI_CONTROL_WSTRB_WIDTH-1:0] s_axi_control_WSTRB; - (* RS_HS = "s_axi_control_AR.valid" *)input s_axi_control_ARVALID; - (* RS_HS = "s_axi_control_AR.ready" *)output s_axi_control_ARREADY; - (* RS_HS = "s_axi_control_AR.data" *)input [C_S_AXI_CONTROL_ADDR_WIDTH-1:0] s_axi_control_ARADDR; - (* RS_HS = "s_axi_control_R.valid" *)output s_axi_control_RVALID; - (* RS_HS = "s_axi_control_R.ready" *)input s_axi_control_RREADY; - (* RS_HS = "s_axi_control_R.data" *)output [C_S_AXI_CONTROL_DATA_WIDTH-1:0] s_axi_control_RDATA; - (* RS_HS = "s_axi_control_R.data" *)output [1:0] s_axi_control_RRESP; - (* RS_HS = "s_axi_control_B.valid" *)output s_axi_control_BVALID; - (* RS_HS = "s_axi_control_B.ready" *)input s_axi_control_BREADY; - (* RS_HS = "s_axi_control_B.data" *)output [1:0] s_axi_control_BRESP; - (* RS_CLK *)input ap_clk; - (* RS_RST = "ff" *)input ap_rst_n; - (* RS_FF = "interrupt" *)output interrupt; - (* RS_HS = "m_axi_in_0_AR.data" *)output [63:0] m_axi_in_0_ARADDR; - (* RS_HS = "m_axi_in_0_AR.data" *)output [1:0] m_axi_in_0_ARBURST; - (* RS_HS = "m_axi_in_0_AR.data" *)output [3:0] m_axi_in_0_ARCACHE; - (* RS_HS = "m_axi_in_0_AR.data" *)output [0:0] m_axi_in_0_ARID; - (* RS_HS = "m_axi_in_0_AR.data" *)output [7:0] m_axi_in_0_ARLEN; - (* RS_HS = "m_axi_in_0_AR.data" *)output m_axi_in_0_ARLOCK; - (* RS_HS = "m_axi_in_0_AR.data" *)output [2:0] m_axi_in_0_ARPROT; - (* RS_HS = "m_axi_in_0_AR.data" *)output [3:0] m_axi_in_0_ARQOS; - (* RS_HS = "m_axi_in_0_AR.ready" *)input m_axi_in_0_ARREADY; - (* RS_HS = "m_axi_in_0_AR.data" *)output [2:0] m_axi_in_0_ARSIZE; - (* RS_HS = "m_axi_in_0_AR.valid" *)output m_axi_in_0_ARVALID; - (* RS_HS = "m_axi_in_0_AW.data" *)output [63:0] m_axi_in_0_AWADDR; - (* RS_HS = "m_axi_in_0_AW.data" *)output [1:0] m_axi_in_0_AWBURST; - (* RS_HS = "m_axi_in_0_AW.data" *)output [3:0] m_axi_in_0_AWCACHE; - (* RS_HS = "m_axi_in_0_AW.data" *)output [0:0] m_axi_in_0_AWID; - (* RS_HS = "m_axi_in_0_AW.data" *)output [7:0] m_axi_in_0_AWLEN; - (* RS_HS = "m_axi_in_0_AW.data" *)output m_axi_in_0_AWLOCK; - (* RS_HS = "m_axi_in_0_AW.data" *)output [2:0] m_axi_in_0_AWPROT; - (* RS_HS = "m_axi_in_0_AW.data" *)output [3:0] m_axi_in_0_AWQOS; - (* RS_HS = "m_axi_in_0_AW.ready" *)input m_axi_in_0_AWREADY; - (* RS_HS = "m_axi_in_0_AW.data" *)output [2:0] m_axi_in_0_AWSIZE; - (* RS_HS = "m_axi_in_0_AW.valid" *)output m_axi_in_0_AWVALID; - (* RS_HS = "m_axi_in_0_B.data" *)input [0:0] m_axi_in_0_BID; - (* RS_HS = "m_axi_in_0_B.ready" *)output m_axi_in_0_BREADY; - (* RS_HS = "m_axi_in_0_B.data" *)input [1:0] m_axi_in_0_BRESP; - (* RS_HS = "m_axi_in_0_B.valid" *)input m_axi_in_0_BVALID; - (* RS_HS = "m_axi_in_0_R.data" *)input [511:0] m_axi_in_0_RDATA; - (* RS_HS = "m_axi_in_0_R.data" *)input [0:0] m_axi_in_0_RID; - (* RS_HS = "m_axi_in_0_R.data" *)input m_axi_in_0_RLAST; - (* RS_HS = "m_axi_in_0_R.ready" *)output m_axi_in_0_RREADY; - (* RS_HS = "m_axi_in_0_R.data" *)input [1:0] m_axi_in_0_RRESP; - (* RS_HS = "m_axi_in_0_R.valid" *)input m_axi_in_0_RVALID; - (* RS_HS = "m_axi_in_0_W.data" *)output [511:0] m_axi_in_0_WDATA; - (* RS_HS = "m_axi_in_0_W.data" *)output m_axi_in_0_WLAST; - (* RS_HS = "m_axi_in_0_W.ready" *)input m_axi_in_0_WREADY; - (* RS_HS = "m_axi_in_0_W.data" *)output [63:0] m_axi_in_0_WSTRB; - (* RS_HS = "m_axi_in_0_W.valid" *)output m_axi_in_0_WVALID; - (* RS_HS = "m_axi_out_0_AR.data" *)output [63:0] m_axi_out_0_ARADDR; - (* RS_HS = "m_axi_out_0_AR.data" *)output [1:0] m_axi_out_0_ARBURST; - (* RS_HS = "m_axi_out_0_AR.data" *)output [3:0] m_axi_out_0_ARCACHE; - (* RS_HS = "m_axi_out_0_AR.data" *)output [0:0] m_axi_out_0_ARID; - (* RS_HS = "m_axi_out_0_AR.data" *)output [7:0] m_axi_out_0_ARLEN; - (* RS_HS = "m_axi_out_0_AR.data" *)output m_axi_out_0_ARLOCK; - (* RS_HS = "m_axi_out_0_AR.data" *)output [2:0] m_axi_out_0_ARPROT; - (* RS_HS = "m_axi_out_0_AR.data" *)output [3:0] m_axi_out_0_ARQOS; - (* RS_HS = "m_axi_out_0_AR.ready" *)input m_axi_out_0_ARREADY; - (* RS_HS = "m_axi_out_0_AR.data" *)output [2:0] m_axi_out_0_ARSIZE; - (* RS_HS = "m_axi_out_0_AR.valid" *)output m_axi_out_0_ARVALID; - (* RS_HS = "m_axi_out_0_AW.data" *)output [63:0] m_axi_out_0_AWADDR; - (* RS_HS = "m_axi_out_0_AW.data" *)output [1:0] m_axi_out_0_AWBURST; - (* RS_HS = "m_axi_out_0_AW.data" *)output [3:0] m_axi_out_0_AWCACHE; - (* RS_HS = "m_axi_out_0_AW.data" *)output [0:0] m_axi_out_0_AWID; - (* RS_HS = "m_axi_out_0_AW.data" *)output [7:0] m_axi_out_0_AWLEN; - (* RS_HS = "m_axi_out_0_AW.data" *)output m_axi_out_0_AWLOCK; - (* RS_HS = "m_axi_out_0_AW.data" *)output [2:0] m_axi_out_0_AWPROT; - (* RS_HS = "m_axi_out_0_AW.data" *)output [3:0] m_axi_out_0_AWQOS; - (* RS_HS = "m_axi_out_0_AW.ready" *)input m_axi_out_0_AWREADY; - (* RS_HS = "m_axi_out_0_AW.data" *)output [2:0] m_axi_out_0_AWSIZE; - (* RS_HS = "m_axi_out_0_AW.valid" *)output m_axi_out_0_AWVALID; - (* RS_HS = "m_axi_out_0_B.data" *)input [0:0] m_axi_out_0_BID; - (* RS_HS = "m_axi_out_0_B.ready" *)output m_axi_out_0_BREADY; - (* RS_HS = "m_axi_out_0_B.data" *)input [1:0] m_axi_out_0_BRESP; - (* RS_HS = "m_axi_out_0_B.valid" *)input m_axi_out_0_BVALID; - (* RS_HS = "m_axi_out_0_R.data" *)input [511:0] m_axi_out_0_RDATA; - (* RS_HS = "m_axi_out_0_R.data" *)input [0:0] m_axi_out_0_RID; - (* RS_HS = "m_axi_out_0_R.data" *)input m_axi_out_0_RLAST; - (* RS_HS = "m_axi_out_0_R.ready" *)output m_axi_out_0_RREADY; - (* RS_HS = "m_axi_out_0_R.data" *)input [1:0] m_axi_out_0_RRESP; - (* RS_HS = "m_axi_out_0_R.valid" *)input m_axi_out_0_RVALID; - (* RS_HS = "m_axi_out_0_W.data" *)output [511:0] m_axi_out_0_WDATA; - (* RS_HS = "m_axi_out_0_W.data" *)output m_axi_out_0_WLAST; - (* RS_HS = "m_axi_out_0_W.ready" *)input m_axi_out_0_WREADY; - (* RS_HS = "m_axi_out_0_W.data" *)output [63:0] m_axi_out_0_WSTRB; - (* RS_HS = "m_axi_out_0_W.valid" *)output m_axi_out_0_WVALID; - (* RS_HS = "m_axi_in_1_AR.data" *)output [63:0] m_axi_in_1_ARADDR; - (* RS_HS = "m_axi_in_1_AR.data" *)output [1:0] m_axi_in_1_ARBURST; - (* RS_HS = "m_axi_in_1_AR.data" *)output [3:0] m_axi_in_1_ARCACHE; - (* RS_HS = "m_axi_in_1_AR.data" *)output [0:0] m_axi_in_1_ARID; - (* RS_HS = "m_axi_in_1_AR.data" *)output [7:0] m_axi_in_1_ARLEN; - (* RS_HS = "m_axi_in_1_AR.data" *)output m_axi_in_1_ARLOCK; - (* RS_HS = "m_axi_in_1_AR.data" *)output [2:0] m_axi_in_1_ARPROT; - (* RS_HS = "m_axi_in_1_AR.data" *)output [3:0] m_axi_in_1_ARQOS; - (* RS_HS = "m_axi_in_1_AR.ready" *)input m_axi_in_1_ARREADY; - (* RS_HS = "m_axi_in_1_AR.data" *)output [2:0] m_axi_in_1_ARSIZE; - (* RS_HS = "m_axi_in_1_AR.valid" *)output m_axi_in_1_ARVALID; - (* RS_HS = "m_axi_in_1_AW.data" *)output [63:0] m_axi_in_1_AWADDR; - (* RS_HS = "m_axi_in_1_AW.data" *)output [1:0] m_axi_in_1_AWBURST; - (* RS_HS = "m_axi_in_1_AW.data" *)output [3:0] m_axi_in_1_AWCACHE; - (* RS_HS = "m_axi_in_1_AW.data" *)output [0:0] m_axi_in_1_AWID; - (* RS_HS = "m_axi_in_1_AW.data" *)output [7:0] m_axi_in_1_AWLEN; - (* RS_HS = "m_axi_in_1_AW.data" *)output m_axi_in_1_AWLOCK; - (* RS_HS = "m_axi_in_1_AW.data" *)output [2:0] m_axi_in_1_AWPROT; - (* RS_HS = "m_axi_in_1_AW.data" *)output [3:0] m_axi_in_1_AWQOS; - (* RS_HS = "m_axi_in_1_AW.ready" *)input m_axi_in_1_AWREADY; - (* RS_HS = "m_axi_in_1_AW.data" *)output [2:0] m_axi_in_1_AWSIZE; - (* RS_HS = "m_axi_in_1_AW.valid" *)output m_axi_in_1_AWVALID; - (* RS_HS = "m_axi_in_1_B.data" *)input [0:0] m_axi_in_1_BID; - (* RS_HS = "m_axi_in_1_B.ready" *)output m_axi_in_1_BREADY; - (* RS_HS = "m_axi_in_1_B.data" *)input [1:0] m_axi_in_1_BRESP; - (* RS_HS = "m_axi_in_1_B.valid" *)input m_axi_in_1_BVALID; - (* RS_HS = "m_axi_in_1_R.data" *)input [511:0] m_axi_in_1_RDATA; - (* RS_HS = "m_axi_in_1_R.data" *)input [0:0] m_axi_in_1_RID; - (* RS_HS = "m_axi_in_1_R.data" *)input m_axi_in_1_RLAST; - (* RS_HS = "m_axi_in_1_R.ready" *)output m_axi_in_1_RREADY; - (* RS_HS = "m_axi_in_1_R.data" *)input [1:0] m_axi_in_1_RRESP; - (* RS_HS = "m_axi_in_1_R.valid" *)input m_axi_in_1_RVALID; - (* RS_HS = "m_axi_in_1_W.data" *)output [511:0] m_axi_in_1_WDATA; - (* RS_HS = "m_axi_in_1_W.data" *)output m_axi_in_1_WLAST; - (* RS_HS = "m_axi_in_1_W.ready" *)input m_axi_in_1_WREADY; - (* RS_HS = "m_axi_in_1_W.data" *)output [63:0] m_axi_in_1_WSTRB; - (* RS_HS = "m_axi_in_1_W.valid" *)output m_axi_in_1_WVALID; - (* RS_HS = "m_axi_out_1_AR.data" *)output [63:0] m_axi_out_1_ARADDR; - (* RS_HS = "m_axi_out_1_AR.data" *)output [1:0] m_axi_out_1_ARBURST; - (* RS_HS = "m_axi_out_1_AR.data" *)output [3:0] m_axi_out_1_ARCACHE; - (* RS_HS = "m_axi_out_1_AR.data" *)output [0:0] m_axi_out_1_ARID; - (* RS_HS = "m_axi_out_1_AR.data" *)output [7:0] m_axi_out_1_ARLEN; - (* RS_HS = "m_axi_out_1_AR.data" *)output m_axi_out_1_ARLOCK; - (* RS_HS = "m_axi_out_1_AR.data" *)output [2:0] m_axi_out_1_ARPROT; - (* RS_HS = "m_axi_out_1_AR.data" *)output [3:0] m_axi_out_1_ARQOS; - (* RS_HS = "m_axi_out_1_AR.ready" *)input m_axi_out_1_ARREADY; - (* RS_HS = "m_axi_out_1_AR.data" *)output [2:0] m_axi_out_1_ARSIZE; - (* RS_HS = "m_axi_out_1_AR.valid" *)output m_axi_out_1_ARVALID; - (* RS_HS = "m_axi_out_1_AW.data" *)output [63:0] m_axi_out_1_AWADDR; - (* RS_HS = "m_axi_out_1_AW.data" *)output [1:0] m_axi_out_1_AWBURST; - (* RS_HS = "m_axi_out_1_AW.data" *)output [3:0] m_axi_out_1_AWCACHE; - (* RS_HS = "m_axi_out_1_AW.data" *)output [0:0] m_axi_out_1_AWID; - (* RS_HS = "m_axi_out_1_AW.data" *)output [7:0] m_axi_out_1_AWLEN; - (* RS_HS = "m_axi_out_1_AW.data" *)output m_axi_out_1_AWLOCK; - (* RS_HS = "m_axi_out_1_AW.data" *)output [2:0] m_axi_out_1_AWPROT; - (* RS_HS = "m_axi_out_1_AW.data" *)output [3:0] m_axi_out_1_AWQOS; - (* RS_HS = "m_axi_out_1_AW.ready" *)input m_axi_out_1_AWREADY; - (* RS_HS = "m_axi_out_1_AW.data" *)output [2:0] m_axi_out_1_AWSIZE; - (* RS_HS = "m_axi_out_1_AW.valid" *)output m_axi_out_1_AWVALID; - (* RS_HS = "m_axi_out_1_B.data" *)input [0:0] m_axi_out_1_BID; - (* RS_HS = "m_axi_out_1_B.ready" *)output m_axi_out_1_BREADY; - (* RS_HS = "m_axi_out_1_B.data" *)input [1:0] m_axi_out_1_BRESP; - (* RS_HS = "m_axi_out_1_B.valid" *)input m_axi_out_1_BVALID; - (* RS_HS = "m_axi_out_1_R.data" *)input [511:0] m_axi_out_1_RDATA; - (* RS_HS = "m_axi_out_1_R.data" *)input [0:0] m_axi_out_1_RID; - (* RS_HS = "m_axi_out_1_R.data" *)input m_axi_out_1_RLAST; - (* RS_HS = "m_axi_out_1_R.ready" *)output m_axi_out_1_RREADY; - (* RS_HS = "m_axi_out_1_R.data" *)input [1:0] m_axi_out_1_RRESP; - (* RS_HS = "m_axi_out_1_R.valid" *)input m_axi_out_1_RVALID; - (* RS_HS = "m_axi_out_1_W.data" *)output [511:0] m_axi_out_1_WDATA; - (* RS_HS = "m_axi_out_1_W.data" *)output m_axi_out_1_WLAST; - (* RS_HS = "m_axi_out_1_W.ready" *)input m_axi_out_1_WREADY; - (* RS_HS = "m_axi_out_1_W.data" *)output [63:0] m_axi_out_1_WSTRB; - (* RS_HS = "m_axi_out_1_W.valid" *)output m_axi_out_1_WVALID; - (* RS_HS = "m_axi_in_2_AR.data" *)output [63:0] m_axi_in_2_ARADDR; - (* RS_HS = "m_axi_in_2_AR.data" *)output [1:0] m_axi_in_2_ARBURST; - (* RS_HS = "m_axi_in_2_AR.data" *)output [3:0] m_axi_in_2_ARCACHE; - (* RS_HS = "m_axi_in_2_AR.data" *)output [0:0] m_axi_in_2_ARID; - (* RS_HS = "m_axi_in_2_AR.data" *)output [7:0] m_axi_in_2_ARLEN; - (* RS_HS = "m_axi_in_2_AR.data" *)output m_axi_in_2_ARLOCK; - (* RS_HS = "m_axi_in_2_AR.data" *)output [2:0] m_axi_in_2_ARPROT; - (* RS_HS = "m_axi_in_2_AR.data" *)output [3:0] m_axi_in_2_ARQOS; - (* RS_HS = "m_axi_in_2_AR.ready" *)input m_axi_in_2_ARREADY; - (* RS_HS = "m_axi_in_2_AR.data" *)output [2:0] m_axi_in_2_ARSIZE; - (* RS_HS = "m_axi_in_2_AR.valid" *)output m_axi_in_2_ARVALID; - (* RS_HS = "m_axi_in_2_AW.data" *)output [63:0] m_axi_in_2_AWADDR; - (* RS_HS = "m_axi_in_2_AW.data" *)output [1:0] m_axi_in_2_AWBURST; - (* RS_HS = "m_axi_in_2_AW.data" *)output [3:0] m_axi_in_2_AWCACHE; - (* RS_HS = "m_axi_in_2_AW.data" *)output [0:0] m_axi_in_2_AWID; - (* RS_HS = "m_axi_in_2_AW.data" *)output [7:0] m_axi_in_2_AWLEN; - (* RS_HS = "m_axi_in_2_AW.data" *)output m_axi_in_2_AWLOCK; - (* RS_HS = "m_axi_in_2_AW.data" *)output [2:0] m_axi_in_2_AWPROT; - (* RS_HS = "m_axi_in_2_AW.data" *)output [3:0] m_axi_in_2_AWQOS; - (* RS_HS = "m_axi_in_2_AW.ready" *)input m_axi_in_2_AWREADY; - (* RS_HS = "m_axi_in_2_AW.data" *)output [2:0] m_axi_in_2_AWSIZE; - (* RS_HS = "m_axi_in_2_AW.valid" *)output m_axi_in_2_AWVALID; - (* RS_HS = "m_axi_in_2_B.data" *)input [0:0] m_axi_in_2_BID; - (* RS_HS = "m_axi_in_2_B.ready" *)output m_axi_in_2_BREADY; - (* RS_HS = "m_axi_in_2_B.data" *)input [1:0] m_axi_in_2_BRESP; - (* RS_HS = "m_axi_in_2_B.valid" *)input m_axi_in_2_BVALID; - (* RS_HS = "m_axi_in_2_R.data" *)input [511:0] m_axi_in_2_RDATA; - (* RS_HS = "m_axi_in_2_R.data" *)input [0:0] m_axi_in_2_RID; - (* RS_HS = "m_axi_in_2_R.data" *)input m_axi_in_2_RLAST; - (* RS_HS = "m_axi_in_2_R.ready" *)output m_axi_in_2_RREADY; - (* RS_HS = "m_axi_in_2_R.data" *)input [1:0] m_axi_in_2_RRESP; - (* RS_HS = "m_axi_in_2_R.valid" *)input m_axi_in_2_RVALID; - (* RS_HS = "m_axi_in_2_W.data" *)output [511:0] m_axi_in_2_WDATA; - (* RS_HS = "m_axi_in_2_W.data" *)output m_axi_in_2_WLAST; - (* RS_HS = "m_axi_in_2_W.ready" *)input m_axi_in_2_WREADY; - (* RS_HS = "m_axi_in_2_W.data" *)output [63:0] m_axi_in_2_WSTRB; - (* RS_HS = "m_axi_in_2_W.valid" *)output m_axi_in_2_WVALID; - (* RS_HS = "m_axi_out_2_AR.data" *)output [63:0] m_axi_out_2_ARADDR; - (* RS_HS = "m_axi_out_2_AR.data" *)output [1:0] m_axi_out_2_ARBURST; - (* RS_HS = "m_axi_out_2_AR.data" *)output [3:0] m_axi_out_2_ARCACHE; - (* RS_HS = "m_axi_out_2_AR.data" *)output [0:0] m_axi_out_2_ARID; - (* RS_HS = "m_axi_out_2_AR.data" *)output [7:0] m_axi_out_2_ARLEN; - (* RS_HS = "m_axi_out_2_AR.data" *)output m_axi_out_2_ARLOCK; - (* RS_HS = "m_axi_out_2_AR.data" *)output [2:0] m_axi_out_2_ARPROT; - (* RS_HS = "m_axi_out_2_AR.data" *)output [3:0] m_axi_out_2_ARQOS; - (* RS_HS = "m_axi_out_2_AR.ready" *)input m_axi_out_2_ARREADY; - (* RS_HS = "m_axi_out_2_AR.data" *)output [2:0] m_axi_out_2_ARSIZE; - (* RS_HS = "m_axi_out_2_AR.valid" *)output m_axi_out_2_ARVALID; - (* RS_HS = "m_axi_out_2_AW.data" *)output [63:0] m_axi_out_2_AWADDR; - (* RS_HS = "m_axi_out_2_AW.data" *)output [1:0] m_axi_out_2_AWBURST; - (* RS_HS = "m_axi_out_2_AW.data" *)output [3:0] m_axi_out_2_AWCACHE; - (* RS_HS = "m_axi_out_2_AW.data" *)output [0:0] m_axi_out_2_AWID; - (* RS_HS = "m_axi_out_2_AW.data" *)output [7:0] m_axi_out_2_AWLEN; - (* RS_HS = "m_axi_out_2_AW.data" *)output m_axi_out_2_AWLOCK; - (* RS_HS = "m_axi_out_2_AW.data" *)output [2:0] m_axi_out_2_AWPROT; - (* RS_HS = "m_axi_out_2_AW.data" *)output [3:0] m_axi_out_2_AWQOS; - (* RS_HS = "m_axi_out_2_AW.ready" *)input m_axi_out_2_AWREADY; - (* RS_HS = "m_axi_out_2_AW.data" *)output [2:0] m_axi_out_2_AWSIZE; - (* RS_HS = "m_axi_out_2_AW.valid" *)output m_axi_out_2_AWVALID; - (* RS_HS = "m_axi_out_2_B.data" *)input [0:0] m_axi_out_2_BID; - (* RS_HS = "m_axi_out_2_B.ready" *)output m_axi_out_2_BREADY; - (* RS_HS = "m_axi_out_2_B.data" *)input [1:0] m_axi_out_2_BRESP; - (* RS_HS = "m_axi_out_2_B.valid" *)input m_axi_out_2_BVALID; - (* RS_HS = "m_axi_out_2_R.data" *)input [511:0] m_axi_out_2_RDATA; - (* RS_HS = "m_axi_out_2_R.data" *)input [0:0] m_axi_out_2_RID; - (* RS_HS = "m_axi_out_2_R.data" *)input m_axi_out_2_RLAST; - (* RS_HS = "m_axi_out_2_R.ready" *)output m_axi_out_2_RREADY; - (* RS_HS = "m_axi_out_2_R.data" *)input [1:0] m_axi_out_2_RRESP; - (* RS_HS = "m_axi_out_2_R.valid" *)input m_axi_out_2_RVALID; - (* RS_HS = "m_axi_out_2_W.data" *)output [511:0] m_axi_out_2_WDATA; - (* RS_HS = "m_axi_out_2_W.data" *)output m_axi_out_2_WLAST; - (* RS_HS = "m_axi_out_2_W.ready" *)input m_axi_out_2_WREADY; - (* RS_HS = "m_axi_out_2_W.data" *)output [63:0] m_axi_out_2_WSTRB; - (* RS_HS = "m_axi_out_2_W.valid" *)output m_axi_out_2_WVALID; - (* RS_HS = "m_axi_in_3_AR.data" *)output [63:0] m_axi_in_3_ARADDR; - (* RS_HS = "m_axi_in_3_AR.data" *)output [1:0] m_axi_in_3_ARBURST; - (* RS_HS = "m_axi_in_3_AR.data" *)output [3:0] m_axi_in_3_ARCACHE; - (* RS_HS = "m_axi_in_3_AR.data" *)output [0:0] m_axi_in_3_ARID; - (* RS_HS = "m_axi_in_3_AR.data" *)output [7:0] m_axi_in_3_ARLEN; - (* RS_HS = "m_axi_in_3_AR.data" *)output m_axi_in_3_ARLOCK; - (* RS_HS = "m_axi_in_3_AR.data" *)output [2:0] m_axi_in_3_ARPROT; - (* RS_HS = "m_axi_in_3_AR.data" *)output [3:0] m_axi_in_3_ARQOS; - (* RS_HS = "m_axi_in_3_AR.ready" *)input m_axi_in_3_ARREADY; - (* RS_HS = "m_axi_in_3_AR.data" *)output [2:0] m_axi_in_3_ARSIZE; - (* RS_HS = "m_axi_in_3_AR.valid" *)output m_axi_in_3_ARVALID; - (* RS_HS = "m_axi_in_3_AW.data" *)output [63:0] m_axi_in_3_AWADDR; - (* RS_HS = "m_axi_in_3_AW.data" *)output [1:0] m_axi_in_3_AWBURST; - (* RS_HS = "m_axi_in_3_AW.data" *)output [3:0] m_axi_in_3_AWCACHE; - (* RS_HS = "m_axi_in_3_AW.data" *)output [0:0] m_axi_in_3_AWID; - (* RS_HS = "m_axi_in_3_AW.data" *)output [7:0] m_axi_in_3_AWLEN; - (* RS_HS = "m_axi_in_3_AW.data" *)output m_axi_in_3_AWLOCK; - (* RS_HS = "m_axi_in_3_AW.data" *)output [2:0] m_axi_in_3_AWPROT; - (* RS_HS = "m_axi_in_3_AW.data" *)output [3:0] m_axi_in_3_AWQOS; - (* RS_HS = "m_axi_in_3_AW.ready" *)input m_axi_in_3_AWREADY; - (* RS_HS = "m_axi_in_3_AW.data" *)output [2:0] m_axi_in_3_AWSIZE; - (* RS_HS = "m_axi_in_3_AW.valid" *)output m_axi_in_3_AWVALID; - (* RS_HS = "m_axi_in_3_B.data" *)input [0:0] m_axi_in_3_BID; - (* RS_HS = "m_axi_in_3_B.ready" *)output m_axi_in_3_BREADY; - (* RS_HS = "m_axi_in_3_B.data" *)input [1:0] m_axi_in_3_BRESP; - (* RS_HS = "m_axi_in_3_B.valid" *)input m_axi_in_3_BVALID; - (* RS_HS = "m_axi_in_3_R.data" *)input [511:0] m_axi_in_3_RDATA; - (* RS_HS = "m_axi_in_3_R.data" *)input [0:0] m_axi_in_3_RID; - (* RS_HS = "m_axi_in_3_R.data" *)input m_axi_in_3_RLAST; - (* RS_HS = "m_axi_in_3_R.ready" *)output m_axi_in_3_RREADY; - (* RS_HS = "m_axi_in_3_R.data" *)input [1:0] m_axi_in_3_RRESP; - (* RS_HS = "m_axi_in_3_R.valid" *)input m_axi_in_3_RVALID; - (* RS_HS = "m_axi_in_3_W.data" *)output [511:0] m_axi_in_3_WDATA; - (* RS_HS = "m_axi_in_3_W.data" *)output m_axi_in_3_WLAST; - (* RS_HS = "m_axi_in_3_W.ready" *)input m_axi_in_3_WREADY; - (* RS_HS = "m_axi_in_3_W.data" *)output [63:0] m_axi_in_3_WSTRB; - (* RS_HS = "m_axi_in_3_W.valid" *)output m_axi_in_3_WVALID; - (* RS_HS = "m_axi_out_3_AR.data" *)output [63:0] m_axi_out_3_ARADDR; - (* RS_HS = "m_axi_out_3_AR.data" *)output [1:0] m_axi_out_3_ARBURST; - (* RS_HS = "m_axi_out_3_AR.data" *)output [3:0] m_axi_out_3_ARCACHE; - (* RS_HS = "m_axi_out_3_AR.data" *)output [0:0] m_axi_out_3_ARID; - (* RS_HS = "m_axi_out_3_AR.data" *)output [7:0] m_axi_out_3_ARLEN; - (* RS_HS = "m_axi_out_3_AR.data" *)output m_axi_out_3_ARLOCK; - (* RS_HS = "m_axi_out_3_AR.data" *)output [2:0] m_axi_out_3_ARPROT; - (* RS_HS = "m_axi_out_3_AR.data" *)output [3:0] m_axi_out_3_ARQOS; - (* RS_HS = "m_axi_out_3_AR.ready" *)input m_axi_out_3_ARREADY; - (* RS_HS = "m_axi_out_3_AR.data" *)output [2:0] m_axi_out_3_ARSIZE; - (* RS_HS = "m_axi_out_3_AR.valid" *)output m_axi_out_3_ARVALID; - (* RS_HS = "m_axi_out_3_AW.data" *)output [63:0] m_axi_out_3_AWADDR; - (* RS_HS = "m_axi_out_3_AW.data" *)output [1:0] m_axi_out_3_AWBURST; - (* RS_HS = "m_axi_out_3_AW.data" *)output [3:0] m_axi_out_3_AWCACHE; - (* RS_HS = "m_axi_out_3_AW.data" *)output [0:0] m_axi_out_3_AWID; - (* RS_HS = "m_axi_out_3_AW.data" *)output [7:0] m_axi_out_3_AWLEN; - (* RS_HS = "m_axi_out_3_AW.data" *)output m_axi_out_3_AWLOCK; - (* RS_HS = "m_axi_out_3_AW.data" *)output [2:0] m_axi_out_3_AWPROT; - (* RS_HS = "m_axi_out_3_AW.data" *)output [3:0] m_axi_out_3_AWQOS; - (* RS_HS = "m_axi_out_3_AW.ready" *)input m_axi_out_3_AWREADY; - (* RS_HS = "m_axi_out_3_AW.data" *)output [2:0] m_axi_out_3_AWSIZE; - (* RS_HS = "m_axi_out_3_AW.valid" *)output m_axi_out_3_AWVALID; - (* RS_HS = "m_axi_out_3_B.data" *)input [0:0] m_axi_out_3_BID; - (* RS_HS = "m_axi_out_3_B.ready" *)output m_axi_out_3_BREADY; - (* RS_HS = "m_axi_out_3_B.data" *)input [1:0] m_axi_out_3_BRESP; - (* RS_HS = "m_axi_out_3_B.valid" *)input m_axi_out_3_BVALID; - (* RS_HS = "m_axi_out_3_R.data" *)input [511:0] m_axi_out_3_RDATA; - (* RS_HS = "m_axi_out_3_R.data" *)input [0:0] m_axi_out_3_RID; - (* RS_HS = "m_axi_out_3_R.data" *)input m_axi_out_3_RLAST; - (* RS_HS = "m_axi_out_3_R.ready" *)output m_axi_out_3_RREADY; - (* RS_HS = "m_axi_out_3_R.data" *)input [1:0] m_axi_out_3_RRESP; - (* RS_HS = "m_axi_out_3_R.valid" *)input m_axi_out_3_RVALID; - (* RS_HS = "m_axi_out_3_W.data" *)output [511:0] m_axi_out_3_WDATA; - (* RS_HS = "m_axi_out_3_W.data" *)output m_axi_out_3_WLAST; - (* RS_HS = "m_axi_out_3_W.ready" *)input m_axi_out_3_WREADY; - (* RS_HS = "m_axi_out_3_W.data" *)output [63:0] m_axi_out_3_WSTRB; - (* RS_HS = "m_axi_out_3_W.valid" *)output m_axi_out_3_WVALID; - (* RS_HS = "m_axi_in_4_AR.data" *)output [63:0] m_axi_in_4_ARADDR; - (* RS_HS = "m_axi_in_4_AR.data" *)output [1:0] m_axi_in_4_ARBURST; - (* RS_HS = "m_axi_in_4_AR.data" *)output [3:0] m_axi_in_4_ARCACHE; - (* RS_HS = "m_axi_in_4_AR.data" *)output [0:0] m_axi_in_4_ARID; - (* RS_HS = "m_axi_in_4_AR.data" *)output [7:0] m_axi_in_4_ARLEN; - (* RS_HS = "m_axi_in_4_AR.data" *)output m_axi_in_4_ARLOCK; - (* RS_HS = "m_axi_in_4_AR.data" *)output [2:0] m_axi_in_4_ARPROT; - (* RS_HS = "m_axi_in_4_AR.data" *)output [3:0] m_axi_in_4_ARQOS; - (* RS_HS = "m_axi_in_4_AR.ready" *)input m_axi_in_4_ARREADY; - (* RS_HS = "m_axi_in_4_AR.data" *)output [2:0] m_axi_in_4_ARSIZE; - (* RS_HS = "m_axi_in_4_AR.valid" *)output m_axi_in_4_ARVALID; - (* RS_HS = "m_axi_in_4_AW.data" *)output [63:0] m_axi_in_4_AWADDR; - (* RS_HS = "m_axi_in_4_AW.data" *)output [1:0] m_axi_in_4_AWBURST; - (* RS_HS = "m_axi_in_4_AW.data" *)output [3:0] m_axi_in_4_AWCACHE; - (* RS_HS = "m_axi_in_4_AW.data" *)output [0:0] m_axi_in_4_AWID; - (* RS_HS = "m_axi_in_4_AW.data" *)output [7:0] m_axi_in_4_AWLEN; - (* RS_HS = "m_axi_in_4_AW.data" *)output m_axi_in_4_AWLOCK; - (* RS_HS = "m_axi_in_4_AW.data" *)output [2:0] m_axi_in_4_AWPROT; - (* RS_HS = "m_axi_in_4_AW.data" *)output [3:0] m_axi_in_4_AWQOS; - (* RS_HS = "m_axi_in_4_AW.ready" *)input m_axi_in_4_AWREADY; - (* RS_HS = "m_axi_in_4_AW.data" *)output [2:0] m_axi_in_4_AWSIZE; - (* RS_HS = "m_axi_in_4_AW.valid" *)output m_axi_in_4_AWVALID; - (* RS_HS = "m_axi_in_4_B.data" *)input [0:0] m_axi_in_4_BID; - (* RS_HS = "m_axi_in_4_B.ready" *)output m_axi_in_4_BREADY; - (* RS_HS = "m_axi_in_4_B.data" *)input [1:0] m_axi_in_4_BRESP; - (* RS_HS = "m_axi_in_4_B.valid" *)input m_axi_in_4_BVALID; - (* RS_HS = "m_axi_in_4_R.data" *)input [511:0] m_axi_in_4_RDATA; - (* RS_HS = "m_axi_in_4_R.data" *)input [0:0] m_axi_in_4_RID; - (* RS_HS = "m_axi_in_4_R.data" *)input m_axi_in_4_RLAST; - (* RS_HS = "m_axi_in_4_R.ready" *)output m_axi_in_4_RREADY; - (* RS_HS = "m_axi_in_4_R.data" *)input [1:0] m_axi_in_4_RRESP; - (* RS_HS = "m_axi_in_4_R.valid" *)input m_axi_in_4_RVALID; - (* RS_HS = "m_axi_in_4_W.data" *)output [511:0] m_axi_in_4_WDATA; - (* RS_HS = "m_axi_in_4_W.data" *)output m_axi_in_4_WLAST; - (* RS_HS = "m_axi_in_4_W.ready" *)input m_axi_in_4_WREADY; - (* RS_HS = "m_axi_in_4_W.data" *)output [63:0] m_axi_in_4_WSTRB; - (* RS_HS = "m_axi_in_4_W.valid" *)output m_axi_in_4_WVALID; - (* RS_HS = "m_axi_out_4_AR.data" *)output [63:0] m_axi_out_4_ARADDR; - (* RS_HS = "m_axi_out_4_AR.data" *)output [1:0] m_axi_out_4_ARBURST; - (* RS_HS = "m_axi_out_4_AR.data" *)output [3:0] m_axi_out_4_ARCACHE; - (* RS_HS = "m_axi_out_4_AR.data" *)output [0:0] m_axi_out_4_ARID; - (* RS_HS = "m_axi_out_4_AR.data" *)output [7:0] m_axi_out_4_ARLEN; - (* RS_HS = "m_axi_out_4_AR.data" *)output m_axi_out_4_ARLOCK; - (* RS_HS = "m_axi_out_4_AR.data" *)output [2:0] m_axi_out_4_ARPROT; - (* RS_HS = "m_axi_out_4_AR.data" *)output [3:0] m_axi_out_4_ARQOS; - (* RS_HS = "m_axi_out_4_AR.ready" *)input m_axi_out_4_ARREADY; - (* RS_HS = "m_axi_out_4_AR.data" *)output [2:0] m_axi_out_4_ARSIZE; - (* RS_HS = "m_axi_out_4_AR.valid" *)output m_axi_out_4_ARVALID; - (* RS_HS = "m_axi_out_4_AW.data" *)output [63:0] m_axi_out_4_AWADDR; - (* RS_HS = "m_axi_out_4_AW.data" *)output [1:0] m_axi_out_4_AWBURST; - (* RS_HS = "m_axi_out_4_AW.data" *)output [3:0] m_axi_out_4_AWCACHE; - (* RS_HS = "m_axi_out_4_AW.data" *)output [0:0] m_axi_out_4_AWID; - (* RS_HS = "m_axi_out_4_AW.data" *)output [7:0] m_axi_out_4_AWLEN; - (* RS_HS = "m_axi_out_4_AW.data" *)output m_axi_out_4_AWLOCK; - (* RS_HS = "m_axi_out_4_AW.data" *)output [2:0] m_axi_out_4_AWPROT; - (* RS_HS = "m_axi_out_4_AW.data" *)output [3:0] m_axi_out_4_AWQOS; - (* RS_HS = "m_axi_out_4_AW.ready" *)input m_axi_out_4_AWREADY; - (* RS_HS = "m_axi_out_4_AW.data" *)output [2:0] m_axi_out_4_AWSIZE; - (* RS_HS = "m_axi_out_4_AW.valid" *)output m_axi_out_4_AWVALID; - (* RS_HS = "m_axi_out_4_B.data" *)input [0:0] m_axi_out_4_BID; - (* RS_HS = "m_axi_out_4_B.ready" *)output m_axi_out_4_BREADY; - (* RS_HS = "m_axi_out_4_B.data" *)input [1:0] m_axi_out_4_BRESP; - (* RS_HS = "m_axi_out_4_B.valid" *)input m_axi_out_4_BVALID; - (* RS_HS = "m_axi_out_4_R.data" *)input [511:0] m_axi_out_4_RDATA; - (* RS_HS = "m_axi_out_4_R.data" *)input [0:0] m_axi_out_4_RID; - (* RS_HS = "m_axi_out_4_R.data" *)input m_axi_out_4_RLAST; - (* RS_HS = "m_axi_out_4_R.ready" *)output m_axi_out_4_RREADY; - (* RS_HS = "m_axi_out_4_R.data" *)input [1:0] m_axi_out_4_RRESP; - (* RS_HS = "m_axi_out_4_R.valid" *)input m_axi_out_4_RVALID; - (* RS_HS = "m_axi_out_4_W.data" *)output [511:0] m_axi_out_4_WDATA; - (* RS_HS = "m_axi_out_4_W.data" *)output m_axi_out_4_WLAST; - (* RS_HS = "m_axi_out_4_W.ready" *)input m_axi_out_4_WREADY; - (* RS_HS = "m_axi_out_4_W.data" *)output [63:0] m_axi_out_4_WSTRB; - (* RS_HS = "m_axi_out_4_W.valid" *)output m_axi_out_4_WVALID; - (* RS_HS = "m_axi_in_5_AR.data" *)output [63:0] m_axi_in_5_ARADDR; - (* RS_HS = "m_axi_in_5_AR.data" *)output [1:0] m_axi_in_5_ARBURST; - (* RS_HS = "m_axi_in_5_AR.data" *)output [3:0] m_axi_in_5_ARCACHE; - (* RS_HS = "m_axi_in_5_AR.data" *)output [0:0] m_axi_in_5_ARID; - (* RS_HS = "m_axi_in_5_AR.data" *)output [7:0] m_axi_in_5_ARLEN; - (* RS_HS = "m_axi_in_5_AR.data" *)output m_axi_in_5_ARLOCK; - (* RS_HS = "m_axi_in_5_AR.data" *)output [2:0] m_axi_in_5_ARPROT; - (* RS_HS = "m_axi_in_5_AR.data" *)output [3:0] m_axi_in_5_ARQOS; - (* RS_HS = "m_axi_in_5_AR.ready" *)input m_axi_in_5_ARREADY; - (* RS_HS = "m_axi_in_5_AR.data" *)output [2:0] m_axi_in_5_ARSIZE; - (* RS_HS = "m_axi_in_5_AR.valid" *)output m_axi_in_5_ARVALID; - (* RS_HS = "m_axi_in_5_AW.data" *)output [63:0] m_axi_in_5_AWADDR; - (* RS_HS = "m_axi_in_5_AW.data" *)output [1:0] m_axi_in_5_AWBURST; - (* RS_HS = "m_axi_in_5_AW.data" *)output [3:0] m_axi_in_5_AWCACHE; - (* RS_HS = "m_axi_in_5_AW.data" *)output [0:0] m_axi_in_5_AWID; - (* RS_HS = "m_axi_in_5_AW.data" *)output [7:0] m_axi_in_5_AWLEN; - (* RS_HS = "m_axi_in_5_AW.data" *)output m_axi_in_5_AWLOCK; - (* RS_HS = "m_axi_in_5_AW.data" *)output [2:0] m_axi_in_5_AWPROT; - (* RS_HS = "m_axi_in_5_AW.data" *)output [3:0] m_axi_in_5_AWQOS; - (* RS_HS = "m_axi_in_5_AW.ready" *)input m_axi_in_5_AWREADY; - (* RS_HS = "m_axi_in_5_AW.data" *)output [2:0] m_axi_in_5_AWSIZE; - (* RS_HS = "m_axi_in_5_AW.valid" *)output m_axi_in_5_AWVALID; - (* RS_HS = "m_axi_in_5_B.data" *)input [0:0] m_axi_in_5_BID; - (* RS_HS = "m_axi_in_5_B.ready" *)output m_axi_in_5_BREADY; - (* RS_HS = "m_axi_in_5_B.data" *)input [1:0] m_axi_in_5_BRESP; - (* RS_HS = "m_axi_in_5_B.valid" *)input m_axi_in_5_BVALID; - (* RS_HS = "m_axi_in_5_R.data" *)input [511:0] m_axi_in_5_RDATA; - (* RS_HS = "m_axi_in_5_R.data" *)input [0:0] m_axi_in_5_RID; - (* RS_HS = "m_axi_in_5_R.data" *)input m_axi_in_5_RLAST; - (* RS_HS = "m_axi_in_5_R.ready" *)output m_axi_in_5_RREADY; - (* RS_HS = "m_axi_in_5_R.data" *)input [1:0] m_axi_in_5_RRESP; - (* RS_HS = "m_axi_in_5_R.valid" *)input m_axi_in_5_RVALID; - (* RS_HS = "m_axi_in_5_W.data" *)output [511:0] m_axi_in_5_WDATA; - (* RS_HS = "m_axi_in_5_W.data" *)output m_axi_in_5_WLAST; - (* RS_HS = "m_axi_in_5_W.ready" *)input m_axi_in_5_WREADY; - (* RS_HS = "m_axi_in_5_W.data" *)output [63:0] m_axi_in_5_WSTRB; - (* RS_HS = "m_axi_in_5_W.valid" *)output m_axi_in_5_WVALID; - (* RS_HS = "m_axi_out_5_AR.data" *)output [63:0] m_axi_out_5_ARADDR; - (* RS_HS = "m_axi_out_5_AR.data" *)output [1:0] m_axi_out_5_ARBURST; - (* RS_HS = "m_axi_out_5_AR.data" *)output [3:0] m_axi_out_5_ARCACHE; - (* RS_HS = "m_axi_out_5_AR.data" *)output [0:0] m_axi_out_5_ARID; - (* RS_HS = "m_axi_out_5_AR.data" *)output [7:0] m_axi_out_5_ARLEN; - (* RS_HS = "m_axi_out_5_AR.data" *)output m_axi_out_5_ARLOCK; - (* RS_HS = "m_axi_out_5_AR.data" *)output [2:0] m_axi_out_5_ARPROT; - (* RS_HS = "m_axi_out_5_AR.data" *)output [3:0] m_axi_out_5_ARQOS; - (* RS_HS = "m_axi_out_5_AR.ready" *)input m_axi_out_5_ARREADY; - (* RS_HS = "m_axi_out_5_AR.data" *)output [2:0] m_axi_out_5_ARSIZE; - (* RS_HS = "m_axi_out_5_AR.valid" *)output m_axi_out_5_ARVALID; - (* RS_HS = "m_axi_out_5_AW.data" *)output [63:0] m_axi_out_5_AWADDR; - (* RS_HS = "m_axi_out_5_AW.data" *)output [1:0] m_axi_out_5_AWBURST; - (* RS_HS = "m_axi_out_5_AW.data" *)output [3:0] m_axi_out_5_AWCACHE; - (* RS_HS = "m_axi_out_5_AW.data" *)output [0:0] m_axi_out_5_AWID; - (* RS_HS = "m_axi_out_5_AW.data" *)output [7:0] m_axi_out_5_AWLEN; - (* RS_HS = "m_axi_out_5_AW.data" *)output m_axi_out_5_AWLOCK; - (* RS_HS = "m_axi_out_5_AW.data" *)output [2:0] m_axi_out_5_AWPROT; - (* RS_HS = "m_axi_out_5_AW.data" *)output [3:0] m_axi_out_5_AWQOS; - (* RS_HS = "m_axi_out_5_AW.ready" *)input m_axi_out_5_AWREADY; - (* RS_HS = "m_axi_out_5_AW.data" *)output [2:0] m_axi_out_5_AWSIZE; - (* RS_HS = "m_axi_out_5_AW.valid" *)output m_axi_out_5_AWVALID; - (* RS_HS = "m_axi_out_5_B.data" *)input [0:0] m_axi_out_5_BID; - (* RS_HS = "m_axi_out_5_B.ready" *)output m_axi_out_5_BREADY; - (* RS_HS = "m_axi_out_5_B.data" *)input [1:0] m_axi_out_5_BRESP; - (* RS_HS = "m_axi_out_5_B.valid" *)input m_axi_out_5_BVALID; - (* RS_HS = "m_axi_out_5_R.data" *)input [511:0] m_axi_out_5_RDATA; - (* RS_HS = "m_axi_out_5_R.data" *)input [0:0] m_axi_out_5_RID; - (* RS_HS = "m_axi_out_5_R.data" *)input m_axi_out_5_RLAST; - (* RS_HS = "m_axi_out_5_R.ready" *)output m_axi_out_5_RREADY; - (* RS_HS = "m_axi_out_5_R.data" *)input [1:0] m_axi_out_5_RRESP; - (* RS_HS = "m_axi_out_5_R.valid" *)input m_axi_out_5_RVALID; - (* RS_HS = "m_axi_out_5_W.data" *)output [511:0] m_axi_out_5_WDATA; - (* RS_HS = "m_axi_out_5_W.data" *)output m_axi_out_5_WLAST; - (* RS_HS = "m_axi_out_5_W.ready" *)input m_axi_out_5_WREADY; - (* RS_HS = "m_axi_out_5_W.data" *)output [63:0] m_axi_out_5_WSTRB; - (* RS_HS = "m_axi_out_5_W.valid" *)output m_axi_out_5_WVALID; - (* RS_HS = "m_axi_in_6_AR.data" *)output [63:0] m_axi_in_6_ARADDR; - (* RS_HS = "m_axi_in_6_AR.data" *)output [1:0] m_axi_in_6_ARBURST; - (* RS_HS = "m_axi_in_6_AR.data" *)output [3:0] m_axi_in_6_ARCACHE; - (* RS_HS = "m_axi_in_6_AR.data" *)output [0:0] m_axi_in_6_ARID; - (* RS_HS = "m_axi_in_6_AR.data" *)output [7:0] m_axi_in_6_ARLEN; - (* RS_HS = "m_axi_in_6_AR.data" *)output m_axi_in_6_ARLOCK; - (* RS_HS = "m_axi_in_6_AR.data" *)output [2:0] m_axi_in_6_ARPROT; - (* RS_HS = "m_axi_in_6_AR.data" *)output [3:0] m_axi_in_6_ARQOS; - (* RS_HS = "m_axi_in_6_AR.ready" *)input m_axi_in_6_ARREADY; - (* RS_HS = "m_axi_in_6_AR.data" *)output [2:0] m_axi_in_6_ARSIZE; - (* RS_HS = "m_axi_in_6_AR.valid" *)output m_axi_in_6_ARVALID; - (* RS_HS = "m_axi_in_6_AW.data" *)output [63:0] m_axi_in_6_AWADDR; - (* RS_HS = "m_axi_in_6_AW.data" *)output [1:0] m_axi_in_6_AWBURST; - (* RS_HS = "m_axi_in_6_AW.data" *)output [3:0] m_axi_in_6_AWCACHE; - (* RS_HS = "m_axi_in_6_AW.data" *)output [0:0] m_axi_in_6_AWID; - (* RS_HS = "m_axi_in_6_AW.data" *)output [7:0] m_axi_in_6_AWLEN; - (* RS_HS = "m_axi_in_6_AW.data" *)output m_axi_in_6_AWLOCK; - (* RS_HS = "m_axi_in_6_AW.data" *)output [2:0] m_axi_in_6_AWPROT; - (* RS_HS = "m_axi_in_6_AW.data" *)output [3:0] m_axi_in_6_AWQOS; - (* RS_HS = "m_axi_in_6_AW.ready" *)input m_axi_in_6_AWREADY; - (* RS_HS = "m_axi_in_6_AW.data" *)output [2:0] m_axi_in_6_AWSIZE; - (* RS_HS = "m_axi_in_6_AW.valid" *)output m_axi_in_6_AWVALID; - (* RS_HS = "m_axi_in_6_B.data" *)input [0:0] m_axi_in_6_BID; - (* RS_HS = "m_axi_in_6_B.ready" *)output m_axi_in_6_BREADY; - (* RS_HS = "m_axi_in_6_B.data" *)input [1:0] m_axi_in_6_BRESP; - (* RS_HS = "m_axi_in_6_B.valid" *)input m_axi_in_6_BVALID; - (* RS_HS = "m_axi_in_6_R.data" *)input [511:0] m_axi_in_6_RDATA; - (* RS_HS = "m_axi_in_6_R.data" *)input [0:0] m_axi_in_6_RID; - (* RS_HS = "m_axi_in_6_R.data" *)input m_axi_in_6_RLAST; - (* RS_HS = "m_axi_in_6_R.ready" *)output m_axi_in_6_RREADY; - (* RS_HS = "m_axi_in_6_R.data" *)input [1:0] m_axi_in_6_RRESP; - (* RS_HS = "m_axi_in_6_R.valid" *)input m_axi_in_6_RVALID; - (* RS_HS = "m_axi_in_6_W.data" *)output [511:0] m_axi_in_6_WDATA; - (* RS_HS = "m_axi_in_6_W.data" *)output m_axi_in_6_WLAST; - (* RS_HS = "m_axi_in_6_W.ready" *)input m_axi_in_6_WREADY; - (* RS_HS = "m_axi_in_6_W.data" *)output [63:0] m_axi_in_6_WSTRB; - (* RS_HS = "m_axi_in_6_W.valid" *)output m_axi_in_6_WVALID; - (* RS_HS = "m_axi_out_6_AR.data" *)output [63:0] m_axi_out_6_ARADDR; - (* RS_HS = "m_axi_out_6_AR.data" *)output [1:0] m_axi_out_6_ARBURST; - (* RS_HS = "m_axi_out_6_AR.data" *)output [3:0] m_axi_out_6_ARCACHE; - (* RS_HS = "m_axi_out_6_AR.data" *)output [0:0] m_axi_out_6_ARID; - (* RS_HS = "m_axi_out_6_AR.data" *)output [7:0] m_axi_out_6_ARLEN; - (* RS_HS = "m_axi_out_6_AR.data" *)output m_axi_out_6_ARLOCK; - (* RS_HS = "m_axi_out_6_AR.data" *)output [2:0] m_axi_out_6_ARPROT; - (* RS_HS = "m_axi_out_6_AR.data" *)output [3:0] m_axi_out_6_ARQOS; - (* RS_HS = "m_axi_out_6_AR.ready" *)input m_axi_out_6_ARREADY; - (* RS_HS = "m_axi_out_6_AR.data" *)output [2:0] m_axi_out_6_ARSIZE; - (* RS_HS = "m_axi_out_6_AR.valid" *)output m_axi_out_6_ARVALID; - (* RS_HS = "m_axi_out_6_AW.data" *)output [63:0] m_axi_out_6_AWADDR; - (* RS_HS = "m_axi_out_6_AW.data" *)output [1:0] m_axi_out_6_AWBURST; - (* RS_HS = "m_axi_out_6_AW.data" *)output [3:0] m_axi_out_6_AWCACHE; - (* RS_HS = "m_axi_out_6_AW.data" *)output [0:0] m_axi_out_6_AWID; - (* RS_HS = "m_axi_out_6_AW.data" *)output [7:0] m_axi_out_6_AWLEN; - (* RS_HS = "m_axi_out_6_AW.data" *)output m_axi_out_6_AWLOCK; - (* RS_HS = "m_axi_out_6_AW.data" *)output [2:0] m_axi_out_6_AWPROT; - (* RS_HS = "m_axi_out_6_AW.data" *)output [3:0] m_axi_out_6_AWQOS; - (* RS_HS = "m_axi_out_6_AW.ready" *)input m_axi_out_6_AWREADY; - (* RS_HS = "m_axi_out_6_AW.data" *)output [2:0] m_axi_out_6_AWSIZE; - (* RS_HS = "m_axi_out_6_AW.valid" *)output m_axi_out_6_AWVALID; - (* RS_HS = "m_axi_out_6_B.data" *)input [0:0] m_axi_out_6_BID; - (* RS_HS = "m_axi_out_6_B.ready" *)output m_axi_out_6_BREADY; - (* RS_HS = "m_axi_out_6_B.data" *)input [1:0] m_axi_out_6_BRESP; - (* RS_HS = "m_axi_out_6_B.valid" *)input m_axi_out_6_BVALID; - (* RS_HS = "m_axi_out_6_R.data" *)input [511:0] m_axi_out_6_RDATA; - (* RS_HS = "m_axi_out_6_R.data" *)input [0:0] m_axi_out_6_RID; - (* RS_HS = "m_axi_out_6_R.data" *)input m_axi_out_6_RLAST; - (* RS_HS = "m_axi_out_6_R.ready" *)output m_axi_out_6_RREADY; - (* RS_HS = "m_axi_out_6_R.data" *)input [1:0] m_axi_out_6_RRESP; - (* RS_HS = "m_axi_out_6_R.valid" *)input m_axi_out_6_RVALID; - (* RS_HS = "m_axi_out_6_W.data" *)output [511:0] m_axi_out_6_WDATA; - (* RS_HS = "m_axi_out_6_W.data" *)output m_axi_out_6_WLAST; - (* RS_HS = "m_axi_out_6_W.ready" *)input m_axi_out_6_WREADY; - (* RS_HS = "m_axi_out_6_W.data" *)output [63:0] m_axi_out_6_WSTRB; - (* RS_HS = "m_axi_out_6_W.valid" *)output m_axi_out_6_WVALID; - (* RS_HS = "m_axi_in_7_AR.data" *)output [63:0] m_axi_in_7_ARADDR; - (* RS_HS = "m_axi_in_7_AR.data" *)output [1:0] m_axi_in_7_ARBURST; - (* RS_HS = "m_axi_in_7_AR.data" *)output [3:0] m_axi_in_7_ARCACHE; - (* RS_HS = "m_axi_in_7_AR.data" *)output [0:0] m_axi_in_7_ARID; - (* RS_HS = "m_axi_in_7_AR.data" *)output [7:0] m_axi_in_7_ARLEN; - (* RS_HS = "m_axi_in_7_AR.data" *)output m_axi_in_7_ARLOCK; - (* RS_HS = "m_axi_in_7_AR.data" *)output [2:0] m_axi_in_7_ARPROT; - (* RS_HS = "m_axi_in_7_AR.data" *)output [3:0] m_axi_in_7_ARQOS; - (* RS_HS = "m_axi_in_7_AR.ready" *)input m_axi_in_7_ARREADY; - (* RS_HS = "m_axi_in_7_AR.data" *)output [2:0] m_axi_in_7_ARSIZE; - (* RS_HS = "m_axi_in_7_AR.valid" *)output m_axi_in_7_ARVALID; - (* RS_HS = "m_axi_in_7_AW.data" *)output [63:0] m_axi_in_7_AWADDR; - (* RS_HS = "m_axi_in_7_AW.data" *)output [1:0] m_axi_in_7_AWBURST; - (* RS_HS = "m_axi_in_7_AW.data" *)output [3:0] m_axi_in_7_AWCACHE; - (* RS_HS = "m_axi_in_7_AW.data" *)output [0:0] m_axi_in_7_AWID; - (* RS_HS = "m_axi_in_7_AW.data" *)output [7:0] m_axi_in_7_AWLEN; - (* RS_HS = "m_axi_in_7_AW.data" *)output m_axi_in_7_AWLOCK; - (* RS_HS = "m_axi_in_7_AW.data" *)output [2:0] m_axi_in_7_AWPROT; - (* RS_HS = "m_axi_in_7_AW.data" *)output [3:0] m_axi_in_7_AWQOS; - (* RS_HS = "m_axi_in_7_AW.ready" *)input m_axi_in_7_AWREADY; - (* RS_HS = "m_axi_in_7_AW.data" *)output [2:0] m_axi_in_7_AWSIZE; - (* RS_HS = "m_axi_in_7_AW.valid" *)output m_axi_in_7_AWVALID; - (* RS_HS = "m_axi_in_7_B.data" *)input [0:0] m_axi_in_7_BID; - (* RS_HS = "m_axi_in_7_B.ready" *)output m_axi_in_7_BREADY; - (* RS_HS = "m_axi_in_7_B.data" *)input [1:0] m_axi_in_7_BRESP; - (* RS_HS = "m_axi_in_7_B.valid" *)input m_axi_in_7_BVALID; - (* RS_HS = "m_axi_in_7_R.data" *)input [511:0] m_axi_in_7_RDATA; - (* RS_HS = "m_axi_in_7_R.data" *)input [0:0] m_axi_in_7_RID; - (* RS_HS = "m_axi_in_7_R.data" *)input m_axi_in_7_RLAST; - (* RS_HS = "m_axi_in_7_R.ready" *)output m_axi_in_7_RREADY; - (* RS_HS = "m_axi_in_7_R.data" *)input [1:0] m_axi_in_7_RRESP; - (* RS_HS = "m_axi_in_7_R.valid" *)input m_axi_in_7_RVALID; - (* RS_HS = "m_axi_in_7_W.data" *)output [511:0] m_axi_in_7_WDATA; - (* RS_HS = "m_axi_in_7_W.data" *)output m_axi_in_7_WLAST; - (* RS_HS = "m_axi_in_7_W.ready" *)input m_axi_in_7_WREADY; - (* RS_HS = "m_axi_in_7_W.data" *)output [63:0] m_axi_in_7_WSTRB; - (* RS_HS = "m_axi_in_7_W.valid" *)output m_axi_in_7_WVALID; - (* RS_HS = "m_axi_out_7_AR.data" *)output [63:0] m_axi_out_7_ARADDR; - (* RS_HS = "m_axi_out_7_AR.data" *)output [1:0] m_axi_out_7_ARBURST; - (* RS_HS = "m_axi_out_7_AR.data" *)output [3:0] m_axi_out_7_ARCACHE; - (* RS_HS = "m_axi_out_7_AR.data" *)output [0:0] m_axi_out_7_ARID; - (* RS_HS = "m_axi_out_7_AR.data" *)output [7:0] m_axi_out_7_ARLEN; - (* RS_HS = "m_axi_out_7_AR.data" *)output m_axi_out_7_ARLOCK; - (* RS_HS = "m_axi_out_7_AR.data" *)output [2:0] m_axi_out_7_ARPROT; - (* RS_HS = "m_axi_out_7_AR.data" *)output [3:0] m_axi_out_7_ARQOS; - (* RS_HS = "m_axi_out_7_AR.ready" *)input m_axi_out_7_ARREADY; - (* RS_HS = "m_axi_out_7_AR.data" *)output [2:0] m_axi_out_7_ARSIZE; - (* RS_HS = "m_axi_out_7_AR.valid" *)output m_axi_out_7_ARVALID; - (* RS_HS = "m_axi_out_7_AW.data" *)output [63:0] m_axi_out_7_AWADDR; - (* RS_HS = "m_axi_out_7_AW.data" *)output [1:0] m_axi_out_7_AWBURST; - (* RS_HS = "m_axi_out_7_AW.data" *)output [3:0] m_axi_out_7_AWCACHE; - (* RS_HS = "m_axi_out_7_AW.data" *)output [0:0] m_axi_out_7_AWID; - (* RS_HS = "m_axi_out_7_AW.data" *)output [7:0] m_axi_out_7_AWLEN; - (* RS_HS = "m_axi_out_7_AW.data" *)output m_axi_out_7_AWLOCK; - (* RS_HS = "m_axi_out_7_AW.data" *)output [2:0] m_axi_out_7_AWPROT; - (* RS_HS = "m_axi_out_7_AW.data" *)output [3:0] m_axi_out_7_AWQOS; - (* RS_HS = "m_axi_out_7_AW.ready" *)input m_axi_out_7_AWREADY; - (* RS_HS = "m_axi_out_7_AW.data" *)output [2:0] m_axi_out_7_AWSIZE; - (* RS_HS = "m_axi_out_7_AW.valid" *)output m_axi_out_7_AWVALID; - (* RS_HS = "m_axi_out_7_B.data" *)input [0:0] m_axi_out_7_BID; - (* RS_HS = "m_axi_out_7_B.ready" *)output m_axi_out_7_BREADY; - (* RS_HS = "m_axi_out_7_B.data" *)input [1:0] m_axi_out_7_BRESP; - (* RS_HS = "m_axi_out_7_B.valid" *)input m_axi_out_7_BVALID; - (* RS_HS = "m_axi_out_7_R.data" *)input [511:0] m_axi_out_7_RDATA; - (* RS_HS = "m_axi_out_7_R.data" *)input [0:0] m_axi_out_7_RID; - (* RS_HS = "m_axi_out_7_R.data" *)input m_axi_out_7_RLAST; - (* RS_HS = "m_axi_out_7_R.ready" *)output m_axi_out_7_RREADY; - (* RS_HS = "m_axi_out_7_R.data" *)input [1:0] m_axi_out_7_RRESP; - (* RS_HS = "m_axi_out_7_R.valid" *)input m_axi_out_7_RVALID; - (* RS_HS = "m_axi_out_7_W.data" *)output [511:0] m_axi_out_7_WDATA; - (* RS_HS = "m_axi_out_7_W.data" *)output m_axi_out_7_WLAST; - (* RS_HS = "m_axi_out_7_W.ready" *)input m_axi_out_7_WREADY; - (* RS_HS = "m_axi_out_7_W.data" *)output [63:0] m_axi_out_7_WSTRB; - (* RS_HS = "m_axi_out_7_W.valid" *)output m_axi_out_7_WVALID; - (* RS_HS = "m_axi_in_8_AR.data" *)output [63:0] m_axi_in_8_ARADDR; - (* RS_HS = "m_axi_in_8_AR.data" *)output [1:0] m_axi_in_8_ARBURST; - (* RS_HS = "m_axi_in_8_AR.data" *)output [3:0] m_axi_in_8_ARCACHE; - (* RS_HS = "m_axi_in_8_AR.data" *)output [0:0] m_axi_in_8_ARID; - (* RS_HS = "m_axi_in_8_AR.data" *)output [7:0] m_axi_in_8_ARLEN; - (* RS_HS = "m_axi_in_8_AR.data" *)output m_axi_in_8_ARLOCK; - (* RS_HS = "m_axi_in_8_AR.data" *)output [2:0] m_axi_in_8_ARPROT; - (* RS_HS = "m_axi_in_8_AR.data" *)output [3:0] m_axi_in_8_ARQOS; - (* RS_HS = "m_axi_in_8_AR.ready" *)input m_axi_in_8_ARREADY; - (* RS_HS = "m_axi_in_8_AR.data" *)output [2:0] m_axi_in_8_ARSIZE; - (* RS_HS = "m_axi_in_8_AR.valid" *)output m_axi_in_8_ARVALID; - (* RS_HS = "m_axi_in_8_AW.data" *)output [63:0] m_axi_in_8_AWADDR; - (* RS_HS = "m_axi_in_8_AW.data" *)output [1:0] m_axi_in_8_AWBURST; - (* RS_HS = "m_axi_in_8_AW.data" *)output [3:0] m_axi_in_8_AWCACHE; - (* RS_HS = "m_axi_in_8_AW.data" *)output [0:0] m_axi_in_8_AWID; - (* RS_HS = "m_axi_in_8_AW.data" *)output [7:0] m_axi_in_8_AWLEN; - (* RS_HS = "m_axi_in_8_AW.data" *)output m_axi_in_8_AWLOCK; - (* RS_HS = "m_axi_in_8_AW.data" *)output [2:0] m_axi_in_8_AWPROT; - (* RS_HS = "m_axi_in_8_AW.data" *)output [3:0] m_axi_in_8_AWQOS; - (* RS_HS = "m_axi_in_8_AW.ready" *)input m_axi_in_8_AWREADY; - (* RS_HS = "m_axi_in_8_AW.data" *)output [2:0] m_axi_in_8_AWSIZE; - (* RS_HS = "m_axi_in_8_AW.valid" *)output m_axi_in_8_AWVALID; - (* RS_HS = "m_axi_in_8_B.data" *)input [0:0] m_axi_in_8_BID; - (* RS_HS = "m_axi_in_8_B.ready" *)output m_axi_in_8_BREADY; - (* RS_HS = "m_axi_in_8_B.data" *)input [1:0] m_axi_in_8_BRESP; - (* RS_HS = "m_axi_in_8_B.valid" *)input m_axi_in_8_BVALID; - (* RS_HS = "m_axi_in_8_R.data" *)input [511:0] m_axi_in_8_RDATA; - (* RS_HS = "m_axi_in_8_R.data" *)input [0:0] m_axi_in_8_RID; - (* RS_HS = "m_axi_in_8_R.data" *)input m_axi_in_8_RLAST; - (* RS_HS = "m_axi_in_8_R.ready" *)output m_axi_in_8_RREADY; - (* RS_HS = "m_axi_in_8_R.data" *)input [1:0] m_axi_in_8_RRESP; - (* RS_HS = "m_axi_in_8_R.valid" *)input m_axi_in_8_RVALID; - (* RS_HS = "m_axi_in_8_W.data" *)output [511:0] m_axi_in_8_WDATA; - (* RS_HS = "m_axi_in_8_W.data" *)output m_axi_in_8_WLAST; - (* RS_HS = "m_axi_in_8_W.ready" *)input m_axi_in_8_WREADY; - (* RS_HS = "m_axi_in_8_W.data" *)output [63:0] m_axi_in_8_WSTRB; - (* RS_HS = "m_axi_in_8_W.valid" *)output m_axi_in_8_WVALID; - (* RS_HS = "m_axi_out_8_AR.data" *)output [63:0] m_axi_out_8_ARADDR; - (* RS_HS = "m_axi_out_8_AR.data" *)output [1:0] m_axi_out_8_ARBURST; - (* RS_HS = "m_axi_out_8_AR.data" *)output [3:0] m_axi_out_8_ARCACHE; - (* RS_HS = "m_axi_out_8_AR.data" *)output [0:0] m_axi_out_8_ARID; - (* RS_HS = "m_axi_out_8_AR.data" *)output [7:0] m_axi_out_8_ARLEN; - (* RS_HS = "m_axi_out_8_AR.data" *)output m_axi_out_8_ARLOCK; - (* RS_HS = "m_axi_out_8_AR.data" *)output [2:0] m_axi_out_8_ARPROT; - (* RS_HS = "m_axi_out_8_AR.data" *)output [3:0] m_axi_out_8_ARQOS; - (* RS_HS = "m_axi_out_8_AR.ready" *)input m_axi_out_8_ARREADY; - (* RS_HS = "m_axi_out_8_AR.data" *)output [2:0] m_axi_out_8_ARSIZE; - (* RS_HS = "m_axi_out_8_AR.valid" *)output m_axi_out_8_ARVALID; - (* RS_HS = "m_axi_out_8_AW.data" *)output [63:0] m_axi_out_8_AWADDR; - (* RS_HS = "m_axi_out_8_AW.data" *)output [1:0] m_axi_out_8_AWBURST; - (* RS_HS = "m_axi_out_8_AW.data" *)output [3:0] m_axi_out_8_AWCACHE; - (* RS_HS = "m_axi_out_8_AW.data" *)output [0:0] m_axi_out_8_AWID; - (* RS_HS = "m_axi_out_8_AW.data" *)output [7:0] m_axi_out_8_AWLEN; - (* RS_HS = "m_axi_out_8_AW.data" *)output m_axi_out_8_AWLOCK; - (* RS_HS = "m_axi_out_8_AW.data" *)output [2:0] m_axi_out_8_AWPROT; - (* RS_HS = "m_axi_out_8_AW.data" *)output [3:0] m_axi_out_8_AWQOS; - (* RS_HS = "m_axi_out_8_AW.ready" *)input m_axi_out_8_AWREADY; - (* RS_HS = "m_axi_out_8_AW.data" *)output [2:0] m_axi_out_8_AWSIZE; - (* RS_HS = "m_axi_out_8_AW.valid" *)output m_axi_out_8_AWVALID; - (* RS_HS = "m_axi_out_8_B.data" *)input [0:0] m_axi_out_8_BID; - (* RS_HS = "m_axi_out_8_B.ready" *)output m_axi_out_8_BREADY; - (* RS_HS = "m_axi_out_8_B.data" *)input [1:0] m_axi_out_8_BRESP; - (* RS_HS = "m_axi_out_8_B.valid" *)input m_axi_out_8_BVALID; - (* RS_HS = "m_axi_out_8_R.data" *)input [511:0] m_axi_out_8_RDATA; - (* RS_HS = "m_axi_out_8_R.data" *)input [0:0] m_axi_out_8_RID; - (* RS_HS = "m_axi_out_8_R.data" *)input m_axi_out_8_RLAST; - (* RS_HS = "m_axi_out_8_R.ready" *)output m_axi_out_8_RREADY; - (* RS_HS = "m_axi_out_8_R.data" *)input [1:0] m_axi_out_8_RRESP; - (* RS_HS = "m_axi_out_8_R.valid" *)input m_axi_out_8_RVALID; - (* RS_HS = "m_axi_out_8_W.data" *)output [511:0] m_axi_out_8_WDATA; - (* RS_HS = "m_axi_out_8_W.data" *)output m_axi_out_8_WLAST; - (* RS_HS = "m_axi_out_8_W.ready" *)input m_axi_out_8_WREADY; - (* RS_HS = "m_axi_out_8_W.data" *)output [63:0] m_axi_out_8_WSTRB; - (* RS_HS = "m_axi_out_8_W.valid" *)output m_axi_out_8_WVALID; - (* RS_HS = "m_axi_in_9_AR.data" *)output [63:0] m_axi_in_9_ARADDR; - (* RS_HS = "m_axi_in_9_AR.data" *)output [1:0] m_axi_in_9_ARBURST; - (* RS_HS = "m_axi_in_9_AR.data" *)output [3:0] m_axi_in_9_ARCACHE; - (* RS_HS = "m_axi_in_9_AR.data" *)output [0:0] m_axi_in_9_ARID; - (* RS_HS = "m_axi_in_9_AR.data" *)output [7:0] m_axi_in_9_ARLEN; - (* RS_HS = "m_axi_in_9_AR.data" *)output m_axi_in_9_ARLOCK; - (* RS_HS = "m_axi_in_9_AR.data" *)output [2:0] m_axi_in_9_ARPROT; - (* RS_HS = "m_axi_in_9_AR.data" *)output [3:0] m_axi_in_9_ARQOS; - (* RS_HS = "m_axi_in_9_AR.ready" *)input m_axi_in_9_ARREADY; - (* RS_HS = "m_axi_in_9_AR.data" *)output [2:0] m_axi_in_9_ARSIZE; - (* RS_HS = "m_axi_in_9_AR.valid" *)output m_axi_in_9_ARVALID; - (* RS_HS = "m_axi_in_9_AW.data" *)output [63:0] m_axi_in_9_AWADDR; - (* RS_HS = "m_axi_in_9_AW.data" *)output [1:0] m_axi_in_9_AWBURST; - (* RS_HS = "m_axi_in_9_AW.data" *)output [3:0] m_axi_in_9_AWCACHE; - (* RS_HS = "m_axi_in_9_AW.data" *)output [0:0] m_axi_in_9_AWID; - (* RS_HS = "m_axi_in_9_AW.data" *)output [7:0] m_axi_in_9_AWLEN; - (* RS_HS = "m_axi_in_9_AW.data" *)output m_axi_in_9_AWLOCK; - (* RS_HS = "m_axi_in_9_AW.data" *)output [2:0] m_axi_in_9_AWPROT; - (* RS_HS = "m_axi_in_9_AW.data" *)output [3:0] m_axi_in_9_AWQOS; - (* RS_HS = "m_axi_in_9_AW.ready" *)input m_axi_in_9_AWREADY; - (* RS_HS = "m_axi_in_9_AW.data" *)output [2:0] m_axi_in_9_AWSIZE; - (* RS_HS = "m_axi_in_9_AW.valid" *)output m_axi_in_9_AWVALID; - (* RS_HS = "m_axi_in_9_B.data" *)input [0:0] m_axi_in_9_BID; - (* RS_HS = "m_axi_in_9_B.ready" *)output m_axi_in_9_BREADY; - (* RS_HS = "m_axi_in_9_B.data" *)input [1:0] m_axi_in_9_BRESP; - (* RS_HS = "m_axi_in_9_B.valid" *)input m_axi_in_9_BVALID; - (* RS_HS = "m_axi_in_9_R.data" *)input [511:0] m_axi_in_9_RDATA; - (* RS_HS = "m_axi_in_9_R.data" *)input [0:0] m_axi_in_9_RID; - (* RS_HS = "m_axi_in_9_R.data" *)input m_axi_in_9_RLAST; - (* RS_HS = "m_axi_in_9_R.ready" *)output m_axi_in_9_RREADY; - (* RS_HS = "m_axi_in_9_R.data" *)input [1:0] m_axi_in_9_RRESP; - (* RS_HS = "m_axi_in_9_R.valid" *)input m_axi_in_9_RVALID; - (* RS_HS = "m_axi_in_9_W.data" *)output [511:0] m_axi_in_9_WDATA; - (* RS_HS = "m_axi_in_9_W.data" *)output m_axi_in_9_WLAST; - (* RS_HS = "m_axi_in_9_W.ready" *)input m_axi_in_9_WREADY; - (* RS_HS = "m_axi_in_9_W.data" *)output [63:0] m_axi_in_9_WSTRB; - (* RS_HS = "m_axi_in_9_W.valid" *)output m_axi_in_9_WVALID; - (* RS_HS = "m_axi_out_9_AR.data" *)output [63:0] m_axi_out_9_ARADDR; - (* RS_HS = "m_axi_out_9_AR.data" *)output [1:0] m_axi_out_9_ARBURST; - (* RS_HS = "m_axi_out_9_AR.data" *)output [3:0] m_axi_out_9_ARCACHE; - (* RS_HS = "m_axi_out_9_AR.data" *)output [0:0] m_axi_out_9_ARID; - (* RS_HS = "m_axi_out_9_AR.data" *)output [7:0] m_axi_out_9_ARLEN; - (* RS_HS = "m_axi_out_9_AR.data" *)output m_axi_out_9_ARLOCK; - (* RS_HS = "m_axi_out_9_AR.data" *)output [2:0] m_axi_out_9_ARPROT; - (* RS_HS = "m_axi_out_9_AR.data" *)output [3:0] m_axi_out_9_ARQOS; - (* RS_HS = "m_axi_out_9_AR.ready" *)input m_axi_out_9_ARREADY; - (* RS_HS = "m_axi_out_9_AR.data" *)output [2:0] m_axi_out_9_ARSIZE; - (* RS_HS = "m_axi_out_9_AR.valid" *)output m_axi_out_9_ARVALID; - (* RS_HS = "m_axi_out_9_AW.data" *)output [63:0] m_axi_out_9_AWADDR; - (* RS_HS = "m_axi_out_9_AW.data" *)output [1:0] m_axi_out_9_AWBURST; - (* RS_HS = "m_axi_out_9_AW.data" *)output [3:0] m_axi_out_9_AWCACHE; - (* RS_HS = "m_axi_out_9_AW.data" *)output [0:0] m_axi_out_9_AWID; - (* RS_HS = "m_axi_out_9_AW.data" *)output [7:0] m_axi_out_9_AWLEN; - (* RS_HS = "m_axi_out_9_AW.data" *)output m_axi_out_9_AWLOCK; - (* RS_HS = "m_axi_out_9_AW.data" *)output [2:0] m_axi_out_9_AWPROT; - (* RS_HS = "m_axi_out_9_AW.data" *)output [3:0] m_axi_out_9_AWQOS; - (* RS_HS = "m_axi_out_9_AW.ready" *)input m_axi_out_9_AWREADY; - (* RS_HS = "m_axi_out_9_AW.data" *)output [2:0] m_axi_out_9_AWSIZE; - (* RS_HS = "m_axi_out_9_AW.valid" *)output m_axi_out_9_AWVALID; - (* RS_HS = "m_axi_out_9_B.data" *)input [0:0] m_axi_out_9_BID; - (* RS_HS = "m_axi_out_9_B.ready" *)output m_axi_out_9_BREADY; - (* RS_HS = "m_axi_out_9_B.data" *)input [1:0] m_axi_out_9_BRESP; - (* RS_HS = "m_axi_out_9_B.valid" *)input m_axi_out_9_BVALID; - (* RS_HS = "m_axi_out_9_R.data" *)input [511:0] m_axi_out_9_RDATA; - (* RS_HS = "m_axi_out_9_R.data" *)input [0:0] m_axi_out_9_RID; - (* RS_HS = "m_axi_out_9_R.data" *)input m_axi_out_9_RLAST; - (* RS_HS = "m_axi_out_9_R.ready" *)output m_axi_out_9_RREADY; - (* RS_HS = "m_axi_out_9_R.data" *)input [1:0] m_axi_out_9_RRESP; - (* RS_HS = "m_axi_out_9_R.valid" *)input m_axi_out_9_RVALID; - (* RS_HS = "m_axi_out_9_W.data" *)output [511:0] m_axi_out_9_WDATA; - (* RS_HS = "m_axi_out_9_W.data" *)output m_axi_out_9_WLAST; - (* RS_HS = "m_axi_out_9_W.ready" *)input m_axi_out_9_WREADY; - (* RS_HS = "m_axi_out_9_W.data" *)output [63:0] m_axi_out_9_WSTRB; - (* RS_HS = "m_axi_out_9_W.valid" *)output m_axi_out_9_WVALID; - (* RS_HS = "m_axi_in_10_AR.data" *)output [63:0] m_axi_in_10_ARADDR; - (* RS_HS = "m_axi_in_10_AR.data" *)output [1:0] m_axi_in_10_ARBURST; - (* RS_HS = "m_axi_in_10_AR.data" *)output [3:0] m_axi_in_10_ARCACHE; - (* RS_HS = "m_axi_in_10_AR.data" *)output [0:0] m_axi_in_10_ARID; - (* RS_HS = "m_axi_in_10_AR.data" *)output [7:0] m_axi_in_10_ARLEN; - (* RS_HS = "m_axi_in_10_AR.data" *)output m_axi_in_10_ARLOCK; - (* RS_HS = "m_axi_in_10_AR.data" *)output [2:0] m_axi_in_10_ARPROT; - (* RS_HS = "m_axi_in_10_AR.data" *)output [3:0] m_axi_in_10_ARQOS; - (* RS_HS = "m_axi_in_10_AR.ready" *)input m_axi_in_10_ARREADY; - (* RS_HS = "m_axi_in_10_AR.data" *)output [2:0] m_axi_in_10_ARSIZE; - (* RS_HS = "m_axi_in_10_AR.valid" *)output m_axi_in_10_ARVALID; - (* RS_HS = "m_axi_in_10_AW.data" *)output [63:0] m_axi_in_10_AWADDR; - (* RS_HS = "m_axi_in_10_AW.data" *)output [1:0] m_axi_in_10_AWBURST; - (* RS_HS = "m_axi_in_10_AW.data" *)output [3:0] m_axi_in_10_AWCACHE; - (* RS_HS = "m_axi_in_10_AW.data" *)output [0:0] m_axi_in_10_AWID; - (* RS_HS = "m_axi_in_10_AW.data" *)output [7:0] m_axi_in_10_AWLEN; - (* RS_HS = "m_axi_in_10_AW.data" *)output m_axi_in_10_AWLOCK; - (* RS_HS = "m_axi_in_10_AW.data" *)output [2:0] m_axi_in_10_AWPROT; - (* RS_HS = "m_axi_in_10_AW.data" *)output [3:0] m_axi_in_10_AWQOS; - (* RS_HS = "m_axi_in_10_AW.ready" *)input m_axi_in_10_AWREADY; - (* RS_HS = "m_axi_in_10_AW.data" *)output [2:0] m_axi_in_10_AWSIZE; - (* RS_HS = "m_axi_in_10_AW.valid" *)output m_axi_in_10_AWVALID; - (* RS_HS = "m_axi_in_10_B.data" *)input [0:0] m_axi_in_10_BID; - (* RS_HS = "m_axi_in_10_B.ready" *)output m_axi_in_10_BREADY; - (* RS_HS = "m_axi_in_10_B.data" *)input [1:0] m_axi_in_10_BRESP; - (* RS_HS = "m_axi_in_10_B.valid" *)input m_axi_in_10_BVALID; - (* RS_HS = "m_axi_in_10_R.data" *)input [511:0] m_axi_in_10_RDATA; - (* RS_HS = "m_axi_in_10_R.data" *)input [0:0] m_axi_in_10_RID; - (* RS_HS = "m_axi_in_10_R.data" *)input m_axi_in_10_RLAST; - (* RS_HS = "m_axi_in_10_R.ready" *)output m_axi_in_10_RREADY; - (* RS_HS = "m_axi_in_10_R.data" *)input [1:0] m_axi_in_10_RRESP; - (* RS_HS = "m_axi_in_10_R.valid" *)input m_axi_in_10_RVALID; - (* RS_HS = "m_axi_in_10_W.data" *)output [511:0] m_axi_in_10_WDATA; - (* RS_HS = "m_axi_in_10_W.data" *)output m_axi_in_10_WLAST; - (* RS_HS = "m_axi_in_10_W.ready" *)input m_axi_in_10_WREADY; - (* RS_HS = "m_axi_in_10_W.data" *)output [63:0] m_axi_in_10_WSTRB; - (* RS_HS = "m_axi_in_10_W.valid" *)output m_axi_in_10_WVALID; - (* RS_HS = "m_axi_out_10_AR.data" *)output [63:0] m_axi_out_10_ARADDR; - (* RS_HS = "m_axi_out_10_AR.data" *)output [1:0] m_axi_out_10_ARBURST; - (* RS_HS = "m_axi_out_10_AR.data" *)output [3:0] m_axi_out_10_ARCACHE; - (* RS_HS = "m_axi_out_10_AR.data" *)output [0:0] m_axi_out_10_ARID; - (* RS_HS = "m_axi_out_10_AR.data" *)output [7:0] m_axi_out_10_ARLEN; - (* RS_HS = "m_axi_out_10_AR.data" *)output m_axi_out_10_ARLOCK; - (* RS_HS = "m_axi_out_10_AR.data" *)output [2:0] m_axi_out_10_ARPROT; - (* RS_HS = "m_axi_out_10_AR.data" *)output [3:0] m_axi_out_10_ARQOS; - (* RS_HS = "m_axi_out_10_AR.ready" *)input m_axi_out_10_ARREADY; - (* RS_HS = "m_axi_out_10_AR.data" *)output [2:0] m_axi_out_10_ARSIZE; - (* RS_HS = "m_axi_out_10_AR.valid" *)output m_axi_out_10_ARVALID; - (* RS_HS = "m_axi_out_10_AW.data" *)output [63:0] m_axi_out_10_AWADDR; - (* RS_HS = "m_axi_out_10_AW.data" *)output [1:0] m_axi_out_10_AWBURST; - (* RS_HS = "m_axi_out_10_AW.data" *)output [3:0] m_axi_out_10_AWCACHE; - (* RS_HS = "m_axi_out_10_AW.data" *)output [0:0] m_axi_out_10_AWID; - (* RS_HS = "m_axi_out_10_AW.data" *)output [7:0] m_axi_out_10_AWLEN; - (* RS_HS = "m_axi_out_10_AW.data" *)output m_axi_out_10_AWLOCK; - (* RS_HS = "m_axi_out_10_AW.data" *)output [2:0] m_axi_out_10_AWPROT; - (* RS_HS = "m_axi_out_10_AW.data" *)output [3:0] m_axi_out_10_AWQOS; - (* RS_HS = "m_axi_out_10_AW.ready" *)input m_axi_out_10_AWREADY; - (* RS_HS = "m_axi_out_10_AW.data" *)output [2:0] m_axi_out_10_AWSIZE; - (* RS_HS = "m_axi_out_10_AW.valid" *)output m_axi_out_10_AWVALID; - (* RS_HS = "m_axi_out_10_B.data" *)input [0:0] m_axi_out_10_BID; - (* RS_HS = "m_axi_out_10_B.ready" *)output m_axi_out_10_BREADY; - (* RS_HS = "m_axi_out_10_B.data" *)input [1:0] m_axi_out_10_BRESP; - (* RS_HS = "m_axi_out_10_B.valid" *)input m_axi_out_10_BVALID; - (* RS_HS = "m_axi_out_10_R.data" *)input [511:0] m_axi_out_10_RDATA; - (* RS_HS = "m_axi_out_10_R.data" *)input [0:0] m_axi_out_10_RID; - (* RS_HS = "m_axi_out_10_R.data" *)input m_axi_out_10_RLAST; - (* RS_HS = "m_axi_out_10_R.ready" *)output m_axi_out_10_RREADY; - (* RS_HS = "m_axi_out_10_R.data" *)input [1:0] m_axi_out_10_RRESP; - (* RS_HS = "m_axi_out_10_R.valid" *)input m_axi_out_10_RVALID; - (* RS_HS = "m_axi_out_10_W.data" *)output [511:0] m_axi_out_10_WDATA; - (* RS_HS = "m_axi_out_10_W.data" *)output m_axi_out_10_WLAST; - (* RS_HS = "m_axi_out_10_W.ready" *)input m_axi_out_10_WREADY; - (* RS_HS = "m_axi_out_10_W.data" *)output [63:0] m_axi_out_10_WSTRB; - (* RS_HS = "m_axi_out_10_W.valid" *)output m_axi_out_10_WVALID; - (* RS_HS = "m_axi_in_11_AR.data" *)output [63:0] m_axi_in_11_ARADDR; - (* RS_HS = "m_axi_in_11_AR.data" *)output [1:0] m_axi_in_11_ARBURST; - (* RS_HS = "m_axi_in_11_AR.data" *)output [3:0] m_axi_in_11_ARCACHE; - (* RS_HS = "m_axi_in_11_AR.data" *)output [0:0] m_axi_in_11_ARID; - (* RS_HS = "m_axi_in_11_AR.data" *)output [7:0] m_axi_in_11_ARLEN; - (* RS_HS = "m_axi_in_11_AR.data" *)output m_axi_in_11_ARLOCK; - (* RS_HS = "m_axi_in_11_AR.data" *)output [2:0] m_axi_in_11_ARPROT; - (* RS_HS = "m_axi_in_11_AR.data" *)output [3:0] m_axi_in_11_ARQOS; - (* RS_HS = "m_axi_in_11_AR.ready" *)input m_axi_in_11_ARREADY; - (* RS_HS = "m_axi_in_11_AR.data" *)output [2:0] m_axi_in_11_ARSIZE; - (* RS_HS = "m_axi_in_11_AR.valid" *)output m_axi_in_11_ARVALID; - (* RS_HS = "m_axi_in_11_AW.data" *)output [63:0] m_axi_in_11_AWADDR; - (* RS_HS = "m_axi_in_11_AW.data" *)output [1:0] m_axi_in_11_AWBURST; - (* RS_HS = "m_axi_in_11_AW.data" *)output [3:0] m_axi_in_11_AWCACHE; - (* RS_HS = "m_axi_in_11_AW.data" *)output [0:0] m_axi_in_11_AWID; - (* RS_HS = "m_axi_in_11_AW.data" *)output [7:0] m_axi_in_11_AWLEN; - (* RS_HS = "m_axi_in_11_AW.data" *)output m_axi_in_11_AWLOCK; - (* RS_HS = "m_axi_in_11_AW.data" *)output [2:0] m_axi_in_11_AWPROT; - (* RS_HS = "m_axi_in_11_AW.data" *)output [3:0] m_axi_in_11_AWQOS; - (* RS_HS = "m_axi_in_11_AW.ready" *)input m_axi_in_11_AWREADY; - (* RS_HS = "m_axi_in_11_AW.data" *)output [2:0] m_axi_in_11_AWSIZE; - (* RS_HS = "m_axi_in_11_AW.valid" *)output m_axi_in_11_AWVALID; - (* RS_HS = "m_axi_in_11_B.data" *)input [0:0] m_axi_in_11_BID; - (* RS_HS = "m_axi_in_11_B.ready" *)output m_axi_in_11_BREADY; - (* RS_HS = "m_axi_in_11_B.data" *)input [1:0] m_axi_in_11_BRESP; - (* RS_HS = "m_axi_in_11_B.valid" *)input m_axi_in_11_BVALID; - (* RS_HS = "m_axi_in_11_R.data" *)input [511:0] m_axi_in_11_RDATA; - (* RS_HS = "m_axi_in_11_R.data" *)input [0:0] m_axi_in_11_RID; - (* RS_HS = "m_axi_in_11_R.data" *)input m_axi_in_11_RLAST; - (* RS_HS = "m_axi_in_11_R.ready" *)output m_axi_in_11_RREADY; - (* RS_HS = "m_axi_in_11_R.data" *)input [1:0] m_axi_in_11_RRESP; - (* RS_HS = "m_axi_in_11_R.valid" *)input m_axi_in_11_RVALID; - (* RS_HS = "m_axi_in_11_W.data" *)output [511:0] m_axi_in_11_WDATA; - (* RS_HS = "m_axi_in_11_W.data" *)output m_axi_in_11_WLAST; - (* RS_HS = "m_axi_in_11_W.ready" *)input m_axi_in_11_WREADY; - (* RS_HS = "m_axi_in_11_W.data" *)output [63:0] m_axi_in_11_WSTRB; - (* RS_HS = "m_axi_in_11_W.valid" *)output m_axi_in_11_WVALID; - (* RS_HS = "m_axi_out_11_AR.data" *)output [63:0] m_axi_out_11_ARADDR; - (* RS_HS = "m_axi_out_11_AR.data" *)output [1:0] m_axi_out_11_ARBURST; - (* RS_HS = "m_axi_out_11_AR.data" *)output [3:0] m_axi_out_11_ARCACHE; - (* RS_HS = "m_axi_out_11_AR.data" *)output [0:0] m_axi_out_11_ARID; - (* RS_HS = "m_axi_out_11_AR.data" *)output [7:0] m_axi_out_11_ARLEN; - (* RS_HS = "m_axi_out_11_AR.data" *)output m_axi_out_11_ARLOCK; - (* RS_HS = "m_axi_out_11_AR.data" *)output [2:0] m_axi_out_11_ARPROT; - (* RS_HS = "m_axi_out_11_AR.data" *)output [3:0] m_axi_out_11_ARQOS; - (* RS_HS = "m_axi_out_11_AR.ready" *)input m_axi_out_11_ARREADY; - (* RS_HS = "m_axi_out_11_AR.data" *)output [2:0] m_axi_out_11_ARSIZE; - (* RS_HS = "m_axi_out_11_AR.valid" *)output m_axi_out_11_ARVALID; - (* RS_HS = "m_axi_out_11_AW.data" *)output [63:0] m_axi_out_11_AWADDR; - (* RS_HS = "m_axi_out_11_AW.data" *)output [1:0] m_axi_out_11_AWBURST; - (* RS_HS = "m_axi_out_11_AW.data" *)output [3:0] m_axi_out_11_AWCACHE; - (* RS_HS = "m_axi_out_11_AW.data" *)output [0:0] m_axi_out_11_AWID; - (* RS_HS = "m_axi_out_11_AW.data" *)output [7:0] m_axi_out_11_AWLEN; - (* RS_HS = "m_axi_out_11_AW.data" *)output m_axi_out_11_AWLOCK; - (* RS_HS = "m_axi_out_11_AW.data" *)output [2:0] m_axi_out_11_AWPROT; - (* RS_HS = "m_axi_out_11_AW.data" *)output [3:0] m_axi_out_11_AWQOS; - (* RS_HS = "m_axi_out_11_AW.ready" *)input m_axi_out_11_AWREADY; - (* RS_HS = "m_axi_out_11_AW.data" *)output [2:0] m_axi_out_11_AWSIZE; - (* RS_HS = "m_axi_out_11_AW.valid" *)output m_axi_out_11_AWVALID; - (* RS_HS = "m_axi_out_11_B.data" *)input [0:0] m_axi_out_11_BID; - (* RS_HS = "m_axi_out_11_B.ready" *)output m_axi_out_11_BREADY; - (* RS_HS = "m_axi_out_11_B.data" *)input [1:0] m_axi_out_11_BRESP; - (* RS_HS = "m_axi_out_11_B.valid" *)input m_axi_out_11_BVALID; - (* RS_HS = "m_axi_out_11_R.data" *)input [511:0] m_axi_out_11_RDATA; - (* RS_HS = "m_axi_out_11_R.data" *)input [0:0] m_axi_out_11_RID; - (* RS_HS = "m_axi_out_11_R.data" *)input m_axi_out_11_RLAST; - (* RS_HS = "m_axi_out_11_R.ready" *)output m_axi_out_11_RREADY; - (* RS_HS = "m_axi_out_11_R.data" *)input [1:0] m_axi_out_11_RRESP; - (* RS_HS = "m_axi_out_11_R.valid" *)input m_axi_out_11_RVALID; - (* RS_HS = "m_axi_out_11_W.data" *)output [511:0] m_axi_out_11_WDATA; - (* RS_HS = "m_axi_out_11_W.data" *)output m_axi_out_11_WLAST; - (* RS_HS = "m_axi_out_11_W.ready" *)input m_axi_out_11_WREADY; - (* RS_HS = "m_axi_out_11_W.data" *)output [63:0] m_axi_out_11_WSTRB; - (* RS_HS = "m_axi_out_11_W.valid" *)output m_axi_out_11_WVALID; - wire ap_start; - wire [63:0] in_0; - wire [63:0] out_0; - wire [63:0] in_1; - wire [63:0] out_1; - wire [63:0] in_2; - wire [63:0] out_2; - wire [63:0] in_3; - wire [63:0] out_3; - wire [63:0] in_4; - wire [63:0] out_4; - wire [63:0] in_5; - wire [63:0] out_5; - wire [63:0] in_6; - wire [63:0] out_6; - wire [63:0] in_7; - wire [63:0] out_7; - wire [63:0] in_8; - wire [63:0] out_8; - wire [63:0] in_9; - wire [63:0] out_9; - wire [63:0] in_10; - wire [63:0] out_10; - wire [63:0] in_11; - wire [63:0] out_11; - wire [31:0] iters; - wire [512:0] k_rd_unikernel_0__dout; - wire k_rd_unikernel_0__empty_n; - wire k_rd_unikernel_0__read; - wire [512:0] k_rd_unikernel_0__din; - wire k_rd_unikernel_0__full_n; - wire k_rd_unikernel_0__write; - wire [512:0] k_rd_unikernel_10__dout; - wire k_rd_unikernel_10__empty_n; - wire k_rd_unikernel_10__read; - wire [512:0] k_rd_unikernel_10__din; - wire k_rd_unikernel_10__full_n; - wire k_rd_unikernel_10__write; - wire [512:0] k_rd_unikernel_11__dout; - wire k_rd_unikernel_11__empty_n; - wire k_rd_unikernel_11__read; - wire [512:0] k_rd_unikernel_11__din; - wire k_rd_unikernel_11__full_n; - wire k_rd_unikernel_11__write; - wire [512:0] k_rd_unikernel_1__dout; - wire k_rd_unikernel_1__empty_n; - wire k_rd_unikernel_1__read; - wire [512:0] k_rd_unikernel_1__din; - wire k_rd_unikernel_1__full_n; - wire k_rd_unikernel_1__write; - wire [512:0] k_rd_unikernel_2__dout; - wire k_rd_unikernel_2__empty_n; - wire k_rd_unikernel_2__read; - wire [512:0] k_rd_unikernel_2__din; - wire k_rd_unikernel_2__full_n; - wire k_rd_unikernel_2__write; - wire [512:0] k_rd_unikernel_3__dout; - wire k_rd_unikernel_3__empty_n; - wire k_rd_unikernel_3__read; - wire [512:0] k_rd_unikernel_3__din; - wire k_rd_unikernel_3__full_n; - wire k_rd_unikernel_3__write; - wire [512:0] k_rd_unikernel_4__dout; - wire k_rd_unikernel_4__empty_n; - wire k_rd_unikernel_4__read; - wire [512:0] k_rd_unikernel_4__din; - wire k_rd_unikernel_4__full_n; - wire k_rd_unikernel_4__write; - wire [512:0] k_rd_unikernel_5__dout; - wire k_rd_unikernel_5__empty_n; - wire k_rd_unikernel_5__read; - wire [512:0] k_rd_unikernel_5__din; - wire k_rd_unikernel_5__full_n; - wire k_rd_unikernel_5__write; - wire [512:0] k_rd_unikernel_6__dout; - wire k_rd_unikernel_6__empty_n; - wire k_rd_unikernel_6__read; - wire [512:0] k_rd_unikernel_6__din; - wire k_rd_unikernel_6__full_n; - wire k_rd_unikernel_6__write; - wire [512:0] k_rd_unikernel_7__dout; - wire k_rd_unikernel_7__empty_n; - wire k_rd_unikernel_7__read; - wire [512:0] k_rd_unikernel_7__din; - wire k_rd_unikernel_7__full_n; - wire k_rd_unikernel_7__write; - wire [512:0] k_rd_unikernel_8__dout; - wire k_rd_unikernel_8__empty_n; - wire k_rd_unikernel_8__read; - wire [512:0] k_rd_unikernel_8__din; - wire k_rd_unikernel_8__full_n; - wire k_rd_unikernel_8__write; - wire [512:0] k_rd_unikernel_9__dout; - wire k_rd_unikernel_9__empty_n; - wire k_rd_unikernel_9__read; - wire [512:0] k_rd_unikernel_9__din; - wire k_rd_unikernel_9__full_n; - wire k_rd_unikernel_9__write; - wire [512:0] k_wr_unikernel_0__dout; - wire k_wr_unikernel_0__empty_n; - wire k_wr_unikernel_0__read; - wire [512:0] k_wr_unikernel_0__din; - wire k_wr_unikernel_0__full_n; - wire k_wr_unikernel_0__write; - wire [512:0] k_wr_unikernel_10__dout; - wire k_wr_unikernel_10__empty_n; - wire k_wr_unikernel_10__read; - wire [512:0] k_wr_unikernel_10__din; - wire k_wr_unikernel_10__full_n; - wire k_wr_unikernel_10__write; - wire [512:0] k_wr_unikernel_11__dout; - wire k_wr_unikernel_11__empty_n; - wire k_wr_unikernel_11__read; - wire [512:0] k_wr_unikernel_11__din; - wire k_wr_unikernel_11__full_n; - wire k_wr_unikernel_11__write; - wire [512:0] k_wr_unikernel_1__dout; - wire k_wr_unikernel_1__empty_n; - wire k_wr_unikernel_1__read; - wire [512:0] k_wr_unikernel_1__din; - wire k_wr_unikernel_1__full_n; - wire k_wr_unikernel_1__write; - wire [512:0] k_wr_unikernel_2__dout; - wire k_wr_unikernel_2__empty_n; - wire k_wr_unikernel_2__read; - wire [512:0] k_wr_unikernel_2__din; - wire k_wr_unikernel_2__full_n; - wire k_wr_unikernel_2__write; - wire [512:0] k_wr_unikernel_3__dout; - wire k_wr_unikernel_3__empty_n; - wire k_wr_unikernel_3__read; - wire [512:0] k_wr_unikernel_3__din; - wire k_wr_unikernel_3__full_n; - wire k_wr_unikernel_3__write; - wire [512:0] k_wr_unikernel_4__dout; - wire k_wr_unikernel_4__empty_n; - wire k_wr_unikernel_4__read; - wire [512:0] k_wr_unikernel_4__din; - wire k_wr_unikernel_4__full_n; - wire k_wr_unikernel_4__write; - wire [512:0] k_wr_unikernel_5__dout; - wire k_wr_unikernel_5__empty_n; - wire k_wr_unikernel_5__read; - wire [512:0] k_wr_unikernel_5__din; - wire k_wr_unikernel_5__full_n; - wire k_wr_unikernel_5__write; - wire [512:0] k_wr_unikernel_6__dout; - wire k_wr_unikernel_6__empty_n; - wire k_wr_unikernel_6__read; - wire [512:0] k_wr_unikernel_6__din; - wire k_wr_unikernel_6__full_n; - wire k_wr_unikernel_6__write; - wire [512:0] k_wr_unikernel_7__dout; - wire k_wr_unikernel_7__empty_n; - wire k_wr_unikernel_7__read; - wire [512:0] k_wr_unikernel_7__din; - wire k_wr_unikernel_7__full_n; - wire k_wr_unikernel_7__write; - wire [512:0] k_wr_unikernel_8__dout; - wire k_wr_unikernel_8__empty_n; - wire k_wr_unikernel_8__read; - wire [512:0] k_wr_unikernel_8__din; - wire k_wr_unikernel_8__full_n; - wire k_wr_unikernel_8__write; - wire [512:0] k_wr_unikernel_9__dout; - wire k_wr_unikernel_9__empty_n; - wire k_wr_unikernel_9__read; - wire [512:0] k_wr_unikernel_9__din; - wire k_wr_unikernel_9__full_n; - wire k_wr_unikernel_9__write; - wire [31:0] HEAT3D_0___iters__q0; - wire HEAT3D_0__ap_start; - wire HEAT3D_0__ap_ready; - wire HEAT3D_0__ap_done; - wire HEAT3D_0__ap_idle; - wire [31:0] HEAT3D_1___iters__q0; - wire HEAT3D_1__ap_start; - wire HEAT3D_1__ap_ready; - wire HEAT3D_1__ap_done; - wire HEAT3D_1__ap_idle; - wire [31:0] HEAT3D_2___iters__q0; - wire HEAT3D_2__ap_start; - wire HEAT3D_2__ap_ready; - wire HEAT3D_2__ap_done; - wire HEAT3D_2__ap_idle; - wire [31:0] HEAT3D_3___iters__q0; - wire HEAT3D_3__ap_start; - wire HEAT3D_3__ap_ready; - wire HEAT3D_3__ap_done; - wire HEAT3D_3__ap_idle; - wire [31:0] HEAT3D_4___iters__q0; - wire HEAT3D_4__ap_start; - wire HEAT3D_4__ap_ready; - wire HEAT3D_4__ap_done; - wire HEAT3D_4__ap_idle; - wire [31:0] HEAT3D_5___iters__q0; - wire HEAT3D_5__ap_start; - wire HEAT3D_5__ap_ready; - wire HEAT3D_5__ap_done; - wire HEAT3D_5__ap_idle; - wire [31:0] HEAT3D_6___iters__q0; - wire HEAT3D_6__ap_start; - wire HEAT3D_6__ap_ready; - wire HEAT3D_6__ap_done; - wire HEAT3D_6__ap_idle; - wire [31:0] HEAT3D_7___iters__q0; - wire HEAT3D_7__ap_start; - wire HEAT3D_7__ap_ready; - wire HEAT3D_7__ap_done; - wire HEAT3D_7__ap_idle; - wire [31:0] HEAT3D_8___iters__q0; - wire HEAT3D_8__ap_start; - wire HEAT3D_8__ap_ready; - wire HEAT3D_8__ap_done; - wire HEAT3D_8__ap_idle; - wire [31:0] HEAT3D_9___iters__q0; - wire HEAT3D_9__ap_start; - wire HEAT3D_9__ap_ready; - wire HEAT3D_9__ap_done; - wire HEAT3D_9__ap_idle; - wire [31:0] HEAT3D_10___iters__q0; - wire HEAT3D_10__ap_start; - wire HEAT3D_10__ap_ready; - wire HEAT3D_10__ap_done; - wire HEAT3D_10__ap_idle; - wire [31:0] HEAT3D_11___iters__q0; - wire HEAT3D_11__ap_start; - wire HEAT3D_11__ap_ready; - wire HEAT3D_11__ap_done; - wire HEAT3D_11__ap_idle; - wire [63:0] inter_kernel_0___in_0__q0; - wire [63:0] in_0_read_addr__din; - wire in_0_read_addr__full_n; - wire in_0_read_addr__write; - wire [511:0] in_0_read_data__dout; - wire in_0_read_data__empty_n; - wire in_0_read_data__read; - wire [63:0] in_0_write_addr__din; - wire in_0_write_addr__full_n; - wire in_0_write_addr__write; - wire [511:0] in_0_write_data__din; - wire in_0_write_data__full_n; - wire in_0_write_data__write; - wire [7:0] in_0_write_resp__dout; - wire in_0_write_resp__empty_n; - wire in_0_write_resp__read; - wire [31:0] inter_kernel_0___iters__q0; - wire [63:0] inter_kernel_0___out_0__q0; - wire [63:0] out_0_read_addr__din; - wire out_0_read_addr__full_n; - wire out_0_read_addr__write; - wire [511:0] out_0_read_data__dout; - wire out_0_read_data__empty_n; - wire out_0_read_data__read; - wire [63:0] out_0_write_addr__din; - wire out_0_write_addr__full_n; - wire out_0_write_addr__write; - wire [511:0] out_0_write_data__din; - wire out_0_write_data__full_n; - wire out_0_write_data__write; - wire [7:0] out_0_write_resp__dout; - wire out_0_write_resp__empty_n; - wire out_0_write_resp__read; - wire inter_kernel_0__ap_start; - wire inter_kernel_0__ap_ready; - wire inter_kernel_0__ap_done; - wire inter_kernel_0__ap_idle; - wire [63:0] inter_kernel_1___in_1__q0; - wire [63:0] in_1_read_addr__din; - wire in_1_read_addr__full_n; - wire in_1_read_addr__write; - wire [511:0] in_1_read_data__dout; - wire in_1_read_data__empty_n; - wire in_1_read_data__read; - wire [63:0] in_1_write_addr__din; - wire in_1_write_addr__full_n; - wire in_1_write_addr__write; - wire [511:0] in_1_write_data__din; - wire in_1_write_data__full_n; - wire in_1_write_data__write; - wire [7:0] in_1_write_resp__dout; - wire in_1_write_resp__empty_n; - wire in_1_write_resp__read; - wire [31:0] inter_kernel_1___iters__q0; - wire [63:0] inter_kernel_1___out_1__q0; - wire [63:0] out_1_read_addr__din; - wire out_1_read_addr__full_n; - wire out_1_read_addr__write; - wire [511:0] out_1_read_data__dout; - wire out_1_read_data__empty_n; - wire out_1_read_data__read; - wire [63:0] out_1_write_addr__din; - wire out_1_write_addr__full_n; - wire out_1_write_addr__write; - wire [511:0] out_1_write_data__din; - wire out_1_write_data__full_n; - wire out_1_write_data__write; - wire [7:0] out_1_write_resp__dout; - wire out_1_write_resp__empty_n; - wire out_1_write_resp__read; - wire inter_kernel_1__ap_start; - wire inter_kernel_1__ap_ready; - wire inter_kernel_1__ap_done; - wire inter_kernel_1__ap_idle; - wire [63:0] inter_kernel_2___in_2__q0; - wire [63:0] in_2_read_addr__din; - wire in_2_read_addr__full_n; - wire in_2_read_addr__write; - wire [511:0] in_2_read_data__dout; - wire in_2_read_data__empty_n; - wire in_2_read_data__read; - wire [63:0] in_2_write_addr__din; - wire in_2_write_addr__full_n; - wire in_2_write_addr__write; - wire [511:0] in_2_write_data__din; - wire in_2_write_data__full_n; - wire in_2_write_data__write; - wire [7:0] in_2_write_resp__dout; - wire in_2_write_resp__empty_n; - wire in_2_write_resp__read; - wire [31:0] inter_kernel_2___iters__q0; - wire [63:0] inter_kernel_2___out_2__q0; - wire [63:0] out_2_read_addr__din; - wire out_2_read_addr__full_n; - wire out_2_read_addr__write; - wire [511:0] out_2_read_data__dout; - wire out_2_read_data__empty_n; - wire out_2_read_data__read; - wire [63:0] out_2_write_addr__din; - wire out_2_write_addr__full_n; - wire out_2_write_addr__write; - wire [511:0] out_2_write_data__din; - wire out_2_write_data__full_n; - wire out_2_write_data__write; - wire [7:0] out_2_write_resp__dout; - wire out_2_write_resp__empty_n; - wire out_2_write_resp__read; - wire inter_kernel_2__ap_start; - wire inter_kernel_2__ap_ready; - wire inter_kernel_2__ap_done; - wire inter_kernel_2__ap_idle; - wire [63:0] inter_kernel_3___in_3__q0; - wire [63:0] in_3_read_addr__din; - wire in_3_read_addr__full_n; - wire in_3_read_addr__write; - wire [511:0] in_3_read_data__dout; - wire in_3_read_data__empty_n; - wire in_3_read_data__read; - wire [63:0] in_3_write_addr__din; - wire in_3_write_addr__full_n; - wire in_3_write_addr__write; - wire [511:0] in_3_write_data__din; - wire in_3_write_data__full_n; - wire in_3_write_data__write; - wire [7:0] in_3_write_resp__dout; - wire in_3_write_resp__empty_n; - wire in_3_write_resp__read; - wire [31:0] inter_kernel_3___iters__q0; - wire [63:0] inter_kernel_3___out_3__q0; - wire [63:0] out_3_read_addr__din; - wire out_3_read_addr__full_n; - wire out_3_read_addr__write; - wire [511:0] out_3_read_data__dout; - wire out_3_read_data__empty_n; - wire out_3_read_data__read; - wire [63:0] out_3_write_addr__din; - wire out_3_write_addr__full_n; - wire out_3_write_addr__write; - wire [511:0] out_3_write_data__din; - wire out_3_write_data__full_n; - wire out_3_write_data__write; - wire [7:0] out_3_write_resp__dout; - wire out_3_write_resp__empty_n; - wire out_3_write_resp__read; - wire inter_kernel_3__ap_start; - wire inter_kernel_3__ap_ready; - wire inter_kernel_3__ap_done; - wire inter_kernel_3__ap_idle; - wire [63:0] inter_kernel_4___in_4__q0; - wire [63:0] in_4_read_addr__din; - wire in_4_read_addr__full_n; - wire in_4_read_addr__write; - wire [511:0] in_4_read_data__dout; - wire in_4_read_data__empty_n; - wire in_4_read_data__read; - wire [63:0] in_4_write_addr__din; - wire in_4_write_addr__full_n; - wire in_4_write_addr__write; - wire [511:0] in_4_write_data__din; - wire in_4_write_data__full_n; - wire in_4_write_data__write; - wire [7:0] in_4_write_resp__dout; - wire in_4_write_resp__empty_n; - wire in_4_write_resp__read; - wire [31:0] inter_kernel_4___iters__q0; - wire [63:0] inter_kernel_4___out_4__q0; - wire [63:0] out_4_read_addr__din; - wire out_4_read_addr__full_n; - wire out_4_read_addr__write; - wire [511:0] out_4_read_data__dout; - wire out_4_read_data__empty_n; - wire out_4_read_data__read; - wire [63:0] out_4_write_addr__din; - wire out_4_write_addr__full_n; - wire out_4_write_addr__write; - wire [511:0] out_4_write_data__din; - wire out_4_write_data__full_n; - wire out_4_write_data__write; - wire [7:0] out_4_write_resp__dout; - wire out_4_write_resp__empty_n; - wire out_4_write_resp__read; - wire inter_kernel_4__ap_start; - wire inter_kernel_4__ap_ready; - wire inter_kernel_4__ap_done; - wire inter_kernel_4__ap_idle; - wire [63:0] inter_kernel_5___in_5__q0; - wire [63:0] in_5_read_addr__din; - wire in_5_read_addr__full_n; - wire in_5_read_addr__write; - wire [511:0] in_5_read_data__dout; - wire in_5_read_data__empty_n; - wire in_5_read_data__read; - wire [63:0] in_5_write_addr__din; - wire in_5_write_addr__full_n; - wire in_5_write_addr__write; - wire [511:0] in_5_write_data__din; - wire in_5_write_data__full_n; - wire in_5_write_data__write; - wire [7:0] in_5_write_resp__dout; - wire in_5_write_resp__empty_n; - wire in_5_write_resp__read; - wire [31:0] inter_kernel_5___iters__q0; - wire [63:0] inter_kernel_5___out_5__q0; - wire [63:0] out_5_read_addr__din; - wire out_5_read_addr__full_n; - wire out_5_read_addr__write; - wire [511:0] out_5_read_data__dout; - wire out_5_read_data__empty_n; - wire out_5_read_data__read; - wire [63:0] out_5_write_addr__din; - wire out_5_write_addr__full_n; - wire out_5_write_addr__write; - wire [511:0] out_5_write_data__din; - wire out_5_write_data__full_n; - wire out_5_write_data__write; - wire [7:0] out_5_write_resp__dout; - wire out_5_write_resp__empty_n; - wire out_5_write_resp__read; - wire inter_kernel_5__ap_start; - wire inter_kernel_5__ap_ready; - wire inter_kernel_5__ap_done; - wire inter_kernel_5__ap_idle; - wire [63:0] inter_kernel_6___in_6__q0; - wire [63:0] in_6_read_addr__din; - wire in_6_read_addr__full_n; - wire in_6_read_addr__write; - wire [511:0] in_6_read_data__dout; - wire in_6_read_data__empty_n; - wire in_6_read_data__read; - wire [63:0] in_6_write_addr__din; - wire in_6_write_addr__full_n; - wire in_6_write_addr__write; - wire [511:0] in_6_write_data__din; - wire in_6_write_data__full_n; - wire in_6_write_data__write; - wire [7:0] in_6_write_resp__dout; - wire in_6_write_resp__empty_n; - wire in_6_write_resp__read; - wire [31:0] inter_kernel_6___iters__q0; - wire [63:0] inter_kernel_6___out_6__q0; - wire [63:0] out_6_read_addr__din; - wire out_6_read_addr__full_n; - wire out_6_read_addr__write; - wire [511:0] out_6_read_data__dout; - wire out_6_read_data__empty_n; - wire out_6_read_data__read; - wire [63:0] out_6_write_addr__din; - wire out_6_write_addr__full_n; - wire out_6_write_addr__write; - wire [511:0] out_6_write_data__din; - wire out_6_write_data__full_n; - wire out_6_write_data__write; - wire [7:0] out_6_write_resp__dout; - wire out_6_write_resp__empty_n; - wire out_6_write_resp__read; - wire inter_kernel_6__ap_start; - wire inter_kernel_6__ap_ready; - wire inter_kernel_6__ap_done; - wire inter_kernel_6__ap_idle; - wire [63:0] inter_kernel_7___in_7__q0; - wire [63:0] in_7_read_addr__din; - wire in_7_read_addr__full_n; - wire in_7_read_addr__write; - wire [511:0] in_7_read_data__dout; - wire in_7_read_data__empty_n; - wire in_7_read_data__read; - wire [63:0] in_7_write_addr__din; - wire in_7_write_addr__full_n; - wire in_7_write_addr__write; - wire [511:0] in_7_write_data__din; - wire in_7_write_data__full_n; - wire in_7_write_data__write; - wire [7:0] in_7_write_resp__dout; - wire in_7_write_resp__empty_n; - wire in_7_write_resp__read; - wire [31:0] inter_kernel_7___iters__q0; - wire [63:0] inter_kernel_7___out_7__q0; - wire [63:0] out_7_read_addr__din; - wire out_7_read_addr__full_n; - wire out_7_read_addr__write; - wire [511:0] out_7_read_data__dout; - wire out_7_read_data__empty_n; - wire out_7_read_data__read; - wire [63:0] out_7_write_addr__din; - wire out_7_write_addr__full_n; - wire out_7_write_addr__write; - wire [511:0] out_7_write_data__din; - wire out_7_write_data__full_n; - wire out_7_write_data__write; - wire [7:0] out_7_write_resp__dout; - wire out_7_write_resp__empty_n; - wire out_7_write_resp__read; - wire inter_kernel_7__ap_start; - wire inter_kernel_7__ap_ready; - wire inter_kernel_7__ap_done; - wire inter_kernel_7__ap_idle; - wire [63:0] inter_kernel_8___in_8__q0; - wire [63:0] in_8_read_addr__din; - wire in_8_read_addr__full_n; - wire in_8_read_addr__write; - wire [511:0] in_8_read_data__dout; - wire in_8_read_data__empty_n; - wire in_8_read_data__read; - wire [63:0] in_8_write_addr__din; - wire in_8_write_addr__full_n; - wire in_8_write_addr__write; - wire [511:0] in_8_write_data__din; - wire in_8_write_data__full_n; - wire in_8_write_data__write; - wire [7:0] in_8_write_resp__dout; - wire in_8_write_resp__empty_n; - wire in_8_write_resp__read; - wire [31:0] inter_kernel_8___iters__q0; - wire [63:0] inter_kernel_8___out_8__q0; - wire [63:0] out_8_read_addr__din; - wire out_8_read_addr__full_n; - wire out_8_read_addr__write; - wire [511:0] out_8_read_data__dout; - wire out_8_read_data__empty_n; - wire out_8_read_data__read; - wire [63:0] out_8_write_addr__din; - wire out_8_write_addr__full_n; - wire out_8_write_addr__write; - wire [511:0] out_8_write_data__din; - wire out_8_write_data__full_n; - wire out_8_write_data__write; - wire [7:0] out_8_write_resp__dout; - wire out_8_write_resp__empty_n; - wire out_8_write_resp__read; - wire inter_kernel_8__ap_start; - wire inter_kernel_8__ap_ready; - wire inter_kernel_8__ap_done; - wire inter_kernel_8__ap_idle; - wire [63:0] inter_kernel_9___in_9__q0; - wire [63:0] in_9_read_addr__din; - wire in_9_read_addr__full_n; - wire in_9_read_addr__write; - wire [511:0] in_9_read_data__dout; - wire in_9_read_data__empty_n; - wire in_9_read_data__read; - wire [63:0] in_9_write_addr__din; - wire in_9_write_addr__full_n; - wire in_9_write_addr__write; - wire [511:0] in_9_write_data__din; - wire in_9_write_data__full_n; - wire in_9_write_data__write; - wire [7:0] in_9_write_resp__dout; - wire in_9_write_resp__empty_n; - wire in_9_write_resp__read; - wire [31:0] inter_kernel_9___iters__q0; - wire [63:0] inter_kernel_9___out_9__q0; - wire [63:0] out_9_read_addr__din; - wire out_9_read_addr__full_n; - wire out_9_read_addr__write; - wire [511:0] out_9_read_data__dout; - wire out_9_read_data__empty_n; - wire out_9_read_data__read; - wire [63:0] out_9_write_addr__din; - wire out_9_write_addr__full_n; - wire out_9_write_addr__write; - wire [511:0] out_9_write_data__din; - wire out_9_write_data__full_n; - wire out_9_write_data__write; - wire [7:0] out_9_write_resp__dout; - wire out_9_write_resp__empty_n; - wire out_9_write_resp__read; - wire inter_kernel_9__ap_start; - wire inter_kernel_9__ap_ready; - wire inter_kernel_9__ap_done; - wire inter_kernel_9__ap_idle; - wire [63:0] inter_kernel_10___in_10__q0; - wire [63:0] in_10_read_addr__din; - wire in_10_read_addr__full_n; - wire in_10_read_addr__write; - wire [511:0] in_10_read_data__dout; - wire in_10_read_data__empty_n; - wire in_10_read_data__read; - wire [63:0] in_10_write_addr__din; - wire in_10_write_addr__full_n; - wire in_10_write_addr__write; - wire [511:0] in_10_write_data__din; - wire in_10_write_data__full_n; - wire in_10_write_data__write; - wire [7:0] in_10_write_resp__dout; - wire in_10_write_resp__empty_n; - wire in_10_write_resp__read; - wire [31:0] inter_kernel_10___iters__q0; - wire [63:0] inter_kernel_10___out_10__q0; - wire [63:0] out_10_read_addr__din; - wire out_10_read_addr__full_n; - wire out_10_read_addr__write; - wire [511:0] out_10_read_data__dout; - wire out_10_read_data__empty_n; - wire out_10_read_data__read; - wire [63:0] out_10_write_addr__din; - wire out_10_write_addr__full_n; - wire out_10_write_addr__write; - wire [511:0] out_10_write_data__din; - wire out_10_write_data__full_n; - wire out_10_write_data__write; - wire [7:0] out_10_write_resp__dout; - wire out_10_write_resp__empty_n; - wire out_10_write_resp__read; - wire inter_kernel_10__ap_start; - wire inter_kernel_10__ap_ready; - wire inter_kernel_10__ap_done; - wire inter_kernel_10__ap_idle; - wire [63:0] inter_kernel_11___in_11__q0; - wire [63:0] in_11_read_addr__din; - wire in_11_read_addr__full_n; - wire in_11_read_addr__write; - wire [511:0] in_11_read_data__dout; - wire in_11_read_data__empty_n; - wire in_11_read_data__read; - wire [63:0] in_11_write_addr__din; - wire in_11_write_addr__full_n; - wire in_11_write_addr__write; - wire [511:0] in_11_write_data__din; - wire in_11_write_data__full_n; - wire in_11_write_data__write; - wire [7:0] in_11_write_resp__dout; - wire in_11_write_resp__empty_n; - wire in_11_write_resp__read; - wire [31:0] inter_kernel_11___iters__q0; - wire [63:0] inter_kernel_11___out_11__q0; - wire [63:0] out_11_read_addr__din; - wire out_11_read_addr__full_n; - wire out_11_read_addr__write; - wire [511:0] out_11_read_data__dout; - wire out_11_read_data__empty_n; - wire out_11_read_data__read; - wire [63:0] out_11_write_addr__din; - wire out_11_write_addr__full_n; - wire out_11_write_addr__write; - wire [511:0] out_11_write_data__din; - wire out_11_write_data__full_n; - wire out_11_write_data__write; - wire [7:0] out_11_write_resp__dout; - wire out_11_write_resp__empty_n; - wire out_11_write_resp__read; - wire inter_kernel_11__ap_start; - wire inter_kernel_11__ap_ready; - wire inter_kernel_11__ap_done; - wire inter_kernel_11__ap_idle; - wire ap_rst_n_inv; - wire ap_done; - wire ap_idle; - wire ap_ready; - - unikernel_control_s_axi - #( - .C_S_AXI_ADDR_WIDTH(C_S_AXI_CONTROL_ADDR_WIDTH), - .C_S_AXI_DATA_WIDTH(C_S_AXI_CONTROL_DATA_WIDTH) - ) - control_s_axi_U - ( - .AWVALID(s_axi_control_AWVALID), - .AWREADY(s_axi_control_AWREADY), - .AWADDR(s_axi_control_AWADDR), - .WVALID(s_axi_control_WVALID), - .WREADY(s_axi_control_WREADY), - .WDATA(s_axi_control_WDATA), - .WSTRB(s_axi_control_WSTRB), - .ARVALID(s_axi_control_ARVALID), - .ARREADY(s_axi_control_ARREADY), - .ARADDR(s_axi_control_ARADDR), - .RVALID(s_axi_control_RVALID), - .RREADY(s_axi_control_RREADY), - .RDATA(s_axi_control_RDATA), - .RRESP(s_axi_control_RRESP), - .BVALID(s_axi_control_BVALID), - .BREADY(s_axi_control_BREADY), - .BRESP(s_axi_control_BRESP), - .ACLK(ap_clk), - .ARESET(ap_rst_n_inv), - .ACLK_EN(1'b1), - .in_0(in_0), - .out_0(out_0), - .in_1(in_1), - .out_1(out_1), - .in_2(in_2), - .out_2(out_2), - .in_3(in_3), - .out_3(out_3), - .in_4(in_4), - .out_4(out_4), - .in_5(in_5), - .out_5(out_5), - .in_6(in_6), - .out_6(out_6), - .in_7(in_7), - .out_7(out_7), - .in_8(in_8), - .out_8(out_8), - .in_9(in_9), - .out_9(out_9), - .in_10(in_10), - .out_10(out_10), - .in_11(in_11), - .out_11(out_11), - .iters(iters), - .ap_start(ap_start), - .interrupt(interrupt), - .ap_ready(ap_ready), - .ap_done(ap_done), - .ap_idle(ap_idle) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_rd_unikernel_0 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_rd_unikernel_0__dout), - .if_empty_n(k_rd_unikernel_0__empty_n), - .if_read(k_rd_unikernel_0__read), - .if_read_ce(1'b1), - .if_din(k_rd_unikernel_0__din), - .if_full_n(k_rd_unikernel_0__full_n), - .if_write(k_rd_unikernel_0__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_rd_unikernel_10 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_rd_unikernel_10__dout), - .if_empty_n(k_rd_unikernel_10__empty_n), - .if_read(k_rd_unikernel_10__read), - .if_read_ce(1'b1), - .if_din(k_rd_unikernel_10__din), - .if_full_n(k_rd_unikernel_10__full_n), - .if_write(k_rd_unikernel_10__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_rd_unikernel_11 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_rd_unikernel_11__dout), - .if_empty_n(k_rd_unikernel_11__empty_n), - .if_read(k_rd_unikernel_11__read), - .if_read_ce(1'b1), - .if_din(k_rd_unikernel_11__din), - .if_full_n(k_rd_unikernel_11__full_n), - .if_write(k_rd_unikernel_11__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_rd_unikernel_1 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_rd_unikernel_1__dout), - .if_empty_n(k_rd_unikernel_1__empty_n), - .if_read(k_rd_unikernel_1__read), - .if_read_ce(1'b1), - .if_din(k_rd_unikernel_1__din), - .if_full_n(k_rd_unikernel_1__full_n), - .if_write(k_rd_unikernel_1__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_rd_unikernel_2 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_rd_unikernel_2__dout), - .if_empty_n(k_rd_unikernel_2__empty_n), - .if_read(k_rd_unikernel_2__read), - .if_read_ce(1'b1), - .if_din(k_rd_unikernel_2__din), - .if_full_n(k_rd_unikernel_2__full_n), - .if_write(k_rd_unikernel_2__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_rd_unikernel_3 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_rd_unikernel_3__dout), - .if_empty_n(k_rd_unikernel_3__empty_n), - .if_read(k_rd_unikernel_3__read), - .if_read_ce(1'b1), - .if_din(k_rd_unikernel_3__din), - .if_full_n(k_rd_unikernel_3__full_n), - .if_write(k_rd_unikernel_3__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_rd_unikernel_4 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_rd_unikernel_4__dout), - .if_empty_n(k_rd_unikernel_4__empty_n), - .if_read(k_rd_unikernel_4__read), - .if_read_ce(1'b1), - .if_din(k_rd_unikernel_4__din), - .if_full_n(k_rd_unikernel_4__full_n), - .if_write(k_rd_unikernel_4__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_rd_unikernel_5 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_rd_unikernel_5__dout), - .if_empty_n(k_rd_unikernel_5__empty_n), - .if_read(k_rd_unikernel_5__read), - .if_read_ce(1'b1), - .if_din(k_rd_unikernel_5__din), - .if_full_n(k_rd_unikernel_5__full_n), - .if_write(k_rd_unikernel_5__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_rd_unikernel_6 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_rd_unikernel_6__dout), - .if_empty_n(k_rd_unikernel_6__empty_n), - .if_read(k_rd_unikernel_6__read), - .if_read_ce(1'b1), - .if_din(k_rd_unikernel_6__din), - .if_full_n(k_rd_unikernel_6__full_n), - .if_write(k_rd_unikernel_6__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_rd_unikernel_7 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_rd_unikernel_7__dout), - .if_empty_n(k_rd_unikernel_7__empty_n), - .if_read(k_rd_unikernel_7__read), - .if_read_ce(1'b1), - .if_din(k_rd_unikernel_7__din), - .if_full_n(k_rd_unikernel_7__full_n), - .if_write(k_rd_unikernel_7__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_rd_unikernel_8 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_rd_unikernel_8__dout), - .if_empty_n(k_rd_unikernel_8__empty_n), - .if_read(k_rd_unikernel_8__read), - .if_read_ce(1'b1), - .if_din(k_rd_unikernel_8__din), - .if_full_n(k_rd_unikernel_8__full_n), - .if_write(k_rd_unikernel_8__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_rd_unikernel_9 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_rd_unikernel_9__dout), - .if_empty_n(k_rd_unikernel_9__empty_n), - .if_read(k_rd_unikernel_9__read), - .if_read_ce(1'b1), - .if_din(k_rd_unikernel_9__din), - .if_full_n(k_rd_unikernel_9__full_n), - .if_write(k_rd_unikernel_9__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_wr_unikernel_0 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_wr_unikernel_0__dout), - .if_empty_n(k_wr_unikernel_0__empty_n), - .if_read(k_wr_unikernel_0__read), - .if_read_ce(1'b1), - .if_din(k_wr_unikernel_0__din), - .if_full_n(k_wr_unikernel_0__full_n), - .if_write(k_wr_unikernel_0__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_wr_unikernel_10 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_wr_unikernel_10__dout), - .if_empty_n(k_wr_unikernel_10__empty_n), - .if_read(k_wr_unikernel_10__read), - .if_read_ce(1'b1), - .if_din(k_wr_unikernel_10__din), - .if_full_n(k_wr_unikernel_10__full_n), - .if_write(k_wr_unikernel_10__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_wr_unikernel_11 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_wr_unikernel_11__dout), - .if_empty_n(k_wr_unikernel_11__empty_n), - .if_read(k_wr_unikernel_11__read), - .if_read_ce(1'b1), - .if_din(k_wr_unikernel_11__din), - .if_full_n(k_wr_unikernel_11__full_n), - .if_write(k_wr_unikernel_11__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_wr_unikernel_1 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_wr_unikernel_1__dout), - .if_empty_n(k_wr_unikernel_1__empty_n), - .if_read(k_wr_unikernel_1__read), - .if_read_ce(1'b1), - .if_din(k_wr_unikernel_1__din), - .if_full_n(k_wr_unikernel_1__full_n), - .if_write(k_wr_unikernel_1__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_wr_unikernel_2 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_wr_unikernel_2__dout), - .if_empty_n(k_wr_unikernel_2__empty_n), - .if_read(k_wr_unikernel_2__read), - .if_read_ce(1'b1), - .if_din(k_wr_unikernel_2__din), - .if_full_n(k_wr_unikernel_2__full_n), - .if_write(k_wr_unikernel_2__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_wr_unikernel_3 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_wr_unikernel_3__dout), - .if_empty_n(k_wr_unikernel_3__empty_n), - .if_read(k_wr_unikernel_3__read), - .if_read_ce(1'b1), - .if_din(k_wr_unikernel_3__din), - .if_full_n(k_wr_unikernel_3__full_n), - .if_write(k_wr_unikernel_3__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_wr_unikernel_4 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_wr_unikernel_4__dout), - .if_empty_n(k_wr_unikernel_4__empty_n), - .if_read(k_wr_unikernel_4__read), - .if_read_ce(1'b1), - .if_din(k_wr_unikernel_4__din), - .if_full_n(k_wr_unikernel_4__full_n), - .if_write(k_wr_unikernel_4__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_wr_unikernel_5 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_wr_unikernel_5__dout), - .if_empty_n(k_wr_unikernel_5__empty_n), - .if_read(k_wr_unikernel_5__read), - .if_read_ce(1'b1), - .if_din(k_wr_unikernel_5__din), - .if_full_n(k_wr_unikernel_5__full_n), - .if_write(k_wr_unikernel_5__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_wr_unikernel_6 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_wr_unikernel_6__dout), - .if_empty_n(k_wr_unikernel_6__empty_n), - .if_read(k_wr_unikernel_6__read), - .if_read_ce(1'b1), - .if_din(k_wr_unikernel_6__din), - .if_full_n(k_wr_unikernel_6__full_n), - .if_write(k_wr_unikernel_6__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_wr_unikernel_7 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_wr_unikernel_7__dout), - .if_empty_n(k_wr_unikernel_7__empty_n), - .if_read(k_wr_unikernel_7__read), - .if_read_ce(1'b1), - .if_din(k_wr_unikernel_7__din), - .if_full_n(k_wr_unikernel_7__full_n), - .if_write(k_wr_unikernel_7__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_wr_unikernel_8 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_wr_unikernel_8__dout), - .if_empty_n(k_wr_unikernel_8__empty_n), - .if_read(k_wr_unikernel_8__read), - .if_read_ce(1'b1), - .if_din(k_wr_unikernel_8__din), - .if_full_n(k_wr_unikernel_8__full_n), - .if_write(k_wr_unikernel_8__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) fifo - #( - .DATA_WIDTH(513), - .ADDR_WIDTH(2), - .DEPTH(3) - ) - k_wr_unikernel_9 - ( - .clk(ap_clk), - .reset(~ap_rst_n), - .if_dout(k_wr_unikernel_9__dout), - .if_empty_n(k_wr_unikernel_9__empty_n), - .if_read(k_wr_unikernel_9__read), - .if_read_ce(1'b1), - .if_din(k_wr_unikernel_9__din), - .if_full_n(k_wr_unikernel_9__full_n), - .if_write(k_wr_unikernel_9__write), - .if_write_ce(1'b1) - ); - - - (* keep_hierarchy = "yes" *) HEAT3D - HEAT3D_0 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(HEAT3D_0__ap_start), - .ap_done(HEAT3D_0__ap_done), - .ap_idle(HEAT3D_0__ap_idle), - .ap_ready(HEAT3D_0__ap_ready), - .iters(HEAT3D_0___iters__q0), - .in_s_dout(k_rd_unikernel_0__dout), - .in_peek_dout(k_rd_unikernel_0__dout), - .in_s_empty_n(k_rd_unikernel_0__empty_n), - .in_peek_empty_n(k_rd_unikernel_0__empty_n), - .in_s_read(k_rd_unikernel_0__read), - .in_peek_read(), - .out_r_din(k_wr_unikernel_0__din), - .out_r_full_n(k_wr_unikernel_0__full_n), - .out_r_write(k_wr_unikernel_0__write) - ); - - - (* keep_hierarchy = "yes" *) HEAT3D - HEAT3D_1 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(HEAT3D_1__ap_start), - .ap_done(HEAT3D_1__ap_done), - .ap_idle(HEAT3D_1__ap_idle), - .ap_ready(HEAT3D_1__ap_ready), - .iters(HEAT3D_1___iters__q0), - .in_s_dout(k_rd_unikernel_1__dout), - .in_peek_dout(k_rd_unikernel_1__dout), - .in_s_empty_n(k_rd_unikernel_1__empty_n), - .in_peek_empty_n(k_rd_unikernel_1__empty_n), - .in_s_read(k_rd_unikernel_1__read), - .in_peek_read(), - .out_r_din(k_wr_unikernel_1__din), - .out_r_full_n(k_wr_unikernel_1__full_n), - .out_r_write(k_wr_unikernel_1__write) - ); - - - (* keep_hierarchy = "yes" *) HEAT3D - HEAT3D_2 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(HEAT3D_2__ap_start), - .ap_done(HEAT3D_2__ap_done), - .ap_idle(HEAT3D_2__ap_idle), - .ap_ready(HEAT3D_2__ap_ready), - .iters(HEAT3D_2___iters__q0), - .in_s_dout(k_rd_unikernel_2__dout), - .in_peek_dout(k_rd_unikernel_2__dout), - .in_s_empty_n(k_rd_unikernel_2__empty_n), - .in_peek_empty_n(k_rd_unikernel_2__empty_n), - .in_s_read(k_rd_unikernel_2__read), - .in_peek_read(), - .out_r_din(k_wr_unikernel_2__din), - .out_r_full_n(k_wr_unikernel_2__full_n), - .out_r_write(k_wr_unikernel_2__write) - ); - - - (* keep_hierarchy = "yes" *) HEAT3D - HEAT3D_3 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(HEAT3D_3__ap_start), - .ap_done(HEAT3D_3__ap_done), - .ap_idle(HEAT3D_3__ap_idle), - .ap_ready(HEAT3D_3__ap_ready), - .iters(HEAT3D_3___iters__q0), - .in_s_dout(k_rd_unikernel_3__dout), - .in_peek_dout(k_rd_unikernel_3__dout), - .in_s_empty_n(k_rd_unikernel_3__empty_n), - .in_peek_empty_n(k_rd_unikernel_3__empty_n), - .in_s_read(k_rd_unikernel_3__read), - .in_peek_read(), - .out_r_din(k_wr_unikernel_3__din), - .out_r_full_n(k_wr_unikernel_3__full_n), - .out_r_write(k_wr_unikernel_3__write) - ); - - - (* keep_hierarchy = "yes" *) HEAT3D - HEAT3D_4 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(HEAT3D_4__ap_start), - .ap_done(HEAT3D_4__ap_done), - .ap_idle(HEAT3D_4__ap_idle), - .ap_ready(HEAT3D_4__ap_ready), - .iters(HEAT3D_4___iters__q0), - .in_s_dout(k_rd_unikernel_4__dout), - .in_peek_dout(k_rd_unikernel_4__dout), - .in_s_empty_n(k_rd_unikernel_4__empty_n), - .in_peek_empty_n(k_rd_unikernel_4__empty_n), - .in_s_read(k_rd_unikernel_4__read), - .in_peek_read(), - .out_r_din(k_wr_unikernel_4__din), - .out_r_full_n(k_wr_unikernel_4__full_n), - .out_r_write(k_wr_unikernel_4__write) - ); - - - (* keep_hierarchy = "yes" *) HEAT3D - HEAT3D_5 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(HEAT3D_5__ap_start), - .ap_done(HEAT3D_5__ap_done), - .ap_idle(HEAT3D_5__ap_idle), - .ap_ready(HEAT3D_5__ap_ready), - .iters(HEAT3D_5___iters__q0), - .in_s_dout(k_rd_unikernel_5__dout), - .in_peek_dout(k_rd_unikernel_5__dout), - .in_s_empty_n(k_rd_unikernel_5__empty_n), - .in_peek_empty_n(k_rd_unikernel_5__empty_n), - .in_s_read(k_rd_unikernel_5__read), - .in_peek_read(), - .out_r_din(k_wr_unikernel_5__din), - .out_r_full_n(k_wr_unikernel_5__full_n), - .out_r_write(k_wr_unikernel_5__write) - ); - - - (* keep_hierarchy = "yes" *) HEAT3D - HEAT3D_6 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(HEAT3D_6__ap_start), - .ap_done(HEAT3D_6__ap_done), - .ap_idle(HEAT3D_6__ap_idle), - .ap_ready(HEAT3D_6__ap_ready), - .iters(HEAT3D_6___iters__q0), - .in_s_dout(k_rd_unikernel_6__dout), - .in_peek_dout(k_rd_unikernel_6__dout), - .in_s_empty_n(k_rd_unikernel_6__empty_n), - .in_peek_empty_n(k_rd_unikernel_6__empty_n), - .in_s_read(k_rd_unikernel_6__read), - .in_peek_read(), - .out_r_din(k_wr_unikernel_6__din), - .out_r_full_n(k_wr_unikernel_6__full_n), - .out_r_write(k_wr_unikernel_6__write) - ); - - - (* keep_hierarchy = "yes" *) HEAT3D - HEAT3D_7 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(HEAT3D_7__ap_start), - .ap_done(HEAT3D_7__ap_done), - .ap_idle(HEAT3D_7__ap_idle), - .ap_ready(HEAT3D_7__ap_ready), - .iters(HEAT3D_7___iters__q0), - .in_s_dout(k_rd_unikernel_7__dout), - .in_peek_dout(k_rd_unikernel_7__dout), - .in_s_empty_n(k_rd_unikernel_7__empty_n), - .in_peek_empty_n(k_rd_unikernel_7__empty_n), - .in_s_read(k_rd_unikernel_7__read), - .in_peek_read(), - .out_r_din(k_wr_unikernel_7__din), - .out_r_full_n(k_wr_unikernel_7__full_n), - .out_r_write(k_wr_unikernel_7__write) - ); - - - (* keep_hierarchy = "yes" *) HEAT3D - HEAT3D_8 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(HEAT3D_8__ap_start), - .ap_done(HEAT3D_8__ap_done), - .ap_idle(HEAT3D_8__ap_idle), - .ap_ready(HEAT3D_8__ap_ready), - .iters(HEAT3D_8___iters__q0), - .in_s_dout(k_rd_unikernel_8__dout), - .in_peek_dout(k_rd_unikernel_8__dout), - .in_s_empty_n(k_rd_unikernel_8__empty_n), - .in_peek_empty_n(k_rd_unikernel_8__empty_n), - .in_s_read(k_rd_unikernel_8__read), - .in_peek_read(), - .out_r_din(k_wr_unikernel_8__din), - .out_r_full_n(k_wr_unikernel_8__full_n), - .out_r_write(k_wr_unikernel_8__write) - ); - - - (* keep_hierarchy = "yes" *) HEAT3D - HEAT3D_9 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(HEAT3D_9__ap_start), - .ap_done(HEAT3D_9__ap_done), - .ap_idle(HEAT3D_9__ap_idle), - .ap_ready(HEAT3D_9__ap_ready), - .iters(HEAT3D_9___iters__q0), - .in_s_dout(k_rd_unikernel_9__dout), - .in_peek_dout(k_rd_unikernel_9__dout), - .in_s_empty_n(k_rd_unikernel_9__empty_n), - .in_peek_empty_n(k_rd_unikernel_9__empty_n), - .in_s_read(k_rd_unikernel_9__read), - .in_peek_read(), - .out_r_din(k_wr_unikernel_9__din), - .out_r_full_n(k_wr_unikernel_9__full_n), - .out_r_write(k_wr_unikernel_9__write) - ); - - - (* keep_hierarchy = "yes" *) HEAT3D - HEAT3D_10 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(HEAT3D_10__ap_start), - .ap_done(HEAT3D_10__ap_done), - .ap_idle(HEAT3D_10__ap_idle), - .ap_ready(HEAT3D_10__ap_ready), - .iters(HEAT3D_10___iters__q0), - .in_s_dout(k_rd_unikernel_10__dout), - .in_peek_dout(k_rd_unikernel_10__dout), - .in_s_empty_n(k_rd_unikernel_10__empty_n), - .in_peek_empty_n(k_rd_unikernel_10__empty_n), - .in_s_read(k_rd_unikernel_10__read), - .in_peek_read(), - .out_r_din(k_wr_unikernel_10__din), - .out_r_full_n(k_wr_unikernel_10__full_n), - .out_r_write(k_wr_unikernel_10__write) - ); - - - (* keep_hierarchy = "yes" *) HEAT3D - HEAT3D_11 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(HEAT3D_11__ap_start), - .ap_done(HEAT3D_11__ap_done), - .ap_idle(HEAT3D_11__ap_idle), - .ap_ready(HEAT3D_11__ap_ready), - .iters(HEAT3D_11___iters__q0), - .in_s_dout(k_rd_unikernel_11__dout), - .in_peek_dout(k_rd_unikernel_11__dout), - .in_s_empty_n(k_rd_unikernel_11__empty_n), - .in_peek_empty_n(k_rd_unikernel_11__empty_n), - .in_s_read(k_rd_unikernel_11__read), - .in_peek_read(), - .out_r_din(k_wr_unikernel_11__din), - .out_r_full_n(k_wr_unikernel_11__full_n), - .out_r_write(k_wr_unikernel_11__write) - ); - - - (* keep_hierarchy = "yes" *) inter_kernel - inter_kernel_0 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(inter_kernel_0__ap_start), - .ap_done(inter_kernel_0__ap_done), - .ap_idle(inter_kernel_0__ap_idle), - .ap_ready(inter_kernel_0__ap_ready), - .a_read_addr_din(in_0_read_addr__din), - .a_read_addr_full_n(in_0_read_addr__full_n), - .a_read_addr_write(in_0_read_addr__write), - .a_read_data_s_dout({1'b0, in_0_read_data__dout}), - .a_read_data_peek_dout({1'b0, in_0_read_data__dout}), - .a_read_data_s_empty_n(in_0_read_data__empty_n), - .a_read_data_peek_empty_n(in_0_read_data__empty_n), - .a_read_data_s_read(in_0_read_data__read), - .a_read_data_peek_read(), - .a_write_addr_din(in_0_write_addr__din), - .a_write_addr_full_n(in_0_write_addr__full_n), - .a_write_addr_write(in_0_write_addr__write), - .a_write_data_din(in_0_write_data__din), - .a_write_data_full_n(in_0_write_data__full_n), - .a_write_data_write(in_0_write_data__write), - .a_write_resp_s_dout({1'b0, in_0_write_resp__dout}), - .a_write_resp_peek_dout({1'b0, in_0_write_resp__dout}), - .a_write_resp_s_empty_n(in_0_write_resp__empty_n), - .a_write_resp_peek_empty_n(in_0_write_resp__empty_n), - .a_write_resp_s_read(in_0_write_resp__read), - .a_write_resp_peek_read(), - .iters(inter_kernel_0___iters__q0), - .stream_out_din(k_rd_unikernel_0__din), - .stream_out_full_n(k_rd_unikernel_0__full_n), - .stream_out_write(k_rd_unikernel_0__write), - .stream_in_s_dout(k_wr_unikernel_0__dout), - .stream_in_peek_dout(k_wr_unikernel_0__dout), - .stream_in_s_empty_n(k_wr_unikernel_0__empty_n), - .stream_in_peek_empty_n(k_wr_unikernel_0__empty_n), - .stream_in_s_read(k_wr_unikernel_0__read), - .stream_in_peek_read(), - .b_read_addr_din(out_0_read_addr__din), - .b_read_addr_full_n(out_0_read_addr__full_n), - .b_read_addr_write(out_0_read_addr__write), - .b_read_data_s_dout({1'b0, out_0_read_data__dout}), - .b_read_data_peek_dout({1'b0, out_0_read_data__dout}), - .b_read_data_s_empty_n(out_0_read_data__empty_n), - .b_read_data_peek_empty_n(out_0_read_data__empty_n), - .b_read_data_s_read(out_0_read_data__read), - .b_read_data_peek_read(), - .b_write_addr_din(out_0_write_addr__din), - .b_write_addr_full_n(out_0_write_addr__full_n), - .b_write_addr_write(out_0_write_addr__write), - .b_write_data_din(out_0_write_data__din), - .b_write_data_full_n(out_0_write_data__full_n), - .b_write_data_write(out_0_write_data__write), - .b_write_resp_s_dout({1'b0, out_0_write_resp__dout}), - .b_write_resp_peek_dout({1'b0, out_0_write_resp__dout}), - .b_write_resp_s_empty_n(out_0_write_resp__empty_n), - .b_write_resp_peek_empty_n(out_0_write_resp__empty_n), - .b_write_resp_s_read(out_0_write_resp__read), - .b_write_resp_peek_read() - ); - - - (* keep_hierarchy = "yes" *) inter_kernel - inter_kernel_1 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(inter_kernel_1__ap_start), - .ap_done(inter_kernel_1__ap_done), - .ap_idle(inter_kernel_1__ap_idle), - .ap_ready(inter_kernel_1__ap_ready), - .a_read_addr_din(in_1_read_addr__din), - .a_read_addr_full_n(in_1_read_addr__full_n), - .a_read_addr_write(in_1_read_addr__write), - .a_read_data_s_dout({1'b0, in_1_read_data__dout}), - .a_read_data_peek_dout({1'b0, in_1_read_data__dout}), - .a_read_data_s_empty_n(in_1_read_data__empty_n), - .a_read_data_peek_empty_n(in_1_read_data__empty_n), - .a_read_data_s_read(in_1_read_data__read), - .a_read_data_peek_read(), - .a_write_addr_din(in_1_write_addr__din), - .a_write_addr_full_n(in_1_write_addr__full_n), - .a_write_addr_write(in_1_write_addr__write), - .a_write_data_din(in_1_write_data__din), - .a_write_data_full_n(in_1_write_data__full_n), - .a_write_data_write(in_1_write_data__write), - .a_write_resp_s_dout({1'b0, in_1_write_resp__dout}), - .a_write_resp_peek_dout({1'b0, in_1_write_resp__dout}), - .a_write_resp_s_empty_n(in_1_write_resp__empty_n), - .a_write_resp_peek_empty_n(in_1_write_resp__empty_n), - .a_write_resp_s_read(in_1_write_resp__read), - .a_write_resp_peek_read(), - .iters(inter_kernel_1___iters__q0), - .stream_out_din(k_rd_unikernel_1__din), - .stream_out_full_n(k_rd_unikernel_1__full_n), - .stream_out_write(k_rd_unikernel_1__write), - .stream_in_s_dout(k_wr_unikernel_1__dout), - .stream_in_peek_dout(k_wr_unikernel_1__dout), - .stream_in_s_empty_n(k_wr_unikernel_1__empty_n), - .stream_in_peek_empty_n(k_wr_unikernel_1__empty_n), - .stream_in_s_read(k_wr_unikernel_1__read), - .stream_in_peek_read(), - .b_read_addr_din(out_1_read_addr__din), - .b_read_addr_full_n(out_1_read_addr__full_n), - .b_read_addr_write(out_1_read_addr__write), - .b_read_data_s_dout({1'b0, out_1_read_data__dout}), - .b_read_data_peek_dout({1'b0, out_1_read_data__dout}), - .b_read_data_s_empty_n(out_1_read_data__empty_n), - .b_read_data_peek_empty_n(out_1_read_data__empty_n), - .b_read_data_s_read(out_1_read_data__read), - .b_read_data_peek_read(), - .b_write_addr_din(out_1_write_addr__din), - .b_write_addr_full_n(out_1_write_addr__full_n), - .b_write_addr_write(out_1_write_addr__write), - .b_write_data_din(out_1_write_data__din), - .b_write_data_full_n(out_1_write_data__full_n), - .b_write_data_write(out_1_write_data__write), - .b_write_resp_s_dout({1'b0, out_1_write_resp__dout}), - .b_write_resp_peek_dout({1'b0, out_1_write_resp__dout}), - .b_write_resp_s_empty_n(out_1_write_resp__empty_n), - .b_write_resp_peek_empty_n(out_1_write_resp__empty_n), - .b_write_resp_s_read(out_1_write_resp__read), - .b_write_resp_peek_read() - ); - - - (* keep_hierarchy = "yes" *) inter_kernel - inter_kernel_2 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(inter_kernel_2__ap_start), - .ap_done(inter_kernel_2__ap_done), - .ap_idle(inter_kernel_2__ap_idle), - .ap_ready(inter_kernel_2__ap_ready), - .a_read_addr_din(in_2_read_addr__din), - .a_read_addr_full_n(in_2_read_addr__full_n), - .a_read_addr_write(in_2_read_addr__write), - .a_read_data_s_dout({1'b0, in_2_read_data__dout}), - .a_read_data_peek_dout({1'b0, in_2_read_data__dout}), - .a_read_data_s_empty_n(in_2_read_data__empty_n), - .a_read_data_peek_empty_n(in_2_read_data__empty_n), - .a_read_data_s_read(in_2_read_data__read), - .a_read_data_peek_read(), - .a_write_addr_din(in_2_write_addr__din), - .a_write_addr_full_n(in_2_write_addr__full_n), - .a_write_addr_write(in_2_write_addr__write), - .a_write_data_din(in_2_write_data__din), - .a_write_data_full_n(in_2_write_data__full_n), - .a_write_data_write(in_2_write_data__write), - .a_write_resp_s_dout({1'b0, in_2_write_resp__dout}), - .a_write_resp_peek_dout({1'b0, in_2_write_resp__dout}), - .a_write_resp_s_empty_n(in_2_write_resp__empty_n), - .a_write_resp_peek_empty_n(in_2_write_resp__empty_n), - .a_write_resp_s_read(in_2_write_resp__read), - .a_write_resp_peek_read(), - .iters(inter_kernel_2___iters__q0), - .stream_out_din(k_rd_unikernel_2__din), - .stream_out_full_n(k_rd_unikernel_2__full_n), - .stream_out_write(k_rd_unikernel_2__write), - .stream_in_s_dout(k_wr_unikernel_2__dout), - .stream_in_peek_dout(k_wr_unikernel_2__dout), - .stream_in_s_empty_n(k_wr_unikernel_2__empty_n), - .stream_in_peek_empty_n(k_wr_unikernel_2__empty_n), - .stream_in_s_read(k_wr_unikernel_2__read), - .stream_in_peek_read(), - .b_read_addr_din(out_2_read_addr__din), - .b_read_addr_full_n(out_2_read_addr__full_n), - .b_read_addr_write(out_2_read_addr__write), - .b_read_data_s_dout({1'b0, out_2_read_data__dout}), - .b_read_data_peek_dout({1'b0, out_2_read_data__dout}), - .b_read_data_s_empty_n(out_2_read_data__empty_n), - .b_read_data_peek_empty_n(out_2_read_data__empty_n), - .b_read_data_s_read(out_2_read_data__read), - .b_read_data_peek_read(), - .b_write_addr_din(out_2_write_addr__din), - .b_write_addr_full_n(out_2_write_addr__full_n), - .b_write_addr_write(out_2_write_addr__write), - .b_write_data_din(out_2_write_data__din), - .b_write_data_full_n(out_2_write_data__full_n), - .b_write_data_write(out_2_write_data__write), - .b_write_resp_s_dout({1'b0, out_2_write_resp__dout}), - .b_write_resp_peek_dout({1'b0, out_2_write_resp__dout}), - .b_write_resp_s_empty_n(out_2_write_resp__empty_n), - .b_write_resp_peek_empty_n(out_2_write_resp__empty_n), - .b_write_resp_s_read(out_2_write_resp__read), - .b_write_resp_peek_read() - ); - - - (* keep_hierarchy = "yes" *) inter_kernel - inter_kernel_3 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(inter_kernel_3__ap_start), - .ap_done(inter_kernel_3__ap_done), - .ap_idle(inter_kernel_3__ap_idle), - .ap_ready(inter_kernel_3__ap_ready), - .a_read_addr_din(in_3_read_addr__din), - .a_read_addr_full_n(in_3_read_addr__full_n), - .a_read_addr_write(in_3_read_addr__write), - .a_read_data_s_dout({1'b0, in_3_read_data__dout}), - .a_read_data_peek_dout({1'b0, in_3_read_data__dout}), - .a_read_data_s_empty_n(in_3_read_data__empty_n), - .a_read_data_peek_empty_n(in_3_read_data__empty_n), - .a_read_data_s_read(in_3_read_data__read), - .a_read_data_peek_read(), - .a_write_addr_din(in_3_write_addr__din), - .a_write_addr_full_n(in_3_write_addr__full_n), - .a_write_addr_write(in_3_write_addr__write), - .a_write_data_din(in_3_write_data__din), - .a_write_data_full_n(in_3_write_data__full_n), - .a_write_data_write(in_3_write_data__write), - .a_write_resp_s_dout({1'b0, in_3_write_resp__dout}), - .a_write_resp_peek_dout({1'b0, in_3_write_resp__dout}), - .a_write_resp_s_empty_n(in_3_write_resp__empty_n), - .a_write_resp_peek_empty_n(in_3_write_resp__empty_n), - .a_write_resp_s_read(in_3_write_resp__read), - .a_write_resp_peek_read(), - .iters(inter_kernel_3___iters__q0), - .stream_out_din(k_rd_unikernel_3__din), - .stream_out_full_n(k_rd_unikernel_3__full_n), - .stream_out_write(k_rd_unikernel_3__write), - .stream_in_s_dout(k_wr_unikernel_3__dout), - .stream_in_peek_dout(k_wr_unikernel_3__dout), - .stream_in_s_empty_n(k_wr_unikernel_3__empty_n), - .stream_in_peek_empty_n(k_wr_unikernel_3__empty_n), - .stream_in_s_read(k_wr_unikernel_3__read), - .stream_in_peek_read(), - .b_read_addr_din(out_3_read_addr__din), - .b_read_addr_full_n(out_3_read_addr__full_n), - .b_read_addr_write(out_3_read_addr__write), - .b_read_data_s_dout({1'b0, out_3_read_data__dout}), - .b_read_data_peek_dout({1'b0, out_3_read_data__dout}), - .b_read_data_s_empty_n(out_3_read_data__empty_n), - .b_read_data_peek_empty_n(out_3_read_data__empty_n), - .b_read_data_s_read(out_3_read_data__read), - .b_read_data_peek_read(), - .b_write_addr_din(out_3_write_addr__din), - .b_write_addr_full_n(out_3_write_addr__full_n), - .b_write_addr_write(out_3_write_addr__write), - .b_write_data_din(out_3_write_data__din), - .b_write_data_full_n(out_3_write_data__full_n), - .b_write_data_write(out_3_write_data__write), - .b_write_resp_s_dout({1'b0, out_3_write_resp__dout}), - .b_write_resp_peek_dout({1'b0, out_3_write_resp__dout}), - .b_write_resp_s_empty_n(out_3_write_resp__empty_n), - .b_write_resp_peek_empty_n(out_3_write_resp__empty_n), - .b_write_resp_s_read(out_3_write_resp__read), - .b_write_resp_peek_read() - ); - - - (* keep_hierarchy = "yes" *) inter_kernel - inter_kernel_4 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(inter_kernel_4__ap_start), - .ap_done(inter_kernel_4__ap_done), - .ap_idle(inter_kernel_4__ap_idle), - .ap_ready(inter_kernel_4__ap_ready), - .a_read_addr_din(in_4_read_addr__din), - .a_read_addr_full_n(in_4_read_addr__full_n), - .a_read_addr_write(in_4_read_addr__write), - .a_read_data_s_dout({1'b0, in_4_read_data__dout}), - .a_read_data_peek_dout({1'b0, in_4_read_data__dout}), - .a_read_data_s_empty_n(in_4_read_data__empty_n), - .a_read_data_peek_empty_n(in_4_read_data__empty_n), - .a_read_data_s_read(in_4_read_data__read), - .a_read_data_peek_read(), - .a_write_addr_din(in_4_write_addr__din), - .a_write_addr_full_n(in_4_write_addr__full_n), - .a_write_addr_write(in_4_write_addr__write), - .a_write_data_din(in_4_write_data__din), - .a_write_data_full_n(in_4_write_data__full_n), - .a_write_data_write(in_4_write_data__write), - .a_write_resp_s_dout({1'b0, in_4_write_resp__dout}), - .a_write_resp_peek_dout({1'b0, in_4_write_resp__dout}), - .a_write_resp_s_empty_n(in_4_write_resp__empty_n), - .a_write_resp_peek_empty_n(in_4_write_resp__empty_n), - .a_write_resp_s_read(in_4_write_resp__read), - .a_write_resp_peek_read(), - .iters(inter_kernel_4___iters__q0), - .stream_out_din(k_rd_unikernel_4__din), - .stream_out_full_n(k_rd_unikernel_4__full_n), - .stream_out_write(k_rd_unikernel_4__write), - .stream_in_s_dout(k_wr_unikernel_4__dout), - .stream_in_peek_dout(k_wr_unikernel_4__dout), - .stream_in_s_empty_n(k_wr_unikernel_4__empty_n), - .stream_in_peek_empty_n(k_wr_unikernel_4__empty_n), - .stream_in_s_read(k_wr_unikernel_4__read), - .stream_in_peek_read(), - .b_read_addr_din(out_4_read_addr__din), - .b_read_addr_full_n(out_4_read_addr__full_n), - .b_read_addr_write(out_4_read_addr__write), - .b_read_data_s_dout({1'b0, out_4_read_data__dout}), - .b_read_data_peek_dout({1'b0, out_4_read_data__dout}), - .b_read_data_s_empty_n(out_4_read_data__empty_n), - .b_read_data_peek_empty_n(out_4_read_data__empty_n), - .b_read_data_s_read(out_4_read_data__read), - .b_read_data_peek_read(), - .b_write_addr_din(out_4_write_addr__din), - .b_write_addr_full_n(out_4_write_addr__full_n), - .b_write_addr_write(out_4_write_addr__write), - .b_write_data_din(out_4_write_data__din), - .b_write_data_full_n(out_4_write_data__full_n), - .b_write_data_write(out_4_write_data__write), - .b_write_resp_s_dout({1'b0, out_4_write_resp__dout}), - .b_write_resp_peek_dout({1'b0, out_4_write_resp__dout}), - .b_write_resp_s_empty_n(out_4_write_resp__empty_n), - .b_write_resp_peek_empty_n(out_4_write_resp__empty_n), - .b_write_resp_s_read(out_4_write_resp__read), - .b_write_resp_peek_read() - ); - - - (* keep_hierarchy = "yes" *) inter_kernel - inter_kernel_5 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(inter_kernel_5__ap_start), - .ap_done(inter_kernel_5__ap_done), - .ap_idle(inter_kernel_5__ap_idle), - .ap_ready(inter_kernel_5__ap_ready), - .a_read_addr_din(in_5_read_addr__din), - .a_read_addr_full_n(in_5_read_addr__full_n), - .a_read_addr_write(in_5_read_addr__write), - .a_read_data_s_dout({1'b0, in_5_read_data__dout}), - .a_read_data_peek_dout({1'b0, in_5_read_data__dout}), - .a_read_data_s_empty_n(in_5_read_data__empty_n), - .a_read_data_peek_empty_n(in_5_read_data__empty_n), - .a_read_data_s_read(in_5_read_data__read), - .a_read_data_peek_read(), - .a_write_addr_din(in_5_write_addr__din), - .a_write_addr_full_n(in_5_write_addr__full_n), - .a_write_addr_write(in_5_write_addr__write), - .a_write_data_din(in_5_write_data__din), - .a_write_data_full_n(in_5_write_data__full_n), - .a_write_data_write(in_5_write_data__write), - .a_write_resp_s_dout({1'b0, in_5_write_resp__dout}), - .a_write_resp_peek_dout({1'b0, in_5_write_resp__dout}), - .a_write_resp_s_empty_n(in_5_write_resp__empty_n), - .a_write_resp_peek_empty_n(in_5_write_resp__empty_n), - .a_write_resp_s_read(in_5_write_resp__read), - .a_write_resp_peek_read(), - .iters(inter_kernel_5___iters__q0), - .stream_out_din(k_rd_unikernel_5__din), - .stream_out_full_n(k_rd_unikernel_5__full_n), - .stream_out_write(k_rd_unikernel_5__write), - .stream_in_s_dout(k_wr_unikernel_5__dout), - .stream_in_peek_dout(k_wr_unikernel_5__dout), - .stream_in_s_empty_n(k_wr_unikernel_5__empty_n), - .stream_in_peek_empty_n(k_wr_unikernel_5__empty_n), - .stream_in_s_read(k_wr_unikernel_5__read), - .stream_in_peek_read(), - .b_read_addr_din(out_5_read_addr__din), - .b_read_addr_full_n(out_5_read_addr__full_n), - .b_read_addr_write(out_5_read_addr__write), - .b_read_data_s_dout({1'b0, out_5_read_data__dout}), - .b_read_data_peek_dout({1'b0, out_5_read_data__dout}), - .b_read_data_s_empty_n(out_5_read_data__empty_n), - .b_read_data_peek_empty_n(out_5_read_data__empty_n), - .b_read_data_s_read(out_5_read_data__read), - .b_read_data_peek_read(), - .b_write_addr_din(out_5_write_addr__din), - .b_write_addr_full_n(out_5_write_addr__full_n), - .b_write_addr_write(out_5_write_addr__write), - .b_write_data_din(out_5_write_data__din), - .b_write_data_full_n(out_5_write_data__full_n), - .b_write_data_write(out_5_write_data__write), - .b_write_resp_s_dout({1'b0, out_5_write_resp__dout}), - .b_write_resp_peek_dout({1'b0, out_5_write_resp__dout}), - .b_write_resp_s_empty_n(out_5_write_resp__empty_n), - .b_write_resp_peek_empty_n(out_5_write_resp__empty_n), - .b_write_resp_s_read(out_5_write_resp__read), - .b_write_resp_peek_read() - ); - - - (* keep_hierarchy = "yes" *) inter_kernel - inter_kernel_6 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(inter_kernel_6__ap_start), - .ap_done(inter_kernel_6__ap_done), - .ap_idle(inter_kernel_6__ap_idle), - .ap_ready(inter_kernel_6__ap_ready), - .a_read_addr_din(in_6_read_addr__din), - .a_read_addr_full_n(in_6_read_addr__full_n), - .a_read_addr_write(in_6_read_addr__write), - .a_read_data_s_dout({1'b0, in_6_read_data__dout}), - .a_read_data_peek_dout({1'b0, in_6_read_data__dout}), - .a_read_data_s_empty_n(in_6_read_data__empty_n), - .a_read_data_peek_empty_n(in_6_read_data__empty_n), - .a_read_data_s_read(in_6_read_data__read), - .a_read_data_peek_read(), - .a_write_addr_din(in_6_write_addr__din), - .a_write_addr_full_n(in_6_write_addr__full_n), - .a_write_addr_write(in_6_write_addr__write), - .a_write_data_din(in_6_write_data__din), - .a_write_data_full_n(in_6_write_data__full_n), - .a_write_data_write(in_6_write_data__write), - .a_write_resp_s_dout({1'b0, in_6_write_resp__dout}), - .a_write_resp_peek_dout({1'b0, in_6_write_resp__dout}), - .a_write_resp_s_empty_n(in_6_write_resp__empty_n), - .a_write_resp_peek_empty_n(in_6_write_resp__empty_n), - .a_write_resp_s_read(in_6_write_resp__read), - .a_write_resp_peek_read(), - .iters(inter_kernel_6___iters__q0), - .stream_out_din(k_rd_unikernel_6__din), - .stream_out_full_n(k_rd_unikernel_6__full_n), - .stream_out_write(k_rd_unikernel_6__write), - .stream_in_s_dout(k_wr_unikernel_6__dout), - .stream_in_peek_dout(k_wr_unikernel_6__dout), - .stream_in_s_empty_n(k_wr_unikernel_6__empty_n), - .stream_in_peek_empty_n(k_wr_unikernel_6__empty_n), - .stream_in_s_read(k_wr_unikernel_6__read), - .stream_in_peek_read(), - .b_read_addr_din(out_6_read_addr__din), - .b_read_addr_full_n(out_6_read_addr__full_n), - .b_read_addr_write(out_6_read_addr__write), - .b_read_data_s_dout({1'b0, out_6_read_data__dout}), - .b_read_data_peek_dout({1'b0, out_6_read_data__dout}), - .b_read_data_s_empty_n(out_6_read_data__empty_n), - .b_read_data_peek_empty_n(out_6_read_data__empty_n), - .b_read_data_s_read(out_6_read_data__read), - .b_read_data_peek_read(), - .b_write_addr_din(out_6_write_addr__din), - .b_write_addr_full_n(out_6_write_addr__full_n), - .b_write_addr_write(out_6_write_addr__write), - .b_write_data_din(out_6_write_data__din), - .b_write_data_full_n(out_6_write_data__full_n), - .b_write_data_write(out_6_write_data__write), - .b_write_resp_s_dout({1'b0, out_6_write_resp__dout}), - .b_write_resp_peek_dout({1'b0, out_6_write_resp__dout}), - .b_write_resp_s_empty_n(out_6_write_resp__empty_n), - .b_write_resp_peek_empty_n(out_6_write_resp__empty_n), - .b_write_resp_s_read(out_6_write_resp__read), - .b_write_resp_peek_read() - ); - - - (* keep_hierarchy = "yes" *) inter_kernel - inter_kernel_7 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(inter_kernel_7__ap_start), - .ap_done(inter_kernel_7__ap_done), - .ap_idle(inter_kernel_7__ap_idle), - .ap_ready(inter_kernel_7__ap_ready), - .a_read_addr_din(in_7_read_addr__din), - .a_read_addr_full_n(in_7_read_addr__full_n), - .a_read_addr_write(in_7_read_addr__write), - .a_read_data_s_dout({1'b0, in_7_read_data__dout}), - .a_read_data_peek_dout({1'b0, in_7_read_data__dout}), - .a_read_data_s_empty_n(in_7_read_data__empty_n), - .a_read_data_peek_empty_n(in_7_read_data__empty_n), - .a_read_data_s_read(in_7_read_data__read), - .a_read_data_peek_read(), - .a_write_addr_din(in_7_write_addr__din), - .a_write_addr_full_n(in_7_write_addr__full_n), - .a_write_addr_write(in_7_write_addr__write), - .a_write_data_din(in_7_write_data__din), - .a_write_data_full_n(in_7_write_data__full_n), - .a_write_data_write(in_7_write_data__write), - .a_write_resp_s_dout({1'b0, in_7_write_resp__dout}), - .a_write_resp_peek_dout({1'b0, in_7_write_resp__dout}), - .a_write_resp_s_empty_n(in_7_write_resp__empty_n), - .a_write_resp_peek_empty_n(in_7_write_resp__empty_n), - .a_write_resp_s_read(in_7_write_resp__read), - .a_write_resp_peek_read(), - .iters(inter_kernel_7___iters__q0), - .stream_out_din(k_rd_unikernel_7__din), - .stream_out_full_n(k_rd_unikernel_7__full_n), - .stream_out_write(k_rd_unikernel_7__write), - .stream_in_s_dout(k_wr_unikernel_7__dout), - .stream_in_peek_dout(k_wr_unikernel_7__dout), - .stream_in_s_empty_n(k_wr_unikernel_7__empty_n), - .stream_in_peek_empty_n(k_wr_unikernel_7__empty_n), - .stream_in_s_read(k_wr_unikernel_7__read), - .stream_in_peek_read(), - .b_read_addr_din(out_7_read_addr__din), - .b_read_addr_full_n(out_7_read_addr__full_n), - .b_read_addr_write(out_7_read_addr__write), - .b_read_data_s_dout({1'b0, out_7_read_data__dout}), - .b_read_data_peek_dout({1'b0, out_7_read_data__dout}), - .b_read_data_s_empty_n(out_7_read_data__empty_n), - .b_read_data_peek_empty_n(out_7_read_data__empty_n), - .b_read_data_s_read(out_7_read_data__read), - .b_read_data_peek_read(), - .b_write_addr_din(out_7_write_addr__din), - .b_write_addr_full_n(out_7_write_addr__full_n), - .b_write_addr_write(out_7_write_addr__write), - .b_write_data_din(out_7_write_data__din), - .b_write_data_full_n(out_7_write_data__full_n), - .b_write_data_write(out_7_write_data__write), - .b_write_resp_s_dout({1'b0, out_7_write_resp__dout}), - .b_write_resp_peek_dout({1'b0, out_7_write_resp__dout}), - .b_write_resp_s_empty_n(out_7_write_resp__empty_n), - .b_write_resp_peek_empty_n(out_7_write_resp__empty_n), - .b_write_resp_s_read(out_7_write_resp__read), - .b_write_resp_peek_read() - ); - - - (* keep_hierarchy = "yes" *) inter_kernel - inter_kernel_8 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(inter_kernel_8__ap_start), - .ap_done(inter_kernel_8__ap_done), - .ap_idle(inter_kernel_8__ap_idle), - .ap_ready(inter_kernel_8__ap_ready), - .a_read_addr_din(in_8_read_addr__din), - .a_read_addr_full_n(in_8_read_addr__full_n), - .a_read_addr_write(in_8_read_addr__write), - .a_read_data_s_dout({1'b0, in_8_read_data__dout}), - .a_read_data_peek_dout({1'b0, in_8_read_data__dout}), - .a_read_data_s_empty_n(in_8_read_data__empty_n), - .a_read_data_peek_empty_n(in_8_read_data__empty_n), - .a_read_data_s_read(in_8_read_data__read), - .a_read_data_peek_read(), - .a_write_addr_din(in_8_write_addr__din), - .a_write_addr_full_n(in_8_write_addr__full_n), - .a_write_addr_write(in_8_write_addr__write), - .a_write_data_din(in_8_write_data__din), - .a_write_data_full_n(in_8_write_data__full_n), - .a_write_data_write(in_8_write_data__write), - .a_write_resp_s_dout({1'b0, in_8_write_resp__dout}), - .a_write_resp_peek_dout({1'b0, in_8_write_resp__dout}), - .a_write_resp_s_empty_n(in_8_write_resp__empty_n), - .a_write_resp_peek_empty_n(in_8_write_resp__empty_n), - .a_write_resp_s_read(in_8_write_resp__read), - .a_write_resp_peek_read(), - .iters(inter_kernel_8___iters__q0), - .stream_out_din(k_rd_unikernel_8__din), - .stream_out_full_n(k_rd_unikernel_8__full_n), - .stream_out_write(k_rd_unikernel_8__write), - .stream_in_s_dout(k_wr_unikernel_8__dout), - .stream_in_peek_dout(k_wr_unikernel_8__dout), - .stream_in_s_empty_n(k_wr_unikernel_8__empty_n), - .stream_in_peek_empty_n(k_wr_unikernel_8__empty_n), - .stream_in_s_read(k_wr_unikernel_8__read), - .stream_in_peek_read(), - .b_read_addr_din(out_8_read_addr__din), - .b_read_addr_full_n(out_8_read_addr__full_n), - .b_read_addr_write(out_8_read_addr__write), - .b_read_data_s_dout({1'b0, out_8_read_data__dout}), - .b_read_data_peek_dout({1'b0, out_8_read_data__dout}), - .b_read_data_s_empty_n(out_8_read_data__empty_n), - .b_read_data_peek_empty_n(out_8_read_data__empty_n), - .b_read_data_s_read(out_8_read_data__read), - .b_read_data_peek_read(), - .b_write_addr_din(out_8_write_addr__din), - .b_write_addr_full_n(out_8_write_addr__full_n), - .b_write_addr_write(out_8_write_addr__write), - .b_write_data_din(out_8_write_data__din), - .b_write_data_full_n(out_8_write_data__full_n), - .b_write_data_write(out_8_write_data__write), - .b_write_resp_s_dout({1'b0, out_8_write_resp__dout}), - .b_write_resp_peek_dout({1'b0, out_8_write_resp__dout}), - .b_write_resp_s_empty_n(out_8_write_resp__empty_n), - .b_write_resp_peek_empty_n(out_8_write_resp__empty_n), - .b_write_resp_s_read(out_8_write_resp__read), - .b_write_resp_peek_read() - ); - - - (* keep_hierarchy = "yes" *) inter_kernel - inter_kernel_9 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(inter_kernel_9__ap_start), - .ap_done(inter_kernel_9__ap_done), - .ap_idle(inter_kernel_9__ap_idle), - .ap_ready(inter_kernel_9__ap_ready), - .a_read_addr_din(in_9_read_addr__din), - .a_read_addr_full_n(in_9_read_addr__full_n), - .a_read_addr_write(in_9_read_addr__write), - .a_read_data_s_dout({1'b0, in_9_read_data__dout}), - .a_read_data_peek_dout({1'b0, in_9_read_data__dout}), - .a_read_data_s_empty_n(in_9_read_data__empty_n), - .a_read_data_peek_empty_n(in_9_read_data__empty_n), - .a_read_data_s_read(in_9_read_data__read), - .a_read_data_peek_read(), - .a_write_addr_din(in_9_write_addr__din), - .a_write_addr_full_n(in_9_write_addr__full_n), - .a_write_addr_write(in_9_write_addr__write), - .a_write_data_din(in_9_write_data__din), - .a_write_data_full_n(in_9_write_data__full_n), - .a_write_data_write(in_9_write_data__write), - .a_write_resp_s_dout({1'b0, in_9_write_resp__dout}), - .a_write_resp_peek_dout({1'b0, in_9_write_resp__dout}), - .a_write_resp_s_empty_n(in_9_write_resp__empty_n), - .a_write_resp_peek_empty_n(in_9_write_resp__empty_n), - .a_write_resp_s_read(in_9_write_resp__read), - .a_write_resp_peek_read(), - .iters(inter_kernel_9___iters__q0), - .stream_out_din(k_rd_unikernel_9__din), - .stream_out_full_n(k_rd_unikernel_9__full_n), - .stream_out_write(k_rd_unikernel_9__write), - .stream_in_s_dout(k_wr_unikernel_9__dout), - .stream_in_peek_dout(k_wr_unikernel_9__dout), - .stream_in_s_empty_n(k_wr_unikernel_9__empty_n), - .stream_in_peek_empty_n(k_wr_unikernel_9__empty_n), - .stream_in_s_read(k_wr_unikernel_9__read), - .stream_in_peek_read(), - .b_read_addr_din(out_9_read_addr__din), - .b_read_addr_full_n(out_9_read_addr__full_n), - .b_read_addr_write(out_9_read_addr__write), - .b_read_data_s_dout({1'b0, out_9_read_data__dout}), - .b_read_data_peek_dout({1'b0, out_9_read_data__dout}), - .b_read_data_s_empty_n(out_9_read_data__empty_n), - .b_read_data_peek_empty_n(out_9_read_data__empty_n), - .b_read_data_s_read(out_9_read_data__read), - .b_read_data_peek_read(), - .b_write_addr_din(out_9_write_addr__din), - .b_write_addr_full_n(out_9_write_addr__full_n), - .b_write_addr_write(out_9_write_addr__write), - .b_write_data_din(out_9_write_data__din), - .b_write_data_full_n(out_9_write_data__full_n), - .b_write_data_write(out_9_write_data__write), - .b_write_resp_s_dout({1'b0, out_9_write_resp__dout}), - .b_write_resp_peek_dout({1'b0, out_9_write_resp__dout}), - .b_write_resp_s_empty_n(out_9_write_resp__empty_n), - .b_write_resp_peek_empty_n(out_9_write_resp__empty_n), - .b_write_resp_s_read(out_9_write_resp__read), - .b_write_resp_peek_read() - ); - - - (* keep_hierarchy = "yes" *) inter_kernel - inter_kernel_10 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(inter_kernel_10__ap_start), - .ap_done(inter_kernel_10__ap_done), - .ap_idle(inter_kernel_10__ap_idle), - .ap_ready(inter_kernel_10__ap_ready), - .a_read_addr_din(in_10_read_addr__din), - .a_read_addr_full_n(in_10_read_addr__full_n), - .a_read_addr_write(in_10_read_addr__write), - .a_read_data_s_dout({1'b0, in_10_read_data__dout}), - .a_read_data_peek_dout({1'b0, in_10_read_data__dout}), - .a_read_data_s_empty_n(in_10_read_data__empty_n), - .a_read_data_peek_empty_n(in_10_read_data__empty_n), - .a_read_data_s_read(in_10_read_data__read), - .a_read_data_peek_read(), - .a_write_addr_din(in_10_write_addr__din), - .a_write_addr_full_n(in_10_write_addr__full_n), - .a_write_addr_write(in_10_write_addr__write), - .a_write_data_din(in_10_write_data__din), - .a_write_data_full_n(in_10_write_data__full_n), - .a_write_data_write(in_10_write_data__write), - .a_write_resp_s_dout({1'b0, in_10_write_resp__dout}), - .a_write_resp_peek_dout({1'b0, in_10_write_resp__dout}), - .a_write_resp_s_empty_n(in_10_write_resp__empty_n), - .a_write_resp_peek_empty_n(in_10_write_resp__empty_n), - .a_write_resp_s_read(in_10_write_resp__read), - .a_write_resp_peek_read(), - .iters(inter_kernel_10___iters__q0), - .stream_out_din(k_rd_unikernel_10__din), - .stream_out_full_n(k_rd_unikernel_10__full_n), - .stream_out_write(k_rd_unikernel_10__write), - .stream_in_s_dout(k_wr_unikernel_10__dout), - .stream_in_peek_dout(k_wr_unikernel_10__dout), - .stream_in_s_empty_n(k_wr_unikernel_10__empty_n), - .stream_in_peek_empty_n(k_wr_unikernel_10__empty_n), - .stream_in_s_read(k_wr_unikernel_10__read), - .stream_in_peek_read(), - .b_read_addr_din(out_10_read_addr__din), - .b_read_addr_full_n(out_10_read_addr__full_n), - .b_read_addr_write(out_10_read_addr__write), - .b_read_data_s_dout({1'b0, out_10_read_data__dout}), - .b_read_data_peek_dout({1'b0, out_10_read_data__dout}), - .b_read_data_s_empty_n(out_10_read_data__empty_n), - .b_read_data_peek_empty_n(out_10_read_data__empty_n), - .b_read_data_s_read(out_10_read_data__read), - .b_read_data_peek_read(), - .b_write_addr_din(out_10_write_addr__din), - .b_write_addr_full_n(out_10_write_addr__full_n), - .b_write_addr_write(out_10_write_addr__write), - .b_write_data_din(out_10_write_data__din), - .b_write_data_full_n(out_10_write_data__full_n), - .b_write_data_write(out_10_write_data__write), - .b_write_resp_s_dout({1'b0, out_10_write_resp__dout}), - .b_write_resp_peek_dout({1'b0, out_10_write_resp__dout}), - .b_write_resp_s_empty_n(out_10_write_resp__empty_n), - .b_write_resp_peek_empty_n(out_10_write_resp__empty_n), - .b_write_resp_s_read(out_10_write_resp__read), - .b_write_resp_peek_read() - ); - - - (* keep_hierarchy = "yes" *) inter_kernel - inter_kernel_11 - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(inter_kernel_11__ap_start), - .ap_done(inter_kernel_11__ap_done), - .ap_idle(inter_kernel_11__ap_idle), - .ap_ready(inter_kernel_11__ap_ready), - .a_read_addr_din(in_11_read_addr__din), - .a_read_addr_full_n(in_11_read_addr__full_n), - .a_read_addr_write(in_11_read_addr__write), - .a_read_data_s_dout({1'b0, in_11_read_data__dout}), - .a_read_data_peek_dout({1'b0, in_11_read_data__dout}), - .a_read_data_s_empty_n(in_11_read_data__empty_n), - .a_read_data_peek_empty_n(in_11_read_data__empty_n), - .a_read_data_s_read(in_11_read_data__read), - .a_read_data_peek_read(), - .a_write_addr_din(in_11_write_addr__din), - .a_write_addr_full_n(in_11_write_addr__full_n), - .a_write_addr_write(in_11_write_addr__write), - .a_write_data_din(in_11_write_data__din), - .a_write_data_full_n(in_11_write_data__full_n), - .a_write_data_write(in_11_write_data__write), - .a_write_resp_s_dout({1'b0, in_11_write_resp__dout}), - .a_write_resp_peek_dout({1'b0, in_11_write_resp__dout}), - .a_write_resp_s_empty_n(in_11_write_resp__empty_n), - .a_write_resp_peek_empty_n(in_11_write_resp__empty_n), - .a_write_resp_s_read(in_11_write_resp__read), - .a_write_resp_peek_read(), - .iters(inter_kernel_11___iters__q0), - .stream_out_din(k_rd_unikernel_11__din), - .stream_out_full_n(k_rd_unikernel_11__full_n), - .stream_out_write(k_rd_unikernel_11__write), - .stream_in_s_dout(k_wr_unikernel_11__dout), - .stream_in_peek_dout(k_wr_unikernel_11__dout), - .stream_in_s_empty_n(k_wr_unikernel_11__empty_n), - .stream_in_peek_empty_n(k_wr_unikernel_11__empty_n), - .stream_in_s_read(k_wr_unikernel_11__read), - .stream_in_peek_read(), - .b_read_addr_din(out_11_read_addr__din), - .b_read_addr_full_n(out_11_read_addr__full_n), - .b_read_addr_write(out_11_read_addr__write), - .b_read_data_s_dout({1'b0, out_11_read_data__dout}), - .b_read_data_peek_dout({1'b0, out_11_read_data__dout}), - .b_read_data_s_empty_n(out_11_read_data__empty_n), - .b_read_data_peek_empty_n(out_11_read_data__empty_n), - .b_read_data_s_read(out_11_read_data__read), - .b_read_data_peek_read(), - .b_write_addr_din(out_11_write_addr__din), - .b_write_addr_full_n(out_11_write_addr__full_n), - .b_write_addr_write(out_11_write_addr__write), - .b_write_data_din(out_11_write_data__din), - .b_write_data_full_n(out_11_write_data__full_n), - .b_write_data_write(out_11_write_data__write), - .b_write_resp_s_dout({1'b0, out_11_write_resp__dout}), - .b_write_resp_peek_dout({1'b0, out_11_write_resp__dout}), - .b_write_resp_s_empty_n(out_11_write_resp__empty_n), - .b_write_resp_peek_empty_n(out_11_write_resp__empty_n), - .b_write_resp_s_read(out_11_write_resp__read), - .b_write_resp_peek_read() - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - in_0__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_0___in_0__q0), - .m_axi_ARADDR(m_axi_in_0_ARADDR), - .m_axi_ARBURST(m_axi_in_0_ARBURST), - .m_axi_ARCACHE(m_axi_in_0_ARCACHE), - .m_axi_ARID(m_axi_in_0_ARID), - .m_axi_ARLEN(m_axi_in_0_ARLEN), - .m_axi_ARLOCK(m_axi_in_0_ARLOCK), - .m_axi_ARPROT(m_axi_in_0_ARPROT), - .m_axi_ARQOS(m_axi_in_0_ARQOS), - .m_axi_ARREADY(m_axi_in_0_ARREADY), - .m_axi_ARSIZE(m_axi_in_0_ARSIZE), - .m_axi_ARVALID(m_axi_in_0_ARVALID), - .m_axi_AWADDR(m_axi_in_0_AWADDR), - .m_axi_AWBURST(m_axi_in_0_AWBURST), - .m_axi_AWCACHE(m_axi_in_0_AWCACHE), - .m_axi_AWID(m_axi_in_0_AWID), - .m_axi_AWLEN(m_axi_in_0_AWLEN), - .m_axi_AWLOCK(m_axi_in_0_AWLOCK), - .m_axi_AWPROT(m_axi_in_0_AWPROT), - .m_axi_AWQOS(m_axi_in_0_AWQOS), - .m_axi_AWREADY(m_axi_in_0_AWREADY), - .m_axi_AWSIZE(m_axi_in_0_AWSIZE), - .m_axi_AWVALID(m_axi_in_0_AWVALID), - .m_axi_BID(m_axi_in_0_BID), - .m_axi_BREADY(m_axi_in_0_BREADY), - .m_axi_BRESP(m_axi_in_0_BRESP), - .m_axi_BVALID(m_axi_in_0_BVALID), - .m_axi_RDATA(m_axi_in_0_RDATA), - .m_axi_RID(m_axi_in_0_RID), - .m_axi_RLAST(m_axi_in_0_RLAST), - .m_axi_RREADY(m_axi_in_0_RREADY), - .m_axi_RRESP(m_axi_in_0_RRESP), - .m_axi_RVALID(m_axi_in_0_RVALID), - .m_axi_WDATA(m_axi_in_0_WDATA), - .m_axi_WLAST(m_axi_in_0_WLAST), - .m_axi_WREADY(m_axi_in_0_WREADY), - .m_axi_WSTRB(m_axi_in_0_WSTRB), - .m_axi_WVALID(m_axi_in_0_WVALID), - .read_addr_din(in_0_read_addr__din), - .read_addr_full_n(in_0_read_addr__full_n), - .read_addr_write(in_0_read_addr__write), - .read_data_dout(in_0_read_data__dout), - .read_data_empty_n(in_0_read_data__empty_n), - .read_data_read(in_0_read_data__read), - .write_addr_din(in_0_write_addr__din), - .write_addr_full_n(in_0_write_addr__full_n), - .write_addr_write(in_0_write_addr__write), - .write_data_din(in_0_write_data__din), - .write_data_full_n(in_0_write_data__full_n), - .write_data_write(in_0_write_data__write), - .write_resp_dout(in_0_write_resp__dout), - .write_resp_empty_n(in_0_write_resp__empty_n), - .write_resp_read(in_0_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - out_0__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_0___out_0__q0), - .m_axi_ARADDR(m_axi_out_0_ARADDR), - .m_axi_ARBURST(m_axi_out_0_ARBURST), - .m_axi_ARCACHE(m_axi_out_0_ARCACHE), - .m_axi_ARID(m_axi_out_0_ARID), - .m_axi_ARLEN(m_axi_out_0_ARLEN), - .m_axi_ARLOCK(m_axi_out_0_ARLOCK), - .m_axi_ARPROT(m_axi_out_0_ARPROT), - .m_axi_ARQOS(m_axi_out_0_ARQOS), - .m_axi_ARREADY(m_axi_out_0_ARREADY), - .m_axi_ARSIZE(m_axi_out_0_ARSIZE), - .m_axi_ARVALID(m_axi_out_0_ARVALID), - .m_axi_AWADDR(m_axi_out_0_AWADDR), - .m_axi_AWBURST(m_axi_out_0_AWBURST), - .m_axi_AWCACHE(m_axi_out_0_AWCACHE), - .m_axi_AWID(m_axi_out_0_AWID), - .m_axi_AWLEN(m_axi_out_0_AWLEN), - .m_axi_AWLOCK(m_axi_out_0_AWLOCK), - .m_axi_AWPROT(m_axi_out_0_AWPROT), - .m_axi_AWQOS(m_axi_out_0_AWQOS), - .m_axi_AWREADY(m_axi_out_0_AWREADY), - .m_axi_AWSIZE(m_axi_out_0_AWSIZE), - .m_axi_AWVALID(m_axi_out_0_AWVALID), - .m_axi_BID(m_axi_out_0_BID), - .m_axi_BREADY(m_axi_out_0_BREADY), - .m_axi_BRESP(m_axi_out_0_BRESP), - .m_axi_BVALID(m_axi_out_0_BVALID), - .m_axi_RDATA(m_axi_out_0_RDATA), - .m_axi_RID(m_axi_out_0_RID), - .m_axi_RLAST(m_axi_out_0_RLAST), - .m_axi_RREADY(m_axi_out_0_RREADY), - .m_axi_RRESP(m_axi_out_0_RRESP), - .m_axi_RVALID(m_axi_out_0_RVALID), - .m_axi_WDATA(m_axi_out_0_WDATA), - .m_axi_WLAST(m_axi_out_0_WLAST), - .m_axi_WREADY(m_axi_out_0_WREADY), - .m_axi_WSTRB(m_axi_out_0_WSTRB), - .m_axi_WVALID(m_axi_out_0_WVALID), - .read_addr_din(out_0_read_addr__din), - .read_addr_full_n(out_0_read_addr__full_n), - .read_addr_write(out_0_read_addr__write), - .read_data_dout(out_0_read_data__dout), - .read_data_empty_n(out_0_read_data__empty_n), - .read_data_read(out_0_read_data__read), - .write_addr_din(out_0_write_addr__din), - .write_addr_full_n(out_0_write_addr__full_n), - .write_addr_write(out_0_write_addr__write), - .write_data_din(out_0_write_data__din), - .write_data_full_n(out_0_write_data__full_n), - .write_data_write(out_0_write_data__write), - .write_resp_dout(out_0_write_resp__dout), - .write_resp_empty_n(out_0_write_resp__empty_n), - .write_resp_read(out_0_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - in_1__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_1___in_1__q0), - .m_axi_ARADDR(m_axi_in_1_ARADDR), - .m_axi_ARBURST(m_axi_in_1_ARBURST), - .m_axi_ARCACHE(m_axi_in_1_ARCACHE), - .m_axi_ARID(m_axi_in_1_ARID), - .m_axi_ARLEN(m_axi_in_1_ARLEN), - .m_axi_ARLOCK(m_axi_in_1_ARLOCK), - .m_axi_ARPROT(m_axi_in_1_ARPROT), - .m_axi_ARQOS(m_axi_in_1_ARQOS), - .m_axi_ARREADY(m_axi_in_1_ARREADY), - .m_axi_ARSIZE(m_axi_in_1_ARSIZE), - .m_axi_ARVALID(m_axi_in_1_ARVALID), - .m_axi_AWADDR(m_axi_in_1_AWADDR), - .m_axi_AWBURST(m_axi_in_1_AWBURST), - .m_axi_AWCACHE(m_axi_in_1_AWCACHE), - .m_axi_AWID(m_axi_in_1_AWID), - .m_axi_AWLEN(m_axi_in_1_AWLEN), - .m_axi_AWLOCK(m_axi_in_1_AWLOCK), - .m_axi_AWPROT(m_axi_in_1_AWPROT), - .m_axi_AWQOS(m_axi_in_1_AWQOS), - .m_axi_AWREADY(m_axi_in_1_AWREADY), - .m_axi_AWSIZE(m_axi_in_1_AWSIZE), - .m_axi_AWVALID(m_axi_in_1_AWVALID), - .m_axi_BID(m_axi_in_1_BID), - .m_axi_BREADY(m_axi_in_1_BREADY), - .m_axi_BRESP(m_axi_in_1_BRESP), - .m_axi_BVALID(m_axi_in_1_BVALID), - .m_axi_RDATA(m_axi_in_1_RDATA), - .m_axi_RID(m_axi_in_1_RID), - .m_axi_RLAST(m_axi_in_1_RLAST), - .m_axi_RREADY(m_axi_in_1_RREADY), - .m_axi_RRESP(m_axi_in_1_RRESP), - .m_axi_RVALID(m_axi_in_1_RVALID), - .m_axi_WDATA(m_axi_in_1_WDATA), - .m_axi_WLAST(m_axi_in_1_WLAST), - .m_axi_WREADY(m_axi_in_1_WREADY), - .m_axi_WSTRB(m_axi_in_1_WSTRB), - .m_axi_WVALID(m_axi_in_1_WVALID), - .read_addr_din(in_1_read_addr__din), - .read_addr_full_n(in_1_read_addr__full_n), - .read_addr_write(in_1_read_addr__write), - .read_data_dout(in_1_read_data__dout), - .read_data_empty_n(in_1_read_data__empty_n), - .read_data_read(in_1_read_data__read), - .write_addr_din(in_1_write_addr__din), - .write_addr_full_n(in_1_write_addr__full_n), - .write_addr_write(in_1_write_addr__write), - .write_data_din(in_1_write_data__din), - .write_data_full_n(in_1_write_data__full_n), - .write_data_write(in_1_write_data__write), - .write_resp_dout(in_1_write_resp__dout), - .write_resp_empty_n(in_1_write_resp__empty_n), - .write_resp_read(in_1_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - out_1__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_1___out_1__q0), - .m_axi_ARADDR(m_axi_out_1_ARADDR), - .m_axi_ARBURST(m_axi_out_1_ARBURST), - .m_axi_ARCACHE(m_axi_out_1_ARCACHE), - .m_axi_ARID(m_axi_out_1_ARID), - .m_axi_ARLEN(m_axi_out_1_ARLEN), - .m_axi_ARLOCK(m_axi_out_1_ARLOCK), - .m_axi_ARPROT(m_axi_out_1_ARPROT), - .m_axi_ARQOS(m_axi_out_1_ARQOS), - .m_axi_ARREADY(m_axi_out_1_ARREADY), - .m_axi_ARSIZE(m_axi_out_1_ARSIZE), - .m_axi_ARVALID(m_axi_out_1_ARVALID), - .m_axi_AWADDR(m_axi_out_1_AWADDR), - .m_axi_AWBURST(m_axi_out_1_AWBURST), - .m_axi_AWCACHE(m_axi_out_1_AWCACHE), - .m_axi_AWID(m_axi_out_1_AWID), - .m_axi_AWLEN(m_axi_out_1_AWLEN), - .m_axi_AWLOCK(m_axi_out_1_AWLOCK), - .m_axi_AWPROT(m_axi_out_1_AWPROT), - .m_axi_AWQOS(m_axi_out_1_AWQOS), - .m_axi_AWREADY(m_axi_out_1_AWREADY), - .m_axi_AWSIZE(m_axi_out_1_AWSIZE), - .m_axi_AWVALID(m_axi_out_1_AWVALID), - .m_axi_BID(m_axi_out_1_BID), - .m_axi_BREADY(m_axi_out_1_BREADY), - .m_axi_BRESP(m_axi_out_1_BRESP), - .m_axi_BVALID(m_axi_out_1_BVALID), - .m_axi_RDATA(m_axi_out_1_RDATA), - .m_axi_RID(m_axi_out_1_RID), - .m_axi_RLAST(m_axi_out_1_RLAST), - .m_axi_RREADY(m_axi_out_1_RREADY), - .m_axi_RRESP(m_axi_out_1_RRESP), - .m_axi_RVALID(m_axi_out_1_RVALID), - .m_axi_WDATA(m_axi_out_1_WDATA), - .m_axi_WLAST(m_axi_out_1_WLAST), - .m_axi_WREADY(m_axi_out_1_WREADY), - .m_axi_WSTRB(m_axi_out_1_WSTRB), - .m_axi_WVALID(m_axi_out_1_WVALID), - .read_addr_din(out_1_read_addr__din), - .read_addr_full_n(out_1_read_addr__full_n), - .read_addr_write(out_1_read_addr__write), - .read_data_dout(out_1_read_data__dout), - .read_data_empty_n(out_1_read_data__empty_n), - .read_data_read(out_1_read_data__read), - .write_addr_din(out_1_write_addr__din), - .write_addr_full_n(out_1_write_addr__full_n), - .write_addr_write(out_1_write_addr__write), - .write_data_din(out_1_write_data__din), - .write_data_full_n(out_1_write_data__full_n), - .write_data_write(out_1_write_data__write), - .write_resp_dout(out_1_write_resp__dout), - .write_resp_empty_n(out_1_write_resp__empty_n), - .write_resp_read(out_1_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - in_2__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_2___in_2__q0), - .m_axi_ARADDR(m_axi_in_2_ARADDR), - .m_axi_ARBURST(m_axi_in_2_ARBURST), - .m_axi_ARCACHE(m_axi_in_2_ARCACHE), - .m_axi_ARID(m_axi_in_2_ARID), - .m_axi_ARLEN(m_axi_in_2_ARLEN), - .m_axi_ARLOCK(m_axi_in_2_ARLOCK), - .m_axi_ARPROT(m_axi_in_2_ARPROT), - .m_axi_ARQOS(m_axi_in_2_ARQOS), - .m_axi_ARREADY(m_axi_in_2_ARREADY), - .m_axi_ARSIZE(m_axi_in_2_ARSIZE), - .m_axi_ARVALID(m_axi_in_2_ARVALID), - .m_axi_AWADDR(m_axi_in_2_AWADDR), - .m_axi_AWBURST(m_axi_in_2_AWBURST), - .m_axi_AWCACHE(m_axi_in_2_AWCACHE), - .m_axi_AWID(m_axi_in_2_AWID), - .m_axi_AWLEN(m_axi_in_2_AWLEN), - .m_axi_AWLOCK(m_axi_in_2_AWLOCK), - .m_axi_AWPROT(m_axi_in_2_AWPROT), - .m_axi_AWQOS(m_axi_in_2_AWQOS), - .m_axi_AWREADY(m_axi_in_2_AWREADY), - .m_axi_AWSIZE(m_axi_in_2_AWSIZE), - .m_axi_AWVALID(m_axi_in_2_AWVALID), - .m_axi_BID(m_axi_in_2_BID), - .m_axi_BREADY(m_axi_in_2_BREADY), - .m_axi_BRESP(m_axi_in_2_BRESP), - .m_axi_BVALID(m_axi_in_2_BVALID), - .m_axi_RDATA(m_axi_in_2_RDATA), - .m_axi_RID(m_axi_in_2_RID), - .m_axi_RLAST(m_axi_in_2_RLAST), - .m_axi_RREADY(m_axi_in_2_RREADY), - .m_axi_RRESP(m_axi_in_2_RRESP), - .m_axi_RVALID(m_axi_in_2_RVALID), - .m_axi_WDATA(m_axi_in_2_WDATA), - .m_axi_WLAST(m_axi_in_2_WLAST), - .m_axi_WREADY(m_axi_in_2_WREADY), - .m_axi_WSTRB(m_axi_in_2_WSTRB), - .m_axi_WVALID(m_axi_in_2_WVALID), - .read_addr_din(in_2_read_addr__din), - .read_addr_full_n(in_2_read_addr__full_n), - .read_addr_write(in_2_read_addr__write), - .read_data_dout(in_2_read_data__dout), - .read_data_empty_n(in_2_read_data__empty_n), - .read_data_read(in_2_read_data__read), - .write_addr_din(in_2_write_addr__din), - .write_addr_full_n(in_2_write_addr__full_n), - .write_addr_write(in_2_write_addr__write), - .write_data_din(in_2_write_data__din), - .write_data_full_n(in_2_write_data__full_n), - .write_data_write(in_2_write_data__write), - .write_resp_dout(in_2_write_resp__dout), - .write_resp_empty_n(in_2_write_resp__empty_n), - .write_resp_read(in_2_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - out_2__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_2___out_2__q0), - .m_axi_ARADDR(m_axi_out_2_ARADDR), - .m_axi_ARBURST(m_axi_out_2_ARBURST), - .m_axi_ARCACHE(m_axi_out_2_ARCACHE), - .m_axi_ARID(m_axi_out_2_ARID), - .m_axi_ARLEN(m_axi_out_2_ARLEN), - .m_axi_ARLOCK(m_axi_out_2_ARLOCK), - .m_axi_ARPROT(m_axi_out_2_ARPROT), - .m_axi_ARQOS(m_axi_out_2_ARQOS), - .m_axi_ARREADY(m_axi_out_2_ARREADY), - .m_axi_ARSIZE(m_axi_out_2_ARSIZE), - .m_axi_ARVALID(m_axi_out_2_ARVALID), - .m_axi_AWADDR(m_axi_out_2_AWADDR), - .m_axi_AWBURST(m_axi_out_2_AWBURST), - .m_axi_AWCACHE(m_axi_out_2_AWCACHE), - .m_axi_AWID(m_axi_out_2_AWID), - .m_axi_AWLEN(m_axi_out_2_AWLEN), - .m_axi_AWLOCK(m_axi_out_2_AWLOCK), - .m_axi_AWPROT(m_axi_out_2_AWPROT), - .m_axi_AWQOS(m_axi_out_2_AWQOS), - .m_axi_AWREADY(m_axi_out_2_AWREADY), - .m_axi_AWSIZE(m_axi_out_2_AWSIZE), - .m_axi_AWVALID(m_axi_out_2_AWVALID), - .m_axi_BID(m_axi_out_2_BID), - .m_axi_BREADY(m_axi_out_2_BREADY), - .m_axi_BRESP(m_axi_out_2_BRESP), - .m_axi_BVALID(m_axi_out_2_BVALID), - .m_axi_RDATA(m_axi_out_2_RDATA), - .m_axi_RID(m_axi_out_2_RID), - .m_axi_RLAST(m_axi_out_2_RLAST), - .m_axi_RREADY(m_axi_out_2_RREADY), - .m_axi_RRESP(m_axi_out_2_RRESP), - .m_axi_RVALID(m_axi_out_2_RVALID), - .m_axi_WDATA(m_axi_out_2_WDATA), - .m_axi_WLAST(m_axi_out_2_WLAST), - .m_axi_WREADY(m_axi_out_2_WREADY), - .m_axi_WSTRB(m_axi_out_2_WSTRB), - .m_axi_WVALID(m_axi_out_2_WVALID), - .read_addr_din(out_2_read_addr__din), - .read_addr_full_n(out_2_read_addr__full_n), - .read_addr_write(out_2_read_addr__write), - .read_data_dout(out_2_read_data__dout), - .read_data_empty_n(out_2_read_data__empty_n), - .read_data_read(out_2_read_data__read), - .write_addr_din(out_2_write_addr__din), - .write_addr_full_n(out_2_write_addr__full_n), - .write_addr_write(out_2_write_addr__write), - .write_data_din(out_2_write_data__din), - .write_data_full_n(out_2_write_data__full_n), - .write_data_write(out_2_write_data__write), - .write_resp_dout(out_2_write_resp__dout), - .write_resp_empty_n(out_2_write_resp__empty_n), - .write_resp_read(out_2_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - in_3__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_3___in_3__q0), - .m_axi_ARADDR(m_axi_in_3_ARADDR), - .m_axi_ARBURST(m_axi_in_3_ARBURST), - .m_axi_ARCACHE(m_axi_in_3_ARCACHE), - .m_axi_ARID(m_axi_in_3_ARID), - .m_axi_ARLEN(m_axi_in_3_ARLEN), - .m_axi_ARLOCK(m_axi_in_3_ARLOCK), - .m_axi_ARPROT(m_axi_in_3_ARPROT), - .m_axi_ARQOS(m_axi_in_3_ARQOS), - .m_axi_ARREADY(m_axi_in_3_ARREADY), - .m_axi_ARSIZE(m_axi_in_3_ARSIZE), - .m_axi_ARVALID(m_axi_in_3_ARVALID), - .m_axi_AWADDR(m_axi_in_3_AWADDR), - .m_axi_AWBURST(m_axi_in_3_AWBURST), - .m_axi_AWCACHE(m_axi_in_3_AWCACHE), - .m_axi_AWID(m_axi_in_3_AWID), - .m_axi_AWLEN(m_axi_in_3_AWLEN), - .m_axi_AWLOCK(m_axi_in_3_AWLOCK), - .m_axi_AWPROT(m_axi_in_3_AWPROT), - .m_axi_AWQOS(m_axi_in_3_AWQOS), - .m_axi_AWREADY(m_axi_in_3_AWREADY), - .m_axi_AWSIZE(m_axi_in_3_AWSIZE), - .m_axi_AWVALID(m_axi_in_3_AWVALID), - .m_axi_BID(m_axi_in_3_BID), - .m_axi_BREADY(m_axi_in_3_BREADY), - .m_axi_BRESP(m_axi_in_3_BRESP), - .m_axi_BVALID(m_axi_in_3_BVALID), - .m_axi_RDATA(m_axi_in_3_RDATA), - .m_axi_RID(m_axi_in_3_RID), - .m_axi_RLAST(m_axi_in_3_RLAST), - .m_axi_RREADY(m_axi_in_3_RREADY), - .m_axi_RRESP(m_axi_in_3_RRESP), - .m_axi_RVALID(m_axi_in_3_RVALID), - .m_axi_WDATA(m_axi_in_3_WDATA), - .m_axi_WLAST(m_axi_in_3_WLAST), - .m_axi_WREADY(m_axi_in_3_WREADY), - .m_axi_WSTRB(m_axi_in_3_WSTRB), - .m_axi_WVALID(m_axi_in_3_WVALID), - .read_addr_din(in_3_read_addr__din), - .read_addr_full_n(in_3_read_addr__full_n), - .read_addr_write(in_3_read_addr__write), - .read_data_dout(in_3_read_data__dout), - .read_data_empty_n(in_3_read_data__empty_n), - .read_data_read(in_3_read_data__read), - .write_addr_din(in_3_write_addr__din), - .write_addr_full_n(in_3_write_addr__full_n), - .write_addr_write(in_3_write_addr__write), - .write_data_din(in_3_write_data__din), - .write_data_full_n(in_3_write_data__full_n), - .write_data_write(in_3_write_data__write), - .write_resp_dout(in_3_write_resp__dout), - .write_resp_empty_n(in_3_write_resp__empty_n), - .write_resp_read(in_3_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - out_3__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_3___out_3__q0), - .m_axi_ARADDR(m_axi_out_3_ARADDR), - .m_axi_ARBURST(m_axi_out_3_ARBURST), - .m_axi_ARCACHE(m_axi_out_3_ARCACHE), - .m_axi_ARID(m_axi_out_3_ARID), - .m_axi_ARLEN(m_axi_out_3_ARLEN), - .m_axi_ARLOCK(m_axi_out_3_ARLOCK), - .m_axi_ARPROT(m_axi_out_3_ARPROT), - .m_axi_ARQOS(m_axi_out_3_ARQOS), - .m_axi_ARREADY(m_axi_out_3_ARREADY), - .m_axi_ARSIZE(m_axi_out_3_ARSIZE), - .m_axi_ARVALID(m_axi_out_3_ARVALID), - .m_axi_AWADDR(m_axi_out_3_AWADDR), - .m_axi_AWBURST(m_axi_out_3_AWBURST), - .m_axi_AWCACHE(m_axi_out_3_AWCACHE), - .m_axi_AWID(m_axi_out_3_AWID), - .m_axi_AWLEN(m_axi_out_3_AWLEN), - .m_axi_AWLOCK(m_axi_out_3_AWLOCK), - .m_axi_AWPROT(m_axi_out_3_AWPROT), - .m_axi_AWQOS(m_axi_out_3_AWQOS), - .m_axi_AWREADY(m_axi_out_3_AWREADY), - .m_axi_AWSIZE(m_axi_out_3_AWSIZE), - .m_axi_AWVALID(m_axi_out_3_AWVALID), - .m_axi_BID(m_axi_out_3_BID), - .m_axi_BREADY(m_axi_out_3_BREADY), - .m_axi_BRESP(m_axi_out_3_BRESP), - .m_axi_BVALID(m_axi_out_3_BVALID), - .m_axi_RDATA(m_axi_out_3_RDATA), - .m_axi_RID(m_axi_out_3_RID), - .m_axi_RLAST(m_axi_out_3_RLAST), - .m_axi_RREADY(m_axi_out_3_RREADY), - .m_axi_RRESP(m_axi_out_3_RRESP), - .m_axi_RVALID(m_axi_out_3_RVALID), - .m_axi_WDATA(m_axi_out_3_WDATA), - .m_axi_WLAST(m_axi_out_3_WLAST), - .m_axi_WREADY(m_axi_out_3_WREADY), - .m_axi_WSTRB(m_axi_out_3_WSTRB), - .m_axi_WVALID(m_axi_out_3_WVALID), - .read_addr_din(out_3_read_addr__din), - .read_addr_full_n(out_3_read_addr__full_n), - .read_addr_write(out_3_read_addr__write), - .read_data_dout(out_3_read_data__dout), - .read_data_empty_n(out_3_read_data__empty_n), - .read_data_read(out_3_read_data__read), - .write_addr_din(out_3_write_addr__din), - .write_addr_full_n(out_3_write_addr__full_n), - .write_addr_write(out_3_write_addr__write), - .write_data_din(out_3_write_data__din), - .write_data_full_n(out_3_write_data__full_n), - .write_data_write(out_3_write_data__write), - .write_resp_dout(out_3_write_resp__dout), - .write_resp_empty_n(out_3_write_resp__empty_n), - .write_resp_read(out_3_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - in_4__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_4___in_4__q0), - .m_axi_ARADDR(m_axi_in_4_ARADDR), - .m_axi_ARBURST(m_axi_in_4_ARBURST), - .m_axi_ARCACHE(m_axi_in_4_ARCACHE), - .m_axi_ARID(m_axi_in_4_ARID), - .m_axi_ARLEN(m_axi_in_4_ARLEN), - .m_axi_ARLOCK(m_axi_in_4_ARLOCK), - .m_axi_ARPROT(m_axi_in_4_ARPROT), - .m_axi_ARQOS(m_axi_in_4_ARQOS), - .m_axi_ARREADY(m_axi_in_4_ARREADY), - .m_axi_ARSIZE(m_axi_in_4_ARSIZE), - .m_axi_ARVALID(m_axi_in_4_ARVALID), - .m_axi_AWADDR(m_axi_in_4_AWADDR), - .m_axi_AWBURST(m_axi_in_4_AWBURST), - .m_axi_AWCACHE(m_axi_in_4_AWCACHE), - .m_axi_AWID(m_axi_in_4_AWID), - .m_axi_AWLEN(m_axi_in_4_AWLEN), - .m_axi_AWLOCK(m_axi_in_4_AWLOCK), - .m_axi_AWPROT(m_axi_in_4_AWPROT), - .m_axi_AWQOS(m_axi_in_4_AWQOS), - .m_axi_AWREADY(m_axi_in_4_AWREADY), - .m_axi_AWSIZE(m_axi_in_4_AWSIZE), - .m_axi_AWVALID(m_axi_in_4_AWVALID), - .m_axi_BID(m_axi_in_4_BID), - .m_axi_BREADY(m_axi_in_4_BREADY), - .m_axi_BRESP(m_axi_in_4_BRESP), - .m_axi_BVALID(m_axi_in_4_BVALID), - .m_axi_RDATA(m_axi_in_4_RDATA), - .m_axi_RID(m_axi_in_4_RID), - .m_axi_RLAST(m_axi_in_4_RLAST), - .m_axi_RREADY(m_axi_in_4_RREADY), - .m_axi_RRESP(m_axi_in_4_RRESP), - .m_axi_RVALID(m_axi_in_4_RVALID), - .m_axi_WDATA(m_axi_in_4_WDATA), - .m_axi_WLAST(m_axi_in_4_WLAST), - .m_axi_WREADY(m_axi_in_4_WREADY), - .m_axi_WSTRB(m_axi_in_4_WSTRB), - .m_axi_WVALID(m_axi_in_4_WVALID), - .read_addr_din(in_4_read_addr__din), - .read_addr_full_n(in_4_read_addr__full_n), - .read_addr_write(in_4_read_addr__write), - .read_data_dout(in_4_read_data__dout), - .read_data_empty_n(in_4_read_data__empty_n), - .read_data_read(in_4_read_data__read), - .write_addr_din(in_4_write_addr__din), - .write_addr_full_n(in_4_write_addr__full_n), - .write_addr_write(in_4_write_addr__write), - .write_data_din(in_4_write_data__din), - .write_data_full_n(in_4_write_data__full_n), - .write_data_write(in_4_write_data__write), - .write_resp_dout(in_4_write_resp__dout), - .write_resp_empty_n(in_4_write_resp__empty_n), - .write_resp_read(in_4_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - out_4__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_4___out_4__q0), - .m_axi_ARADDR(m_axi_out_4_ARADDR), - .m_axi_ARBURST(m_axi_out_4_ARBURST), - .m_axi_ARCACHE(m_axi_out_4_ARCACHE), - .m_axi_ARID(m_axi_out_4_ARID), - .m_axi_ARLEN(m_axi_out_4_ARLEN), - .m_axi_ARLOCK(m_axi_out_4_ARLOCK), - .m_axi_ARPROT(m_axi_out_4_ARPROT), - .m_axi_ARQOS(m_axi_out_4_ARQOS), - .m_axi_ARREADY(m_axi_out_4_ARREADY), - .m_axi_ARSIZE(m_axi_out_4_ARSIZE), - .m_axi_ARVALID(m_axi_out_4_ARVALID), - .m_axi_AWADDR(m_axi_out_4_AWADDR), - .m_axi_AWBURST(m_axi_out_4_AWBURST), - .m_axi_AWCACHE(m_axi_out_4_AWCACHE), - .m_axi_AWID(m_axi_out_4_AWID), - .m_axi_AWLEN(m_axi_out_4_AWLEN), - .m_axi_AWLOCK(m_axi_out_4_AWLOCK), - .m_axi_AWPROT(m_axi_out_4_AWPROT), - .m_axi_AWQOS(m_axi_out_4_AWQOS), - .m_axi_AWREADY(m_axi_out_4_AWREADY), - .m_axi_AWSIZE(m_axi_out_4_AWSIZE), - .m_axi_AWVALID(m_axi_out_4_AWVALID), - .m_axi_BID(m_axi_out_4_BID), - .m_axi_BREADY(m_axi_out_4_BREADY), - .m_axi_BRESP(m_axi_out_4_BRESP), - .m_axi_BVALID(m_axi_out_4_BVALID), - .m_axi_RDATA(m_axi_out_4_RDATA), - .m_axi_RID(m_axi_out_4_RID), - .m_axi_RLAST(m_axi_out_4_RLAST), - .m_axi_RREADY(m_axi_out_4_RREADY), - .m_axi_RRESP(m_axi_out_4_RRESP), - .m_axi_RVALID(m_axi_out_4_RVALID), - .m_axi_WDATA(m_axi_out_4_WDATA), - .m_axi_WLAST(m_axi_out_4_WLAST), - .m_axi_WREADY(m_axi_out_4_WREADY), - .m_axi_WSTRB(m_axi_out_4_WSTRB), - .m_axi_WVALID(m_axi_out_4_WVALID), - .read_addr_din(out_4_read_addr__din), - .read_addr_full_n(out_4_read_addr__full_n), - .read_addr_write(out_4_read_addr__write), - .read_data_dout(out_4_read_data__dout), - .read_data_empty_n(out_4_read_data__empty_n), - .read_data_read(out_4_read_data__read), - .write_addr_din(out_4_write_addr__din), - .write_addr_full_n(out_4_write_addr__full_n), - .write_addr_write(out_4_write_addr__write), - .write_data_din(out_4_write_data__din), - .write_data_full_n(out_4_write_data__full_n), - .write_data_write(out_4_write_data__write), - .write_resp_dout(out_4_write_resp__dout), - .write_resp_empty_n(out_4_write_resp__empty_n), - .write_resp_read(out_4_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - in_5__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_5___in_5__q0), - .m_axi_ARADDR(m_axi_in_5_ARADDR), - .m_axi_ARBURST(m_axi_in_5_ARBURST), - .m_axi_ARCACHE(m_axi_in_5_ARCACHE), - .m_axi_ARID(m_axi_in_5_ARID), - .m_axi_ARLEN(m_axi_in_5_ARLEN), - .m_axi_ARLOCK(m_axi_in_5_ARLOCK), - .m_axi_ARPROT(m_axi_in_5_ARPROT), - .m_axi_ARQOS(m_axi_in_5_ARQOS), - .m_axi_ARREADY(m_axi_in_5_ARREADY), - .m_axi_ARSIZE(m_axi_in_5_ARSIZE), - .m_axi_ARVALID(m_axi_in_5_ARVALID), - .m_axi_AWADDR(m_axi_in_5_AWADDR), - .m_axi_AWBURST(m_axi_in_5_AWBURST), - .m_axi_AWCACHE(m_axi_in_5_AWCACHE), - .m_axi_AWID(m_axi_in_5_AWID), - .m_axi_AWLEN(m_axi_in_5_AWLEN), - .m_axi_AWLOCK(m_axi_in_5_AWLOCK), - .m_axi_AWPROT(m_axi_in_5_AWPROT), - .m_axi_AWQOS(m_axi_in_5_AWQOS), - .m_axi_AWREADY(m_axi_in_5_AWREADY), - .m_axi_AWSIZE(m_axi_in_5_AWSIZE), - .m_axi_AWVALID(m_axi_in_5_AWVALID), - .m_axi_BID(m_axi_in_5_BID), - .m_axi_BREADY(m_axi_in_5_BREADY), - .m_axi_BRESP(m_axi_in_5_BRESP), - .m_axi_BVALID(m_axi_in_5_BVALID), - .m_axi_RDATA(m_axi_in_5_RDATA), - .m_axi_RID(m_axi_in_5_RID), - .m_axi_RLAST(m_axi_in_5_RLAST), - .m_axi_RREADY(m_axi_in_5_RREADY), - .m_axi_RRESP(m_axi_in_5_RRESP), - .m_axi_RVALID(m_axi_in_5_RVALID), - .m_axi_WDATA(m_axi_in_5_WDATA), - .m_axi_WLAST(m_axi_in_5_WLAST), - .m_axi_WREADY(m_axi_in_5_WREADY), - .m_axi_WSTRB(m_axi_in_5_WSTRB), - .m_axi_WVALID(m_axi_in_5_WVALID), - .read_addr_din(in_5_read_addr__din), - .read_addr_full_n(in_5_read_addr__full_n), - .read_addr_write(in_5_read_addr__write), - .read_data_dout(in_5_read_data__dout), - .read_data_empty_n(in_5_read_data__empty_n), - .read_data_read(in_5_read_data__read), - .write_addr_din(in_5_write_addr__din), - .write_addr_full_n(in_5_write_addr__full_n), - .write_addr_write(in_5_write_addr__write), - .write_data_din(in_5_write_data__din), - .write_data_full_n(in_5_write_data__full_n), - .write_data_write(in_5_write_data__write), - .write_resp_dout(in_5_write_resp__dout), - .write_resp_empty_n(in_5_write_resp__empty_n), - .write_resp_read(in_5_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - out_5__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_5___out_5__q0), - .m_axi_ARADDR(m_axi_out_5_ARADDR), - .m_axi_ARBURST(m_axi_out_5_ARBURST), - .m_axi_ARCACHE(m_axi_out_5_ARCACHE), - .m_axi_ARID(m_axi_out_5_ARID), - .m_axi_ARLEN(m_axi_out_5_ARLEN), - .m_axi_ARLOCK(m_axi_out_5_ARLOCK), - .m_axi_ARPROT(m_axi_out_5_ARPROT), - .m_axi_ARQOS(m_axi_out_5_ARQOS), - .m_axi_ARREADY(m_axi_out_5_ARREADY), - .m_axi_ARSIZE(m_axi_out_5_ARSIZE), - .m_axi_ARVALID(m_axi_out_5_ARVALID), - .m_axi_AWADDR(m_axi_out_5_AWADDR), - .m_axi_AWBURST(m_axi_out_5_AWBURST), - .m_axi_AWCACHE(m_axi_out_5_AWCACHE), - .m_axi_AWID(m_axi_out_5_AWID), - .m_axi_AWLEN(m_axi_out_5_AWLEN), - .m_axi_AWLOCK(m_axi_out_5_AWLOCK), - .m_axi_AWPROT(m_axi_out_5_AWPROT), - .m_axi_AWQOS(m_axi_out_5_AWQOS), - .m_axi_AWREADY(m_axi_out_5_AWREADY), - .m_axi_AWSIZE(m_axi_out_5_AWSIZE), - .m_axi_AWVALID(m_axi_out_5_AWVALID), - .m_axi_BID(m_axi_out_5_BID), - .m_axi_BREADY(m_axi_out_5_BREADY), - .m_axi_BRESP(m_axi_out_5_BRESP), - .m_axi_BVALID(m_axi_out_5_BVALID), - .m_axi_RDATA(m_axi_out_5_RDATA), - .m_axi_RID(m_axi_out_5_RID), - .m_axi_RLAST(m_axi_out_5_RLAST), - .m_axi_RREADY(m_axi_out_5_RREADY), - .m_axi_RRESP(m_axi_out_5_RRESP), - .m_axi_RVALID(m_axi_out_5_RVALID), - .m_axi_WDATA(m_axi_out_5_WDATA), - .m_axi_WLAST(m_axi_out_5_WLAST), - .m_axi_WREADY(m_axi_out_5_WREADY), - .m_axi_WSTRB(m_axi_out_5_WSTRB), - .m_axi_WVALID(m_axi_out_5_WVALID), - .read_addr_din(out_5_read_addr__din), - .read_addr_full_n(out_5_read_addr__full_n), - .read_addr_write(out_5_read_addr__write), - .read_data_dout(out_5_read_data__dout), - .read_data_empty_n(out_5_read_data__empty_n), - .read_data_read(out_5_read_data__read), - .write_addr_din(out_5_write_addr__din), - .write_addr_full_n(out_5_write_addr__full_n), - .write_addr_write(out_5_write_addr__write), - .write_data_din(out_5_write_data__din), - .write_data_full_n(out_5_write_data__full_n), - .write_data_write(out_5_write_data__write), - .write_resp_dout(out_5_write_resp__dout), - .write_resp_empty_n(out_5_write_resp__empty_n), - .write_resp_read(out_5_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - in_6__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_6___in_6__q0), - .m_axi_ARADDR(m_axi_in_6_ARADDR), - .m_axi_ARBURST(m_axi_in_6_ARBURST), - .m_axi_ARCACHE(m_axi_in_6_ARCACHE), - .m_axi_ARID(m_axi_in_6_ARID), - .m_axi_ARLEN(m_axi_in_6_ARLEN), - .m_axi_ARLOCK(m_axi_in_6_ARLOCK), - .m_axi_ARPROT(m_axi_in_6_ARPROT), - .m_axi_ARQOS(m_axi_in_6_ARQOS), - .m_axi_ARREADY(m_axi_in_6_ARREADY), - .m_axi_ARSIZE(m_axi_in_6_ARSIZE), - .m_axi_ARVALID(m_axi_in_6_ARVALID), - .m_axi_AWADDR(m_axi_in_6_AWADDR), - .m_axi_AWBURST(m_axi_in_6_AWBURST), - .m_axi_AWCACHE(m_axi_in_6_AWCACHE), - .m_axi_AWID(m_axi_in_6_AWID), - .m_axi_AWLEN(m_axi_in_6_AWLEN), - .m_axi_AWLOCK(m_axi_in_6_AWLOCK), - .m_axi_AWPROT(m_axi_in_6_AWPROT), - .m_axi_AWQOS(m_axi_in_6_AWQOS), - .m_axi_AWREADY(m_axi_in_6_AWREADY), - .m_axi_AWSIZE(m_axi_in_6_AWSIZE), - .m_axi_AWVALID(m_axi_in_6_AWVALID), - .m_axi_BID(m_axi_in_6_BID), - .m_axi_BREADY(m_axi_in_6_BREADY), - .m_axi_BRESP(m_axi_in_6_BRESP), - .m_axi_BVALID(m_axi_in_6_BVALID), - .m_axi_RDATA(m_axi_in_6_RDATA), - .m_axi_RID(m_axi_in_6_RID), - .m_axi_RLAST(m_axi_in_6_RLAST), - .m_axi_RREADY(m_axi_in_6_RREADY), - .m_axi_RRESP(m_axi_in_6_RRESP), - .m_axi_RVALID(m_axi_in_6_RVALID), - .m_axi_WDATA(m_axi_in_6_WDATA), - .m_axi_WLAST(m_axi_in_6_WLAST), - .m_axi_WREADY(m_axi_in_6_WREADY), - .m_axi_WSTRB(m_axi_in_6_WSTRB), - .m_axi_WVALID(m_axi_in_6_WVALID), - .read_addr_din(in_6_read_addr__din), - .read_addr_full_n(in_6_read_addr__full_n), - .read_addr_write(in_6_read_addr__write), - .read_data_dout(in_6_read_data__dout), - .read_data_empty_n(in_6_read_data__empty_n), - .read_data_read(in_6_read_data__read), - .write_addr_din(in_6_write_addr__din), - .write_addr_full_n(in_6_write_addr__full_n), - .write_addr_write(in_6_write_addr__write), - .write_data_din(in_6_write_data__din), - .write_data_full_n(in_6_write_data__full_n), - .write_data_write(in_6_write_data__write), - .write_resp_dout(in_6_write_resp__dout), - .write_resp_empty_n(in_6_write_resp__empty_n), - .write_resp_read(in_6_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - out_6__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_6___out_6__q0), - .m_axi_ARADDR(m_axi_out_6_ARADDR), - .m_axi_ARBURST(m_axi_out_6_ARBURST), - .m_axi_ARCACHE(m_axi_out_6_ARCACHE), - .m_axi_ARID(m_axi_out_6_ARID), - .m_axi_ARLEN(m_axi_out_6_ARLEN), - .m_axi_ARLOCK(m_axi_out_6_ARLOCK), - .m_axi_ARPROT(m_axi_out_6_ARPROT), - .m_axi_ARQOS(m_axi_out_6_ARQOS), - .m_axi_ARREADY(m_axi_out_6_ARREADY), - .m_axi_ARSIZE(m_axi_out_6_ARSIZE), - .m_axi_ARVALID(m_axi_out_6_ARVALID), - .m_axi_AWADDR(m_axi_out_6_AWADDR), - .m_axi_AWBURST(m_axi_out_6_AWBURST), - .m_axi_AWCACHE(m_axi_out_6_AWCACHE), - .m_axi_AWID(m_axi_out_6_AWID), - .m_axi_AWLEN(m_axi_out_6_AWLEN), - .m_axi_AWLOCK(m_axi_out_6_AWLOCK), - .m_axi_AWPROT(m_axi_out_6_AWPROT), - .m_axi_AWQOS(m_axi_out_6_AWQOS), - .m_axi_AWREADY(m_axi_out_6_AWREADY), - .m_axi_AWSIZE(m_axi_out_6_AWSIZE), - .m_axi_AWVALID(m_axi_out_6_AWVALID), - .m_axi_BID(m_axi_out_6_BID), - .m_axi_BREADY(m_axi_out_6_BREADY), - .m_axi_BRESP(m_axi_out_6_BRESP), - .m_axi_BVALID(m_axi_out_6_BVALID), - .m_axi_RDATA(m_axi_out_6_RDATA), - .m_axi_RID(m_axi_out_6_RID), - .m_axi_RLAST(m_axi_out_6_RLAST), - .m_axi_RREADY(m_axi_out_6_RREADY), - .m_axi_RRESP(m_axi_out_6_RRESP), - .m_axi_RVALID(m_axi_out_6_RVALID), - .m_axi_WDATA(m_axi_out_6_WDATA), - .m_axi_WLAST(m_axi_out_6_WLAST), - .m_axi_WREADY(m_axi_out_6_WREADY), - .m_axi_WSTRB(m_axi_out_6_WSTRB), - .m_axi_WVALID(m_axi_out_6_WVALID), - .read_addr_din(out_6_read_addr__din), - .read_addr_full_n(out_6_read_addr__full_n), - .read_addr_write(out_6_read_addr__write), - .read_data_dout(out_6_read_data__dout), - .read_data_empty_n(out_6_read_data__empty_n), - .read_data_read(out_6_read_data__read), - .write_addr_din(out_6_write_addr__din), - .write_addr_full_n(out_6_write_addr__full_n), - .write_addr_write(out_6_write_addr__write), - .write_data_din(out_6_write_data__din), - .write_data_full_n(out_6_write_data__full_n), - .write_data_write(out_6_write_data__write), - .write_resp_dout(out_6_write_resp__dout), - .write_resp_empty_n(out_6_write_resp__empty_n), - .write_resp_read(out_6_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - in_7__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_7___in_7__q0), - .m_axi_ARADDR(m_axi_in_7_ARADDR), - .m_axi_ARBURST(m_axi_in_7_ARBURST), - .m_axi_ARCACHE(m_axi_in_7_ARCACHE), - .m_axi_ARID(m_axi_in_7_ARID), - .m_axi_ARLEN(m_axi_in_7_ARLEN), - .m_axi_ARLOCK(m_axi_in_7_ARLOCK), - .m_axi_ARPROT(m_axi_in_7_ARPROT), - .m_axi_ARQOS(m_axi_in_7_ARQOS), - .m_axi_ARREADY(m_axi_in_7_ARREADY), - .m_axi_ARSIZE(m_axi_in_7_ARSIZE), - .m_axi_ARVALID(m_axi_in_7_ARVALID), - .m_axi_AWADDR(m_axi_in_7_AWADDR), - .m_axi_AWBURST(m_axi_in_7_AWBURST), - .m_axi_AWCACHE(m_axi_in_7_AWCACHE), - .m_axi_AWID(m_axi_in_7_AWID), - .m_axi_AWLEN(m_axi_in_7_AWLEN), - .m_axi_AWLOCK(m_axi_in_7_AWLOCK), - .m_axi_AWPROT(m_axi_in_7_AWPROT), - .m_axi_AWQOS(m_axi_in_7_AWQOS), - .m_axi_AWREADY(m_axi_in_7_AWREADY), - .m_axi_AWSIZE(m_axi_in_7_AWSIZE), - .m_axi_AWVALID(m_axi_in_7_AWVALID), - .m_axi_BID(m_axi_in_7_BID), - .m_axi_BREADY(m_axi_in_7_BREADY), - .m_axi_BRESP(m_axi_in_7_BRESP), - .m_axi_BVALID(m_axi_in_7_BVALID), - .m_axi_RDATA(m_axi_in_7_RDATA), - .m_axi_RID(m_axi_in_7_RID), - .m_axi_RLAST(m_axi_in_7_RLAST), - .m_axi_RREADY(m_axi_in_7_RREADY), - .m_axi_RRESP(m_axi_in_7_RRESP), - .m_axi_RVALID(m_axi_in_7_RVALID), - .m_axi_WDATA(m_axi_in_7_WDATA), - .m_axi_WLAST(m_axi_in_7_WLAST), - .m_axi_WREADY(m_axi_in_7_WREADY), - .m_axi_WSTRB(m_axi_in_7_WSTRB), - .m_axi_WVALID(m_axi_in_7_WVALID), - .read_addr_din(in_7_read_addr__din), - .read_addr_full_n(in_7_read_addr__full_n), - .read_addr_write(in_7_read_addr__write), - .read_data_dout(in_7_read_data__dout), - .read_data_empty_n(in_7_read_data__empty_n), - .read_data_read(in_7_read_data__read), - .write_addr_din(in_7_write_addr__din), - .write_addr_full_n(in_7_write_addr__full_n), - .write_addr_write(in_7_write_addr__write), - .write_data_din(in_7_write_data__din), - .write_data_full_n(in_7_write_data__full_n), - .write_data_write(in_7_write_data__write), - .write_resp_dout(in_7_write_resp__dout), - .write_resp_empty_n(in_7_write_resp__empty_n), - .write_resp_read(in_7_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - out_7__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_7___out_7__q0), - .m_axi_ARADDR(m_axi_out_7_ARADDR), - .m_axi_ARBURST(m_axi_out_7_ARBURST), - .m_axi_ARCACHE(m_axi_out_7_ARCACHE), - .m_axi_ARID(m_axi_out_7_ARID), - .m_axi_ARLEN(m_axi_out_7_ARLEN), - .m_axi_ARLOCK(m_axi_out_7_ARLOCK), - .m_axi_ARPROT(m_axi_out_7_ARPROT), - .m_axi_ARQOS(m_axi_out_7_ARQOS), - .m_axi_ARREADY(m_axi_out_7_ARREADY), - .m_axi_ARSIZE(m_axi_out_7_ARSIZE), - .m_axi_ARVALID(m_axi_out_7_ARVALID), - .m_axi_AWADDR(m_axi_out_7_AWADDR), - .m_axi_AWBURST(m_axi_out_7_AWBURST), - .m_axi_AWCACHE(m_axi_out_7_AWCACHE), - .m_axi_AWID(m_axi_out_7_AWID), - .m_axi_AWLEN(m_axi_out_7_AWLEN), - .m_axi_AWLOCK(m_axi_out_7_AWLOCK), - .m_axi_AWPROT(m_axi_out_7_AWPROT), - .m_axi_AWQOS(m_axi_out_7_AWQOS), - .m_axi_AWREADY(m_axi_out_7_AWREADY), - .m_axi_AWSIZE(m_axi_out_7_AWSIZE), - .m_axi_AWVALID(m_axi_out_7_AWVALID), - .m_axi_BID(m_axi_out_7_BID), - .m_axi_BREADY(m_axi_out_7_BREADY), - .m_axi_BRESP(m_axi_out_7_BRESP), - .m_axi_BVALID(m_axi_out_7_BVALID), - .m_axi_RDATA(m_axi_out_7_RDATA), - .m_axi_RID(m_axi_out_7_RID), - .m_axi_RLAST(m_axi_out_7_RLAST), - .m_axi_RREADY(m_axi_out_7_RREADY), - .m_axi_RRESP(m_axi_out_7_RRESP), - .m_axi_RVALID(m_axi_out_7_RVALID), - .m_axi_WDATA(m_axi_out_7_WDATA), - .m_axi_WLAST(m_axi_out_7_WLAST), - .m_axi_WREADY(m_axi_out_7_WREADY), - .m_axi_WSTRB(m_axi_out_7_WSTRB), - .m_axi_WVALID(m_axi_out_7_WVALID), - .read_addr_din(out_7_read_addr__din), - .read_addr_full_n(out_7_read_addr__full_n), - .read_addr_write(out_7_read_addr__write), - .read_data_dout(out_7_read_data__dout), - .read_data_empty_n(out_7_read_data__empty_n), - .read_data_read(out_7_read_data__read), - .write_addr_din(out_7_write_addr__din), - .write_addr_full_n(out_7_write_addr__full_n), - .write_addr_write(out_7_write_addr__write), - .write_data_din(out_7_write_data__din), - .write_data_full_n(out_7_write_data__full_n), - .write_data_write(out_7_write_data__write), - .write_resp_dout(out_7_write_resp__dout), - .write_resp_empty_n(out_7_write_resp__empty_n), - .write_resp_read(out_7_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - in_8__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_8___in_8__q0), - .m_axi_ARADDR(m_axi_in_8_ARADDR), - .m_axi_ARBURST(m_axi_in_8_ARBURST), - .m_axi_ARCACHE(m_axi_in_8_ARCACHE), - .m_axi_ARID(m_axi_in_8_ARID), - .m_axi_ARLEN(m_axi_in_8_ARLEN), - .m_axi_ARLOCK(m_axi_in_8_ARLOCK), - .m_axi_ARPROT(m_axi_in_8_ARPROT), - .m_axi_ARQOS(m_axi_in_8_ARQOS), - .m_axi_ARREADY(m_axi_in_8_ARREADY), - .m_axi_ARSIZE(m_axi_in_8_ARSIZE), - .m_axi_ARVALID(m_axi_in_8_ARVALID), - .m_axi_AWADDR(m_axi_in_8_AWADDR), - .m_axi_AWBURST(m_axi_in_8_AWBURST), - .m_axi_AWCACHE(m_axi_in_8_AWCACHE), - .m_axi_AWID(m_axi_in_8_AWID), - .m_axi_AWLEN(m_axi_in_8_AWLEN), - .m_axi_AWLOCK(m_axi_in_8_AWLOCK), - .m_axi_AWPROT(m_axi_in_8_AWPROT), - .m_axi_AWQOS(m_axi_in_8_AWQOS), - .m_axi_AWREADY(m_axi_in_8_AWREADY), - .m_axi_AWSIZE(m_axi_in_8_AWSIZE), - .m_axi_AWVALID(m_axi_in_8_AWVALID), - .m_axi_BID(m_axi_in_8_BID), - .m_axi_BREADY(m_axi_in_8_BREADY), - .m_axi_BRESP(m_axi_in_8_BRESP), - .m_axi_BVALID(m_axi_in_8_BVALID), - .m_axi_RDATA(m_axi_in_8_RDATA), - .m_axi_RID(m_axi_in_8_RID), - .m_axi_RLAST(m_axi_in_8_RLAST), - .m_axi_RREADY(m_axi_in_8_RREADY), - .m_axi_RRESP(m_axi_in_8_RRESP), - .m_axi_RVALID(m_axi_in_8_RVALID), - .m_axi_WDATA(m_axi_in_8_WDATA), - .m_axi_WLAST(m_axi_in_8_WLAST), - .m_axi_WREADY(m_axi_in_8_WREADY), - .m_axi_WSTRB(m_axi_in_8_WSTRB), - .m_axi_WVALID(m_axi_in_8_WVALID), - .read_addr_din(in_8_read_addr__din), - .read_addr_full_n(in_8_read_addr__full_n), - .read_addr_write(in_8_read_addr__write), - .read_data_dout(in_8_read_data__dout), - .read_data_empty_n(in_8_read_data__empty_n), - .read_data_read(in_8_read_data__read), - .write_addr_din(in_8_write_addr__din), - .write_addr_full_n(in_8_write_addr__full_n), - .write_addr_write(in_8_write_addr__write), - .write_data_din(in_8_write_data__din), - .write_data_full_n(in_8_write_data__full_n), - .write_data_write(in_8_write_data__write), - .write_resp_dout(in_8_write_resp__dout), - .write_resp_empty_n(in_8_write_resp__empty_n), - .write_resp_read(in_8_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - out_8__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_8___out_8__q0), - .m_axi_ARADDR(m_axi_out_8_ARADDR), - .m_axi_ARBURST(m_axi_out_8_ARBURST), - .m_axi_ARCACHE(m_axi_out_8_ARCACHE), - .m_axi_ARID(m_axi_out_8_ARID), - .m_axi_ARLEN(m_axi_out_8_ARLEN), - .m_axi_ARLOCK(m_axi_out_8_ARLOCK), - .m_axi_ARPROT(m_axi_out_8_ARPROT), - .m_axi_ARQOS(m_axi_out_8_ARQOS), - .m_axi_ARREADY(m_axi_out_8_ARREADY), - .m_axi_ARSIZE(m_axi_out_8_ARSIZE), - .m_axi_ARVALID(m_axi_out_8_ARVALID), - .m_axi_AWADDR(m_axi_out_8_AWADDR), - .m_axi_AWBURST(m_axi_out_8_AWBURST), - .m_axi_AWCACHE(m_axi_out_8_AWCACHE), - .m_axi_AWID(m_axi_out_8_AWID), - .m_axi_AWLEN(m_axi_out_8_AWLEN), - .m_axi_AWLOCK(m_axi_out_8_AWLOCK), - .m_axi_AWPROT(m_axi_out_8_AWPROT), - .m_axi_AWQOS(m_axi_out_8_AWQOS), - .m_axi_AWREADY(m_axi_out_8_AWREADY), - .m_axi_AWSIZE(m_axi_out_8_AWSIZE), - .m_axi_AWVALID(m_axi_out_8_AWVALID), - .m_axi_BID(m_axi_out_8_BID), - .m_axi_BREADY(m_axi_out_8_BREADY), - .m_axi_BRESP(m_axi_out_8_BRESP), - .m_axi_BVALID(m_axi_out_8_BVALID), - .m_axi_RDATA(m_axi_out_8_RDATA), - .m_axi_RID(m_axi_out_8_RID), - .m_axi_RLAST(m_axi_out_8_RLAST), - .m_axi_RREADY(m_axi_out_8_RREADY), - .m_axi_RRESP(m_axi_out_8_RRESP), - .m_axi_RVALID(m_axi_out_8_RVALID), - .m_axi_WDATA(m_axi_out_8_WDATA), - .m_axi_WLAST(m_axi_out_8_WLAST), - .m_axi_WREADY(m_axi_out_8_WREADY), - .m_axi_WSTRB(m_axi_out_8_WSTRB), - .m_axi_WVALID(m_axi_out_8_WVALID), - .read_addr_din(out_8_read_addr__din), - .read_addr_full_n(out_8_read_addr__full_n), - .read_addr_write(out_8_read_addr__write), - .read_data_dout(out_8_read_data__dout), - .read_data_empty_n(out_8_read_data__empty_n), - .read_data_read(out_8_read_data__read), - .write_addr_din(out_8_write_addr__din), - .write_addr_full_n(out_8_write_addr__full_n), - .write_addr_write(out_8_write_addr__write), - .write_data_din(out_8_write_data__din), - .write_data_full_n(out_8_write_data__full_n), - .write_data_write(out_8_write_data__write), - .write_resp_dout(out_8_write_resp__dout), - .write_resp_empty_n(out_8_write_resp__empty_n), - .write_resp_read(out_8_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - in_9__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_9___in_9__q0), - .m_axi_ARADDR(m_axi_in_9_ARADDR), - .m_axi_ARBURST(m_axi_in_9_ARBURST), - .m_axi_ARCACHE(m_axi_in_9_ARCACHE), - .m_axi_ARID(m_axi_in_9_ARID), - .m_axi_ARLEN(m_axi_in_9_ARLEN), - .m_axi_ARLOCK(m_axi_in_9_ARLOCK), - .m_axi_ARPROT(m_axi_in_9_ARPROT), - .m_axi_ARQOS(m_axi_in_9_ARQOS), - .m_axi_ARREADY(m_axi_in_9_ARREADY), - .m_axi_ARSIZE(m_axi_in_9_ARSIZE), - .m_axi_ARVALID(m_axi_in_9_ARVALID), - .m_axi_AWADDR(m_axi_in_9_AWADDR), - .m_axi_AWBURST(m_axi_in_9_AWBURST), - .m_axi_AWCACHE(m_axi_in_9_AWCACHE), - .m_axi_AWID(m_axi_in_9_AWID), - .m_axi_AWLEN(m_axi_in_9_AWLEN), - .m_axi_AWLOCK(m_axi_in_9_AWLOCK), - .m_axi_AWPROT(m_axi_in_9_AWPROT), - .m_axi_AWQOS(m_axi_in_9_AWQOS), - .m_axi_AWREADY(m_axi_in_9_AWREADY), - .m_axi_AWSIZE(m_axi_in_9_AWSIZE), - .m_axi_AWVALID(m_axi_in_9_AWVALID), - .m_axi_BID(m_axi_in_9_BID), - .m_axi_BREADY(m_axi_in_9_BREADY), - .m_axi_BRESP(m_axi_in_9_BRESP), - .m_axi_BVALID(m_axi_in_9_BVALID), - .m_axi_RDATA(m_axi_in_9_RDATA), - .m_axi_RID(m_axi_in_9_RID), - .m_axi_RLAST(m_axi_in_9_RLAST), - .m_axi_RREADY(m_axi_in_9_RREADY), - .m_axi_RRESP(m_axi_in_9_RRESP), - .m_axi_RVALID(m_axi_in_9_RVALID), - .m_axi_WDATA(m_axi_in_9_WDATA), - .m_axi_WLAST(m_axi_in_9_WLAST), - .m_axi_WREADY(m_axi_in_9_WREADY), - .m_axi_WSTRB(m_axi_in_9_WSTRB), - .m_axi_WVALID(m_axi_in_9_WVALID), - .read_addr_din(in_9_read_addr__din), - .read_addr_full_n(in_9_read_addr__full_n), - .read_addr_write(in_9_read_addr__write), - .read_data_dout(in_9_read_data__dout), - .read_data_empty_n(in_9_read_data__empty_n), - .read_data_read(in_9_read_data__read), - .write_addr_din(in_9_write_addr__din), - .write_addr_full_n(in_9_write_addr__full_n), - .write_addr_write(in_9_write_addr__write), - .write_data_din(in_9_write_data__din), - .write_data_full_n(in_9_write_data__full_n), - .write_data_write(in_9_write_data__write), - .write_resp_dout(in_9_write_resp__dout), - .write_resp_empty_n(in_9_write_resp__empty_n), - .write_resp_read(in_9_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - out_9__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_9___out_9__q0), - .m_axi_ARADDR(m_axi_out_9_ARADDR), - .m_axi_ARBURST(m_axi_out_9_ARBURST), - .m_axi_ARCACHE(m_axi_out_9_ARCACHE), - .m_axi_ARID(m_axi_out_9_ARID), - .m_axi_ARLEN(m_axi_out_9_ARLEN), - .m_axi_ARLOCK(m_axi_out_9_ARLOCK), - .m_axi_ARPROT(m_axi_out_9_ARPROT), - .m_axi_ARQOS(m_axi_out_9_ARQOS), - .m_axi_ARREADY(m_axi_out_9_ARREADY), - .m_axi_ARSIZE(m_axi_out_9_ARSIZE), - .m_axi_ARVALID(m_axi_out_9_ARVALID), - .m_axi_AWADDR(m_axi_out_9_AWADDR), - .m_axi_AWBURST(m_axi_out_9_AWBURST), - .m_axi_AWCACHE(m_axi_out_9_AWCACHE), - .m_axi_AWID(m_axi_out_9_AWID), - .m_axi_AWLEN(m_axi_out_9_AWLEN), - .m_axi_AWLOCK(m_axi_out_9_AWLOCK), - .m_axi_AWPROT(m_axi_out_9_AWPROT), - .m_axi_AWQOS(m_axi_out_9_AWQOS), - .m_axi_AWREADY(m_axi_out_9_AWREADY), - .m_axi_AWSIZE(m_axi_out_9_AWSIZE), - .m_axi_AWVALID(m_axi_out_9_AWVALID), - .m_axi_BID(m_axi_out_9_BID), - .m_axi_BREADY(m_axi_out_9_BREADY), - .m_axi_BRESP(m_axi_out_9_BRESP), - .m_axi_BVALID(m_axi_out_9_BVALID), - .m_axi_RDATA(m_axi_out_9_RDATA), - .m_axi_RID(m_axi_out_9_RID), - .m_axi_RLAST(m_axi_out_9_RLAST), - .m_axi_RREADY(m_axi_out_9_RREADY), - .m_axi_RRESP(m_axi_out_9_RRESP), - .m_axi_RVALID(m_axi_out_9_RVALID), - .m_axi_WDATA(m_axi_out_9_WDATA), - .m_axi_WLAST(m_axi_out_9_WLAST), - .m_axi_WREADY(m_axi_out_9_WREADY), - .m_axi_WSTRB(m_axi_out_9_WSTRB), - .m_axi_WVALID(m_axi_out_9_WVALID), - .read_addr_din(out_9_read_addr__din), - .read_addr_full_n(out_9_read_addr__full_n), - .read_addr_write(out_9_read_addr__write), - .read_data_dout(out_9_read_data__dout), - .read_data_empty_n(out_9_read_data__empty_n), - .read_data_read(out_9_read_data__read), - .write_addr_din(out_9_write_addr__din), - .write_addr_full_n(out_9_write_addr__full_n), - .write_addr_write(out_9_write_addr__write), - .write_data_din(out_9_write_data__din), - .write_data_full_n(out_9_write_data__full_n), - .write_data_write(out_9_write_data__write), - .write_resp_dout(out_9_write_resp__dout), - .write_resp_empty_n(out_9_write_resp__empty_n), - .write_resp_read(out_9_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - in_10__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_10___in_10__q0), - .m_axi_ARADDR(m_axi_in_10_ARADDR), - .m_axi_ARBURST(m_axi_in_10_ARBURST), - .m_axi_ARCACHE(m_axi_in_10_ARCACHE), - .m_axi_ARID(m_axi_in_10_ARID), - .m_axi_ARLEN(m_axi_in_10_ARLEN), - .m_axi_ARLOCK(m_axi_in_10_ARLOCK), - .m_axi_ARPROT(m_axi_in_10_ARPROT), - .m_axi_ARQOS(m_axi_in_10_ARQOS), - .m_axi_ARREADY(m_axi_in_10_ARREADY), - .m_axi_ARSIZE(m_axi_in_10_ARSIZE), - .m_axi_ARVALID(m_axi_in_10_ARVALID), - .m_axi_AWADDR(m_axi_in_10_AWADDR), - .m_axi_AWBURST(m_axi_in_10_AWBURST), - .m_axi_AWCACHE(m_axi_in_10_AWCACHE), - .m_axi_AWID(m_axi_in_10_AWID), - .m_axi_AWLEN(m_axi_in_10_AWLEN), - .m_axi_AWLOCK(m_axi_in_10_AWLOCK), - .m_axi_AWPROT(m_axi_in_10_AWPROT), - .m_axi_AWQOS(m_axi_in_10_AWQOS), - .m_axi_AWREADY(m_axi_in_10_AWREADY), - .m_axi_AWSIZE(m_axi_in_10_AWSIZE), - .m_axi_AWVALID(m_axi_in_10_AWVALID), - .m_axi_BID(m_axi_in_10_BID), - .m_axi_BREADY(m_axi_in_10_BREADY), - .m_axi_BRESP(m_axi_in_10_BRESP), - .m_axi_BVALID(m_axi_in_10_BVALID), - .m_axi_RDATA(m_axi_in_10_RDATA), - .m_axi_RID(m_axi_in_10_RID), - .m_axi_RLAST(m_axi_in_10_RLAST), - .m_axi_RREADY(m_axi_in_10_RREADY), - .m_axi_RRESP(m_axi_in_10_RRESP), - .m_axi_RVALID(m_axi_in_10_RVALID), - .m_axi_WDATA(m_axi_in_10_WDATA), - .m_axi_WLAST(m_axi_in_10_WLAST), - .m_axi_WREADY(m_axi_in_10_WREADY), - .m_axi_WSTRB(m_axi_in_10_WSTRB), - .m_axi_WVALID(m_axi_in_10_WVALID), - .read_addr_din(in_10_read_addr__din), - .read_addr_full_n(in_10_read_addr__full_n), - .read_addr_write(in_10_read_addr__write), - .read_data_dout(in_10_read_data__dout), - .read_data_empty_n(in_10_read_data__empty_n), - .read_data_read(in_10_read_data__read), - .write_addr_din(in_10_write_addr__din), - .write_addr_full_n(in_10_write_addr__full_n), - .write_addr_write(in_10_write_addr__write), - .write_data_din(in_10_write_data__din), - .write_data_full_n(in_10_write_data__full_n), - .write_data_write(in_10_write_data__write), - .write_resp_dout(in_10_write_resp__dout), - .write_resp_empty_n(in_10_write_resp__empty_n), - .write_resp_read(in_10_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - out_10__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_10___out_10__q0), - .m_axi_ARADDR(m_axi_out_10_ARADDR), - .m_axi_ARBURST(m_axi_out_10_ARBURST), - .m_axi_ARCACHE(m_axi_out_10_ARCACHE), - .m_axi_ARID(m_axi_out_10_ARID), - .m_axi_ARLEN(m_axi_out_10_ARLEN), - .m_axi_ARLOCK(m_axi_out_10_ARLOCK), - .m_axi_ARPROT(m_axi_out_10_ARPROT), - .m_axi_ARQOS(m_axi_out_10_ARQOS), - .m_axi_ARREADY(m_axi_out_10_ARREADY), - .m_axi_ARSIZE(m_axi_out_10_ARSIZE), - .m_axi_ARVALID(m_axi_out_10_ARVALID), - .m_axi_AWADDR(m_axi_out_10_AWADDR), - .m_axi_AWBURST(m_axi_out_10_AWBURST), - .m_axi_AWCACHE(m_axi_out_10_AWCACHE), - .m_axi_AWID(m_axi_out_10_AWID), - .m_axi_AWLEN(m_axi_out_10_AWLEN), - .m_axi_AWLOCK(m_axi_out_10_AWLOCK), - .m_axi_AWPROT(m_axi_out_10_AWPROT), - .m_axi_AWQOS(m_axi_out_10_AWQOS), - .m_axi_AWREADY(m_axi_out_10_AWREADY), - .m_axi_AWSIZE(m_axi_out_10_AWSIZE), - .m_axi_AWVALID(m_axi_out_10_AWVALID), - .m_axi_BID(m_axi_out_10_BID), - .m_axi_BREADY(m_axi_out_10_BREADY), - .m_axi_BRESP(m_axi_out_10_BRESP), - .m_axi_BVALID(m_axi_out_10_BVALID), - .m_axi_RDATA(m_axi_out_10_RDATA), - .m_axi_RID(m_axi_out_10_RID), - .m_axi_RLAST(m_axi_out_10_RLAST), - .m_axi_RREADY(m_axi_out_10_RREADY), - .m_axi_RRESP(m_axi_out_10_RRESP), - .m_axi_RVALID(m_axi_out_10_RVALID), - .m_axi_WDATA(m_axi_out_10_WDATA), - .m_axi_WLAST(m_axi_out_10_WLAST), - .m_axi_WREADY(m_axi_out_10_WREADY), - .m_axi_WSTRB(m_axi_out_10_WSTRB), - .m_axi_WVALID(m_axi_out_10_WVALID), - .read_addr_din(out_10_read_addr__din), - .read_addr_full_n(out_10_read_addr__full_n), - .read_addr_write(out_10_read_addr__write), - .read_data_dout(out_10_read_data__dout), - .read_data_empty_n(out_10_read_data__empty_n), - .read_data_read(out_10_read_data__read), - .write_addr_din(out_10_write_addr__din), - .write_addr_full_n(out_10_write_addr__full_n), - .write_addr_write(out_10_write_addr__write), - .write_data_din(out_10_write_data__din), - .write_data_full_n(out_10_write_data__full_n), - .write_data_write(out_10_write_data__write), - .write_resp_dout(out_10_write_resp__dout), - .write_resp_empty_n(out_10_write_resp__empty_n), - .write_resp_read(out_10_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - in_11__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_11___in_11__q0), - .m_axi_ARADDR(m_axi_in_11_ARADDR), - .m_axi_ARBURST(m_axi_in_11_ARBURST), - .m_axi_ARCACHE(m_axi_in_11_ARCACHE), - .m_axi_ARID(m_axi_in_11_ARID), - .m_axi_ARLEN(m_axi_in_11_ARLEN), - .m_axi_ARLOCK(m_axi_in_11_ARLOCK), - .m_axi_ARPROT(m_axi_in_11_ARPROT), - .m_axi_ARQOS(m_axi_in_11_ARQOS), - .m_axi_ARREADY(m_axi_in_11_ARREADY), - .m_axi_ARSIZE(m_axi_in_11_ARSIZE), - .m_axi_ARVALID(m_axi_in_11_ARVALID), - .m_axi_AWADDR(m_axi_in_11_AWADDR), - .m_axi_AWBURST(m_axi_in_11_AWBURST), - .m_axi_AWCACHE(m_axi_in_11_AWCACHE), - .m_axi_AWID(m_axi_in_11_AWID), - .m_axi_AWLEN(m_axi_in_11_AWLEN), - .m_axi_AWLOCK(m_axi_in_11_AWLOCK), - .m_axi_AWPROT(m_axi_in_11_AWPROT), - .m_axi_AWQOS(m_axi_in_11_AWQOS), - .m_axi_AWREADY(m_axi_in_11_AWREADY), - .m_axi_AWSIZE(m_axi_in_11_AWSIZE), - .m_axi_AWVALID(m_axi_in_11_AWVALID), - .m_axi_BID(m_axi_in_11_BID), - .m_axi_BREADY(m_axi_in_11_BREADY), - .m_axi_BRESP(m_axi_in_11_BRESP), - .m_axi_BVALID(m_axi_in_11_BVALID), - .m_axi_RDATA(m_axi_in_11_RDATA), - .m_axi_RID(m_axi_in_11_RID), - .m_axi_RLAST(m_axi_in_11_RLAST), - .m_axi_RREADY(m_axi_in_11_RREADY), - .m_axi_RRESP(m_axi_in_11_RRESP), - .m_axi_RVALID(m_axi_in_11_RVALID), - .m_axi_WDATA(m_axi_in_11_WDATA), - .m_axi_WLAST(m_axi_in_11_WLAST), - .m_axi_WREADY(m_axi_in_11_WREADY), - .m_axi_WSTRB(m_axi_in_11_WSTRB), - .m_axi_WVALID(m_axi_in_11_WVALID), - .read_addr_din(in_11_read_addr__din), - .read_addr_full_n(in_11_read_addr__full_n), - .read_addr_write(in_11_read_addr__write), - .read_data_dout(in_11_read_data__dout), - .read_data_empty_n(in_11_read_data__empty_n), - .read_data_read(in_11_read_data__read), - .write_addr_din(in_11_write_addr__din), - .write_addr_full_n(in_11_write_addr__full_n), - .write_addr_write(in_11_write_addr__write), - .write_data_din(in_11_write_data__din), - .write_data_full_n(in_11_write_data__full_n), - .write_data_write(in_11_write_data__write), - .write_resp_dout(in_11_write_resp__dout), - .write_resp_empty_n(in_11_write_resp__empty_n), - .write_resp_read(in_11_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) async_mmap - #( - .DataWidth(512), - .DataWidthBytesLog(6), - .AddrWidth(64), - .WaitTimeWidth(2), - .MaxWaitTime(3), - .BurstLenWidth(9), - .MaxBurstLen(15) - ) - out_11__m_axi - ( - .clk(ap_clk), - .rst(~ap_rst_n), - .offset(inter_kernel_11___out_11__q0), - .m_axi_ARADDR(m_axi_out_11_ARADDR), - .m_axi_ARBURST(m_axi_out_11_ARBURST), - .m_axi_ARCACHE(m_axi_out_11_ARCACHE), - .m_axi_ARID(m_axi_out_11_ARID), - .m_axi_ARLEN(m_axi_out_11_ARLEN), - .m_axi_ARLOCK(m_axi_out_11_ARLOCK), - .m_axi_ARPROT(m_axi_out_11_ARPROT), - .m_axi_ARQOS(m_axi_out_11_ARQOS), - .m_axi_ARREADY(m_axi_out_11_ARREADY), - .m_axi_ARSIZE(m_axi_out_11_ARSIZE), - .m_axi_ARVALID(m_axi_out_11_ARVALID), - .m_axi_AWADDR(m_axi_out_11_AWADDR), - .m_axi_AWBURST(m_axi_out_11_AWBURST), - .m_axi_AWCACHE(m_axi_out_11_AWCACHE), - .m_axi_AWID(m_axi_out_11_AWID), - .m_axi_AWLEN(m_axi_out_11_AWLEN), - .m_axi_AWLOCK(m_axi_out_11_AWLOCK), - .m_axi_AWPROT(m_axi_out_11_AWPROT), - .m_axi_AWQOS(m_axi_out_11_AWQOS), - .m_axi_AWREADY(m_axi_out_11_AWREADY), - .m_axi_AWSIZE(m_axi_out_11_AWSIZE), - .m_axi_AWVALID(m_axi_out_11_AWVALID), - .m_axi_BID(m_axi_out_11_BID), - .m_axi_BREADY(m_axi_out_11_BREADY), - .m_axi_BRESP(m_axi_out_11_BRESP), - .m_axi_BVALID(m_axi_out_11_BVALID), - .m_axi_RDATA(m_axi_out_11_RDATA), - .m_axi_RID(m_axi_out_11_RID), - .m_axi_RLAST(m_axi_out_11_RLAST), - .m_axi_RREADY(m_axi_out_11_RREADY), - .m_axi_RRESP(m_axi_out_11_RRESP), - .m_axi_RVALID(m_axi_out_11_RVALID), - .m_axi_WDATA(m_axi_out_11_WDATA), - .m_axi_WLAST(m_axi_out_11_WLAST), - .m_axi_WREADY(m_axi_out_11_WREADY), - .m_axi_WSTRB(m_axi_out_11_WSTRB), - .m_axi_WVALID(m_axi_out_11_WVALID), - .read_addr_din(out_11_read_addr__din), - .read_addr_full_n(out_11_read_addr__full_n), - .read_addr_write(out_11_read_addr__write), - .read_data_dout(out_11_read_data__dout), - .read_data_empty_n(out_11_read_data__empty_n), - .read_data_read(out_11_read_data__read), - .write_addr_din(out_11_write_addr__din), - .write_addr_full_n(out_11_write_addr__full_n), - .write_addr_write(out_11_write_addr__write), - .write_data_din(out_11_write_data__din), - .write_data_full_n(out_11_write_data__full_n), - .write_data_write(out_11_write_data__write), - .write_resp_dout(out_11_write_resp__dout), - .write_resp_empty_n(out_11_write_resp__empty_n), - .write_resp_read(out_11_write_resp__read) - ); - - - (* keep_hierarchy = "yes" *) unikernel_fsm - __tapa_fsm_unit - ( - .ap_clk(ap_clk), - .ap_rst_n(ap_rst_n), - .ap_start(ap_start), - .ap_done(ap_done), - .ap_idle(ap_idle), - .ap_ready(ap_ready), - .HEAT3D_0__ap_start(HEAT3D_0__ap_start), - .HEAT3D_0__ap_ready(HEAT3D_0__ap_ready), - .HEAT3D_0__ap_done(HEAT3D_0__ap_done), - .HEAT3D_0__ap_idle(HEAT3D_0__ap_idle), - .HEAT3D_1__ap_start(HEAT3D_1__ap_start), - .HEAT3D_1__ap_ready(HEAT3D_1__ap_ready), - .HEAT3D_1__ap_done(HEAT3D_1__ap_done), - .HEAT3D_1__ap_idle(HEAT3D_1__ap_idle), - .HEAT3D_2__ap_start(HEAT3D_2__ap_start), - .HEAT3D_2__ap_ready(HEAT3D_2__ap_ready), - .HEAT3D_2__ap_done(HEAT3D_2__ap_done), - .HEAT3D_2__ap_idle(HEAT3D_2__ap_idle), - .HEAT3D_3__ap_start(HEAT3D_3__ap_start), - .HEAT3D_3__ap_ready(HEAT3D_3__ap_ready), - .HEAT3D_3__ap_done(HEAT3D_3__ap_done), - .HEAT3D_3__ap_idle(HEAT3D_3__ap_idle), - .HEAT3D_4__ap_start(HEAT3D_4__ap_start), - .HEAT3D_4__ap_ready(HEAT3D_4__ap_ready), - .HEAT3D_4__ap_done(HEAT3D_4__ap_done), - .HEAT3D_4__ap_idle(HEAT3D_4__ap_idle), - .HEAT3D_5__ap_start(HEAT3D_5__ap_start), - .HEAT3D_5__ap_ready(HEAT3D_5__ap_ready), - .HEAT3D_5__ap_done(HEAT3D_5__ap_done), - .HEAT3D_5__ap_idle(HEAT3D_5__ap_idle), - .HEAT3D_6__ap_start(HEAT3D_6__ap_start), - .HEAT3D_6__ap_ready(HEAT3D_6__ap_ready), - .HEAT3D_6__ap_done(HEAT3D_6__ap_done), - .HEAT3D_6__ap_idle(HEAT3D_6__ap_idle), - .HEAT3D_7__ap_start(HEAT3D_7__ap_start), - .HEAT3D_7__ap_ready(HEAT3D_7__ap_ready), - .HEAT3D_7__ap_done(HEAT3D_7__ap_done), - .HEAT3D_7__ap_idle(HEAT3D_7__ap_idle), - .HEAT3D_8__ap_start(HEAT3D_8__ap_start), - .HEAT3D_8__ap_ready(HEAT3D_8__ap_ready), - .HEAT3D_8__ap_done(HEAT3D_8__ap_done), - .HEAT3D_8__ap_idle(HEAT3D_8__ap_idle), - .HEAT3D_9__ap_start(HEAT3D_9__ap_start), - .HEAT3D_9__ap_ready(HEAT3D_9__ap_ready), - .HEAT3D_9__ap_done(HEAT3D_9__ap_done), - .HEAT3D_9__ap_idle(HEAT3D_9__ap_idle), - .HEAT3D_10__ap_start(HEAT3D_10__ap_start), - .HEAT3D_10__ap_ready(HEAT3D_10__ap_ready), - .HEAT3D_10__ap_done(HEAT3D_10__ap_done), - .HEAT3D_10__ap_idle(HEAT3D_10__ap_idle), - .HEAT3D_11__ap_start(HEAT3D_11__ap_start), - .HEAT3D_11__ap_ready(HEAT3D_11__ap_ready), - .HEAT3D_11__ap_done(HEAT3D_11__ap_done), - .HEAT3D_11__ap_idle(HEAT3D_11__ap_idle), - .inter_kernel_0__ap_start(inter_kernel_0__ap_start), - .inter_kernel_0__ap_ready(inter_kernel_0__ap_ready), - .inter_kernel_0__ap_done(inter_kernel_0__ap_done), - .inter_kernel_0__ap_idle(inter_kernel_0__ap_idle), - .inter_kernel_1__ap_start(inter_kernel_1__ap_start), - .inter_kernel_1__ap_ready(inter_kernel_1__ap_ready), - .inter_kernel_1__ap_done(inter_kernel_1__ap_done), - .inter_kernel_1__ap_idle(inter_kernel_1__ap_idle), - .inter_kernel_2__ap_start(inter_kernel_2__ap_start), - .inter_kernel_2__ap_ready(inter_kernel_2__ap_ready), - .inter_kernel_2__ap_done(inter_kernel_2__ap_done), - .inter_kernel_2__ap_idle(inter_kernel_2__ap_idle), - .inter_kernel_3__ap_start(inter_kernel_3__ap_start), - .inter_kernel_3__ap_ready(inter_kernel_3__ap_ready), - .inter_kernel_3__ap_done(inter_kernel_3__ap_done), - .inter_kernel_3__ap_idle(inter_kernel_3__ap_idle), - .inter_kernel_4__ap_start(inter_kernel_4__ap_start), - .inter_kernel_4__ap_ready(inter_kernel_4__ap_ready), - .inter_kernel_4__ap_done(inter_kernel_4__ap_done), - .inter_kernel_4__ap_idle(inter_kernel_4__ap_idle), - .inter_kernel_5__ap_start(inter_kernel_5__ap_start), - .inter_kernel_5__ap_ready(inter_kernel_5__ap_ready), - .inter_kernel_5__ap_done(inter_kernel_5__ap_done), - .inter_kernel_5__ap_idle(inter_kernel_5__ap_idle), - .inter_kernel_6__ap_start(inter_kernel_6__ap_start), - .inter_kernel_6__ap_ready(inter_kernel_6__ap_ready), - .inter_kernel_6__ap_done(inter_kernel_6__ap_done), - .inter_kernel_6__ap_idle(inter_kernel_6__ap_idle), - .inter_kernel_7__ap_start(inter_kernel_7__ap_start), - .inter_kernel_7__ap_ready(inter_kernel_7__ap_ready), - .inter_kernel_7__ap_done(inter_kernel_7__ap_done), - .inter_kernel_7__ap_idle(inter_kernel_7__ap_idle), - .inter_kernel_8__ap_start(inter_kernel_8__ap_start), - .inter_kernel_8__ap_ready(inter_kernel_8__ap_ready), - .inter_kernel_8__ap_done(inter_kernel_8__ap_done), - .inter_kernel_8__ap_idle(inter_kernel_8__ap_idle), - .inter_kernel_9__ap_start(inter_kernel_9__ap_start), - .inter_kernel_9__ap_ready(inter_kernel_9__ap_ready), - .inter_kernel_9__ap_done(inter_kernel_9__ap_done), - .inter_kernel_9__ap_idle(inter_kernel_9__ap_idle), - .inter_kernel_10__ap_start(inter_kernel_10__ap_start), - .inter_kernel_10__ap_ready(inter_kernel_10__ap_ready), - .inter_kernel_10__ap_done(inter_kernel_10__ap_done), - .inter_kernel_10__ap_idle(inter_kernel_10__ap_idle), - .inter_kernel_11__ap_start(inter_kernel_11__ap_start), - .inter_kernel_11__ap_ready(inter_kernel_11__ap_ready), - .inter_kernel_11__ap_done(inter_kernel_11__ap_done), - .inter_kernel_11__ap_idle(inter_kernel_11__ap_idle) - ); - - assign ap_rst_n_inv = (~ap_rst_n); - assign HEAT3D_0___iters__q0 = iters; - assign HEAT3D_1___iters__q0 = iters; - assign HEAT3D_2___iters__q0 = iters; - assign HEAT3D_3___iters__q0 = iters; - assign HEAT3D_4___iters__q0 = iters; - assign HEAT3D_5___iters__q0 = iters; - assign HEAT3D_6___iters__q0 = iters; - assign HEAT3D_7___iters__q0 = iters; - assign HEAT3D_8___iters__q0 = iters; - assign HEAT3D_9___iters__q0 = iters; - assign HEAT3D_10___iters__q0 = iters; - assign HEAT3D_11___iters__q0 = iters; - assign inter_kernel_0___in_0__q0 = in_0; - assign inter_kernel_0___iters__q0 = iters; - assign inter_kernel_0___out_0__q0 = out_0; - assign inter_kernel_1___in_1__q0 = in_1; - assign inter_kernel_1___iters__q0 = iters; - assign inter_kernel_1___out_1__q0 = out_1; - assign inter_kernel_2___in_2__q0 = in_2; - assign inter_kernel_2___iters__q0 = iters; - assign inter_kernel_2___out_2__q0 = out_2; - assign inter_kernel_3___in_3__q0 = in_3; - assign inter_kernel_3___iters__q0 = iters; - assign inter_kernel_3___out_3__q0 = out_3; - assign inter_kernel_4___in_4__q0 = in_4; - assign inter_kernel_4___iters__q0 = iters; - assign inter_kernel_4___out_4__q0 = out_4; - assign inter_kernel_5___in_5__q0 = in_5; - assign inter_kernel_5___iters__q0 = iters; - assign inter_kernel_5___out_5__q0 = out_5; - assign inter_kernel_6___in_6__q0 = in_6; - assign inter_kernel_6___iters__q0 = iters; - assign inter_kernel_6___out_6__q0 = out_6; - assign inter_kernel_7___in_7__q0 = in_7; - assign inter_kernel_7___iters__q0 = iters; - assign inter_kernel_7___out_7__q0 = out_7; - assign inter_kernel_8___in_8__q0 = in_8; - assign inter_kernel_8___iters__q0 = iters; - assign inter_kernel_8___out_8__q0 = out_8; - assign inter_kernel_9___in_9__q0 = in_9; - assign inter_kernel_9___iters__q0 = iters; - assign inter_kernel_9___out_9__q0 = out_9; - assign inter_kernel_10___in_10__q0 = in_10; - assign inter_kernel_10___iters__q0 = iters; - assign inter_kernel_10___out_10__q0 = out_10; - assign inter_kernel_11___in_11__q0 = in_11; - assign inter_kernel_11___iters__q0 = iters; - assign inter_kernel_11___out_11__q0 = out_11; - -endmodule diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/unikernel_control_s_axi.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/unikernel_control_s_axi.v deleted file mode 100644 index 6005a635..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/unikernel_control_s_axi.v +++ /dev/null @@ -1,1263 +0,0 @@ -// ============================================================== -// Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2022.2 (64-bit) -// Tool Version Limit: 2019.12 -// Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. -// ============================================================== -`timescale 1ns/1ps -module unikernel_control_s_axi -#(parameter - C_S_AXI_ADDR_WIDTH = 9, - C_S_AXI_DATA_WIDTH = 32 -)( - input wire ACLK, - input wire ARESET, - input wire ACLK_EN, - input wire [C_S_AXI_ADDR_WIDTH-1:0] AWADDR, - input wire AWVALID, - output wire AWREADY, - input wire [C_S_AXI_DATA_WIDTH-1:0] WDATA, - input wire [C_S_AXI_DATA_WIDTH/8-1:0] WSTRB, - input wire WVALID, - output wire WREADY, - output wire [1:0] BRESP, - output wire BVALID, - input wire BREADY, - input wire [C_S_AXI_ADDR_WIDTH-1:0] ARADDR, - input wire ARVALID, - output wire ARREADY, - output wire [C_S_AXI_DATA_WIDTH-1:0] RDATA, - output wire [1:0] RRESP, - output wire RVALID, - input wire RREADY, - output wire interrupt, - output wire [63:0] in_0, - output wire [63:0] out_0, - output wire [63:0] in_1, - output wire [63:0] out_1, - output wire [63:0] in_2, - output wire [63:0] out_2, - output wire [63:0] in_3, - output wire [63:0] out_3, - output wire [63:0] in_4, - output wire [63:0] out_4, - output wire [63:0] in_5, - output wire [63:0] out_5, - output wire [63:0] in_6, - output wire [63:0] out_6, - output wire [63:0] in_7, - output wire [63:0] out_7, - output wire [63:0] in_8, - output wire [63:0] out_8, - output wire [63:0] in_9, - output wire [63:0] out_9, - output wire [63:0] in_10, - output wire [63:0] out_10, - output wire [63:0] in_11, - output wire [63:0] out_11, - output wire [31:0] iters, - output wire ap_start, - input wire ap_done, - input wire ap_ready, - input wire ap_idle -); -//------------------------Address Info------------------- -// 0x000 : Control signals -// bit 0 - ap_start (Read/Write/SC) -// bit 1 - ap_done (Read/COR) -// bit 2 - ap_idle (Read) -// bit 3 - ap_ready (Read/COR) -// bit 7 - auto_restart (Read/Write) -// bit 9 - interrupt (Read) -// others - reserved -// 0x004 : Global Interrupt Enable Register -// bit 0 - Global Interrupt Enable (Read/Write) -// others - reserved -// 0x008 : IP Interrupt Enable Register (Read/Write) -// bit 0 - enable ap_done interrupt (Read/Write) -// others - reserved -// 0x00c : IP Interrupt Status Register (Read/TOW) -// bit 0 - ap_done (Read/TOW) -// others - reserved -// 0x010 : Data signal of in_0 -// bit 31~0 - in_0[31:0] (Read/Write) -// 0x014 : Data signal of in_0 -// bit 31~0 - in_0[63:32] (Read/Write) -// 0x018 : reserved -// 0x01c : Data signal of out_0 -// bit 31~0 - out_0[31:0] (Read/Write) -// 0x020 : Data signal of out_0 -// bit 31~0 - out_0[63:32] (Read/Write) -// 0x024 : reserved -// 0x028 : Data signal of in_1 -// bit 31~0 - in_1[31:0] (Read/Write) -// 0x02c : Data signal of in_1 -// bit 31~0 - in_1[63:32] (Read/Write) -// 0x030 : reserved -// 0x034 : Data signal of out_1 -// bit 31~0 - out_1[31:0] (Read/Write) -// 0x038 : Data signal of out_1 -// bit 31~0 - out_1[63:32] (Read/Write) -// 0x03c : reserved -// 0x040 : Data signal of in_2 -// bit 31~0 - in_2[31:0] (Read/Write) -// 0x044 : Data signal of in_2 -// bit 31~0 - in_2[63:32] (Read/Write) -// 0x048 : reserved -// 0x04c : Data signal of out_2 -// bit 31~0 - out_2[31:0] (Read/Write) -// 0x050 : Data signal of out_2 -// bit 31~0 - out_2[63:32] (Read/Write) -// 0x054 : reserved -// 0x058 : Data signal of in_3 -// bit 31~0 - in_3[31:0] (Read/Write) -// 0x05c : Data signal of in_3 -// bit 31~0 - in_3[63:32] (Read/Write) -// 0x060 : reserved -// 0x064 : Data signal of out_3 -// bit 31~0 - out_3[31:0] (Read/Write) -// 0x068 : Data signal of out_3 -// bit 31~0 - out_3[63:32] (Read/Write) -// 0x06c : reserved -// 0x070 : Data signal of in_4 -// bit 31~0 - in_4[31:0] (Read/Write) -// 0x074 : Data signal of in_4 -// bit 31~0 - in_4[63:32] (Read/Write) -// 0x078 : reserved -// 0x07c : Data signal of out_4 -// bit 31~0 - out_4[31:0] (Read/Write) -// 0x080 : Data signal of out_4 -// bit 31~0 - out_4[63:32] (Read/Write) -// 0x084 : reserved -// 0x088 : Data signal of in_5 -// bit 31~0 - in_5[31:0] (Read/Write) -// 0x08c : Data signal of in_5 -// bit 31~0 - in_5[63:32] (Read/Write) -// 0x090 : reserved -// 0x094 : Data signal of out_5 -// bit 31~0 - out_5[31:0] (Read/Write) -// 0x098 : Data signal of out_5 -// bit 31~0 - out_5[63:32] (Read/Write) -// 0x09c : reserved -// 0x0a0 : Data signal of in_6 -// bit 31~0 - in_6[31:0] (Read/Write) -// 0x0a4 : Data signal of in_6 -// bit 31~0 - in_6[63:32] (Read/Write) -// 0x0a8 : reserved -// 0x0ac : Data signal of out_6 -// bit 31~0 - out_6[31:0] (Read/Write) -// 0x0b0 : Data signal of out_6 -// bit 31~0 - out_6[63:32] (Read/Write) -// 0x0b4 : reserved -// 0x0b8 : Data signal of in_7 -// bit 31~0 - in_7[31:0] (Read/Write) -// 0x0bc : Data signal of in_7 -// bit 31~0 - in_7[63:32] (Read/Write) -// 0x0c0 : reserved -// 0x0c4 : Data signal of out_7 -// bit 31~0 - out_7[31:0] (Read/Write) -// 0x0c8 : Data signal of out_7 -// bit 31~0 - out_7[63:32] (Read/Write) -// 0x0cc : reserved -// 0x0d0 : Data signal of in_8 -// bit 31~0 - in_8[31:0] (Read/Write) -// 0x0d4 : Data signal of in_8 -// bit 31~0 - in_8[63:32] (Read/Write) -// 0x0d8 : reserved -// 0x0dc : Data signal of out_8 -// bit 31~0 - out_8[31:0] (Read/Write) -// 0x0e0 : Data signal of out_8 -// bit 31~0 - out_8[63:32] (Read/Write) -// 0x0e4 : reserved -// 0x0e8 : Data signal of in_9 -// bit 31~0 - in_9[31:0] (Read/Write) -// 0x0ec : Data signal of in_9 -// bit 31~0 - in_9[63:32] (Read/Write) -// 0x0f0 : reserved -// 0x0f4 : Data signal of out_9 -// bit 31~0 - out_9[31:0] (Read/Write) -// 0x0f8 : Data signal of out_9 -// bit 31~0 - out_9[63:32] (Read/Write) -// 0x0fc : reserved -// 0x100 : Data signal of in_10 -// bit 31~0 - in_10[31:0] (Read/Write) -// 0x104 : Data signal of in_10 -// bit 31~0 - in_10[63:32] (Read/Write) -// 0x108 : reserved -// 0x10c : Data signal of out_10 -// bit 31~0 - out_10[31:0] (Read/Write) -// 0x110 : Data signal of out_10 -// bit 31~0 - out_10[63:32] (Read/Write) -// 0x114 : reserved -// 0x118 : Data signal of in_11 -// bit 31~0 - in_11[31:0] (Read/Write) -// 0x11c : Data signal of in_11 -// bit 31~0 - in_11[63:32] (Read/Write) -// 0x120 : reserved -// 0x124 : Data signal of out_11 -// bit 31~0 - out_11[31:0] (Read/Write) -// 0x128 : Data signal of out_11 -// bit 31~0 - out_11[63:32] (Read/Write) -// 0x12c : reserved -// 0x130 : Data signal of iters -// bit 31~0 - iters[31:0] (Read/Write) -// 0x134 : reserved -// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake) - -//------------------------Parameter---------------------- -localparam - ADDR_AP_CTRL = 9'h000, - ADDR_GIE = 9'h004, - ADDR_IER = 9'h008, - ADDR_ISR = 9'h00c, - ADDR_IN_0_DATA_0 = 9'h010, - ADDR_IN_0_DATA_1 = 9'h014, - ADDR_IN_0_CTRL = 9'h018, - ADDR_OUT_0_DATA_0 = 9'h01c, - ADDR_OUT_0_DATA_1 = 9'h020, - ADDR_OUT_0_CTRL = 9'h024, - ADDR_IN_1_DATA_0 = 9'h028, - ADDR_IN_1_DATA_1 = 9'h02c, - ADDR_IN_1_CTRL = 9'h030, - ADDR_OUT_1_DATA_0 = 9'h034, - ADDR_OUT_1_DATA_1 = 9'h038, - ADDR_OUT_1_CTRL = 9'h03c, - ADDR_IN_2_DATA_0 = 9'h040, - ADDR_IN_2_DATA_1 = 9'h044, - ADDR_IN_2_CTRL = 9'h048, - ADDR_OUT_2_DATA_0 = 9'h04c, - ADDR_OUT_2_DATA_1 = 9'h050, - ADDR_OUT_2_CTRL = 9'h054, - ADDR_IN_3_DATA_0 = 9'h058, - ADDR_IN_3_DATA_1 = 9'h05c, - ADDR_IN_3_CTRL = 9'h060, - ADDR_OUT_3_DATA_0 = 9'h064, - ADDR_OUT_3_DATA_1 = 9'h068, - ADDR_OUT_3_CTRL = 9'h06c, - ADDR_IN_4_DATA_0 = 9'h070, - ADDR_IN_4_DATA_1 = 9'h074, - ADDR_IN_4_CTRL = 9'h078, - ADDR_OUT_4_DATA_0 = 9'h07c, - ADDR_OUT_4_DATA_1 = 9'h080, - ADDR_OUT_4_CTRL = 9'h084, - ADDR_IN_5_DATA_0 = 9'h088, - ADDR_IN_5_DATA_1 = 9'h08c, - ADDR_IN_5_CTRL = 9'h090, - ADDR_OUT_5_DATA_0 = 9'h094, - ADDR_OUT_5_DATA_1 = 9'h098, - ADDR_OUT_5_CTRL = 9'h09c, - ADDR_IN_6_DATA_0 = 9'h0a0, - ADDR_IN_6_DATA_1 = 9'h0a4, - ADDR_IN_6_CTRL = 9'h0a8, - ADDR_OUT_6_DATA_0 = 9'h0ac, - ADDR_OUT_6_DATA_1 = 9'h0b0, - ADDR_OUT_6_CTRL = 9'h0b4, - ADDR_IN_7_DATA_0 = 9'h0b8, - ADDR_IN_7_DATA_1 = 9'h0bc, - ADDR_IN_7_CTRL = 9'h0c0, - ADDR_OUT_7_DATA_0 = 9'h0c4, - ADDR_OUT_7_DATA_1 = 9'h0c8, - ADDR_OUT_7_CTRL = 9'h0cc, - ADDR_IN_8_DATA_0 = 9'h0d0, - ADDR_IN_8_DATA_1 = 9'h0d4, - ADDR_IN_8_CTRL = 9'h0d8, - ADDR_OUT_8_DATA_0 = 9'h0dc, - ADDR_OUT_8_DATA_1 = 9'h0e0, - ADDR_OUT_8_CTRL = 9'h0e4, - ADDR_IN_9_DATA_0 = 9'h0e8, - ADDR_IN_9_DATA_1 = 9'h0ec, - ADDR_IN_9_CTRL = 9'h0f0, - ADDR_OUT_9_DATA_0 = 9'h0f4, - ADDR_OUT_9_DATA_1 = 9'h0f8, - ADDR_OUT_9_CTRL = 9'h0fc, - ADDR_IN_10_DATA_0 = 9'h100, - ADDR_IN_10_DATA_1 = 9'h104, - ADDR_IN_10_CTRL = 9'h108, - ADDR_OUT_10_DATA_0 = 9'h10c, - ADDR_OUT_10_DATA_1 = 9'h110, - ADDR_OUT_10_CTRL = 9'h114, - ADDR_IN_11_DATA_0 = 9'h118, - ADDR_IN_11_DATA_1 = 9'h11c, - ADDR_IN_11_CTRL = 9'h120, - ADDR_OUT_11_DATA_0 = 9'h124, - ADDR_OUT_11_DATA_1 = 9'h128, - ADDR_OUT_11_CTRL = 9'h12c, - ADDR_ITERS_DATA_0 = 9'h130, - ADDR_ITERS_CTRL = 9'h134, - WRIDLE = 2'd0, - WRDATA = 2'd1, - WRRESP = 2'd2, - WRRESET = 2'd3, - RDIDLE = 2'd0, - RDDATA = 2'd1, - RDRESET = 2'd2, - ADDR_BITS = 9; - -//------------------------Local signal------------------- - reg [1:0] wstate = WRRESET; - reg [1:0] wnext; - reg [ADDR_BITS-1:0] waddr; - wire [C_S_AXI_DATA_WIDTH-1:0] wmask; - wire aw_hs; - wire w_hs; - reg [1:0] rstate = RDRESET; - reg [1:0] rnext; - reg [C_S_AXI_DATA_WIDTH-1:0] rdata; - wire ar_hs; - wire [ADDR_BITS-1:0] raddr; - // internal registers - reg int_ap_idle; - reg int_ap_ready = 1'b0; - wire task_ap_ready; - reg int_ap_done = 1'b0; - wire task_ap_done; - reg int_task_ap_done = 1'b0; - reg int_ap_start = 1'b0; - reg int_interrupt = 1'b0; - reg int_auto_restart = 1'b0; - reg auto_restart_status = 1'b0; - wire auto_restart_done; - reg int_gie = 1'b0; - reg int_ier = 1'b0; - reg int_isr = 1'b0; - reg [63:0] int_in_0 = 'b0; - reg [63:0] int_out_0 = 'b0; - reg [63:0] int_in_1 = 'b0; - reg [63:0] int_out_1 = 'b0; - reg [63:0] int_in_2 = 'b0; - reg [63:0] int_out_2 = 'b0; - reg [63:0] int_in_3 = 'b0; - reg [63:0] int_out_3 = 'b0; - reg [63:0] int_in_4 = 'b0; - reg [63:0] int_out_4 = 'b0; - reg [63:0] int_in_5 = 'b0; - reg [63:0] int_out_5 = 'b0; - reg [63:0] int_in_6 = 'b0; - reg [63:0] int_out_6 = 'b0; - reg [63:0] int_in_7 = 'b0; - reg [63:0] int_out_7 = 'b0; - reg [63:0] int_in_8 = 'b0; - reg [63:0] int_out_8 = 'b0; - reg [63:0] int_in_9 = 'b0; - reg [63:0] int_out_9 = 'b0; - reg [63:0] int_in_10 = 'b0; - reg [63:0] int_out_10 = 'b0; - reg [63:0] int_in_11 = 'b0; - reg [63:0] int_out_11 = 'b0; - reg [31:0] int_iters = 'b0; - -//------------------------Instantiation------------------ - - -//------------------------AXI write fsm------------------ -assign AWREADY = (wstate == WRIDLE); -assign WREADY = (wstate == WRDATA); -assign BRESP = 2'b00; // OKAY -assign BVALID = (wstate == WRRESP); -assign wmask = { {8{WSTRB[3]}}, {8{WSTRB[2]}}, {8{WSTRB[1]}}, {8{WSTRB[0]}} }; -assign aw_hs = AWVALID & AWREADY; -assign w_hs = WVALID & WREADY; - -// wstate -always @(posedge ACLK) begin - if (ARESET) - wstate <= WRRESET; - else if (ACLK_EN) - wstate <= wnext; -end - -// wnext -always @(*) begin - case (wstate) - WRIDLE: - if (AWVALID) - wnext = WRDATA; - else - wnext = WRIDLE; - WRDATA: - if (WVALID) - wnext = WRRESP; - else - wnext = WRDATA; - WRRESP: - if (BREADY) - wnext = WRIDLE; - else - wnext = WRRESP; - default: - wnext = WRIDLE; - endcase -end - -// waddr -always @(posedge ACLK) begin - if (ACLK_EN) begin - if (aw_hs) - waddr <= AWADDR[ADDR_BITS-1:0]; - end -end - -//------------------------AXI read fsm------------------- -assign ARREADY = (rstate == RDIDLE); -assign RDATA = rdata; -assign RRESP = 2'b00; // OKAY -assign RVALID = (rstate == RDDATA); -assign ar_hs = ARVALID & ARREADY; -assign raddr = ARADDR[ADDR_BITS-1:0]; - -// rstate -always @(posedge ACLK) begin - if (ARESET) - rstate <= RDRESET; - else if (ACLK_EN) - rstate <= rnext; -end - -// rnext -always @(*) begin - case (rstate) - RDIDLE: - if (ARVALID) - rnext = RDDATA; - else - rnext = RDIDLE; - RDDATA: - if (RREADY & RVALID) - rnext = RDIDLE; - else - rnext = RDDATA; - default: - rnext = RDIDLE; - endcase -end - -// rdata -always @(posedge ACLK) begin - if (ACLK_EN) begin - if (ar_hs) begin - rdata <= 'b0; - case (raddr) - ADDR_AP_CTRL: begin - rdata[0] <= int_ap_start; - rdata[1] <= int_task_ap_done; - rdata[2] <= int_ap_idle; - rdata[3] <= int_ap_ready; - rdata[7] <= int_auto_restart; - rdata[9] <= int_interrupt; - end - ADDR_GIE: begin - rdata <= int_gie; - end - ADDR_IER: begin - rdata <= int_ier; - end - ADDR_ISR: begin - rdata <= int_isr; - end - ADDR_IN_0_DATA_0: begin - rdata <= int_in_0[31:0]; - end - ADDR_IN_0_DATA_1: begin - rdata <= int_in_0[63:32]; - end - ADDR_OUT_0_DATA_0: begin - rdata <= int_out_0[31:0]; - end - ADDR_OUT_0_DATA_1: begin - rdata <= int_out_0[63:32]; - end - ADDR_IN_1_DATA_0: begin - rdata <= int_in_1[31:0]; - end - ADDR_IN_1_DATA_1: begin - rdata <= int_in_1[63:32]; - end - ADDR_OUT_1_DATA_0: begin - rdata <= int_out_1[31:0]; - end - ADDR_OUT_1_DATA_1: begin - rdata <= int_out_1[63:32]; - end - ADDR_IN_2_DATA_0: begin - rdata <= int_in_2[31:0]; - end - ADDR_IN_2_DATA_1: begin - rdata <= int_in_2[63:32]; - end - ADDR_OUT_2_DATA_0: begin - rdata <= int_out_2[31:0]; - end - ADDR_OUT_2_DATA_1: begin - rdata <= int_out_2[63:32]; - end - ADDR_IN_3_DATA_0: begin - rdata <= int_in_3[31:0]; - end - ADDR_IN_3_DATA_1: begin - rdata <= int_in_3[63:32]; - end - ADDR_OUT_3_DATA_0: begin - rdata <= int_out_3[31:0]; - end - ADDR_OUT_3_DATA_1: begin - rdata <= int_out_3[63:32]; - end - ADDR_IN_4_DATA_0: begin - rdata <= int_in_4[31:0]; - end - ADDR_IN_4_DATA_1: begin - rdata <= int_in_4[63:32]; - end - ADDR_OUT_4_DATA_0: begin - rdata <= int_out_4[31:0]; - end - ADDR_OUT_4_DATA_1: begin - rdata <= int_out_4[63:32]; - end - ADDR_IN_5_DATA_0: begin - rdata <= int_in_5[31:0]; - end - ADDR_IN_5_DATA_1: begin - rdata <= int_in_5[63:32]; - end - ADDR_OUT_5_DATA_0: begin - rdata <= int_out_5[31:0]; - end - ADDR_OUT_5_DATA_1: begin - rdata <= int_out_5[63:32]; - end - ADDR_IN_6_DATA_0: begin - rdata <= int_in_6[31:0]; - end - ADDR_IN_6_DATA_1: begin - rdata <= int_in_6[63:32]; - end - ADDR_OUT_6_DATA_0: begin - rdata <= int_out_6[31:0]; - end - ADDR_OUT_6_DATA_1: begin - rdata <= int_out_6[63:32]; - end - ADDR_IN_7_DATA_0: begin - rdata <= int_in_7[31:0]; - end - ADDR_IN_7_DATA_1: begin - rdata <= int_in_7[63:32]; - end - ADDR_OUT_7_DATA_0: begin - rdata <= int_out_7[31:0]; - end - ADDR_OUT_7_DATA_1: begin - rdata <= int_out_7[63:32]; - end - ADDR_IN_8_DATA_0: begin - rdata <= int_in_8[31:0]; - end - ADDR_IN_8_DATA_1: begin - rdata <= int_in_8[63:32]; - end - ADDR_OUT_8_DATA_0: begin - rdata <= int_out_8[31:0]; - end - ADDR_OUT_8_DATA_1: begin - rdata <= int_out_8[63:32]; - end - ADDR_IN_9_DATA_0: begin - rdata <= int_in_9[31:0]; - end - ADDR_IN_9_DATA_1: begin - rdata <= int_in_9[63:32]; - end - ADDR_OUT_9_DATA_0: begin - rdata <= int_out_9[31:0]; - end - ADDR_OUT_9_DATA_1: begin - rdata <= int_out_9[63:32]; - end - ADDR_IN_10_DATA_0: begin - rdata <= int_in_10[31:0]; - end - ADDR_IN_10_DATA_1: begin - rdata <= int_in_10[63:32]; - end - ADDR_OUT_10_DATA_0: begin - rdata <= int_out_10[31:0]; - end - ADDR_OUT_10_DATA_1: begin - rdata <= int_out_10[63:32]; - end - ADDR_IN_11_DATA_0: begin - rdata <= int_in_11[31:0]; - end - ADDR_IN_11_DATA_1: begin - rdata <= int_in_11[63:32]; - end - ADDR_OUT_11_DATA_0: begin - rdata <= int_out_11[31:0]; - end - ADDR_OUT_11_DATA_1: begin - rdata <= int_out_11[63:32]; - end - ADDR_ITERS_DATA_0: begin - rdata <= int_iters[31:0]; - end - endcase - end - end -end - - -//------------------------Register logic----------------- -assign interrupt = int_interrupt; -assign ap_start = int_ap_start; -assign task_ap_done = (ap_done && !auto_restart_status) || auto_restart_done; -assign task_ap_ready = ap_ready && !int_auto_restart; -assign auto_restart_done = auto_restart_status && (ap_idle && !int_ap_idle); -assign in_0 = int_in_0; -assign out_0 = int_out_0; -assign in_1 = int_in_1; -assign out_1 = int_out_1; -assign in_2 = int_in_2; -assign out_2 = int_out_2; -assign in_3 = int_in_3; -assign out_3 = int_out_3; -assign in_4 = int_in_4; -assign out_4 = int_out_4; -assign in_5 = int_in_5; -assign out_5 = int_out_5; -assign in_6 = int_in_6; -assign out_6 = int_out_6; -assign in_7 = int_in_7; -assign out_7 = int_out_7; -assign in_8 = int_in_8; -assign out_8 = int_out_8; -assign in_9 = int_in_9; -assign out_9 = int_out_9; -assign in_10 = int_in_10; -assign out_10 = int_out_10; -assign in_11 = int_in_11; -assign out_11 = int_out_11; -assign iters = int_iters; -// int_interrupt -always @(posedge ACLK) begin - if (ARESET) - int_interrupt <= 1'b0; - else if (ACLK_EN) begin - if (int_gie && (|int_isr)) - int_interrupt <= 1'b1; - else - int_interrupt <= 1'b0; - end -end - -// int_ap_start -always @(posedge ACLK) begin - if (ARESET) - int_ap_start <= 1'b0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_AP_CTRL && WSTRB[0] && WDATA[0]) - int_ap_start <= 1'b1; - else if (ap_done & int_auto_restart) - int_ap_start <= 1'b1; // auto restart - else - int_ap_start <= 1'b0; // self clear - end -end - -// int_ap_done -always @(posedge ACLK) begin - if (ARESET) - int_ap_done <= 1'b0; - else if (ACLK_EN) begin - int_ap_done <= ap_done; - end -end - -// int_task_ap_done -always @(posedge ACLK) begin - if (ARESET) - int_task_ap_done <= 1'b0; - else if (ACLK_EN) begin - if (task_ap_done) - int_task_ap_done <= 1'b1; - else if (ar_hs && raddr == ADDR_AP_CTRL) - int_task_ap_done <= 1'b0; // clear on read - end -end - -// int_ap_idle -always @(posedge ACLK) begin - if (ARESET) - int_ap_idle <= 1'b0; - else if (ACLK_EN) begin - int_ap_idle <= ap_idle; - end -end - -// int_ap_ready -always @(posedge ACLK) begin - if (ARESET) - int_ap_ready <= 1'b0; - else if (ACLK_EN) begin - if (task_ap_ready) - int_ap_ready <= 1'b1; - else if (ar_hs && raddr == ADDR_AP_CTRL) - int_ap_ready <= 1'b0; - end -end - -// int_auto_restart -always @(posedge ACLK) begin - if (ARESET) - int_auto_restart <= 1'b0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_AP_CTRL && WSTRB[0]) - int_auto_restart <= WDATA[7]; - end -end - -// auto_restart_status -always @(posedge ACLK) begin - if (ARESET) - auto_restart_status <= 1'b0; - else if (ACLK_EN) begin - if (int_auto_restart) - auto_restart_status <= 1'b1; - else if (ap_idle) - auto_restart_status <= 1'b0; - end -end - -// int_gie -always @(posedge ACLK) begin - if (ARESET) - int_gie <= 1'b0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_GIE && WSTRB[0]) - int_gie <= WDATA[0]; - end -end - -// int_ier -always @(posedge ACLK) begin - if (ARESET) - int_ier <= 1'b0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IER && WSTRB[0]) - int_ier <= WDATA[0]; - end -end - -// int_isr -always @(posedge ACLK) begin - if (ARESET) - int_isr <= 1'b0; - else if (ACLK_EN) begin - if (int_ier & ap_done) - int_isr <= 1'b1; - else if (w_hs && waddr == ADDR_ISR && WSTRB[0]) - int_isr <= int_isr ^ WDATA[0]; // toggle on write - end -end - -// int_in_0[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_in_0[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_0_DATA_0) - int_in_0[31:0] <= (WDATA[31:0] & wmask) | (int_in_0[31:0] & ~wmask); - end -end - -// int_in_0[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_in_0[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_0_DATA_1) - int_in_0[63:32] <= (WDATA[31:0] & wmask) | (int_in_0[63:32] & ~wmask); - end -end - -// int_out_0[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_out_0[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_0_DATA_0) - int_out_0[31:0] <= (WDATA[31:0] & wmask) | (int_out_0[31:0] & ~wmask); - end -end - -// int_out_0[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_out_0[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_0_DATA_1) - int_out_0[63:32] <= (WDATA[31:0] & wmask) | (int_out_0[63:32] & ~wmask); - end -end - -// int_in_1[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_in_1[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_1_DATA_0) - int_in_1[31:0] <= (WDATA[31:0] & wmask) | (int_in_1[31:0] & ~wmask); - end -end - -// int_in_1[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_in_1[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_1_DATA_1) - int_in_1[63:32] <= (WDATA[31:0] & wmask) | (int_in_1[63:32] & ~wmask); - end -end - -// int_out_1[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_out_1[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_1_DATA_0) - int_out_1[31:0] <= (WDATA[31:0] & wmask) | (int_out_1[31:0] & ~wmask); - end -end - -// int_out_1[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_out_1[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_1_DATA_1) - int_out_1[63:32] <= (WDATA[31:0] & wmask) | (int_out_1[63:32] & ~wmask); - end -end - -// int_in_2[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_in_2[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_2_DATA_0) - int_in_2[31:0] <= (WDATA[31:0] & wmask) | (int_in_2[31:0] & ~wmask); - end -end - -// int_in_2[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_in_2[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_2_DATA_1) - int_in_2[63:32] <= (WDATA[31:0] & wmask) | (int_in_2[63:32] & ~wmask); - end -end - -// int_out_2[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_out_2[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_2_DATA_0) - int_out_2[31:0] <= (WDATA[31:0] & wmask) | (int_out_2[31:0] & ~wmask); - end -end - -// int_out_2[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_out_2[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_2_DATA_1) - int_out_2[63:32] <= (WDATA[31:0] & wmask) | (int_out_2[63:32] & ~wmask); - end -end - -// int_in_3[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_in_3[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_3_DATA_0) - int_in_3[31:0] <= (WDATA[31:0] & wmask) | (int_in_3[31:0] & ~wmask); - end -end - -// int_in_3[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_in_3[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_3_DATA_1) - int_in_3[63:32] <= (WDATA[31:0] & wmask) | (int_in_3[63:32] & ~wmask); - end -end - -// int_out_3[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_out_3[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_3_DATA_0) - int_out_3[31:0] <= (WDATA[31:0] & wmask) | (int_out_3[31:0] & ~wmask); - end -end - -// int_out_3[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_out_3[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_3_DATA_1) - int_out_3[63:32] <= (WDATA[31:0] & wmask) | (int_out_3[63:32] & ~wmask); - end -end - -// int_in_4[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_in_4[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_4_DATA_0) - int_in_4[31:0] <= (WDATA[31:0] & wmask) | (int_in_4[31:0] & ~wmask); - end -end - -// int_in_4[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_in_4[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_4_DATA_1) - int_in_4[63:32] <= (WDATA[31:0] & wmask) | (int_in_4[63:32] & ~wmask); - end -end - -// int_out_4[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_out_4[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_4_DATA_0) - int_out_4[31:0] <= (WDATA[31:0] & wmask) | (int_out_4[31:0] & ~wmask); - end -end - -// int_out_4[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_out_4[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_4_DATA_1) - int_out_4[63:32] <= (WDATA[31:0] & wmask) | (int_out_4[63:32] & ~wmask); - end -end - -// int_in_5[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_in_5[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_5_DATA_0) - int_in_5[31:0] <= (WDATA[31:0] & wmask) | (int_in_5[31:0] & ~wmask); - end -end - -// int_in_5[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_in_5[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_5_DATA_1) - int_in_5[63:32] <= (WDATA[31:0] & wmask) | (int_in_5[63:32] & ~wmask); - end -end - -// int_out_5[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_out_5[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_5_DATA_0) - int_out_5[31:0] <= (WDATA[31:0] & wmask) | (int_out_5[31:0] & ~wmask); - end -end - -// int_out_5[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_out_5[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_5_DATA_1) - int_out_5[63:32] <= (WDATA[31:0] & wmask) | (int_out_5[63:32] & ~wmask); - end -end - -// int_in_6[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_in_6[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_6_DATA_0) - int_in_6[31:0] <= (WDATA[31:0] & wmask) | (int_in_6[31:0] & ~wmask); - end -end - -// int_in_6[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_in_6[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_6_DATA_1) - int_in_6[63:32] <= (WDATA[31:0] & wmask) | (int_in_6[63:32] & ~wmask); - end -end - -// int_out_6[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_out_6[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_6_DATA_0) - int_out_6[31:0] <= (WDATA[31:0] & wmask) | (int_out_6[31:0] & ~wmask); - end -end - -// int_out_6[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_out_6[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_6_DATA_1) - int_out_6[63:32] <= (WDATA[31:0] & wmask) | (int_out_6[63:32] & ~wmask); - end -end - -// int_in_7[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_in_7[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_7_DATA_0) - int_in_7[31:0] <= (WDATA[31:0] & wmask) | (int_in_7[31:0] & ~wmask); - end -end - -// int_in_7[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_in_7[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_7_DATA_1) - int_in_7[63:32] <= (WDATA[31:0] & wmask) | (int_in_7[63:32] & ~wmask); - end -end - -// int_out_7[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_out_7[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_7_DATA_0) - int_out_7[31:0] <= (WDATA[31:0] & wmask) | (int_out_7[31:0] & ~wmask); - end -end - -// int_out_7[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_out_7[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_7_DATA_1) - int_out_7[63:32] <= (WDATA[31:0] & wmask) | (int_out_7[63:32] & ~wmask); - end -end - -// int_in_8[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_in_8[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_8_DATA_0) - int_in_8[31:0] <= (WDATA[31:0] & wmask) | (int_in_8[31:0] & ~wmask); - end -end - -// int_in_8[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_in_8[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_8_DATA_1) - int_in_8[63:32] <= (WDATA[31:0] & wmask) | (int_in_8[63:32] & ~wmask); - end -end - -// int_out_8[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_out_8[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_8_DATA_0) - int_out_8[31:0] <= (WDATA[31:0] & wmask) | (int_out_8[31:0] & ~wmask); - end -end - -// int_out_8[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_out_8[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_8_DATA_1) - int_out_8[63:32] <= (WDATA[31:0] & wmask) | (int_out_8[63:32] & ~wmask); - end -end - -// int_in_9[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_in_9[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_9_DATA_0) - int_in_9[31:0] <= (WDATA[31:0] & wmask) | (int_in_9[31:0] & ~wmask); - end -end - -// int_in_9[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_in_9[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_9_DATA_1) - int_in_9[63:32] <= (WDATA[31:0] & wmask) | (int_in_9[63:32] & ~wmask); - end -end - -// int_out_9[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_out_9[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_9_DATA_0) - int_out_9[31:0] <= (WDATA[31:0] & wmask) | (int_out_9[31:0] & ~wmask); - end -end - -// int_out_9[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_out_9[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_9_DATA_1) - int_out_9[63:32] <= (WDATA[31:0] & wmask) | (int_out_9[63:32] & ~wmask); - end -end - -// int_in_10[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_in_10[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_10_DATA_0) - int_in_10[31:0] <= (WDATA[31:0] & wmask) | (int_in_10[31:0] & ~wmask); - end -end - -// int_in_10[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_in_10[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_10_DATA_1) - int_in_10[63:32] <= (WDATA[31:0] & wmask) | (int_in_10[63:32] & ~wmask); - end -end - -// int_out_10[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_out_10[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_10_DATA_0) - int_out_10[31:0] <= (WDATA[31:0] & wmask) | (int_out_10[31:0] & ~wmask); - end -end - -// int_out_10[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_out_10[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_10_DATA_1) - int_out_10[63:32] <= (WDATA[31:0] & wmask) | (int_out_10[63:32] & ~wmask); - end -end - -// int_in_11[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_in_11[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_11_DATA_0) - int_in_11[31:0] <= (WDATA[31:0] & wmask) | (int_in_11[31:0] & ~wmask); - end -end - -// int_in_11[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_in_11[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_IN_11_DATA_1) - int_in_11[63:32] <= (WDATA[31:0] & wmask) | (int_in_11[63:32] & ~wmask); - end -end - -// int_out_11[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_out_11[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_11_DATA_0) - int_out_11[31:0] <= (WDATA[31:0] & wmask) | (int_out_11[31:0] & ~wmask); - end -end - -// int_out_11[63:32] -always @(posedge ACLK) begin - if (ARESET) - int_out_11[63:32] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_OUT_11_DATA_1) - int_out_11[63:32] <= (WDATA[31:0] & wmask) | (int_out_11[63:32] & ~wmask); - end -end - -// int_iters[31:0] -always @(posedge ACLK) begin - if (ARESET) - int_iters[31:0] <= 0; - else if (ACLK_EN) begin - if (w_hs && waddr == ADDR_ITERS_DATA_0) - int_iters[31:0] <= (WDATA[31:0] & wmask) | (int_iters[31:0] & ~wmask); - end -end - -//synthesis translate_off -always @(posedge ACLK) begin - if (ACLK_EN) begin - if (int_gie & ~int_isr & int_ier & ap_done) - $display ("// Interrupt Monitor : interrupt for ap_done detected @ \"%0t\"", $time); - end -end -//synthesis translate_on - -//------------------------Memory logic------------------- - -endmodule diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/unikernel_fsm.v b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/unikernel_fsm.v deleted file mode 100644 index ed2e35ef..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/hdl/unikernel_fsm.v +++ /dev/null @@ -1,1308 +0,0 @@ - - -module unikernel_fsm -( - ap_clk, - ap_rst_n, - ap_start, - ap_ready, - ap_done, - ap_idle, - HEAT3D_0__ap_start, - HEAT3D_0__ap_ready, - HEAT3D_0__ap_done, - HEAT3D_0__ap_idle, - HEAT3D_1__ap_start, - HEAT3D_1__ap_ready, - HEAT3D_1__ap_done, - HEAT3D_1__ap_idle, - HEAT3D_2__ap_start, - HEAT3D_2__ap_ready, - HEAT3D_2__ap_done, - HEAT3D_2__ap_idle, - HEAT3D_3__ap_start, - HEAT3D_3__ap_ready, - HEAT3D_3__ap_done, - HEAT3D_3__ap_idle, - HEAT3D_4__ap_start, - HEAT3D_4__ap_ready, - HEAT3D_4__ap_done, - HEAT3D_4__ap_idle, - HEAT3D_5__ap_start, - HEAT3D_5__ap_ready, - HEAT3D_5__ap_done, - HEAT3D_5__ap_idle, - HEAT3D_6__ap_start, - HEAT3D_6__ap_ready, - HEAT3D_6__ap_done, - HEAT3D_6__ap_idle, - HEAT3D_7__ap_start, - HEAT3D_7__ap_ready, - HEAT3D_7__ap_done, - HEAT3D_7__ap_idle, - HEAT3D_8__ap_start, - HEAT3D_8__ap_ready, - HEAT3D_8__ap_done, - HEAT3D_8__ap_idle, - HEAT3D_9__ap_start, - HEAT3D_9__ap_ready, - HEAT3D_9__ap_done, - HEAT3D_9__ap_idle, - HEAT3D_10__ap_start, - HEAT3D_10__ap_ready, - HEAT3D_10__ap_done, - HEAT3D_10__ap_idle, - HEAT3D_11__ap_start, - HEAT3D_11__ap_ready, - HEAT3D_11__ap_done, - HEAT3D_11__ap_idle, - inter_kernel_0__ap_start, - inter_kernel_0__ap_ready, - inter_kernel_0__ap_done, - inter_kernel_0__ap_idle, - inter_kernel_1__ap_start, - inter_kernel_1__ap_ready, - inter_kernel_1__ap_done, - inter_kernel_1__ap_idle, - inter_kernel_2__ap_start, - inter_kernel_2__ap_ready, - inter_kernel_2__ap_done, - inter_kernel_2__ap_idle, - inter_kernel_3__ap_start, - inter_kernel_3__ap_ready, - inter_kernel_3__ap_done, - inter_kernel_3__ap_idle, - inter_kernel_4__ap_start, - inter_kernel_4__ap_ready, - inter_kernel_4__ap_done, - inter_kernel_4__ap_idle, - inter_kernel_5__ap_start, - inter_kernel_5__ap_ready, - inter_kernel_5__ap_done, - inter_kernel_5__ap_idle, - inter_kernel_6__ap_start, - inter_kernel_6__ap_ready, - inter_kernel_6__ap_done, - inter_kernel_6__ap_idle, - inter_kernel_7__ap_start, - inter_kernel_7__ap_ready, - inter_kernel_7__ap_done, - inter_kernel_7__ap_idle, - inter_kernel_8__ap_start, - inter_kernel_8__ap_ready, - inter_kernel_8__ap_done, - inter_kernel_8__ap_idle, - inter_kernel_9__ap_start, - inter_kernel_9__ap_ready, - inter_kernel_9__ap_done, - inter_kernel_9__ap_idle, - inter_kernel_10__ap_start, - inter_kernel_10__ap_ready, - inter_kernel_10__ap_done, - inter_kernel_10__ap_idle, - inter_kernel_11__ap_start, - inter_kernel_11__ap_ready, - inter_kernel_11__ap_done, - inter_kernel_11__ap_idle -); - - (* RS_CLK *)input ap_clk; - (* RS_RST = "ff" *)input ap_rst_n; - (* RS_AP_CTRL = "unikernel.ap_start" *)input ap_start; - (* RS_AP_CTRL = "unikernel.ap_ready" *)output ap_ready; - (* RS_FF = "unikernel__ap_done" *)output ap_done; - (* RS_FF = "unikernel__ap_idle" *)output ap_idle; - (* RS_AP_CTRL = "HEAT3D_0.ap_start" *)output HEAT3D_0__ap_start; - (* RS_AP_CTRL = "HEAT3D_0.ap_ready" *)input HEAT3D_0__ap_ready; - (* RS_FF = "HEAT3D_0__ap_done" *)input HEAT3D_0__ap_done; - (* RS_FF = "HEAT3D_0__ap_idle" *)input HEAT3D_0__ap_idle; - (* RS_AP_CTRL = "HEAT3D_1.ap_start" *)output HEAT3D_1__ap_start; - (* RS_AP_CTRL = "HEAT3D_1.ap_ready" *)input HEAT3D_1__ap_ready; - (* RS_FF = "HEAT3D_1__ap_done" *)input HEAT3D_1__ap_done; - (* RS_FF = "HEAT3D_1__ap_idle" *)input HEAT3D_1__ap_idle; - (* RS_AP_CTRL = "HEAT3D_2.ap_start" *)output HEAT3D_2__ap_start; - (* RS_AP_CTRL = "HEAT3D_2.ap_ready" *)input HEAT3D_2__ap_ready; - (* RS_FF = "HEAT3D_2__ap_done" *)input HEAT3D_2__ap_done; - (* RS_FF = "HEAT3D_2__ap_idle" *)input HEAT3D_2__ap_idle; - (* RS_AP_CTRL = "HEAT3D_3.ap_start" *)output HEAT3D_3__ap_start; - (* RS_AP_CTRL = "HEAT3D_3.ap_ready" *)input HEAT3D_3__ap_ready; - (* RS_FF = "HEAT3D_3__ap_done" *)input HEAT3D_3__ap_done; - (* RS_FF = "HEAT3D_3__ap_idle" *)input HEAT3D_3__ap_idle; - (* RS_AP_CTRL = "HEAT3D_4.ap_start" *)output HEAT3D_4__ap_start; - (* RS_AP_CTRL = "HEAT3D_4.ap_ready" *)input HEAT3D_4__ap_ready; - (* RS_FF = "HEAT3D_4__ap_done" *)input HEAT3D_4__ap_done; - (* RS_FF = "HEAT3D_4__ap_idle" *)input HEAT3D_4__ap_idle; - (* RS_AP_CTRL = "HEAT3D_5.ap_start" *)output HEAT3D_5__ap_start; - (* RS_AP_CTRL = "HEAT3D_5.ap_ready" *)input HEAT3D_5__ap_ready; - (* RS_FF = "HEAT3D_5__ap_done" *)input HEAT3D_5__ap_done; - (* RS_FF = "HEAT3D_5__ap_idle" *)input HEAT3D_5__ap_idle; - (* RS_AP_CTRL = "HEAT3D_6.ap_start" *)output HEAT3D_6__ap_start; - (* RS_AP_CTRL = "HEAT3D_6.ap_ready" *)input HEAT3D_6__ap_ready; - (* RS_FF = "HEAT3D_6__ap_done" *)input HEAT3D_6__ap_done; - (* RS_FF = "HEAT3D_6__ap_idle" *)input HEAT3D_6__ap_idle; - (* RS_AP_CTRL = "HEAT3D_7.ap_start" *)output HEAT3D_7__ap_start; - (* RS_AP_CTRL = "HEAT3D_7.ap_ready" *)input HEAT3D_7__ap_ready; - (* RS_FF = "HEAT3D_7__ap_done" *)input HEAT3D_7__ap_done; - (* RS_FF = "HEAT3D_7__ap_idle" *)input HEAT3D_7__ap_idle; - (* RS_AP_CTRL = "HEAT3D_8.ap_start" *)output HEAT3D_8__ap_start; - (* RS_AP_CTRL = "HEAT3D_8.ap_ready" *)input HEAT3D_8__ap_ready; - (* RS_FF = "HEAT3D_8__ap_done" *)input HEAT3D_8__ap_done; - (* RS_FF = "HEAT3D_8__ap_idle" *)input HEAT3D_8__ap_idle; - (* RS_AP_CTRL = "HEAT3D_9.ap_start" *)output HEAT3D_9__ap_start; - (* RS_AP_CTRL = "HEAT3D_9.ap_ready" *)input HEAT3D_9__ap_ready; - (* RS_FF = "HEAT3D_9__ap_done" *)input HEAT3D_9__ap_done; - (* RS_FF = "HEAT3D_9__ap_idle" *)input HEAT3D_9__ap_idle; - (* RS_AP_CTRL = "HEAT3D_10.ap_start" *)output HEAT3D_10__ap_start; - (* RS_AP_CTRL = "HEAT3D_10.ap_ready" *)input HEAT3D_10__ap_ready; - (* RS_FF = "HEAT3D_10__ap_done" *)input HEAT3D_10__ap_done; - (* RS_FF = "HEAT3D_10__ap_idle" *)input HEAT3D_10__ap_idle; - (* RS_AP_CTRL = "HEAT3D_11.ap_start" *)output HEAT3D_11__ap_start; - (* RS_AP_CTRL = "HEAT3D_11.ap_ready" *)input HEAT3D_11__ap_ready; - (* RS_FF = "HEAT3D_11__ap_done" *)input HEAT3D_11__ap_done; - (* RS_FF = "HEAT3D_11__ap_idle" *)input HEAT3D_11__ap_idle; - (* RS_AP_CTRL = "inter_kernel_0.ap_start" *)output inter_kernel_0__ap_start; - (* RS_AP_CTRL = "inter_kernel_0.ap_ready" *)input inter_kernel_0__ap_ready; - (* RS_FF = "inter_kernel_0__ap_done" *)input inter_kernel_0__ap_done; - (* RS_FF = "inter_kernel_0__ap_idle" *)input inter_kernel_0__ap_idle; - (* RS_AP_CTRL = "inter_kernel_1.ap_start" *)output inter_kernel_1__ap_start; - (* RS_AP_CTRL = "inter_kernel_1.ap_ready" *)input inter_kernel_1__ap_ready; - (* RS_FF = "inter_kernel_1__ap_done" *)input inter_kernel_1__ap_done; - (* RS_FF = "inter_kernel_1__ap_idle" *)input inter_kernel_1__ap_idle; - (* RS_AP_CTRL = "inter_kernel_2.ap_start" *)output inter_kernel_2__ap_start; - (* RS_AP_CTRL = "inter_kernel_2.ap_ready" *)input inter_kernel_2__ap_ready; - (* RS_FF = "inter_kernel_2__ap_done" *)input inter_kernel_2__ap_done; - (* RS_FF = "inter_kernel_2__ap_idle" *)input inter_kernel_2__ap_idle; - (* RS_AP_CTRL = "inter_kernel_3.ap_start" *)output inter_kernel_3__ap_start; - (* RS_AP_CTRL = "inter_kernel_3.ap_ready" *)input inter_kernel_3__ap_ready; - (* RS_FF = "inter_kernel_3__ap_done" *)input inter_kernel_3__ap_done; - (* RS_FF = "inter_kernel_3__ap_idle" *)input inter_kernel_3__ap_idle; - (* RS_AP_CTRL = "inter_kernel_4.ap_start" *)output inter_kernel_4__ap_start; - (* RS_AP_CTRL = "inter_kernel_4.ap_ready" *)input inter_kernel_4__ap_ready; - (* RS_FF = "inter_kernel_4__ap_done" *)input inter_kernel_4__ap_done; - (* RS_FF = "inter_kernel_4__ap_idle" *)input inter_kernel_4__ap_idle; - (* RS_AP_CTRL = "inter_kernel_5.ap_start" *)output inter_kernel_5__ap_start; - (* RS_AP_CTRL = "inter_kernel_5.ap_ready" *)input inter_kernel_5__ap_ready; - (* RS_FF = "inter_kernel_5__ap_done" *)input inter_kernel_5__ap_done; - (* RS_FF = "inter_kernel_5__ap_idle" *)input inter_kernel_5__ap_idle; - (* RS_AP_CTRL = "inter_kernel_6.ap_start" *)output inter_kernel_6__ap_start; - (* RS_AP_CTRL = "inter_kernel_6.ap_ready" *)input inter_kernel_6__ap_ready; - (* RS_FF = "inter_kernel_6__ap_done" *)input inter_kernel_6__ap_done; - (* RS_FF = "inter_kernel_6__ap_idle" *)input inter_kernel_6__ap_idle; - (* RS_AP_CTRL = "inter_kernel_7.ap_start" *)output inter_kernel_7__ap_start; - (* RS_AP_CTRL = "inter_kernel_7.ap_ready" *)input inter_kernel_7__ap_ready; - (* RS_FF = "inter_kernel_7__ap_done" *)input inter_kernel_7__ap_done; - (* RS_FF = "inter_kernel_7__ap_idle" *)input inter_kernel_7__ap_idle; - (* RS_AP_CTRL = "inter_kernel_8.ap_start" *)output inter_kernel_8__ap_start; - (* RS_AP_CTRL = "inter_kernel_8.ap_ready" *)input inter_kernel_8__ap_ready; - (* RS_FF = "inter_kernel_8__ap_done" *)input inter_kernel_8__ap_done; - (* RS_FF = "inter_kernel_8__ap_idle" *)input inter_kernel_8__ap_idle; - (* RS_AP_CTRL = "inter_kernel_9.ap_start" *)output inter_kernel_9__ap_start; - (* RS_AP_CTRL = "inter_kernel_9.ap_ready" *)input inter_kernel_9__ap_ready; - (* RS_FF = "inter_kernel_9__ap_done" *)input inter_kernel_9__ap_done; - (* RS_FF = "inter_kernel_9__ap_idle" *)input inter_kernel_9__ap_idle; - (* RS_AP_CTRL = "inter_kernel_10.ap_start" *)output inter_kernel_10__ap_start; - (* RS_AP_CTRL = "inter_kernel_10.ap_ready" *)input inter_kernel_10__ap_ready; - (* RS_FF = "inter_kernel_10__ap_done" *)input inter_kernel_10__ap_done; - (* RS_FF = "inter_kernel_10__ap_idle" *)input inter_kernel_10__ap_idle; - (* RS_AP_CTRL = "inter_kernel_11.ap_start" *)output inter_kernel_11__ap_start; - (* RS_AP_CTRL = "inter_kernel_11.ap_ready" *)input inter_kernel_11__ap_ready; - (* RS_FF = "inter_kernel_11__ap_done" *)input inter_kernel_11__ap_done; - (* RS_FF = "inter_kernel_11__ap_idle" *)input inter_kernel_11__ap_idle; - wire HEAT3D_0__ap_start_global__q0; - wire HEAT3D_0__is_done__q0; - wire HEAT3D_0__ap_done_global__q0; - wire HEAT3D_0__ap_start; - wire HEAT3D_0__ap_ready; - wire HEAT3D_0__ap_done; - wire HEAT3D_0__ap_idle; - reg [1:0] HEAT3D_0__state; - wire HEAT3D_1__ap_start_global__q0; - wire HEAT3D_1__is_done__q0; - wire HEAT3D_1__ap_done_global__q0; - wire HEAT3D_1__ap_start; - wire HEAT3D_1__ap_ready; - wire HEAT3D_1__ap_done; - wire HEAT3D_1__ap_idle; - reg [1:0] HEAT3D_1__state; - wire HEAT3D_2__ap_start_global__q0; - wire HEAT3D_2__is_done__q0; - wire HEAT3D_2__ap_done_global__q0; - wire HEAT3D_2__ap_start; - wire HEAT3D_2__ap_ready; - wire HEAT3D_2__ap_done; - wire HEAT3D_2__ap_idle; - reg [1:0] HEAT3D_2__state; - wire HEAT3D_3__ap_start_global__q0; - wire HEAT3D_3__is_done__q0; - wire HEAT3D_3__ap_done_global__q0; - wire HEAT3D_3__ap_start; - wire HEAT3D_3__ap_ready; - wire HEAT3D_3__ap_done; - wire HEAT3D_3__ap_idle; - reg [1:0] HEAT3D_3__state; - wire HEAT3D_4__ap_start_global__q0; - wire HEAT3D_4__is_done__q0; - wire HEAT3D_4__ap_done_global__q0; - wire HEAT3D_4__ap_start; - wire HEAT3D_4__ap_ready; - wire HEAT3D_4__ap_done; - wire HEAT3D_4__ap_idle; - reg [1:0] HEAT3D_4__state; - wire HEAT3D_5__ap_start_global__q0; - wire HEAT3D_5__is_done__q0; - wire HEAT3D_5__ap_done_global__q0; - wire HEAT3D_5__ap_start; - wire HEAT3D_5__ap_ready; - wire HEAT3D_5__ap_done; - wire HEAT3D_5__ap_idle; - reg [1:0] HEAT3D_5__state; - wire HEAT3D_6__ap_start_global__q0; - wire HEAT3D_6__is_done__q0; - wire HEAT3D_6__ap_done_global__q0; - wire HEAT3D_6__ap_start; - wire HEAT3D_6__ap_ready; - wire HEAT3D_6__ap_done; - wire HEAT3D_6__ap_idle; - reg [1:0] HEAT3D_6__state; - wire HEAT3D_7__ap_start_global__q0; - wire HEAT3D_7__is_done__q0; - wire HEAT3D_7__ap_done_global__q0; - wire HEAT3D_7__ap_start; - wire HEAT3D_7__ap_ready; - wire HEAT3D_7__ap_done; - wire HEAT3D_7__ap_idle; - reg [1:0] HEAT3D_7__state; - wire HEAT3D_8__ap_start_global__q0; - wire HEAT3D_8__is_done__q0; - wire HEAT3D_8__ap_done_global__q0; - wire HEAT3D_8__ap_start; - wire HEAT3D_8__ap_ready; - wire HEAT3D_8__ap_done; - wire HEAT3D_8__ap_idle; - reg [1:0] HEAT3D_8__state; - wire HEAT3D_9__ap_start_global__q0; - wire HEAT3D_9__is_done__q0; - wire HEAT3D_9__ap_done_global__q0; - wire HEAT3D_9__ap_start; - wire HEAT3D_9__ap_ready; - wire HEAT3D_9__ap_done; - wire HEAT3D_9__ap_idle; - reg [1:0] HEAT3D_9__state; - wire HEAT3D_10__ap_start_global__q0; - wire HEAT3D_10__is_done__q0; - wire HEAT3D_10__ap_done_global__q0; - wire HEAT3D_10__ap_start; - wire HEAT3D_10__ap_ready; - wire HEAT3D_10__ap_done; - wire HEAT3D_10__ap_idle; - reg [1:0] HEAT3D_10__state; - wire HEAT3D_11__ap_start_global__q0; - wire HEAT3D_11__is_done__q0; - wire HEAT3D_11__ap_done_global__q0; - wire HEAT3D_11__ap_start; - wire HEAT3D_11__ap_ready; - wire HEAT3D_11__ap_done; - wire HEAT3D_11__ap_idle; - reg [1:0] HEAT3D_11__state; - wire inter_kernel_0__ap_start_global__q0; - wire inter_kernel_0__is_done__q0; - wire inter_kernel_0__ap_done_global__q0; - wire inter_kernel_0__ap_start; - wire inter_kernel_0__ap_ready; - wire inter_kernel_0__ap_done; - wire inter_kernel_0__ap_idle; - reg [1:0] inter_kernel_0__state; - wire inter_kernel_1__ap_start_global__q0; - wire inter_kernel_1__is_done__q0; - wire inter_kernel_1__ap_done_global__q0; - wire inter_kernel_1__ap_start; - wire inter_kernel_1__ap_ready; - wire inter_kernel_1__ap_done; - wire inter_kernel_1__ap_idle; - reg [1:0] inter_kernel_1__state; - wire inter_kernel_2__ap_start_global__q0; - wire inter_kernel_2__is_done__q0; - wire inter_kernel_2__ap_done_global__q0; - wire inter_kernel_2__ap_start; - wire inter_kernel_2__ap_ready; - wire inter_kernel_2__ap_done; - wire inter_kernel_2__ap_idle; - reg [1:0] inter_kernel_2__state; - wire inter_kernel_3__ap_start_global__q0; - wire inter_kernel_3__is_done__q0; - wire inter_kernel_3__ap_done_global__q0; - wire inter_kernel_3__ap_start; - wire inter_kernel_3__ap_ready; - wire inter_kernel_3__ap_done; - wire inter_kernel_3__ap_idle; - reg [1:0] inter_kernel_3__state; - wire inter_kernel_4__ap_start_global__q0; - wire inter_kernel_4__is_done__q0; - wire inter_kernel_4__ap_done_global__q0; - wire inter_kernel_4__ap_start; - wire inter_kernel_4__ap_ready; - wire inter_kernel_4__ap_done; - wire inter_kernel_4__ap_idle; - reg [1:0] inter_kernel_4__state; - wire inter_kernel_5__ap_start_global__q0; - wire inter_kernel_5__is_done__q0; - wire inter_kernel_5__ap_done_global__q0; - wire inter_kernel_5__ap_start; - wire inter_kernel_5__ap_ready; - wire inter_kernel_5__ap_done; - wire inter_kernel_5__ap_idle; - reg [1:0] inter_kernel_5__state; - wire inter_kernel_6__ap_start_global__q0; - wire inter_kernel_6__is_done__q0; - wire inter_kernel_6__ap_done_global__q0; - wire inter_kernel_6__ap_start; - wire inter_kernel_6__ap_ready; - wire inter_kernel_6__ap_done; - wire inter_kernel_6__ap_idle; - reg [1:0] inter_kernel_6__state; - wire inter_kernel_7__ap_start_global__q0; - wire inter_kernel_7__is_done__q0; - wire inter_kernel_7__ap_done_global__q0; - wire inter_kernel_7__ap_start; - wire inter_kernel_7__ap_ready; - wire inter_kernel_7__ap_done; - wire inter_kernel_7__ap_idle; - reg [1:0] inter_kernel_7__state; - wire inter_kernel_8__ap_start_global__q0; - wire inter_kernel_8__is_done__q0; - wire inter_kernel_8__ap_done_global__q0; - wire inter_kernel_8__ap_start; - wire inter_kernel_8__ap_ready; - wire inter_kernel_8__ap_done; - wire inter_kernel_8__ap_idle; - reg [1:0] inter_kernel_8__state; - wire inter_kernel_9__ap_start_global__q0; - wire inter_kernel_9__is_done__q0; - wire inter_kernel_9__ap_done_global__q0; - wire inter_kernel_9__ap_start; - wire inter_kernel_9__ap_ready; - wire inter_kernel_9__ap_done; - wire inter_kernel_9__ap_idle; - reg [1:0] inter_kernel_9__state; - wire inter_kernel_10__ap_start_global__q0; - wire inter_kernel_10__is_done__q0; - wire inter_kernel_10__ap_done_global__q0; - wire inter_kernel_10__ap_start; - wire inter_kernel_10__ap_ready; - wire inter_kernel_10__ap_done; - wire inter_kernel_10__ap_idle; - reg [1:0] inter_kernel_10__state; - wire inter_kernel_11__ap_start_global__q0; - wire inter_kernel_11__is_done__q0; - wire inter_kernel_11__ap_done_global__q0; - wire inter_kernel_11__ap_start; - wire inter_kernel_11__ap_ready; - wire inter_kernel_11__ap_done; - wire inter_kernel_11__ap_idle; - reg [1:0] inter_kernel_11__state; - reg [1:0] tapa_state; - reg [0:0] countdown; - wire ap_start__q0; - wire ap_done__q0; - assign HEAT3D_0__ap_start_global__q0 = ap_start__q0; - assign HEAT3D_0__is_done__q0 = (HEAT3D_0__state == 2'b10); - assign HEAT3D_0__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - HEAT3D_0__state <= 2'b00; - end else begin - if(HEAT3D_0__state == 2'b00) begin - if(HEAT3D_0__ap_start_global__q0) begin - HEAT3D_0__state <= 2'b01; - end - end - if(HEAT3D_0__state == 2'b01) begin - if(HEAT3D_0__ap_ready) begin - if(HEAT3D_0__ap_done) begin - HEAT3D_0__state <= 2'b10; - end else begin - HEAT3D_0__state <= 2'b11; - end - end - end - if(HEAT3D_0__state == 2'b11) begin - if(HEAT3D_0__ap_done) begin - HEAT3D_0__state <= 2'b10; - end - end - if(HEAT3D_0__state == 2'b10) begin - if(HEAT3D_0__ap_done_global__q0) begin - HEAT3D_0__state <= 2'b00; - end - end - end - end - - assign HEAT3D_0__ap_start = (HEAT3D_0__state == 2'b01); - assign HEAT3D_1__ap_start_global__q0 = ap_start__q0; - assign HEAT3D_1__is_done__q0 = (HEAT3D_1__state == 2'b10); - assign HEAT3D_1__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - HEAT3D_1__state <= 2'b00; - end else begin - if(HEAT3D_1__state == 2'b00) begin - if(HEAT3D_1__ap_start_global__q0) begin - HEAT3D_1__state <= 2'b01; - end - end - if(HEAT3D_1__state == 2'b01) begin - if(HEAT3D_1__ap_ready) begin - if(HEAT3D_1__ap_done) begin - HEAT3D_1__state <= 2'b10; - end else begin - HEAT3D_1__state <= 2'b11; - end - end - end - if(HEAT3D_1__state == 2'b11) begin - if(HEAT3D_1__ap_done) begin - HEAT3D_1__state <= 2'b10; - end - end - if(HEAT3D_1__state == 2'b10) begin - if(HEAT3D_1__ap_done_global__q0) begin - HEAT3D_1__state <= 2'b00; - end - end - end - end - - assign HEAT3D_1__ap_start = (HEAT3D_1__state == 2'b01); - assign HEAT3D_2__ap_start_global__q0 = ap_start__q0; - assign HEAT3D_2__is_done__q0 = (HEAT3D_2__state == 2'b10); - assign HEAT3D_2__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - HEAT3D_2__state <= 2'b00; - end else begin - if(HEAT3D_2__state == 2'b00) begin - if(HEAT3D_2__ap_start_global__q0) begin - HEAT3D_2__state <= 2'b01; - end - end - if(HEAT3D_2__state == 2'b01) begin - if(HEAT3D_2__ap_ready) begin - if(HEAT3D_2__ap_done) begin - HEAT3D_2__state <= 2'b10; - end else begin - HEAT3D_2__state <= 2'b11; - end - end - end - if(HEAT3D_2__state == 2'b11) begin - if(HEAT3D_2__ap_done) begin - HEAT3D_2__state <= 2'b10; - end - end - if(HEAT3D_2__state == 2'b10) begin - if(HEAT3D_2__ap_done_global__q0) begin - HEAT3D_2__state <= 2'b00; - end - end - end - end - - assign HEAT3D_2__ap_start = (HEAT3D_2__state == 2'b01); - assign HEAT3D_3__ap_start_global__q0 = ap_start__q0; - assign HEAT3D_3__is_done__q0 = (HEAT3D_3__state == 2'b10); - assign HEAT3D_3__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - HEAT3D_3__state <= 2'b00; - end else begin - if(HEAT3D_3__state == 2'b00) begin - if(HEAT3D_3__ap_start_global__q0) begin - HEAT3D_3__state <= 2'b01; - end - end - if(HEAT3D_3__state == 2'b01) begin - if(HEAT3D_3__ap_ready) begin - if(HEAT3D_3__ap_done) begin - HEAT3D_3__state <= 2'b10; - end else begin - HEAT3D_3__state <= 2'b11; - end - end - end - if(HEAT3D_3__state == 2'b11) begin - if(HEAT3D_3__ap_done) begin - HEAT3D_3__state <= 2'b10; - end - end - if(HEAT3D_3__state == 2'b10) begin - if(HEAT3D_3__ap_done_global__q0) begin - HEAT3D_3__state <= 2'b00; - end - end - end - end - - assign HEAT3D_3__ap_start = (HEAT3D_3__state == 2'b01); - assign HEAT3D_4__ap_start_global__q0 = ap_start__q0; - assign HEAT3D_4__is_done__q0 = (HEAT3D_4__state == 2'b10); - assign HEAT3D_4__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - HEAT3D_4__state <= 2'b00; - end else begin - if(HEAT3D_4__state == 2'b00) begin - if(HEAT3D_4__ap_start_global__q0) begin - HEAT3D_4__state <= 2'b01; - end - end - if(HEAT3D_4__state == 2'b01) begin - if(HEAT3D_4__ap_ready) begin - if(HEAT3D_4__ap_done) begin - HEAT3D_4__state <= 2'b10; - end else begin - HEAT3D_4__state <= 2'b11; - end - end - end - if(HEAT3D_4__state == 2'b11) begin - if(HEAT3D_4__ap_done) begin - HEAT3D_4__state <= 2'b10; - end - end - if(HEAT3D_4__state == 2'b10) begin - if(HEAT3D_4__ap_done_global__q0) begin - HEAT3D_4__state <= 2'b00; - end - end - end - end - - assign HEAT3D_4__ap_start = (HEAT3D_4__state == 2'b01); - assign HEAT3D_5__ap_start_global__q0 = ap_start__q0; - assign HEAT3D_5__is_done__q0 = (HEAT3D_5__state == 2'b10); - assign HEAT3D_5__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - HEAT3D_5__state <= 2'b00; - end else begin - if(HEAT3D_5__state == 2'b00) begin - if(HEAT3D_5__ap_start_global__q0) begin - HEAT3D_5__state <= 2'b01; - end - end - if(HEAT3D_5__state == 2'b01) begin - if(HEAT3D_5__ap_ready) begin - if(HEAT3D_5__ap_done) begin - HEAT3D_5__state <= 2'b10; - end else begin - HEAT3D_5__state <= 2'b11; - end - end - end - if(HEAT3D_5__state == 2'b11) begin - if(HEAT3D_5__ap_done) begin - HEAT3D_5__state <= 2'b10; - end - end - if(HEAT3D_5__state == 2'b10) begin - if(HEAT3D_5__ap_done_global__q0) begin - HEAT3D_5__state <= 2'b00; - end - end - end - end - - assign HEAT3D_5__ap_start = (HEAT3D_5__state == 2'b01); - assign HEAT3D_6__ap_start_global__q0 = ap_start__q0; - assign HEAT3D_6__is_done__q0 = (HEAT3D_6__state == 2'b10); - assign HEAT3D_6__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - HEAT3D_6__state <= 2'b00; - end else begin - if(HEAT3D_6__state == 2'b00) begin - if(HEAT3D_6__ap_start_global__q0) begin - HEAT3D_6__state <= 2'b01; - end - end - if(HEAT3D_6__state == 2'b01) begin - if(HEAT3D_6__ap_ready) begin - if(HEAT3D_6__ap_done) begin - HEAT3D_6__state <= 2'b10; - end else begin - HEAT3D_6__state <= 2'b11; - end - end - end - if(HEAT3D_6__state == 2'b11) begin - if(HEAT3D_6__ap_done) begin - HEAT3D_6__state <= 2'b10; - end - end - if(HEAT3D_6__state == 2'b10) begin - if(HEAT3D_6__ap_done_global__q0) begin - HEAT3D_6__state <= 2'b00; - end - end - end - end - - assign HEAT3D_6__ap_start = (HEAT3D_6__state == 2'b01); - assign HEAT3D_7__ap_start_global__q0 = ap_start__q0; - assign HEAT3D_7__is_done__q0 = (HEAT3D_7__state == 2'b10); - assign HEAT3D_7__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - HEAT3D_7__state <= 2'b00; - end else begin - if(HEAT3D_7__state == 2'b00) begin - if(HEAT3D_7__ap_start_global__q0) begin - HEAT3D_7__state <= 2'b01; - end - end - if(HEAT3D_7__state == 2'b01) begin - if(HEAT3D_7__ap_ready) begin - if(HEAT3D_7__ap_done) begin - HEAT3D_7__state <= 2'b10; - end else begin - HEAT3D_7__state <= 2'b11; - end - end - end - if(HEAT3D_7__state == 2'b11) begin - if(HEAT3D_7__ap_done) begin - HEAT3D_7__state <= 2'b10; - end - end - if(HEAT3D_7__state == 2'b10) begin - if(HEAT3D_7__ap_done_global__q0) begin - HEAT3D_7__state <= 2'b00; - end - end - end - end - - assign HEAT3D_7__ap_start = (HEAT3D_7__state == 2'b01); - assign HEAT3D_8__ap_start_global__q0 = ap_start__q0; - assign HEAT3D_8__is_done__q0 = (HEAT3D_8__state == 2'b10); - assign HEAT3D_8__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - HEAT3D_8__state <= 2'b00; - end else begin - if(HEAT3D_8__state == 2'b00) begin - if(HEAT3D_8__ap_start_global__q0) begin - HEAT3D_8__state <= 2'b01; - end - end - if(HEAT3D_8__state == 2'b01) begin - if(HEAT3D_8__ap_ready) begin - if(HEAT3D_8__ap_done) begin - HEAT3D_8__state <= 2'b10; - end else begin - HEAT3D_8__state <= 2'b11; - end - end - end - if(HEAT3D_8__state == 2'b11) begin - if(HEAT3D_8__ap_done) begin - HEAT3D_8__state <= 2'b10; - end - end - if(HEAT3D_8__state == 2'b10) begin - if(HEAT3D_8__ap_done_global__q0) begin - HEAT3D_8__state <= 2'b00; - end - end - end - end - - assign HEAT3D_8__ap_start = (HEAT3D_8__state == 2'b01); - assign HEAT3D_9__ap_start_global__q0 = ap_start__q0; - assign HEAT3D_9__is_done__q0 = (HEAT3D_9__state == 2'b10); - assign HEAT3D_9__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - HEAT3D_9__state <= 2'b00; - end else begin - if(HEAT3D_9__state == 2'b00) begin - if(HEAT3D_9__ap_start_global__q0) begin - HEAT3D_9__state <= 2'b01; - end - end - if(HEAT3D_9__state == 2'b01) begin - if(HEAT3D_9__ap_ready) begin - if(HEAT3D_9__ap_done) begin - HEAT3D_9__state <= 2'b10; - end else begin - HEAT3D_9__state <= 2'b11; - end - end - end - if(HEAT3D_9__state == 2'b11) begin - if(HEAT3D_9__ap_done) begin - HEAT3D_9__state <= 2'b10; - end - end - if(HEAT3D_9__state == 2'b10) begin - if(HEAT3D_9__ap_done_global__q0) begin - HEAT3D_9__state <= 2'b00; - end - end - end - end - - assign HEAT3D_9__ap_start = (HEAT3D_9__state == 2'b01); - assign HEAT3D_10__ap_start_global__q0 = ap_start__q0; - assign HEAT3D_10__is_done__q0 = (HEAT3D_10__state == 2'b10); - assign HEAT3D_10__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - HEAT3D_10__state <= 2'b00; - end else begin - if(HEAT3D_10__state == 2'b00) begin - if(HEAT3D_10__ap_start_global__q0) begin - HEAT3D_10__state <= 2'b01; - end - end - if(HEAT3D_10__state == 2'b01) begin - if(HEAT3D_10__ap_ready) begin - if(HEAT3D_10__ap_done) begin - HEAT3D_10__state <= 2'b10; - end else begin - HEAT3D_10__state <= 2'b11; - end - end - end - if(HEAT3D_10__state == 2'b11) begin - if(HEAT3D_10__ap_done) begin - HEAT3D_10__state <= 2'b10; - end - end - if(HEAT3D_10__state == 2'b10) begin - if(HEAT3D_10__ap_done_global__q0) begin - HEAT3D_10__state <= 2'b00; - end - end - end - end - - assign HEAT3D_10__ap_start = (HEAT3D_10__state == 2'b01); - assign HEAT3D_11__ap_start_global__q0 = ap_start__q0; - assign HEAT3D_11__is_done__q0 = (HEAT3D_11__state == 2'b10); - assign HEAT3D_11__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - HEAT3D_11__state <= 2'b00; - end else begin - if(HEAT3D_11__state == 2'b00) begin - if(HEAT3D_11__ap_start_global__q0) begin - HEAT3D_11__state <= 2'b01; - end - end - if(HEAT3D_11__state == 2'b01) begin - if(HEAT3D_11__ap_ready) begin - if(HEAT3D_11__ap_done) begin - HEAT3D_11__state <= 2'b10; - end else begin - HEAT3D_11__state <= 2'b11; - end - end - end - if(HEAT3D_11__state == 2'b11) begin - if(HEAT3D_11__ap_done) begin - HEAT3D_11__state <= 2'b10; - end - end - if(HEAT3D_11__state == 2'b10) begin - if(HEAT3D_11__ap_done_global__q0) begin - HEAT3D_11__state <= 2'b00; - end - end - end - end - - assign HEAT3D_11__ap_start = (HEAT3D_11__state == 2'b01); - assign inter_kernel_0__ap_start_global__q0 = ap_start__q0; - assign inter_kernel_0__is_done__q0 = (inter_kernel_0__state == 2'b10); - assign inter_kernel_0__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - inter_kernel_0__state <= 2'b00; - end else begin - if(inter_kernel_0__state == 2'b00) begin - if(inter_kernel_0__ap_start_global__q0) begin - inter_kernel_0__state <= 2'b01; - end - end - if(inter_kernel_0__state == 2'b01) begin - if(inter_kernel_0__ap_ready) begin - if(inter_kernel_0__ap_done) begin - inter_kernel_0__state <= 2'b10; - end else begin - inter_kernel_0__state <= 2'b11; - end - end - end - if(inter_kernel_0__state == 2'b11) begin - if(inter_kernel_0__ap_done) begin - inter_kernel_0__state <= 2'b10; - end - end - if(inter_kernel_0__state == 2'b10) begin - if(inter_kernel_0__ap_done_global__q0) begin - inter_kernel_0__state <= 2'b00; - end - end - end - end - - assign inter_kernel_0__ap_start = (inter_kernel_0__state == 2'b01); - assign inter_kernel_1__ap_start_global__q0 = ap_start__q0; - assign inter_kernel_1__is_done__q0 = (inter_kernel_1__state == 2'b10); - assign inter_kernel_1__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - inter_kernel_1__state <= 2'b00; - end else begin - if(inter_kernel_1__state == 2'b00) begin - if(inter_kernel_1__ap_start_global__q0) begin - inter_kernel_1__state <= 2'b01; - end - end - if(inter_kernel_1__state == 2'b01) begin - if(inter_kernel_1__ap_ready) begin - if(inter_kernel_1__ap_done) begin - inter_kernel_1__state <= 2'b10; - end else begin - inter_kernel_1__state <= 2'b11; - end - end - end - if(inter_kernel_1__state == 2'b11) begin - if(inter_kernel_1__ap_done) begin - inter_kernel_1__state <= 2'b10; - end - end - if(inter_kernel_1__state == 2'b10) begin - if(inter_kernel_1__ap_done_global__q0) begin - inter_kernel_1__state <= 2'b00; - end - end - end - end - - assign inter_kernel_1__ap_start = (inter_kernel_1__state == 2'b01); - assign inter_kernel_2__ap_start_global__q0 = ap_start__q0; - assign inter_kernel_2__is_done__q0 = (inter_kernel_2__state == 2'b10); - assign inter_kernel_2__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - inter_kernel_2__state <= 2'b00; - end else begin - if(inter_kernel_2__state == 2'b00) begin - if(inter_kernel_2__ap_start_global__q0) begin - inter_kernel_2__state <= 2'b01; - end - end - if(inter_kernel_2__state == 2'b01) begin - if(inter_kernel_2__ap_ready) begin - if(inter_kernel_2__ap_done) begin - inter_kernel_2__state <= 2'b10; - end else begin - inter_kernel_2__state <= 2'b11; - end - end - end - if(inter_kernel_2__state == 2'b11) begin - if(inter_kernel_2__ap_done) begin - inter_kernel_2__state <= 2'b10; - end - end - if(inter_kernel_2__state == 2'b10) begin - if(inter_kernel_2__ap_done_global__q0) begin - inter_kernel_2__state <= 2'b00; - end - end - end - end - - assign inter_kernel_2__ap_start = (inter_kernel_2__state == 2'b01); - assign inter_kernel_3__ap_start_global__q0 = ap_start__q0; - assign inter_kernel_3__is_done__q0 = (inter_kernel_3__state == 2'b10); - assign inter_kernel_3__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - inter_kernel_3__state <= 2'b00; - end else begin - if(inter_kernel_3__state == 2'b00) begin - if(inter_kernel_3__ap_start_global__q0) begin - inter_kernel_3__state <= 2'b01; - end - end - if(inter_kernel_3__state == 2'b01) begin - if(inter_kernel_3__ap_ready) begin - if(inter_kernel_3__ap_done) begin - inter_kernel_3__state <= 2'b10; - end else begin - inter_kernel_3__state <= 2'b11; - end - end - end - if(inter_kernel_3__state == 2'b11) begin - if(inter_kernel_3__ap_done) begin - inter_kernel_3__state <= 2'b10; - end - end - if(inter_kernel_3__state == 2'b10) begin - if(inter_kernel_3__ap_done_global__q0) begin - inter_kernel_3__state <= 2'b00; - end - end - end - end - - assign inter_kernel_3__ap_start = (inter_kernel_3__state == 2'b01); - assign inter_kernel_4__ap_start_global__q0 = ap_start__q0; - assign inter_kernel_4__is_done__q0 = (inter_kernel_4__state == 2'b10); - assign inter_kernel_4__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - inter_kernel_4__state <= 2'b00; - end else begin - if(inter_kernel_4__state == 2'b00) begin - if(inter_kernel_4__ap_start_global__q0) begin - inter_kernel_4__state <= 2'b01; - end - end - if(inter_kernel_4__state == 2'b01) begin - if(inter_kernel_4__ap_ready) begin - if(inter_kernel_4__ap_done) begin - inter_kernel_4__state <= 2'b10; - end else begin - inter_kernel_4__state <= 2'b11; - end - end - end - if(inter_kernel_4__state == 2'b11) begin - if(inter_kernel_4__ap_done) begin - inter_kernel_4__state <= 2'b10; - end - end - if(inter_kernel_4__state == 2'b10) begin - if(inter_kernel_4__ap_done_global__q0) begin - inter_kernel_4__state <= 2'b00; - end - end - end - end - - assign inter_kernel_4__ap_start = (inter_kernel_4__state == 2'b01); - assign inter_kernel_5__ap_start_global__q0 = ap_start__q0; - assign inter_kernel_5__is_done__q0 = (inter_kernel_5__state == 2'b10); - assign inter_kernel_5__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - inter_kernel_5__state <= 2'b00; - end else begin - if(inter_kernel_5__state == 2'b00) begin - if(inter_kernel_5__ap_start_global__q0) begin - inter_kernel_5__state <= 2'b01; - end - end - if(inter_kernel_5__state == 2'b01) begin - if(inter_kernel_5__ap_ready) begin - if(inter_kernel_5__ap_done) begin - inter_kernel_5__state <= 2'b10; - end else begin - inter_kernel_5__state <= 2'b11; - end - end - end - if(inter_kernel_5__state == 2'b11) begin - if(inter_kernel_5__ap_done) begin - inter_kernel_5__state <= 2'b10; - end - end - if(inter_kernel_5__state == 2'b10) begin - if(inter_kernel_5__ap_done_global__q0) begin - inter_kernel_5__state <= 2'b00; - end - end - end - end - - assign inter_kernel_5__ap_start = (inter_kernel_5__state == 2'b01); - assign inter_kernel_6__ap_start_global__q0 = ap_start__q0; - assign inter_kernel_6__is_done__q0 = (inter_kernel_6__state == 2'b10); - assign inter_kernel_6__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - inter_kernel_6__state <= 2'b00; - end else begin - if(inter_kernel_6__state == 2'b00) begin - if(inter_kernel_6__ap_start_global__q0) begin - inter_kernel_6__state <= 2'b01; - end - end - if(inter_kernel_6__state == 2'b01) begin - if(inter_kernel_6__ap_ready) begin - if(inter_kernel_6__ap_done) begin - inter_kernel_6__state <= 2'b10; - end else begin - inter_kernel_6__state <= 2'b11; - end - end - end - if(inter_kernel_6__state == 2'b11) begin - if(inter_kernel_6__ap_done) begin - inter_kernel_6__state <= 2'b10; - end - end - if(inter_kernel_6__state == 2'b10) begin - if(inter_kernel_6__ap_done_global__q0) begin - inter_kernel_6__state <= 2'b00; - end - end - end - end - - assign inter_kernel_6__ap_start = (inter_kernel_6__state == 2'b01); - assign inter_kernel_7__ap_start_global__q0 = ap_start__q0; - assign inter_kernel_7__is_done__q0 = (inter_kernel_7__state == 2'b10); - assign inter_kernel_7__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - inter_kernel_7__state <= 2'b00; - end else begin - if(inter_kernel_7__state == 2'b00) begin - if(inter_kernel_7__ap_start_global__q0) begin - inter_kernel_7__state <= 2'b01; - end - end - if(inter_kernel_7__state == 2'b01) begin - if(inter_kernel_7__ap_ready) begin - if(inter_kernel_7__ap_done) begin - inter_kernel_7__state <= 2'b10; - end else begin - inter_kernel_7__state <= 2'b11; - end - end - end - if(inter_kernel_7__state == 2'b11) begin - if(inter_kernel_7__ap_done) begin - inter_kernel_7__state <= 2'b10; - end - end - if(inter_kernel_7__state == 2'b10) begin - if(inter_kernel_7__ap_done_global__q0) begin - inter_kernel_7__state <= 2'b00; - end - end - end - end - - assign inter_kernel_7__ap_start = (inter_kernel_7__state == 2'b01); - assign inter_kernel_8__ap_start_global__q0 = ap_start__q0; - assign inter_kernel_8__is_done__q0 = (inter_kernel_8__state == 2'b10); - assign inter_kernel_8__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - inter_kernel_8__state <= 2'b00; - end else begin - if(inter_kernel_8__state == 2'b00) begin - if(inter_kernel_8__ap_start_global__q0) begin - inter_kernel_8__state <= 2'b01; - end - end - if(inter_kernel_8__state == 2'b01) begin - if(inter_kernel_8__ap_ready) begin - if(inter_kernel_8__ap_done) begin - inter_kernel_8__state <= 2'b10; - end else begin - inter_kernel_8__state <= 2'b11; - end - end - end - if(inter_kernel_8__state == 2'b11) begin - if(inter_kernel_8__ap_done) begin - inter_kernel_8__state <= 2'b10; - end - end - if(inter_kernel_8__state == 2'b10) begin - if(inter_kernel_8__ap_done_global__q0) begin - inter_kernel_8__state <= 2'b00; - end - end - end - end - - assign inter_kernel_8__ap_start = (inter_kernel_8__state == 2'b01); - assign inter_kernel_9__ap_start_global__q0 = ap_start__q0; - assign inter_kernel_9__is_done__q0 = (inter_kernel_9__state == 2'b10); - assign inter_kernel_9__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - inter_kernel_9__state <= 2'b00; - end else begin - if(inter_kernel_9__state == 2'b00) begin - if(inter_kernel_9__ap_start_global__q0) begin - inter_kernel_9__state <= 2'b01; - end - end - if(inter_kernel_9__state == 2'b01) begin - if(inter_kernel_9__ap_ready) begin - if(inter_kernel_9__ap_done) begin - inter_kernel_9__state <= 2'b10; - end else begin - inter_kernel_9__state <= 2'b11; - end - end - end - if(inter_kernel_9__state == 2'b11) begin - if(inter_kernel_9__ap_done) begin - inter_kernel_9__state <= 2'b10; - end - end - if(inter_kernel_9__state == 2'b10) begin - if(inter_kernel_9__ap_done_global__q0) begin - inter_kernel_9__state <= 2'b00; - end - end - end - end - - assign inter_kernel_9__ap_start = (inter_kernel_9__state == 2'b01); - assign inter_kernel_10__ap_start_global__q0 = ap_start__q0; - assign inter_kernel_10__is_done__q0 = (inter_kernel_10__state == 2'b10); - assign inter_kernel_10__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - inter_kernel_10__state <= 2'b00; - end else begin - if(inter_kernel_10__state == 2'b00) begin - if(inter_kernel_10__ap_start_global__q0) begin - inter_kernel_10__state <= 2'b01; - end - end - if(inter_kernel_10__state == 2'b01) begin - if(inter_kernel_10__ap_ready) begin - if(inter_kernel_10__ap_done) begin - inter_kernel_10__state <= 2'b10; - end else begin - inter_kernel_10__state <= 2'b11; - end - end - end - if(inter_kernel_10__state == 2'b11) begin - if(inter_kernel_10__ap_done) begin - inter_kernel_10__state <= 2'b10; - end - end - if(inter_kernel_10__state == 2'b10) begin - if(inter_kernel_10__ap_done_global__q0) begin - inter_kernel_10__state <= 2'b00; - end - end - end - end - - assign inter_kernel_10__ap_start = (inter_kernel_10__state == 2'b01); - assign inter_kernel_11__ap_start_global__q0 = ap_start__q0; - assign inter_kernel_11__is_done__q0 = (inter_kernel_11__state == 2'b10); - assign inter_kernel_11__ap_done_global__q0 = ap_done__q0; - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - inter_kernel_11__state <= 2'b00; - end else begin - if(inter_kernel_11__state == 2'b00) begin - if(inter_kernel_11__ap_start_global__q0) begin - inter_kernel_11__state <= 2'b01; - end - end - if(inter_kernel_11__state == 2'b01) begin - if(inter_kernel_11__ap_ready) begin - if(inter_kernel_11__ap_done) begin - inter_kernel_11__state <= 2'b10; - end else begin - inter_kernel_11__state <= 2'b11; - end - end - end - if(inter_kernel_11__state == 2'b11) begin - if(inter_kernel_11__ap_done) begin - inter_kernel_11__state <= 2'b10; - end - end - if(inter_kernel_11__state == 2'b10) begin - if(inter_kernel_11__ap_done_global__q0) begin - inter_kernel_11__state <= 2'b00; - end - end - end - end - - assign inter_kernel_11__ap_start = (inter_kernel_11__state == 2'b01); - - always @(posedge ap_clk) begin - if(~ap_rst_n) begin - tapa_state <= 2'b00; - end else begin - case(tapa_state) - 2'b00: begin - if(ap_start__q0) begin - tapa_state <= 2'b01; - end - end - 2'b01: begin - if(HEAT3D_0__is_done__q0 && HEAT3D_1__is_done__q0 && HEAT3D_2__is_done__q0 && HEAT3D_3__is_done__q0 && HEAT3D_4__is_done__q0 && HEAT3D_5__is_done__q0 && HEAT3D_6__is_done__q0 && HEAT3D_7__is_done__q0 && HEAT3D_8__is_done__q0 && HEAT3D_9__is_done__q0 && HEAT3D_10__is_done__q0 && HEAT3D_11__is_done__q0 && inter_kernel_0__is_done__q0 && inter_kernel_1__is_done__q0 && inter_kernel_2__is_done__q0 && inter_kernel_3__is_done__q0 && inter_kernel_4__is_done__q0 && inter_kernel_5__is_done__q0 && inter_kernel_6__is_done__q0 && inter_kernel_7__is_done__q0 && inter_kernel_8__is_done__q0 && inter_kernel_9__is_done__q0 && inter_kernel_10__is_done__q0 && inter_kernel_11__is_done__q0) begin - tapa_state <= 2'b10; - end - end - 2'b10: begin - tapa_state <= 2'b00; - countdown <= 1'd0; - end - 2'b11: begin - if(countdown == 1'd0) begin - tapa_state <= 2'b00; - end else begin - countdown <= (countdown - 1'd1); - end - end - endcase - end - end - - assign ap_idle = (tapa_state == 2'b00); - assign ap_done = ap_done__q0; - assign ap_ready = ap_done__q0; - assign ap_start__q0 = ap_start; - assign ap_done__q0 = (tapa_state == 2'b10); - -endmodule diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/log/tapac.INFO b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/log/tapac.INFO deleted file mode 120000 index 5878a575..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/log/tapac.INFO +++ /dev/null @@ -1 +0,0 @@ -tapac.iquark.ylxiao.log.INFO.20240712-200239.33259 \ No newline at end of file diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/log/tapac.iquark.ylxiao.log.INFO.20240712-200239.33259 b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/log/tapac.iquark.ylxiao.log.INFO.20240712-200239.33259 deleted file mode 100644 index c2ab4a45..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/log/tapac.iquark.ylxiao.log.INFO.20240712-200239.33259 +++ /dev/null @@ -1,2249 +0,0 @@ -I0712 20:02:39.695 tapa.util:184] logging level set to INFO -I0712 20:02:39.695 tapa.tapac:407] Executing all steps of tapac -I0712 20:02:39.695 tapa.tapac:521] running translated command: `tapa --work-dir=generated analyze --input=src/unikernel.cpp --top=unikernel synth --part-num=xcu280-fsvh2892-2L-e --clock-period=3.33 link pack --output=generated/unikernel.xo` -I0712 20:02:39.695 tapa.util:184] logging level set to INFO -I0712 20:02:39.695 tapa.util:184] logging level set to INFO -I0712 20:02:39.695 tapa.tapa:54] tapa version: 0.0.20240301.1 -I0712 20:02:39.695 tapa.tapa:54] tapa version: 0.0.20240301.1 -I0712 20:02:39.695 tapa.tapa:58] Python recursion limit set to 3000 -I0712 20:02:39.695 tapa.tapa:58] Python recursion limit set to 3000 -I0712 20:02:39.791 tapa.steps.analyze:151] added vendor include path `/tools/Xilinx/Vitis_HLS/2022.2/include` -I0712 20:02:39.791 tapa.steps.analyze:151] added vendor include path `/tools/Xilinx/Vitis_HLS/2022.2/include` -I0712 20:02:39.792 tapa.steps.analyze:248] Running tapacc command: /usr/bin/tapacc generated/flatten/flatten-e756cccc-unikernel.cpp -top unikernel -- -std=c++17 -I /home/ylxiao/.local/lib/python3.8/site-packages/tapa/../../../src -isystem /tools/Xilinx/Vitis_HLS/2022.2/include -stdlib=libc++ -isystem /usr/lib/llvm-17/include/c++/v1/ -isystem /usr/include/clang/17/include/ -isystem /usr/lib/clang/17/include/ -I0712 20:02:39.792 tapa.steps.analyze:248] Running tapacc command: /usr/bin/tapacc generated/flatten/flatten-e756cccc-unikernel.cpp -top unikernel -- -std=c++17 -I /home/ylxiao/.local/lib/python3.8/site-packages/tapa/../../../src -isystem /tools/Xilinx/Vitis_HLS/2022.2/include -stdlib=libc++ -isystem /usr/lib/llvm-17/include/c++/v1/ -isystem /usr/include/clang/17/include/ -isystem /usr/lib/clang/17/include/ -I0712 20:02:40.935 tapa.steps.common:92] writing TAPA graph to json `generated/graph.json`. -I0712 20:02:40.935 tapa.steps.common:92] writing TAPA graph to json `generated/graph.json`. -I0712 20:02:40.936 tapa.steps.common:92] writing TAPA settings to json `generated/settings.json`. -I0712 20:02:40.936 tapa.steps.common:92] writing TAPA settings to json `generated/settings.json`. -I0712 20:02:40.937 tapa.steps.common:46] reusing TAPA settings from upstream flows. -I0712 20:02:40.937 tapa.steps.common:46] reusing TAPA settings from upstream flows. -I0712 20:02:40.937 tapa.core:184] extracting HLS C++ files -I0712 20:02:40.937 tapa.core:184] extracting HLS C++ files -I0712 20:02:40.938 tapa.core:216] running HLS -I0712 20:02:40.938 tapa.core:216] running HLS -I0712 20:02:40.940 tapa.core:262] spawn 8 workers for parallel HLS synthesis of the tasks -I0712 20:02:40.940 tapa.core:262] spawn 8 workers for parallel HLS synthesis of the tasks -I0712 20:03:04.052 tapa.core:277] extracting RTL files -I0712 20:03:04.052 tapa.core:277] extracting RTL files -I0712 20:03:04.085 tapa.core:308] parsing RTL files and populating tasks -I0712 20:03:04.085 tapa.core:308] parsing RTL files and populating tasks -D0712 20:03:04.644 tapa.core:317] parsing HEAT3D -D0712 20:03:04.644 tapa.core:317] parsing HEAT3D -D0712 20:03:04.644 tapa.core:321] populating HEAT3D -D0712 20:03:04.644 tapa.core:321] populating HEAT3D -D0712 20:03:04.646 tapa.core:317] parsing inter_kernel -D0712 20:03:04.646 tapa.core:317] parsing inter_kernel -D0712 20:03:04.647 tapa.core:321] populating inter_kernel -D0712 20:03:04.647 tapa.core:321] populating inter_kernel -D0712 20:03:04.647 tapa.core:317] parsing unikernel -D0712 20:03:04.647 tapa.core:317] parsing unikernel -D0712 20:03:04.647 tapa.core:321] populating unikernel -D0712 20:03:04.647 tapa.core:321] populating unikernel -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_0' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_0.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_0' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_0.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_0' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_0.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_0' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_0.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_1' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_1.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_1' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_1.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_1' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_1.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_1' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_1.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_2' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_2.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_2' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_2.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_2' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_2.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_2' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_2.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_3' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_3.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_3' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_3.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_3' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_3.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_3' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_3.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_4' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_4.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_4' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_4.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_4' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_4.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_4' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_4.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_5' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_5.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_5' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_5.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_5' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_5.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_5' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_5.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_6' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_6.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_6' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_6.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_6' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_6.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_6' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_6.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_7' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_7.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_7' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_7.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_7' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_7.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_7' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_7.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_8' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_8.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_8' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_8.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_8' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_8.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_8' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_8.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_9' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_9.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_9' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_9.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_9' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_9.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_9' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_9.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_10' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_10.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_10' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_10.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_10' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_10.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_10' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_10.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_11' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_11.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.in_11' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_11.a' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_11' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_11.b' -D0712 20:03:04.648 tapa.task:149] mmap argument 'unikernel.out_11' (id_width=1, thread_count=1, chan_size=None, chan_count=None) is connected to port 'inter_kernel_11.b' -I0712 20:03:04.648 tapa.core:325] instrumenting upper-level RTL -I0712 20:03:04.648 tapa.core:325] instrumenting upper-level RTL -I0712 20:03:04.648 tapa.steps.common:92] writing TAPA settings to json `generated/settings.json`. -I0712 20:03:04.648 tapa.steps.common:92] writing TAPA settings to json `generated/settings.json`. -I0712 20:03:04.648 tapa.steps.common:46] reusing TAPA settings from upstream flows. -I0712 20:03:04.648 tapa.steps.common:46] reusing TAPA settings from upstream flows. -I0712 20:03:04.649 tapa.core:452] top task register level set to 0 -I0712 20:03:04.649 tapa.core:452] top task register level set to 0 -I0712 20:03:04.649 tapa.core:456] instrumenting top-level RTL -I0712 20:03:04.649 tapa.core:456] instrumenting top-level RTL -D0712 20:03:04.649 tapa.core:529] instantiating FIFOs in unikernel -D0712 20:03:04.649 tapa.core:529] instantiating FIFOs in unikernel -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[0] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[0] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[10] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[10] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[11] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[11] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[1] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[1] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[2] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[2] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[3] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[3] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[4] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[4] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[5] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[5] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[6] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[6] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[7] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[7] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[8] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[8] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[9] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_rd_unikernel[9] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_wr_unikernel[0] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_wr_unikernel[0] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_wr_unikernel[10] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_wr_unikernel[10] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_wr_unikernel[11] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_wr_unikernel[11] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_wr_unikernel[1] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_wr_unikernel[1] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_wr_unikernel[2] -D0712 20:03:04.650 tapa.core:542] instantiating unikernel.k_wr_unikernel[2] -D0712 20:03:04.651 tapa.core:542] instantiating unikernel.k_wr_unikernel[3] -D0712 20:03:04.651 tapa.core:542] instantiating unikernel.k_wr_unikernel[3] -D0712 20:03:04.651 tapa.core:542] instantiating unikernel.k_wr_unikernel[4] -D0712 20:03:04.651 tapa.core:542] instantiating unikernel.k_wr_unikernel[4] -D0712 20:03:04.651 tapa.core:542] instantiating unikernel.k_wr_unikernel[5] -D0712 20:03:04.651 tapa.core:542] instantiating unikernel.k_wr_unikernel[5] -D0712 20:03:04.651 tapa.core:542] instantiating unikernel.k_wr_unikernel[6] -D0712 20:03:04.651 tapa.core:542] instantiating unikernel.k_wr_unikernel[6] -D0712 20:03:04.651 tapa.core:542] instantiating unikernel.k_wr_unikernel[7] -D0712 20:03:04.651 tapa.core:542] instantiating unikernel.k_wr_unikernel[7] -D0712 20:03:04.651 tapa.core:542] instantiating unikernel.k_wr_unikernel[8] -D0712 20:03:04.651 tapa.core:542] instantiating unikernel.k_wr_unikernel[8] -D0712 20:03:04.651 tapa.core:542] instantiating unikernel.k_wr_unikernel[9] -D0712 20:03:04.651 tapa.core:542] instantiating unikernel.k_wr_unikernel[9] -D0712 20:03:04.651 tapa.core:507] connecting unikernel's children tasks -D0712 20:03:04.651 tapa.core:507] connecting unikernel's children tasks -D0712 20:03:04.654 tapa.core:598] instantiating children tasks in unikernel -D0712 20:03:04.654 tapa.core:598] instantiating children tasks in unikernel -D0712 20:03:04.669 tapa.core:671] pipelined signal: iters => HEAT3D_0___iters -D0712 20:03:04.669 tapa.core:671] pipelined signal: iters => HEAT3D_0___iters -D0712 20:03:04.669 tapa.core:671] pipelined signal: iters => HEAT3D_1___iters -D0712 20:03:04.669 tapa.core:671] pipelined signal: iters => HEAT3D_1___iters -D0712 20:03:04.669 tapa.core:671] pipelined signal: iters => HEAT3D_2___iters -D0712 20:03:04.669 tapa.core:671] pipelined signal: iters => HEAT3D_2___iters -D0712 20:03:04.670 tapa.core:671] pipelined signal: iters => HEAT3D_3___iters -D0712 20:03:04.670 tapa.core:671] pipelined signal: iters => HEAT3D_3___iters -D0712 20:03:04.670 tapa.core:671] pipelined signal: iters => HEAT3D_4___iters -D0712 20:03:04.670 tapa.core:671] pipelined signal: iters => HEAT3D_4___iters -D0712 20:03:04.671 tapa.core:671] pipelined signal: iters => HEAT3D_5___iters -D0712 20:03:04.671 tapa.core:671] pipelined signal: iters => HEAT3D_5___iters -D0712 20:03:04.671 tapa.core:671] pipelined signal: iters => HEAT3D_6___iters -D0712 20:03:04.671 tapa.core:671] pipelined signal: iters => HEAT3D_6___iters -D0712 20:03:04.671 tapa.core:671] pipelined signal: iters => HEAT3D_7___iters -D0712 20:03:04.671 tapa.core:671] pipelined signal: iters => HEAT3D_7___iters -D0712 20:03:04.672 tapa.core:671] pipelined signal: iters => HEAT3D_8___iters -D0712 20:03:04.672 tapa.core:671] pipelined signal: iters => HEAT3D_8___iters -D0712 20:03:04.672 tapa.core:671] pipelined signal: iters => HEAT3D_9___iters -D0712 20:03:04.672 tapa.core:671] pipelined signal: iters => HEAT3D_9___iters -D0712 20:03:04.672 tapa.core:671] pipelined signal: iters => HEAT3D_10___iters -D0712 20:03:04.672 tapa.core:671] pipelined signal: iters => HEAT3D_10___iters -D0712 20:03:04.673 tapa.core:671] pipelined signal: iters => HEAT3D_11___iters -D0712 20:03:04.673 tapa.core:671] pipelined signal: iters => HEAT3D_11___iters -D0712 20:03:04.673 tapa.core:671] pipelined signal: in_0 => inter_kernel_0___in_0 -D0712 20:03:04.673 tapa.core:671] pipelined signal: in_0 => inter_kernel_0___in_0 -D0712 20:03:04.673 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_addr_din` is connected to async_mmap port `in_0.read_addr` -D0712 20:03:04.673 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_addr_din` is connected to async_mmap port `in_0.read_addr` -D0712 20:03:04.673 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_addr_full_n` is connected to async_mmap port `in_0.read_addr` -D0712 20:03:04.673 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_addr_full_n` is connected to async_mmap port `in_0.read_addr` -D0712 20:03:04.673 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_addr_write` is connected to async_mmap port `in_0.read_addr` -D0712 20:03:04.673 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_addr_write` is connected to async_mmap port `in_0.read_addr` -D0712 20:03:04.673 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_data_s_dout` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.673 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_data_s_dout` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.673 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.a_read_data_peek_dout` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.673 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.a_read_data_peek_dout` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.673 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_data_s_empty_n` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.673 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_data_s_empty_n` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.673 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.a_read_data_peek_empty_n` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.673 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.a_read_data_peek_empty_n` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.673 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_data_s_read` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.673 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_data_s_read` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_addr_din` is connected to async_mmap port `in_0.write_addr` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_addr_din` is connected to async_mmap port `in_0.write_addr` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_addr_full_n` is connected to async_mmap port `in_0.write_addr` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_addr_full_n` is connected to async_mmap port `in_0.write_addr` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_addr_write` is connected to async_mmap port `in_0.write_addr` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_addr_write` is connected to async_mmap port `in_0.write_addr` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_data_din` is connected to async_mmap port `in_0.write_data` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_data_din` is connected to async_mmap port `in_0.write_data` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_data_full_n` is connected to async_mmap port `in_0.write_data` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_data_full_n` is connected to async_mmap port `in_0.write_data` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_data_write` is connected to async_mmap port `in_0.write_data` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_data_write` is connected to async_mmap port `in_0.write_data` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_resp_s_dout` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_resp_s_dout` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.a_write_resp_peek_dout` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.a_write_resp_peek_dout` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_resp_s_empty_n` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_resp_s_empty_n` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.a_write_resp_peek_empty_n` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.a_write_resp_peek_empty_n` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_resp_s_read` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_resp_s_read` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.674 tapa.core:671] pipelined signal: iters => inter_kernel_0___iters -D0712 20:03:04.674 tapa.core:671] pipelined signal: iters => inter_kernel_0___iters -D0712 20:03:04.674 tapa.core:671] pipelined signal: out_0 => inter_kernel_0___out_0 -D0712 20:03:04.674 tapa.core:671] pipelined signal: out_0 => inter_kernel_0___out_0 -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_addr_din` is connected to async_mmap port `out_0.read_addr` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_addr_din` is connected to async_mmap port `out_0.read_addr` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_addr_full_n` is connected to async_mmap port `out_0.read_addr` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_addr_full_n` is connected to async_mmap port `out_0.read_addr` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_addr_write` is connected to async_mmap port `out_0.read_addr` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_addr_write` is connected to async_mmap port `out_0.read_addr` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_data_s_dout` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_data_s_dout` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.b_read_data_peek_dout` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.b_read_data_peek_dout` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_data_s_empty_n` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_data_s_empty_n` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.b_read_data_peek_empty_n` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.674 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.b_read_data_peek_empty_n` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_data_s_read` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_data_s_read` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_addr_din` is connected to async_mmap port `out_0.write_addr` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_addr_din` is connected to async_mmap port `out_0.write_addr` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_addr_full_n` is connected to async_mmap port `out_0.write_addr` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_addr_full_n` is connected to async_mmap port `out_0.write_addr` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_addr_write` is connected to async_mmap port `out_0.write_addr` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_addr_write` is connected to async_mmap port `out_0.write_addr` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_data_din` is connected to async_mmap port `out_0.write_data` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_data_din` is connected to async_mmap port `out_0.write_data` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_data_full_n` is connected to async_mmap port `out_0.write_data` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_data_full_n` is connected to async_mmap port `out_0.write_data` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_data_write` is connected to async_mmap port `out_0.write_data` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_data_write` is connected to async_mmap port `out_0.write_data` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_resp_s_dout` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_resp_s_dout` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.b_write_resp_peek_dout` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.b_write_resp_peek_dout` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_resp_s_empty_n` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_resp_s_empty_n` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.b_write_resp_peek_empty_n` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.b_write_resp_peek_empty_n` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_resp_s_read` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_resp_s_read` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_addr_din` is connected to async_mmap port `in_0.read_addr` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_addr_din` is connected to async_mmap port `in_0.read_addr` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_addr_full_n` is connected to async_mmap port `in_0.read_addr` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_addr_full_n` is connected to async_mmap port `in_0.read_addr` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_addr_write` is connected to async_mmap port `in_0.read_addr` -D0712 20:03:04.675 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_addr_write` is connected to async_mmap port `in_0.read_addr` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_data_s_dout` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_data_s_dout` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.a_read_data_peek_dout` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.a_read_data_peek_dout` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_data_s_empty_n` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_data_s_empty_n` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.a_read_data_peek_empty_n` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.a_read_data_peek_empty_n` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_data_s_read` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_read_data_s_read` is connected to async_mmap port `in_0.read_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_addr_din` is connected to async_mmap port `in_0.write_addr` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_addr_din` is connected to async_mmap port `in_0.write_addr` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_addr_full_n` is connected to async_mmap port `in_0.write_addr` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_addr_full_n` is connected to async_mmap port `in_0.write_addr` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_addr_write` is connected to async_mmap port `in_0.write_addr` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_addr_write` is connected to async_mmap port `in_0.write_addr` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_data_din` is connected to async_mmap port `in_0.write_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_data_din` is connected to async_mmap port `in_0.write_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_data_full_n` is connected to async_mmap port `in_0.write_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_data_full_n` is connected to async_mmap port `in_0.write_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_data_write` is connected to async_mmap port `in_0.write_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_data_write` is connected to async_mmap port `in_0.write_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_resp_s_dout` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_resp_s_dout` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.a_write_resp_peek_dout` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.a_write_resp_peek_dout` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_resp_s_empty_n` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_resp_s_empty_n` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.a_write_resp_peek_empty_n` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.a_write_resp_peek_empty_n` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_resp_s_read` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.a_write_resp_s_read` is connected to async_mmap port `in_0.write_resp` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_addr_din` is connected to async_mmap port `out_0.read_addr` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_addr_din` is connected to async_mmap port `out_0.read_addr` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_addr_full_n` is connected to async_mmap port `out_0.read_addr` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_addr_full_n` is connected to async_mmap port `out_0.read_addr` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_addr_write` is connected to async_mmap port `out_0.read_addr` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_addr_write` is connected to async_mmap port `out_0.read_addr` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_data_s_dout` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.676 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_data_s_dout` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.b_read_data_peek_dout` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.b_read_data_peek_dout` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_data_s_empty_n` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_data_s_empty_n` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.b_read_data_peek_empty_n` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.b_read_data_peek_empty_n` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_data_s_read` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_read_data_s_read` is connected to async_mmap port `out_0.read_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_addr_din` is connected to async_mmap port `out_0.write_addr` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_addr_din` is connected to async_mmap port `out_0.write_addr` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_addr_full_n` is connected to async_mmap port `out_0.write_addr` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_addr_full_n` is connected to async_mmap port `out_0.write_addr` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_addr_write` is connected to async_mmap port `out_0.write_addr` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_addr_write` is connected to async_mmap port `out_0.write_addr` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_data_din` is connected to async_mmap port `out_0.write_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_data_din` is connected to async_mmap port `out_0.write_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_data_full_n` is connected to async_mmap port `out_0.write_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_data_full_n` is connected to async_mmap port `out_0.write_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_data_write` is connected to async_mmap port `out_0.write_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_data_write` is connected to async_mmap port `out_0.write_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_resp_s_dout` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_resp_s_dout` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.b_write_resp_peek_dout` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.b_write_resp_peek_dout` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_resp_s_empty_n` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_resp_s_empty_n` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.b_write_resp_peek_empty_n` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_0.b_write_resp_peek_empty_n` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_resp_s_read` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_0.b_write_resp_s_read` is connected to async_mmap port `out_0.write_resp` -D0712 20:03:04.677 tapa.core:671] pipelined signal: in_1 => inter_kernel_1___in_1 -D0712 20:03:04.677 tapa.core:671] pipelined signal: in_1 => inter_kernel_1___in_1 -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_addr_din` is connected to async_mmap port `in_1.read_addr` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_addr_din` is connected to async_mmap port `in_1.read_addr` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_addr_full_n` is connected to async_mmap port `in_1.read_addr` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_addr_full_n` is connected to async_mmap port `in_1.read_addr` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_addr_write` is connected to async_mmap port `in_1.read_addr` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_addr_write` is connected to async_mmap port `in_1.read_addr` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_data_s_dout` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_data_s_dout` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.a_read_data_peek_dout` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.a_read_data_peek_dout` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_data_s_empty_n` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_data_s_empty_n` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.a_read_data_peek_empty_n` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.677 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.a_read_data_peek_empty_n` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_data_s_read` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_data_s_read` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_addr_din` is connected to async_mmap port `in_1.write_addr` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_addr_din` is connected to async_mmap port `in_1.write_addr` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_addr_full_n` is connected to async_mmap port `in_1.write_addr` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_addr_full_n` is connected to async_mmap port `in_1.write_addr` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_addr_write` is connected to async_mmap port `in_1.write_addr` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_addr_write` is connected to async_mmap port `in_1.write_addr` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_data_din` is connected to async_mmap port `in_1.write_data` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_data_din` is connected to async_mmap port `in_1.write_data` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_data_full_n` is connected to async_mmap port `in_1.write_data` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_data_full_n` is connected to async_mmap port `in_1.write_data` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_data_write` is connected to async_mmap port `in_1.write_data` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_data_write` is connected to async_mmap port `in_1.write_data` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_resp_s_dout` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_resp_s_dout` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.a_write_resp_peek_dout` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.a_write_resp_peek_dout` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_resp_s_empty_n` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_resp_s_empty_n` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.a_write_resp_peek_empty_n` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.a_write_resp_peek_empty_n` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_resp_s_read` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_resp_s_read` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.678 tapa.core:671] pipelined signal: iters => inter_kernel_1___iters -D0712 20:03:04.678 tapa.core:671] pipelined signal: iters => inter_kernel_1___iters -D0712 20:03:04.678 tapa.core:671] pipelined signal: out_1 => inter_kernel_1___out_1 -D0712 20:03:04.678 tapa.core:671] pipelined signal: out_1 => inter_kernel_1___out_1 -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_addr_din` is connected to async_mmap port `out_1.read_addr` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_addr_din` is connected to async_mmap port `out_1.read_addr` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_addr_full_n` is connected to async_mmap port `out_1.read_addr` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_addr_full_n` is connected to async_mmap port `out_1.read_addr` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_addr_write` is connected to async_mmap port `out_1.read_addr` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_addr_write` is connected to async_mmap port `out_1.read_addr` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_data_s_dout` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_data_s_dout` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.b_read_data_peek_dout` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.b_read_data_peek_dout` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_data_s_empty_n` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_data_s_empty_n` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.b_read_data_peek_empty_n` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.678 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.b_read_data_peek_empty_n` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_data_s_read` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_data_s_read` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_addr_din` is connected to async_mmap port `out_1.write_addr` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_addr_din` is connected to async_mmap port `out_1.write_addr` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_addr_full_n` is connected to async_mmap port `out_1.write_addr` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_addr_full_n` is connected to async_mmap port `out_1.write_addr` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_addr_write` is connected to async_mmap port `out_1.write_addr` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_addr_write` is connected to async_mmap port `out_1.write_addr` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_data_din` is connected to async_mmap port `out_1.write_data` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_data_din` is connected to async_mmap port `out_1.write_data` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_data_full_n` is connected to async_mmap port `out_1.write_data` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_data_full_n` is connected to async_mmap port `out_1.write_data` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_data_write` is connected to async_mmap port `out_1.write_data` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_data_write` is connected to async_mmap port `out_1.write_data` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_resp_s_dout` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_resp_s_dout` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.b_write_resp_peek_dout` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.b_write_resp_peek_dout` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_resp_s_empty_n` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_resp_s_empty_n` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.b_write_resp_peek_empty_n` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.b_write_resp_peek_empty_n` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_resp_s_read` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.679 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_resp_s_read` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_addr_din` is connected to async_mmap port `in_1.read_addr` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_addr_din` is connected to async_mmap port `in_1.read_addr` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_addr_full_n` is connected to async_mmap port `in_1.read_addr` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_addr_full_n` is connected to async_mmap port `in_1.read_addr` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_addr_write` is connected to async_mmap port `in_1.read_addr` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_addr_write` is connected to async_mmap port `in_1.read_addr` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_data_s_dout` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_data_s_dout` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.a_read_data_peek_dout` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.a_read_data_peek_dout` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_data_s_empty_n` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_data_s_empty_n` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.a_read_data_peek_empty_n` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.a_read_data_peek_empty_n` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_data_s_read` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_read_data_s_read` is connected to async_mmap port `in_1.read_data` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_addr_din` is connected to async_mmap port `in_1.write_addr` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_addr_din` is connected to async_mmap port `in_1.write_addr` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_addr_full_n` is connected to async_mmap port `in_1.write_addr` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_addr_full_n` is connected to async_mmap port `in_1.write_addr` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_addr_write` is connected to async_mmap port `in_1.write_addr` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_addr_write` is connected to async_mmap port `in_1.write_addr` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_data_din` is connected to async_mmap port `in_1.write_data` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_data_din` is connected to async_mmap port `in_1.write_data` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_data_full_n` is connected to async_mmap port `in_1.write_data` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_data_full_n` is connected to async_mmap port `in_1.write_data` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_data_write` is connected to async_mmap port `in_1.write_data` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_data_write` is connected to async_mmap port `in_1.write_data` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_resp_s_dout` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_resp_s_dout` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.a_write_resp_peek_dout` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.a_write_resp_peek_dout` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_resp_s_empty_n` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_resp_s_empty_n` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.a_write_resp_peek_empty_n` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.a_write_resp_peek_empty_n` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_resp_s_read` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.680 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.a_write_resp_s_read` is connected to async_mmap port `in_1.write_resp` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_addr_din` is connected to async_mmap port `out_1.read_addr` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_addr_din` is connected to async_mmap port `out_1.read_addr` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_addr_full_n` is connected to async_mmap port `out_1.read_addr` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_addr_full_n` is connected to async_mmap port `out_1.read_addr` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_addr_write` is connected to async_mmap port `out_1.read_addr` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_addr_write` is connected to async_mmap port `out_1.read_addr` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_data_s_dout` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_data_s_dout` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.b_read_data_peek_dout` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.b_read_data_peek_dout` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_data_s_empty_n` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_data_s_empty_n` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.b_read_data_peek_empty_n` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.b_read_data_peek_empty_n` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_data_s_read` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_read_data_s_read` is connected to async_mmap port `out_1.read_data` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_addr_din` is connected to async_mmap port `out_1.write_addr` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_addr_din` is connected to async_mmap port `out_1.write_addr` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_addr_full_n` is connected to async_mmap port `out_1.write_addr` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_addr_full_n` is connected to async_mmap port `out_1.write_addr` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_addr_write` is connected to async_mmap port `out_1.write_addr` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_addr_write` is connected to async_mmap port `out_1.write_addr` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_data_din` is connected to async_mmap port `out_1.write_data` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_data_din` is connected to async_mmap port `out_1.write_data` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_data_full_n` is connected to async_mmap port `out_1.write_data` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_data_full_n` is connected to async_mmap port `out_1.write_data` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_data_write` is connected to async_mmap port `out_1.write_data` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_data_write` is connected to async_mmap port `out_1.write_data` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_resp_s_dout` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_resp_s_dout` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.b_write_resp_peek_dout` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.b_write_resp_peek_dout` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_resp_s_empty_n` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_resp_s_empty_n` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.b_write_resp_peek_empty_n` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_1.b_write_resp_peek_empty_n` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_resp_s_read` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_1.b_write_resp_s_read` is connected to async_mmap port `out_1.write_resp` -D0712 20:03:04.681 tapa.core:671] pipelined signal: in_2 => inter_kernel_2___in_2 -D0712 20:03:04.681 tapa.core:671] pipelined signal: in_2 => inter_kernel_2___in_2 -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_addr_din` is connected to async_mmap port `in_2.read_addr` -D0712 20:03:04.681 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_addr_din` is connected to async_mmap port `in_2.read_addr` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_addr_full_n` is connected to async_mmap port `in_2.read_addr` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_addr_full_n` is connected to async_mmap port `in_2.read_addr` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_addr_write` is connected to async_mmap port `in_2.read_addr` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_addr_write` is connected to async_mmap port `in_2.read_addr` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_data_s_dout` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_data_s_dout` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.a_read_data_peek_dout` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.a_read_data_peek_dout` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_data_s_empty_n` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_data_s_empty_n` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.a_read_data_peek_empty_n` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.a_read_data_peek_empty_n` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_data_s_read` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_data_s_read` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_addr_din` is connected to async_mmap port `in_2.write_addr` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_addr_din` is connected to async_mmap port `in_2.write_addr` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_addr_full_n` is connected to async_mmap port `in_2.write_addr` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_addr_full_n` is connected to async_mmap port `in_2.write_addr` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_addr_write` is connected to async_mmap port `in_2.write_addr` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_addr_write` is connected to async_mmap port `in_2.write_addr` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_data_din` is connected to async_mmap port `in_2.write_data` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_data_din` is connected to async_mmap port `in_2.write_data` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_data_full_n` is connected to async_mmap port `in_2.write_data` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_data_full_n` is connected to async_mmap port `in_2.write_data` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_data_write` is connected to async_mmap port `in_2.write_data` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_data_write` is connected to async_mmap port `in_2.write_data` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_resp_s_dout` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_resp_s_dout` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.a_write_resp_peek_dout` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.a_write_resp_peek_dout` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_resp_s_empty_n` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_resp_s_empty_n` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.a_write_resp_peek_empty_n` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.a_write_resp_peek_empty_n` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_resp_s_read` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_resp_s_read` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.682 tapa.core:671] pipelined signal: iters => inter_kernel_2___iters -D0712 20:03:04.682 tapa.core:671] pipelined signal: iters => inter_kernel_2___iters -D0712 20:03:04.682 tapa.core:671] pipelined signal: out_2 => inter_kernel_2___out_2 -D0712 20:03:04.682 tapa.core:671] pipelined signal: out_2 => inter_kernel_2___out_2 -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_addr_din` is connected to async_mmap port `out_2.read_addr` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_addr_din` is connected to async_mmap port `out_2.read_addr` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_addr_full_n` is connected to async_mmap port `out_2.read_addr` -D0712 20:03:04.682 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_addr_full_n` is connected to async_mmap port `out_2.read_addr` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_addr_write` is connected to async_mmap port `out_2.read_addr` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_addr_write` is connected to async_mmap port `out_2.read_addr` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_data_s_dout` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_data_s_dout` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.b_read_data_peek_dout` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.b_read_data_peek_dout` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_data_s_empty_n` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_data_s_empty_n` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.b_read_data_peek_empty_n` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.b_read_data_peek_empty_n` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_data_s_read` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_data_s_read` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_addr_din` is connected to async_mmap port `out_2.write_addr` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_addr_din` is connected to async_mmap port `out_2.write_addr` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_addr_full_n` is connected to async_mmap port `out_2.write_addr` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_addr_full_n` is connected to async_mmap port `out_2.write_addr` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_addr_write` is connected to async_mmap port `out_2.write_addr` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_addr_write` is connected to async_mmap port `out_2.write_addr` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_data_din` is connected to async_mmap port `out_2.write_data` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_data_din` is connected to async_mmap port `out_2.write_data` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_data_full_n` is connected to async_mmap port `out_2.write_data` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_data_full_n` is connected to async_mmap port `out_2.write_data` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_data_write` is connected to async_mmap port `out_2.write_data` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_data_write` is connected to async_mmap port `out_2.write_data` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_resp_s_dout` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_resp_s_dout` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.b_write_resp_peek_dout` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.b_write_resp_peek_dout` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_resp_s_empty_n` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_resp_s_empty_n` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.b_write_resp_peek_empty_n` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.b_write_resp_peek_empty_n` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_resp_s_read` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.683 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_resp_s_read` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_addr_din` is connected to async_mmap port `in_2.read_addr` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_addr_din` is connected to async_mmap port `in_2.read_addr` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_addr_full_n` is connected to async_mmap port `in_2.read_addr` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_addr_full_n` is connected to async_mmap port `in_2.read_addr` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_addr_write` is connected to async_mmap port `in_2.read_addr` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_addr_write` is connected to async_mmap port `in_2.read_addr` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_data_s_dout` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_data_s_dout` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.a_read_data_peek_dout` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.a_read_data_peek_dout` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_data_s_empty_n` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_data_s_empty_n` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.a_read_data_peek_empty_n` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.a_read_data_peek_empty_n` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_data_s_read` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_read_data_s_read` is connected to async_mmap port `in_2.read_data` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_addr_din` is connected to async_mmap port `in_2.write_addr` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_addr_din` is connected to async_mmap port `in_2.write_addr` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_addr_full_n` is connected to async_mmap port `in_2.write_addr` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_addr_full_n` is connected to async_mmap port `in_2.write_addr` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_addr_write` is connected to async_mmap port `in_2.write_addr` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_addr_write` is connected to async_mmap port `in_2.write_addr` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_data_din` is connected to async_mmap port `in_2.write_data` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_data_din` is connected to async_mmap port `in_2.write_data` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_data_full_n` is connected to async_mmap port `in_2.write_data` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_data_full_n` is connected to async_mmap port `in_2.write_data` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_data_write` is connected to async_mmap port `in_2.write_data` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_data_write` is connected to async_mmap port `in_2.write_data` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_resp_s_dout` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_resp_s_dout` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.a_write_resp_peek_dout` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.a_write_resp_peek_dout` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_resp_s_empty_n` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_resp_s_empty_n` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.a_write_resp_peek_empty_n` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.a_write_resp_peek_empty_n` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_resp_s_read` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.a_write_resp_s_read` is connected to async_mmap port `in_2.write_resp` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_addr_din` is connected to async_mmap port `out_2.read_addr` -D0712 20:03:04.684 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_addr_din` is connected to async_mmap port `out_2.read_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_addr_full_n` is connected to async_mmap port `out_2.read_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_addr_full_n` is connected to async_mmap port `out_2.read_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_addr_write` is connected to async_mmap port `out_2.read_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_addr_write` is connected to async_mmap port `out_2.read_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_data_s_dout` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_data_s_dout` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.b_read_data_peek_dout` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.b_read_data_peek_dout` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_data_s_empty_n` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_data_s_empty_n` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.b_read_data_peek_empty_n` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.b_read_data_peek_empty_n` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_data_s_read` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_read_data_s_read` is connected to async_mmap port `out_2.read_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_addr_din` is connected to async_mmap port `out_2.write_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_addr_din` is connected to async_mmap port `out_2.write_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_addr_full_n` is connected to async_mmap port `out_2.write_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_addr_full_n` is connected to async_mmap port `out_2.write_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_addr_write` is connected to async_mmap port `out_2.write_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_addr_write` is connected to async_mmap port `out_2.write_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_data_din` is connected to async_mmap port `out_2.write_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_data_din` is connected to async_mmap port `out_2.write_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_data_full_n` is connected to async_mmap port `out_2.write_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_data_full_n` is connected to async_mmap port `out_2.write_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_data_write` is connected to async_mmap port `out_2.write_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_data_write` is connected to async_mmap port `out_2.write_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_resp_s_dout` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_resp_s_dout` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.b_write_resp_peek_dout` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.b_write_resp_peek_dout` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_resp_s_empty_n` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_resp_s_empty_n` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.b_write_resp_peek_empty_n` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_2.b_write_resp_peek_empty_n` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_resp_s_read` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_2.b_write_resp_s_read` is connected to async_mmap port `out_2.write_resp` -D0712 20:03:04.685 tapa.core:671] pipelined signal: in_3 => inter_kernel_3___in_3 -D0712 20:03:04.685 tapa.core:671] pipelined signal: in_3 => inter_kernel_3___in_3 -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_addr_din` is connected to async_mmap port `in_3.read_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_addr_din` is connected to async_mmap port `in_3.read_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_addr_full_n` is connected to async_mmap port `in_3.read_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_addr_full_n` is connected to async_mmap port `in_3.read_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_addr_write` is connected to async_mmap port `in_3.read_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_addr_write` is connected to async_mmap port `in_3.read_addr` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_data_s_dout` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_data_s_dout` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.a_read_data_peek_dout` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.685 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.a_read_data_peek_dout` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_data_s_empty_n` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_data_s_empty_n` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.a_read_data_peek_empty_n` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.a_read_data_peek_empty_n` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_data_s_read` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_data_s_read` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_addr_din` is connected to async_mmap port `in_3.write_addr` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_addr_din` is connected to async_mmap port `in_3.write_addr` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_addr_full_n` is connected to async_mmap port `in_3.write_addr` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_addr_full_n` is connected to async_mmap port `in_3.write_addr` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_addr_write` is connected to async_mmap port `in_3.write_addr` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_addr_write` is connected to async_mmap port `in_3.write_addr` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_data_din` is connected to async_mmap port `in_3.write_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_data_din` is connected to async_mmap port `in_3.write_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_data_full_n` is connected to async_mmap port `in_3.write_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_data_full_n` is connected to async_mmap port `in_3.write_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_data_write` is connected to async_mmap port `in_3.write_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_data_write` is connected to async_mmap port `in_3.write_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_resp_s_dout` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_resp_s_dout` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.a_write_resp_peek_dout` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.a_write_resp_peek_dout` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_resp_s_empty_n` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_resp_s_empty_n` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.a_write_resp_peek_empty_n` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.a_write_resp_peek_empty_n` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_resp_s_read` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_resp_s_read` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.686 tapa.core:671] pipelined signal: iters => inter_kernel_3___iters -D0712 20:03:04.686 tapa.core:671] pipelined signal: iters => inter_kernel_3___iters -D0712 20:03:04.686 tapa.core:671] pipelined signal: out_3 => inter_kernel_3___out_3 -D0712 20:03:04.686 tapa.core:671] pipelined signal: out_3 => inter_kernel_3___out_3 -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_addr_din` is connected to async_mmap port `out_3.read_addr` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_addr_din` is connected to async_mmap port `out_3.read_addr` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_addr_full_n` is connected to async_mmap port `out_3.read_addr` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_addr_full_n` is connected to async_mmap port `out_3.read_addr` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_addr_write` is connected to async_mmap port `out_3.read_addr` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_addr_write` is connected to async_mmap port `out_3.read_addr` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_data_s_dout` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_data_s_dout` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.b_read_data_peek_dout` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.b_read_data_peek_dout` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_data_s_empty_n` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.686 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_data_s_empty_n` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.b_read_data_peek_empty_n` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.b_read_data_peek_empty_n` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_data_s_read` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_data_s_read` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_addr_din` is connected to async_mmap port `out_3.write_addr` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_addr_din` is connected to async_mmap port `out_3.write_addr` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_addr_full_n` is connected to async_mmap port `out_3.write_addr` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_addr_full_n` is connected to async_mmap port `out_3.write_addr` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_addr_write` is connected to async_mmap port `out_3.write_addr` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_addr_write` is connected to async_mmap port `out_3.write_addr` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_data_din` is connected to async_mmap port `out_3.write_data` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_data_din` is connected to async_mmap port `out_3.write_data` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_data_full_n` is connected to async_mmap port `out_3.write_data` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_data_full_n` is connected to async_mmap port `out_3.write_data` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_data_write` is connected to async_mmap port `out_3.write_data` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_data_write` is connected to async_mmap port `out_3.write_data` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_resp_s_dout` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_resp_s_dout` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.b_write_resp_peek_dout` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.b_write_resp_peek_dout` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_resp_s_empty_n` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_resp_s_empty_n` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.b_write_resp_peek_empty_n` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.b_write_resp_peek_empty_n` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_resp_s_read` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_resp_s_read` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_addr_din` is connected to async_mmap port `in_3.read_addr` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_addr_din` is connected to async_mmap port `in_3.read_addr` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_addr_full_n` is connected to async_mmap port `in_3.read_addr` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_addr_full_n` is connected to async_mmap port `in_3.read_addr` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_addr_write` is connected to async_mmap port `in_3.read_addr` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_addr_write` is connected to async_mmap port `in_3.read_addr` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_data_s_dout` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_data_s_dout` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.a_read_data_peek_dout` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.687 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.a_read_data_peek_dout` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_data_s_empty_n` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_data_s_empty_n` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.a_read_data_peek_empty_n` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.a_read_data_peek_empty_n` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_data_s_read` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_read_data_s_read` is connected to async_mmap port `in_3.read_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_addr_din` is connected to async_mmap port `in_3.write_addr` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_addr_din` is connected to async_mmap port `in_3.write_addr` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_addr_full_n` is connected to async_mmap port `in_3.write_addr` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_addr_full_n` is connected to async_mmap port `in_3.write_addr` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_addr_write` is connected to async_mmap port `in_3.write_addr` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_addr_write` is connected to async_mmap port `in_3.write_addr` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_data_din` is connected to async_mmap port `in_3.write_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_data_din` is connected to async_mmap port `in_3.write_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_data_full_n` is connected to async_mmap port `in_3.write_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_data_full_n` is connected to async_mmap port `in_3.write_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_data_write` is connected to async_mmap port `in_3.write_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_data_write` is connected to async_mmap port `in_3.write_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_resp_s_dout` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_resp_s_dout` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.a_write_resp_peek_dout` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.a_write_resp_peek_dout` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_resp_s_empty_n` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_resp_s_empty_n` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.a_write_resp_peek_empty_n` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.a_write_resp_peek_empty_n` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_resp_s_read` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.a_write_resp_s_read` is connected to async_mmap port `in_3.write_resp` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_addr_din` is connected to async_mmap port `out_3.read_addr` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_addr_din` is connected to async_mmap port `out_3.read_addr` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_addr_full_n` is connected to async_mmap port `out_3.read_addr` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_addr_full_n` is connected to async_mmap port `out_3.read_addr` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_addr_write` is connected to async_mmap port `out_3.read_addr` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_addr_write` is connected to async_mmap port `out_3.read_addr` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_data_s_dout` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_data_s_dout` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.b_read_data_peek_dout` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.b_read_data_peek_dout` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_data_s_empty_n` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.688 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_data_s_empty_n` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.b_read_data_peek_empty_n` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.b_read_data_peek_empty_n` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_data_s_read` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_read_data_s_read` is connected to async_mmap port `out_3.read_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_addr_din` is connected to async_mmap port `out_3.write_addr` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_addr_din` is connected to async_mmap port `out_3.write_addr` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_addr_full_n` is connected to async_mmap port `out_3.write_addr` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_addr_full_n` is connected to async_mmap port `out_3.write_addr` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_addr_write` is connected to async_mmap port `out_3.write_addr` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_addr_write` is connected to async_mmap port `out_3.write_addr` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_data_din` is connected to async_mmap port `out_3.write_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_data_din` is connected to async_mmap port `out_3.write_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_data_full_n` is connected to async_mmap port `out_3.write_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_data_full_n` is connected to async_mmap port `out_3.write_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_data_write` is connected to async_mmap port `out_3.write_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_data_write` is connected to async_mmap port `out_3.write_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_resp_s_dout` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_resp_s_dout` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.b_write_resp_peek_dout` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.b_write_resp_peek_dout` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_resp_s_empty_n` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_resp_s_empty_n` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.b_write_resp_peek_empty_n` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_3.b_write_resp_peek_empty_n` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_resp_s_read` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_3.b_write_resp_s_read` is connected to async_mmap port `out_3.write_resp` -D0712 20:03:04.689 tapa.core:671] pipelined signal: in_4 => inter_kernel_4___in_4 -D0712 20:03:04.689 tapa.core:671] pipelined signal: in_4 => inter_kernel_4___in_4 -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_addr_din` is connected to async_mmap port `in_4.read_addr` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_addr_din` is connected to async_mmap port `in_4.read_addr` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_addr_full_n` is connected to async_mmap port `in_4.read_addr` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_addr_full_n` is connected to async_mmap port `in_4.read_addr` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_addr_write` is connected to async_mmap port `in_4.read_addr` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_addr_write` is connected to async_mmap port `in_4.read_addr` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_data_s_dout` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_data_s_dout` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.a_read_data_peek_dout` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.a_read_data_peek_dout` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_data_s_empty_n` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_data_s_empty_n` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.a_read_data_peek_empty_n` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.a_read_data_peek_empty_n` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_data_s_read` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_data_s_read` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_addr_din` is connected to async_mmap port `in_4.write_addr` -D0712 20:03:04.689 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_addr_din` is connected to async_mmap port `in_4.write_addr` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_addr_full_n` is connected to async_mmap port `in_4.write_addr` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_addr_full_n` is connected to async_mmap port `in_4.write_addr` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_addr_write` is connected to async_mmap port `in_4.write_addr` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_addr_write` is connected to async_mmap port `in_4.write_addr` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_data_din` is connected to async_mmap port `in_4.write_data` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_data_din` is connected to async_mmap port `in_4.write_data` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_data_full_n` is connected to async_mmap port `in_4.write_data` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_data_full_n` is connected to async_mmap port `in_4.write_data` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_data_write` is connected to async_mmap port `in_4.write_data` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_data_write` is connected to async_mmap port `in_4.write_data` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_resp_s_dout` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_resp_s_dout` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.a_write_resp_peek_dout` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.a_write_resp_peek_dout` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_resp_s_empty_n` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_resp_s_empty_n` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.a_write_resp_peek_empty_n` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.a_write_resp_peek_empty_n` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_resp_s_read` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_resp_s_read` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.690 tapa.core:671] pipelined signal: iters => inter_kernel_4___iters -D0712 20:03:04.690 tapa.core:671] pipelined signal: iters => inter_kernel_4___iters -D0712 20:03:04.690 tapa.core:671] pipelined signal: out_4 => inter_kernel_4___out_4 -D0712 20:03:04.690 tapa.core:671] pipelined signal: out_4 => inter_kernel_4___out_4 -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_addr_din` is connected to async_mmap port `out_4.read_addr` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_addr_din` is connected to async_mmap port `out_4.read_addr` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_addr_full_n` is connected to async_mmap port `out_4.read_addr` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_addr_full_n` is connected to async_mmap port `out_4.read_addr` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_addr_write` is connected to async_mmap port `out_4.read_addr` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_addr_write` is connected to async_mmap port `out_4.read_addr` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_data_s_dout` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_data_s_dout` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.b_read_data_peek_dout` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.b_read_data_peek_dout` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_data_s_empty_n` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_data_s_empty_n` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.b_read_data_peek_empty_n` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.b_read_data_peek_empty_n` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_data_s_read` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_data_s_read` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_addr_din` is connected to async_mmap port `out_4.write_addr` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_addr_din` is connected to async_mmap port `out_4.write_addr` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_addr_full_n` is connected to async_mmap port `out_4.write_addr` -D0712 20:03:04.690 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_addr_full_n` is connected to async_mmap port `out_4.write_addr` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_addr_write` is connected to async_mmap port `out_4.write_addr` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_addr_write` is connected to async_mmap port `out_4.write_addr` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_data_din` is connected to async_mmap port `out_4.write_data` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_data_din` is connected to async_mmap port `out_4.write_data` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_data_full_n` is connected to async_mmap port `out_4.write_data` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_data_full_n` is connected to async_mmap port `out_4.write_data` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_data_write` is connected to async_mmap port `out_4.write_data` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_data_write` is connected to async_mmap port `out_4.write_data` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_resp_s_dout` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_resp_s_dout` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.b_write_resp_peek_dout` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.b_write_resp_peek_dout` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_resp_s_empty_n` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_resp_s_empty_n` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.b_write_resp_peek_empty_n` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.b_write_resp_peek_empty_n` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_resp_s_read` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_resp_s_read` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_addr_din` is connected to async_mmap port `in_4.read_addr` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_addr_din` is connected to async_mmap port `in_4.read_addr` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_addr_full_n` is connected to async_mmap port `in_4.read_addr` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_addr_full_n` is connected to async_mmap port `in_4.read_addr` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_addr_write` is connected to async_mmap port `in_4.read_addr` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_addr_write` is connected to async_mmap port `in_4.read_addr` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_data_s_dout` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_data_s_dout` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.a_read_data_peek_dout` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.a_read_data_peek_dout` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_data_s_empty_n` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_data_s_empty_n` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.a_read_data_peek_empty_n` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.a_read_data_peek_empty_n` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_data_s_read` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_read_data_s_read` is connected to async_mmap port `in_4.read_data` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_addr_din` is connected to async_mmap port `in_4.write_addr` -D0712 20:03:04.691 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_addr_din` is connected to async_mmap port `in_4.write_addr` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_addr_full_n` is connected to async_mmap port `in_4.write_addr` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_addr_full_n` is connected to async_mmap port `in_4.write_addr` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_addr_write` is connected to async_mmap port `in_4.write_addr` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_addr_write` is connected to async_mmap port `in_4.write_addr` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_data_din` is connected to async_mmap port `in_4.write_data` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_data_din` is connected to async_mmap port `in_4.write_data` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_data_full_n` is connected to async_mmap port `in_4.write_data` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_data_full_n` is connected to async_mmap port `in_4.write_data` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_data_write` is connected to async_mmap port `in_4.write_data` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_data_write` is connected to async_mmap port `in_4.write_data` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_resp_s_dout` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_resp_s_dout` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.a_write_resp_peek_dout` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.a_write_resp_peek_dout` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_resp_s_empty_n` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_resp_s_empty_n` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.a_write_resp_peek_empty_n` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.a_write_resp_peek_empty_n` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_resp_s_read` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.a_write_resp_s_read` is connected to async_mmap port `in_4.write_resp` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_addr_din` is connected to async_mmap port `out_4.read_addr` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_addr_din` is connected to async_mmap port `out_4.read_addr` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_addr_full_n` is connected to async_mmap port `out_4.read_addr` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_addr_full_n` is connected to async_mmap port `out_4.read_addr` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_addr_write` is connected to async_mmap port `out_4.read_addr` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_addr_write` is connected to async_mmap port `out_4.read_addr` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_data_s_dout` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_data_s_dout` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.b_read_data_peek_dout` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.b_read_data_peek_dout` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_data_s_empty_n` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_data_s_empty_n` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.b_read_data_peek_empty_n` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.b_read_data_peek_empty_n` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_data_s_read` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_read_data_s_read` is connected to async_mmap port `out_4.read_data` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_addr_din` is connected to async_mmap port `out_4.write_addr` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_addr_din` is connected to async_mmap port `out_4.write_addr` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_addr_full_n` is connected to async_mmap port `out_4.write_addr` -D0712 20:03:04.692 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_addr_full_n` is connected to async_mmap port `out_4.write_addr` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_addr_write` is connected to async_mmap port `out_4.write_addr` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_addr_write` is connected to async_mmap port `out_4.write_addr` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_data_din` is connected to async_mmap port `out_4.write_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_data_din` is connected to async_mmap port `out_4.write_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_data_full_n` is connected to async_mmap port `out_4.write_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_data_full_n` is connected to async_mmap port `out_4.write_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_data_write` is connected to async_mmap port `out_4.write_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_data_write` is connected to async_mmap port `out_4.write_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_resp_s_dout` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_resp_s_dout` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.b_write_resp_peek_dout` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.b_write_resp_peek_dout` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_resp_s_empty_n` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_resp_s_empty_n` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.b_write_resp_peek_empty_n` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_4.b_write_resp_peek_empty_n` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_resp_s_read` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_4.b_write_resp_s_read` is connected to async_mmap port `out_4.write_resp` -D0712 20:03:04.693 tapa.core:671] pipelined signal: in_5 => inter_kernel_5___in_5 -D0712 20:03:04.693 tapa.core:671] pipelined signal: in_5 => inter_kernel_5___in_5 -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_addr_din` is connected to async_mmap port `in_5.read_addr` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_addr_din` is connected to async_mmap port `in_5.read_addr` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_addr_full_n` is connected to async_mmap port `in_5.read_addr` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_addr_full_n` is connected to async_mmap port `in_5.read_addr` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_addr_write` is connected to async_mmap port `in_5.read_addr` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_addr_write` is connected to async_mmap port `in_5.read_addr` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_data_s_dout` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_data_s_dout` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.a_read_data_peek_dout` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.a_read_data_peek_dout` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_data_s_empty_n` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_data_s_empty_n` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.a_read_data_peek_empty_n` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.a_read_data_peek_empty_n` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_data_s_read` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_data_s_read` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_addr_din` is connected to async_mmap port `in_5.write_addr` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_addr_din` is connected to async_mmap port `in_5.write_addr` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_addr_full_n` is connected to async_mmap port `in_5.write_addr` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_addr_full_n` is connected to async_mmap port `in_5.write_addr` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_addr_write` is connected to async_mmap port `in_5.write_addr` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_addr_write` is connected to async_mmap port `in_5.write_addr` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_data_din` is connected to async_mmap port `in_5.write_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_data_din` is connected to async_mmap port `in_5.write_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_data_full_n` is connected to async_mmap port `in_5.write_data` -D0712 20:03:04.693 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_data_full_n` is connected to async_mmap port `in_5.write_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_data_write` is connected to async_mmap port `in_5.write_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_data_write` is connected to async_mmap port `in_5.write_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_resp_s_dout` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_resp_s_dout` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.a_write_resp_peek_dout` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.a_write_resp_peek_dout` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_resp_s_empty_n` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_resp_s_empty_n` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.a_write_resp_peek_empty_n` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.a_write_resp_peek_empty_n` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_resp_s_read` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_resp_s_read` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.694 tapa.core:671] pipelined signal: iters => inter_kernel_5___iters -D0712 20:03:04.694 tapa.core:671] pipelined signal: iters => inter_kernel_5___iters -D0712 20:03:04.694 tapa.core:671] pipelined signal: out_5 => inter_kernel_5___out_5 -D0712 20:03:04.694 tapa.core:671] pipelined signal: out_5 => inter_kernel_5___out_5 -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_addr_din` is connected to async_mmap port `out_5.read_addr` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_addr_din` is connected to async_mmap port `out_5.read_addr` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_addr_full_n` is connected to async_mmap port `out_5.read_addr` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_addr_full_n` is connected to async_mmap port `out_5.read_addr` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_addr_write` is connected to async_mmap port `out_5.read_addr` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_addr_write` is connected to async_mmap port `out_5.read_addr` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_data_s_dout` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_data_s_dout` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.b_read_data_peek_dout` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.b_read_data_peek_dout` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_data_s_empty_n` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_data_s_empty_n` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.b_read_data_peek_empty_n` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.b_read_data_peek_empty_n` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_data_s_read` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_data_s_read` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_addr_din` is connected to async_mmap port `out_5.write_addr` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_addr_din` is connected to async_mmap port `out_5.write_addr` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_addr_full_n` is connected to async_mmap port `out_5.write_addr` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_addr_full_n` is connected to async_mmap port `out_5.write_addr` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_addr_write` is connected to async_mmap port `out_5.write_addr` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_addr_write` is connected to async_mmap port `out_5.write_addr` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_data_din` is connected to async_mmap port `out_5.write_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_data_din` is connected to async_mmap port `out_5.write_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_data_full_n` is connected to async_mmap port `out_5.write_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_data_full_n` is connected to async_mmap port `out_5.write_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_data_write` is connected to async_mmap port `out_5.write_data` -D0712 20:03:04.694 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_data_write` is connected to async_mmap port `out_5.write_data` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_resp_s_dout` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_resp_s_dout` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.b_write_resp_peek_dout` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.b_write_resp_peek_dout` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_resp_s_empty_n` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_resp_s_empty_n` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.b_write_resp_peek_empty_n` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.b_write_resp_peek_empty_n` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_resp_s_read` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_resp_s_read` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_addr_din` is connected to async_mmap port `in_5.read_addr` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_addr_din` is connected to async_mmap port `in_5.read_addr` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_addr_full_n` is connected to async_mmap port `in_5.read_addr` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_addr_full_n` is connected to async_mmap port `in_5.read_addr` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_addr_write` is connected to async_mmap port `in_5.read_addr` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_addr_write` is connected to async_mmap port `in_5.read_addr` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_data_s_dout` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_data_s_dout` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.a_read_data_peek_dout` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.a_read_data_peek_dout` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_data_s_empty_n` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_data_s_empty_n` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.a_read_data_peek_empty_n` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.a_read_data_peek_empty_n` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_data_s_read` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_read_data_s_read` is connected to async_mmap port `in_5.read_data` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_addr_din` is connected to async_mmap port `in_5.write_addr` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_addr_din` is connected to async_mmap port `in_5.write_addr` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_addr_full_n` is connected to async_mmap port `in_5.write_addr` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_addr_full_n` is connected to async_mmap port `in_5.write_addr` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_addr_write` is connected to async_mmap port `in_5.write_addr` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_addr_write` is connected to async_mmap port `in_5.write_addr` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_data_din` is connected to async_mmap port `in_5.write_data` -D0712 20:03:04.695 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_data_din` is connected to async_mmap port `in_5.write_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_data_full_n` is connected to async_mmap port `in_5.write_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_data_full_n` is connected to async_mmap port `in_5.write_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_data_write` is connected to async_mmap port `in_5.write_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_data_write` is connected to async_mmap port `in_5.write_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_resp_s_dout` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_resp_s_dout` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.a_write_resp_peek_dout` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.a_write_resp_peek_dout` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_resp_s_empty_n` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_resp_s_empty_n` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.a_write_resp_peek_empty_n` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.a_write_resp_peek_empty_n` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_resp_s_read` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.a_write_resp_s_read` is connected to async_mmap port `in_5.write_resp` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_addr_din` is connected to async_mmap port `out_5.read_addr` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_addr_din` is connected to async_mmap port `out_5.read_addr` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_addr_full_n` is connected to async_mmap port `out_5.read_addr` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_addr_full_n` is connected to async_mmap port `out_5.read_addr` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_addr_write` is connected to async_mmap port `out_5.read_addr` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_addr_write` is connected to async_mmap port `out_5.read_addr` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_data_s_dout` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_data_s_dout` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.b_read_data_peek_dout` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.b_read_data_peek_dout` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_data_s_empty_n` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_data_s_empty_n` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.b_read_data_peek_empty_n` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.b_read_data_peek_empty_n` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_data_s_read` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_read_data_s_read` is connected to async_mmap port `out_5.read_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_addr_din` is connected to async_mmap port `out_5.write_addr` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_addr_din` is connected to async_mmap port `out_5.write_addr` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_addr_full_n` is connected to async_mmap port `out_5.write_addr` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_addr_full_n` is connected to async_mmap port `out_5.write_addr` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_addr_write` is connected to async_mmap port `out_5.write_addr` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_addr_write` is connected to async_mmap port `out_5.write_addr` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_data_din` is connected to async_mmap port `out_5.write_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_data_din` is connected to async_mmap port `out_5.write_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_data_full_n` is connected to async_mmap port `out_5.write_data` -D0712 20:03:04.696 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_data_full_n` is connected to async_mmap port `out_5.write_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_data_write` is connected to async_mmap port `out_5.write_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_data_write` is connected to async_mmap port `out_5.write_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_resp_s_dout` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_resp_s_dout` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.b_write_resp_peek_dout` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.b_write_resp_peek_dout` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_resp_s_empty_n` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_resp_s_empty_n` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.b_write_resp_peek_empty_n` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_5.b_write_resp_peek_empty_n` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_resp_s_read` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_5.b_write_resp_s_read` is connected to async_mmap port `out_5.write_resp` -D0712 20:03:04.697 tapa.core:671] pipelined signal: in_6 => inter_kernel_6___in_6 -D0712 20:03:04.697 tapa.core:671] pipelined signal: in_6 => inter_kernel_6___in_6 -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_addr_din` is connected to async_mmap port `in_6.read_addr` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_addr_din` is connected to async_mmap port `in_6.read_addr` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_addr_full_n` is connected to async_mmap port `in_6.read_addr` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_addr_full_n` is connected to async_mmap port `in_6.read_addr` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_addr_write` is connected to async_mmap port `in_6.read_addr` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_addr_write` is connected to async_mmap port `in_6.read_addr` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_data_s_dout` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_data_s_dout` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.a_read_data_peek_dout` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.a_read_data_peek_dout` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_data_s_empty_n` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_data_s_empty_n` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.a_read_data_peek_empty_n` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.a_read_data_peek_empty_n` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_data_s_read` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_data_s_read` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_addr_din` is connected to async_mmap port `in_6.write_addr` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_addr_din` is connected to async_mmap port `in_6.write_addr` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_addr_full_n` is connected to async_mmap port `in_6.write_addr` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_addr_full_n` is connected to async_mmap port `in_6.write_addr` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_addr_write` is connected to async_mmap port `in_6.write_addr` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_addr_write` is connected to async_mmap port `in_6.write_addr` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_data_din` is connected to async_mmap port `in_6.write_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_data_din` is connected to async_mmap port `in_6.write_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_data_full_n` is connected to async_mmap port `in_6.write_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_data_full_n` is connected to async_mmap port `in_6.write_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_data_write` is connected to async_mmap port `in_6.write_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_data_write` is connected to async_mmap port `in_6.write_data` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_resp_s_dout` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_resp_s_dout` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.a_write_resp_peek_dout` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.a_write_resp_peek_dout` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_resp_s_empty_n` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.697 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_resp_s_empty_n` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.a_write_resp_peek_empty_n` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.a_write_resp_peek_empty_n` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_resp_s_read` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_resp_s_read` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.698 tapa.core:671] pipelined signal: iters => inter_kernel_6___iters -D0712 20:03:04.698 tapa.core:671] pipelined signal: iters => inter_kernel_6___iters -D0712 20:03:04.698 tapa.core:671] pipelined signal: out_6 => inter_kernel_6___out_6 -D0712 20:03:04.698 tapa.core:671] pipelined signal: out_6 => inter_kernel_6___out_6 -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_addr_din` is connected to async_mmap port `out_6.read_addr` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_addr_din` is connected to async_mmap port `out_6.read_addr` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_addr_full_n` is connected to async_mmap port `out_6.read_addr` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_addr_full_n` is connected to async_mmap port `out_6.read_addr` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_addr_write` is connected to async_mmap port `out_6.read_addr` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_addr_write` is connected to async_mmap port `out_6.read_addr` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_data_s_dout` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_data_s_dout` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.b_read_data_peek_dout` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.b_read_data_peek_dout` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_data_s_empty_n` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_data_s_empty_n` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.b_read_data_peek_empty_n` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.b_read_data_peek_empty_n` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_data_s_read` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_data_s_read` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_addr_din` is connected to async_mmap port `out_6.write_addr` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_addr_din` is connected to async_mmap port `out_6.write_addr` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_addr_full_n` is connected to async_mmap port `out_6.write_addr` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_addr_full_n` is connected to async_mmap port `out_6.write_addr` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_addr_write` is connected to async_mmap port `out_6.write_addr` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_addr_write` is connected to async_mmap port `out_6.write_addr` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_data_din` is connected to async_mmap port `out_6.write_data` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_data_din` is connected to async_mmap port `out_6.write_data` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_data_full_n` is connected to async_mmap port `out_6.write_data` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_data_full_n` is connected to async_mmap port `out_6.write_data` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_data_write` is connected to async_mmap port `out_6.write_data` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_data_write` is connected to async_mmap port `out_6.write_data` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_resp_s_dout` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_resp_s_dout` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.b_write_resp_peek_dout` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.b_write_resp_peek_dout` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_resp_s_empty_n` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_resp_s_empty_n` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.b_write_resp_peek_empty_n` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.698 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.b_write_resp_peek_empty_n` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_resp_s_read` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_resp_s_read` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_addr_din` is connected to async_mmap port `in_6.read_addr` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_addr_din` is connected to async_mmap port `in_6.read_addr` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_addr_full_n` is connected to async_mmap port `in_6.read_addr` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_addr_full_n` is connected to async_mmap port `in_6.read_addr` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_addr_write` is connected to async_mmap port `in_6.read_addr` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_addr_write` is connected to async_mmap port `in_6.read_addr` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_data_s_dout` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_data_s_dout` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.a_read_data_peek_dout` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.a_read_data_peek_dout` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_data_s_empty_n` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_data_s_empty_n` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.a_read_data_peek_empty_n` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.a_read_data_peek_empty_n` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_data_s_read` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_read_data_s_read` is connected to async_mmap port `in_6.read_data` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_addr_din` is connected to async_mmap port `in_6.write_addr` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_addr_din` is connected to async_mmap port `in_6.write_addr` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_addr_full_n` is connected to async_mmap port `in_6.write_addr` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_addr_full_n` is connected to async_mmap port `in_6.write_addr` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_addr_write` is connected to async_mmap port `in_6.write_addr` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_addr_write` is connected to async_mmap port `in_6.write_addr` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_data_din` is connected to async_mmap port `in_6.write_data` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_data_din` is connected to async_mmap port `in_6.write_data` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_data_full_n` is connected to async_mmap port `in_6.write_data` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_data_full_n` is connected to async_mmap port `in_6.write_data` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_data_write` is connected to async_mmap port `in_6.write_data` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_data_write` is connected to async_mmap port `in_6.write_data` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_resp_s_dout` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_resp_s_dout` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.a_write_resp_peek_dout` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.699 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.a_write_resp_peek_dout` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_resp_s_empty_n` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_resp_s_empty_n` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.a_write_resp_peek_empty_n` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.a_write_resp_peek_empty_n` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_resp_s_read` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.a_write_resp_s_read` is connected to async_mmap port `in_6.write_resp` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_addr_din` is connected to async_mmap port `out_6.read_addr` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_addr_din` is connected to async_mmap port `out_6.read_addr` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_addr_full_n` is connected to async_mmap port `out_6.read_addr` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_addr_full_n` is connected to async_mmap port `out_6.read_addr` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_addr_write` is connected to async_mmap port `out_6.read_addr` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_addr_write` is connected to async_mmap port `out_6.read_addr` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_data_s_dout` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_data_s_dout` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.b_read_data_peek_dout` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.b_read_data_peek_dout` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_data_s_empty_n` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_data_s_empty_n` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.b_read_data_peek_empty_n` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.b_read_data_peek_empty_n` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_data_s_read` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_read_data_s_read` is connected to async_mmap port `out_6.read_data` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_addr_din` is connected to async_mmap port `out_6.write_addr` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_addr_din` is connected to async_mmap port `out_6.write_addr` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_addr_full_n` is connected to async_mmap port `out_6.write_addr` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_addr_full_n` is connected to async_mmap port `out_6.write_addr` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_addr_write` is connected to async_mmap port `out_6.write_addr` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_addr_write` is connected to async_mmap port `out_6.write_addr` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_data_din` is connected to async_mmap port `out_6.write_data` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_data_din` is connected to async_mmap port `out_6.write_data` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_data_full_n` is connected to async_mmap port `out_6.write_data` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_data_full_n` is connected to async_mmap port `out_6.write_data` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_data_write` is connected to async_mmap port `out_6.write_data` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_data_write` is connected to async_mmap port `out_6.write_data` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_resp_s_dout` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_resp_s_dout` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.b_write_resp_peek_dout` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.b_write_resp_peek_dout` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_resp_s_empty_n` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.700 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_resp_s_empty_n` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.b_write_resp_peek_empty_n` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_6.b_write_resp_peek_empty_n` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_resp_s_read` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_6.b_write_resp_s_read` is connected to async_mmap port `out_6.write_resp` -D0712 20:03:04.701 tapa.core:671] pipelined signal: in_7 => inter_kernel_7___in_7 -D0712 20:03:04.701 tapa.core:671] pipelined signal: in_7 => inter_kernel_7___in_7 -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_addr_din` is connected to async_mmap port `in_7.read_addr` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_addr_din` is connected to async_mmap port `in_7.read_addr` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_addr_full_n` is connected to async_mmap port `in_7.read_addr` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_addr_full_n` is connected to async_mmap port `in_7.read_addr` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_addr_write` is connected to async_mmap port `in_7.read_addr` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_addr_write` is connected to async_mmap port `in_7.read_addr` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_data_s_dout` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_data_s_dout` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.a_read_data_peek_dout` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.a_read_data_peek_dout` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_data_s_empty_n` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_data_s_empty_n` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.a_read_data_peek_empty_n` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.a_read_data_peek_empty_n` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_data_s_read` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_data_s_read` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_addr_din` is connected to async_mmap port `in_7.write_addr` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_addr_din` is connected to async_mmap port `in_7.write_addr` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_addr_full_n` is connected to async_mmap port `in_7.write_addr` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_addr_full_n` is connected to async_mmap port `in_7.write_addr` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_addr_write` is connected to async_mmap port `in_7.write_addr` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_addr_write` is connected to async_mmap port `in_7.write_addr` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_data_din` is connected to async_mmap port `in_7.write_data` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_data_din` is connected to async_mmap port `in_7.write_data` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_data_full_n` is connected to async_mmap port `in_7.write_data` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_data_full_n` is connected to async_mmap port `in_7.write_data` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_data_write` is connected to async_mmap port `in_7.write_data` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_data_write` is connected to async_mmap port `in_7.write_data` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_resp_s_dout` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_resp_s_dout` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.a_write_resp_peek_dout` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.a_write_resp_peek_dout` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_resp_s_empty_n` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_resp_s_empty_n` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.a_write_resp_peek_empty_n` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.a_write_resp_peek_empty_n` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_resp_s_read` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.701 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_resp_s_read` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.702 tapa.core:671] pipelined signal: iters => inter_kernel_7___iters -D0712 20:03:04.702 tapa.core:671] pipelined signal: iters => inter_kernel_7___iters -D0712 20:03:04.702 tapa.core:671] pipelined signal: out_7 => inter_kernel_7___out_7 -D0712 20:03:04.702 tapa.core:671] pipelined signal: out_7 => inter_kernel_7___out_7 -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_addr_din` is connected to async_mmap port `out_7.read_addr` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_addr_din` is connected to async_mmap port `out_7.read_addr` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_addr_full_n` is connected to async_mmap port `out_7.read_addr` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_addr_full_n` is connected to async_mmap port `out_7.read_addr` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_addr_write` is connected to async_mmap port `out_7.read_addr` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_addr_write` is connected to async_mmap port `out_7.read_addr` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_data_s_dout` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_data_s_dout` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.b_read_data_peek_dout` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.b_read_data_peek_dout` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_data_s_empty_n` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_data_s_empty_n` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.b_read_data_peek_empty_n` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.b_read_data_peek_empty_n` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_data_s_read` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_data_s_read` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_addr_din` is connected to async_mmap port `out_7.write_addr` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_addr_din` is connected to async_mmap port `out_7.write_addr` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_addr_full_n` is connected to async_mmap port `out_7.write_addr` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_addr_full_n` is connected to async_mmap port `out_7.write_addr` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_addr_write` is connected to async_mmap port `out_7.write_addr` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_addr_write` is connected to async_mmap port `out_7.write_addr` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_data_din` is connected to async_mmap port `out_7.write_data` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_data_din` is connected to async_mmap port `out_7.write_data` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_data_full_n` is connected to async_mmap port `out_7.write_data` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_data_full_n` is connected to async_mmap port `out_7.write_data` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_data_write` is connected to async_mmap port `out_7.write_data` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_data_write` is connected to async_mmap port `out_7.write_data` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_resp_s_dout` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_resp_s_dout` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.b_write_resp_peek_dout` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.b_write_resp_peek_dout` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_resp_s_empty_n` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_resp_s_empty_n` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.b_write_resp_peek_empty_n` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.b_write_resp_peek_empty_n` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_resp_s_read` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.702 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_resp_s_read` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_addr_din` is connected to async_mmap port `in_7.read_addr` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_addr_din` is connected to async_mmap port `in_7.read_addr` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_addr_full_n` is connected to async_mmap port `in_7.read_addr` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_addr_full_n` is connected to async_mmap port `in_7.read_addr` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_addr_write` is connected to async_mmap port `in_7.read_addr` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_addr_write` is connected to async_mmap port `in_7.read_addr` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_data_s_dout` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_data_s_dout` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.a_read_data_peek_dout` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.a_read_data_peek_dout` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_data_s_empty_n` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_data_s_empty_n` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.a_read_data_peek_empty_n` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.a_read_data_peek_empty_n` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_data_s_read` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_read_data_s_read` is connected to async_mmap port `in_7.read_data` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_addr_din` is connected to async_mmap port `in_7.write_addr` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_addr_din` is connected to async_mmap port `in_7.write_addr` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_addr_full_n` is connected to async_mmap port `in_7.write_addr` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_addr_full_n` is connected to async_mmap port `in_7.write_addr` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_addr_write` is connected to async_mmap port `in_7.write_addr` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_addr_write` is connected to async_mmap port `in_7.write_addr` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_data_din` is connected to async_mmap port `in_7.write_data` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_data_din` is connected to async_mmap port `in_7.write_data` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_data_full_n` is connected to async_mmap port `in_7.write_data` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_data_full_n` is connected to async_mmap port `in_7.write_data` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_data_write` is connected to async_mmap port `in_7.write_data` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_data_write` is connected to async_mmap port `in_7.write_data` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_resp_s_dout` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_resp_s_dout` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.a_write_resp_peek_dout` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.a_write_resp_peek_dout` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_resp_s_empty_n` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_resp_s_empty_n` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.a_write_resp_peek_empty_n` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.a_write_resp_peek_empty_n` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_resp_s_read` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.703 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.a_write_resp_s_read` is connected to async_mmap port `in_7.write_resp` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_addr_din` is connected to async_mmap port `out_7.read_addr` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_addr_din` is connected to async_mmap port `out_7.read_addr` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_addr_full_n` is connected to async_mmap port `out_7.read_addr` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_addr_full_n` is connected to async_mmap port `out_7.read_addr` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_addr_write` is connected to async_mmap port `out_7.read_addr` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_addr_write` is connected to async_mmap port `out_7.read_addr` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_data_s_dout` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_data_s_dout` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.b_read_data_peek_dout` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.b_read_data_peek_dout` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_data_s_empty_n` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_data_s_empty_n` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.b_read_data_peek_empty_n` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.b_read_data_peek_empty_n` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_data_s_read` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_read_data_s_read` is connected to async_mmap port `out_7.read_data` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_addr_din` is connected to async_mmap port `out_7.write_addr` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_addr_din` is connected to async_mmap port `out_7.write_addr` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_addr_full_n` is connected to async_mmap port `out_7.write_addr` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_addr_full_n` is connected to async_mmap port `out_7.write_addr` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_addr_write` is connected to async_mmap port `out_7.write_addr` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_addr_write` is connected to async_mmap port `out_7.write_addr` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_data_din` is connected to async_mmap port `out_7.write_data` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_data_din` is connected to async_mmap port `out_7.write_data` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_data_full_n` is connected to async_mmap port `out_7.write_data` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_data_full_n` is connected to async_mmap port `out_7.write_data` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_data_write` is connected to async_mmap port `out_7.write_data` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_data_write` is connected to async_mmap port `out_7.write_data` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_resp_s_dout` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_resp_s_dout` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.b_write_resp_peek_dout` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.b_write_resp_peek_dout` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_resp_s_empty_n` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_resp_s_empty_n` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.b_write_resp_peek_empty_n` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_7.b_write_resp_peek_empty_n` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_resp_s_read` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.704 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_7.b_write_resp_s_read` is connected to async_mmap port `out_7.write_resp` -D0712 20:03:04.705 tapa.core:671] pipelined signal: in_8 => inter_kernel_8___in_8 -D0712 20:03:04.705 tapa.core:671] pipelined signal: in_8 => inter_kernel_8___in_8 -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_addr_din` is connected to async_mmap port `in_8.read_addr` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_addr_din` is connected to async_mmap port `in_8.read_addr` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_addr_full_n` is connected to async_mmap port `in_8.read_addr` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_addr_full_n` is connected to async_mmap port `in_8.read_addr` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_addr_write` is connected to async_mmap port `in_8.read_addr` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_addr_write` is connected to async_mmap port `in_8.read_addr` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_data_s_dout` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_data_s_dout` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.a_read_data_peek_dout` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.a_read_data_peek_dout` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_data_s_empty_n` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_data_s_empty_n` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.a_read_data_peek_empty_n` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.a_read_data_peek_empty_n` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_data_s_read` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_data_s_read` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_addr_din` is connected to async_mmap port `in_8.write_addr` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_addr_din` is connected to async_mmap port `in_8.write_addr` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_addr_full_n` is connected to async_mmap port `in_8.write_addr` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_addr_full_n` is connected to async_mmap port `in_8.write_addr` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_addr_write` is connected to async_mmap port `in_8.write_addr` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_addr_write` is connected to async_mmap port `in_8.write_addr` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_data_din` is connected to async_mmap port `in_8.write_data` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_data_din` is connected to async_mmap port `in_8.write_data` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_data_full_n` is connected to async_mmap port `in_8.write_data` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_data_full_n` is connected to async_mmap port `in_8.write_data` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_data_write` is connected to async_mmap port `in_8.write_data` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_data_write` is connected to async_mmap port `in_8.write_data` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_resp_s_dout` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_resp_s_dout` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.a_write_resp_peek_dout` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.a_write_resp_peek_dout` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_resp_s_empty_n` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_resp_s_empty_n` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.a_write_resp_peek_empty_n` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.a_write_resp_peek_empty_n` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_resp_s_read` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.705 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_resp_s_read` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.706 tapa.core:671] pipelined signal: iters => inter_kernel_8___iters -D0712 20:03:04.706 tapa.core:671] pipelined signal: iters => inter_kernel_8___iters -D0712 20:03:04.706 tapa.core:671] pipelined signal: out_8 => inter_kernel_8___out_8 -D0712 20:03:04.706 tapa.core:671] pipelined signal: out_8 => inter_kernel_8___out_8 -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_addr_din` is connected to async_mmap port `out_8.read_addr` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_addr_din` is connected to async_mmap port `out_8.read_addr` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_addr_full_n` is connected to async_mmap port `out_8.read_addr` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_addr_full_n` is connected to async_mmap port `out_8.read_addr` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_addr_write` is connected to async_mmap port `out_8.read_addr` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_addr_write` is connected to async_mmap port `out_8.read_addr` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_data_s_dout` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_data_s_dout` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.b_read_data_peek_dout` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.b_read_data_peek_dout` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_data_s_empty_n` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_data_s_empty_n` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.b_read_data_peek_empty_n` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.b_read_data_peek_empty_n` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_data_s_read` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_data_s_read` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_addr_din` is connected to async_mmap port `out_8.write_addr` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_addr_din` is connected to async_mmap port `out_8.write_addr` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_addr_full_n` is connected to async_mmap port `out_8.write_addr` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_addr_full_n` is connected to async_mmap port `out_8.write_addr` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_addr_write` is connected to async_mmap port `out_8.write_addr` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_addr_write` is connected to async_mmap port `out_8.write_addr` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_data_din` is connected to async_mmap port `out_8.write_data` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_data_din` is connected to async_mmap port `out_8.write_data` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_data_full_n` is connected to async_mmap port `out_8.write_data` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_data_full_n` is connected to async_mmap port `out_8.write_data` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_data_write` is connected to async_mmap port `out_8.write_data` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_data_write` is connected to async_mmap port `out_8.write_data` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_resp_s_dout` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_resp_s_dout` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.b_write_resp_peek_dout` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.b_write_resp_peek_dout` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_resp_s_empty_n` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_resp_s_empty_n` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.b_write_resp_peek_empty_n` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.b_write_resp_peek_empty_n` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_resp_s_read` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.706 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_resp_s_read` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_addr_din` is connected to async_mmap port `in_8.read_addr` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_addr_din` is connected to async_mmap port `in_8.read_addr` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_addr_full_n` is connected to async_mmap port `in_8.read_addr` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_addr_full_n` is connected to async_mmap port `in_8.read_addr` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_addr_write` is connected to async_mmap port `in_8.read_addr` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_addr_write` is connected to async_mmap port `in_8.read_addr` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_data_s_dout` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_data_s_dout` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.a_read_data_peek_dout` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.a_read_data_peek_dout` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_data_s_empty_n` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_data_s_empty_n` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.a_read_data_peek_empty_n` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.a_read_data_peek_empty_n` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_data_s_read` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_read_data_s_read` is connected to async_mmap port `in_8.read_data` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_addr_din` is connected to async_mmap port `in_8.write_addr` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_addr_din` is connected to async_mmap port `in_8.write_addr` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_addr_full_n` is connected to async_mmap port `in_8.write_addr` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_addr_full_n` is connected to async_mmap port `in_8.write_addr` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_addr_write` is connected to async_mmap port `in_8.write_addr` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_addr_write` is connected to async_mmap port `in_8.write_addr` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_data_din` is connected to async_mmap port `in_8.write_data` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_data_din` is connected to async_mmap port `in_8.write_data` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_data_full_n` is connected to async_mmap port `in_8.write_data` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_data_full_n` is connected to async_mmap port `in_8.write_data` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_data_write` is connected to async_mmap port `in_8.write_data` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_data_write` is connected to async_mmap port `in_8.write_data` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_resp_s_dout` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_resp_s_dout` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.a_write_resp_peek_dout` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.a_write_resp_peek_dout` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_resp_s_empty_n` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_resp_s_empty_n` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.a_write_resp_peek_empty_n` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.a_write_resp_peek_empty_n` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_resp_s_read` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.707 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.a_write_resp_s_read` is connected to async_mmap port `in_8.write_resp` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_addr_din` is connected to async_mmap port `out_8.read_addr` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_addr_din` is connected to async_mmap port `out_8.read_addr` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_addr_full_n` is connected to async_mmap port `out_8.read_addr` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_addr_full_n` is connected to async_mmap port `out_8.read_addr` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_addr_write` is connected to async_mmap port `out_8.read_addr` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_addr_write` is connected to async_mmap port `out_8.read_addr` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_data_s_dout` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_data_s_dout` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.b_read_data_peek_dout` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.b_read_data_peek_dout` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_data_s_empty_n` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_data_s_empty_n` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.b_read_data_peek_empty_n` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.b_read_data_peek_empty_n` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_data_s_read` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_read_data_s_read` is connected to async_mmap port `out_8.read_data` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_addr_din` is connected to async_mmap port `out_8.write_addr` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_addr_din` is connected to async_mmap port `out_8.write_addr` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_addr_full_n` is connected to async_mmap port `out_8.write_addr` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_addr_full_n` is connected to async_mmap port `out_8.write_addr` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_addr_write` is connected to async_mmap port `out_8.write_addr` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_addr_write` is connected to async_mmap port `out_8.write_addr` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_data_din` is connected to async_mmap port `out_8.write_data` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_data_din` is connected to async_mmap port `out_8.write_data` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_data_full_n` is connected to async_mmap port `out_8.write_data` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_data_full_n` is connected to async_mmap port `out_8.write_data` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_data_write` is connected to async_mmap port `out_8.write_data` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_data_write` is connected to async_mmap port `out_8.write_data` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_resp_s_dout` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_resp_s_dout` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.b_write_resp_peek_dout` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.b_write_resp_peek_dout` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_resp_s_empty_n` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_resp_s_empty_n` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.b_write_resp_peek_empty_n` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_8.b_write_resp_peek_empty_n` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_resp_s_read` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_8.b_write_resp_s_read` is connected to async_mmap port `out_8.write_resp` -D0712 20:03:04.708 tapa.core:671] pipelined signal: in_9 => inter_kernel_9___in_9 -D0712 20:03:04.708 tapa.core:671] pipelined signal: in_9 => inter_kernel_9___in_9 -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_addr_din` is connected to async_mmap port `in_9.read_addr` -D0712 20:03:04.708 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_addr_din` is connected to async_mmap port `in_9.read_addr` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_addr_full_n` is connected to async_mmap port `in_9.read_addr` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_addr_full_n` is connected to async_mmap port `in_9.read_addr` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_addr_write` is connected to async_mmap port `in_9.read_addr` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_addr_write` is connected to async_mmap port `in_9.read_addr` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_data_s_dout` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_data_s_dout` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.a_read_data_peek_dout` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.a_read_data_peek_dout` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_data_s_empty_n` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_data_s_empty_n` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.a_read_data_peek_empty_n` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.a_read_data_peek_empty_n` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_data_s_read` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_data_s_read` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_addr_din` is connected to async_mmap port `in_9.write_addr` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_addr_din` is connected to async_mmap port `in_9.write_addr` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_addr_full_n` is connected to async_mmap port `in_9.write_addr` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_addr_full_n` is connected to async_mmap port `in_9.write_addr` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_addr_write` is connected to async_mmap port `in_9.write_addr` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_addr_write` is connected to async_mmap port `in_9.write_addr` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_data_din` is connected to async_mmap port `in_9.write_data` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_data_din` is connected to async_mmap port `in_9.write_data` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_data_full_n` is connected to async_mmap port `in_9.write_data` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_data_full_n` is connected to async_mmap port `in_9.write_data` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_data_write` is connected to async_mmap port `in_9.write_data` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_data_write` is connected to async_mmap port `in_9.write_data` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_resp_s_dout` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_resp_s_dout` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.a_write_resp_peek_dout` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.a_write_resp_peek_dout` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_resp_s_empty_n` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_resp_s_empty_n` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.a_write_resp_peek_empty_n` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.a_write_resp_peek_empty_n` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_resp_s_read` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_resp_s_read` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.709 tapa.core:671] pipelined signal: iters => inter_kernel_9___iters -D0712 20:03:04.709 tapa.core:671] pipelined signal: iters => inter_kernel_9___iters -D0712 20:03:04.709 tapa.core:671] pipelined signal: out_9 => inter_kernel_9___out_9 -D0712 20:03:04.709 tapa.core:671] pipelined signal: out_9 => inter_kernel_9___out_9 -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_addr_din` is connected to async_mmap port `out_9.read_addr` -D0712 20:03:04.709 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_addr_din` is connected to async_mmap port `out_9.read_addr` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_addr_full_n` is connected to async_mmap port `out_9.read_addr` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_addr_full_n` is connected to async_mmap port `out_9.read_addr` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_addr_write` is connected to async_mmap port `out_9.read_addr` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_addr_write` is connected to async_mmap port `out_9.read_addr` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_data_s_dout` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_data_s_dout` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.b_read_data_peek_dout` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.b_read_data_peek_dout` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_data_s_empty_n` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_data_s_empty_n` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.b_read_data_peek_empty_n` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.b_read_data_peek_empty_n` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_data_s_read` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_data_s_read` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_addr_din` is connected to async_mmap port `out_9.write_addr` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_addr_din` is connected to async_mmap port `out_9.write_addr` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_addr_full_n` is connected to async_mmap port `out_9.write_addr` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_addr_full_n` is connected to async_mmap port `out_9.write_addr` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_addr_write` is connected to async_mmap port `out_9.write_addr` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_addr_write` is connected to async_mmap port `out_9.write_addr` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_data_din` is connected to async_mmap port `out_9.write_data` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_data_din` is connected to async_mmap port `out_9.write_data` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_data_full_n` is connected to async_mmap port `out_9.write_data` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_data_full_n` is connected to async_mmap port `out_9.write_data` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_data_write` is connected to async_mmap port `out_9.write_data` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_data_write` is connected to async_mmap port `out_9.write_data` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_resp_s_dout` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_resp_s_dout` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.b_write_resp_peek_dout` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.b_write_resp_peek_dout` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_resp_s_empty_n` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_resp_s_empty_n` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.b_write_resp_peek_empty_n` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.b_write_resp_peek_empty_n` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_resp_s_read` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.710 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_resp_s_read` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_addr_din` is connected to async_mmap port `in_9.read_addr` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_addr_din` is connected to async_mmap port `in_9.read_addr` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_addr_full_n` is connected to async_mmap port `in_9.read_addr` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_addr_full_n` is connected to async_mmap port `in_9.read_addr` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_addr_write` is connected to async_mmap port `in_9.read_addr` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_addr_write` is connected to async_mmap port `in_9.read_addr` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_data_s_dout` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_data_s_dout` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.a_read_data_peek_dout` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.a_read_data_peek_dout` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_data_s_empty_n` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_data_s_empty_n` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.a_read_data_peek_empty_n` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.a_read_data_peek_empty_n` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_data_s_read` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_read_data_s_read` is connected to async_mmap port `in_9.read_data` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_addr_din` is connected to async_mmap port `in_9.write_addr` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_addr_din` is connected to async_mmap port `in_9.write_addr` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_addr_full_n` is connected to async_mmap port `in_9.write_addr` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_addr_full_n` is connected to async_mmap port `in_9.write_addr` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_addr_write` is connected to async_mmap port `in_9.write_addr` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_addr_write` is connected to async_mmap port `in_9.write_addr` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_data_din` is connected to async_mmap port `in_9.write_data` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_data_din` is connected to async_mmap port `in_9.write_data` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_data_full_n` is connected to async_mmap port `in_9.write_data` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_data_full_n` is connected to async_mmap port `in_9.write_data` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_data_write` is connected to async_mmap port `in_9.write_data` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_data_write` is connected to async_mmap port `in_9.write_data` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_resp_s_dout` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_resp_s_dout` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.a_write_resp_peek_dout` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.a_write_resp_peek_dout` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_resp_s_empty_n` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_resp_s_empty_n` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.a_write_resp_peek_empty_n` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.a_write_resp_peek_empty_n` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_resp_s_read` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.a_write_resp_s_read` is connected to async_mmap port `in_9.write_resp` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_addr_din` is connected to async_mmap port `out_9.read_addr` -D0712 20:03:04.711 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_addr_din` is connected to async_mmap port `out_9.read_addr` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_addr_full_n` is connected to async_mmap port `out_9.read_addr` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_addr_full_n` is connected to async_mmap port `out_9.read_addr` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_addr_write` is connected to async_mmap port `out_9.read_addr` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_addr_write` is connected to async_mmap port `out_9.read_addr` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_data_s_dout` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_data_s_dout` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.b_read_data_peek_dout` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.b_read_data_peek_dout` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_data_s_empty_n` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_data_s_empty_n` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.b_read_data_peek_empty_n` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.b_read_data_peek_empty_n` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_data_s_read` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_read_data_s_read` is connected to async_mmap port `out_9.read_data` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_addr_din` is connected to async_mmap port `out_9.write_addr` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_addr_din` is connected to async_mmap port `out_9.write_addr` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_addr_full_n` is connected to async_mmap port `out_9.write_addr` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_addr_full_n` is connected to async_mmap port `out_9.write_addr` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_addr_write` is connected to async_mmap port `out_9.write_addr` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_addr_write` is connected to async_mmap port `out_9.write_addr` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_data_din` is connected to async_mmap port `out_9.write_data` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_data_din` is connected to async_mmap port `out_9.write_data` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_data_full_n` is connected to async_mmap port `out_9.write_data` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_data_full_n` is connected to async_mmap port `out_9.write_data` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_data_write` is connected to async_mmap port `out_9.write_data` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_data_write` is connected to async_mmap port `out_9.write_data` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_resp_s_dout` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_resp_s_dout` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.b_write_resp_peek_dout` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.b_write_resp_peek_dout` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_resp_s_empty_n` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_resp_s_empty_n` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.b_write_resp_peek_empty_n` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_9.b_write_resp_peek_empty_n` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_resp_s_read` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_9.b_write_resp_s_read` is connected to async_mmap port `out_9.write_resp` -D0712 20:03:04.712 tapa.core:671] pipelined signal: in_10 => inter_kernel_10___in_10 -D0712 20:03:04.712 tapa.core:671] pipelined signal: in_10 => inter_kernel_10___in_10 -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_addr_din` is connected to async_mmap port `in_10.read_addr` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_addr_din` is connected to async_mmap port `in_10.read_addr` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_addr_full_n` is connected to async_mmap port `in_10.read_addr` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_addr_full_n` is connected to async_mmap port `in_10.read_addr` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_addr_write` is connected to async_mmap port `in_10.read_addr` -D0712 20:03:04.712 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_addr_write` is connected to async_mmap port `in_10.read_addr` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_data_s_dout` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_data_s_dout` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.a_read_data_peek_dout` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.a_read_data_peek_dout` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_data_s_empty_n` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_data_s_empty_n` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.a_read_data_peek_empty_n` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.a_read_data_peek_empty_n` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_data_s_read` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_data_s_read` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_addr_din` is connected to async_mmap port `in_10.write_addr` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_addr_din` is connected to async_mmap port `in_10.write_addr` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_addr_full_n` is connected to async_mmap port `in_10.write_addr` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_addr_full_n` is connected to async_mmap port `in_10.write_addr` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_addr_write` is connected to async_mmap port `in_10.write_addr` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_addr_write` is connected to async_mmap port `in_10.write_addr` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_data_din` is connected to async_mmap port `in_10.write_data` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_data_din` is connected to async_mmap port `in_10.write_data` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_data_full_n` is connected to async_mmap port `in_10.write_data` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_data_full_n` is connected to async_mmap port `in_10.write_data` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_data_write` is connected to async_mmap port `in_10.write_data` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_data_write` is connected to async_mmap port `in_10.write_data` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_resp_s_dout` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_resp_s_dout` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.a_write_resp_peek_dout` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.a_write_resp_peek_dout` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_resp_s_empty_n` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_resp_s_empty_n` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.a_write_resp_peek_empty_n` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.a_write_resp_peek_empty_n` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_resp_s_read` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_resp_s_read` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.713 tapa.core:671] pipelined signal: iters => inter_kernel_10___iters -D0712 20:03:04.713 tapa.core:671] pipelined signal: iters => inter_kernel_10___iters -D0712 20:03:04.713 tapa.core:671] pipelined signal: out_10 => inter_kernel_10___out_10 -D0712 20:03:04.713 tapa.core:671] pipelined signal: out_10 => inter_kernel_10___out_10 -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_addr_din` is connected to async_mmap port `out_10.read_addr` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_addr_din` is connected to async_mmap port `out_10.read_addr` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_addr_full_n` is connected to async_mmap port `out_10.read_addr` -D0712 20:03:04.713 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_addr_full_n` is connected to async_mmap port `out_10.read_addr` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_addr_write` is connected to async_mmap port `out_10.read_addr` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_addr_write` is connected to async_mmap port `out_10.read_addr` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_data_s_dout` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_data_s_dout` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.b_read_data_peek_dout` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.b_read_data_peek_dout` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_data_s_empty_n` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_data_s_empty_n` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.b_read_data_peek_empty_n` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.b_read_data_peek_empty_n` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_data_s_read` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_data_s_read` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_addr_din` is connected to async_mmap port `out_10.write_addr` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_addr_din` is connected to async_mmap port `out_10.write_addr` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_addr_full_n` is connected to async_mmap port `out_10.write_addr` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_addr_full_n` is connected to async_mmap port `out_10.write_addr` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_addr_write` is connected to async_mmap port `out_10.write_addr` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_addr_write` is connected to async_mmap port `out_10.write_addr` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_data_din` is connected to async_mmap port `out_10.write_data` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_data_din` is connected to async_mmap port `out_10.write_data` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_data_full_n` is connected to async_mmap port `out_10.write_data` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_data_full_n` is connected to async_mmap port `out_10.write_data` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_data_write` is connected to async_mmap port `out_10.write_data` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_data_write` is connected to async_mmap port `out_10.write_data` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_resp_s_dout` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_resp_s_dout` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.b_write_resp_peek_dout` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.b_write_resp_peek_dout` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_resp_s_empty_n` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_resp_s_empty_n` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.b_write_resp_peek_empty_n` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.b_write_resp_peek_empty_n` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_resp_s_read` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.714 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_resp_s_read` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_addr_din` is connected to async_mmap port `in_10.read_addr` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_addr_din` is connected to async_mmap port `in_10.read_addr` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_addr_full_n` is connected to async_mmap port `in_10.read_addr` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_addr_full_n` is connected to async_mmap port `in_10.read_addr` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_addr_write` is connected to async_mmap port `in_10.read_addr` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_addr_write` is connected to async_mmap port `in_10.read_addr` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_data_s_dout` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_data_s_dout` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.a_read_data_peek_dout` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.a_read_data_peek_dout` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_data_s_empty_n` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_data_s_empty_n` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.a_read_data_peek_empty_n` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.a_read_data_peek_empty_n` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_data_s_read` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_read_data_s_read` is connected to async_mmap port `in_10.read_data` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_addr_din` is connected to async_mmap port `in_10.write_addr` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_addr_din` is connected to async_mmap port `in_10.write_addr` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_addr_full_n` is connected to async_mmap port `in_10.write_addr` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_addr_full_n` is connected to async_mmap port `in_10.write_addr` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_addr_write` is connected to async_mmap port `in_10.write_addr` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_addr_write` is connected to async_mmap port `in_10.write_addr` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_data_din` is connected to async_mmap port `in_10.write_data` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_data_din` is connected to async_mmap port `in_10.write_data` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_data_full_n` is connected to async_mmap port `in_10.write_data` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_data_full_n` is connected to async_mmap port `in_10.write_data` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_data_write` is connected to async_mmap port `in_10.write_data` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_data_write` is connected to async_mmap port `in_10.write_data` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_resp_s_dout` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_resp_s_dout` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.a_write_resp_peek_dout` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.a_write_resp_peek_dout` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_resp_s_empty_n` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_resp_s_empty_n` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.a_write_resp_peek_empty_n` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.a_write_resp_peek_empty_n` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_resp_s_read` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.715 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.a_write_resp_s_read` is connected to async_mmap port `in_10.write_resp` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_addr_din` is connected to async_mmap port `out_10.read_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_addr_din` is connected to async_mmap port `out_10.read_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_addr_full_n` is connected to async_mmap port `out_10.read_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_addr_full_n` is connected to async_mmap port `out_10.read_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_addr_write` is connected to async_mmap port `out_10.read_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_addr_write` is connected to async_mmap port `out_10.read_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_data_s_dout` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_data_s_dout` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.b_read_data_peek_dout` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.b_read_data_peek_dout` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_data_s_empty_n` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_data_s_empty_n` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.b_read_data_peek_empty_n` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.b_read_data_peek_empty_n` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_data_s_read` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_read_data_s_read` is connected to async_mmap port `out_10.read_data` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_addr_din` is connected to async_mmap port `out_10.write_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_addr_din` is connected to async_mmap port `out_10.write_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_addr_full_n` is connected to async_mmap port `out_10.write_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_addr_full_n` is connected to async_mmap port `out_10.write_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_addr_write` is connected to async_mmap port `out_10.write_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_addr_write` is connected to async_mmap port `out_10.write_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_data_din` is connected to async_mmap port `out_10.write_data` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_data_din` is connected to async_mmap port `out_10.write_data` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_data_full_n` is connected to async_mmap port `out_10.write_data` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_data_full_n` is connected to async_mmap port `out_10.write_data` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_data_write` is connected to async_mmap port `out_10.write_data` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_data_write` is connected to async_mmap port `out_10.write_data` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_resp_s_dout` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_resp_s_dout` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.b_write_resp_peek_dout` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.b_write_resp_peek_dout` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_resp_s_empty_n` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_resp_s_empty_n` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.b_write_resp_peek_empty_n` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_10.b_write_resp_peek_empty_n` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_resp_s_read` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_10.b_write_resp_s_read` is connected to async_mmap port `out_10.write_resp` -D0712 20:03:04.716 tapa.core:671] pipelined signal: in_11 => inter_kernel_11___in_11 -D0712 20:03:04.716 tapa.core:671] pipelined signal: in_11 => inter_kernel_11___in_11 -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_addr_din` is connected to async_mmap port `in_11.read_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_addr_din` is connected to async_mmap port `in_11.read_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_addr_full_n` is connected to async_mmap port `in_11.read_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_addr_full_n` is connected to async_mmap port `in_11.read_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_addr_write` is connected to async_mmap port `in_11.read_addr` -D0712 20:03:04.716 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_addr_write` is connected to async_mmap port `in_11.read_addr` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_data_s_dout` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_data_s_dout` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.a_read_data_peek_dout` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.a_read_data_peek_dout` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_data_s_empty_n` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_data_s_empty_n` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.a_read_data_peek_empty_n` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.a_read_data_peek_empty_n` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_data_s_read` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_data_s_read` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_addr_din` is connected to async_mmap port `in_11.write_addr` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_addr_din` is connected to async_mmap port `in_11.write_addr` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_addr_full_n` is connected to async_mmap port `in_11.write_addr` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_addr_full_n` is connected to async_mmap port `in_11.write_addr` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_addr_write` is connected to async_mmap port `in_11.write_addr` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_addr_write` is connected to async_mmap port `in_11.write_addr` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_data_din` is connected to async_mmap port `in_11.write_data` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_data_din` is connected to async_mmap port `in_11.write_data` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_data_full_n` is connected to async_mmap port `in_11.write_data` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_data_full_n` is connected to async_mmap port `in_11.write_data` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_data_write` is connected to async_mmap port `in_11.write_data` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_data_write` is connected to async_mmap port `in_11.write_data` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_resp_s_dout` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_resp_s_dout` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.a_write_resp_peek_dout` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.a_write_resp_peek_dout` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_resp_s_empty_n` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_resp_s_empty_n` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.a_write_resp_peek_empty_n` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.a_write_resp_peek_empty_n` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_resp_s_read` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_resp_s_read` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.717 tapa.core:671] pipelined signal: iters => inter_kernel_11___iters -D0712 20:03:04.717 tapa.core:671] pipelined signal: iters => inter_kernel_11___iters -D0712 20:03:04.717 tapa.core:671] pipelined signal: out_11 => inter_kernel_11___out_11 -D0712 20:03:04.717 tapa.core:671] pipelined signal: out_11 => inter_kernel_11___out_11 -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_addr_din` is connected to async_mmap port `out_11.read_addr` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_addr_din` is connected to async_mmap port `out_11.read_addr` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_addr_full_n` is connected to async_mmap port `out_11.read_addr` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_addr_full_n` is connected to async_mmap port `out_11.read_addr` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_addr_write` is connected to async_mmap port `out_11.read_addr` -D0712 20:03:04.717 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_addr_write` is connected to async_mmap port `out_11.read_addr` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_data_s_dout` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_data_s_dout` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.b_read_data_peek_dout` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.b_read_data_peek_dout` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_data_s_empty_n` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_data_s_empty_n` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.b_read_data_peek_empty_n` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.b_read_data_peek_empty_n` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_data_s_read` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_data_s_read` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_addr_din` is connected to async_mmap port `out_11.write_addr` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_addr_din` is connected to async_mmap port `out_11.write_addr` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_addr_full_n` is connected to async_mmap port `out_11.write_addr` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_addr_full_n` is connected to async_mmap port `out_11.write_addr` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_addr_write` is connected to async_mmap port `out_11.write_addr` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_addr_write` is connected to async_mmap port `out_11.write_addr` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_data_din` is connected to async_mmap port `out_11.write_data` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_data_din` is connected to async_mmap port `out_11.write_data` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_data_full_n` is connected to async_mmap port `out_11.write_data` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_data_full_n` is connected to async_mmap port `out_11.write_data` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_data_write` is connected to async_mmap port `out_11.write_data` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_data_write` is connected to async_mmap port `out_11.write_data` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_resp_s_dout` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_resp_s_dout` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.b_write_resp_peek_dout` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.b_write_resp_peek_dout` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_resp_s_empty_n` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_resp_s_empty_n` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.b_write_resp_peek_empty_n` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.b_write_resp_peek_empty_n` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_resp_s_read` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_resp_s_read` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_addr_din` is connected to async_mmap port `in_11.read_addr` -D0712 20:03:04.718 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_addr_din` is connected to async_mmap port `in_11.read_addr` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_addr_full_n` is connected to async_mmap port `in_11.read_addr` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_addr_full_n` is connected to async_mmap port `in_11.read_addr` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_addr_write` is connected to async_mmap port `in_11.read_addr` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_addr_write` is connected to async_mmap port `in_11.read_addr` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_data_s_dout` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_data_s_dout` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.a_read_data_peek_dout` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.a_read_data_peek_dout` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_data_s_empty_n` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_data_s_empty_n` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.a_read_data_peek_empty_n` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.a_read_data_peek_empty_n` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_data_s_read` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_read_data_s_read` is connected to async_mmap port `in_11.read_data` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_addr_din` is connected to async_mmap port `in_11.write_addr` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_addr_din` is connected to async_mmap port `in_11.write_addr` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_addr_full_n` is connected to async_mmap port `in_11.write_addr` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_addr_full_n` is connected to async_mmap port `in_11.write_addr` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_addr_write` is connected to async_mmap port `in_11.write_addr` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_addr_write` is connected to async_mmap port `in_11.write_addr` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_data_din` is connected to async_mmap port `in_11.write_data` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_data_din` is connected to async_mmap port `in_11.write_data` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_data_full_n` is connected to async_mmap port `in_11.write_data` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_data_full_n` is connected to async_mmap port `in_11.write_data` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_data_write` is connected to async_mmap port `in_11.write_data` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_data_write` is connected to async_mmap port `in_11.write_data` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_resp_s_dout` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_resp_s_dout` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.a_write_resp_peek_dout` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.a_write_resp_peek_dout` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_resp_s_empty_n` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_resp_s_empty_n` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.a_write_resp_peek_empty_n` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.a_write_resp_peek_empty_n` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_resp_s_read` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.a_write_resp_s_read` is connected to async_mmap port `in_11.write_resp` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_addr_din` is connected to async_mmap port `out_11.read_addr` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_addr_din` is connected to async_mmap port `out_11.read_addr` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_addr_full_n` is connected to async_mmap port `out_11.read_addr` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_addr_full_n` is connected to async_mmap port `out_11.read_addr` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_addr_write` is connected to async_mmap port `out_11.read_addr` -D0712 20:03:04.719 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_addr_write` is connected to async_mmap port `out_11.read_addr` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_data_s_dout` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_data_s_dout` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.b_read_data_peek_dout` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.b_read_data_peek_dout` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_data_s_empty_n` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_data_s_empty_n` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.b_read_data_peek_empty_n` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.b_read_data_peek_empty_n` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_data_s_read` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_read_data_s_read` is connected to async_mmap port `out_11.read_data` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_addr_din` is connected to async_mmap port `out_11.write_addr` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_addr_din` is connected to async_mmap port `out_11.write_addr` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_addr_full_n` is connected to async_mmap port `out_11.write_addr` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_addr_full_n` is connected to async_mmap port `out_11.write_addr` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_addr_write` is connected to async_mmap port `out_11.write_addr` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_addr_write` is connected to async_mmap port `out_11.write_addr` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_data_din` is connected to async_mmap port `out_11.write_data` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_data_din` is connected to async_mmap port `out_11.write_data` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_data_full_n` is connected to async_mmap port `out_11.write_data` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_data_full_n` is connected to async_mmap port `out_11.write_data` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_data_write` is connected to async_mmap port `out_11.write_data` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_data_write` is connected to async_mmap port `out_11.write_data` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_resp_s_dout` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_resp_s_dout` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.b_write_resp_peek_dout` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.b_write_resp_peek_dout` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_resp_s_empty_n` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_resp_s_empty_n` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.b_write_resp_peek_empty_n` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:81] `inter_kernel_11.b_write_resp_peek_empty_n` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_resp_s_read` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.720 tapa.verilog.xilinx.async_mmap:71] `inter_kernel_11.b_write_resp_s_read` is connected to async_mmap port `out_11.write_resp` -D0712 20:03:04.720 tapa.core:852] Set the address width of async_mmap to 64 -D0712 20:03:04.720 tapa.core:852] Set the address width of async_mmap to 64 -I0712 20:03:04.854 tapa.core:465] generating report -I0712 20:03:04.854 tapa.core:465] generating report -I0712 20:03:04.855 tapa.core:473] writing generated auxiliary RTL files -I0712 20:03:04.855 tapa.core:473] writing generated auxiliary RTL files -I0712 20:03:04.855 tapa.steps.common:92] writing TAPA settings to json `generated/settings.json`. -I0712 20:03:04.855 tapa.steps.common:92] writing TAPA settings to json `generated/settings.json`. -I0712 20:03:04.856 tapa.steps.common:46] reusing TAPA settings from upstream flows. -I0712 20:03:04.856 tapa.steps.common:46] reusing TAPA settings from upstream flows. -I0712 20:03:04.856 tapa.core:481] packaging RTL code -I0712 20:03:04.856 tapa.core:481] packaging RTL code -D0712 20:03:04.856 tapa.verilog.xilinx:70] RTL ports of unikernel: -D0712 20:03:04.856 tapa.verilog.xilinx:70] RTL ports of unikernel: -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_0, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_0, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_0, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_0, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_1, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_1, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_1, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_1, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_2, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_2, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_2, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_2, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_3, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_3, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_3, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_3, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_4, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_4, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_4, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_4, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_5, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_5, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_5, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_5, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_6, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_6, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_6, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_6, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_7, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_7, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_7, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_7, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_8, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_8, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_8, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_8, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_9, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_9, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_9, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_9, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_10, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_10, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_10, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_10, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_11, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: in_11, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_11, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.MMAP, name: out_11, ctype: ap_uint<512>*, width: 512, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.SCALAR, name: iters, ctype: uint32_t, width: 32, chan_count: None, chan_size: None -D0712 20:03:04.856 tapa.verilog.xilinx:75] cat: Cat.SCALAR, name: iters, ctype: uint32_t, width: 32, chan_count: None, chan_size: None -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: axi_crossbar_addr.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: axi_crossbar_addr.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: fifo.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: fifo.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0_ip.tcl -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0_ip.tcl -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: arbiter.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: arbiter.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: detect_burst.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: detect_burst.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0_ip.tcl -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0_ip.tcl -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_121_4.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_121_4.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_fifo_w512_d15_A.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_fifo_w512_d15_A.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: inter_kernel_flow_control_loop_pipe_sequential_init.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: inter_kernel_flow_control_loop_pipe_sequential_init.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: unikernel_fsm.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: unikernel_fsm.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: async_mmap.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: async_mmap.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_fsub_32ns_32ns_32_7_full_dsp_0.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_HEAT3D_Pipeline_MAJOR_LOOP.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_HEAT3D_Pipeline_MAJOR_LOOP.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0_ip.tcl -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0_ip.tcl -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: fifo_srl.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: fifo_srl.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: a_axi_write_broadcastor_1_to_3.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: a_axi_write_broadcastor_1_to_3.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: axi_register_rd.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: axi_register_rd.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: axi_crossbar_rd.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: axi_crossbar_rd.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_fadd_32ns_32ns_32_7_full_dsp_0.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: fifo_bram.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: fifo_bram.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_HEAT3D_stencil_kernel.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_HEAT3D_stencil_kernel.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: inter_kernel.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: inter_kernel.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: axi_crossbar_wr.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: axi_crossbar_wr.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_68_2.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_68_2.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: axi_crossbar.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: axi_crossbar.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: unikernel_control_s_axi.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: unikernel_control_s_axi.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: axi_pipeline.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: axi_pipeline.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: relay_station.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: relay_station.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: fifo_fwd.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: fifo_fwd.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_116_3.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_116_3.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_flow_control_loop_pipe_sequential_init.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_flow_control_loop_pipe_sequential_init.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: a_axi_write_broadcastor_1_to_4.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: a_axi_write_broadcastor_1_to_4.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_fmul_32ns_32ns_32_4_max_dsp_0.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: priority_encoder.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: priority_encoder.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: inter_kernel_load.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: inter_kernel_load.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: inter_kernel_load_Pipeline_VITIS_LOOP_45_1.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: inter_kernel_load_Pipeline_VITIS_LOOP_45_1.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_HLS_REG_ap_uint_512_s.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_HLS_REG_ap_uint_512_s.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: axi_register_wr.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: axi_register_wr.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: unikernel.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: unikernel.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_62_1.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: HEAT3D_HEAT3D_Pipeline_VITIS_LOOP_62_1.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: generate_last.v -D0712 20:03:04.857 haoda.backend.xilinx:163] packing: generate_last.v -I0712 20:03:20.048 tapa.core:489] packaging HLS report -I0712 20:03:20.048 tapa.core:489] packaging HLS report -D0712 20:03:20.052 tapa.core:494] packing report/HEAT3D_Pipeline_MAJOR_LOOP_csynth.xml -D0712 20:03:20.052 tapa.core:494] packing report/HEAT3D_Pipeline_MAJOR_LOOP_csynth.xml -D0712 20:03:20.053 tapa.core:494] packing report/inter_kernel_csynth.xml -D0712 20:03:20.053 tapa.core:494] packing report/inter_kernel_csynth.xml -D0712 20:03:20.054 tapa.core:494] packing report/load_Pipeline_VITIS_LOOP_45_1_csynth.xml -D0712 20:03:20.054 tapa.core:494] packing report/load_Pipeline_VITIS_LOOP_45_1_csynth.xml -D0712 20:03:20.055 tapa.core:494] packing report/HLS_REG_ap_uint_512_s_csynth.xml -D0712 20:03:20.055 tapa.core:494] packing report/HLS_REG_ap_uint_512_s_csynth.xml -D0712 20:03:20.055 tapa.core:494] packing report/load_csynth.xml -D0712 20:03:20.055 tapa.core:494] packing report/load_csynth.xml -D0712 20:03:20.056 tapa.core:494] packing report/HEAT3D_stencil_kernel_csynth.xml -D0712 20:03:20.056 tapa.core:494] packing report/HEAT3D_stencil_kernel_csynth.xml -D0712 20:03:20.056 tapa.core:494] packing report/HEAT3D_csynth.xml -D0712 20:03:20.056 tapa.core:494] packing report/HEAT3D_csynth.xml -D0712 20:03:20.057 tapa.core:494] packing report/HEAT3D_Pipeline_VITIS_LOOP_116_3_csynth.xml -D0712 20:03:20.057 tapa.core:494] packing report/HEAT3D_Pipeline_VITIS_LOOP_116_3_csynth.xml -D0712 20:03:20.057 tapa.core:494] packing report/HEAT3D_Pipeline_VITIS_LOOP_121_4_csynth.xml -D0712 20:03:20.057 tapa.core:494] packing report/HEAT3D_Pipeline_VITIS_LOOP_121_4_csynth.xml -D0712 20:03:20.057 tapa.core:494] packing report/HEAT3D_Pipeline_VITIS_LOOP_68_2_csynth.xml -D0712 20:03:20.057 tapa.core:494] packing report/HEAT3D_Pipeline_VITIS_LOOP_68_2_csynth.xml -D0712 20:03:20.058 tapa.core:494] packing report/HEAT3D_Pipeline_VITIS_LOOP_62_1_csynth.xml -D0712 20:03:20.058 tapa.core:494] packing report/HEAT3D_Pipeline_VITIS_LOOP_62_1_csynth.xml -D0712 20:03:20.058 tapa.core:494] packing report/unikernel_csynth.xml -D0712 20:03:20.058 tapa.core:494] packing report/unikernel_csynth.xml -I0712 20:03:20.059 tapa.core:497] generated the v++ xo file at generated/unikernel.xo -I0712 20:03:20.059 tapa.core:497] generated the v++ xo file at generated/unikernel.xo diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report.json b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report.json deleted file mode 100644 index 5f15bf47..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "area": { - "breakdown": { - "HEAT3D": { - "area": { - "source": "hls", - "total": { - "BRAM_18K": 0, - "DSP": 480, - "FF": 85918, - "LUT": 40261, - "URAM": 0 - } - }, - "count": 12 - }, - "inter_kernel": { - "area": { - "source": "hls", - "total": { - "BRAM_18K": 0, - "DSP": 0, - "FF": 384, - "LUT": 846, - "URAM": 0 - } - }, - "count": 12 - } - }, - "source": "hls", - "total": { - "BRAM_18K": 0, - "DSP": 5760, - "FF": 1037378, - "LUT": 496460, - "URAM": 0 - } - }, - "name": "unikernel", - "performance": { - "clock_period": "2.431", - "critical_path": { - "HEAT3D": { - "clock_period": "2.431", - "source": "hls" - }, - "inter_kernel": { - "clock_period": "2.431", - "source": "hls" - } - }, - "source": "hls" - }, - "schema": "v0.0.20210922" -} diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report.yaml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report.yaml deleted file mode 100644 index 6d9b1f84..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report.yaml +++ /dev/null @@ -1,41 +0,0 @@ -schema: v0.0.20210922 -name: unikernel -performance: - source: hls - clock_period: '2.431' - critical_path: - HEAT3D: - source: hls - clock_period: '2.431' - inter_kernel: - source: hls - clock_period: '2.431' -area: - source: hls - total: - BRAM_18K: 0 - DSP: 5760 - FF: 1037378 - LUT: 496460 - URAM: 0 - breakdown: - HEAT3D: - count: 12 - area: - source: hls - total: - BRAM_18K: 0 - DSP: 480 - FF: 85918 - LUT: 40261 - URAM: 0 - inter_kernel: - count: 12 - area: - source: hls - total: - BRAM_18K: 0 - DSP: 0 - FF: 384 - LUT: 846 - URAM: 0 diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D.sched.adb.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D.sched.adb.xml deleted file mode 100644 index 72a0ac82..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D.sched.adb.xml +++ /dev/null @@ -1,948 +0,0 @@ -HEAT3D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -NULL - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -FIFO - - - - - - - - - - - -NULL - - - - - - - - - - - - - - -FIFO - - - - - - - - - - - -NULL - - - - - - - - - - - - - - -FIFO - - - - - - - - - - - -NULL - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -FIFO - - - - - - - - - - - -NULL - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -TAddSub - - - - - - - - - - - -TAddSub - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D.verbose.sched.rpt.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D.verbose.sched.rpt.xml deleted file mode 100644 index 02cc199d..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D.verbose.sched.rpt.xml +++ /dev/null @@ -1,45 +0,0 @@ - - -
-Fri Jul 12 20:03:01 2024 - -2022.2 (Build 3670227 on Oct 13 2022) -project -HEAT3D (Vivado IP Flow Target) -virtexuplus -xcu280-fsvh2892-2L-e -
- -
- -
- -Clock, Target, Estimated, Uncertainty -3.33 ns, 2.431 ns, 0.90 ns -
-
-
-
- -
- -, min, max, min, max, min, max, Type -?, ?, ?, ?, ?, ?, no -
-
- -
- -Instance, Module, min, max, min, max, min, max, Type -
-
- -Loop Name, min, max, Latency, achieved, target, Count, Pipelined -
-
-
-
-
-
-
-
diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_MAJOR_LOOP.sched.adb.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_MAJOR_LOOP.sched.adb.xml deleted file mode 100644 index 570bfac2..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_MAJOR_LOOP.sched.adb.xml +++ /dev/null @@ -1,14471 +0,0 @@ -HEAT3D_Pipeline_MAJOR_LOOP - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -Cmp - - - - - - - - - - - -Adder - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -FIFO - - - - - - - - - - - - - - - - - - - >, i512 %p_Val2_3_load - -]]> - - - - -FIFO - - - - - - - - - - - - - - - - - - - >, i512 %p_Val2_2_load - -]]> - - - - - - - - - - - - >, i512 %p_Val2_4_load - -]]> - - - - -FIFO - - - - - - - - - - - - - - - - - - - >, i512 %p_Val2_1_load - -]]> - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - >, i512 %trunc_ln85 - -]]> - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -FIFO - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_MAJOR_LOOP.verbose.sched.rpt.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_MAJOR_LOOP.verbose.sched.rpt.xml deleted file mode 100644 index 705d9b98..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_MAJOR_LOOP.verbose.sched.rpt.xml +++ /dev/null @@ -1,46 +0,0 @@ - - -
-Fri Jul 12 20:03:00 2024 - -2022.2 (Build 3670227 on Oct 13 2022) -project -HEAT3D (Vivado IP Flow Target) -virtexuplus -xcu280-fsvh2892-2L-e -
- -
- -
- -Clock, Target, Estimated, Uncertainty -3.33 ns, 2.342 ns, 0.90 ns -
-
-
-
- -
- -, min, max, min, max, min, max, Type -?, ?, ?, ?, ?, ?, no -
-
- -
- -Instance, Module, min, max, min, max, min, max, Type -
-
- -Loop Name, min, max, Latency, achieved, target, Count, Pipelined -?, ?, 46, 1, 1, ?, yes -
-
-
-
-
-
-
-
diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_MAJOR_LOOP_csynth.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_MAJOR_LOOP_csynth.xml deleted file mode 100644 index 8c9a6123..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_MAJOR_LOOP_csynth.xml +++ /dev/null @@ -1,398 +0,0 @@ - - - -2022.2 - - - -ns -virtexuplus -xcu280-fsvh2892-2L-e -HEAT3D_Pipeline_MAJOR_LOOP -3.33 -0.90 -vivado - - - -no - -ns -2.342 - - -clock cycles -undef -undef -undef -undef -undef -undef -undef -undef - - - -2.43 -undef -undef -undef -1 -46 - - - - - - - - -480 -80170 -38023 -0 -0 - - -4032 -9024 -2607360 -1303680 -960 - - - - - -ap_clk -HEAT3D_Pipeline_MAJOR_LOOP -return value - -ap_ctrl_hs - -in -1 -control - - -ap_rst -HEAT3D_Pipeline_MAJOR_LOOP -return value - -ap_ctrl_hs - -in -1 -control - - -ap_start -HEAT3D_Pipeline_MAJOR_LOOP -return value - -ap_ctrl_hs - -in -1 -control - - -ap_done -HEAT3D_Pipeline_MAJOR_LOOP -return value - -ap_ctrl_hs - -out -1 -control - - -ap_idle -HEAT3D_Pipeline_MAJOR_LOOP -return value - -ap_ctrl_hs - -out -1 -control - - -ap_ready -HEAT3D_Pipeline_MAJOR_LOOP -return value - -ap_ctrl_hs - -out -1 -control - - -in_stream_m15_to_m2_dout -in_stream_m15_to_m2 -pointer - -ap_fifo - -in -512 -control - - -in_stream_m15_to_m2_empty_n -in_stream_m15_to_m2 -pointer - -ap_fifo - -in -1 -control - - -in_stream_m15_to_m2_read -in_stream_m15_to_m2 -pointer - -ap_fifo - -out -1 -control - - -in_stream_m15_to_m2_din -in_stream_m15_to_m2 -pointer - -ap_fifo - -out -512 -control - - -in_stream_m15_to_m2_full_n -in_stream_m15_to_m2 -pointer - -ap_fifo - -in -1 -control - - -in_stream_m15_to_m2_write -in_stream_m15_to_m2 -pointer - -ap_fifo - -out -1 -control - - -in_stream_2_to_15_dout -in_stream_2_to_15 -pointer - -ap_fifo - -in -512 -control - - -in_stream_2_to_15_empty_n -in_stream_2_to_15 -pointer - -ap_fifo - -in -1 -control - - -in_stream_2_to_15_read -in_stream_2_to_15 -pointer - -ap_fifo - -out -1 -control - - -in_stream_2_to_15_din -in_stream_2_to_15 -pointer - -ap_fifo - -out -512 -control - - -in_stream_2_to_15_full_n -in_stream_2_to_15 -pointer - -ap_fifo - -in -1 -control - - -in_stream_2_to_15_write -in_stream_2_to_15 -pointer - -ap_fifo - -out -1 -control - - -in_s_dout -in_s -pointer - -ap_fifo - -in -513 -control - - -in_s_empty_n -in_s -pointer - -ap_fifo - -in -1 -control - - -in_s_read -in_s -pointer - -ap_fifo - -out -1 -control - - -out_r_din -out_r -pointer - -ap_fifo - -out -513 -control - - -out_r_full_n -out_r -pointer - -ap_fifo - -in -1 -control - - -out_r_write -out_r -pointer - -ap_fifo - -out -1 -control - - -in_block_1 -in_block_1 -scalar - -ap_none - -in -512 -data - - -in_block_m1 -in_block_m1 -scalar - -ap_none - -in -512 -data - - -in_block_0 -in_block_0 -scalar - -ap_none - -in -512 -data - - -in_block_16_V -in_block_16_V -scalar - -ap_none - -in -512 -data - - -in_block_m16_V -in_block_m16_V -scalar - -ap_none - -in -512 -data - - -add_ln73 -add_ln73 -scalar - -ap_none - -in -32 -data - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_116_3.sched.adb.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_116_3.sched.adb.xml deleted file mode 100644 index f686082b..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_116_3.sched.adb.xml +++ /dev/null @@ -1,260 +0,0 @@ -HEAT3D_Pipeline_VITIS_LOOP_116_3 - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -Cmp - - - - - - - - - - - -NULL - - - - - - - - - - - -Adder - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -FIFO - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_116_3.verbose.sched.rpt.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_116_3.verbose.sched.rpt.xml deleted file mode 100644 index c775a6db..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_116_3.verbose.sched.rpt.xml +++ /dev/null @@ -1,46 +0,0 @@ - - -
-Fri Jul 12 20:03:01 2024 - -2022.2 (Build 3670227 on Oct 13 2022) -project -HEAT3D (Vivado IP Flow Target) -virtexuplus -xcu280-fsvh2892-2L-e -
- -
- -
- -Clock, Target, Estimated, Uncertainty -3.33 ns, 1.215 ns, 0.90 ns -
-
-
-
- -
- -, min, max, min, max, min, max, Type -16, 16, 53.280 ns, 53.280 ns, 16, 16, no -
-
- -
- -Instance, Module, min, max, min, max, min, max, Type -
-
- -Loop Name, min, max, Latency, achieved, target, Count, Pipelined -14, 14, 2, 1, 1, 14, yes -
-
-
-
-
-
-
-
diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_116_3_csynth.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_116_3_csynth.xml deleted file mode 100644 index c39904b2..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_116_3_csynth.xml +++ /dev/null @@ -1,167 +0,0 @@ - - - -2022.2 - - - -ns -virtexuplus -xcu280-fsvh2892-2L-e -HEAT3D_Pipeline_VITIS_LOOP_116_3 -3.33 -0.90 -vivado - - - -no - -ns -1.215 - - -clock cycles -16 -16 -16 -53.280 ns -53.280 ns -53.280 ns -16 -16 - - - -2.43 -14 -14 -46 -1 -2 - - - - - - - - -7 -70 -0 -0 -0 - - -4032 -9024 -2607360 -1303680 -960 - - - - - -ap_clk -HEAT3D_Pipeline_VITIS_LOOP_116_3 -return value - -ap_ctrl_hs - -in -1 -control - - -ap_rst -HEAT3D_Pipeline_VITIS_LOOP_116_3 -return value - -ap_ctrl_hs - -in -1 -control - - -ap_start -HEAT3D_Pipeline_VITIS_LOOP_116_3 -return value - -ap_ctrl_hs - -in -1 -control - - -ap_done -HEAT3D_Pipeline_VITIS_LOOP_116_3 -return value - -ap_ctrl_hs - -out -1 -control - - -ap_idle -HEAT3D_Pipeline_VITIS_LOOP_116_3 -return value - -ap_ctrl_hs - -out -1 -control - - -ap_ready -HEAT3D_Pipeline_VITIS_LOOP_116_3 -return value - -ap_ctrl_hs - -out -1 -control - - -in_stream_m15_to_m2_dout -in_stream_m15_to_m2 -pointer - -ap_fifo - -in -512 -control - - -in_stream_m15_to_m2_empty_n -in_stream_m15_to_m2 -pointer - -ap_fifo - -in -1 -control - - -in_stream_m15_to_m2_read -in_stream_m15_to_m2 -pointer - -ap_fifo - -out -1 -control - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_121_4.sched.adb.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_121_4.sched.adb.xml deleted file mode 100644 index c4177f42..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_121_4.sched.adb.xml +++ /dev/null @@ -1,260 +0,0 @@ -HEAT3D_Pipeline_VITIS_LOOP_121_4 - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -Cmp - - - - - - - - - - - -NULL - - - - - - - - - - - -Adder - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -FIFO - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_121_4.verbose.sched.rpt.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_121_4.verbose.sched.rpt.xml deleted file mode 100644 index 67aaaa50..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_121_4.verbose.sched.rpt.xml +++ /dev/null @@ -1,46 +0,0 @@ - - -
-Fri Jul 12 20:03:01 2024 - -2022.2 (Build 3670227 on Oct 13 2022) -project -HEAT3D (Vivado IP Flow Target) -virtexuplus -xcu280-fsvh2892-2L-e -
- -
- -
- -Clock, Target, Estimated, Uncertainty -3.33 ns, 1.215 ns, 0.90 ns -
-
-
-
- -
- -, min, max, min, max, min, max, Type -16, 16, 53.280 ns, 53.280 ns, 16, 16, no -
-
- -
- -Instance, Module, min, max, min, max, min, max, Type -
-
- -Loop Name, min, max, Latency, achieved, target, Count, Pipelined -14, 14, 2, 1, 1, 14, yes -
-
-
-
-
-
-
-
diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_121_4_csynth.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_121_4_csynth.xml deleted file mode 100644 index 1bbe1dce..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_121_4_csynth.xml +++ /dev/null @@ -1,167 +0,0 @@ - - - -2022.2 - - - -ns -virtexuplus -xcu280-fsvh2892-2L-e -HEAT3D_Pipeline_VITIS_LOOP_121_4 -3.33 -0.90 -vivado - - - -no - -ns -1.215 - - -clock cycles -16 -16 -16 -53.280 ns -53.280 ns -53.280 ns -16 -16 - - - -2.43 -14 -14 -46 -1 -2 - - - - - - - - -7 -70 -0 -0 -0 - - -4032 -9024 -2607360 -1303680 -960 - - - - - -ap_clk -HEAT3D_Pipeline_VITIS_LOOP_121_4 -return value - -ap_ctrl_hs - -in -1 -control - - -ap_rst -HEAT3D_Pipeline_VITIS_LOOP_121_4 -return value - -ap_ctrl_hs - -in -1 -control - - -ap_start -HEAT3D_Pipeline_VITIS_LOOP_121_4 -return value - -ap_ctrl_hs - -in -1 -control - - -ap_done -HEAT3D_Pipeline_VITIS_LOOP_121_4 -return value - -ap_ctrl_hs - -out -1 -control - - -ap_idle -HEAT3D_Pipeline_VITIS_LOOP_121_4 -return value - -ap_ctrl_hs - -out -1 -control - - -ap_ready -HEAT3D_Pipeline_VITIS_LOOP_121_4 -return value - -ap_ctrl_hs - -out -1 -control - - -in_stream_2_to_15_dout -in_stream_2_to_15 -pointer - -ap_fifo - -in -512 -control - - -in_stream_2_to_15_empty_n -in_stream_2_to_15 -pointer - -ap_fifo - -in -1 -control - - -in_stream_2_to_15_read -in_stream_2_to_15 -pointer - -ap_fifo - -out -1 -control - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_62_1.sched.adb.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_62_1.sched.adb.xml deleted file mode 100644 index f58679c2..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_62_1.sched.adb.xml +++ /dev/null @@ -1,306 +0,0 @@ -HEAT3D_Pipeline_VITIS_LOOP_62_1 - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -Cmp - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -Adder - - - - - - - - - - - - -NULL - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -FIFO - - - - - - - - - - - -NULL - - - - - - - - - - - -FIFO - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_62_1.verbose.sched.rpt.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_62_1.verbose.sched.rpt.xml deleted file mode 100644 index b0599bf8..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_62_1.verbose.sched.rpt.xml +++ /dev/null @@ -1,46 +0,0 @@ - - -
-Fri Jul 12 20:03:00 2024 - -2022.2 (Build 3670227 on Oct 13 2022) -project -HEAT3D (Vivado IP Flow Target) -virtexuplus -xcu280-fsvh2892-2L-e -
- -
- -
- -Clock, Target, Estimated, Uncertainty -3.33 ns, 2.431 ns, 0.90 ns -
-
-
-
- -
- -, min, max, min, max, min, max, Type -16, 16, 53.280 ns, 53.280 ns, 16, 16, no -
-
- -
- -Instance, Module, min, max, min, max, min, max, Type -
-
- -Loop Name, min, max, Latency, achieved, target, Count, Pipelined -14, 14, 2, 1, 1, 14, yes -
-
-
-
-
-
-
-
diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_62_1_csynth.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_62_1_csynth.xml deleted file mode 100644 index 4ddadbb1..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_62_1_csynth.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - -2022.2 - - - -ns -virtexuplus -xcu280-fsvh2892-2L-e -HEAT3D_Pipeline_VITIS_LOOP_62_1 -3.33 -0.90 -vivado - - - -no - -ns -2.431 - - -clock cycles -16 -16 -16 -53.280 ns -53.280 ns -53.280 ns -16 -16 - - - -2.43 -14 -14 -46 -1 -2 - - - - - - - - -7 -81 -0 -0 -0 - - -4032 -9024 -2607360 -1303680 -960 - - - - - -ap_clk -HEAT3D_Pipeline_VITIS_LOOP_62_1 -return value - -ap_ctrl_hs - -in -1 -control - - -ap_rst -HEAT3D_Pipeline_VITIS_LOOP_62_1 -return value - -ap_ctrl_hs - -in -1 -control - - -ap_start -HEAT3D_Pipeline_VITIS_LOOP_62_1 -return value - -ap_ctrl_hs - -in -1 -control - - -ap_done -HEAT3D_Pipeline_VITIS_LOOP_62_1 -return value - -ap_ctrl_hs - -out -1 -control - - -ap_idle -HEAT3D_Pipeline_VITIS_LOOP_62_1 -return value - -ap_ctrl_hs - -out -1 -control - - -ap_ready -HEAT3D_Pipeline_VITIS_LOOP_62_1 -return value - -ap_ctrl_hs - -out -1 -control - - -in_s_dout -in_s -pointer - -ap_fifo - -in -513 -control - - -in_s_empty_n -in_s -pointer - -ap_fifo - -in -1 -control - - -in_s_read -in_s -pointer - -ap_fifo - -out -1 -control - - -in_stream_m15_to_m2_din -in_stream_m15_to_m2 -pointer - -ap_fifo - -out -512 -control - - -in_stream_m15_to_m2_full_n -in_stream_m15_to_m2 -pointer - -ap_fifo - -in -1 -control - - -in_stream_m15_to_m2_write -in_stream_m15_to_m2 -pointer - -ap_fifo - -out -1 -control - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_68_2.sched.adb.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_68_2.sched.adb.xml deleted file mode 100644 index b9a0d66c..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_68_2.sched.adb.xml +++ /dev/null @@ -1,306 +0,0 @@ -HEAT3D_Pipeline_VITIS_LOOP_68_2 - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -Cmp - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -Adder - - - - - - - - - - - - -NULL - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -FIFO - - - - - - - - - - - -NULL - - - - - - - - - - - -FIFO - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_68_2.verbose.sched.rpt.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_68_2.verbose.sched.rpt.xml deleted file mode 100644 index e089c9f0..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_68_2.verbose.sched.rpt.xml +++ /dev/null @@ -1,46 +0,0 @@ - - -
-Fri Jul 12 20:03:00 2024 - -2022.2 (Build 3670227 on Oct 13 2022) -project -HEAT3D (Vivado IP Flow Target) -virtexuplus -xcu280-fsvh2892-2L-e -
- -
- -
- -Clock, Target, Estimated, Uncertainty -3.33 ns, 2.431 ns, 0.90 ns -
-
-
-
- -
- -, min, max, min, max, min, max, Type -16, 16, 53.280 ns, 53.280 ns, 16, 16, no -
-
- -
- -Instance, Module, min, max, min, max, min, max, Type -
-
- -Loop Name, min, max, Latency, achieved, target, Count, Pipelined -14, 14, 2, 1, 1, 14, yes -
-
-
-
-
-
-
-
diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_68_2_csynth.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_68_2_csynth.xml deleted file mode 100644 index 03f98a6a..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_Pipeline_VITIS_LOOP_68_2_csynth.xml +++ /dev/null @@ -1,200 +0,0 @@ - - - -2022.2 - - - -ns -virtexuplus -xcu280-fsvh2892-2L-e -HEAT3D_Pipeline_VITIS_LOOP_68_2 -3.33 -0.90 -vivado - - - -no - -ns -2.431 - - -clock cycles -16 -16 -16 -53.280 ns -53.280 ns -53.280 ns -16 -16 - - - -2.43 -14 -14 -46 -1 -2 - - - - - - - - -9 -83 -0 -0 -0 - - -4032 -9024 -2607360 -1303680 -960 - - - - - -ap_clk -HEAT3D_Pipeline_VITIS_LOOP_68_2 -return value - -ap_ctrl_hs - -in -1 -control - - -ap_rst -HEAT3D_Pipeline_VITIS_LOOP_68_2 -return value - -ap_ctrl_hs - -in -1 -control - - -ap_start -HEAT3D_Pipeline_VITIS_LOOP_68_2 -return value - -ap_ctrl_hs - -in -1 -control - - -ap_done -HEAT3D_Pipeline_VITIS_LOOP_68_2 -return value - -ap_ctrl_hs - -out -1 -control - - -ap_idle -HEAT3D_Pipeline_VITIS_LOOP_68_2 -return value - -ap_ctrl_hs - -out -1 -control - - -ap_ready -HEAT3D_Pipeline_VITIS_LOOP_68_2 -return value - -ap_ctrl_hs - -out -1 -control - - -in_s_dout -in_s -pointer - -ap_fifo - -in -513 -control - - -in_s_empty_n -in_s -pointer - -ap_fifo - -in -1 -control - - -in_s_read -in_s -pointer - -ap_fifo - -out -1 -control - - -in_stream_2_to_15_din -in_stream_2_to_15 -pointer - -ap_fifo - -out -512 -control - - -in_stream_2_to_15_full_n -in_stream_2_to_15 -pointer - -ap_fifo - -in -1 -control - - -in_stream_2_to_15_write -in_stream_2_to_15 -pointer - -ap_fifo - -out -1 -control - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_csynth.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_csynth.xml deleted file mode 100644 index cd514502..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_csynth.xml +++ /dev/null @@ -1,242 +0,0 @@ - - - -2022.2 - - - -ns -virtexuplus -xcu280-fsvh2892-2L-e -HEAT3D -3.33 -0.90 -vivado - - - -no - -ns -2.431 - - -clock cycles -undef -undef -undef -undef -undef -undef -undef -undef - - - - - -0 -480 -85918 -40261 -0 - - -4032 -9024 -2607360 -1303680 -960 - - - - - -ap_clk -HEAT3D -return value - -ap_ctrl_hs - -in -1 -control - - -ap_rst_n -HEAT3D -return value - -ap_ctrl_hs - -in -1 -control - - -ap_start -HEAT3D -return value - -ap_ctrl_hs - -in -1 -control - - -ap_done -HEAT3D -return value - -ap_ctrl_hs - -out -1 -control - - -ap_idle -HEAT3D -return value - -ap_ctrl_hs - -out -1 -control - - -ap_ready -HEAT3D -return value - -ap_ctrl_hs - -out -1 -control - - -in_s_dout -in_s -pointer - -ap_fifo - -in -513 -control -int - - -in_s_empty_n -in_s -pointer - -ap_fifo - -in -1 -control -int - - -in_s_read -in_s -pointer - -ap_fifo - -out -1 -control -int - - -in_peek_dout -in_peek -pointer - -ap_fifo - -in -513 -control -int - - -in_peek_empty_n -in_peek -pointer - -ap_fifo - -in -1 -control -int - - -in_peek_read -in_peek -pointer - -ap_fifo - -out -1 -control -int - - -out_r_din -out_r -pointer - -ap_fifo - -out -513 -control -int - - -out_r_full_n -out_r -pointer - -ap_fifo - -in -1 -control -int - - -out_r_write -out_r -pointer - -ap_fifo - -out -1 -control -int - - -iters -iters -scalar - -ap_none - -in -32 -data -int - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_stencil_kernel.sched.adb.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_stencil_kernel.sched.adb.xml deleted file mode 100644 index 3a3ee580..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_stencil_kernel.sched.adb.xml +++ /dev/null @@ -1,1707 +0,0 @@ -HEAT3D_stencil_kernel - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -FMul_maxdsp - - - - - - - - - - - - - - -FMul_maxdsp - - - - - - - - - - - - - - -FMul_maxdsp - - - - - - - - - - - - - - -FMul_maxdsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FMul_maxdsp - - - - - - - - - - - -FMul_maxdsp - - - - - - - - - - - - - - -FMul_maxdsp - - - - - - - - - - - -FMul_maxdsp - - - - - - - - - - - - - - -FMul_maxdsp - - - - - - - - - - - -FMul_maxdsp - - - - - - - - - - - - - - -FMul_maxdsp - - - - - - - - - - - -FMul_maxdsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FMul_maxdsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FMul_maxdsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FMul_maxdsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FMul_maxdsp - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - - - - -FAddSub_fulldsp - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_stencil_kernel.verbose.sched.rpt.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_stencil_kernel.verbose.sched.rpt.xml deleted file mode 100644 index 4e9316d6..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_stencil_kernel.verbose.sched.rpt.xml +++ /dev/null @@ -1,45 +0,0 @@ - - -
-Fri Jul 12 20:03:00 2024 - -2022.2 (Build 3670227 on Oct 13 2022) -project -HEAT3D (Vivado IP Flow Target) -virtexuplus -xcu280-fsvh2892-2L-e -
- -
- -
- -Clock, Target, Estimated, Uncertainty -3.33 ns, 2.342 ns, 0.90 ns -
-
-
-
- -
- -, min, max, min, max, min, max, Type -42, 42, 0.140 us, 0.140 us, 1, 1, yes -
-
- -
- -Instance, Module, min, max, min, max, min, max, Type -
-
- -Loop Name, min, max, Latency, achieved, target, Count, Pipelined -
-
-
-
-
-
-
-
diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_stencil_kernel_csynth.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_stencil_kernel_csynth.xml deleted file mode 100644 index 5c4cf24a..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HEAT3D_stencil_kernel_csynth.xml +++ /dev/null @@ -1,179 +0,0 @@ - - - -2022.2 - - - -ns -virtexuplus -xcu280-fsvh2892-2L-e -HEAT3D_stencil_kernel -3.33 -0.90 -vivado - - - -yes - -ns -2.342 - - -clock cycles -42 -42 -42 -0.140 us -0.140 us -0.140 us -1 -43 -1 -1 - - - - - -30 -4811 -2364 -0 -0 - - -4032 -9024 -2607360 -1303680 -960 - - - - - -ap_clk -HEAT3D_stencil_kernel -return value - -ap_ctrl_hs - -in -1 -control - - -ap_rst -HEAT3D_stencil_kernel -return value - -ap_ctrl_hs - -in -1 -control - - -ap_return -HEAT3D_stencil_kernel -return value - -ap_ctrl_hs - -out -32 -data - - -ap_ce -HEAT3D_stencil_kernel -return value - -ap_ctrl_hs - -in -1 -control - - -in_1_0_0 -in_1_0_0 -scalar - -ap_none - -in -32 -data - - -in_0_0_1 -in_0_0_1 -scalar - -ap_none - -in -32 -data - - -in_0_0_m1 -in_0_0_m1 -scalar - -ap_none - -in -32 -data - - -in_0_0_0 -in_0_0_0 -scalar - -ap_none - -in -32 -data - - -in_0_m1_0 -in_0_m1_0 -scalar - -ap_none - -in -32 -data - - -in_m1_0_0 -in_m1_0_0 -scalar - -ap_none - -in -32 -data - - -in_0_1_0 -in_0_1_0 -scalar - -ap_none - -in -32 -data - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HLS_REG_ap_uint_512_s.verbose.sched.rpt.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HLS_REG_ap_uint_512_s.verbose.sched.rpt.xml deleted file mode 100644 index cc132da8..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HLS_REG_ap_uint_512_s.verbose.sched.rpt.xml +++ /dev/null @@ -1,45 +0,0 @@ - - -
-Fri Jul 12 20:03:00 2024 - -2022.2 (Build 3670227 on Oct 13 2022) -project -HEAT3D (Vivado IP Flow Target) -virtexuplus -xcu280-fsvh2892-2L-e -
- -
- -
- -Clock, Target, Estimated, Uncertainty -3.33 ns, 0 ns, 0.90 ns -
-
-
-
- -
- -, min, max, min, max, min, max, Type -0, 0, 0 ns, 0 ns, 1, 1, yes -
-
- -
- -Instance, Module, min, max, min, max, min, max, Type -
-
- -Loop Name, min, max, Latency, achieved, target, Count, Pipelined -
-
-
-
-
-
-
-
diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HLS_REG_ap_uint_512_s_csynth.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HLS_REG_ap_uint_512_s_csynth.xml deleted file mode 100644 index 6056385c..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/HLS_REG_ap_uint_512_s_csynth.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - -2022.2 - - - -ns -virtexuplus -xcu280-fsvh2892-2L-e -HLS_REG_ap_uint_512_s -3.33 -0.90 -4294967295 -vivado - - - -yes - -ns -0.000 - - -clock cycles -0 -0 -0 -0 ns -0 ns -0 ns -1 -1 -1 -1 - - - - - -0 -0 -0 -0 -0 - - -4032 -9024 -2607360 -1303680 -960 - - - - - -ap_ready -HLS_REG<ap_uint<512> > -return value - -ap_ctrl_hs - -out -1 -control - - -ap_return -HLS_REG<ap_uint<512> > -return value - -ap_ctrl_hs - -out -512 -data - - -in_r -in_r -scalar - -ap_none - -in -512 -data - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/csynth.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/csynth.xml deleted file mode 100644 index e8641769..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/csynth.xml +++ /dev/null @@ -1,1038 +0,0 @@ - - - 2022.2 - - - ns - virtexuplus - xcu280-fsvh2892-2L-e - unikernel - 3.33 - 0.90 - vivado - - - no - - ns - 1.000 - - - clock cycles - 0 - 0 - 0 - 0 ns - 0 ns - 0 ns - 1 - 1 - - - - - 0 - 1754 - 3176 - 0 - 0 - - - 4032 - 9024 - 2607360 - 1303680 - 960 - - - - - s_axi_control_AWVALID - control - scalar - s_axi - in - 1 - unknown - int - 1 - - - s_axi_control_AWREADY - control - scalar - s_axi - out - 1 - unknown - int - 1 - - - s_axi_control_AWADDR - control - scalar - s_axi - in - 9 - unknown - int - 1 - - - s_axi_control_WVALID - control - scalar - s_axi - in - 1 - unknown - int - 1 - - - s_axi_control_WREADY - control - scalar - s_axi - out - 1 - unknown - int - 1 - - - s_axi_control_WDATA - control - scalar - s_axi - in - 32 - unknown - int - 1 - - - s_axi_control_WSTRB - control - scalar - s_axi - in - 4 - unknown - int - 1 - - - s_axi_control_ARVALID - control - scalar - s_axi - in - 1 - unknown - int - 1 - - - s_axi_control_ARREADY - control - scalar - s_axi - out - 1 - unknown - int - 1 - - - s_axi_control_ARADDR - control - scalar - s_axi - in - 9 - unknown - int - 1 - - - s_axi_control_RVALID - control - scalar - s_axi - out - 1 - unknown - int - 1 - - - s_axi_control_RREADY - control - scalar - s_axi - in - 1 - unknown - int - 1 - - - s_axi_control_RDATA - control - scalar - s_axi - out - 32 - unknown - int - 1 - - - s_axi_control_RRESP - control - scalar - s_axi - out - 2 - unknown - int - 1 - - - s_axi_control_BVALID - control - scalar - s_axi - out - 1 - unknown - int - 1 - - - s_axi_control_BREADY - control - scalar - s_axi - in - 1 - unknown - int - 1 - - - s_axi_control_BRESP - control - scalar - s_axi - out - 2 - unknown - int - 1 - - - ap_clk - unikernel - return value - - ap_ctrl_hs - - in - 1 - control - - - ap_rst_n - unikernel - return value - - ap_ctrl_hs - - in - 1 - control - - - interrupt - unikernel - return value - - ap_ctrl_hs - - out - 1 - unknown - - - - - unikernel - - - - - unikernel - - - 3.33 - 0.90 - 1.000 - - - 0 - 0 - 0 - 0 ns - 0 ns - 0 ns - 1 - no - - - - - 0 - 4032 - 0 - 1754 - 2607360 - ~0 - 3176 - 1303680 - ~0 - 0 - 960 - 0 - 0 - 9024 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - s_axi_control_ARADDR - s_axi_control_ARREADY - s_axi_control_ARVALID - s_axi_control_AWADDR - s_axi_control_AWREADY - s_axi_control_AWVALID - s_axi_control_BREADY - s_axi_control_BRESP - s_axi_control_BVALID - s_axi_control_RDATA - s_axi_control_RREADY - s_axi_control_RRESP - s_axi_control_RVALID - s_axi_control_WDATA - s_axi_control_WREADY - s_axi_control_WSTRB - s_axi_control_WVALID - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - s_axi_control - ap_rst_n - - - CLK - - - ap_clk - - - - - ACTIVE_LOW - - - RST - - - ap_rst_n - - - - - LEVEL_HIGH - - - INTERRUPT - - - interrupt - - - - -
- - - Interface, Data Width, Address Width, Offset, Register - 32, 9, 16, 0, , , , , -
-
- - - Interface, Register, Offset, Width, Access, Description, Bit Fields - CTRL, 0x00, 32, RW, Control signals, 0=AP_START 1=AP_DONE 2=AP_IDLE 3=AP_READY 7=AUTO_RESTART 9=INTERRUPT - GIER, 0x04, 32, RW, Global Interrupt Enable Register, 0=Enable - IP_IER, 0x08, 32, RW, IP Interrupt Enable Register, 0=CHAN0_INT_EN 1=CHAN1_INT_EN - IP_ISR, 0x0c, 32, RW, IP Interrupt Status Register, 0=CHAN0_INT_ST 1=CHAN1_INT_ST - in_0_1, 0x10, 32, W, Data signal of in_0, - in_0_2, 0x14, 32, W, Data signal of in_0, - out_0_1, 0x1c, 32, W, Data signal of out_0, - out_0_2, 0x20, 32, W, Data signal of out_0, - in_1_1, 0x28, 32, W, Data signal of in_1, - in_1_2, 0x2c, 32, W, Data signal of in_1, - out_1_1, 0x34, 32, W, Data signal of out_1, - out_1_2, 0x38, 32, W, Data signal of out_1, - in_2_1, 0x40, 32, W, Data signal of in_2, - in_2_2, 0x44, 32, W, Data signal of in_2, - out_2_1, 0x4c, 32, W, Data signal of out_2, - out_2_2, 0x50, 32, W, Data signal of out_2, - in_3_1, 0x58, 32, W, Data signal of in_3, - in_3_2, 0x5c, 32, W, Data signal of in_3, - out_3_1, 0x64, 32, W, Data signal of out_3, - out_3_2, 0x68, 32, W, Data signal of out_3, - in_4_1, 0x70, 32, W, Data signal of in_4, - in_4_2, 0x74, 32, W, Data signal of in_4, - out_4_1, 0x7c, 32, W, Data signal of out_4, - out_4_2, 0x80, 32, W, Data signal of out_4, - in_5_1, 0x88, 32, W, Data signal of in_5, - in_5_2, 0x8c, 32, W, Data signal of in_5, - out_5_1, 0x94, 32, W, Data signal of out_5, - out_5_2, 0x98, 32, W, Data signal of out_5, - in_6_1, 0xa0, 32, W, Data signal of in_6, - in_6_2, 0xa4, 32, W, Data signal of in_6, - out_6_1, 0xac, 32, W, Data signal of out_6, - out_6_2, 0xb0, 32, W, Data signal of out_6, - in_7_1, 0xb8, 32, W, Data signal of in_7, - in_7_2, 0xbc, 32, W, Data signal of in_7, - out_7_1, 0xc4, 32, W, Data signal of out_7, - out_7_2, 0xc8, 32, W, Data signal of out_7, - in_8_1, 0xd0, 32, W, Data signal of in_8, - in_8_2, 0xd4, 32, W, Data signal of in_8, - out_8_1, 0xdc, 32, W, Data signal of out_8, - out_8_2, 0xe0, 32, W, Data signal of out_8, - in_9_1, 0xe8, 32, W, Data signal of in_9, - in_9_2, 0xec, 32, W, Data signal of in_9, - out_9_1, 0xf4, 32, W, Data signal of out_9, - out_9_2, 0xf8, 32, W, Data signal of out_9, - in_10_1, 0x100, 32, W, Data signal of in_10, - in_10_2, 0x104, 32, W, Data signal of in_10, - out_10_1, 0x10c, 32, W, Data signal of out_10, - out_10_2, 0x110, 32, W, Data signal of out_10, - in_11_1, 0x118, 32, W, Data signal of in_11, - in_11_2, 0x11c, 32, W, Data signal of in_11, - out_11_1, 0x124, 32, W, Data signal of out_11, - out_11_2, 0x128, 32, W, Data signal of out_11, - iters, 0x130, 32, W, Data signal of iters, -
-
- - - Interface, Type, Ports - clock, ap_clk, - reset, ap_rst_n, - interrupt, interrupt, - ap_ctrl_hs, , -
-
-
-
- -
- - - Argument, Direction, Datatype - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, long unsigned int - in, unsigned int -
-
- - - Argument, HW Interface, HW Type, HW Info - s_axi_control, register, name=in_0_1 offset=0x10 range=32, - s_axi_control, register, name=in_0_2 offset=0x14 range=32, - s_axi_control, register, name=out_0_1 offset=0x1c range=32, - s_axi_control, register, name=out_0_2 offset=0x20 range=32, - s_axi_control, register, name=in_1_1 offset=0x28 range=32, - s_axi_control, register, name=in_1_2 offset=0x2c range=32, - s_axi_control, register, name=out_1_1 offset=0x34 range=32, - s_axi_control, register, name=out_1_2 offset=0x38 range=32, - s_axi_control, register, name=in_2_1 offset=0x40 range=32, - s_axi_control, register, name=in_2_2 offset=0x44 range=32, - s_axi_control, register, name=out_2_1 offset=0x4c range=32, - s_axi_control, register, name=out_2_2 offset=0x50 range=32, - s_axi_control, register, name=in_3_1 offset=0x58 range=32, - s_axi_control, register, name=in_3_2 offset=0x5c range=32, - s_axi_control, register, name=out_3_1 offset=0x64 range=32, - s_axi_control, register, name=out_3_2 offset=0x68 range=32, - s_axi_control, register, name=in_4_1 offset=0x70 range=32, - s_axi_control, register, name=in_4_2 offset=0x74 range=32, - s_axi_control, register, name=out_4_1 offset=0x7c range=32, - s_axi_control, register, name=out_4_2 offset=0x80 range=32, - s_axi_control, register, name=in_5_1 offset=0x88 range=32, - s_axi_control, register, name=in_5_2 offset=0x8c range=32, - s_axi_control, register, name=out_5_1 offset=0x94 range=32, - s_axi_control, register, name=out_5_2 offset=0x98 range=32, - s_axi_control, register, name=in_6_1 offset=0xa0 range=32, - s_axi_control, register, name=in_6_2 offset=0xa4 range=32, - s_axi_control, register, name=out_6_1 offset=0xac range=32, - s_axi_control, register, name=out_6_2 offset=0xb0 range=32, - s_axi_control, register, name=in_7_1 offset=0xb8 range=32, - s_axi_control, register, name=in_7_2 offset=0xbc range=32, - s_axi_control, register, name=out_7_1 offset=0xc4 range=32, - s_axi_control, register, name=out_7_2 offset=0xc8 range=32, - s_axi_control, register, name=in_8_1 offset=0xd0 range=32, - s_axi_control, register, name=in_8_2 offset=0xd4 range=32, - s_axi_control, register, name=out_8_1 offset=0xdc range=32, - s_axi_control, register, name=out_8_2 offset=0xe0 range=32, - s_axi_control, register, name=in_9_1 offset=0xe8 range=32, - s_axi_control, register, name=in_9_2 offset=0xec range=32, - s_axi_control, register, name=out_9_1 offset=0xf4 range=32, - s_axi_control, register, name=out_9_2 offset=0xf8 range=32, - s_axi_control, register, name=in_10_1 offset=0x100 range=32, - s_axi_control, register, name=in_10_2 offset=0x104 range=32, - s_axi_control, register, name=out_10_1 offset=0x10c range=32, - s_axi_control, register, name=out_10_2 offset=0x110 range=32, - s_axi_control, register, name=in_11_1 offset=0x118 range=32, - s_axi_control, register, name=in_11_2 offset=0x11c range=32, - s_axi_control, register, name=out_11_1 offset=0x124 range=32, - s_axi_control, register, name=out_11_2 offset=0x128 range=32, - s_axi_control, register, name=iters offset=0x130 range=32, -
-
-
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/inter_kernel.sched.adb.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/inter_kernel.sched.adb.xml deleted file mode 100644 index 5461337f..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/inter_kernel.sched.adb.xml +++ /dev/null @@ -1,1170 +0,0 @@ -inter_kernel - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -FIFO - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -Cmp - - - - - - - - - - - -Adder - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/inter_kernel.verbose.sched.rpt.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/inter_kernel.verbose.sched.rpt.xml deleted file mode 100644 index 68525a5c..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/inter_kernel.verbose.sched.rpt.xml +++ /dev/null @@ -1,46 +0,0 @@ - - -
-Fri Jul 12 20:03:00 2024 - -2022.2 (Build 3670227 on Oct 13 2022) -project -inter_kernel (Vivado IP Flow Target) -virtexuplus -xcu280-fsvh2892-2L-e -
- -
- -
- -Clock, Target, Estimated, Uncertainty -3.33 ns, 2.431 ns, 0.90 ns -
-
-
-
- -
- -, min, max, min, max, min, max, Type -?, ?, ?, ?, ?, ?, no -
-
- -
- -Instance, Module, min, max, min, max, min, max, Type -
-
- -Loop Name, min, max, Latency, achieved, target, Count, Pipelined -?, ?, ?, -, -, ?, no -
-
-
-
-
-
-
-
diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/inter_kernel_csynth.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/inter_kernel_csynth.xml deleted file mode 100644 index 3cf9c435..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/inter_kernel_csynth.xml +++ /dev/null @@ -1,757 +0,0 @@ - - - -2022.2 - - - -ns -virtexuplus -xcu280-fsvh2892-2L-e -inter_kernel -3.33 -0.90 -vivado - - - -no - -ns -2.431 - - -clock cycles -undef -undef -undef -undef -undef -undef -undef -undef - - - -2.43 -undef -undef -undef -undef - - - - - - - - -384 -846 -0 -0 -0 - - -4032 -9024 -2607360 -1303680 -960 - - - - - -ap_clk -inter_kernel -return value - -ap_ctrl_hs - -in -1 -control - - -ap_rst_n -inter_kernel -return value - -ap_ctrl_hs - -in -1 -control - - -ap_start -inter_kernel -return value - -ap_ctrl_hs - -in -1 -control - - -ap_done -inter_kernel -return value - -ap_ctrl_hs - -out -1 -control - - -ap_idle -inter_kernel -return value - -ap_ctrl_hs - -out -1 -control - - -ap_ready -inter_kernel -return value - -ap_ctrl_hs - -out -1 -control - - -a_read_addr_din -a_read_addr -pointer - -ap_fifo - -out -65 -control -int - - -a_read_addr_full_n -a_read_addr -pointer - -ap_fifo - -in -1 -control -int - - -a_read_addr_write -a_read_addr -pointer - -ap_fifo - -out -1 -control -int - - -a_read_data_s_dout -a_read_data_s -pointer - -ap_fifo - -in -513 -control -int - - -a_read_data_s_empty_n -a_read_data_s -pointer - -ap_fifo - -in -1 -control -int - - -a_read_data_s_read -a_read_data_s -pointer - -ap_fifo - -out -1 -control -int - - -a_read_data_peek_dout -a_read_data_peek -pointer - -ap_fifo - -in -513 -control -int - - -a_read_data_peek_empty_n -a_read_data_peek -pointer - -ap_fifo - -in -1 -control -int - - -a_read_data_peek_read -a_read_data_peek -pointer - -ap_fifo - -out -1 -control -int - - -a_write_addr_din -a_write_addr -pointer - -ap_fifo - -out -65 -control -int - - -a_write_addr_full_n -a_write_addr -pointer - -ap_fifo - -in -1 -control -int - - -a_write_addr_write -a_write_addr -pointer - -ap_fifo - -out -1 -control -int - - -a_write_data_din -a_write_data -pointer - -ap_fifo - -out -513 -control -int - - -a_write_data_full_n -a_write_data -pointer - -ap_fifo - -in -1 -control -int - - -a_write_data_write -a_write_data -pointer - -ap_fifo - -out -1 -control -int - - -a_write_resp_s_dout -a_write_resp_s -pointer - -ap_fifo - -in -9 -control -int - - -a_write_resp_s_empty_n -a_write_resp_s -pointer - -ap_fifo - -in -1 -control -int - - -a_write_resp_s_read -a_write_resp_s -pointer - -ap_fifo - -out -1 -control -int - - -a_write_resp_peek_dout -a_write_resp_peek -pointer - -ap_fifo - -in -9 -control -int - - -a_write_resp_peek_empty_n -a_write_resp_peek -pointer - -ap_fifo - -in -1 -control -int - - -a_write_resp_peek_read -a_write_resp_peek -pointer - -ap_fifo - -out -1 -control -int - - -b_read_addr_din -b_read_addr -pointer - -ap_fifo - -out -65 -control -int - - -b_read_addr_full_n -b_read_addr -pointer - -ap_fifo - -in -1 -control -int - - -b_read_addr_write -b_read_addr -pointer - -ap_fifo - -out -1 -control -int - - -b_read_data_s_dout -b_read_data_s -pointer - -ap_fifo - -in -513 -control -int - - -b_read_data_s_empty_n -b_read_data_s -pointer - -ap_fifo - -in -1 -control -int - - -b_read_data_s_read -b_read_data_s -pointer - -ap_fifo - -out -1 -control -int - - -b_read_data_peek_dout -b_read_data_peek -pointer - -ap_fifo - -in -513 -control -int - - -b_read_data_peek_empty_n -b_read_data_peek -pointer - -ap_fifo - -in -1 -control -int - - -b_read_data_peek_read -b_read_data_peek -pointer - -ap_fifo - -out -1 -control -int - - -b_write_addr_din -b_write_addr -pointer - -ap_fifo - -out -65 -control -int - - -b_write_addr_full_n -b_write_addr -pointer - -ap_fifo - -in -1 -control -int - - -b_write_addr_write -b_write_addr -pointer - -ap_fifo - -out -1 -control -int - - -b_write_data_din -b_write_data -pointer - -ap_fifo - -out -513 -control -int - - -b_write_data_full_n -b_write_data -pointer - -ap_fifo - -in -1 -control -int - - -b_write_data_write -b_write_data -pointer - -ap_fifo - -out -1 -control -int - - -b_write_resp_s_dout -b_write_resp_s -pointer - -ap_fifo - -in -9 -control -int - - -b_write_resp_s_empty_n -b_write_resp_s -pointer - -ap_fifo - -in -1 -control -int - - -b_write_resp_s_read -b_write_resp_s -pointer - -ap_fifo - -out -1 -control -int - - -b_write_resp_peek_dout -b_write_resp_peek -pointer - -ap_fifo - -in -9 -control -int - - -b_write_resp_peek_empty_n -b_write_resp_peek -pointer - -ap_fifo - -in -1 -control -int - - -b_write_resp_peek_read -b_write_resp_peek -pointer - -ap_fifo - -out -1 -control -int - - -stream_out_din -stream_out -pointer - -ap_fifo - -out -513 -control -int - - -stream_out_full_n -stream_out -pointer - -ap_fifo - -in -1 -control -int - - -stream_out_write -stream_out -pointer - -ap_fifo - -out -1 -control -int - - -stream_in_s_dout -stream_in_s -pointer - -ap_fifo - -in -513 -control -int - - -stream_in_s_empty_n -stream_in_s -pointer - -ap_fifo - -in -1 -control -int - - -stream_in_s_read -stream_in_s -pointer - -ap_fifo - -out -1 -control -int - - -stream_in_peek_dout -stream_in_peek -pointer - -ap_fifo - -in -513 -control -int - - -stream_in_peek_empty_n -stream_in_peek -pointer - -ap_fifo - -in -1 -control -int - - -stream_in_peek_read -stream_in_peek -pointer - -ap_fifo - -out -1 -control -int - - -iters -iters -scalar - -ap_none - -in -32 -data -int - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load.sched.adb.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load.sched.adb.xml deleted file mode 100644 index 3546cdbc..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load.sched.adb.xml +++ /dev/null @@ -1,267 +0,0 @@ -load - - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -TAddSub - - - - - - - - - - - -TAddSub - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load.verbose.sched.rpt.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load.verbose.sched.rpt.xml deleted file mode 100644 index 8a5dc616..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load.verbose.sched.rpt.xml +++ /dev/null @@ -1,45 +0,0 @@ - - -
-Fri Jul 12 20:03:00 2024 - -2022.2 (Build 3670227 on Oct 13 2022) -project -inter_kernel (Vivado IP Flow Target) -virtexuplus -xcu280-fsvh2892-2L-e -
- -
- -
- -Clock, Target, Estimated, Uncertainty -3.33 ns, 2.431 ns, 0.90 ns -
-
-
-
- -
- -, min, max, min, max, min, max, Type -?, ?, ?, ?, ?, ?, no -
-
- -
- -Instance, Module, min, max, min, max, min, max, Type -
-
- -Loop Name, min, max, Latency, achieved, target, Count, Pipelined -
-
-
-
-
-
-
-
diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load_Pipeline_VITIS_LOOP_45_1.sched.adb.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load_Pipeline_VITIS_LOOP_45_1.sched.adb.xml deleted file mode 100644 index 4e85f7de..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load_Pipeline_VITIS_LOOP_45_1.sched.adb.xml +++ /dev/null @@ -1,1377 +0,0 @@ -load_Pipeline_VITIS_LOOP_45_1 - - - - - - - - - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -Cmp - - - - - - - - - - - -Cmp - - - - - - - - - - - -LogicGate - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - -Cmp - - - - - - - - - - - - -NULL - - - - - - - - - - - - -NULL - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - -FIFO - - - - - - - - - - - - - -Adder - - - - - - - - - - - - - -Sel - - - - - - - - - - - - - -FIFO - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - -FIFO - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - -Cmp - - - - - - - - - - - - -NULL - - - - - - - - - - - - -FIFO - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - -FIFO - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - -FIFO - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - -FIFO - - - - - - - - - - - - -NULL - - - - - - - - - - - - -FIFO - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - -NULL - - - - - - - - - - - - -FIFO - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - -FIFO - - - - - - - - - - - - - - - -Adder - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - -FIFO - - - - - - - - - - - - - - - - -FIFO - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - -FIFO - - - - - - - - - - - - - - - - -Adder - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - -Adder - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - -Adder - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load_Pipeline_VITIS_LOOP_45_1.verbose.sched.rpt.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load_Pipeline_VITIS_LOOP_45_1.verbose.sched.rpt.xml deleted file mode 100644 index ef40f149..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load_Pipeline_VITIS_LOOP_45_1.verbose.sched.rpt.xml +++ /dev/null @@ -1,46 +0,0 @@ - - -
-Fri Jul 12 20:03:00 2024 - -2022.2 (Build 3670227 on Oct 13 2022) -project -inter_kernel (Vivado IP Flow Target) -virtexuplus -xcu280-fsvh2892-2L-e -
- -
- -
- -Clock, Target, Estimated, Uncertainty -3.33 ns, 2.431 ns, 0.90 ns -
-
-
-
- -
- -, min, max, min, max, min, max, Type -?, ?, ?, ?, ?, ?, no -
-
- -
- -Instance, Module, min, max, min, max, min, max, Type -
-
- -Loop Name, min, max, Latency, achieved, target, Count, Pipelined -?, ?, 2, 2, 1, ?, yes -
-
-
-
-
-
-
-
diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load_Pipeline_VITIS_LOOP_45_1_csynth.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load_Pipeline_VITIS_LOOP_45_1_csynth.xml deleted file mode 100644 index 6782227d..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load_Pipeline_VITIS_LOOP_45_1_csynth.xml +++ /dev/null @@ -1,376 +0,0 @@ - - - -2022.2 - - - -ns -virtexuplus -xcu280-fsvh2892-2L-e -load_Pipeline_VITIS_LOOP_45_1 -3.33 -0.90 -vivado - - - -no - -ns -2.431 - - -clock cycles -undef -undef -undef -undef -undef -undef -undef -undef - - - -2.43 -undef -undef -undef -2 -2 - - - - - - - - -279 -438 -0 -0 -0 - - -4032 -9024 -2607360 -1303680 -960 - - - - - -ap_clk -load_Pipeline_VITIS_LOOP_45_1 -return value - -ap_ctrl_hs - -in -1 -control - - -ap_rst -load_Pipeline_VITIS_LOOP_45_1 -return value - -ap_ctrl_hs - -in -1 -control - - -ap_start -load_Pipeline_VITIS_LOOP_45_1 -return value - -ap_ctrl_hs - -in -1 -control - - -ap_done -load_Pipeline_VITIS_LOOP_45_1 -return value - -ap_ctrl_hs - -out -1 -control - - -ap_idle -load_Pipeline_VITIS_LOOP_45_1 -return value - -ap_ctrl_hs - -out -1 -control - - -ap_ready -load_Pipeline_VITIS_LOOP_45_1 -return value - -ap_ctrl_hs - -out -1 -control - - -a_write_resp_s_dout -a_write_resp_s -pointer - -ap_fifo - -in -9 -control - - -a_write_resp_s_empty_n -a_write_resp_s -pointer - -ap_fifo - -in -1 -control - - -a_write_resp_s_read -a_write_resp_s -pointer - -ap_fifo - -out -1 -control - - -loop_bound -loop_bound -scalar - -ap_none - -in -32 -data - - -b_read_addr_din -b_read_addr -pointer - -ap_fifo - -out -65 -control - - -b_read_addr_full_n -b_read_addr -pointer - -ap_fifo - -in -1 -control - - -b_read_addr_write -b_read_addr -pointer - -ap_fifo - -out -1 -control - - -b_read_data_s_dout -b_read_data_s -pointer - -ap_fifo - -in -513 -control - - -b_read_data_s_empty_n -b_read_data_s -pointer - -ap_fifo - -in -1 -control - - -b_read_data_s_read -b_read_data_s -pointer - -ap_fifo - -out -1 -control - - -stream_out_din -stream_out -pointer - -ap_fifo - -out -513 -control - - -stream_out_full_n -stream_out -pointer - -ap_fifo - -in -1 -control - - -stream_out_write -stream_out -pointer - -ap_fifo - -out -1 -control - - -a_write_addr_din -a_write_addr -pointer - -ap_fifo - -out -65 -control - - -a_write_addr_full_n -a_write_addr -pointer - -ap_fifo - -in -1 -control - - -a_write_addr_write -a_write_addr -pointer - -ap_fifo - -out -1 -control - - -a_write_data_din -a_write_data -pointer - -ap_fifo - -out -513 -control - - -a_write_data_full_n -a_write_data -pointer - -ap_fifo - -in -1 -control - - -a_write_data_write -a_write_data -pointer - -ap_fifo - -out -1 -control - - -stream_in_s_dout -stream_in_s -pointer - -ap_fifo - -in -513 -control - - -stream_in_s_empty_n -stream_in_s -pointer - -ap_fifo - -in -1 -control - - -stream_in_s_read -stream_in_s -pointer - -ap_fifo - -out -1 -control - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load_csynth.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load_csynth.xml deleted file mode 100644 index 7e4fb808..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/load_csynth.xml +++ /dev/null @@ -1,364 +0,0 @@ - - - -2022.2 - - - -ns -virtexuplus -xcu280-fsvh2892-2L-e -load -3.33 -0.90 -vivado - - - -no - -ns -2.431 - - -clock cycles -undef -undef -undef -undef -undef -undef -undef -undef - - - - - -315 -585 -0 -0 -0 - - -4032 -9024 -2607360 -1303680 -960 - - - - - -ap_clk -load -return value - -ap_ctrl_hs - -in -1 -control - - -ap_rst -load -return value - -ap_ctrl_hs - -in -1 -control - - -ap_start -load -return value - -ap_ctrl_hs - -in -1 -control - - -ap_done -load -return value - -ap_ctrl_hs - -out -1 -control - - -ap_idle -load -return value - -ap_ctrl_hs - -out -1 -control - - -ap_ready -load -return value - -ap_ctrl_hs - -out -1 -control - - -b_read_addr_din -b_read_addr -pointer - -ap_fifo - -out -65 -control - - -b_read_addr_full_n -b_read_addr -pointer - -ap_fifo - -in -1 -control - - -b_read_addr_write -b_read_addr -pointer - -ap_fifo - -out -1 -control - - -b_read_data_s_dout -b_read_data_s -pointer - -ap_fifo - -in -513 -control - - -b_read_data_s_empty_n -b_read_data_s -pointer - -ap_fifo - -in -1 -control - - -b_read_data_s_read -b_read_data_s -pointer - -ap_fifo - -out -1 -control - - -a_write_addr_din -a_write_addr -pointer - -ap_fifo - -out -65 -control - - -a_write_addr_full_n -a_write_addr -pointer - -ap_fifo - -in -1 -control - - -a_write_addr_write -a_write_addr -pointer - -ap_fifo - -out -1 -control - - -a_write_data_din -a_write_data -pointer - -ap_fifo - -out -513 -control - - -a_write_data_full_n -a_write_data -pointer - -ap_fifo - -in -1 -control - - -a_write_data_write -a_write_data -pointer - -ap_fifo - -out -1 -control - - -a_write_resp_s_dout -a_write_resp_s -pointer - -ap_fifo - -in -9 -control - - -a_write_resp_s_empty_n -a_write_resp_s -pointer - -ap_fifo - -in -1 -control - - -a_write_resp_s_read -a_write_resp_s -pointer - -ap_fifo - -out -1 -control - - -stream_out_din -stream_out -pointer - -ap_fifo - -out -513 -control - - -stream_out_full_n -stream_out -pointer - -ap_fifo - -in -1 -control - - -stream_out_write -stream_out -pointer - -ap_fifo - -out -1 -control - - -stream_in_s_dout -stream_in_s -pointer - -ap_fifo - -in -513 -control - - -stream_in_s_empty_n -stream_in_s -pointer - -ap_fifo - -in -1 -control - - -stream_in_s_read -stream_in_s -pointer - -ap_fifo - -out -1 -control - - -iters -iters -scalar - -ap_none - -in -32 -data - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/unikernel.sched.adb.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/unikernel.sched.adb.xml deleted file mode 100644 index e3a64eee..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/unikernel.sched.adb.xml +++ /dev/null @@ -1,3054 +0,0 @@ -unikernel - - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -s_axilite - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - -NULL - - - - - - - - - - - - - - - - - - - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/unikernel.verbose.sched.rpt.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/unikernel.verbose.sched.rpt.xml deleted file mode 100644 index f0fe535d..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/unikernel.verbose.sched.rpt.xml +++ /dev/null @@ -1,45 +0,0 @@ - - -
-Fri Jul 12 20:02:59 2024 - -2022.2 (Build 3670227 on Oct 13 2022) -project -unikernel (Vivado IP Flow Target) -virtexuplus -xcu280-fsvh2892-2L-e -
- -
- -
- -Clock, Target, Estimated, Uncertainty -3.33 ns, 1.000 ns, 0.90 ns -
-
-
-
- -
- -, min, max, min, max, min, max, Type -0, 0, 0 ns, 0 ns, 1, 1, no -
-
- -
- -Instance, Module, min, max, min, max, min, max, Type -
-
- -Loop Name, min, max, Latency, achieved, target, Count, Pipelined -
-
-
-
-
-
-
-
diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/unikernel_csynth.xml b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/unikernel_csynth.xml deleted file mode 100644 index acb8a0aa..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/report/unikernel_csynth.xml +++ /dev/null @@ -1,276 +0,0 @@ - - - -2022.2 - - - -ns -virtexuplus -xcu280-fsvh2892-2L-e -unikernel -3.33 -0.90 -vivado - - - -no - -ns -1.000 - - -clock cycles -0 -0 -0 -0 ns -0 ns -0 ns -1 -1 - - - - - -0 -1754 -3176 -0 -0 - - -4032 -9024 -2607360 -1303680 -960 - - - - - -s_axi_control_AWVALID -control -scalar -s_axi -in -1 -unknown -int -1 - - -s_axi_control_AWREADY -control -scalar -s_axi -out -1 -unknown -int -1 - - -s_axi_control_AWADDR -control -scalar -s_axi -in -9 -unknown -int -1 - - -s_axi_control_WVALID -control -scalar -s_axi -in -1 -unknown -int -1 - - -s_axi_control_WREADY -control -scalar -s_axi -out -1 -unknown -int -1 - - -s_axi_control_WDATA -control -scalar -s_axi -in -32 -unknown -int -1 - - -s_axi_control_WSTRB -control -scalar -s_axi -in -4 -unknown -int -1 - - -s_axi_control_ARVALID -control -scalar -s_axi -in -1 -unknown -int -1 - - -s_axi_control_ARREADY -control -scalar -s_axi -out -1 -unknown -int -1 - - -s_axi_control_ARADDR -control -scalar -s_axi -in -9 -unknown -int -1 - - -s_axi_control_RVALID -control -scalar -s_axi -out -1 -unknown -int -1 - - -s_axi_control_RREADY -control -scalar -s_axi -in -1 -unknown -int -1 - - -s_axi_control_RDATA -control -scalar -s_axi -out -32 -unknown -int -1 - - -s_axi_control_RRESP -control -scalar -s_axi -out -2 -unknown -int -1 - - -s_axi_control_BVALID -control -scalar -s_axi -out -1 -unknown -int -1 - - -s_axi_control_BREADY -control -scalar -s_axi -in -1 -unknown -int -1 - - -s_axi_control_BRESP -control -scalar -s_axi -out -2 -unknown -int -1 - - -ap_clk -unikernel -return value - -ap_ctrl_hs - -in -1 -control - - -ap_rst_n -unikernel -return value - -ap_ctrl_hs - -in -1 -control - - -interrupt -unikernel -return value - -ap_ctrl_hs - -out -1 -unknown - - - - diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/settings.json b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/settings.json deleted file mode 100644 index fdeb22a8..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/settings.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "additional_fifo_pipelining": false, - "clock_period": 3.33, - "linked": true, - "part_num": "xcu280-fsvh2892-2L-e", - "platform": null, - "synthed": true -} diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/tar/HEAT3D.tar b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/tar/HEAT3D.tar deleted file mode 100644 index bffd5cd248a0f32632ff0ec9559984bbf1639abe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1884160 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 LAh3f#2?+fEQqp0j diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/tar/unikernel.tar b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/generated/tar/unikernel.tar deleted file mode 100644 index 8004bfb84a61bc041d51355d7f4b02a95e29aded..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 348160 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

#*^TUNRPL1>HyiqPGFLLTF8RM*^)H0>hQ^}PR z4?}I$KCN5@P&bp-CxS!wzySk~z=3r@3_O7|AO>E*84v?+;Oy-)VBq7^zYd6jFK`CL z;1h5L#NadYTIIgzbFRhbXo zOd*V}S)xWITKuj=0@rQ+z1Vcs&tE>*_93wT3{?Ji1!$DdPYv+z#J-o!owAI7-e2LtMu>s|%&y_iCYE(-ZX3+X(@#54)RO3tW0 z0~g|$UXUPp%uJ93dGX6ciH{VFi55}@m0vXm30RKX5-*_6OtL>4yebBy3Xmp1Isxei zWE_w=K-L5dUhN5JygCKs7LaFx8m|xlc_|3=AcOGT#j|_#KiTIDhLgW4MDj({@d+AL z{;u#k4Z-MC@_je_SGi~wwRBOS3;2`0Zr?TL#_vydm!341LZpbk4RD9~e?N{Qxvb^X zi&Fnr?E$iw%(i3uQ$2?4HMDgJ z{5)07T$#5!eVkltK{4Rk*9jeA?pC(4OMQ5Zye2S@Ufe`9LUE^h0KuqTAa&RmAb7ak z7rb45dD*Q2>78`+4(ogRoW}sn5rqMvJ>;G0dbb9I_wMaea+x=fjD_=X@QTP;Ggmhv zSG_cDbL5V{qoIc;;meyD)d155QpDb;aNcwRYUGM{sM1}ixanUBh2j0#=DeFzxgh=gXZw7`S=Uhr?w`9U zfHR25O*W$YUl(RCC8YOXJ^%jySy@=(&5Zx_2#jCE_L3#}(@q7b)c?WQ=^lICNpH6P zCo9E}Tj`v!z)5sk#jhqA1$Qm$>)B@9p1Tc-LrimCbaz^zUI0Mtj zJ}`|;0@Fw~FpYemU{sYTH5^W6@<-bk$qqw~R{aLZ03iE-AfiO8(f}d>hy@^_C{e24 zP;6BP0NDow5!F_e1`r8U+e8b%$&KL>#Pw(Xxp|SueennIoq>OH+(T;b|J70bu5&uw z`(<-L|EKS^Ys|&}!4zWpr>BrO3z^g6N?P}aAIgvCowuDgRQIaN{lk-+ferdzK3>g< zPcZxhFx~)gJb~>Kau=mB}dNme_}}ZAdMjl29n2tChzn zXA5&5>X*rg$1%GO5%=?V#Q-SnKUU+PO0+LbjmT5hS&=P?ETby%dm@$hUn=tV=E>-_ zyiBfhR_`8V_E_*NZwm8%7`EHXKj2s@-WytJq+LMf#Q)WF?_1sG?y}9x1470(u)mcz zaXT$xi!FXXy4E*>Jcp;0j*W}4u@@uJ0d-&Dh&FJK2dCTF2Lt9$u+e>c{ z($wBe^IM@fVU|6!-C2bYS4`}*+Tp`PWRO0~*GAJVp`61;fm#ezq4jU`#`sYP!Qb2s z8ivV!T5GkQB{E&vA2ld$*E+1NQTs_r1=BuONXlK z^D9_sX{EH2i>9?{B*n$YmGh`Cun^W-Cm6n;I~IoA50VV+oP0^Xtk?4n@kyS9t_!Ts zn_gmEHG;0&xBdB`gjPpduh_;IeD61tjnJpRt5{p6I7#2>hPicD9l0P^+5x+3SXV>) z4!VXpq@ec8o6ua_keVJ;hpC~}Gjtc`SI{Yn?$Z2 zzs%e7`l8hnk!7zbrSV3@%YM6>&|*g4TTOLZB|{gL)Nxmb&(MU;dhE#waG!dL7yZ#c z>EJ4k$HIN;+GD@b=109K0~u9_j4&VVuA9^us->`L̍f}T}#ny;WP7-e|YS+yg5 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 | tee tapa.log diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/src/HEAT3D.h b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/src/HEAT3D.h deleted file mode 100644 index 3b0e26de..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/src/HEAT3D.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef HEAT3D_H -#define HEAT3D_H - -#define GRID_ROWS 256 -#define GRID_COLS 256 - -#define KERNEL_COUNT 12 -#define PART_ROWS GRID_ROWS / KERNEL_COUNT - -#define ITERATION 512 - -#include "ap_int.h" -#include -#define DWIDTH 512 -#define INTERFACE_WIDTH ap_uint - const int WIDTH_FACTOR = DWIDTH/32; -#define PARA_FACTOR 16 - -#define STAGE_COUNT 1 -#define TOP_APPEND 16 -#define BOTTOM_APPEND 17 -#define OVERLAP_TOP_OVERHEAD 8176 -#define OVERLAP_BOTTOM_OVERHEAD 8687 -#define DECRE_TOP_APPEND 16 -#define DECRE_BOTTOM_APPEND 17 - -#define MIDLE_REGION (GRID_COLS*PART_ROWS + 258*WIDTH_FACTOR + (TOP_APPEND+BOTTOM_APPEND)*WIDTH_FACTOR*(STAGE_COUNT-1) + (OVERLAP_TOP_OVERHEAD + OVERLAP_BOTTOM_OVERHEAD))/WIDTH_FACTOR -#endif diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/src/host.cpp b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/src/host.cpp deleted file mode 100644 index 3d12ade3..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/src/host.cpp +++ /dev/null @@ -1,173 +0,0 @@ -#include -#include -#include -#include - -#include -#include -#include "HEAT3D.h" - -using std::clog; -using std::endl; -using std::vector; -using std::chrono::duration; -using std::chrono::high_resolution_clock; - - -void unikernel(tapa::mmap in_0, tapa::mmap out_0, - tapa::mmap in_1, tapa::mmap out_1, - tapa::mmap in_2, tapa::mmap out_2, - tapa::mmap in_3, tapa::mmap out_3, - tapa::mmap in_4, tapa::mmap out_4, - tapa::mmap in_5, tapa::mmap out_5, - tapa::mmap in_6, tapa::mmap out_6, - tapa::mmap in_7, tapa::mmap out_7, - tapa::mmap in_8, tapa::mmap out_8, - tapa::mmap in_9, tapa::mmap out_9, - tapa::mmap in_10, tapa::mmap out_10, - tapa::mmap in_11, tapa::mmap out_11, - // tapa::mmap in_12, tapa::mmap out_12, - // tapa::mmap in_13, tapa::mmap out_13, - // tapa::mmap in_14, tapa::mmap out_14, - uint32_t iters); - -DEFINE_string(bitstream, "", "path to bitstream file, run csim if empty"); - -int main(int argc, char* argv[]) { - gflags::ParseCommandLineFlags(&argc, &argv, /*remove_flags=*/true); - - srand (time(NULL)); - - //Data initialization - // const uint64_t n = argc > 1 ? atoll(argv[1]) : 1024 * 1024; - printf("midle_region = %d\n", MIDLE_REGION); - vector in_0(MIDLE_REGION); vector out_0(MIDLE_REGION); - vector in_1(MIDLE_REGION); vector out_1(MIDLE_REGION); - vector in_2(MIDLE_REGION); vector out_2(MIDLE_REGION); - vector in_3(MIDLE_REGION); vector out_3(MIDLE_REGION); - vector in_4(MIDLE_REGION); vector out_4(MIDLE_REGION); - vector in_5(MIDLE_REGION); vector out_5(MIDLE_REGION); - vector in_6(MIDLE_REGION); vector out_6(MIDLE_REGION); - vector in_7(MIDLE_REGION); vector out_7(MIDLE_REGION); - vector in_8(MIDLE_REGION); vector out_8(MIDLE_REGION); - vector in_9(MIDLE_REGION); vector out_9(MIDLE_REGION); - vector in_10(MIDLE_REGION); vector out_10(MIDLE_REGION); - vector in_11(MIDLE_REGION); vector out_11(MIDLE_REGION); - // vector in_12(MIDLE_REGION); vector out_12(MIDLE_REGION); - // vector in_13(MIDLE_REGION); vector out_13(MIDLE_REGION); - // vector in_14(MIDLE_REGION); vector out_14(MIDLE_REGION); - - //Software emulation vector - float sw_in[MIDLE_REGION * WIDTH_FACTOR]; - float sw_out[MIDLE_REGION * WIDTH_FACTOR]; - - // input test - for(int i = 0; i < MIDLE_REGION; i++){ - INTERFACE_WIDTH a; - float temp = rand() % 100 + 1; - // float temp = (i * i) % 100; - for(int k = 0; k < WIDTH_FACTOR; k++){ - unsigned int idx_k = k << 5; - // float temp = (i * WIDTH_FACTOR + k); - - a.range(idx_k + 31, idx_k) = *((uint32_t *)(&temp)); - sw_in[i * WIDTH_FACTOR + k] = temp; - } - in_0[i] = a; out_0[i] = a; - in_1[i] = a; out_1[i] = a; - in_2[i] = a; out_2[i] = a; - in_3[i] = a; out_3[i] = a; - in_4[i] = a; out_4[i] = a; - in_5[i] = a; out_5[i] = a; - in_6[i] = a; out_6[i] = a; - in_7[i] = a; out_7[i] = a; - in_8[i] = a; out_8[i] = a; - in_9[i] = a; out_9[i] = a; - in_10[i] = a; out_10[i] = a; - in_11[i] = a; out_11[i] = a; - // in_12[i] = a; out_12[i] = a; - // in_13[i] = a; out_13[i] = a; - // in_14[i] = a; out_14[i] = a; - } - const uint32_t iter = 1; - - // Software result - - // for(int i = 0; i < MIDLE_REGION * WIDTH_FACTOR; i++){ - // sw_in[i] = i; - // } - - for(int n = 0; n < iter; n++){ - for(int i = 1025; i < MIDLE_REGION * WIDTH_FACTOR - 1025; i++){ - sw_out[i] = (sw_in[i - 1024] + sw_in[i - 1025] + sw_in[i - 1023] + sw_in[i - 1] + sw_in[i] + sw_in[i + 1] + sw_in[i + 1023] + sw_in[i + 1] + sw_in[i + 1025]) /(float) 9; - } - } - // std::cout << (GRID_COLS/WIDTH_FACTOR*PART_ROWS + (TOP_APPEND+BOTTOM_APPEND)*(1-1)) << endl; - // std::cout << MIDLE_REGION << endl; - - std::cout << "kernel start" << endl; - //Kernel execution - auto start = high_resolution_clock::now(); - // tapa::invoke(VecAdd, FLAGS_bitstream, tapa::read_only_mmap(a), - // tapa::read_only_mmap(b), - // tapa::write_only_mmap(c), n); - tapa::invoke(unikernel, FLAGS_bitstream, - tapa::read_write_mmap(in_0), tapa::read_write_mmap(out_0), - tapa::read_write_mmap(in_1), tapa::read_write_mmap (out_1), - tapa::read_write_mmap(in_2), tapa::read_write_mmap (out_2), - tapa::read_write_mmap(in_3), tapa::read_write_mmap (out_3), - tapa::read_write_mmap(in_4), tapa::read_write_mmap (out_4), - tapa::read_write_mmap(in_5), tapa::read_write_mmap (out_5), - tapa::read_write_mmap(in_6), tapa::read_write_mmap (out_6), - tapa::read_write_mmap(in_7), tapa::read_write_mmap (out_7), - tapa::read_write_mmap(in_8), tapa::read_write_mmap (out_8), - tapa::read_write_mmap(in_9), tapa::read_write_mmap (out_9), - tapa::read_write_mmap(in_10), tapa::read_write_mmap (out_10), - tapa::read_write_mmap(in_11), tapa::read_write_mmap (out_11), - // tapa::read_write_mmap(in_12), tapa::read_write_mmap (out_12), - // tapa::read_write_mmap(in_13), tapa::read_write_mmap (out_13), - // tapa::read_write_mmap(in_14), tapa::read_write_mmap (out_14), - iter); - auto stop = high_resolution_clock::now(); - duration elapsed = stop - start; - clog << "elapsed time: " << elapsed.count() << "s" << endl; - - // Verification - uint64_t num_errors = 0; - const uint64_t threshold = 10; // only report up to these errors - for(int i = 66; i < 128; i++){ - for(int k = 0; k < WIDTH_FACTOR; k++){ - unsigned int idx_k = k << 5; - uint32_t temp = out_0[i + 66].range(idx_k + 31, idx_k); - float hw_result = (*((float*)(&temp))); - if(sw_out[i * WIDTH_FACTOR + k] != hw_result){ - ++num_errors; - std::cout << (i * WIDTH_FACTOR + k) << " " << hw_result << " " << sw_out[i * WIDTH_FACTOR + k] << endl; - } - // sstd::cout << (i * WIDTH_FACTOR + k) << " " << hw_result << " " << sw_out[i * WIDTH_FACTOR + k] << endl; - } - } - // for (uint64_t i = 0; i < n; ++i) { - // auto expected = i * 3; - // auto actual = static_cast(c[i]); - // if (actual != expected) { - // if (num_errors < threshold) { - // clog << "expected: " << expected << ", actual: " << actual << endl; - // } else if (num_errors == threshold) { - // clog << "..."; - // } - // ++num_errors; - // } - // } - - - if (num_errors == 0) { - clog << "PASS!" << endl; - } else { - if (num_errors > threshold) { - clog << " (+" << (num_errors - threshold) << " more errors)" << endl; - } - clog << "FAIL!" << endl; - } - return num_errors > 0 ? 1 : 0; -} diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/src/unikernel.cpp b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/src/unikernel.cpp deleted file mode 100644 index 3c57354e..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/design/src/unikernel.cpp +++ /dev/null @@ -1,207 +0,0 @@ -#include -#include "math.h" -#include "HEAT3D.h" -#include - -template -T HLS_REG(T in){ -#pragma HLS pipeline -#pragma HLS inline off -#pragma HLS interface port=return register - return in; -} - -float HEAT3D_stencil_kernel(float in_1_0_0, float in_0_0_1, - float in_0_0_m1, float in_0_0_0, float in_0_m1_0, float in_m1_0_0, - float in_0_1_0) -{ - /* - (cal1 + cal2 + cal3 + in(0, 0, 0)) - */ - const float cal1 = ((in_1_0_0 - ((float)2 * in_0_0_0) + in_m1_0_0) / (float)8); - const float cal2 = ((in_0_1_0 - ((float)2 * in_0_0_0) + in_0_m1_0) / (float)8); - const float cal3 = ((in_0_0_1 - ((float)2 * in_0_0_0) + in_0_0_m1) / (float)8); - return (cal1 + cal2 + cal3 + in_0_0_0); -} // stencil kernel definition - -void HEAT3D(tapa::istream&in, tapa::ostream&out, //int useless, - int iters) -{ - INTERFACE_WIDTH in_block_m16; - hls::stream in_stream_m15_to_m2; - INTERFACE_WIDTH in_block_m1; - INTERFACE_WIDTH in_block_0; - INTERFACE_WIDTH in_block_1; - hls::stream in_stream_2_to_15; - INTERFACE_WIDTH in_block_16; - - in_block_m16 = in.read(); - for (int i = 16 + -15; i < 16 + -1; i++) { - in_stream_m15_to_m2 << in.read(); - } - in_block_m1 = in.read(); - in_block_0 = in.read(); - in_block_1 = in.read(); - for (int i = 16 + 2; i < 16 + 16; i++) { - in_stream_2_to_15 << in.read(); - } - in_block_16 = in.read(); - - MAJOR_LOOP: - for (int i = 0; i < GRID_COLS/WIDTH_FACTOR*PART_ROWS + (TOP_APPEND+BOTTOM_APPEND)*(iters-1); i++) { - #pragma HLS pipeline II=1 - INTERFACE_WIDTH out_temp; - COMPUTE_LOOP: - for (int k = 0; k < PARA_FACTOR; k++) { - #pragma HLS unroll - float in_1_0_0[PARA_FACTOR], in_0_0_1[PARA_FACTOR], in_0_0_m1[PARA_FACTOR], in_0_0_0[PARA_FACTOR], in_0_m1_0[PARA_FACTOR], in_m1_0_0[PARA_FACTOR], in_0_1_0[PARA_FACTOR]; - #pragma HLS array_partition variable=in_1_0_0 complete dim=0 - #pragma HLS array_partition variable=in_0_0_1 complete dim=0 - #pragma HLS array_partition variable=in_0_0_m1 complete dim=0 - #pragma HLS array_partition variable=in_0_0_0 complete dim=0 - #pragma HLS array_partition variable=in_0_m1_0 complete dim=0 - #pragma HLS array_partition variable=in_m1_0_0 complete dim=0 - #pragma HLS array_partition variable=in_0_1_0 complete dim=0 - - - unsigned int idx_k = k << 5; - - uint32_t temp_in_1_0_0 = in_block_16.range(idx_k+31, idx_k); - in_1_0_0[k] = *((float*)(&temp_in_1_0_0)); - uint32_t temp_in_0_0_1 = (k<15)?in_block_0.range(idx_k + 63, idx_k + 32) : in_block_1.range(idx_k + -449, idx_k + -480); - in_0_0_1[k] = *((float*)(&temp_in_0_0_1)); - uint32_t temp_in_0_0_m1 = (k<1)?in_block_m1.range(idx_k + 511, idx_k + 480) : in_block_0.range(idx_k + -1, idx_k + -32); - in_0_0_m1[k] = *((float*)(&temp_in_0_0_m1)); - uint32_t temp_in_0_0_0 = in_block_0.range(idx_k+31, idx_k); - in_0_0_0[k] = *((float*)(&temp_in_0_0_0)); - uint32_t temp_in_0_m1_0 = in_block_m1.range(idx_k+31, idx_k); - in_0_m1_0[k] = *((float*)(&temp_in_0_m1_0)); - uint32_t temp_in_m1_0_0 = in_block_m16.range(idx_k+31, idx_k); - in_m1_0_0[k] = *((float*)(&temp_in_m1_0_0)); - uint32_t temp_in_0_1_0 = in_block_1.range(idx_k+31, idx_k); - in_0_1_0[k] = *((float*)(&temp_in_0_1_0)); - - float result = HEAT3D_stencil_kernel(in_1_0_0[k], in_0_0_1[k], in_0_0_m1[k], in_0_0_0[k], in_0_m1_0[k], in_m1_0_0[k], in_0_1_0[k]); - out_temp.range(idx_k+31, idx_k) = *((uint32_t *)(&result)); - } - out.write(out_temp); - - in_block_m16 = in_stream_m15_to_m2.read(); - in_stream_m15_to_m2 << HLS_REG(in_block_m1); - in_block_m1 = HLS_REG(in_block_0); - in_block_0 = HLS_REG(in_block_1); - in_block_1 = in_stream_2_to_15.read(); - in_stream_2_to_15 << HLS_REG(in_block_16); - - unsigned int idx_in = 16 + (i + 17); - in_block_16 = HLS_REG(in.read()); - } - - INTERFACE_WIDTH popout_in_stream_m15_to_m2; - for (int i = 0; i < 14; i++) { - #pragma HLS pipeline II=1 - in_stream_m15_to_m2 >> popout_in_stream_m15_to_m2; - } - INTERFACE_WIDTH popout_in_stream_2_to_15; - for (int i = 0; i < 14; i++) { - #pragma HLS pipeline II=1 - in_stream_2_to_15 >> popout_in_stream_2_to_15; - } - return; -} // stencil kernel definition - -void load(tapa::async_mmap& a, tapa::async_mmap& b, - tapa::ostream &stream_out, tapa::istream &stream_in, - uint32_t iters) { - #pragma HLS inline off - unsigned int loop_bound = GRID_COLS/WIDTH_FACTOR*PART_ROWS + (TOP_APPEND+BOTTOM_APPEND)*(iters-1) + 17 + 16; - - for(int k_wr_req = (17 + 16), k_wr_resp = (17 + 16), k_rd_req = 0, k_rd_resp = 0; k_rd_resp < loop_bound || k_wr_resp < loop_bound; ) { - // read from a - if (k_rd_req < loop_bound && a.read_addr.try_write(k_rd_req)) { - k_rd_req++; - } - if (k_rd_resp < loop_bound && !a.read_data.empty() && !stream_out.full()) { - INTERFACE_WIDTH temp = a.read_data.read(nullptr); - stream_out.write(temp); - k_rd_resp++; - } - - // write to b - if (k_wr_req < loop_bound && !b.write_addr.full() && !b.write_data.full() && !stream_in.empty()) { - b.write_addr.write(k_wr_req); - b.write_data.write(stream_in.read()); - k_wr_req++; - } - if (!b.write_resp.empty()) { - k_wr_resp += (unsigned int)(b.write_resp.read()) + 1; - } - } -} - -void inter_kernel(tapa::async_mmap& a, tapa::async_mmap& b, - tapa::ostream &stream_out, tapa::istream &stream_in, - uint32_t iters){ - - for(int i = 0; i < iters; i+=STAGE_COUNT){ - if(i%(2*STAGE_COUNT)==0){ - load(a, b, stream_out, stream_in, iters); - } - else{ - load(b, a, stream_out, stream_in, iters); - } - } -} - -void unikernel(tapa::mmap in_0, tapa::mmap out_0, //HBM 0 1 - tapa::mmap in_1, tapa::mmap out_1, - tapa::mmap in_2, tapa::mmap out_2, - tapa::mmap in_3, tapa::mmap out_3, - tapa::mmap in_4, tapa::mmap out_4, - tapa::mmap in_5, tapa::mmap out_5, - tapa::mmap in_6, tapa::mmap out_6, - tapa::mmap in_7, tapa::mmap out_7, - tapa::mmap in_8, tapa::mmap out_8, - tapa::mmap in_9, tapa::mmap out_9, - tapa::mmap in_10, tapa::mmap out_10, - tapa::mmap in_11, tapa::mmap out_11, - // tapa::mmap in_12, tapa::mmap out_12, - // tapa::mmap in_13, tapa::mmap out_13, - // tapa::mmap in_14, tapa::mmap out_14, - uint32_t iters){ - tapa::streams k_wr; - tapa::streams k_rd; - - tapa::task() - .invoke(inter_kernel, in_0, out_0, k_rd[0], k_wr[0], iters) - .invoke(HEAT3D, k_rd[0], k_wr[0], iters) - .invoke(inter_kernel, in_1, out_1, k_rd[1], k_wr[1], iters) - .invoke(HEAT3D, k_rd[1], k_wr[1], iters) - .invoke(inter_kernel, in_2, out_2, k_rd[2], k_wr[2], iters) - .invoke(HEAT3D, k_rd[2], k_wr[2], iters) - .invoke(inter_kernel, in_3, out_3, k_rd[3], k_wr[3], iters) - .invoke(HEAT3D, k_rd[3], k_wr[3], iters) - .invoke(inter_kernel, in_4, out_4, k_rd[4], k_wr[4], iters) - .invoke(HEAT3D, k_rd[4], k_wr[4], iters) - .invoke(inter_kernel, in_5, out_5, k_rd[5], k_wr[5], iters) - .invoke(HEAT3D, k_rd[5], k_wr[5], iters) - .invoke(inter_kernel, in_6, out_6, k_rd[6], k_wr[6], iters) - .invoke(HEAT3D, k_rd[6], k_wr[6], iters) - .invoke(inter_kernel, in_7, out_7, k_rd[7], k_wr[7], iters) - .invoke(HEAT3D, k_rd[7], k_wr[7], iters) - .invoke(inter_kernel, in_8, out_8, k_rd[8], k_wr[8], iters) - .invoke(HEAT3D, k_rd[8], k_wr[8], iters) - .invoke(inter_kernel, in_9, out_9, k_rd[9], k_wr[9], iters) - .invoke(HEAT3D, k_rd[9], k_wr[9], iters) - .invoke(inter_kernel, in_10, out_10, k_rd[10], k_wr[10], iters) - .invoke(HEAT3D, k_rd[10], k_wr[10], iters) - .invoke(inter_kernel, in_11, out_11, k_rd[11], k_wr[11], iters) - .invoke(HEAT3D, k_rd[11], k_wr[11], iters) - // .invoke(inter_kernel, in_12, out_12, k_rd[12], k_wr[12], iters) - // .invoke(HEAT3D, k_rd[12], k_wr[12], iters) - // .invoke(inter_kernel, in_13, out_13, k_rd[13], k_wr[13], iters) - // .invoke(HEAT3D, k_rd[13], k_wr[13], iters) - // .invoke(inter_kernel, in_14, out_14, k_rd[14], k_wr[14], iters) - // .invoke(HEAT3D, k_rd[14], k_wr[14], iters) - ; -} diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/run.py b/benchmarks/tapa_flow/stencil_sasa/medium_congestion/run.py deleted file mode 100644 index 9bc48294..00000000 --- a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/run.py +++ /dev/null @@ -1,134 +0,0 @@ -__copyright__ = """ -Copyright (c) 2024 RapidStream Design Automation, Inc. and contributors. All rights reserved. -The contributor(s) of this file has/have agreed to the RapidStream Contributor License Agreement. -""" - -from rapidstream import get_u280_vitis_device_factory, RapidStreamTAPA -import os - -CURR_DIR = os.path.dirname(os.path.abspath(__file__)) -INI_PATH = f"{CURR_DIR}/design/config/link_config.ini" -VITIS_PLATFORM = "xilinx_u280_gen3x16_xdma_1_202211_1" -XO_PATH = f"{CURR_DIR}/design/generated/unikernel.xo" -kernel_name = "unikernel" - -factory = get_u280_vitis_device_factory(VITIS_PLATFORM) - -# Reserve resource for the HBM Memory Sub-System. -# The HMSS is not part of the user kernel so the partition optimization process -# is unaware of its existence. We need to manually reserve resources for it. -# For 512-bit HBM channels, each HBM channel uses approximately the following resources: -# AREA_PER_HBM_CHANNEL = { -# "LUT": 5000, -# "FF": 6500, -# "BRAM": 0, -# "URAM": 0, -# "DSP": 0, -# } -factory.reduce_slot_area(1, 0, lut=5000 * 16, ff=6500 * 16) -factory.reduce_slot_area(0, 0, lut=5000 * 13, ff=6500 * 13) - -# For this U280 platform, the right most DSP column on the boundary between -# dynamic/static region is not usable. So we need to adjust the DSP count -# to reflect the actual available DSPs. -print("Reducing DSP of (1, 1) to make it less congested") -factory.reduce_slot_area(1, 1, dsp=100) - -rs = RapidStreamTAPA(f"{CURR_DIR}/build") - -rs.set_virtual_device(factory.generate_virtual_device()) -rs.add_xo_file(XO_PATH) -rs.set_vitis_platform(VITIS_PLATFORM) -rs.set_vitis_connectivity_config(INI_PATH) - -rs.set_top_module_name(kernel_name) -rs.add_clock("ap_clk", 3.33) - -rs.add_flatten_targets([kernel_name]) - -# Bind ports to HBM 16-31 -right_slot = "SLOT_X1Y0:SLOT_X1Y0" -left_slot = "SLOT_X0Y0:SLOT_X0Y0" -# The config file binds the following argument to HBM 0 - 15 -# sp=unikernel.in_0:HBM[0] -# sp=unikernel.out_0:HBM[1] -# sp=unikernel.in_1:HBM[2] -# sp=unikernel.out_1:HBM[3] -# sp=unikernel.in_2:HBM[4] -# sp=unikernel.out_2:HBM[5] -# sp=unikernel.in_3:HBM[6] -# sp=unikernel.out_3:HBM[7] -# sp=unikernel.in_4:HBM[8] -# sp=unikernel.out_4:HBM[9] -# sp=unikernel.in_5:HBM[10] -# sp=unikernel.out_5:HBM[11] -# sp=unikernel.in_6:HBM[12] -# sp=unikernel.out_6:HBM[13] -# sp=unikernel.in_7:HBM[14] -# sp=unikernel.out_7:HBM[15] - -left_args = [ - "in_0", - "out_0", - "in_1", - "out_1", - "in_2", - "out_2", - "in_3", - "out_3", - "in_4", - "out_4", - "in_5", - "out_5", - "in_6", - "out_6", - "in_7", - "out_7", -] - - -for arg in left_args: - rs.assign_port_to_region(f"m_axi_{arg}_.*", left_slot) - -# The config file binds the following argument to HBM 16 - 31 -# sp=unikernel.in_8:HBM[17] -# sp=unikernel.out_8:HBM[18] -# sp=unikernel.in_9:HBM[19] -# sp=unikernel.out_9:HBM[20] -# sp=unikernel.in_10:HBM[21] -# sp=unikernel.out_10:HBM[22] -# sp=unikernel.in_11:HBM[23] -# sp=unikernel.out_11:HBM[24] - -right_args = [ - "in_8", - "out_8", - "in_9", - "out_9", - "in_10", - "out_10", - "in_11", - "out_11", -] - -for arg in right_args: - rs.assign_port_to_region(f"m_axi_{arg}_.*", right_slot) - - -# Constrain the remaining control ports. -# All ports must be constrained to a specific slot: -rs.assign_port_to_region("s_axi_control_.*", left_slot) -rs.assign_port_to_region("ap_clk", left_slot) -rs.assign_port_to_region("ap_rst_n", left_slot) -rs.assign_port_to_region("interrupt", left_slot) - -# Xustomize the placement strategy: -rs.set_placement_strategy("EarlyBlockPlacement") - -# Allow two parallel Vitis implementation -rs.run_dse( - max_workers=2, - max_dse_limit=0.85, - min_dse_limit=0.75, - partition_strategy="flat", -) diff --git a/benchmarks/vitis_flow/LLM/Makefile b/benchmarks/vitis_flow/LLM/Makefile index d8c339ba..d7ee1faf 100644 --- a/benchmarks/vitis_flow/LLM/Makefile +++ b/benchmarks/vitis_flow/LLM/Makefile @@ -1,24 +1,30 @@ # Copyright (c) 2024 RapidStream Design Automation, Inc. and contributors. All rights reserved. # The contributor(s) of this file has/have agreed to the RapidStream Contributor License Agreement. -ROOT_DIR := $(shell git rev-parse --show-toplevel) -GRP_UTIL := $(ROOT_DIR)/common/util/get_group.py -PLATFORM := xilinx_u50_gen3x16_xdma_5_202210_1 -KERNEL_NAME := bert_all -HLSXX := vitis_hls -HLS_SRC_DIR := $(CURDIR)/design -HLS_SRC_FILES := $(foreach n, $(shell seq 1 3 ), $(HLS_SRC_DIR)/bert_region_$(n).cpp) -HLS_SRC_FILES += $(foreach n, $(shell seq 1 3 ), $(HLS_SRC_DIR)/bert_region_$(n).h) -HLS_SRC_FILES += $(HLS_SRC_DIR)/bert_all.cpp $(HLS_SRC_DIR)/kernel.h - -TEMP_DIR := $(CURDIR)/build -KERNEL_XO := $(TEMP_DIR)/$(KERNEL_NAME).xo -KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME).xclbin -RS_XCLBIN := $(TEMP_DIR)/dse/candidate_0/design.xclbin -CLK_PERIOD_NS := 3 -TARGET := hw -HLS2RTL_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl -GEN_XO := 1 +ROOT_DIR := $(shell git rev-parse --show-toplevel) +GRP_UTIL := $(ROOT_DIR)/common/util/get_group.py +PLATFORM := xilinx_u280_gen3x16_xdma_1_202211_1 +KERNEL_NAME := bert_all +HLSXX := vitis_hls +HLS_SRC_DIR := $(CURDIR)/design +HLS_SRC_FILES := $(foreach n, $(shell seq 1 3 ), $(HLS_SRC_DIR)/bert_region_$(n).cpp) +HLS_SRC_FILES += $(foreach n, $(shell seq 1 3 ), $(HLS_SRC_DIR)/bert_region_$(n).h) +HLS_SRC_FILES += $(HLS_SRC_DIR)/bert_all.cpp $(HLS_SRC_DIR)/kernel.h + +TEMP_DIR := $(CURDIR)/build +KERNEL_XO := $(TEMP_DIR)/$(KERNEL_NAME).xo +KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME).xclbin +RS_XCLBIN := $(TEMP_DIR)/dse/candidate_0/vitis_run_hw/$(KERNEL_NAME)_$(PLATFORM).xclbin +CLK_PERIOD_NS := 3 +TARGET := hw +HLS2RTL_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl +GEN_XO := 1 + +BUILD_LOG := $(TEMP_DIR)/build.json +SUCCESS := "Build Successful" +TIMING_RPT := $(TEMP_DIR)/dse/candidate_0/vitis_run_hw/$(KERNEL_NAME)_$(PLATFORM).temp/reports/link/imp/impl_1_hw_bb_locked_timing_summary_routed.rpt +SLACK_GETTER := $(ROOT_DIR)/common/util/get_slack.py + ifeq ($(PLATFORM), xilinx_u50_gen3x16_xdma_5_202210_1) PART := xcu50-fsvh2104-2-e @@ -41,6 +47,8 @@ else endif all: $(RS_XCLBIN) + rapidstream $(SLACK_GETTER) -i $(TIMING_RPT) -o $(BUILD_LOG) + echo $(SUCCESS) $(RS_XCLBIN):$(KERNEL_XO) rapidstream $(RUN_FILE) diff --git a/benchmarks/vitis_flow/LLM/design/bert_all.cpp b/benchmarks/vitis_flow/LLM/design/bert_all.cpp index c3d8cb9a..58070a0d 100644 --- a/benchmarks/vitis_flow/LLM/design/bert_all.cpp +++ b/benchmarks/vitis_flow/LLM/design/bert_all.cpp @@ -115,3 +115,109 @@ void bert_all( ); } } + + +void k1( + io_pack_float *inp_addr_0, + io_pack_float *inp_addr_1, + io_pack_float *inp_addr_2, + io_pack_int16 *wk_addr, + io_pack_int16 *wv_addr, + io_pack_int16 *wq_addr, + hls::stream& stream_out +){ + uint32_t out = 0; + out = inp_addr_0[0] + inp_addr_1[0] + inp_addr_2[0] + wk_addr[0] + wv_addr[0] + wq_addr[0]; + stream_out.write(out); +} + + +void k2( + io_pack_int16 *w_ds0_addr, + double_io_pack_int16 *w_ds1_addr, + double_io_pack_int16 *w_ds2_addr, + hls::stream& stream_out + +){ + uint32_t out = 0; + out = w_ds0_addr[0] + w_ds1_addr[0] + w_ds2_addr[0]; + stream_out.write(out); +} + +void k3( + hls::stream& stream_in1, + hls::stream& stream_in2, + hls::stream& stream_out +){ + float out = 0; + float a = 0; + float b = 0; + a = stream_in1.read(); + b = stream_in2.read(); + out = a * b; + stream_out.write(out); + +} + +void k4( + hls::stream& stream_in, + io_pack_float *outp_addr +){ + float out = 0; + out = stream_in.read(); + outp_addr[0] = out; +} + + +extern "C" { +void bert_all1( + io_pack_float *inp_addr_0, + io_pack_float *inp_addr_1, + io_pack_float *inp_addr_2, + io_pack_int16 *wk_addr, + io_pack_int16 *wv_addr, + io_pack_int16 *wq_addr, + io_pack_int16 *w_ds0_addr, + double_io_pack_int16 *w_ds1_addr, + double_io_pack_int16 *w_ds2_addr, + io_pack_float *outp_addr +){ + #pragma HLS interface m_axi port=inp_addr_0 offset=slave bundle=gmem0 + #pragma HLS interface m_axi port=inp_addr_1 offset=slave bundle=gmem1 + #pragma HLS interface m_axi port=inp_addr_2 offset=slave bundle=gmem2 + #pragma HLS interface m_axi port=wk_addr offset=slave bundle=gmem3 + #pragma HLS interface m_axi port=wv_addr offset=slave bundle=gmem4 + #pragma HLS interface m_axi port=wq_addr offset=slave bundle=gmem5 + #pragma HLS interface m_axi port=w_ds0_addr offset=slave bundle=gmem6 + #pragma HLS interface m_axi port=w_ds1_addr offset=slave bundle=gmem7 + #pragma HLS interface m_axi port=w_ds2_addr offset=slave bundle=gmem8 + #pragma HLS interface m_axi port=outp_addr offset=slave bundle=gmem9 + + #pragma HLS INTERFACE s_axilite port=inp_addr_0 bundle=control + #pragma HLS INTERFACE s_axilite port=inp_addr_1 bundle=control + #pragma HLS INTERFACE s_axilite port=inp_addr_2 bundle=control + #pragma HLS INTERFACE s_axilite port=wk_addr bundle=control + #pragma HLS INTERFACE s_axilite port=wv_addr bundle=control + #pragma HLS INTERFACE s_axilite port=wq_addr bundle=control + #pragma HLS INTERFACE s_axilite port=w_ds0_addr bundle=control + #pragma HLS INTERFACE s_axilite port=w_ds1_addr bundle=control + #pragma HLS INTERFACE s_axilite port=w_ds2_addr bundle=control + #pragma HLS INTERFACE s_axilite port=outp_addr bundle=control + + #pragma HLS INTERFACE s_axilite port=return bundle=control + + static hls::stream stream_in1("input_stream_1"); + static hls::stream stream_in2("input_stream_2"); + static hls::stream stream_in3("input_stream_3"); + static hls::stream stream_in4("input_stream_4"); + static hls::stream stream_in5("input_stream_5"); + static hls::stream stream_in6("input_stream_6"); + static hls::stream stream_in7("input_stream_7"); + +#pragma HLS dataflow + k1(inp_addr_0, inp_addr_1, inp_addr_2, wk_addr, wv_addr, wq_addr, stream_in1); + k2(w_ds0_addr, w_ds1_addr, w_ds2_addr, stream_in2); + k3(stream_in1, stream_in2, stream_in3); + k4(stream_in3, outp_addr); +} +} diff --git a/benchmarks/vitis_flow/README.md b/benchmarks/vitis_flow/README.md index afebed07..06c460b8 100644 --- a/benchmarks/vitis_flow/README.md +++ b/benchmarks/vitis_flow/README.md @@ -22,7 +22,7 @@ The figures below demonstrate how RapidStream seamlessly integrates with the Vit Figure (b) illustrates the integration of RapidStream with the Vitis flow. Users continue to leverage Vitis HLS for compiling dataflow HLS C++ code into an Xilinx Objective file (`.xo`). Subsequently, RapidStream processes the `.xo` file, seamlessly implementing transformations like partitioning, floorplanning, and pipeline insertion. The optimized design is then re-packaged into another `.xo` file format, which can be integrated with standard Vitis tools to target FPGA devices for generating executable bitstreams (`xclbin`). -RapidStream Logo +vitis_rapidstream_flow Compared to the standard Vitis flow, the RapidStream-aided Vitis flow shows distinct advantages in layout generation. The standard implementation tends to consolidate all logic within a single SLR (Super Logic Region), which can lead to local routing congestion. In contrast, RapidStream distributes the logic across four separate slots, effectively mitigating this congestion. Additionally, by incorporating pipeline registers after floorplanning, the extended route wires are less likely to impact the clock frequency negatively. diff --git a/benchmarks/vitis_flow/cnn13x2/Makefile b/benchmarks/vitis_flow/cnn13x2/Makefile index d45313c1..aa6da56c 100644 --- a/benchmarks/vitis_flow/cnn13x2/Makefile +++ b/benchmarks/vitis_flow/cnn13x2/Makefile @@ -19,6 +19,10 @@ HOST := app.exe HLS2XO_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl CLK_PERIOD_NS := 4 RS_TARGET := $(TEMP_DIR)/dse/candidate_0/exported/$(KERNEL_NAME).xo +BUILD_LOG := $(TEMP_DIR)/build.json +SUCCESS := "Build Successful" +TIMING_RPT := $(TEMP_DIR)/reports/link/imp/impl_1_hw_bb_locked_timing_summary_routed.rpt +SLACK_GETTER := $(ROOT_DIR)/common/util/get_slack.py ifeq ($(PLATFORM), xilinx_u50_gen3x16_xdma_5_202210_1) PART := xcu50-fsvh2104-2-e @@ -41,6 +45,8 @@ else endif all: $(RS_KERNEL_XCLBIN) + rapidstream $(SLACK_GETTER) -i $(TIMING_RPT) -o $(BUILD_LOG) + echo $(SUCCESS) sw_emu: $(KERNEL_XCLBIN) $(HOST) XCL_EMULATION_MODE=sw_emu ./app.exe $< diff --git a/benchmarks/vitis_flow/cnn13x4_16/cnn13x10/Makefile b/benchmarks/vitis_flow/cnn13x4_16/cnn13x10/Makefile index 4fb149f4..4c090507 100644 --- a/benchmarks/vitis_flow/cnn13x4_16/cnn13x10/Makefile +++ b/benchmarks/vitis_flow/cnn13x4_16/cnn13x10/Makefile @@ -2,35 +2,53 @@ # The contributor(s) of this file has/have agreed to the RapidStream Contributor License Agreement. -ROOT_DIR := $(shell git rev-parse --show-toplevel) -GRP_UTIL := $(ROOT_DIR)/common/util/get_group.py -PLATFORM := xilinx_u250_gen3x16_xdma_4_1_202210_1 -PART := xcu250-figd2104-2L-e -RUN_FILE := run.py -LINK_FILE := link_config.ini -KERNEL_NAME := kernel3 -SRC_DIR := $(CURDIR)/design -TARGET := hw -TEMP_DIR := $(CURDIR)/build -KERNEL_XO := $(TEMP_DIR)/$(KERNEL_NAME).xo -KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME).xclbin -INCLUDE := -I $(XILINX_HLS)/include -CFLAGS := $(INCLUDE) $(OPT_LEVEL) -CXX := g++ -HOST := app.exe -HLS2XO_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl -CLK_PERIOD_NS := 4 - - - -all:rs_opt +ROOT_DIR := $(shell git rev-parse --show-toplevel) +GRP_UTIL := $(ROOT_DIR)/common/util/get_group.py +PLATFORM := xilinx_u250_gen3x16_xdma_4_1_202210_1 +PART := xcu250-figd2104-2L-e +RUN_FILE := run.py +LINK_FILE := link_config.ini +KERNEL_NAME := kernel3 +SRC_DIR := $(CURDIR)/design +TARGET := hw +TEMP_DIR := $(CURDIR)/build +KERNEL_XO := $(TEMP_DIR)/$(KERNEL_NAME).xo +KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME).xclbin +RS_KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME)_rs.xclbin +INCLUDE := -I $(XILINX_HLS)/include +CFLAGS := $(INCLUDE) $(OPT_LEVEL) +CXX := g++ +HOST := app.exe +HLS2XO_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl +CLK_PERIOD_NS := 4 +RS_TARGET := $(TEMP_DIR)/dse/candidate_0/exported/$(KERNEL_NAME).xo +SLACK_GETTER := $(ROOT_DIR)/common/util/get_slack.py +SUCCESS := "Build Successful" +TIMING_RPT := $(TEMP_DIR)/reports/link/imp/impl_1_hw_bb_locked_timing_summary_routed.rpt +BUILD_LOG := $(TEMP_DIR)/build.json + +all: $(RS_KERNEL_XCLBIN) + rapidstream $(SLACK_GETTER) -i $(TIMING_RPT) -o $(BUILD_LOG) + echo $(SUCCESS) sw_emu: $(KERNEL_XCLBIN) $(HOST) XCL_EMULATION_MODE=sw_emu ./app.exe $< hw: $(KERNEL_XCLBIN) $(HOST) -rs_opt:$(KERNEL_XO) +$(RS_KERNEL_XCLBIN): $(RS_TARGET) + v++ -l -t ${TARGET} \ + --platform $(PLATFORM) \ + --kernel $(KERNEL_NAME) \ + --connectivity.nk $(KERNEL_NAME):1:$(KERNEL_NAME) \ + --config $(SRC_DIR)/$(LINK_FILE) \ + --temp_dir $(TEMP_DIR) \ + -o $@ \ + $^ + +rs_opt:$(RS_TARGET) + +$(RS_TARGET): $(KERNEL_XO) rapidstream $(RUN_FILE) $(KERNEL_XCLBIN): $(KERNEL_XO) @@ -80,7 +98,6 @@ show_groups: - clean: rm -rf $(TEMP_DIR) *.log rm -rf .Xil .run diff --git a/benchmarks/vitis_flow/cnn13x4_16/cnn13x12/Makefile b/benchmarks/vitis_flow/cnn13x4_16/cnn13x12/Makefile index 4fb149f4..4c090507 100644 --- a/benchmarks/vitis_flow/cnn13x4_16/cnn13x12/Makefile +++ b/benchmarks/vitis_flow/cnn13x4_16/cnn13x12/Makefile @@ -2,35 +2,53 @@ # The contributor(s) of this file has/have agreed to the RapidStream Contributor License Agreement. -ROOT_DIR := $(shell git rev-parse --show-toplevel) -GRP_UTIL := $(ROOT_DIR)/common/util/get_group.py -PLATFORM := xilinx_u250_gen3x16_xdma_4_1_202210_1 -PART := xcu250-figd2104-2L-e -RUN_FILE := run.py -LINK_FILE := link_config.ini -KERNEL_NAME := kernel3 -SRC_DIR := $(CURDIR)/design -TARGET := hw -TEMP_DIR := $(CURDIR)/build -KERNEL_XO := $(TEMP_DIR)/$(KERNEL_NAME).xo -KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME).xclbin -INCLUDE := -I $(XILINX_HLS)/include -CFLAGS := $(INCLUDE) $(OPT_LEVEL) -CXX := g++ -HOST := app.exe -HLS2XO_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl -CLK_PERIOD_NS := 4 - - - -all:rs_opt +ROOT_DIR := $(shell git rev-parse --show-toplevel) +GRP_UTIL := $(ROOT_DIR)/common/util/get_group.py +PLATFORM := xilinx_u250_gen3x16_xdma_4_1_202210_1 +PART := xcu250-figd2104-2L-e +RUN_FILE := run.py +LINK_FILE := link_config.ini +KERNEL_NAME := kernel3 +SRC_DIR := $(CURDIR)/design +TARGET := hw +TEMP_DIR := $(CURDIR)/build +KERNEL_XO := $(TEMP_DIR)/$(KERNEL_NAME).xo +KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME).xclbin +RS_KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME)_rs.xclbin +INCLUDE := -I $(XILINX_HLS)/include +CFLAGS := $(INCLUDE) $(OPT_LEVEL) +CXX := g++ +HOST := app.exe +HLS2XO_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl +CLK_PERIOD_NS := 4 +RS_TARGET := $(TEMP_DIR)/dse/candidate_0/exported/$(KERNEL_NAME).xo +SLACK_GETTER := $(ROOT_DIR)/common/util/get_slack.py +SUCCESS := "Build Successful" +TIMING_RPT := $(TEMP_DIR)/reports/link/imp/impl_1_hw_bb_locked_timing_summary_routed.rpt +BUILD_LOG := $(TEMP_DIR)/build.json + +all: $(RS_KERNEL_XCLBIN) + rapidstream $(SLACK_GETTER) -i $(TIMING_RPT) -o $(BUILD_LOG) + echo $(SUCCESS) sw_emu: $(KERNEL_XCLBIN) $(HOST) XCL_EMULATION_MODE=sw_emu ./app.exe $< hw: $(KERNEL_XCLBIN) $(HOST) -rs_opt:$(KERNEL_XO) +$(RS_KERNEL_XCLBIN): $(RS_TARGET) + v++ -l -t ${TARGET} \ + --platform $(PLATFORM) \ + --kernel $(KERNEL_NAME) \ + --connectivity.nk $(KERNEL_NAME):1:$(KERNEL_NAME) \ + --config $(SRC_DIR)/$(LINK_FILE) \ + --temp_dir $(TEMP_DIR) \ + -o $@ \ + $^ + +rs_opt:$(RS_TARGET) + +$(RS_TARGET): $(KERNEL_XO) rapidstream $(RUN_FILE) $(KERNEL_XCLBIN): $(KERNEL_XO) @@ -80,7 +98,6 @@ show_groups: - clean: rm -rf $(TEMP_DIR) *.log rm -rf .Xil .run diff --git a/benchmarks/vitis_flow/cnn13x4_16/cnn13x14/Makefile b/benchmarks/vitis_flow/cnn13x4_16/cnn13x14/Makefile index 4fb149f4..4c090507 100644 --- a/benchmarks/vitis_flow/cnn13x4_16/cnn13x14/Makefile +++ b/benchmarks/vitis_flow/cnn13x4_16/cnn13x14/Makefile @@ -2,35 +2,53 @@ # The contributor(s) of this file has/have agreed to the RapidStream Contributor License Agreement. -ROOT_DIR := $(shell git rev-parse --show-toplevel) -GRP_UTIL := $(ROOT_DIR)/common/util/get_group.py -PLATFORM := xilinx_u250_gen3x16_xdma_4_1_202210_1 -PART := xcu250-figd2104-2L-e -RUN_FILE := run.py -LINK_FILE := link_config.ini -KERNEL_NAME := kernel3 -SRC_DIR := $(CURDIR)/design -TARGET := hw -TEMP_DIR := $(CURDIR)/build -KERNEL_XO := $(TEMP_DIR)/$(KERNEL_NAME).xo -KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME).xclbin -INCLUDE := -I $(XILINX_HLS)/include -CFLAGS := $(INCLUDE) $(OPT_LEVEL) -CXX := g++ -HOST := app.exe -HLS2XO_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl -CLK_PERIOD_NS := 4 - - - -all:rs_opt +ROOT_DIR := $(shell git rev-parse --show-toplevel) +GRP_UTIL := $(ROOT_DIR)/common/util/get_group.py +PLATFORM := xilinx_u250_gen3x16_xdma_4_1_202210_1 +PART := xcu250-figd2104-2L-e +RUN_FILE := run.py +LINK_FILE := link_config.ini +KERNEL_NAME := kernel3 +SRC_DIR := $(CURDIR)/design +TARGET := hw +TEMP_DIR := $(CURDIR)/build +KERNEL_XO := $(TEMP_DIR)/$(KERNEL_NAME).xo +KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME).xclbin +RS_KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME)_rs.xclbin +INCLUDE := -I $(XILINX_HLS)/include +CFLAGS := $(INCLUDE) $(OPT_LEVEL) +CXX := g++ +HOST := app.exe +HLS2XO_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl +CLK_PERIOD_NS := 4 +RS_TARGET := $(TEMP_DIR)/dse/candidate_0/exported/$(KERNEL_NAME).xo +SLACK_GETTER := $(ROOT_DIR)/common/util/get_slack.py +SUCCESS := "Build Successful" +TIMING_RPT := $(TEMP_DIR)/reports/link/imp/impl_1_hw_bb_locked_timing_summary_routed.rpt +BUILD_LOG := $(TEMP_DIR)/build.json + +all: $(RS_KERNEL_XCLBIN) + rapidstream $(SLACK_GETTER) -i $(TIMING_RPT) -o $(BUILD_LOG) + echo $(SUCCESS) sw_emu: $(KERNEL_XCLBIN) $(HOST) XCL_EMULATION_MODE=sw_emu ./app.exe $< hw: $(KERNEL_XCLBIN) $(HOST) -rs_opt:$(KERNEL_XO) +$(RS_KERNEL_XCLBIN): $(RS_TARGET) + v++ -l -t ${TARGET} \ + --platform $(PLATFORM) \ + --kernel $(KERNEL_NAME) \ + --connectivity.nk $(KERNEL_NAME):1:$(KERNEL_NAME) \ + --config $(SRC_DIR)/$(LINK_FILE) \ + --temp_dir $(TEMP_DIR) \ + -o $@ \ + $^ + +rs_opt:$(RS_TARGET) + +$(RS_TARGET): $(KERNEL_XO) rapidstream $(RUN_FILE) $(KERNEL_XCLBIN): $(KERNEL_XO) @@ -80,7 +98,6 @@ show_groups: - clean: rm -rf $(TEMP_DIR) *.log rm -rf .Xil .run diff --git a/benchmarks/vitis_flow/cnn13x4_16/cnn13x16/Makefile b/benchmarks/vitis_flow/cnn13x4_16/cnn13x16/Makefile index 4fb149f4..4c090507 100644 --- a/benchmarks/vitis_flow/cnn13x4_16/cnn13x16/Makefile +++ b/benchmarks/vitis_flow/cnn13x4_16/cnn13x16/Makefile @@ -2,35 +2,53 @@ # The contributor(s) of this file has/have agreed to the RapidStream Contributor License Agreement. -ROOT_DIR := $(shell git rev-parse --show-toplevel) -GRP_UTIL := $(ROOT_DIR)/common/util/get_group.py -PLATFORM := xilinx_u250_gen3x16_xdma_4_1_202210_1 -PART := xcu250-figd2104-2L-e -RUN_FILE := run.py -LINK_FILE := link_config.ini -KERNEL_NAME := kernel3 -SRC_DIR := $(CURDIR)/design -TARGET := hw -TEMP_DIR := $(CURDIR)/build -KERNEL_XO := $(TEMP_DIR)/$(KERNEL_NAME).xo -KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME).xclbin -INCLUDE := -I $(XILINX_HLS)/include -CFLAGS := $(INCLUDE) $(OPT_LEVEL) -CXX := g++ -HOST := app.exe -HLS2XO_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl -CLK_PERIOD_NS := 4 - - - -all:rs_opt +ROOT_DIR := $(shell git rev-parse --show-toplevel) +GRP_UTIL := $(ROOT_DIR)/common/util/get_group.py +PLATFORM := xilinx_u250_gen3x16_xdma_4_1_202210_1 +PART := xcu250-figd2104-2L-e +RUN_FILE := run.py +LINK_FILE := link_config.ini +KERNEL_NAME := kernel3 +SRC_DIR := $(CURDIR)/design +TARGET := hw +TEMP_DIR := $(CURDIR)/build +KERNEL_XO := $(TEMP_DIR)/$(KERNEL_NAME).xo +KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME).xclbin +RS_KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME)_rs.xclbin +INCLUDE := -I $(XILINX_HLS)/include +CFLAGS := $(INCLUDE) $(OPT_LEVEL) +CXX := g++ +HOST := app.exe +HLS2XO_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl +CLK_PERIOD_NS := 4 +RS_TARGET := $(TEMP_DIR)/dse/candidate_0/exported/$(KERNEL_NAME).xo +SLACK_GETTER := $(ROOT_DIR)/common/util/get_slack.py +SUCCESS := "Build Successful" +TIMING_RPT := $(TEMP_DIR)/reports/link/imp/impl_1_hw_bb_locked_timing_summary_routed.rpt +BUILD_LOG := $(TEMP_DIR)/build.json + +all: $(RS_KERNEL_XCLBIN) + rapidstream $(SLACK_GETTER) -i $(TIMING_RPT) -o $(BUILD_LOG) + echo $(SUCCESS) sw_emu: $(KERNEL_XCLBIN) $(HOST) XCL_EMULATION_MODE=sw_emu ./app.exe $< hw: $(KERNEL_XCLBIN) $(HOST) -rs_opt:$(KERNEL_XO) +$(RS_KERNEL_XCLBIN): $(RS_TARGET) + v++ -l -t ${TARGET} \ + --platform $(PLATFORM) \ + --kernel $(KERNEL_NAME) \ + --connectivity.nk $(KERNEL_NAME):1:$(KERNEL_NAME) \ + --config $(SRC_DIR)/$(LINK_FILE) \ + --temp_dir $(TEMP_DIR) \ + -o $@ \ + $^ + +rs_opt:$(RS_TARGET) + +$(RS_TARGET): $(KERNEL_XO) rapidstream $(RUN_FILE) $(KERNEL_XCLBIN): $(KERNEL_XO) @@ -80,7 +98,6 @@ show_groups: - clean: rm -rf $(TEMP_DIR) *.log rm -rf .Xil .run diff --git a/benchmarks/vitis_flow/cnn13x4_16/cnn13x4/Makefile b/benchmarks/vitis_flow/cnn13x4_16/cnn13x4/Makefile index 04eaf99b..4c090507 100644 --- a/benchmarks/vitis_flow/cnn13x4_16/cnn13x4/Makefile +++ b/benchmarks/vitis_flow/cnn13x4_16/cnn13x4/Makefile @@ -22,9 +22,14 @@ HOST := app.exe HLS2XO_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl CLK_PERIOD_NS := 4 RS_TARGET := $(TEMP_DIR)/dse/candidate_0/exported/$(KERNEL_NAME).xo - +SLACK_GETTER := $(ROOT_DIR)/common/util/get_slack.py +SUCCESS := "Build Successful" +TIMING_RPT := $(TEMP_DIR)/reports/link/imp/impl_1_hw_bb_locked_timing_summary_routed.rpt +BUILD_LOG := $(TEMP_DIR)/build.json all: $(RS_KERNEL_XCLBIN) + rapidstream $(SLACK_GETTER) -i $(TIMING_RPT) -o $(BUILD_LOG) + echo $(SUCCESS) sw_emu: $(KERNEL_XCLBIN) $(HOST) XCL_EMULATION_MODE=sw_emu ./app.exe $< diff --git a/benchmarks/vitis_flow/cnn13x4_16/cnn13x6/Makefile b/benchmarks/vitis_flow/cnn13x4_16/cnn13x6/Makefile index 4fb149f4..4c090507 100644 --- a/benchmarks/vitis_flow/cnn13x4_16/cnn13x6/Makefile +++ b/benchmarks/vitis_flow/cnn13x4_16/cnn13x6/Makefile @@ -2,35 +2,53 @@ # The contributor(s) of this file has/have agreed to the RapidStream Contributor License Agreement. -ROOT_DIR := $(shell git rev-parse --show-toplevel) -GRP_UTIL := $(ROOT_DIR)/common/util/get_group.py -PLATFORM := xilinx_u250_gen3x16_xdma_4_1_202210_1 -PART := xcu250-figd2104-2L-e -RUN_FILE := run.py -LINK_FILE := link_config.ini -KERNEL_NAME := kernel3 -SRC_DIR := $(CURDIR)/design -TARGET := hw -TEMP_DIR := $(CURDIR)/build -KERNEL_XO := $(TEMP_DIR)/$(KERNEL_NAME).xo -KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME).xclbin -INCLUDE := -I $(XILINX_HLS)/include -CFLAGS := $(INCLUDE) $(OPT_LEVEL) -CXX := g++ -HOST := app.exe -HLS2XO_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl -CLK_PERIOD_NS := 4 - - - -all:rs_opt +ROOT_DIR := $(shell git rev-parse --show-toplevel) +GRP_UTIL := $(ROOT_DIR)/common/util/get_group.py +PLATFORM := xilinx_u250_gen3x16_xdma_4_1_202210_1 +PART := xcu250-figd2104-2L-e +RUN_FILE := run.py +LINK_FILE := link_config.ini +KERNEL_NAME := kernel3 +SRC_DIR := $(CURDIR)/design +TARGET := hw +TEMP_DIR := $(CURDIR)/build +KERNEL_XO := $(TEMP_DIR)/$(KERNEL_NAME).xo +KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME).xclbin +RS_KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME)_rs.xclbin +INCLUDE := -I $(XILINX_HLS)/include +CFLAGS := $(INCLUDE) $(OPT_LEVEL) +CXX := g++ +HOST := app.exe +HLS2XO_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl +CLK_PERIOD_NS := 4 +RS_TARGET := $(TEMP_DIR)/dse/candidate_0/exported/$(KERNEL_NAME).xo +SLACK_GETTER := $(ROOT_DIR)/common/util/get_slack.py +SUCCESS := "Build Successful" +TIMING_RPT := $(TEMP_DIR)/reports/link/imp/impl_1_hw_bb_locked_timing_summary_routed.rpt +BUILD_LOG := $(TEMP_DIR)/build.json + +all: $(RS_KERNEL_XCLBIN) + rapidstream $(SLACK_GETTER) -i $(TIMING_RPT) -o $(BUILD_LOG) + echo $(SUCCESS) sw_emu: $(KERNEL_XCLBIN) $(HOST) XCL_EMULATION_MODE=sw_emu ./app.exe $< hw: $(KERNEL_XCLBIN) $(HOST) -rs_opt:$(KERNEL_XO) +$(RS_KERNEL_XCLBIN): $(RS_TARGET) + v++ -l -t ${TARGET} \ + --platform $(PLATFORM) \ + --kernel $(KERNEL_NAME) \ + --connectivity.nk $(KERNEL_NAME):1:$(KERNEL_NAME) \ + --config $(SRC_DIR)/$(LINK_FILE) \ + --temp_dir $(TEMP_DIR) \ + -o $@ \ + $^ + +rs_opt:$(RS_TARGET) + +$(RS_TARGET): $(KERNEL_XO) rapidstream $(RUN_FILE) $(KERNEL_XCLBIN): $(KERNEL_XO) @@ -80,7 +98,6 @@ show_groups: - clean: rm -rf $(TEMP_DIR) *.log rm -rf .Xil .run diff --git a/benchmarks/vitis_flow/cnn13x4_16/cnn13x8/Makefile b/benchmarks/vitis_flow/cnn13x4_16/cnn13x8/Makefile index 4fb149f4..4c090507 100644 --- a/benchmarks/vitis_flow/cnn13x4_16/cnn13x8/Makefile +++ b/benchmarks/vitis_flow/cnn13x4_16/cnn13x8/Makefile @@ -2,35 +2,53 @@ # The contributor(s) of this file has/have agreed to the RapidStream Contributor License Agreement. -ROOT_DIR := $(shell git rev-parse --show-toplevel) -GRP_UTIL := $(ROOT_DIR)/common/util/get_group.py -PLATFORM := xilinx_u250_gen3x16_xdma_4_1_202210_1 -PART := xcu250-figd2104-2L-e -RUN_FILE := run.py -LINK_FILE := link_config.ini -KERNEL_NAME := kernel3 -SRC_DIR := $(CURDIR)/design -TARGET := hw -TEMP_DIR := $(CURDIR)/build -KERNEL_XO := $(TEMP_DIR)/$(KERNEL_NAME).xo -KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME).xclbin -INCLUDE := -I $(XILINX_HLS)/include -CFLAGS := $(INCLUDE) $(OPT_LEVEL) -CXX := g++ -HOST := app.exe -HLS2XO_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl -CLK_PERIOD_NS := 4 - - - -all:rs_opt +ROOT_DIR := $(shell git rev-parse --show-toplevel) +GRP_UTIL := $(ROOT_DIR)/common/util/get_group.py +PLATFORM := xilinx_u250_gen3x16_xdma_4_1_202210_1 +PART := xcu250-figd2104-2L-e +RUN_FILE := run.py +LINK_FILE := link_config.ini +KERNEL_NAME := kernel3 +SRC_DIR := $(CURDIR)/design +TARGET := hw +TEMP_DIR := $(CURDIR)/build +KERNEL_XO := $(TEMP_DIR)/$(KERNEL_NAME).xo +KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME).xclbin +RS_KERNEL_XCLBIN := $(TEMP_DIR)/$(KERNEL_NAME)_rs.xclbin +INCLUDE := -I $(XILINX_HLS)/include +CFLAGS := $(INCLUDE) $(OPT_LEVEL) +CXX := g++ +HOST := app.exe +HLS2XO_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl +CLK_PERIOD_NS := 4 +RS_TARGET := $(TEMP_DIR)/dse/candidate_0/exported/$(KERNEL_NAME).xo +SLACK_GETTER := $(ROOT_DIR)/common/util/get_slack.py +SUCCESS := "Build Successful" +TIMING_RPT := $(TEMP_DIR)/reports/link/imp/impl_1_hw_bb_locked_timing_summary_routed.rpt +BUILD_LOG := $(TEMP_DIR)/build.json + +all: $(RS_KERNEL_XCLBIN) + rapidstream $(SLACK_GETTER) -i $(TIMING_RPT) -o $(BUILD_LOG) + echo $(SUCCESS) sw_emu: $(KERNEL_XCLBIN) $(HOST) XCL_EMULATION_MODE=sw_emu ./app.exe $< hw: $(KERNEL_XCLBIN) $(HOST) -rs_opt:$(KERNEL_XO) +$(RS_KERNEL_XCLBIN): $(RS_TARGET) + v++ -l -t ${TARGET} \ + --platform $(PLATFORM) \ + --kernel $(KERNEL_NAME) \ + --connectivity.nk $(KERNEL_NAME):1:$(KERNEL_NAME) \ + --config $(SRC_DIR)/$(LINK_FILE) \ + --temp_dir $(TEMP_DIR) \ + -o $@ \ + $^ + +rs_opt:$(RS_TARGET) + +$(RS_TARGET): $(KERNEL_XO) rapidstream $(RUN_FILE) $(KERNEL_XCLBIN): $(KERNEL_XO) @@ -80,7 +98,6 @@ show_groups: - clean: rm -rf $(TEMP_DIR) *.log rm -rf .Xil .run diff --git a/benchmarks/vivado_flow/CNN/cnn13x2/Makefile b/benchmarks/vivado_flow/CNN/cnn13x2/Makefile index f3faf321..5a7af8fb 100644 --- a/benchmarks/vivado_flow/CNN/cnn13x2/Makefile +++ b/benchmarks/vivado_flow/CNN/cnn13x2/Makefile @@ -20,8 +20,11 @@ KERNEL_CLK_MHZ := 300 SHELL_CLK_MHZ := 300 GEN_XO := 0 VXX := vivado -mode batch -source -RS_DCP := $(TEMP_DIR)/run/dse/candidate_0/route.dcp - +RS_DCP := $(TEMP_DIR)/run/dse/candidate_0/exported/impl/route.dcp +TIMING_RPT := $(TEMP_DIR)/run/dse/candidate_0/exported/impl/timing_summary.rpt +SUCCESS := "Build Successful" +SLACK_GETTER := $(ROOT_DIR)/common/util/get_slack.py +BUILD_LOG := $(TEMP_DIR)/build.json ifeq ($(PLATFORM), xilinx_u50_gen3x16_xdma_5_202210_1) PART := xcu50-fsvh2104-2-e @@ -35,7 +38,9 @@ endif SHELL_DCP := $(TEMP_DIR)/shell_$(CARD)_$(KERNEL_CLK_MHZ)_$(SHELL_CLK_MHZ)M_prj/shell.dcp CL_IPI_PRJ := $(TEMP_DIR)/$(KERNEL_NAME)_$(CARD)_$(KERNEL_CLK_MHZ)_$(SHELL_CLK_MHZ)M_cl_prj/$(KERNEL_NAME)_$(CARD)_cl_prj.xpr -all:$(RS_DCP) +all: $(RS_DCP) + rapidstream $(SLACK_GETTER) -i $(TIMING_RPT) -o $(BUILD_LOG) + echo $(SUCCESS) $(RS_DCP):$(CL_IPI_PRJ) $(SHELL_DCP) rapidstream $(RUN_FILE) diff --git a/benchmarks/vivado_flow/CNN/cnn13x2/run_au50.py b/benchmarks/vivado_flow/CNN/cnn13x2/run_au50.py index 653fff08..e9321b33 100644 --- a/benchmarks/vivado_flow/CNN/cnn13x2/run_au50.py +++ b/benchmarks/vivado_flow/CNN/cnn13x2/run_au50.py @@ -20,16 +20,16 @@ kernel_clk_mhz = 300 hbm_clk_mhz = 300 -temp_dir = "build" +temp_dir = f"{CURR_DIR}/build" kernel_name = "kernel3" card = "au50" -hdl_src_dir = f"{CURR_DIR}/{temp_dir}/hdl" -ipi_prj_name = ( - f"{CURR_DIR}/{temp_dir}/{kernel_name}_{card}_{kernel_clk_mhz}_{hbm_clk_mhz}M_cl_prj" +hdl_src_dir = f"{temp_dir}/hdl" +ipi_prj_name = f"{temp_dir}/{kernel_name}_{card}_{kernel_clk_mhz}_{hbm_clk_mhz}M_cl_prj" +txt_prj_name = ( + f"{temp_dir}/{kernel_name}_{card}_{kernel_clk_mhz}_{hbm_clk_mhz}M_cl_txt_prj" ) -txt_prj_name = f"{CURR_DIR}/{temp_dir}/{kernel_name}_{card}_{kernel_clk_mhz}_{hbm_clk_mhz}M_cl_txt_prj" -hls_dir = f"{CURR_DIR}/{temp_dir}/{kernel_name}/solution" +hls_dir = f"{temp_dir}/{kernel_name}/solution" verilog_input_dirs: list[str] = [ hdl_src_dir, diff --git a/benchmarks/vivado_flow/LLM/Makefile b/benchmarks/vivado_flow/LLM/Makefile index 9cca59a5..69993ac4 100644 --- a/benchmarks/vivado_flow/LLM/Makefile +++ b/benchmarks/vivado_flow/LLM/Makefile @@ -23,6 +23,11 @@ BIT_TARGET := $(TEMP_DIR)/prj/prj.runs/impl_1/design_1_wrapper.bit GEN_XO := 0 VXX := vivado -mode batch -source +BUILD_LOG := $(TEMP_DIR)/build.json +SUCCESS := "Build Successful" +TIMING_RPT := $(TEMP_DIR)/prj/prj.runs/impl_1/design_1_wrapper_timing_summary_routed.rpt +SLACK_GETTER := $(REPO_ROOT)/common/util/get_slack.py + ifeq ($(PLATFORM), vhk158) PART := xcvh1582-vsva3697-2MP-e-S BOARD := xilinx.com:vhk158:part0:1.1 @@ -57,12 +62,15 @@ else $(error PLATFORM not supported) endif -all:$(BIT_TARGET) - echo "TESTS PASS!" +all: $(BIT_TARGET) + rapidstream $(SLACK_GETTER) -i $(TIMING_RPT) -o $(BUILD_LOG) + echo $(SUCCESS) $(BIT_TARGET):$(RS_TARGET) cd $(TEMP_DIR) && $(VXX) $(IMPL_RS_TCL) -tclargs $(PART) $(BOARD) $(BD_TCL) +rs_opt: $(RS_TARGET) + $(RS_TARGET):$(KERNEL_HLS_SOL) rapidstream $(RUN_FILE) diff --git a/benchmarks/vivado_flow/LLM/run_vu9p.py b/benchmarks/vivado_flow/LLM/run_vu9p.py index a16cabdb..c873c6d8 100644 --- a/benchmarks/vivado_flow/LLM/run_vu9p.py +++ b/benchmarks/vivado_flow/LLM/run_vu9p.py @@ -35,6 +35,5 @@ rs.add_clock("ap_clk", kernel_clk_ns) rs.assign_port_to_region(".*", "SLOT_X0Y0:SLOT_X0Y0") -rs.assign_cell_to_region(".*k3.*", "SLOT_X0Y1:SLOT_X0Y1") rs.run_dse(skip_impl=True) diff --git a/benchmarks/vivado_flow/cnn13x2/Makefile b/benchmarks/vivado_flow/cnn13x2/Makefile index eab7aa13..dc0812b3 100644 --- a/benchmarks/vivado_flow/cnn13x2/Makefile +++ b/benchmarks/vivado_flow/cnn13x2/Makefile @@ -23,6 +23,11 @@ VIVADO_BIT_TARGET := $(TEMP_DIR)/prj_vivado/prj_vivado.runs/impl_1/design_1_w SLOTS_BIT_TARGET := $(TEMP_DIR)/slot/prj_slot/prj_slot.runs/impl_1/design_1_wrapper.bit BD_BIT_TARGET := $(TEMP_DIR)/bd/prj_bd/prj_bd.runs/impl_1/design_1_wrapper.bit +BUILD_LOG := $(TEMP_DIR)/build.json +SUCCESS := "Build Successful" +TIMING_RPT := $(TEMP_DIR)/prj/prj.runs/impl_1/design_1_wrapper_timing_summary_routed.rpt +SLACK_GETTER := $(ROOT_DIR)/common/util/get_slack.py + # Do not generate XO file GEN_XO := 0 VXX := vivado -mode batch -source @@ -35,9 +40,11 @@ BD_TCL := $(CURDIR)/tcl/gen_design_u50.tcl BIT := $(BIT_TARGET) -all:$(BIT_TARGET) +all: $(BIT_TARGET) + rapidstream $(SLACK_GETTER) -i $(TIMING_RPT) -o $(BUILD_LOG) + echo $(SUCCESS) -$(BIT_TARGET):$(RS_TARGET) +$(BIT_TARGET): $(RS_TARGET) mkdir -p $(TEMP_DIR) cd $(TEMP_DIR) && $(VXX) $(IMPL_TCL) -tclargs $(PART) $(BOARD) $(shell dirname $<) diff --git a/benchmarks/vivado_flow/cnn13x2/README.md b/benchmarks/vivado_flow/cnn13x2/README.md index 0ac392a9..6d9a374c 100644 --- a/benchmarks/vivado_flow/cnn13x2/README.md +++ b/benchmarks/vivado_flow/cnn13x2/README.md @@ -14,7 +14,7 @@ Although AMD Vitis is widely used for its support of high-level languages, Vivad At this moment, Rapidstream mainly accepts text-based input sources as shown below. -RapidStream Logo +rapidstream_input Design modules can be represented by `.v`, `.tcl`, or `.xci` (Xilinx Compiled IP) files. Interface information can be described within the Verilog code as outlined in [getting_started/mixed_sources](../../../getting_started/mixed_sources). Alternatively, if your modules are compiled using `vitis_hls`, you can provide `.rpt` or `.xml` files. diff --git a/benchmarks/tapa_flow/stencil_sasa/medium_congestion/autbridge_fail b/benchmarks/vivado_flow/cnn13x2/xfail_no_board_get_area similarity index 100% rename from benchmarks/tapa_flow/stencil_sasa/medium_congestion/autbridge_fail rename to benchmarks/vivado_flow/cnn13x2/xfail_no_board_get_area diff --git a/getting_started/img/VecAddMix.png b/common/img/VecAddMix.png similarity index 100% rename from getting_started/img/VecAddMix.png rename to common/img/VecAddMix.png diff --git a/getting_started/img/au250_virtual_device.png b/common/img/au250_virtual_device.png similarity index 100% rename from getting_started/img/au250_virtual_device.png rename to common/img/au250_virtual_device.png diff --git a/getting_started/img/au280_callipepla.png b/common/img/au280_callipepla.png similarity index 100% rename from getting_started/img/au280_callipepla.png rename to common/img/au280_callipepla.png diff --git a/getting_started/img/au280_sextans.png b/common/img/au280_sextans.png similarity index 100% rename from getting_started/img/au280_sextans.png rename to common/img/au280_sextans.png diff --git a/getting_started/img/au50_virtual_device.png b/common/img/au50_virtual_device.png similarity index 100% rename from getting_started/img/au50_virtual_device.png rename to common/img/au50_virtual_device.png diff --git a/getting_started/img/mixed_ooc_layout.png b/common/img/mixed_ooc_layout.png similarity index 100% rename from getting_started/img/mixed_ooc_layout.png rename to common/img/mixed_ooc_layout.png diff --git a/getting_started/img/rapid_shell.png b/common/img/rapid_shell.png similarity index 100% rename from getting_started/img/rapid_shell.png rename to common/img/rapid_shell.png diff --git a/getting_started/img/rapidsteram_xo.png b/common/img/rapidsteram_xo.png similarity index 100% rename from getting_started/img/rapidsteram_xo.png rename to common/img/rapidsteram_xo.png diff --git a/getting_started/img/rapidstream_input.png b/common/img/rapidstream_input.png similarity index 100% rename from getting_started/img/rapidstream_input.png rename to common/img/rapidstream_input.png diff --git a/getting_started/img/rapidstream_ipi_support.png b/common/img/rapidstream_ipi_support.png similarity index 100% rename from getting_started/img/rapidstream_ipi_support.png rename to common/img/rapidstream_ipi_support.png diff --git a/getting_started/img/vitis_rapidstream_flow.png b/common/img/vitis_rapidstream_flow.png similarity index 100% rename from getting_started/img/vitis_rapidstream_flow.png rename to common/img/vitis_rapidstream_flow.png diff --git a/getting_started/img/vivado_ipi_prj.png b/common/img/vivado_ipi_prj.png similarity index 100% rename from getting_started/img/vivado_ipi_prj.png rename to common/img/vivado_ipi_prj.png diff --git a/getting_started/img/vivado_kernel_flow.png b/common/img/vivado_kernel_flow.png similarity index 100% rename from getting_started/img/vivado_kernel_flow.png rename to common/img/vivado_kernel_flow.png diff --git a/getting_started/img/vivado_verilog_prj.png b/common/img/vivado_verilog_prj.png similarity index 100% rename from getting_started/img/vivado_verilog_prj.png rename to common/img/vivado_verilog_prj.png diff --git a/getting_started/img/vp1552_virtual_device.png b/common/img/vp1552_virtual_device.png similarity index 100% rename from getting_started/img/vp1552_virtual_device.png rename to common/img/vp1552_virtual_device.png diff --git a/common/util/get_slack.py b/common/util/get_slack.py index a3a7785f..4fc528ac 100644 --- a/common/util/get_slack.py +++ b/common/util/get_slack.py @@ -4,6 +4,7 @@ """ import argparse +import json # The value of WNS is 2 lines below the line that starts with "WNS(ns)" LINE_OFFSET = 2 @@ -22,11 +23,17 @@ output_file = args.output_file if input_file != ".": - with open(input_file, "r") as file: - lines = file.readlines() + with open(input_file, "r") as ifile: + lines = ifile.readlines() lines = [line.strip() for line in lines] + # Grab the slack value + results: dict[str, str] = {} for idx, line in enumerate(lines): if line.startswith("WNS(ns)"): slack = float(lines[idx + LINE_OFFSET].split()[0]) - print(f"WNS(ns) is {slack}") + results["slack"] = str(slack) + + if input_file != ".": + with open(output_file, "w") as ofile: + json.dump(results, ofile, indent=4) diff --git a/getting_started/mixed_sources/Makefile b/getting_started/mixed_sources/Makefile index 4c81051c..23b554b5 100644 --- a/getting_started/mixed_sources/Makefile +++ b/getting_started/mixed_sources/Makefile @@ -15,9 +15,10 @@ HLS_TCL := $(ROOT_DIR)/common/tcl/hls2rtl.tcl GRP_UTIL := $(ROOT_DIR)/common/util/get_group.py SUCCESS := "Build Successful" SLACK_GETTER := $(ROOT_DIR)/common/util/get_slack.py +BUILD_LOG := $(TEMP_DIR)/build.json all: $(DCP_TARGET) - rapidstream $(SLACK_GETTER) -i $(dir $<)/timing_summary.rpt + rapidstream $(SLACK_GETTER) -i $(dir $<)/timing_summary.rpt -o $(BUILD_LOG) echo $(SUCCESS) $(DCP_TARGET):$(HLS_DIR_TARGETS) diff --git a/getting_started/mixed_sources/README.md b/getting_started/mixed_sources/README.md index 0a3da47f..f76d186d 100644 --- a/getting_started/mixed_sources/README.md +++ b/getting_started/mixed_sources/README.md @@ -25,7 +25,7 @@ and This example utilizes the predefined U50 virtual device, which divides the FPGA part into four equal slots, each occupying half of a Super Logic Region (SLR): -U50 Partitioning Scheme +U50 Partitioning Scheme The Python snippet below demonstrates how to define the device configuration for the Alveo U50 device. The source file u50.py can be found in your RapidStream installation directory, such as `/.rapidstream/opt/python3.10/lib/python3.10/site-packages/rapidstream/assets/device_library/u50/u50.py`. @@ -65,7 +65,7 @@ def get_u50_default_device(output_path: Path | None = None) -> VirtualDevice: RapidStream supports Verilog files, whether they are handcrafted or generated by tools. In this tutorial, we will recreate the VecAdd example from [vitis_source](../vitis_source/README.md), using source files from a different origin. -RapidStream Flow +RapidStream Flow The VecAddMix design has 3 types of input source: diff --git a/getting_started/vitis_source/Makefile b/getting_started/vitis_source/Makefile index aad9e90f..b28e29b1 100644 --- a/getting_started/vitis_source/Makefile +++ b/getting_started/vitis_source/Makefile @@ -19,12 +19,12 @@ RS_TARGET := $(TEMP_DIR)/dse/candidate_0/exported/VecAdd.xo TIMING_RPT := $(TEMP_DIR)/reports/link/imp/impl_1_hw_bb_locked_timing_summary_routed.rpt SUCCESS := "Build Successful" SLACK_GETTER := $(ROOT_DIR)/common/util/get_slack.py +BUILD_LOG := $(TEMP_DIR)/build.json all: $(RS_KERNEL_XCLBIN) - rapidstream $(SLACK_GETTER) -i $(TIMING_RPT) + rapidstream $(SLACK_GETTER) -i $(TIMING_RPT) -o $(BUILD_LOG) echo $(SUCCESS) - $(RS_KERNEL_XCLBIN): $(RS_TARGET) v++ -l -t ${TARGET} \ --platform $(PLATFORM) \ diff --git a/getting_started/vitis_source/README.md b/getting_started/vitis_source/README.md index e6ea50ef..34b7825d 100644 --- a/getting_started/vitis_source/README.md +++ b/getting_started/vitis_source/README.md @@ -11,7 +11,7 @@ The contributor(s) of this file has/have agreed to the RapidStream Contributor L Rapidsteam is fully compatible with AMD Vitis by taking Vitis object files (`.xo`) as input, performing optimization and generating optimized `.xo` files as output. Therefore, users can use `v++ -link` to continue their Vitis development flow. -RapidStream Flow +rapidstream_xo.png In this recipe, we illustrate how to create a Vitis objective file (`.xo`) using Vitis, then optimize the `.xo` file with Rapidstream, and finally utilize the optimized output in the ongoing Vitis development process.

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 z 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