From 322fa856525a5661c73b806c592e9c99872b2bfa Mon Sep 17 00:00:00 2001 From: Konstantin Pavlov Date: Tue, 5 Apr 2022 18:35:04 +0300 Subject: [PATCH] Updated test projects to support dev boards --- .../quartus_test_prj_template_v3/readme.md | 2 - .../quartus_test_prj_template_v3/src/main.sdc | 6 - .../quartus_test_prj_template_v3/src/main.sv | 66 - .../src/readme.md | 2 - .../quartus_test_prj_template_v3/tb/readme.md | 2 - .../quartus_test_prj_template_v3/test.qsf | 21 - .../quartus_test_prj_template_v4.7z | Bin 0 -> 130764 bytes .../.gitignore | 66 +- .../Makefile | 0 .../clean_quartus.bat | 44 + .../debug/in_out_data.stp | 1470 ++++ .../ip/.qsys_edit/filters.xml | 2 + .../ip/.qsys_edit/jtag_io.xml | 2167 +++++ .../ip/.qsys_edit/jtag_io_schematic.nlv | 8 + .../ip/.qsys_edit/preferences.xml | 14 + .../ip/jtag_io.qsys | 217 + .../ip/jtag_io.sopcinfo | 4690 +++++++++++ .../ip/jtag_io/jtag_io.bsf | 104 + .../ip/jtag_io/jtag_io.cmp | 11 + .../ip/jtag_io/jtag_io.html | 1152 +++ .../ip/jtag_io/jtag_io.xml | 2497 ++++++ .../ip/jtag_io/jtag_io_bb.v | 16 + .../ip/jtag_io/jtag_io_generation.rpt | 65 + .../ip/jtag_io/jtag_io_inst.v | 9 + .../ip/jtag_io/jtag_io_inst.vhd | 21 + .../ip/jtag_io/synthesis/jtag_io.debuginfo | 7130 +++++++++++++++++ .../ip/jtag_io/synthesis/jtag_io.qip | 786 ++ .../ip/jtag_io/synthesis/jtag_io.regmap | 478 ++ .../ip/jtag_io/synthesis/jtag_io.v | 186 + .../altera_avalon_packets_to_master.v | 1240 +++ .../submodules/altera_avalon_sc_fifo.v | 915 +++ .../altera_avalon_st_bytes_to_packets.v | 210 + .../altera_avalon_st_clock_crosser.v | 141 + .../altera_avalon_st_idle_inserter.v | 72 + .../altera_avalon_st_idle_remover.v | 70 + .../altera_avalon_st_jtag_interface.sdc | 14 + .../altera_avalon_st_jtag_interface.v | 224 + .../altera_avalon_st_packets_to_bytes.v | 253 + .../altera_avalon_st_pipeline_base.v | 139 + .../altera_avalon_st_pipeline_stage.sv | 166 + .../submodules/altera_jtag_dc_streaming.v | 261 + .../submodules/altera_jtag_sld_node.v | 261 + .../submodules/altera_jtag_streaming.v | 634 ++ .../submodules/altera_merlin_arbitrator.sv | 272 + .../altera_merlin_burst_uncompressor.sv | 296 + .../submodules/altera_merlin_master_agent.sv | 303 + .../altera_merlin_master_translator.sv | 556 ++ .../altera_merlin_reorder_memory.sv | 297 + .../submodules/altera_merlin_slave_agent.sv | 622 ++ .../altera_merlin_slave_translator.sv | 482 ++ .../altera_merlin_traffic_limiter.sv | 787 ++ .../submodules/altera_reset_controller.sdc | 30 + .../submodules/altera_reset_controller.v | 319 + .../submodules/altera_reset_synchronizer.v | 87 + .../altera_std_synchronizer_nocut.v | 195 + .../synthesis/submodules/jtag_io_in0.v | 59 + .../synthesis/submodules/jtag_io_master_0.v | 354 + .../jtag_io_master_0_b2p_adapter.sv | 100 + .../jtag_io_master_0_p2b_adapter.sv | 96 + .../submodules/jtag_io_master_0_timing_adt.sv | 112 + .../submodules/jtag_io_mm_interconnect_0.v | 1655 ++++ ...g_io_mm_interconnect_0_avalon_st_adapter.v | 202 + ...ect_0_avalon_st_adapter_error_adapter_0.sv | 107 + .../jtag_io_mm_interconnect_0_cmd_demux.sv | 145 + .../jtag_io_mm_interconnect_0_cmd_mux.sv | 96 + .../jtag_io_mm_interconnect_0_router.sv | 246 + .../jtag_io_mm_interconnect_0_router_001.sv | 215 + .../jtag_io_mm_interconnect_0_rsp_demux.sv | 100 + .../jtag_io_mm_interconnect_0_rsp_mux.sv | 385 + .../synthesis/submodules/jtag_io_out0.v | 67 + .../ip/sys_pll/sys_pll.bsf | 93 + .../ip/sys_pll/sys_pll.cmp | 10 + .../ip/sys_pll/sys_pll.ppf | 14 + .../ip/sys_pll/sys_pll.qip | 337 + .../ip/sys_pll/sys_pll.sip | 6 + .../ip/sys_pll/sys_pll.spd | 6 + .../ip/sys_pll/sys_pll.v | 255 + .../ip/sys_pll/sys_pll/sys_pll_0002.qip | 4 + .../ip/sys_pll/sys_pll/sys_pll_0002.v | 90 + .../ip/sys_pll/sys_pll_sim.f | 1 + .../sys_pll_sim/aldec/rivierapro_setup.tcl | 278 + .../ip/sys_pll/sys_pll_sim/cadence/cds.lib | 19 + .../ip/sys_pll/sys_pll_sim/cadence/hdl.var | 2 + .../sys_pll_sim/cadence/ncsim_setup.sh | 195 + .../sys_pll/sys_pll_sim/mentor/msim_setup.tcl | 272 + .../sys_pll_sim/synopsys/vcs/vcs_setup.sh | 152 + .../synopsys/vcsmx/synopsys_sim.setup | 13 + .../sys_pll_sim/synopsys/vcsmx/vcsmx_setup.sh | 195 + .../ip/sys_pll/sys_pll_sim/sys_pll.vo | 300 + .../program_de10.bat | 16 + .../src/clk_divider.sv | 0 .../src/clogb2.svh | 24 + .../src/define.svh | 32 + .../quartus_test_prj_template_v4/src/delay.sv | 211 + .../src/edge_detect.sv | 100 + .../quartus_test_prj_template_v4/src/main.sdc | 13 + .../quartus_test_prj_template_v4/src/main.sv | 192 + .../test.qpf | 2 +- .../quartus_test_prj_template_v4/test.qsf | 490 ++ .../sources_1/ip/clk_wiz_0/clk_wiz_0.dcp | Bin 10855 -> 0 bytes .../sources_1/ip/clk_wiz_0_1/clk_wiz_0.dcp | Bin 10511 -> 0 bytes .../sources_1/ip/clk_wiz_0_1/clk_wiz_0.v | 92 - .../sources_1/ip/clk_wiz_0_1/clk_wiz_0.veo | 80 - .../sources_1/ip/clk_wiz_0_1/clk_wiz_0.xci | 720 -- .../sources_1/ip/clk_wiz_0_1/clk_wiz_0.xdc | 60 - .../sources_1/ip/clk_wiz_0_1/clk_wiz_0.xml | 4956 ------------ .../ip/clk_wiz_0_1/clk_wiz_0_board.xdc | 2 - .../ip/clk_wiz_0_1/clk_wiz_0_clk_wiz.v | 199 - .../ip/clk_wiz_0_1/clk_wiz_0_ooc.xdc | 58 - .../ip/clk_wiz_0_1/clk_wiz_0_sim_netlist.v | 246 - .../ip/clk_wiz_0_1/clk_wiz_0_sim_netlist.vhdl | 192 - .../sources_1/ip/clk_wiz_0_1/clk_wiz_0_stub.v | 22 - .../ip/clk_wiz_0_1/clk_wiz_0_stub.vhdl | 31 - .../doc/clk_wiz_v6_0_changelog.txt | 211 - .../clk_wiz_0_1/mmcm_pll_drp_func_7s_mmcm.vh | 671 -- .../clk_wiz_0_1/mmcm_pll_drp_func_7s_pll.vh | 531 -- .../clk_wiz_0_1/mmcm_pll_drp_func_us_mmcm.vh | 671 -- .../clk_wiz_0_1/mmcm_pll_drp_func_us_pll.vh | 530 -- .../mmcm_pll_drp_func_us_plus_mmcm.vh | 861 -- .../mmcm_pll_drp_func_us_plus_pll.vh | 536 -- .../sources_1/ip/vio_0/vio_0.dcp | Bin 194150 -> 0 bytes .../hard_clean_vivado.bat | 2 +- .../vivado_test_prj_template_v2/readme.md | 4 - .../src/clogb2.svh | 24 + .../src/define.svh | 6 + .../src/edge_detect.sv | 73 +- .../vivado_test_prj_template_v2/src/main.sv | 58 +- .../src/physical.xdc | 6 +- .../src/timing.xdc | 6 +- .../sources_1/ip/clk_wiz_0/clk_wiz_0.dcp | Bin 0 -> 10847 bytes .../sources_1/ip/clk_wiz_0/clk_wiz_0.v | 0 .../sources_1/ip/clk_wiz_0/clk_wiz_0.veo | 0 .../sources_1/ip/clk_wiz_0/clk_wiz_0.xci | 0 .../sources_1/ip/clk_wiz_0/clk_wiz_0.xdc | 0 .../sources_1/ip/clk_wiz_0/clk_wiz_0.xml | 2 +- .../ip/clk_wiz_0/clk_wiz_0_board.xdc | 0 .../ip/clk_wiz_0/clk_wiz_0_clk_wiz.v | 0 .../sources_1/ip/clk_wiz_0/clk_wiz_0_ooc.xdc | 0 .../ip/clk_wiz_0/clk_wiz_0_sim_netlist.v | 4 +- .../ip/clk_wiz_0/clk_wiz_0_sim_netlist.vhdl | 4 +- .../sources_1/ip/clk_wiz_0/clk_wiz_0_stub.v | 4 +- .../ip/clk_wiz_0/clk_wiz_0_stub.vhdl | 4 +- .../clk_wiz_0/doc/clk_wiz_v6_0_changelog.txt | 0 .../ip/clk_wiz_0/mmcm_pll_drp_func_7s_mmcm.vh | 0 .../ip/clk_wiz_0/mmcm_pll_drp_func_7s_pll.vh | 0 .../ip/clk_wiz_0/mmcm_pll_drp_func_us_mmcm.vh | 0 .../ip/clk_wiz_0/mmcm_pll_drp_func_us_pll.vh | 0 .../mmcm_pll_drp_func_us_plus_mmcm.vh | 0 .../mmcm_pll_drp_func_us_plus_pll.vh | 0 .../ip/vio_0/doc/vio_v3_0_changelog.txt | 0 .../ip/vio_0/hdl/ltlib_v1_0_vl_rfs.v | 0 .../vio_0/hdl/verilog/ltlib_v1_0_0_lib_fn.vh | 0 .../ip/vio_0/hdl/verilog/ltlib_v1_0_0_ver.vh | 0 .../ip/vio_0/hdl/verilog/xsdbs_v1_0_2_i2x.vh | 0 .../ip/vio_0/hdl/verilog/xsdbs_v1_0_2_in.vh | 0 .../ip/vio_0/hdl/vio_v3_0_19_vio_include.v | 0 .../sources_1/ip/vio_0/hdl/vio_v3_0_syn_rfs.v | 0 .../ip/vio_0/hdl/xsdbs_v1_0_vl_rfs.v | 0 .../sources_1/ip/vio_0/sim/vio_0.v | 0 .../sources_1/ip/vio_0/synth/vio_0.v | 0 .../test.srcs/sources_1/ip/vio_0/vio_0.dcp | Bin 0 -> 194111 bytes .../sources_1/ip/vio_0/vio_0.veo | 0 .../sources_1/ip/vio_0/vio_0.vho | 0 .../sources_1/ip/vio_0/vio_0.xci | 0 .../sources_1/ip/vio_0/vio_0.xdc | 0 .../sources_1/ip/vio_0/vio_0.xml | 2 +- .../sources_1/ip/vio_0/vio_0_ooc.xdc | 0 .../sources_1/ip/vio_0/vio_0_sim_netlist.v | 4 +- .../sources_1/ip/vio_0/vio_0_sim_netlist.vhdl | 4 +- .../sources_1/ip/vio_0/vio_0_stub.v | 4 +- .../sources_1/ip/vio_0/vio_0_stub.vhdl | 4 +- .../{arty_base_prj.xpr => test.xpr} | 16 +- 172 files changed, 37359 insertions(+), 10880 deletions(-) delete mode 100644 example_projects/quartus_test_prj_template_v3/readme.md delete mode 100644 example_projects/quartus_test_prj_template_v3/src/main.sdc delete mode 100644 example_projects/quartus_test_prj_template_v3/src/main.sv delete mode 100644 example_projects/quartus_test_prj_template_v3/src/readme.md delete mode 100644 example_projects/quartus_test_prj_template_v3/tb/readme.md delete mode 100644 example_projects/quartus_test_prj_template_v3/test.qsf create mode 100755 example_projects/quartus_test_prj_template_v4.7z rename example_projects/{quartus_test_prj_template_v3 => quartus_test_prj_template_v4}/.gitignore (95%) rename example_projects/{quartus_test_prj_template_v3 => quartus_test_prj_template_v4}/Makefile (100%) create mode 100755 example_projects/quartus_test_prj_template_v4/clean_quartus.bat create mode 100755 example_projects/quartus_test_prj_template_v4/debug/in_out_data.stp create mode 100755 example_projects/quartus_test_prj_template_v4/ip/.qsys_edit/filters.xml create mode 100755 example_projects/quartus_test_prj_template_v4/ip/.qsys_edit/jtag_io.xml create mode 100755 example_projects/quartus_test_prj_template_v4/ip/.qsys_edit/jtag_io_schematic.nlv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/.qsys_edit/preferences.xml create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io.qsys create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io.sopcinfo create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io.bsf create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io.cmp create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io.html create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io.xml create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io_bb.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io_generation.rpt create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io_inst.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io_inst.vhd create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/jtag_io.debuginfo create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/jtag_io.qip create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/jtag_io.regmap create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/jtag_io.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_packets_to_master.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_sc_fifo.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_bytes_to_packets.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_clock_crosser.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_idle_inserter.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_idle_remover.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_jtag_interface.sdc create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_jtag_interface.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_packets_to_bytes.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_pipeline_base.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_pipeline_stage.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_jtag_dc_streaming.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_jtag_sld_node.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_jtag_streaming.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_arbitrator.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_burst_uncompressor.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_master_agent.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_master_translator.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_reorder_memory.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_slave_agent.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_slave_translator.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_traffic_limiter.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_reset_controller.sdc create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_reset_controller.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_reset_synchronizer.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_std_synchronizer_nocut.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_in0.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_master_0.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_master_0_b2p_adapter.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_master_0_p2b_adapter.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_master_0_timing_adt.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_avalon_st_adapter.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_cmd_demux.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_cmd_mux.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_router.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_router_001.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_rsp_demux.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_rsp_mux.sv create mode 100755 example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_out0.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.bsf create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.cmp create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.ppf create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.qip create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.sip create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.spd create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll/sys_pll_0002.qip create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll/sys_pll_0002.v create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll_sim.f create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll_sim/aldec/rivierapro_setup.tcl create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll_sim/cadence/cds.lib create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll_sim/cadence/hdl.var create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll_sim/cadence/ncsim_setup.sh create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll_sim/mentor/msim_setup.tcl create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll_sim/synopsys/vcs/vcs_setup.sh create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll_sim/synopsys/vcsmx/synopsys_sim.setup create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll_sim/synopsys/vcsmx/vcsmx_setup.sh create mode 100755 example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll_sim/sys_pll.vo create mode 100755 example_projects/quartus_test_prj_template_v4/program_de10.bat rename example_projects/{quartus_test_prj_template_v3 => quartus_test_prj_template_v4}/src/clk_divider.sv (100%) create mode 100755 example_projects/quartus_test_prj_template_v4/src/clogb2.svh create mode 100755 example_projects/quartus_test_prj_template_v4/src/define.svh create mode 100755 example_projects/quartus_test_prj_template_v4/src/delay.sv create mode 100755 example_projects/quartus_test_prj_template_v4/src/edge_detect.sv create mode 100644 example_projects/quartus_test_prj_template_v4/src/main.sdc create mode 100644 example_projects/quartus_test_prj_template_v4/src/main.sv rename example_projects/{quartus_test_prj_template_v3 => quartus_test_prj_template_v4}/test.qpf (96%) create mode 100644 example_projects/quartus_test_prj_template_v4/test.qsf delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0/clk_wiz_0.dcp delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/clk_wiz_0.dcp delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/clk_wiz_0.v delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/clk_wiz_0.veo delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/clk_wiz_0.xci delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/clk_wiz_0.xdc delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/clk_wiz_0.xml delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/clk_wiz_0_board.xdc delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/clk_wiz_0_clk_wiz.v delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/clk_wiz_0_ooc.xdc delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/clk_wiz_0_sim_netlist.v delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/clk_wiz_0_sim_netlist.vhdl delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/clk_wiz_0_stub.v delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/clk_wiz_0_stub.vhdl delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/doc/clk_wiz_v6_0_changelog.txt delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/mmcm_pll_drp_func_7s_mmcm.vh delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/mmcm_pll_drp_func_7s_pll.vh delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/mmcm_pll_drp_func_us_mmcm.vh delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/mmcm_pll_drp_func_us_pll.vh delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/mmcm_pll_drp_func_us_plus_mmcm.vh delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/clk_wiz_0_1/mmcm_pll_drp_func_us_plus_pll.vh delete mode 100755 example_projects/vivado_test_prj_template_v2/arty_base_prj.srcs/sources_1/ip/vio_0/vio_0.dcp delete mode 100755 example_projects/vivado_test_prj_template_v2/readme.md create mode 100755 example_projects/vivado_test_prj_template_v2/src/clogb2.svh create mode 100755 example_projects/vivado_test_prj_template_v2/test.srcs/sources_1/ip/clk_wiz_0/clk_wiz_0.dcp rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/clk_wiz_0.v (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/clk_wiz_0.veo (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/clk_wiz_0.xci (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/clk_wiz_0.xdc (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/clk_wiz_0.xml (99%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/clk_wiz_0_board.xdc (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/clk_wiz_0_ooc.xdc (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/clk_wiz_0_sim_netlist.v (98%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/clk_wiz_0_sim_netlist.vhdl (98%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/clk_wiz_0_stub.v (90%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/clk_wiz_0_stub.vhdl (90%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/doc/clk_wiz_v6_0_changelog.txt (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/mmcm_pll_drp_func_7s_mmcm.vh (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/mmcm_pll_drp_func_7s_pll.vh (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/mmcm_pll_drp_func_us_mmcm.vh (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/mmcm_pll_drp_func_us_pll.vh (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/mmcm_pll_drp_func_us_plus_mmcm.vh (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/clk_wiz_0/mmcm_pll_drp_func_us_plus_pll.vh (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/doc/vio_v3_0_changelog.txt (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/hdl/ltlib_v1_0_vl_rfs.v (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/hdl/verilog/ltlib_v1_0_0_lib_fn.vh (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/hdl/verilog/ltlib_v1_0_0_ver.vh (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/hdl/verilog/xsdbs_v1_0_2_i2x.vh (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/hdl/verilog/xsdbs_v1_0_2_in.vh (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/hdl/vio_v3_0_19_vio_include.v (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/hdl/vio_v3_0_syn_rfs.v (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/hdl/xsdbs_v1_0_vl_rfs.v (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/sim/vio_0.v (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/synth/vio_0.v (100%) create mode 100755 example_projects/vivado_test_prj_template_v2/test.srcs/sources_1/ip/vio_0/vio_0.dcp rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/vio_0.veo (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/vio_0.vho (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/vio_0.xci (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/vio_0.xdc (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/vio_0.xml (99%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/vio_0_ooc.xdc (100%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/vio_0_sim_netlist.v (99%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/vio_0_sim_netlist.vhdl (99%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/vio_0_stub.v (91%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.srcs => test.srcs}/sources_1/ip/vio_0/vio_0_stub.vhdl (91%) rename example_projects/vivado_test_prj_template_v2/{arty_base_prj.xpr => test.xpr} (95%) diff --git a/example_projects/quartus_test_prj_template_v3/readme.md b/example_projects/quartus_test_prj_template_v3/readme.md deleted file mode 100644 index 3ce1604..0000000 --- a/example_projects/quartus_test_prj_template_v3/readme.md +++ /dev/null @@ -1,2 +0,0 @@ - -Quartus IDE test project template \ No newline at end of file diff --git a/example_projects/quartus_test_prj_template_v3/src/main.sdc b/example_projects/quartus_test_prj_template_v3/src/main.sdc deleted file mode 100644 index 725895e..0000000 --- a/example_projects/quartus_test_prj_template_v3/src/main.sdc +++ /dev/null @@ -1,6 +0,0 @@ - -# main reference clock, 500 MHz -create_clock -period 2.000 -waveform { 0.000 1.000 } [get_ports {clk}] - -derive_pll_clocks -derive_clock_uncertainty \ No newline at end of file diff --git a/example_projects/quartus_test_prj_template_v3/src/main.sv b/example_projects/quartus_test_prj_template_v3/src/main.sv deleted file mode 100644 index 98424c1..0000000 --- a/example_projects/quartus_test_prj_template_v3/src/main.sv +++ /dev/null @@ -1,66 +0,0 @@ -//------------------------------------------------------------------------------ -// main.sv -// Konstantin Pavlov, pavlovconst@gmail.com -//------------------------------------------------------------------------------ - -// INFO ------------------------------------------------------------------------ -// Test project template, v3 -// -// - use this as a boilerplate project for fast prototyping -// - inputs and outputs are registered to allow valid timequest output -// even if your custom logic/IPs have combinational outputs -// - SDC constraint file assigns clk to 500MHz to force fitter to synthesize -// the fastest possible circuit -// - -`define WIDTH - -module main( - - input clk, - input nrst, - - input [`WIDTH-1:0] in_data, - output logic [`WIDTH-1:0] out_data -); - -// input registers -logic [`WIDTH-1:0] in_data_reg = 0; -always_ff @(posedge clk) begin - if( ~nrst ) begin - in_data_reg[`WIDTH-1:0] <= '0; - end else begin - in_data_reg[`WIDTH-1:0] <= in_data; - end -end - -// place your test logic here ================================================== - -logic [31:0] div_clk; -clk_divider #( - .WIDTH( 32 ) -) cd1 ( - .clk( clk ), - .nrst( nrst ), - .ena( 1'b1 ), - .out( div_clk[31:0] ) -); - -logic [`WIDTH-1:0] out_data_comb = 0; -always_comb begin - out_data_comb[`WIDTH-1:0] <= in_data_reg[`WIDTH-1:0] ^ div_clk[31:0]; -end - - -// ============================================================================= - -// output registers -always_ff @(posedge clk) begin - if( ~nrst ) begin - out_data[`WIDTH-1:0] <= '0; - end else begin - out_data[`WIDTH-1:0] <= out_data_comb[`WIDTH-1:0]; - end -end - -endmodule \ No newline at end of file diff --git a/example_projects/quartus_test_prj_template_v3/src/readme.md b/example_projects/quartus_test_prj_template_v3/src/readme.md deleted file mode 100644 index a1f5c8e..0000000 --- a/example_projects/quartus_test_prj_template_v3/src/readme.md +++ /dev/null @@ -1,2 +0,0 @@ - -verilog rtl code directory \ No newline at end of file diff --git a/example_projects/quartus_test_prj_template_v3/tb/readme.md b/example_projects/quartus_test_prj_template_v3/tb/readme.md deleted file mode 100644 index 5e23b23..0000000 --- a/example_projects/quartus_test_prj_template_v3/tb/readme.md +++ /dev/null @@ -1,2 +0,0 @@ - -rtl code testbenches directory \ No newline at end of file diff --git a/example_projects/quartus_test_prj_template_v3/test.qsf b/example_projects/quartus_test_prj_template_v3/test.qsf deleted file mode 100644 index bd57e41..0000000 --- a/example_projects/quartus_test_prj_template_v3/test.qsf +++ /dev/null @@ -1,21 +0,0 @@ - -set_global_assignment -name FAMILY "Cyclone V" -set_global_assignment -name DEVICE 5CGXFC4C7F27C8 -set_global_assignment -name LAST_QUARTUS_VERSION "17.0.0 Lite Edition" - -set_global_assignment -name PROJECT_OUTPUT_DIRECTORY out -set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL -set_global_assignment -name TOP_LEVEL_ENTITY main - - -set_global_assignment -name SYSTEMVERILOG_FILE ./src/main.sv -set_global_assignment -name SYSTEMVERILOG_FILE ./src/clk_divider.sv -set_global_assignment -name SDC_FILE ./src/main.sdc - - -set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top -set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top -set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top -set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top - - diff --git a/example_projects/quartus_test_prj_template_v4.7z b/example_projects/quartus_test_prj_template_v4.7z new file mode 100755 index 0000000000000000000000000000000000000000..4ad0a4fc0c786001c835d5c73cfc48f26e33ac65 GIT binary patch literal 130764 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%0AhmgCayalYS&mU~z7+ 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 j**C#>`nK=nVVWZ1(#*vZ19-)i0xr(c04l`^e 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 +
Overview
+
+
+ + + + + + + + +
  clk_0 jtag_io
+
+
+
All Components +
   +
in0 + altera_avalon_pio 20.1 +
   + in1 + altera_avalon_pio 20.1 +
   + out0 + altera_avalon_pio 20.1 +
   + out1 + altera_avalon_pio 20.1 +
+
+
+
Memory Map
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ master_0 + +
 master
  + in0 + +
s1 0x00000020
  + in1 + +
s1 0x00000030
  + out0 + +
s1 0x00000000
  + out1 + +
s1 0x00000010
+ +
+
+

clk_0

clock_source v20.1 +
+
+
+ + + + +
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + +
clockFrequency50000000
clockFrequencyKnowntrue
inputClockFrequency0
resetSynchronousEdgesNONE
deviceFamilyUNKNOWN
generateLegacySimfalse
+
   + + + + +
+

Software Assignments

(none)
+
+ +
+
+

in0

altera_avalon_pio v20.1 +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ master_0 + master  in0
  s1
+ clk_0 + clk  
  clk
clk_reset  
  reset
+
+
+
+ + + + +
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bitClearingEdgeCapRegfalse
bitModifyingOutRegfalse
captureEdgefalse
directionInput
edgeTypeRISING
generateIRQfalse
irqTypeLEVEL
resetValue0
simDoTestBenchWiringfalse
simDrivenValue0
width32
clockRate50000000
derived_has_trifalse
derived_has_outfalse
derived_has_intrue
derived_do_test_bench_wiringfalse
derived_capturefalse
derived_edge_typeNONE
derived_irq_typeNONE
derived_has_irqfalse
deviceFamilyUNKNOWN
generateLegacySimfalse
+
   + + + + +
+

Software Assignments

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BIT_CLEARING_EDGE_REGISTER0
BIT_MODIFYING_OUTPUT_REGISTER0
CAPTURE0
DATA_WIDTH32
DO_TEST_BENCH_WIRING0
DRIVEN_SIM_VALUE0
EDGE_TYPENONE
FREQ50000000
HAS_IN1
HAS_OUT0
HAS_TRI0
IRQ_TYPENONE
RESET_VALUE0
+
+
+ +
+
+

in1

altera_avalon_pio v20.1 +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ master_0 + master  in1
  s1
+ clk_0 + clk  
  clk
clk_reset  
  reset
+
+
+
+ + + + +
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bitClearingEdgeCapRegfalse
bitModifyingOutRegfalse
captureEdgefalse
directionInput
edgeTypeRISING
generateIRQfalse
irqTypeLEVEL
resetValue0
simDoTestBenchWiringfalse
simDrivenValue0
width32
clockRate50000000
derived_has_trifalse
derived_has_outfalse
derived_has_intrue
derived_do_test_bench_wiringfalse
derived_capturefalse
derived_edge_typeNONE
derived_irq_typeNONE
derived_has_irqfalse
deviceFamilyUNKNOWN
generateLegacySimfalse
+
   + + + + +
+

Software Assignments

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BIT_CLEARING_EDGE_REGISTER0
BIT_MODIFYING_OUTPUT_REGISTER0
CAPTURE0
DATA_WIDTH32
DO_TEST_BENCH_WIRING0
DRIVEN_SIM_VALUE0
EDGE_TYPENONE
FREQ50000000
HAS_IN1
HAS_OUT0
HAS_TRI0
IRQ_TYPENONE
RESET_VALUE0
+
+
+ +
+
+

master_0

altera_jtag_avalon_master v20.1 +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ clk_0 + clk  master_0
  clk
clk_reset  
  clk_reset
master   + out0 +
  s1
master   + out1 +
  s1
master   + in0 +
  s1
master   + in1 +
  s1
+
+
+
+ + + + +
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
USE_PLI0
PLI_PORT50000
COMPONENT_CLOCK0
FAST_VER0
FIFO_DEPTHS2
AUTO_DEVICE_FAMILYCYCLONEV
AUTO_DEVICE5CSEBA6U23I7
AUTO_DEVICE_SPEEDGRADE7
deviceFamilyCyclone V
generateLegacySimfalse
+
   + + + + +
+

Software Assignments

(none)
+
+ +
+
+

out0

altera_avalon_pio v20.1 +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ master_0 + master  out0
  s1
+ clk_0 + clk  
  clk
clk_reset  
  reset
+
+
+
+ + + + +
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bitClearingEdgeCapRegfalse
bitModifyingOutRegfalse
captureEdgefalse
directionOutput
edgeTypeRISING
generateIRQfalse
irqTypeLEVEL
resetValue0
simDoTestBenchWiringfalse
simDrivenValue0
width32
clockRate50000000
derived_has_trifalse
derived_has_outtrue
derived_has_infalse
derived_do_test_bench_wiringfalse
derived_capturefalse
derived_edge_typeNONE
derived_irq_typeNONE
derived_has_irqfalse
deviceFamilyUNKNOWN
generateLegacySimfalse
+
   + + + + +
+

Software Assignments

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BIT_CLEARING_EDGE_REGISTER0
BIT_MODIFYING_OUTPUT_REGISTER0
CAPTURE0
DATA_WIDTH32
DO_TEST_BENCH_WIRING0
DRIVEN_SIM_VALUE0
EDGE_TYPENONE
FREQ50000000
HAS_IN0
HAS_OUT1
HAS_TRI0
IRQ_TYPENONE
RESET_VALUE0
+
+
+ +
+
+

out1

altera_avalon_pio v20.1 +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ master_0 + master  out1
  s1
+ clk_0 + clk  
  clk
clk_reset  
  reset
+
+
+
+ + + + +
+

Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bitClearingEdgeCapRegfalse
bitModifyingOutRegfalse
captureEdgefalse
directionOutput
edgeTypeRISING
generateIRQfalse
irqTypeLEVEL
resetValue0
simDoTestBenchWiringfalse
simDrivenValue0
width32
clockRate50000000
derived_has_trifalse
derived_has_outtrue
derived_has_infalse
derived_do_test_bench_wiringfalse
derived_capturefalse
derived_edge_typeNONE
derived_irq_typeNONE
derived_has_irqfalse
deviceFamilyUNKNOWN
generateLegacySimfalse
+
   + + + + +
+

Software Assignments

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BIT_CLEARING_EDGE_REGISTER0
BIT_MODIFYING_OUTPUT_REGISTER0
CAPTURE0
DATA_WIDTH32
DO_TEST_BENCH_WIRING0
DRIVEN_SIM_VALUE0
EDGE_TYPENONE
FREQ50000000
HAS_IN0
HAS_OUT1
HAS_TRI0
IRQ_TYPENONE
RESET_VALUE0
+
+
+ + + + + +
generation took 0,01 secondsrendering took 0,03 seconds
+ + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io.xml b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io.xml new file mode 100755 index 0000000..5ea94b7 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io.xml @@ -0,0 +1,2497 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + queue size: 0 starting:jtag_io "jtag_io" + + + + Transform: CustomInstructionTransform + No custom instruction connections, skipping transform + 6 modules, 14 connections]]> + Transform: MMTransform + Transform: InitialInterconnectTransform + 6 modules, 14 connections]]> + Transform: TerminalIdAssignmentUpdateTransform + Transform: DefaultSlaveTransform + Transform: TranslatorTransform + + + + + + + + + + + + + + + + 11 modules, 29 connections]]> + Transform: IDPadTransform + Transform: DomainTransform + Transform merlin_domain_transform not run on matched interfaces master_0.master and master_0_master_translator.avalon_anti_master_0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Transform merlin_domain_transform not run on matched interfaces out0_s1_translator.avalon_anti_slave_0 and out0.s1 + Transform merlin_domain_transform not run on matched interfaces out1_s1_translator.avalon_anti_slave_0 and out1.s1 + Transform merlin_domain_transform not run on matched interfaces in0_s1_translator.avalon_anti_slave_0 and in0.s1 + Transform merlin_domain_transform not run on matched interfaces in1_s1_translator.avalon_anti_slave_0 and in1.s1 + 21 modules, 80 connections]]> + Transform: RouterTransform + + + + + + + + + + + + + + + + 26 modules, 95 connections]]> + Transform: TrafficLimiterTransform + + + + 27 modules, 99 connections]]> + Transform: BurstTransform + Transform: TreeTransform + Transform: NetworkToSwitchTransform + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 36 modules, 117 connections]]> + Transform: WidthTransform + Transform: RouterTableTransform + Transform: ThreadIDMappingTableTransform + Transform: ClockCrossingTransform + Transform: PipelineTransform + Transform: SpotPipelineTransform + Transform: PerformanceMonitorTransform + Transform: TrafficLimiterUpdateTransform + 36 modules, 118 connections]]> + Transform: InsertClockAndResetBridgesTransform + + + + + + + + + + 39 modules, 156 connections]]> + Transform: InterconnectConnectionsTagger + Transform: HierarchyTransform + + + + 7 modules, 18 connections]]> + 7 modules, 18 connections]]> + Transform: InterruptMapperTransform + Transform: InterruptSyncTransform + Transform: InterruptFanoutTransform + Transform: AvalonStreamingTransform + Transform: ResetAdaptation + + + + 8 modules, 20 connections]]> + jtag_io" reuses altera_avalon_pio "submodules/jtag_io_in0"]]> + jtag_io" reuses altera_avalon_pio "submodules/jtag_io_in0"]]> + jtag_io" reuses altera_jtag_avalon_master "submodules/jtag_io_master_0"]]> + jtag_io" reuses altera_avalon_pio "submodules/jtag_io_out0"]]> + jtag_io" reuses altera_avalon_pio "submodules/jtag_io_out0"]]> + jtag_io" reuses altera_mm_interconnect "submodules/jtag_io_mm_interconnect_0"]]> + jtag_io" reuses altera_reset_controller "submodules/altera_reset_controller"]]> + queue size: 6 starting:altera_avalon_pio "submodules/jtag_io_in0" + Starting RTL generation for module 'jtag_io_in0' + Generation command is [exec C:/intelfpga_lite/20.1/quartus/bin64/perl/bin/perl.exe -I C:/intelfpga_lite/20.1/quartus/bin64/perl/lib -I C:/intelfpga_lite/20.1/quartus/sopc_builder/bin/europa -I C:/intelfpga_lite/20.1/quartus/sopc_builder/bin -I C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/common -I C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/altera_avalon_pio -- C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/altera_avalon_pio/generate_rtl.pl --name=jtag_io_in0 --dir=C:/Users/Pavlov/AppData/Local/Temp/alt9083_1757229078663084904.dir/0002_in0_gen/ --quartus_dir=C:/intelfpga_lite/20.1/quartus --verilog --config=C:/Users/Pavlov/AppData/Local/Temp/alt9083_1757229078663084904.dir/0002_in0_gen//jtag_io_in0_component_configuration.pl --do_build_sim=0 ] + Done RTL generation for module 'jtag_io_in0' + jtag_io" instantiated altera_avalon_pio "in0"]]> + queue size: 4 starting:altera_jtag_avalon_master "submodules/jtag_io_master_0" + + + + Transform: CustomInstructionTransform + No custom instruction connections, skipping transform + 10 modules, 24 connections]]> + Transform: MMTransform + Transform: InterruptMapperTransform + Transform: InterruptSyncTransform + Transform: InterruptFanoutTransform + Transform: AvalonStreamingTransform + Transform: ResetAdaptation + + + + 11 modules, 26 connections]]> + master_0" reuses altera_jtag_dc_streaming "submodules/altera_avalon_st_jtag_interface"]]> + master_0" reuses timing_adapter "submodules/jtag_io_master_0_timing_adt"]]> + master_0" reuses altera_avalon_sc_fifo "submodules/altera_avalon_sc_fifo"]]> + master_0" reuses altera_avalon_st_bytes_to_packets "submodules/altera_avalon_st_bytes_to_packets"]]> + master_0" reuses altera_avalon_st_packets_to_bytes "submodules/altera_avalon_st_packets_to_bytes"]]> + master_0" reuses altera_avalon_packets_to_master "submodules/altera_avalon_packets_to_master"]]> + master_0" reuses channel_adapter "submodules/jtag_io_master_0_b2p_adapter"]]> + master_0" reuses channel_adapter "submodules/jtag_io_master_0_p2b_adapter"]]> + master_0" reuses altera_reset_controller "submodules/altera_reset_controller"]]> + jtag_io" instantiated altera_jtag_avalon_master "master_0"]]> + queue size: 42 starting:altera_jtag_dc_streaming "submodules/altera_avalon_st_jtag_interface" + master_0" instantiated altera_jtag_dc_streaming "jtag_phy_embedded_in_jtag_master"]]> + queue size: 41 starting:timing_adapter "submodules/jtag_io_master_0_timing_adt" + master_0" instantiated timing_adapter "timing_adt"]]> + queue size: 40 starting:altera_avalon_sc_fifo "submodules/altera_avalon_sc_fifo" + master_0" instantiated altera_avalon_sc_fifo "fifo"]]> + queue size: 39 starting:altera_avalon_st_bytes_to_packets "submodules/altera_avalon_st_bytes_to_packets" + master_0" instantiated altera_avalon_st_bytes_to_packets "b2p"]]> + queue size: 38 starting:altera_avalon_st_packets_to_bytes "submodules/altera_avalon_st_packets_to_bytes" + master_0" instantiated altera_avalon_st_packets_to_bytes "p2b"]]> + queue size: 37 starting:altera_avalon_packets_to_master "submodules/altera_avalon_packets_to_master" + master_0" instantiated altera_avalon_packets_to_master "transacto"]]> + queue size: 36 starting:channel_adapter "submodules/jtag_io_master_0_b2p_adapter" + master_0" instantiated channel_adapter "b2p_adapter"]]> + queue size: 35 starting:channel_adapter "submodules/jtag_io_master_0_p2b_adapter" + master_0" instantiated channel_adapter "p2b_adapter"]]> + queue size: 43 starting:altera_reset_controller "submodules/altera_reset_controller" + jtag_io" instantiated altera_reset_controller "rst_controller"]]> + queue size: 12 starting:altera_avalon_pio "submodules/jtag_io_out0" + Starting RTL generation for module 'jtag_io_out0' + Generation command is [exec C:/intelfpga_lite/20.1/quartus/bin64/perl/bin/perl.exe -I C:/intelfpga_lite/20.1/quartus/bin64/perl/lib -I C:/intelfpga_lite/20.1/quartus/sopc_builder/bin/europa -I C:/intelfpga_lite/20.1/quartus/sopc_builder/bin -I C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/common -I C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/altera_avalon_pio -- C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/altera_avalon_pio/generate_rtl.pl --name=jtag_io_out0 --dir=C:/Users/Pavlov/AppData/Local/Temp/alt9083_1757229078663084904.dir/0003_out0_gen/ --quartus_dir=C:/intelfpga_lite/20.1/quartus --verilog --config=C:/Users/Pavlov/AppData/Local/Temp/alt9083_1757229078663084904.dir/0003_out0_gen//jtag_io_out0_component_configuration.pl --do_build_sim=0 ] + Done RTL generation for module 'jtag_io_out0' + jtag_io" instantiated altera_avalon_pio "out0"]]> + queue size: 10 starting:altera_mm_interconnect "submodules/jtag_io_mm_interconnect_0" + + + + Transform: CustomInstructionTransform + No custom instruction connections, skipping transform + 33 modules, 105 connections]]> + Transform: MMTransform + Transform: InitialInterconnectTransform + 0 modules, 0 connections]]> + Transform: TerminalIdAssignmentUpdateTransform + Transform: DefaultSlaveTransform + Transform: TranslatorTransform + No Avalon connections, skipping transform + Transform: IDPadTransform + Transform: DomainTransform + Transform: RouterTransform + Transform: TrafficLimiterTransform + Transform: BurstTransform + Transform: TreeTransform + Transform: NetworkToSwitchTransform + Transform: WidthTransform + Transform: RouterTableTransform + Transform: ThreadIDMappingTableTransform + Transform: ClockCrossingTransform + Transform: PipelineTransform + Transform: SpotPipelineTransform + Transform: PerformanceMonitorTransform + Transform: TrafficLimiterUpdateTransform + Transform: InsertClockAndResetBridgesTransform + Transform: InterconnectConnectionsTagger + Transform: HierarchyTransform + 33 modules, 105 connections]]> + Transform: InitialInterconnectTransform + 0 modules, 0 connections]]> + Transform: TerminalIdAssignmentUpdateTransform + Transform: DefaultSlaveTransform + Transform: TranslatorTransform + No Avalon connections, skipping transform + Transform: IDPadTransform + Transform: DomainTransform + Transform: RouterTransform + Transform: TrafficLimiterTransform + Transform: BurstTransform + Transform: TreeTransform + Transform: NetworkToSwitchTransform + Transform: WidthTransform + Transform: RouterTableTransform + Transform: ThreadIDMappingTableTransform + Transform: ClockCrossingTransform + Transform: PipelineTransform + Transform: SpotPipelineTransform + Transform: PerformanceMonitorTransform + Transform: TrafficLimiterUpdateTransform + Transform: InsertClockAndResetBridgesTransform + Transform: InterconnectConnectionsTagger + Transform: HierarchyTransform + 33 modules, 105 connections]]> + Transform: InitialInterconnectTransform + 0 modules, 0 connections]]> + Transform: TerminalIdAssignmentUpdateTransform + Transform: DefaultSlaveTransform + Transform: TranslatorTransform + No Avalon connections, skipping transform + Transform: IDPadTransform + Transform: DomainTransform + Transform: RouterTransform + Transform: TrafficLimiterTransform + Transform: BurstTransform + Transform: TreeTransform + Transform: NetworkToSwitchTransform + Transform: WidthTransform + Transform: RouterTableTransform + Transform: ThreadIDMappingTableTransform + Transform: ClockCrossingTransform + Transform: PipelineTransform + Transform: SpotPipelineTransform + Transform: PerformanceMonitorTransform + Transform: TrafficLimiterUpdateTransform + Transform: InsertClockAndResetBridgesTransform + Transform: InterconnectConnectionsTagger + Transform: HierarchyTransform + 33 modules, 105 connections]]> + Transform: InitialInterconnectTransform + 0 modules, 0 connections]]> + Transform: TerminalIdAssignmentUpdateTransform + Transform: DefaultSlaveTransform + Transform: TranslatorTransform + No Avalon connections, skipping transform + Transform: IDPadTransform + Transform: DomainTransform + Transform: RouterTransform + Transform: TrafficLimiterTransform + Transform: BurstTransform + Transform: TreeTransform + Transform: NetworkToSwitchTransform + Transform: WidthTransform + Transform: RouterTableTransform + Transform: ThreadIDMappingTableTransform + Transform: ClockCrossingTransform + Transform: PipelineTransform + Transform: SpotPipelineTransform + Transform: PerformanceMonitorTransform + Transform: TrafficLimiterUpdateTransform + Transform: InsertClockAndResetBridgesTransform + Transform: InterconnectConnectionsTagger + Transform: HierarchyTransform + 33 modules, 105 connections]]> + Transform: InitialInterconnectTransform + 0 modules, 0 connections]]> + Transform: TerminalIdAssignmentUpdateTransform + Transform: DefaultSlaveTransform + Transform: TranslatorTransform + No Avalon connections, skipping transform + Transform: IDPadTransform + Transform: DomainTransform + Transform: RouterTransform + Transform: TrafficLimiterTransform + Transform: BurstTransform + Transform: TreeTransform + Transform: NetworkToSwitchTransform + Transform: WidthTransform + Transform: RouterTableTransform + Transform: ThreadIDMappingTableTransform + Transform: ClockCrossingTransform + Transform: PipelineTransform + Transform: SpotPipelineTransform + Transform: PerformanceMonitorTransform + Transform: TrafficLimiterUpdateTransform + Transform: InsertClockAndResetBridgesTransform + Transform: InterconnectConnectionsTagger + Transform: HierarchyTransform + 33 modules, 105 connections]]> + Transform: InterruptMapperTransform + Transform: InterruptSyncTransform + Transform: InterruptFanoutTransform + Transform: AvalonStreamingTransform + + + + Inserting error_adapter: error_adapter_0 + Timing: ELA:1/0.000s + Timing: ELA:2/0.000s/0.000s + Timing: ELA:1/0.005s + Timing: COM:3/0.044s/0.083s + + + + Inserting error_adapter: error_adapter_0 + Timing: ELA:1/0.001s + Timing: ELA:2/0.000s/0.000s + Timing: ELA:1/0.005s + Timing: COM:3/0.014s/0.015s + + + + Inserting error_adapter: error_adapter_0 + Timing: ELA:1/0.001s + Timing: ELA:2/0.000s/0.000s + Timing: ELA:1/0.004s + Timing: COM:3/0.013s/0.014s + + + + Inserting error_adapter: error_adapter_0 + Timing: ELA:1/0.000s + Timing: ELA:2/0.000s/0.001s + Timing: ELA:1/0.005s + Timing: COM:3/0.013s/0.015s + 37 modules, 117 connections]]> + Transform: ResetAdaptation + mm_interconnect_0" reuses altera_merlin_master_translator "submodules/altera_merlin_master_translator"]]> + mm_interconnect_0" reuses altera_merlin_slave_translator "submodules/altera_merlin_slave_translator"]]> + mm_interconnect_0" reuses altera_merlin_slave_translator "submodules/altera_merlin_slave_translator"]]> + mm_interconnect_0" reuses altera_merlin_slave_translator "submodules/altera_merlin_slave_translator"]]> + mm_interconnect_0" reuses altera_merlin_slave_translator "submodules/altera_merlin_slave_translator"]]> + mm_interconnect_0" reuses altera_merlin_master_agent "submodules/altera_merlin_master_agent"]]> + mm_interconnect_0" reuses altera_merlin_slave_agent "submodules/altera_merlin_slave_agent"]]> + mm_interconnect_0" reuses altera_avalon_sc_fifo "submodules/altera_avalon_sc_fifo"]]> + mm_interconnect_0" reuses altera_merlin_slave_agent "submodules/altera_merlin_slave_agent"]]> + mm_interconnect_0" reuses altera_avalon_sc_fifo "submodules/altera_avalon_sc_fifo"]]> + mm_interconnect_0" reuses altera_merlin_slave_agent "submodules/altera_merlin_slave_agent"]]> + mm_interconnect_0" reuses altera_avalon_sc_fifo "submodules/altera_avalon_sc_fifo"]]> + mm_interconnect_0" reuses altera_merlin_slave_agent "submodules/altera_merlin_slave_agent"]]> + mm_interconnect_0" reuses altera_avalon_sc_fifo "submodules/altera_avalon_sc_fifo"]]> + mm_interconnect_0" reuses altera_merlin_router "submodules/jtag_io_mm_interconnect_0_router"]]> + mm_interconnect_0" reuses altera_merlin_router "submodules/jtag_io_mm_interconnect_0_router_001"]]> + mm_interconnect_0" reuses altera_merlin_router "submodules/jtag_io_mm_interconnect_0_router_001"]]> + mm_interconnect_0" reuses altera_merlin_router "submodules/jtag_io_mm_interconnect_0_router_001"]]> + mm_interconnect_0" reuses altera_merlin_router "submodules/jtag_io_mm_interconnect_0_router_001"]]> + mm_interconnect_0" reuses altera_merlin_traffic_limiter "submodules/altera_merlin_traffic_limiter"]]> + mm_interconnect_0" reuses altera_merlin_demultiplexer "submodules/jtag_io_mm_interconnect_0_cmd_demux"]]> + mm_interconnect_0" reuses altera_merlin_multiplexer "submodules/jtag_io_mm_interconnect_0_cmd_mux"]]> + mm_interconnect_0" reuses altera_merlin_multiplexer "submodules/jtag_io_mm_interconnect_0_cmd_mux"]]> + mm_interconnect_0" reuses altera_merlin_multiplexer "submodules/jtag_io_mm_interconnect_0_cmd_mux"]]> + mm_interconnect_0" reuses altera_merlin_multiplexer "submodules/jtag_io_mm_interconnect_0_cmd_mux"]]> + mm_interconnect_0" reuses altera_merlin_demultiplexer "submodules/jtag_io_mm_interconnect_0_rsp_demux"]]> + mm_interconnect_0" reuses altera_merlin_demultiplexer "submodules/jtag_io_mm_interconnect_0_rsp_demux"]]> + mm_interconnect_0" reuses altera_merlin_demultiplexer "submodules/jtag_io_mm_interconnect_0_rsp_demux"]]> + mm_interconnect_0" reuses altera_merlin_demultiplexer "submodules/jtag_io_mm_interconnect_0_rsp_demux"]]> + mm_interconnect_0" reuses altera_merlin_multiplexer "submodules/jtag_io_mm_interconnect_0_rsp_mux"]]> + mm_interconnect_0" reuses altera_avalon_st_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter"]]> + mm_interconnect_0" reuses altera_avalon_st_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter"]]> + mm_interconnect_0" reuses altera_avalon_st_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter"]]> + mm_interconnect_0" reuses altera_avalon_st_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter"]]> + jtag_io" instantiated altera_mm_interconnect "mm_interconnect_0"]]> + queue size: 33 starting:altera_merlin_master_translator "submodules/altera_merlin_master_translator" + mm_interconnect_0" instantiated altera_merlin_master_translator "master_0_master_translator"]]> + queue size: 32 starting:altera_merlin_slave_translator "submodules/altera_merlin_slave_translator" + mm_interconnect_0" instantiated altera_merlin_slave_translator "out0_s1_translator"]]> + queue size: 28 starting:altera_merlin_master_agent "submodules/altera_merlin_master_agent" + mm_interconnect_0" instantiated altera_merlin_master_agent "master_0_master_agent"]]> + queue size: 27 starting:altera_merlin_slave_agent "submodules/altera_merlin_slave_agent" + mm_interconnect_0" instantiated altera_merlin_slave_agent "out0_s1_agent"]]> + queue size: 40 starting:altera_avalon_sc_fifo "submodules/altera_avalon_sc_fifo" + master_0" instantiated altera_avalon_sc_fifo "fifo"]]> + queue size: 19 starting:altera_merlin_router "submodules/jtag_io_mm_interconnect_0_router" + mm_interconnect_0" instantiated altera_merlin_router "router"]]> + queue size: 18 starting:altera_merlin_router "submodules/jtag_io_mm_interconnect_0_router_001" + mm_interconnect_0" instantiated altera_merlin_router "router_001"]]> + queue size: 14 starting:altera_merlin_traffic_limiter "submodules/altera_merlin_traffic_limiter" + mm_interconnect_0" instantiated altera_merlin_traffic_limiter "master_0_master_limiter"]]> + J:/basic_verilog/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_sc_fifo.v]]> + J:/basic_verilog/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_pipeline_base.v]]> + queue size: 13 starting:altera_merlin_demultiplexer "submodules/jtag_io_mm_interconnect_0_cmd_demux" + mm_interconnect_0" instantiated altera_merlin_demultiplexer "cmd_demux"]]> + queue size: 12 starting:altera_merlin_multiplexer "submodules/jtag_io_mm_interconnect_0_cmd_mux" + mm_interconnect_0" instantiated altera_merlin_multiplexer "cmd_mux"]]> + queue size: 8 starting:altera_merlin_demultiplexer "submodules/jtag_io_mm_interconnect_0_rsp_demux" + mm_interconnect_0" instantiated altera_merlin_demultiplexer "rsp_demux"]]> + queue size: 4 starting:altera_merlin_multiplexer "submodules/jtag_io_mm_interconnect_0_rsp_mux" + mm_interconnect_0" instantiated altera_merlin_multiplexer "rsp_mux"]]> + J:/basic_verilog/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_arbitrator.sv]]> + queue size: 3 starting:altera_avalon_st_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter" + + + + Transform: CustomInstructionTransform + No custom instruction connections, skipping transform + 3 modules, 3 connections]]> + Transform: MMTransform + Transform: InterruptMapperTransform + Transform: InterruptSyncTransform + Transform: InterruptFanoutTransform + Transform: AvalonStreamingTransform + Transform: ResetAdaptation + avalon_st_adapter" reuses error_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0"]]> + mm_interconnect_0" instantiated altera_avalon_st_adapter "avalon_st_adapter"]]> + queue size: 0 starting:error_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" + avalon_st_adapter" instantiated error_adapter "error_adapter_0"]]> + queue size: 43 starting:altera_reset_controller "submodules/altera_reset_controller" + jtag_io" instantiated altera_reset_controller "rst_controller"]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + queue size: 6 starting:altera_avalon_pio "submodules/jtag_io_in0" + Starting RTL generation for module 'jtag_io_in0' + Generation command is [exec C:/intelfpga_lite/20.1/quartus/bin64/perl/bin/perl.exe -I C:/intelfpga_lite/20.1/quartus/bin64/perl/lib -I C:/intelfpga_lite/20.1/quartus/sopc_builder/bin/europa -I C:/intelfpga_lite/20.1/quartus/sopc_builder/bin -I C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/common -I C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/altera_avalon_pio -- C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/altera_avalon_pio/generate_rtl.pl --name=jtag_io_in0 --dir=C:/Users/Pavlov/AppData/Local/Temp/alt9083_1757229078663084904.dir/0002_in0_gen/ --quartus_dir=C:/intelfpga_lite/20.1/quartus --verilog --config=C:/Users/Pavlov/AppData/Local/Temp/alt9083_1757229078663084904.dir/0002_in0_gen//jtag_io_in0_component_configuration.pl --do_build_sim=0 ] + Done RTL generation for module 'jtag_io_in0' + jtag_io" instantiated altera_avalon_pio "in0"]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + queue size: 4 starting:altera_jtag_avalon_master "submodules/jtag_io_master_0" + + + + Transform: CustomInstructionTransform + No custom instruction connections, skipping transform + 10 modules, 24 connections]]> + Transform: MMTransform + Transform: InterruptMapperTransform + Transform: InterruptSyncTransform + Transform: InterruptFanoutTransform + Transform: AvalonStreamingTransform + Transform: ResetAdaptation + + + + 11 modules, 26 connections]]> + master_0" reuses altera_jtag_dc_streaming "submodules/altera_avalon_st_jtag_interface"]]> + master_0" reuses timing_adapter "submodules/jtag_io_master_0_timing_adt"]]> + master_0" reuses altera_avalon_sc_fifo "submodules/altera_avalon_sc_fifo"]]> + master_0" reuses altera_avalon_st_bytes_to_packets "submodules/altera_avalon_st_bytes_to_packets"]]> + master_0" reuses altera_avalon_st_packets_to_bytes "submodules/altera_avalon_st_packets_to_bytes"]]> + master_0" reuses altera_avalon_packets_to_master "submodules/altera_avalon_packets_to_master"]]> + master_0" reuses channel_adapter "submodules/jtag_io_master_0_b2p_adapter"]]> + master_0" reuses channel_adapter "submodules/jtag_io_master_0_p2b_adapter"]]> + master_0" reuses altera_reset_controller "submodules/altera_reset_controller"]]> + jtag_io" instantiated altera_jtag_avalon_master "master_0"]]> + queue size: 42 starting:altera_jtag_dc_streaming "submodules/altera_avalon_st_jtag_interface" + master_0" instantiated altera_jtag_dc_streaming "jtag_phy_embedded_in_jtag_master"]]> + queue size: 41 starting:timing_adapter "submodules/jtag_io_master_0_timing_adt" + master_0" instantiated timing_adapter "timing_adt"]]> + queue size: 40 starting:altera_avalon_sc_fifo "submodules/altera_avalon_sc_fifo" + master_0" instantiated altera_avalon_sc_fifo "fifo"]]> + queue size: 39 starting:altera_avalon_st_bytes_to_packets "submodules/altera_avalon_st_bytes_to_packets" + master_0" instantiated altera_avalon_st_bytes_to_packets "b2p"]]> + queue size: 38 starting:altera_avalon_st_packets_to_bytes "submodules/altera_avalon_st_packets_to_bytes" + master_0" instantiated altera_avalon_st_packets_to_bytes "p2b"]]> + queue size: 37 starting:altera_avalon_packets_to_master "submodules/altera_avalon_packets_to_master" + master_0" instantiated altera_avalon_packets_to_master "transacto"]]> + queue size: 36 starting:channel_adapter "submodules/jtag_io_master_0_b2p_adapter" + master_0" instantiated channel_adapter "b2p_adapter"]]> + queue size: 35 starting:channel_adapter "submodules/jtag_io_master_0_p2b_adapter" + master_0" instantiated channel_adapter "p2b_adapter"]]> + queue size: 43 starting:altera_reset_controller "submodules/altera_reset_controller" + jtag_io" instantiated altera_reset_controller "rst_controller"]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + queue size: 12 starting:altera_avalon_pio "submodules/jtag_io_out0" + Starting RTL generation for module 'jtag_io_out0' + Generation command is [exec C:/intelfpga_lite/20.1/quartus/bin64/perl/bin/perl.exe -I C:/intelfpga_lite/20.1/quartus/bin64/perl/lib -I C:/intelfpga_lite/20.1/quartus/sopc_builder/bin/europa -I C:/intelfpga_lite/20.1/quartus/sopc_builder/bin -I C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/common -I C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/altera_avalon_pio -- C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/altera_avalon_pio/generate_rtl.pl --name=jtag_io_out0 --dir=C:/Users/Pavlov/AppData/Local/Temp/alt9083_1757229078663084904.dir/0003_out0_gen/ --quartus_dir=C:/intelfpga_lite/20.1/quartus --verilog --config=C:/Users/Pavlov/AppData/Local/Temp/alt9083_1757229078663084904.dir/0003_out0_gen//jtag_io_out0_component_configuration.pl --do_build_sim=0 ] + Done RTL generation for module 'jtag_io_out0' + jtag_io" instantiated altera_avalon_pio "out0"]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + queue size: 10 starting:altera_mm_interconnect "submodules/jtag_io_mm_interconnect_0" + + + + Transform: CustomInstructionTransform + No custom instruction connections, skipping transform + 33 modules, 105 connections]]> + Transform: MMTransform + Transform: InitialInterconnectTransform + 0 modules, 0 connections]]> + Transform: TerminalIdAssignmentUpdateTransform + Transform: DefaultSlaveTransform + Transform: TranslatorTransform + No Avalon connections, skipping transform + Transform: IDPadTransform + Transform: DomainTransform + Transform: RouterTransform + Transform: TrafficLimiterTransform + Transform: BurstTransform + Transform: TreeTransform + Transform: NetworkToSwitchTransform + Transform: WidthTransform + Transform: RouterTableTransform + Transform: ThreadIDMappingTableTransform + Transform: ClockCrossingTransform + Transform: PipelineTransform + Transform: SpotPipelineTransform + Transform: PerformanceMonitorTransform + Transform: TrafficLimiterUpdateTransform + Transform: InsertClockAndResetBridgesTransform + Transform: InterconnectConnectionsTagger + Transform: HierarchyTransform + 33 modules, 105 connections]]> + Transform: InitialInterconnectTransform + 0 modules, 0 connections]]> + Transform: TerminalIdAssignmentUpdateTransform + Transform: DefaultSlaveTransform + Transform: TranslatorTransform + No Avalon connections, skipping transform + Transform: IDPadTransform + Transform: DomainTransform + Transform: RouterTransform + Transform: TrafficLimiterTransform + Transform: BurstTransform + Transform: TreeTransform + Transform: NetworkToSwitchTransform + Transform: WidthTransform + Transform: RouterTableTransform + Transform: ThreadIDMappingTableTransform + Transform: ClockCrossingTransform + Transform: PipelineTransform + Transform: SpotPipelineTransform + Transform: PerformanceMonitorTransform + Transform: TrafficLimiterUpdateTransform + Transform: InsertClockAndResetBridgesTransform + Transform: InterconnectConnectionsTagger + Transform: HierarchyTransform + 33 modules, 105 connections]]> + Transform: InitialInterconnectTransform + 0 modules, 0 connections]]> + Transform: TerminalIdAssignmentUpdateTransform + Transform: DefaultSlaveTransform + Transform: TranslatorTransform + No Avalon connections, skipping transform + Transform: IDPadTransform + Transform: DomainTransform + Transform: RouterTransform + Transform: TrafficLimiterTransform + Transform: BurstTransform + Transform: TreeTransform + Transform: NetworkToSwitchTransform + Transform: WidthTransform + Transform: RouterTableTransform + Transform: ThreadIDMappingTableTransform + Transform: ClockCrossingTransform + Transform: PipelineTransform + Transform: SpotPipelineTransform + Transform: PerformanceMonitorTransform + Transform: TrafficLimiterUpdateTransform + Transform: InsertClockAndResetBridgesTransform + Transform: InterconnectConnectionsTagger + Transform: HierarchyTransform + 33 modules, 105 connections]]> + Transform: InitialInterconnectTransform + 0 modules, 0 connections]]> + Transform: TerminalIdAssignmentUpdateTransform + Transform: DefaultSlaveTransform + Transform: TranslatorTransform + No Avalon connections, skipping transform + Transform: IDPadTransform + Transform: DomainTransform + Transform: RouterTransform + Transform: TrafficLimiterTransform + Transform: BurstTransform + Transform: TreeTransform + Transform: NetworkToSwitchTransform + Transform: WidthTransform + Transform: RouterTableTransform + Transform: ThreadIDMappingTableTransform + Transform: ClockCrossingTransform + Transform: PipelineTransform + Transform: SpotPipelineTransform + Transform: PerformanceMonitorTransform + Transform: TrafficLimiterUpdateTransform + Transform: InsertClockAndResetBridgesTransform + Transform: InterconnectConnectionsTagger + Transform: HierarchyTransform + 33 modules, 105 connections]]> + Transform: InitialInterconnectTransform + 0 modules, 0 connections]]> + Transform: TerminalIdAssignmentUpdateTransform + Transform: DefaultSlaveTransform + Transform: TranslatorTransform + No Avalon connections, skipping transform + Transform: IDPadTransform + Transform: DomainTransform + Transform: RouterTransform + Transform: TrafficLimiterTransform + Transform: BurstTransform + Transform: TreeTransform + Transform: NetworkToSwitchTransform + Transform: WidthTransform + Transform: RouterTableTransform + Transform: ThreadIDMappingTableTransform + Transform: ClockCrossingTransform + Transform: PipelineTransform + Transform: SpotPipelineTransform + Transform: PerformanceMonitorTransform + Transform: TrafficLimiterUpdateTransform + Transform: InsertClockAndResetBridgesTransform + Transform: InterconnectConnectionsTagger + Transform: HierarchyTransform + 33 modules, 105 connections]]> + Transform: InterruptMapperTransform + Transform: InterruptSyncTransform + Transform: InterruptFanoutTransform + Transform: AvalonStreamingTransform + + + + Inserting error_adapter: error_adapter_0 + Timing: ELA:1/0.000s + Timing: ELA:2/0.000s/0.000s + Timing: ELA:1/0.005s + Timing: COM:3/0.044s/0.083s + + + + Inserting error_adapter: error_adapter_0 + Timing: ELA:1/0.001s + Timing: ELA:2/0.000s/0.000s + Timing: ELA:1/0.005s + Timing: COM:3/0.014s/0.015s + + + + Inserting error_adapter: error_adapter_0 + Timing: ELA:1/0.001s + Timing: ELA:2/0.000s/0.000s + Timing: ELA:1/0.004s + Timing: COM:3/0.013s/0.014s + + + + Inserting error_adapter: error_adapter_0 + Timing: ELA:1/0.000s + Timing: ELA:2/0.000s/0.001s + Timing: ELA:1/0.005s + Timing: COM:3/0.013s/0.015s + 37 modules, 117 connections]]> + Transform: ResetAdaptation + mm_interconnect_0" reuses altera_merlin_master_translator "submodules/altera_merlin_master_translator"]]> + mm_interconnect_0" reuses altera_merlin_slave_translator "submodules/altera_merlin_slave_translator"]]> + mm_interconnect_0" reuses altera_merlin_slave_translator "submodules/altera_merlin_slave_translator"]]> + mm_interconnect_0" reuses altera_merlin_slave_translator "submodules/altera_merlin_slave_translator"]]> + mm_interconnect_0" reuses altera_merlin_slave_translator "submodules/altera_merlin_slave_translator"]]> + mm_interconnect_0" reuses altera_merlin_master_agent "submodules/altera_merlin_master_agent"]]> + mm_interconnect_0" reuses altera_merlin_slave_agent "submodules/altera_merlin_slave_agent"]]> + mm_interconnect_0" reuses altera_avalon_sc_fifo "submodules/altera_avalon_sc_fifo"]]> + mm_interconnect_0" reuses altera_merlin_slave_agent "submodules/altera_merlin_slave_agent"]]> + mm_interconnect_0" reuses altera_avalon_sc_fifo "submodules/altera_avalon_sc_fifo"]]> + mm_interconnect_0" reuses altera_merlin_slave_agent "submodules/altera_merlin_slave_agent"]]> + mm_interconnect_0" reuses altera_avalon_sc_fifo "submodules/altera_avalon_sc_fifo"]]> + mm_interconnect_0" reuses altera_merlin_slave_agent "submodules/altera_merlin_slave_agent"]]> + mm_interconnect_0" reuses altera_avalon_sc_fifo "submodules/altera_avalon_sc_fifo"]]> + mm_interconnect_0" reuses altera_merlin_router "submodules/jtag_io_mm_interconnect_0_router"]]> + mm_interconnect_0" reuses altera_merlin_router "submodules/jtag_io_mm_interconnect_0_router_001"]]> + mm_interconnect_0" reuses altera_merlin_router "submodules/jtag_io_mm_interconnect_0_router_001"]]> + mm_interconnect_0" reuses altera_merlin_router "submodules/jtag_io_mm_interconnect_0_router_001"]]> + mm_interconnect_0" reuses altera_merlin_router "submodules/jtag_io_mm_interconnect_0_router_001"]]> + mm_interconnect_0" reuses altera_merlin_traffic_limiter "submodules/altera_merlin_traffic_limiter"]]> + mm_interconnect_0" reuses altera_merlin_demultiplexer "submodules/jtag_io_mm_interconnect_0_cmd_demux"]]> + mm_interconnect_0" reuses altera_merlin_multiplexer "submodules/jtag_io_mm_interconnect_0_cmd_mux"]]> + mm_interconnect_0" reuses altera_merlin_multiplexer "submodules/jtag_io_mm_interconnect_0_cmd_mux"]]> + mm_interconnect_0" reuses altera_merlin_multiplexer "submodules/jtag_io_mm_interconnect_0_cmd_mux"]]> + mm_interconnect_0" reuses altera_merlin_multiplexer "submodules/jtag_io_mm_interconnect_0_cmd_mux"]]> + mm_interconnect_0" reuses altera_merlin_demultiplexer "submodules/jtag_io_mm_interconnect_0_rsp_demux"]]> + mm_interconnect_0" reuses altera_merlin_demultiplexer "submodules/jtag_io_mm_interconnect_0_rsp_demux"]]> + mm_interconnect_0" reuses altera_merlin_demultiplexer "submodules/jtag_io_mm_interconnect_0_rsp_demux"]]> + mm_interconnect_0" reuses altera_merlin_demultiplexer "submodules/jtag_io_mm_interconnect_0_rsp_demux"]]> + mm_interconnect_0" reuses altera_merlin_multiplexer "submodules/jtag_io_mm_interconnect_0_rsp_mux"]]> + mm_interconnect_0" reuses altera_avalon_st_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter"]]> + mm_interconnect_0" reuses altera_avalon_st_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter"]]> + mm_interconnect_0" reuses altera_avalon_st_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter"]]> + mm_interconnect_0" reuses altera_avalon_st_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter"]]> + jtag_io" instantiated altera_mm_interconnect "mm_interconnect_0"]]> + queue size: 33 starting:altera_merlin_master_translator "submodules/altera_merlin_master_translator" + mm_interconnect_0" instantiated altera_merlin_master_translator "master_0_master_translator"]]> + queue size: 32 starting:altera_merlin_slave_translator "submodules/altera_merlin_slave_translator" + mm_interconnect_0" instantiated altera_merlin_slave_translator "out0_s1_translator"]]> + queue size: 28 starting:altera_merlin_master_agent "submodules/altera_merlin_master_agent" + mm_interconnect_0" instantiated altera_merlin_master_agent "master_0_master_agent"]]> + queue size: 27 starting:altera_merlin_slave_agent "submodules/altera_merlin_slave_agent" + mm_interconnect_0" instantiated altera_merlin_slave_agent "out0_s1_agent"]]> + queue size: 40 starting:altera_avalon_sc_fifo "submodules/altera_avalon_sc_fifo" + master_0" instantiated altera_avalon_sc_fifo "fifo"]]> + queue size: 19 starting:altera_merlin_router "submodules/jtag_io_mm_interconnect_0_router" + mm_interconnect_0" instantiated altera_merlin_router "router"]]> + queue size: 18 starting:altera_merlin_router "submodules/jtag_io_mm_interconnect_0_router_001" + mm_interconnect_0" instantiated altera_merlin_router "router_001"]]> + queue size: 14 starting:altera_merlin_traffic_limiter "submodules/altera_merlin_traffic_limiter" + mm_interconnect_0" instantiated altera_merlin_traffic_limiter "master_0_master_limiter"]]> + J:/basic_verilog/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_sc_fifo.v]]> + J:/basic_verilog/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_pipeline_base.v]]> + queue size: 13 starting:altera_merlin_demultiplexer "submodules/jtag_io_mm_interconnect_0_cmd_demux" + mm_interconnect_0" instantiated altera_merlin_demultiplexer "cmd_demux"]]> + queue size: 12 starting:altera_merlin_multiplexer "submodules/jtag_io_mm_interconnect_0_cmd_mux" + mm_interconnect_0" instantiated altera_merlin_multiplexer "cmd_mux"]]> + queue size: 8 starting:altera_merlin_demultiplexer "submodules/jtag_io_mm_interconnect_0_rsp_demux" + mm_interconnect_0" instantiated altera_merlin_demultiplexer "rsp_demux"]]> + queue size: 4 starting:altera_merlin_multiplexer "submodules/jtag_io_mm_interconnect_0_rsp_mux" + mm_interconnect_0" instantiated altera_merlin_multiplexer "rsp_mux"]]> + J:/basic_verilog/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_arbitrator.sv]]> + queue size: 3 starting:altera_avalon_st_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter" + + + + Transform: CustomInstructionTransform + No custom instruction connections, skipping transform + 3 modules, 3 connections]]> + Transform: MMTransform + Transform: InterruptMapperTransform + Transform: InterruptSyncTransform + Transform: InterruptFanoutTransform + Transform: AvalonStreamingTransform + Transform: ResetAdaptation + avalon_st_adapter" reuses error_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0"]]> + mm_interconnect_0" instantiated altera_avalon_st_adapter "avalon_st_adapter"]]> + queue size: 0 starting:error_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" + avalon_st_adapter" instantiated error_adapter "error_adapter_0"]]> + + + + + + + + + + + + + + + + + queue size: 43 starting:altera_reset_controller "submodules/altera_reset_controller" + jtag_io" instantiated altera_reset_controller "rst_controller"]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + queue size: 42 starting:altera_jtag_dc_streaming "submodules/altera_avalon_st_jtag_interface" + master_0" instantiated altera_jtag_dc_streaming "jtag_phy_embedded_in_jtag_master"]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + queue size: 41 starting:timing_adapter "submodules/jtag_io_master_0_timing_adt" + master_0" instantiated timing_adapter "timing_adt"]]> + + + + + + + + + + + + + + + + + + queue size: 40 starting:altera_avalon_sc_fifo "submodules/altera_avalon_sc_fifo" + master_0" instantiated altera_avalon_sc_fifo "fifo"]]> + + + + + + + + + + + + + + + + + queue size: 39 starting:altera_avalon_st_bytes_to_packets "submodules/altera_avalon_st_bytes_to_packets" + master_0" instantiated altera_avalon_st_bytes_to_packets "b2p"]]> + + + + + + + + + + + + + + + + + queue size: 38 starting:altera_avalon_st_packets_to_bytes "submodules/altera_avalon_st_packets_to_bytes" + master_0" instantiated altera_avalon_st_packets_to_bytes "p2b"]]> + + + + + + + + + + + + + + + + + + queue size: 37 starting:altera_avalon_packets_to_master "submodules/altera_avalon_packets_to_master" + master_0" instantiated altera_avalon_packets_to_master "transacto"]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + queue size: 36 starting:channel_adapter "submodules/jtag_io_master_0_b2p_adapter" + master_0" instantiated channel_adapter "b2p_adapter"]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + queue size: 35 starting:channel_adapter "submodules/jtag_io_master_0_p2b_adapter" + master_0" instantiated channel_adapter "p2b_adapter"]]> + + + + + + + + + + + + + + + queue size: 33 starting:altera_merlin_master_translator "submodules/altera_merlin_master_translator" + mm_interconnect_0" instantiated altera_merlin_master_translator "master_0_master_translator"]]> + + + + + + + + + + + + + + queue size: 32 starting:altera_merlin_slave_translator "submodules/altera_merlin_slave_translator" + mm_interconnect_0" instantiated altera_merlin_slave_translator "out0_s1_translator"]]> + + + + + + + + + + + + + + queue size: 28 starting:altera_merlin_master_agent "submodules/altera_merlin_master_agent" + mm_interconnect_0" instantiated altera_merlin_master_agent "master_0_master_agent"]]> + + + + + + + + + + + + + + + queue size: 27 starting:altera_merlin_slave_agent "submodules/altera_merlin_slave_agent" + mm_interconnect_0" instantiated altera_merlin_slave_agent "out0_s1_agent"]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + queue size: 19 starting:altera_merlin_router "submodules/jtag_io_mm_interconnect_0_router" + mm_interconnect_0" instantiated altera_merlin_router "router"]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + queue size: 18 starting:altera_merlin_router "submodules/jtag_io_mm_interconnect_0_router_001" + mm_interconnect_0" instantiated altera_merlin_router "router_001"]]> + + + + + + + + + + + + + + + + + queue size: 14 starting:altera_merlin_traffic_limiter "submodules/altera_merlin_traffic_limiter" + mm_interconnect_0" instantiated altera_merlin_traffic_limiter "master_0_master_limiter"]]> + J:/basic_verilog/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_sc_fifo.v]]> + J:/basic_verilog/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_pipeline_base.v]]> + + + + + + + + + + + + + + + + + + + + + queue size: 13 starting:altera_merlin_demultiplexer "submodules/jtag_io_mm_interconnect_0_cmd_demux" + mm_interconnect_0" instantiated altera_merlin_demultiplexer "cmd_demux"]]> + + + + + + + + + + + + + + + + + + + + + + + + queue size: 12 starting:altera_merlin_multiplexer "submodules/jtag_io_mm_interconnect_0_cmd_mux" + mm_interconnect_0" instantiated altera_merlin_multiplexer "cmd_mux"]]> + + + + + + + + + + + + + + + + + + + + + queue size: 8 starting:altera_merlin_demultiplexer "submodules/jtag_io_mm_interconnect_0_rsp_demux" + mm_interconnect_0" instantiated altera_merlin_demultiplexer "rsp_demux"]]> + + + + + + + + + + + + + + + + + + + + + + + + queue size: 4 starting:altera_merlin_multiplexer "submodules/jtag_io_mm_interconnect_0_rsp_mux" + mm_interconnect_0" instantiated altera_merlin_multiplexer "rsp_mux"]]> + J:/basic_verilog/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_arbitrator.sv]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + queue size: 3 starting:altera_avalon_st_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter" + + + + Transform: CustomInstructionTransform + No custom instruction connections, skipping transform + 3 modules, 3 connections]]> + Transform: MMTransform + Transform: InterruptMapperTransform + Transform: InterruptSyncTransform + Transform: InterruptFanoutTransform + Transform: AvalonStreamingTransform + Transform: ResetAdaptation + avalon_st_adapter" reuses error_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0"]]> + mm_interconnect_0" instantiated altera_avalon_st_adapter "avalon_st_adapter"]]> + queue size: 0 starting:error_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" + avalon_st_adapter" instantiated error_adapter "error_adapter_0"]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + queue size: 0 starting:error_adapter "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" + avalon_st_adapter" instantiated error_adapter "error_adapter_0"]]> + + + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io_bb.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io_bb.v new file mode 100755 index 0000000..97ad106 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io_bb.v @@ -0,0 +1,16 @@ + +module jtag_io ( + reset_reset_n, + clk_clk, + out0_export, + out1_export, + in0_export, + in1_export); + + input reset_reset_n; + input clk_clk; + output [31:0] out0_export; + output [31:0] out1_export; + input [31:0] in0_export; + input [31:0] in1_export; +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io_generation.rpt b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io_generation.rpt new file mode 100755 index 0000000..689fc66 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io_generation.rpt @@ -0,0 +1,65 @@ +Info: Starting: Create HDL design files for synthesis +Info: qsys-generate J:\basic_verilog\example_projects\quartus_test_prj_template_v4\ip\jtag_io.qsys --synthesis=VERILOG --output-directory=J:\basic_verilog\example_projects\quartus_test_prj_template_v4\ip\jtag_io\synthesis --family="Cyclone V" --part=5CSEBA6U23I7 +Progress: Loading ip/jtag_io.qsys +Progress: Reading input file +Progress: Adding clk_0 [clock_source 20.1] +Progress: Parameterizing module clk_0 +Progress: Adding in0 [altera_avalon_pio 20.1] +Progress: Parameterizing module in0 +Progress: Adding in1 [altera_avalon_pio 20.1] +Progress: Parameterizing module in1 +Progress: Adding master_0 [altera_jtag_avalon_master 20.1] +Progress: Parameterizing module master_0 +Progress: Adding out0 [altera_avalon_pio 20.1] +Progress: Parameterizing module out0 +Progress: Adding out1 [altera_avalon_pio 20.1] +Progress: Parameterizing module out1 +Progress: Building connections +Progress: Parameterizing connections +Progress: Validating +Progress: Done reading input file +Info: jtag_io.in0: PIO inputs are not hardwired in test bench. Undefined values will be read from PIO inputs during simulation. +Info: jtag_io.in1: PIO inputs are not hardwired in test bench. Undefined values will be read from PIO inputs during simulation. +Info: jtag_io: Generating jtag_io "jtag_io" for QUARTUS_SYNTH +Info: in0: Starting RTL generation for module 'jtag_io_in0' +Info: in0: Generation command is [exec C:/intelfpga_lite/20.1/quartus/bin64/perl/bin/perl.exe -I C:/intelfpga_lite/20.1/quartus/bin64/perl/lib -I C:/intelfpga_lite/20.1/quartus/sopc_builder/bin/europa -I C:/intelfpga_lite/20.1/quartus/sopc_builder/bin -I C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/common -I C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/altera_avalon_pio -- C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/altera_avalon_pio/generate_rtl.pl --name=jtag_io_in0 --dir=C:/Users/Pavlov/AppData/Local/Temp/alt9083_1757229078663084904.dir/0002_in0_gen/ --quartus_dir=C:/intelfpga_lite/20.1/quartus --verilog --config=C:/Users/Pavlov/AppData/Local/Temp/alt9083_1757229078663084904.dir/0002_in0_gen//jtag_io_in0_component_configuration.pl --do_build_sim=0 ] +Info: in0: Done RTL generation for module 'jtag_io_in0' +Info: in0: "jtag_io" instantiated altera_avalon_pio "in0" +Info: master_0: "jtag_io" instantiated altera_jtag_avalon_master "master_0" +Info: out0: Starting RTL generation for module 'jtag_io_out0' +Info: out0: Generation command is [exec C:/intelfpga_lite/20.1/quartus/bin64/perl/bin/perl.exe -I C:/intelfpga_lite/20.1/quartus/bin64/perl/lib -I C:/intelfpga_lite/20.1/quartus/sopc_builder/bin/europa -I C:/intelfpga_lite/20.1/quartus/sopc_builder/bin -I C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/common -I C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/altera_avalon_pio -- C:/intelfpga_lite/20.1/quartus/../ip/altera/sopc_builder_ip/altera_avalon_pio/generate_rtl.pl --name=jtag_io_out0 --dir=C:/Users/Pavlov/AppData/Local/Temp/alt9083_1757229078663084904.dir/0003_out0_gen/ --quartus_dir=C:/intelfpga_lite/20.1/quartus --verilog --config=C:/Users/Pavlov/AppData/Local/Temp/alt9083_1757229078663084904.dir/0003_out0_gen//jtag_io_out0_component_configuration.pl --do_build_sim=0 ] +Info: out0: Done RTL generation for module 'jtag_io_out0' +Info: out0: "jtag_io" instantiated altera_avalon_pio "out0" +Info: avalon_st_adapter: Inserting error_adapter: error_adapter_0 +Info: avalon_st_adapter_001: Inserting error_adapter: error_adapter_0 +Info: avalon_st_adapter_002: Inserting error_adapter: error_adapter_0 +Info: avalon_st_adapter_003: Inserting error_adapter: error_adapter_0 +Info: mm_interconnect_0: "jtag_io" instantiated altera_mm_interconnect "mm_interconnect_0" +Info: rst_controller: "jtag_io" instantiated altera_reset_controller "rst_controller" +Info: jtag_phy_embedded_in_jtag_master: "master_0" instantiated altera_jtag_dc_streaming "jtag_phy_embedded_in_jtag_master" +Info: timing_adt: "master_0" instantiated timing_adapter "timing_adt" +Info: fifo: "master_0" instantiated altera_avalon_sc_fifo "fifo" +Info: b2p: "master_0" instantiated altera_avalon_st_bytes_to_packets "b2p" +Info: p2b: "master_0" instantiated altera_avalon_st_packets_to_bytes "p2b" +Info: transacto: "master_0" instantiated altera_avalon_packets_to_master "transacto" +Info: b2p_adapter: "master_0" instantiated channel_adapter "b2p_adapter" +Info: p2b_adapter: "master_0" instantiated channel_adapter "p2b_adapter" +Info: master_0_master_translator: "mm_interconnect_0" instantiated altera_merlin_master_translator "master_0_master_translator" +Info: out0_s1_translator: "mm_interconnect_0" instantiated altera_merlin_slave_translator "out0_s1_translator" +Info: master_0_master_agent: "mm_interconnect_0" instantiated altera_merlin_master_agent "master_0_master_agent" +Info: out0_s1_agent: "mm_interconnect_0" instantiated altera_merlin_slave_agent "out0_s1_agent" +Info: router: "mm_interconnect_0" instantiated altera_merlin_router "router" +Info: router_001: "mm_interconnect_0" instantiated altera_merlin_router "router_001" +Info: master_0_master_limiter: "mm_interconnect_0" instantiated altera_merlin_traffic_limiter "master_0_master_limiter" +Info: Reusing file J:/basic_verilog/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_sc_fifo.v +Info: Reusing file J:/basic_verilog/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_pipeline_base.v +Info: cmd_demux: "mm_interconnect_0" instantiated altera_merlin_demultiplexer "cmd_demux" +Info: cmd_mux: "mm_interconnect_0" instantiated altera_merlin_multiplexer "cmd_mux" +Info: rsp_demux: "mm_interconnect_0" instantiated altera_merlin_demultiplexer "rsp_demux" +Info: rsp_mux: "mm_interconnect_0" instantiated altera_merlin_multiplexer "rsp_mux" +Info: Reusing file J:/basic_verilog/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_arbitrator.sv +Info: avalon_st_adapter: "mm_interconnect_0" instantiated altera_avalon_st_adapter "avalon_st_adapter" +Info: error_adapter_0: "avalon_st_adapter" instantiated error_adapter "error_adapter_0" +Info: jtag_io: Done "jtag_io" with 27 modules, 42 files +Info: qsys-generate succeeded. +Info: Finished: Create HDL design files for synthesis diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io_inst.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io_inst.v new file mode 100755 index 0000000..5cab2ad --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io_inst.v @@ -0,0 +1,9 @@ + jtag_io u0 ( + .reset_reset_n (), // reset.reset_n + .clk_clk (), // clk.clk + .out0_export (), // out0.export + .out1_export (), // out1.export + .in0_export (), // in0.export + .in1_export () // in1.export + ); + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io_inst.vhd b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io_inst.vhd new file mode 100755 index 0000000..381ee18 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io_inst.vhd @@ -0,0 +1,21 @@ + component jtag_io is + port ( + reset_reset_n : in std_logic := 'X'; -- reset_n + clk_clk : in std_logic := 'X'; -- clk + out0_export : out std_logic_vector(31 downto 0); -- export + out1_export : out std_logic_vector(31 downto 0); -- export + in0_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export + in1_export : in std_logic_vector(31 downto 0) := (others => 'X') -- export + ); + end component jtag_io; + + u0 : component jtag_io + port map ( + reset_reset_n => CONNECTED_TO_reset_reset_n, -- reset.reset_n + clk_clk => CONNECTED_TO_clk_clk, -- clk.clk + out0_export => CONNECTED_TO_out0_export, -- out0.export + out1_export => CONNECTED_TO_out1_export, -- out1.export + in0_export => CONNECTED_TO_in0_export, -- in0.export + in1_export => CONNECTED_TO_in1_export -- in1.export + ); + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/jtag_io.debuginfo b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/jtag_io.debuginfo new file mode 100755 index 0000000..4945a8a --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/jtag_io.debuginfo @@ -0,0 +1,7130 @@ + + + + + + + com.altera.sopcmodel.ensemble.EClockAdapter + HANDSHAKE + false + true + true + true + + + java.lang.String + 5CSEBA6U23I7 + false + true + true + true + + + java.lang.String + CYCLONEV + false + true + true + true + + + java.lang.String + 7 + false + true + false + true + + + com.altera.sopcmodel.ensemble.Ensemble$EFabricMode + QSYS + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 1648805399 + false + true + true + true + + + boolean + false + false + true + false + true + + + com.altera.entityinterfaces.moduleext.IModuleGenerateHDL$HDLLanguage + VERILOG + false + false + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.definition.BoundaryDefinition + + false + true + false + true + + + int + 1 + false + true + true + true + + + java.lang.String + + false + true + false + true + + + boolean + false + false + true + false + true + + + long + 0 + false + true + false + true + + + java.lang.String + + false + true + false + true + + + long + 0 + false + true + false + true + + + boolean + false + false + true + false + true + + + + + long + 50000000 + false + true + true + true + + + boolean + true + false + true + true + true + + + long + 0 + false + true + false + true + CLOCK_RATE + clk_in + + + com.altera.sopcmodel.reset.Reset$Edges + NONE + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + + + qsys.ui.export_name + clk + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.Boolean + true + true + true + false + true + + + java.lang.Long + 50000000 + true + true + false + true + + clock + false + + in_clk + Input + 1 + clk + + + + + + qsys.ui.export_name + reset + + + java.lang.String + + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + NONE + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + reset_n + Input + 1 + reset_n + + + + + + java.lang.String + clk_in + false + true + true + true + + + long + 50000000 + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + true + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clock + true + + clk_out + Output + 1 + clk + + + false + out0 + clk + out0.clk + + + false + master_0 + clk + master_0.clk + + + false + out1 + clk + out1.clk + + + false + in0 + clk + in0.clk + + + false + in1 + clk + in1.clk + + + false + mm_interconnect_0 + clk_0_clk + mm_interconnect_0.clk_0_clk + + + false + rst_controller + clk + rst_controller.clk + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + clk_in_reset + false + true + true + true + + + [Ljava.lang.String; + clk_in_reset + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + NONE + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + true + + reset_n_out + Output + 1 + reset_n + + + + + + + embeddedsw.CMacro.BIT_CLEARING_EDGE_REGISTER + 0 + + + embeddedsw.CMacro.BIT_MODIFYING_OUTPUT_REGISTER + 0 + + + embeddedsw.CMacro.CAPTURE + 0 + + + embeddedsw.CMacro.DATA_WIDTH + 32 + + + embeddedsw.CMacro.DO_TEST_BENCH_WIRING + 0 + + + embeddedsw.CMacro.DRIVEN_SIM_VALUE + 0 + + + embeddedsw.CMacro.EDGE_TYPE + NONE + + + embeddedsw.CMacro.FREQ + 50000000 + + + embeddedsw.CMacro.HAS_IN + 1 + + + embeddedsw.CMacro.HAS_OUT + 0 + + + embeddedsw.CMacro.HAS_TRI + 0 + + + embeddedsw.CMacro.IRQ_TYPE + NONE + + + embeddedsw.CMacro.RESET_VALUE + 0 + + + embeddedsw.dts.compatible + altr,pio-1.0 + + + embeddedsw.dts.group + gpio + + + embeddedsw.dts.name + pio + + + embeddedsw.dts.params.altr,gpio-bank-width + 32 + + + embeddedsw.dts.params.resetvalue + 0 + + + embeddedsw.dts.vendor + altr + + + boolean + false + false + false + true + true + + + boolean + false + false + false + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + Input + false + true + true + true + + + java.lang.String + RISING + false + false + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + LEVEL + false + false + true + true + + + long + 0 + false + false + true + true + + + boolean + false + false + true + true + true + + + long + 0 + false + false + true + true + + + int + 32 + false + true + true + true + + + long + 50000000 + false + true + false + true + CLOCK_RATE + clk + + + boolean + false + true + true + false + true + + + boolean + false + true + true + false + true + + + boolean + true + true + true + false + true + + + boolean + false + true + true + false + true + + + boolean + false + true + true + false + true + + + java.lang.String + NONE + true + true + false + true + + + java.lang.String + NONE + true + true + false + true + + + boolean + false + true + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.Boolean + true + true + true + false + true + + + java.lang.Long + 50000000 + true + true + false + true + + clock + false + + clk + Input + 1 + clk + + + + + + java.lang.String + clk + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + DEASSERT + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + reset_n + Input + 1 + reset_n + + + + + + embeddedsw.configuration.isFlash + 0 + + + embeddedsw.configuration.isMemoryDevice + 0 + + + embeddedsw.configuration.isNonVolatileStorage + 0 + + + embeddedsw.configuration.isPrintableDevice + 0 + + + com.altera.sopcmodel.avalon.AvalonConnectionPoint$AddressAlignment + NATIVE + false + true + true + true + + + int + 0 + false + true + false + true + + + java.math.BigInteger + 4 + true + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk + false + true + true + true + + + java.lang.String + reset + false + true + false + true + + + int + 8 + false + true + false + true + + + java.math.BigInteger + + false + true + false + true + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + false + true + + + boolean + false + false + true + false + true + + + java.math.BigInteger + 0 + false + true + true + true + + + int + 0 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + int + 0 + false + false + true + true + + + int + 0 + false + false + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + int + 1 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + false + + address + Input + 2 + address + + + readdata + Output + 32 + readdata + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + conduit + false + + in_port + Input + 32 + export + + + + + + + embeddedsw.CMacro.BIT_CLEARING_EDGE_REGISTER + 0 + + + embeddedsw.CMacro.BIT_MODIFYING_OUTPUT_REGISTER + 0 + + + embeddedsw.CMacro.CAPTURE + 0 + + + embeddedsw.CMacro.DATA_WIDTH + 32 + + + embeddedsw.CMacro.DO_TEST_BENCH_WIRING + 0 + + + embeddedsw.CMacro.DRIVEN_SIM_VALUE + 0 + + + embeddedsw.CMacro.EDGE_TYPE + NONE + + + embeddedsw.CMacro.FREQ + 50000000 + + + embeddedsw.CMacro.HAS_IN + 1 + + + embeddedsw.CMacro.HAS_OUT + 0 + + + embeddedsw.CMacro.HAS_TRI + 0 + + + embeddedsw.CMacro.IRQ_TYPE + NONE + + + embeddedsw.CMacro.RESET_VALUE + 0 + + + embeddedsw.dts.compatible + altr,pio-1.0 + + + embeddedsw.dts.group + gpio + + + embeddedsw.dts.name + pio + + + embeddedsw.dts.params.altr,gpio-bank-width + 32 + + + embeddedsw.dts.params.resetvalue + 0 + + + embeddedsw.dts.vendor + altr + + + boolean + false + false + false + true + true + + + boolean + false + false + false + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + Input + false + true + true + true + + + java.lang.String + RISING + false + false + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + LEVEL + false + false + true + true + + + long + 0 + false + false + true + true + + + boolean + false + false + true + true + true + + + long + 0 + false + false + true + true + + + int + 32 + false + true + true + true + + + long + 50000000 + false + true + false + true + CLOCK_RATE + clk + + + boolean + false + true + true + false + true + + + boolean + false + true + true + false + true + + + boolean + true + true + true + false + true + + + boolean + false + true + true + false + true + + + boolean + false + true + true + false + true + + + java.lang.String + NONE + true + true + false + true + + + java.lang.String + NONE + true + true + false + true + + + boolean + false + true + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.Boolean + true + true + true + false + true + + + java.lang.Long + 50000000 + true + true + false + true + + clock + false + + clk + Input + 1 + clk + + + + + + java.lang.String + clk + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + DEASSERT + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + reset_n + Input + 1 + reset_n + + + + + + embeddedsw.configuration.isFlash + 0 + + + embeddedsw.configuration.isMemoryDevice + 0 + + + embeddedsw.configuration.isNonVolatileStorage + 0 + + + embeddedsw.configuration.isPrintableDevice + 0 + + + com.altera.sopcmodel.avalon.AvalonConnectionPoint$AddressAlignment + NATIVE + false + true + true + true + + + int + 0 + false + true + false + true + + + java.math.BigInteger + 4 + true + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk + false + true + true + true + + + java.lang.String + reset + false + true + false + true + + + int + 8 + false + true + false + true + + + java.math.BigInteger + + false + true + false + true + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + false + true + + + boolean + false + false + true + false + true + + + java.math.BigInteger + 0 + false + true + true + true + + + int + 0 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + int + 0 + false + false + true + true + + + int + 0 + false + false + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + int + 1 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + false + + address + Input + 2 + address + + + readdata + Output + 32 + readdata + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + conduit + false + + in_port + Input + 32 + export + + + + + + + debug.hostConnection + type jtag id 110:132 + + + int + 0 + false + true + true + true + + + int + 50000 + false + false + true + true + + + int + 0 + false + true + false + true + CLOCK_RATE + clock + + + int + 0 + false + true + true + true + + + int + 2 + false + false + true + true + + + java.lang.String + CYCLONEV + false + true + false + true + DEVICE_FAMILY + + + java.lang.String + 5CSEBA6U23I7 + false + true + false + true + DEVICE + + + java.lang.String + 7 + false + true + false + true + DEVICE_SPEEDGRADE + + + java.lang.String + Cyclone V + false + true + false + true + DEVICE_FAMILY + + + boolean + false + false + true + true + true + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clock + false + + clk_clk + Input + 1 + clk + + + + + + java.lang.String + + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + NONE + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + clk_reset_reset + Input + 1 + reset + + + + + + debug.providesServices + master + + + debug.visible + true + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + int + 0 + false + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + SYMBOLS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk + false + true + true + true + + + java.lang.String + clk_reset + false + true + true + true + + + int + 8 + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + int + 0 + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 32 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + false + true + + + int + 0 + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + true + + master_address + Output + 32 + address + + + master_readdata + Input + 32 + readdata + + + master_read + Output + 1 + read + + + master_write + Output + 1 + write + + + master_writedata + Output + 32 + writedata + + + master_waitrequest + Input + 1 + waitrequest + + + master_readdatavalid + Input + 1 + readdatavalid + + + master_byteenable + Output + 4 + byteenable + + + false + mm_interconnect_0 + master_0_master + mm_interconnect_0.master_0_master + 0 + 4294967296 + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + [Ljava.lang.String; + none + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + NONE + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + true + + master_reset_reset + Output + 1 + reset + + + + + + + embeddedsw.CMacro.BIT_CLEARING_EDGE_REGISTER + 0 + + + embeddedsw.CMacro.BIT_MODIFYING_OUTPUT_REGISTER + 0 + + + embeddedsw.CMacro.CAPTURE + 0 + + + embeddedsw.CMacro.DATA_WIDTH + 32 + + + embeddedsw.CMacro.DO_TEST_BENCH_WIRING + 0 + + + embeddedsw.CMacro.DRIVEN_SIM_VALUE + 0 + + + embeddedsw.CMacro.EDGE_TYPE + NONE + + + embeddedsw.CMacro.FREQ + 50000000 + + + embeddedsw.CMacro.HAS_IN + 0 + + + embeddedsw.CMacro.HAS_OUT + 1 + + + embeddedsw.CMacro.HAS_TRI + 0 + + + embeddedsw.CMacro.IRQ_TYPE + NONE + + + embeddedsw.CMacro.RESET_VALUE + 0 + + + embeddedsw.dts.compatible + altr,pio-1.0 + + + embeddedsw.dts.group + gpio + + + embeddedsw.dts.name + pio + + + embeddedsw.dts.params.altr,gpio-bank-width + 32 + + + embeddedsw.dts.params.resetvalue + 0 + + + embeddedsw.dts.vendor + altr + + + boolean + false + false + false + true + true + + + boolean + false + false + true + true + true + + + boolean + false + false + false + true + true + + + java.lang.String + Output + false + true + true + true + + + java.lang.String + RISING + false + false + true + true + + + boolean + false + false + false + true + true + + + java.lang.String + LEVEL + false + false + true + true + + + long + 0 + false + true + true + true + + + boolean + false + false + false + true + true + + + long + 0 + false + false + true + true + + + int + 32 + false + true + true + true + + + long + 50000000 + false + true + false + true + CLOCK_RATE + clk + + + boolean + false + true + true + false + true + + + boolean + true + true + true + false + true + + + boolean + false + true + true + false + true + + + boolean + false + true + true + false + true + + + boolean + false + true + true + false + true + + + java.lang.String + NONE + true + true + false + true + + + java.lang.String + NONE + true + true + false + true + + + boolean + false + true + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.Boolean + true + true + true + false + true + + + java.lang.Long + 50000000 + true + true + false + true + + clock + false + + clk + Input + 1 + clk + + + + + + java.lang.String + clk + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + DEASSERT + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + reset_n + Input + 1 + reset_n + + + + + + embeddedsw.configuration.isFlash + 0 + + + embeddedsw.configuration.isMemoryDevice + 0 + + + embeddedsw.configuration.isNonVolatileStorage + 0 + + + embeddedsw.configuration.isPrintableDevice + 0 + + + com.altera.sopcmodel.avalon.AvalonConnectionPoint$AddressAlignment + NATIVE + false + true + true + true + + + int + 0 + false + true + false + true + + + java.math.BigInteger + 4 + true + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk + false + true + true + true + + + java.lang.String + reset + false + true + false + true + + + int + 8 + false + true + false + true + + + java.math.BigInteger + + false + true + false + true + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + false + true + + + boolean + false + false + true + false + true + + + java.math.BigInteger + 0 + false + true + true + true + + + int + 0 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + int + 0 + false + false + true + true + + + int + 0 + false + false + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + int + 1 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + false + + address + Input + 2 + address + + + write_n + Input + 1 + write_n + + + writedata + Input + 32 + writedata + + + chipselect + Input + 1 + chipselect + + + readdata + Output + 32 + readdata + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + conduit + false + + out_port + Output + 32 + export + + + + + + + embeddedsw.CMacro.BIT_CLEARING_EDGE_REGISTER + 0 + + + embeddedsw.CMacro.BIT_MODIFYING_OUTPUT_REGISTER + 0 + + + embeddedsw.CMacro.CAPTURE + 0 + + + embeddedsw.CMacro.DATA_WIDTH + 32 + + + embeddedsw.CMacro.DO_TEST_BENCH_WIRING + 0 + + + embeddedsw.CMacro.DRIVEN_SIM_VALUE + 0 + + + embeddedsw.CMacro.EDGE_TYPE + NONE + + + embeddedsw.CMacro.FREQ + 50000000 + + + embeddedsw.CMacro.HAS_IN + 0 + + + embeddedsw.CMacro.HAS_OUT + 1 + + + embeddedsw.CMacro.HAS_TRI + 0 + + + embeddedsw.CMacro.IRQ_TYPE + NONE + + + embeddedsw.CMacro.RESET_VALUE + 0 + + + embeddedsw.dts.compatible + altr,pio-1.0 + + + embeddedsw.dts.group + gpio + + + embeddedsw.dts.name + pio + + + embeddedsw.dts.params.altr,gpio-bank-width + 32 + + + embeddedsw.dts.params.resetvalue + 0 + + + embeddedsw.dts.vendor + altr + + + boolean + false + false + false + true + true + + + boolean + false + false + true + true + true + + + boolean + false + false + false + true + true + + + java.lang.String + Output + false + true + true + true + + + java.lang.String + RISING + false + false + true + true + + + boolean + false + false + false + true + true + + + java.lang.String + LEVEL + false + false + true + true + + + long + 0 + false + true + true + true + + + boolean + false + false + false + true + true + + + long + 0 + false + false + true + true + + + int + 32 + false + true + true + true + + + long + 50000000 + false + true + false + true + CLOCK_RATE + clk + + + boolean + false + true + true + false + true + + + boolean + true + true + true + false + true + + + boolean + false + true + true + false + true + + + boolean + false + true + true + false + true + + + boolean + false + true + true + false + true + + + java.lang.String + NONE + true + true + false + true + + + java.lang.String + NONE + true + true + false + true + + + boolean + false + true + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.Boolean + true + true + true + false + true + + + java.lang.Long + 50000000 + true + true + false + true + + clock + false + + clk + Input + 1 + clk + + + + + + java.lang.String + clk + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + DEASSERT + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + reset_n + Input + 1 + reset_n + + + + + + embeddedsw.configuration.isFlash + 0 + + + embeddedsw.configuration.isMemoryDevice + 0 + + + embeddedsw.configuration.isNonVolatileStorage + 0 + + + embeddedsw.configuration.isPrintableDevice + 0 + + + com.altera.sopcmodel.avalon.AvalonConnectionPoint$AddressAlignment + NATIVE + false + true + true + true + + + int + 0 + false + true + false + true + + + java.math.BigInteger + 4 + true + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk + false + true + true + true + + + java.lang.String + reset + false + true + false + true + + + int + 8 + false + true + false + true + + + java.math.BigInteger + + false + true + false + true + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + false + true + + + boolean + false + false + true + false + true + + + java.math.BigInteger + 0 + false + true + true + true + + + int + 0 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + int + 0 + false + false + true + true + + + int + 0 + false + false + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + int + 1 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + false + + address + Input + 2 + address + + + write_n + Input + 1 + write_n + + + writedata + Input + 32 + writedata + + + chipselect + Input + 1 + chipselect + + + readdata + Output + 32 + readdata + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + conduit + false + + out_port + Output + 32 + export + + + + + + + interconnect_id.in0.s1 + 0 + + + interconnect_id.in1.s1 + 1 + + + interconnect_id.master_0.master + 0 + + + interconnect_id.out0.s1 + 2 + + + interconnect_id.out1.s1 + 3 + + + java.lang.String + + + + + + + +};set_instance_parameter_value {master_0_master_agent} {SUPPRESS_0_BYTEEN_RSP} {0};set_instance_parameter_value {master_0_master_agent} {ID} {0};set_instance_parameter_value {master_0_master_agent} {BURSTWRAP_VALUE} {1};set_instance_parameter_value {master_0_master_agent} {CACHE_VALUE} {0};set_instance_parameter_value {master_0_master_agent} {SECURE_ACCESS_BIT} {1};set_instance_parameter_value {master_0_master_agent} {USE_READRESPONSE} {0};set_instance_parameter_value {master_0_master_agent} {USE_WRITERESPONSE} {0};add_instance {out0_s1_agent} {altera_merlin_slave_agent};set_instance_parameter_value {out0_s1_agent} {PKT_ORI_BURST_SIZE_H} {103};set_instance_parameter_value {out0_s1_agent} {PKT_ORI_BURST_SIZE_L} {101};set_instance_parameter_value {out0_s1_agent} {PKT_RESPONSE_STATUS_H} {100};set_instance_parameter_value {out0_s1_agent} {PKT_RESPONSE_STATUS_L} {99};set_instance_parameter_value {out0_s1_agent} {PKT_BURST_SIZE_H} {80};set_instance_parameter_value {out0_s1_agent} {PKT_BURST_SIZE_L} {78};set_instance_parameter_value {out0_s1_agent} {PKT_TRANS_LOCK} {72};set_instance_parameter_value {out0_s1_agent} {PKT_BEGIN_BURST} {85};set_instance_parameter_value {out0_s1_agent} {PKT_PROTECTION_H} {94};set_instance_parameter_value {out0_s1_agent} {PKT_PROTECTION_L} {92};set_instance_parameter_value {out0_s1_agent} {PKT_BURSTWRAP_H} {77};set_instance_parameter_value {out0_s1_agent} {PKT_BURSTWRAP_L} {77};set_instance_parameter_value {out0_s1_agent} {PKT_BYTE_CNT_H} {76};set_instance_parameter_value {out0_s1_agent} {PKT_BYTE_CNT_L} {74};set_instance_parameter_value {out0_s1_agent} {PKT_ADDR_H} {67};set_instance_parameter_value {out0_s1_agent} {PKT_ADDR_L} {36};set_instance_parameter_value {out0_s1_agent} {PKT_TRANS_COMPRESSED_READ} {68};set_instance_parameter_value {out0_s1_agent} {PKT_TRANS_POSTED} {69};set_instance_parameter_value {out0_s1_agent} {PKT_TRANS_WRITE} {70};set_instance_parameter_value {out0_s1_agent} {PKT_TRANS_READ} {71};set_instance_parameter_value {out0_s1_agent} {PKT_DATA_H} {31};set_instance_parameter_value {out0_s1_agent} {PKT_DATA_L} {0};set_instance_parameter_value {out0_s1_agent} {PKT_BYTEEN_H} {35};set_instance_parameter_value {out0_s1_agent} {PKT_BYTEEN_L} {32};set_instance_parameter_value {out0_s1_agent} {PKT_SRC_ID_H} {88};set_instance_parameter_value {out0_s1_agent} {PKT_SRC_ID_L} {87};set_instance_parameter_value {out0_s1_agent} {PKT_DEST_ID_H} {90};set_instance_parameter_value {out0_s1_agent} {PKT_DEST_ID_L} {89};set_instance_parameter_value {out0_s1_agent} {PKT_SYMBOL_W} {8};set_instance_parameter_value {out0_s1_agent} {ST_CHANNEL_W} {4};set_instance_parameter_value {out0_s1_agent} {ST_DATA_W} {104};set_instance_parameter_value {out0_s1_agent} {AVS_BURSTCOUNT_SYMBOLS} {0};set_instance_parameter_value {out0_s1_agent} {AVS_BURSTCOUNT_W} {3};set_instance_parameter_value {out0_s1_agent} {AV_LINEWRAPBURSTS} {0};set_instance_parameter_value {out0_s1_agent} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};set_instance_parameter_value {out0_s1_agent} {SUPPRESS_0_BYTEEN_CMD} {0};set_instance_parameter_value {out0_s1_agent} {PREVENT_FIFO_OVERFLOW} {1};set_instance_parameter_value {out0_s1_agent} {MAX_BYTE_CNT} {4};set_instance_parameter_value {out0_s1_agent} {MAX_BURSTWRAP} {1};set_instance_parameter_value {out0_s1_agent} {ID} {2};set_instance_parameter_value {out0_s1_agent} {USE_READRESPONSE} {0};set_instance_parameter_value {out0_s1_agent} {USE_WRITERESPONSE} {0};set_instance_parameter_value {out0_s1_agent} {ECC_ENABLE} {0};add_instance {out0_s1_agent_rsp_fifo} {altera_avalon_sc_fifo};set_instance_parameter_value {out0_s1_agent_rsp_fifo} {SYMBOLS_PER_BEAT} {1};set_instance_parameter_value {out0_s1_agent_rsp_fifo} {BITS_PER_SYMBOL} {105};set_instance_parameter_value {out0_s1_agent_rsp_fifo} {FIFO_DEPTH} {2};set_instance_parameter_value {out0_s1_agent_rsp_fifo} {CHANNEL_WIDTH} {0};set_instance_parameter_value {out0_s1_agent_rsp_fifo} {ERROR_WIDTH} {0};set_instance_parameter_value {out0_s1_agent_rsp_fifo} {USE_PACKETS} {1};set_instance_parameter_value {out0_s1_agent_rsp_fifo} {USE_FILL_LEVEL} {0};set_instance_parameter_value {out0_s1_agent_rsp_fifo} {EMPTY_LATENCY} {1};set_instance_parameter_value {out0_s1_agent_rsp_fifo} {USE_MEMORY_BLOCKS} {0};set_instance_parameter_value {out0_s1_agent_rsp_fifo} {USE_STORE_FORWARD} {0};set_instance_parameter_value {out0_s1_agent_rsp_fifo} {USE_ALMOST_FULL_IF} {0};set_instance_parameter_value {out0_s1_agent_rsp_fifo} {USE_ALMOST_EMPTY_IF} {0};set_instance_parameter_value {out0_s1_agent_rsp_fifo} {ENABLE_EXPLICIT_MAXCHANNEL} {false};set_instance_parameter_value {out0_s1_agent_rsp_fifo} {EXPLICIT_MAXCHANNEL} {0};add_instance {out1_s1_agent} {altera_merlin_slave_agent};set_instance_parameter_value {out1_s1_agent} {PKT_ORI_BURST_SIZE_H} {103};set_instance_parameter_value {out1_s1_agent} {PKT_ORI_BURST_SIZE_L} {101};set_instance_parameter_value {out1_s1_agent} {PKT_RESPONSE_STATUS_H} {100};set_instance_parameter_value {out1_s1_agent} {PKT_RESPONSE_STATUS_L} {99};set_instance_parameter_value {out1_s1_agent} {PKT_BURST_SIZE_H} {80};set_instance_parameter_value {out1_s1_agent} {PKT_BURST_SIZE_L} {78};set_instance_parameter_value {out1_s1_agent} {PKT_TRANS_LOCK} {72};set_instance_parameter_value {out1_s1_agent} {PKT_BEGIN_BURST} {85};set_instance_parameter_value {out1_s1_agent} {PKT_PROTECTION_H} {94};set_instance_parameter_value {out1_s1_agent} {PKT_PROTECTION_L} {92};set_instance_parameter_value {out1_s1_agent} {PKT_BURSTWRAP_H} {77};set_instance_parameter_value {out1_s1_agent} {PKT_BURSTWRAP_L} {77};set_instance_parameter_value {out1_s1_agent} {PKT_BYTE_CNT_H} {76};set_instance_parameter_value {out1_s1_agent} {PKT_BYTE_CNT_L} {74};set_instance_parameter_value {out1_s1_agent} {PKT_ADDR_H} {67};set_instance_parameter_value {out1_s1_agent} {PKT_ADDR_L} {36};set_instance_parameter_value {out1_s1_agent} {PKT_TRANS_COMPRESSED_READ} {68};set_instance_parameter_value {out1_s1_agent} {PKT_TRANS_POSTED} {69};set_instance_parameter_value {out1_s1_agent} {PKT_TRANS_WRITE} {70};set_instance_parameter_value {out1_s1_agent} {PKT_TRANS_READ} {71};set_instance_parameter_value {out1_s1_agent} {PKT_DATA_H} {31};set_instance_parameter_value {out1_s1_agent} {PKT_DATA_L} {0};set_instance_parameter_value {out1_s1_agent} {PKT_BYTEEN_H} {35};set_instance_parameter_value {out1_s1_agent} {PKT_BYTEEN_L} {32};set_instance_parameter_value {out1_s1_agent} {PKT_SRC_ID_H} {88};set_instance_parameter_value {out1_s1_agent} {PKT_SRC_ID_L} {87};set_instance_parameter_value {out1_s1_agent} {PKT_DEST_ID_H} {90};set_instance_parameter_value {out1_s1_agent} {PKT_DEST_ID_L} {89};set_instance_parameter_value {out1_s1_agent} {PKT_SYMBOL_W} {8};set_instance_parameter_value {out1_s1_agent} {ST_CHANNEL_W} {4};set_instance_parameter_value {out1_s1_agent} {ST_DATA_W} {104};set_instance_parameter_value {out1_s1_agent} {AVS_BURSTCOUNT_SYMBOLS} {0};set_instance_parameter_value {out1_s1_agent} {AVS_BURSTCOUNT_W} {3};set_instance_parameter_value {out1_s1_agent} {AV_LINEWRAPBURSTS} {0};set_instance_parameter_value {out1_s1_agent} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};set_instance_parameter_value {out1_s1_agent} {SUPPRESS_0_BYTEEN_CMD} {0};set_instance_parameter_value {out1_s1_agent} {PREVENT_FIFO_OVERFLOW} {1};set_instance_parameter_value {out1_s1_agent} {MAX_BYTE_CNT} {4};set_instance_parameter_value {out1_s1_agent} {MAX_BURSTWRAP} {1};set_instance_parameter_value {out1_s1_agent} {ID} {3};set_instance_parameter_value {out1_s1_agent} {USE_READRESPONSE} {0};set_instance_parameter_value {out1_s1_agent} {USE_WRITERESPONSE} {0};set_instance_parameter_value {out1_s1_agent} {ECC_ENABLE} {0};add_instance {out1_s1_agent_rsp_fifo} {altera_avalon_sc_fifo};set_instance_parameter_value {out1_s1_agent_rsp_fifo} {SYMBOLS_PER_BEAT} {1};set_instance_parameter_value {out1_s1_agent_rsp_fifo} {BITS_PER_SYMBOL} {105};set_instance_parameter_value {out1_s1_agent_rsp_fifo} {FIFO_DEPTH} {2};set_instance_parameter_value {out1_s1_agent_rsp_fifo} {CHANNEL_WIDTH} {0};set_instance_parameter_value {out1_s1_agent_rsp_fifo} {ERROR_WIDTH} {0};set_instance_parameter_value {out1_s1_agent_rsp_fifo} {USE_PACKETS} {1};set_instance_parameter_value {out1_s1_agent_rsp_fifo} {USE_FILL_LEVEL} {0};set_instance_parameter_value {out1_s1_agent_rsp_fifo} {EMPTY_LATENCY} {1};set_instance_parameter_value {out1_s1_agent_rsp_fifo} {USE_MEMORY_BLOCKS} {0};set_instance_parameter_value {out1_s1_agent_rsp_fifo} {USE_STORE_FORWARD} {0};set_instance_parameter_value {out1_s1_agent_rsp_fifo} {USE_ALMOST_FULL_IF} {0};set_instance_parameter_value {out1_s1_agent_rsp_fifo} {USE_ALMOST_EMPTY_IF} {0};set_instance_parameter_value {out1_s1_agent_rsp_fifo} {ENABLE_EXPLICIT_MAXCHANNEL} {false};set_instance_parameter_value {out1_s1_agent_rsp_fifo} {EXPLICIT_MAXCHANNEL} {0};add_instance {in0_s1_agent} {altera_merlin_slave_agent};set_instance_parameter_value {in0_s1_agent} {PKT_ORI_BURST_SIZE_H} {103};set_instance_parameter_value {in0_s1_agent} {PKT_ORI_BURST_SIZE_L} {101};set_instance_parameter_value {in0_s1_agent} {PKT_RESPONSE_STATUS_H} {100};set_instance_parameter_value {in0_s1_agent} {PKT_RESPONSE_STATUS_L} {99};set_instance_parameter_value {in0_s1_agent} {PKT_BURST_SIZE_H} {80};set_instance_parameter_value {in0_s1_agent} {PKT_BURST_SIZE_L} {78};set_instance_parameter_value {in0_s1_agent} {PKT_TRANS_LOCK} {72};set_instance_parameter_value {in0_s1_agent} {PKT_BEGIN_BURST} {85};set_instance_parameter_value {in0_s1_agent} {PKT_PROTECTION_H} {94};set_instance_parameter_value {in0_s1_agent} {PKT_PROTECTION_L} {92};set_instance_parameter_value {in0_s1_agent} {PKT_BURSTWRAP_H} {77};set_instance_parameter_value {in0_s1_agent} {PKT_BURSTWRAP_L} {77};set_instance_parameter_value {in0_s1_agent} {PKT_BYTE_CNT_H} {76};set_instance_parameter_value {in0_s1_agent} {PKT_BYTE_CNT_L} {74};set_instance_parameter_value {in0_s1_agent} {PKT_ADDR_H} {67};set_instance_parameter_value {in0_s1_agent} {PKT_ADDR_L} {36};set_instance_parameter_value {in0_s1_agent} {PKT_TRANS_COMPRESSED_READ} {68};set_instance_parameter_value {in0_s1_agent} {PKT_TRANS_POSTED} {69};set_instance_parameter_value {in0_s1_agent} {PKT_TRANS_WRITE} {70};set_instance_parameter_value {in0_s1_agent} {PKT_TRANS_READ} {71};set_instance_parameter_value {in0_s1_agent} {PKT_DATA_H} {31};set_instance_parameter_value {in0_s1_agent} {PKT_DATA_L} {0};set_instance_parameter_value {in0_s1_agent} {PKT_BYTEEN_H} {35};set_instance_parameter_value {in0_s1_agent} {PKT_BYTEEN_L} {32};set_instance_parameter_value {in0_s1_agent} {PKT_SRC_ID_H} {88};set_instance_parameter_value {in0_s1_agent} {PKT_SRC_ID_L} {87};set_instance_parameter_value {in0_s1_agent} {PKT_DEST_ID_H} {90};set_instance_parameter_value {in0_s1_agent} {PKT_DEST_ID_L} {89};set_instance_parameter_value {in0_s1_agent} {PKT_SYMBOL_W} {8};set_instance_parameter_value {in0_s1_agent} {ST_CHANNEL_W} {4};set_instance_parameter_value {in0_s1_agent} {ST_DATA_W} {104};set_instance_parameter_value {in0_s1_agent} {AVS_BURSTCOUNT_SYMBOLS} {0};set_instance_parameter_value {in0_s1_agent} {AVS_BURSTCOUNT_W} {3};set_instance_parameter_value {in0_s1_agent} {AV_LINEWRAPBURSTS} {0};set_instance_parameter_value {in0_s1_agent} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};set_instance_parameter_value {in0_s1_agent} {SUPPRESS_0_BYTEEN_CMD} {0};set_instance_parameter_value {in0_s1_agent} {PREVENT_FIFO_OVERFLOW} {1};set_instance_parameter_value {in0_s1_agent} {MAX_BYTE_CNT} {4};set_instance_parameter_value {in0_s1_agent} {MAX_BURSTWRAP} {1};set_instance_parameter_value {in0_s1_agent} {ID} {0};set_instance_parameter_value {in0_s1_agent} {USE_READRESPONSE} {0};set_instance_parameter_value {in0_s1_agent} {USE_WRITERESPONSE} {0};set_instance_parameter_value {in0_s1_agent} {ECC_ENABLE} {0};add_instance {in0_s1_agent_rsp_fifo} {altera_avalon_sc_fifo};set_instance_parameter_value {in0_s1_agent_rsp_fifo} {SYMBOLS_PER_BEAT} {1};set_instance_parameter_value {in0_s1_agent_rsp_fifo} {BITS_PER_SYMBOL} {105};set_instance_parameter_value {in0_s1_agent_rsp_fifo} {FIFO_DEPTH} {2};set_instance_parameter_value {in0_s1_agent_rsp_fifo} {CHANNEL_WIDTH} {0};set_instance_parameter_value {in0_s1_agent_rsp_fifo} {ERROR_WIDTH} {0};set_instance_parameter_value {in0_s1_agent_rsp_fifo} {USE_PACKETS} {1};set_instance_parameter_value {in0_s1_agent_rsp_fifo} {USE_FILL_LEVEL} {0};set_instance_parameter_value {in0_s1_agent_rsp_fifo} {EMPTY_LATENCY} {1};set_instance_parameter_value {in0_s1_agent_rsp_fifo} {USE_MEMORY_BLOCKS} {0};set_instance_parameter_value {in0_s1_agent_rsp_fifo} {USE_STORE_FORWARD} {0};set_instance_parameter_value {in0_s1_agent_rsp_fifo} {USE_ALMOST_FULL_IF} {0};set_instance_parameter_value {in0_s1_agent_rsp_fifo} {USE_ALMOST_EMPTY_IF} {0};set_instance_parameter_value {in0_s1_agent_rsp_fifo} {ENABLE_EXPLICIT_MAXCHANNEL} {false};set_instance_parameter_value {in0_s1_agent_rsp_fifo} {EXPLICIT_MAXCHANNEL} {0};add_instance {in1_s1_agent} {altera_merlin_slave_agent};set_instance_parameter_value {in1_s1_agent} {PKT_ORI_BURST_SIZE_H} {103};set_instance_parameter_value {in1_s1_agent} {PKT_ORI_BURST_SIZE_L} {101};set_instance_parameter_value {in1_s1_agent} {PKT_RESPONSE_STATUS_H} {100};set_instance_parameter_value {in1_s1_agent} {PKT_RESPONSE_STATUS_L} {99};set_instance_parameter_value {in1_s1_agent} {PKT_BURST_SIZE_H} {80};set_instance_parameter_value {in1_s1_agent} {PKT_BURST_SIZE_L} {78};set_instance_parameter_value {in1_s1_agent} {PKT_TRANS_LOCK} {72};set_instance_parameter_value {in1_s1_agent} {PKT_BEGIN_BURST} {85};set_instance_parameter_value {in1_s1_agent} {PKT_PROTECTION_H} {94};set_instance_parameter_value {in1_s1_agent} {PKT_PROTECTION_L} {92};set_instance_parameter_value {in1_s1_agent} {PKT_BURSTWRAP_H} {77};set_instance_parameter_value {in1_s1_agent} {PKT_BURSTWRAP_L} {77};set_instance_parameter_value {in1_s1_agent} {PKT_BYTE_CNT_H} {76};set_instance_parameter_value {in1_s1_agent} {PKT_BYTE_CNT_L} {74};set_instance_parameter_value {in1_s1_agent} {PKT_ADDR_H} {67};set_instance_parameter_value {in1_s1_agent} {PKT_ADDR_L} {36};set_instance_parameter_value {in1_s1_agent} {PKT_TRANS_COMPRESSED_READ} {68};set_instance_parameter_value {in1_s1_agent} {PKT_TRANS_POSTED} {69};set_instance_parameter_value {in1_s1_agent} {PKT_TRANS_WRITE} {70};set_instance_parameter_value {in1_s1_agent} {PKT_TRANS_READ} {71};set_instance_parameter_value {in1_s1_agent} {PKT_DATA_H} {31};set_instance_parameter_value {in1_s1_agent} {PKT_DATA_L} {0};set_instance_parameter_value {in1_s1_agent} {PKT_BYTEEN_H} {35};set_instance_parameter_value {in1_s1_agent} {PKT_BYTEEN_L} {32};set_instance_parameter_value {in1_s1_agent} {PKT_SRC_ID_H} {88};set_instance_parameter_value {in1_s1_agent} {PKT_SRC_ID_L} {87};set_instance_parameter_value {in1_s1_agent} {PKT_DEST_ID_H} {90};set_instance_parameter_value {in1_s1_agent} {PKT_DEST_ID_L} {89};set_instance_parameter_value {in1_s1_agent} {PKT_SYMBOL_W} {8};set_instance_parameter_value {in1_s1_agent} {ST_CHANNEL_W} {4};set_instance_parameter_value {in1_s1_agent} {ST_DATA_W} {104};set_instance_parameter_value {in1_s1_agent} {AVS_BURSTCOUNT_SYMBOLS} {0};set_instance_parameter_value {in1_s1_agent} {AVS_BURSTCOUNT_W} {3};set_instance_parameter_value {in1_s1_agent} {AV_LINEWRAPBURSTS} {0};set_instance_parameter_value {in1_s1_agent} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};set_instance_parameter_value {in1_s1_agent} {SUPPRESS_0_BYTEEN_CMD} {0};set_instance_parameter_value {in1_s1_agent} {PREVENT_FIFO_OVERFLOW} {1};set_instance_parameter_value {in1_s1_agent} {MAX_BYTE_CNT} {4};set_instance_parameter_value {in1_s1_agent} {MAX_BURSTWRAP} {1};set_instance_parameter_value {in1_s1_agent} {ID} {1};set_instance_parameter_value {in1_s1_agent} {USE_READRESPONSE} {0};set_instance_parameter_value {in1_s1_agent} {USE_WRITERESPONSE} {0};set_instance_parameter_value {in1_s1_agent} {ECC_ENABLE} {0};add_instance {in1_s1_agent_rsp_fifo} {altera_avalon_sc_fifo};set_instance_parameter_value {in1_s1_agent_rsp_fifo} {SYMBOLS_PER_BEAT} {1};set_instance_parameter_value {in1_s1_agent_rsp_fifo} {BITS_PER_SYMBOL} {105};set_instance_parameter_value {in1_s1_agent_rsp_fifo} {FIFO_DEPTH} {2};set_instance_parameter_value {in1_s1_agent_rsp_fifo} {CHANNEL_WIDTH} {0};set_instance_parameter_value {in1_s1_agent_rsp_fifo} {ERROR_WIDTH} {0};set_instance_parameter_value {in1_s1_agent_rsp_fifo} {USE_PACKETS} {1};set_instance_parameter_value {in1_s1_agent_rsp_fifo} {USE_FILL_LEVEL} {0};set_instance_parameter_value {in1_s1_agent_rsp_fifo} {EMPTY_LATENCY} {1};set_instance_parameter_value {in1_s1_agent_rsp_fifo} {USE_MEMORY_BLOCKS} {0};set_instance_parameter_value {in1_s1_agent_rsp_fifo} {USE_STORE_FORWARD} {0};set_instance_parameter_value {in1_s1_agent_rsp_fifo} {USE_ALMOST_FULL_IF} {0};set_instance_parameter_value {in1_s1_agent_rsp_fifo} {USE_ALMOST_EMPTY_IF} {0};set_instance_parameter_value {in1_s1_agent_rsp_fifo} {ENABLE_EXPLICIT_MAXCHANNEL} {false};set_instance_parameter_value {in1_s1_agent_rsp_fifo} {EXPLICIT_MAXCHANNEL} {0};add_instance {router} {altera_merlin_router};set_instance_parameter_value {router} {DESTINATION_ID} {2 3 0 1 };set_instance_parameter_value {router} {CHANNEL_ID} {0001 0010 0100 1000 };set_instance_parameter_value {router} {TYPE_OF_TRANSACTION} {both both read read };set_instance_parameter_value {router} {START_ADDRESS} {0x0 0x10 0x20 0x30 };set_instance_parameter_value {router} {END_ADDRESS} {0x10 0x20 0x30 0x40 };set_instance_parameter_value {router} {NON_SECURED_TAG} {1 1 1 1 };set_instance_parameter_value {router} {SECURED_RANGE_PAIRS} {0 0 0 0 };set_instance_parameter_value {router} {SECURED_RANGE_LIST} {0 0 0 0 };set_instance_parameter_value {router} {SPAN_OFFSET} {};set_instance_parameter_value {router} {PKT_ADDR_H} {67};set_instance_parameter_value {router} {PKT_ADDR_L} {36};set_instance_parameter_value {router} {PKT_PROTECTION_H} {94};set_instance_parameter_value {router} {PKT_PROTECTION_L} {92};set_instance_parameter_value {router} {PKT_DEST_ID_H} {90};set_instance_parameter_value {router} {PKT_DEST_ID_L} {89};set_instance_parameter_value {router} {PKT_TRANS_WRITE} {70};set_instance_parameter_value {router} {PKT_TRANS_READ} {71};set_instance_parameter_value {router} {ST_DATA_W} {104};set_instance_parameter_value {router} {ST_CHANNEL_W} {4};set_instance_parameter_value {router} {DECODER_TYPE} {0};set_instance_parameter_value {router} {DEFAULT_CHANNEL} {0};set_instance_parameter_value {router} {DEFAULT_WR_CHANNEL} {-1};set_instance_parameter_value {router} {DEFAULT_RD_CHANNEL} {-1};set_instance_parameter_value {router} {DEFAULT_DESTID} {2};set_instance_parameter_value {router} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};set_instance_parameter_value {router} {MEMORY_ALIASING_DECODE} {0};add_instance {router_001} {altera_merlin_router};set_instance_parameter_value {router_001} {DESTINATION_ID} {0 };set_instance_parameter_value {router_001} {CHANNEL_ID} {1 };set_instance_parameter_value {router_001} {TYPE_OF_TRANSACTION} {both };set_instance_parameter_value {router_001} {START_ADDRESS} {0x0 };set_instance_parameter_value {router_001} {END_ADDRESS} {0x0 };set_instance_parameter_value {router_001} {NON_SECURED_TAG} {1 };set_instance_parameter_value {router_001} {SECURED_RANGE_PAIRS} {0 };set_instance_parameter_value {router_001} {SECURED_RANGE_LIST} {0 };set_instance_parameter_value {router_001} {SPAN_OFFSET} {};set_instance_parameter_value {router_001} {PKT_ADDR_H} {67};set_instance_parameter_value {router_001} {PKT_ADDR_L} {36};set_instance_parameter_value {router_001} {PKT_PROTECTION_H} {94};set_instance_parameter_value {router_001} {PKT_PROTECTION_L} {92};set_instance_parameter_value {router_001} {PKT_DEST_ID_H} {90};set_instance_parameter_value {router_001} {PKT_DEST_ID_L} {89};set_instance_parameter_value {router_001} {PKT_TRANS_WRITE} {70};set_instance_parameter_value {router_001} {PKT_TRANS_READ} {71};set_instance_parameter_value {router_001} {ST_DATA_W} {104};set_instance_parameter_value {router_001} {ST_CHANNEL_W} {4};set_instance_parameter_value {router_001} {DECODER_TYPE} {1};set_instance_parameter_value {router_001} {DEFAULT_CHANNEL} {0};set_instance_parameter_value {router_001} {DEFAULT_WR_CHANNEL} {-1};set_instance_parameter_value {router_001} {DEFAULT_RD_CHANNEL} {-1};set_instance_parameter_value {router_001} {DEFAULT_DESTID} {0};set_instance_parameter_value {router_001} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};set_instance_parameter_value {router_001} {MEMORY_ALIASING_DECODE} {0};add_instance {router_002} {altera_merlin_router};set_instance_parameter_value {router_002} {DESTINATION_ID} {0 };set_instance_parameter_value {router_002} {CHANNEL_ID} {1 };set_instance_parameter_value {router_002} {TYPE_OF_TRANSACTION} {both };set_instance_parameter_value {router_002} {START_ADDRESS} {0x0 };set_instance_parameter_value {router_002} {END_ADDRESS} {0x0 };set_instance_parameter_value {router_002} {NON_SECURED_TAG} {1 };set_instance_parameter_value {router_002} {SECURED_RANGE_PAIRS} {0 };set_instance_parameter_value {router_002} {SECURED_RANGE_LIST} {0 };set_instance_parameter_value {router_002} {SPAN_OFFSET} {};set_instance_parameter_value {router_002} {PKT_ADDR_H} {67};set_instance_parameter_value {router_002} {PKT_ADDR_L} {36};set_instance_parameter_value {router_002} {PKT_PROTECTION_H} {94};set_instance_parameter_value {router_002} {PKT_PROTECTION_L} {92};set_instance_parameter_value {router_002} {PKT_DEST_ID_H} {90};set_instance_parameter_value {router_002} {PKT_DEST_ID_L} {89};set_instance_parameter_value {router_002} {PKT_TRANS_WRITE} {70};set_instance_parameter_value {router_002} {PKT_TRANS_READ} {71};set_instance_parameter_value {router_002} {ST_DATA_W} {104};set_instance_parameter_value {router_002} {ST_CHANNEL_W} {4};set_instance_parameter_value {router_002} {DECODER_TYPE} {1};set_instance_parameter_value {router_002} {DEFAULT_CHANNEL} {0};set_instance_parameter_value {router_002} {DEFAULT_WR_CHANNEL} {-1};set_instance_parameter_value {router_002} {DEFAULT_RD_CHANNEL} {-1};set_instance_parameter_value {router_002} {DEFAULT_DESTID} {0};set_instance_parameter_value {router_002} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};set_instance_parameter_value {router_002} {MEMORY_ALIASING_DECODE} {0};add_instance {router_003} {altera_merlin_router};set_instance_parameter_value {router_003} {DESTINATION_ID} {0 };set_instance_parameter_value {router_003} {CHANNEL_ID} {1 };set_instance_parameter_value {router_003} {TYPE_OF_TRANSACTION} {both };set_instance_parameter_value {router_003} {START_ADDRESS} {0x0 };set_instance_parameter_value {router_003} {END_ADDRESS} {0x0 };set_instance_parameter_value {router_003} {NON_SECURED_TAG} {1 };set_instance_parameter_value {router_003} {SECURED_RANGE_PAIRS} {0 };set_instance_parameter_value {router_003} {SECURED_RANGE_LIST} {0 };set_instance_parameter_value {router_003} {SPAN_OFFSET} {};set_instance_parameter_value {router_003} {PKT_ADDR_H} {67};set_instance_parameter_value {router_003} {PKT_ADDR_L} {36};set_instance_parameter_value {router_003} {PKT_PROTECTION_H} {94};set_instance_parameter_value {router_003} {PKT_PROTECTION_L} {92};set_instance_parameter_value {router_003} {PKT_DEST_ID_H} {90};set_instance_parameter_value {router_003} {PKT_DEST_ID_L} {89};set_instance_parameter_value {router_003} {PKT_TRANS_WRITE} {70};set_instance_parameter_value {router_003} {PKT_TRANS_READ} {71};set_instance_parameter_value {router_003} {ST_DATA_W} {104};set_instance_parameter_value {router_003} {ST_CHANNEL_W} {4};set_instance_parameter_value {router_003} {DECODER_TYPE} {1};set_instance_parameter_value {router_003} {DEFAULT_CHANNEL} {0};set_instance_parameter_value {router_003} {DEFAULT_WR_CHANNEL} {-1};set_instance_parameter_value {router_003} {DEFAULT_RD_CHANNEL} {-1};set_instance_parameter_value {router_003} {DEFAULT_DESTID} {0};set_instance_parameter_value {router_003} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};set_instance_parameter_value {router_003} {MEMORY_ALIASING_DECODE} {0};add_instance {router_004} {altera_merlin_router};set_instance_parameter_value {router_004} {DESTINATION_ID} {0 };set_instance_parameter_value {router_004} {CHANNEL_ID} {1 };set_instance_parameter_value {router_004} {TYPE_OF_TRANSACTION} {both };set_instance_parameter_value {router_004} {START_ADDRESS} {0x0 };set_instance_parameter_value {router_004} {END_ADDRESS} {0x0 };set_instance_parameter_value {router_004} {NON_SECURED_TAG} {1 };set_instance_parameter_value {router_004} {SECURED_RANGE_PAIRS} {0 };set_instance_parameter_value {router_004} {SECURED_RANGE_LIST} {0 };set_instance_parameter_value {router_004} {SPAN_OFFSET} {};set_instance_parameter_value {router_004} {PKT_ADDR_H} {67};set_instance_parameter_value {router_004} {PKT_ADDR_L} {36};set_instance_parameter_value {router_004} {PKT_PROTECTION_H} {94};set_instance_parameter_value {router_004} {PKT_PROTECTION_L} {92};set_instance_parameter_value {router_004} {PKT_DEST_ID_H} {90};set_instance_parameter_value {router_004} {PKT_DEST_ID_L} {89};set_instance_parameter_value {router_004} {PKT_TRANS_WRITE} {70};set_instance_parameter_value {router_004} {PKT_TRANS_READ} {71};set_instance_parameter_value {router_004} {ST_DATA_W} {104};set_instance_parameter_value {router_004} {ST_CHANNEL_W} {4};set_instance_parameter_value {router_004} {DECODER_TYPE} {1};set_instance_parameter_value {router_004} {DEFAULT_CHANNEL} {0};set_instance_parameter_value {router_004} {DEFAULT_WR_CHANNEL} {-1};set_instance_parameter_value {router_004} {DEFAULT_RD_CHANNEL} {-1};set_instance_parameter_value {router_004} {DEFAULT_DESTID} {0};set_instance_parameter_value {router_004} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};set_instance_parameter_value {router_004} {MEMORY_ALIASING_DECODE} {0};add_instance {master_0_master_limiter} {altera_merlin_traffic_limiter};set_instance_parameter_value {master_0_master_limiter} {PKT_DEST_ID_H} {90};set_instance_parameter_value {master_0_master_limiter} {PKT_DEST_ID_L} {89};set_instance_parameter_value {master_0_master_limiter} {PKT_SRC_ID_H} {88};set_instance_parameter_value {master_0_master_limiter} {PKT_SRC_ID_L} {87};set_instance_parameter_value {master_0_master_limiter} {PKT_BYTE_CNT_H} {76};set_instance_parameter_value {master_0_master_limiter} {PKT_BYTE_CNT_L} {74};set_instance_parameter_value {master_0_master_limiter} {PKT_BYTEEN_H} {35};set_instance_parameter_value {master_0_master_limiter} {PKT_BYTEEN_L} {32};set_instance_parameter_value {master_0_master_limiter} {PKT_TRANS_POSTED} {69};set_instance_parameter_value {master_0_master_limiter} {PKT_TRANS_WRITE} {70};set_instance_parameter_value {master_0_master_limiter} {PKT_THREAD_ID_H} {91};set_instance_parameter_value {master_0_master_limiter} {PKT_THREAD_ID_L} {91};set_instance_parameter_value {master_0_master_limiter} {MAX_BURST_LENGTH} {1};set_instance_parameter_value {master_0_master_limiter} {MAX_OUTSTANDING_RESPONSES} {1};set_instance_parameter_value {master_0_master_limiter} {PIPELINED} {0};set_instance_parameter_value {master_0_master_limiter} {ST_DATA_W} {104};set_instance_parameter_value {master_0_master_limiter} {ST_CHANNEL_W} {4};set_instance_parameter_value {master_0_master_limiter} {VALID_WIDTH} {4};set_instance_parameter_value {master_0_master_limiter} {ENFORCE_ORDER} {1};set_instance_parameter_value {master_0_master_limiter} {PREVENT_HAZARDS} {0};set_instance_parameter_value {master_0_master_limiter} {SUPPORTS_POSTED_WRITES} {1};set_instance_parameter_value {master_0_master_limiter} {SUPPORTS_NONPOSTED_WRITES} {0};set_instance_parameter_value {master_0_master_limiter} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};set_instance_parameter_value {master_0_master_limiter} {REORDER} {0};add_instance {cmd_demux} {altera_merlin_demultiplexer};set_instance_parameter_value {cmd_demux} {ST_DATA_W} {104};set_instance_parameter_value {cmd_demux} {ST_CHANNEL_W} {4};set_instance_parameter_value {cmd_demux} {NUM_OUTPUTS} {4};set_instance_parameter_value {cmd_demux} {VALID_WIDTH} {4};set_instance_parameter_value {cmd_demux} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};add_instance {cmd_mux} {altera_merlin_multiplexer};set_instance_parameter_value {cmd_mux} {ST_DATA_W} {104};set_instance_parameter_value {cmd_mux} {ST_CHANNEL_W} {4};set_instance_parameter_value {cmd_mux} {NUM_INPUTS} {1};set_instance_parameter_value {cmd_mux} {PIPELINE_ARB} {1};set_instance_parameter_value {cmd_mux} {USE_EXTERNAL_ARB} {0};set_instance_parameter_value {cmd_mux} {PKT_TRANS_LOCK} {72};set_instance_parameter_value {cmd_mux} {ARBITRATION_SCHEME} {round-robin};set_instance_parameter_value {cmd_mux} {ARBITRATION_SHARES} {1 };set_instance_parameter_value {cmd_mux} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};add_instance {cmd_mux_001} {altera_merlin_multiplexer};set_instance_parameter_value {cmd_mux_001} {ST_DATA_W} {104};set_instance_parameter_value {cmd_mux_001} {ST_CHANNEL_W} {4};set_instance_parameter_value {cmd_mux_001} {NUM_INPUTS} {1};set_instance_parameter_value {cmd_mux_001} {PIPELINE_ARB} {1};set_instance_parameter_value {cmd_mux_001} {USE_EXTERNAL_ARB} {0};set_instance_parameter_value {cmd_mux_001} {PKT_TRANS_LOCK} {72};set_instance_parameter_value {cmd_mux_001} {ARBITRATION_SCHEME} {round-robin};set_instance_parameter_value {cmd_mux_001} {ARBITRATION_SHARES} {1 };set_instance_parameter_value {cmd_mux_001} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};add_instance {cmd_mux_002} {altera_merlin_multiplexer};set_instance_parameter_value {cmd_mux_002} {ST_DATA_W} {104};set_instance_parameter_value {cmd_mux_002} {ST_CHANNEL_W} {4};set_instance_parameter_value {cmd_mux_002} {NUM_INPUTS} {1};set_instance_parameter_value {cmd_mux_002} {PIPELINE_ARB} {1};set_instance_parameter_value {cmd_mux_002} {USE_EXTERNAL_ARB} {0};set_instance_parameter_value {cmd_mux_002} {PKT_TRANS_LOCK} {72};set_instance_parameter_value {cmd_mux_002} {ARBITRATION_SCHEME} {round-robin};set_instance_parameter_value {cmd_mux_002} {ARBITRATION_SHARES} {1 };set_instance_parameter_value {cmd_mux_002} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};add_instance {cmd_mux_003} {altera_merlin_multiplexer};set_instance_parameter_value {cmd_mux_003} {ST_DATA_W} {104};set_instance_parameter_value {cmd_mux_003} {ST_CHANNEL_W} {4};set_instance_parameter_value {cmd_mux_003} {NUM_INPUTS} {1};set_instance_parameter_value {cmd_mux_003} {PIPELINE_ARB} {1};set_instance_parameter_value {cmd_mux_003} {USE_EXTERNAL_ARB} {0};set_instance_parameter_value {cmd_mux_003} {PKT_TRANS_LOCK} {72};set_instance_parameter_value {cmd_mux_003} {ARBITRATION_SCHEME} {round-robin};set_instance_parameter_value {cmd_mux_003} {ARBITRATION_SHARES} {1 };set_instance_parameter_value {cmd_mux_003} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};add_instance {rsp_demux} {altera_merlin_demultiplexer};set_instance_parameter_value {rsp_demux} {ST_DATA_W} {104};set_instance_parameter_value {rsp_demux} {ST_CHANNEL_W} {4};set_instance_parameter_value {rsp_demux} {NUM_OUTPUTS} {1};set_instance_parameter_value {rsp_demux} {VALID_WIDTH} {1};set_instance_parameter_value {rsp_demux} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};add_instance {rsp_demux_001} {altera_merlin_demultiplexer};set_instance_parameter_value {rsp_demux_001} {ST_DATA_W} {104};set_instance_parameter_value {rsp_demux_001} {ST_CHANNEL_W} {4};set_instance_parameter_value {rsp_demux_001} {NUM_OUTPUTS} {1};set_instance_parameter_value {rsp_demux_001} {VALID_WIDTH} {1};set_instance_parameter_value {rsp_demux_001} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};add_instance {rsp_demux_002} {altera_merlin_demultiplexer};set_instance_parameter_value {rsp_demux_002} {ST_DATA_W} {104};set_instance_parameter_value {rsp_demux_002} {ST_CHANNEL_W} {4};set_instance_parameter_value {rsp_demux_002} {NUM_OUTPUTS} {1};set_instance_parameter_value {rsp_demux_002} {VALID_WIDTH} {1};set_instance_parameter_value {rsp_demux_002} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};add_instance {rsp_demux_003} {altera_merlin_demultiplexer};set_instance_parameter_value {rsp_demux_003} {ST_DATA_W} {104};set_instance_parameter_value {rsp_demux_003} {ST_CHANNEL_W} {4};set_instance_parameter_value {rsp_demux_003} {NUM_OUTPUTS} {1};set_instance_parameter_value {rsp_demux_003} {VALID_WIDTH} {1};set_instance_parameter_value {rsp_demux_003} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};add_instance {rsp_mux} {altera_merlin_multiplexer};set_instance_parameter_value {rsp_mux} {ST_DATA_W} {104};set_instance_parameter_value {rsp_mux} {ST_CHANNEL_W} {4};set_instance_parameter_value {rsp_mux} {NUM_INPUTS} {4};set_instance_parameter_value {rsp_mux} {PIPELINE_ARB} {0};set_instance_parameter_value {rsp_mux} {USE_EXTERNAL_ARB} {0};set_instance_parameter_value {rsp_mux} {PKT_TRANS_LOCK} {72};set_instance_parameter_value {rsp_mux} {ARBITRATION_SCHEME} {no-arb};set_instance_parameter_value {rsp_mux} {ARBITRATION_SHARES} {1 1 1 1 };set_instance_parameter_value {rsp_mux} {MERLIN_PACKET_FORMAT} {ori_burst_size(103:101) response_status(100:99) cache(98:95) protection(94:92) thread_id(91) dest_id(90:89) src_id(88:87) qos(86) begin_burst(85) data_sideband(84) addr_sideband(83) burst_type(82:81) burst_size(80:78) burstwrap(77) byte_cnt(76:74) trans_exclusive(73) trans_lock(72) trans_read(71) trans_write(70) trans_posted(69) trans_compressed_read(68) addr(67:36) byteen(35:32) data(31:0)};add_instance {master_0_clk_reset_reset_bridge} {altera_reset_bridge};set_instance_parameter_value {master_0_clk_reset_reset_bridge} {ACTIVE_LOW_RESET} {0};set_instance_parameter_value {master_0_clk_reset_reset_bridge} {SYNCHRONOUS_EDGES} {deassert};set_instance_parameter_value {master_0_clk_reset_reset_bridge} {NUM_RESET_OUTPUTS} {1};set_instance_parameter_value {master_0_clk_reset_reset_bridge} {USE_RESET_REQUEST} {0};add_instance {out0_reset_reset_bridge} {altera_reset_bridge};set_instance_parameter_value {out0_reset_reset_bridge} {ACTIVE_LOW_RESET} {0};set_instance_parameter_value {out0_reset_reset_bridge} {SYNCHRONOUS_EDGES} {deassert};set_instance_parameter_value {out0_reset_reset_bridge} {NUM_RESET_OUTPUTS} {1};set_instance_parameter_value {out0_reset_reset_bridge} {USE_RESET_REQUEST} {0};add_instance {clk_0_clk_clock_bridge} {altera_clock_bridge};set_instance_parameter_value {clk_0_clk_clock_bridge} {EXPLICIT_CLOCK_RATE} {50000000};set_instance_parameter_value {clk_0_clk_clock_bridge} {NUM_CLOCK_OUTPUTS} {1};add_connection {master_0_master_translator.avalon_universal_master_0} {master_0_master_agent.av} {avalon};set_connection_parameter_value {master_0_master_translator.avalon_universal_master_0/master_0_master_agent.av} {arbitrationPriority} {1};set_connection_parameter_value {master_0_master_translator.avalon_universal_master_0/master_0_master_agent.av} {baseAddress} {0x0000};set_connection_parameter_value {master_0_master_translator.avalon_universal_master_0/master_0_master_agent.av} {defaultConnection} {false};add_connection {out0_s1_agent.m0} {out0_s1_translator.avalon_universal_slave_0} {avalon};set_connection_parameter_value {out0_s1_agent.m0/out0_s1_translator.avalon_universal_slave_0} {arbitrationPriority} {1};set_connection_parameter_value {out0_s1_agent.m0/out0_s1_translator.avalon_universal_slave_0} {baseAddress} {0x0000};set_connection_parameter_value {out0_s1_agent.m0/out0_s1_translator.avalon_universal_slave_0} {defaultConnection} {false};add_connection {out0_s1_agent.rf_source} {out0_s1_agent_rsp_fifo.in} {avalon_streaming};add_connection {out0_s1_agent_rsp_fifo.out} {out0_s1_agent.rf_sink} {avalon_streaming};add_connection {out0_s1_agent.rdata_fifo_src} {out0_s1_agent.rdata_fifo_sink} {avalon_streaming};add_connection {cmd_mux.src} {out0_s1_agent.cp} {avalon_streaming};preview_set_connection_tag {cmd_mux.src/out0_s1_agent.cp} {qsys_mm.command};add_connection {out1_s1_agent.m0} {out1_s1_translator.avalon_universal_slave_0} {avalon};set_connection_parameter_value {out1_s1_agent.m0/out1_s1_translator.avalon_universal_slave_0} {arbitrationPriority} {1};set_connection_parameter_value {out1_s1_agent.m0/out1_s1_translator.avalon_universal_slave_0} {baseAddress} {0x0000};set_connection_parameter_value {out1_s1_agent.m0/out1_s1_translator.avalon_universal_slave_0} {defaultConnection} {false};add_connection {out1_s1_agent.rf_source} {out1_s1_agent_rsp_fifo.in} {avalon_streaming};add_connection {out1_s1_agent_rsp_fifo.out} {out1_s1_agent.rf_sink} {avalon_streaming};add_connection {out1_s1_agent.rdata_fifo_src} {out1_s1_agent.rdata_fifo_sink} {avalon_streaming};add_connection {cmd_mux_001.src} {out1_s1_agent.cp} {avalon_streaming};preview_set_connection_tag {cmd_mux_001.src/out1_s1_agent.cp} {qsys_mm.command};add_connection {in0_s1_agent.m0} {in0_s1_translator.avalon_universal_slave_0} {avalon};set_connection_parameter_value {in0_s1_agent.m0/in0_s1_translator.avalon_universal_slave_0} {arbitrationPriority} {1};set_connection_parameter_value {in0_s1_agent.m0/in0_s1_translator.avalon_universal_slave_0} {baseAddress} {0x0000};set_connection_parameter_value {in0_s1_agent.m0/in0_s1_translator.avalon_universal_slave_0} {defaultConnection} {false};add_connection {in0_s1_agent.rf_source} {in0_s1_agent_rsp_fifo.in} {avalon_streaming};add_connection {in0_s1_agent_rsp_fifo.out} {in0_s1_agent.rf_sink} {avalon_streaming};add_connection {in0_s1_agent.rdata_fifo_src} {in0_s1_agent.rdata_fifo_sink} {avalon_streaming};add_connection {cmd_mux_002.src} {in0_s1_agent.cp} {avalon_streaming};preview_set_connection_tag {cmd_mux_002.src/in0_s1_agent.cp} {qsys_mm.command};add_connection {in1_s1_agent.m0} {in1_s1_translator.avalon_universal_slave_0} {avalon};set_connection_parameter_value {in1_s1_agent.m0/in1_s1_translator.avalon_universal_slave_0} {arbitrationPriority} {1};set_connection_parameter_value {in1_s1_agent.m0/in1_s1_translator.avalon_universal_slave_0} {baseAddress} {0x0000};set_connection_parameter_value {in1_s1_agent.m0/in1_s1_translator.avalon_universal_slave_0} {defaultConnection} {false};add_connection {in1_s1_agent.rf_source} {in1_s1_agent_rsp_fifo.in} {avalon_streaming};add_connection {in1_s1_agent_rsp_fifo.out} {in1_s1_agent.rf_sink} {avalon_streaming};add_connection {in1_s1_agent.rdata_fifo_src} {in1_s1_agent.rdata_fifo_sink} {avalon_streaming};add_connection {cmd_mux_003.src} {in1_s1_agent.cp} {avalon_streaming};preview_set_connection_tag {cmd_mux_003.src/in1_s1_agent.cp} {qsys_mm.command};add_connection {master_0_master_agent.cp} {router.sink} {avalon_streaming};preview_set_connection_tag {master_0_master_agent.cp/router.sink} {qsys_mm.command};add_connection {out0_s1_agent.rp} {router_001.sink} {avalon_streaming};preview_set_connection_tag {out0_s1_agent.rp/router_001.sink} {qsys_mm.response};add_connection {router_001.src} {rsp_demux.sink} {avalon_streaming};preview_set_connection_tag {router_001.src/rsp_demux.sink} {qsys_mm.response};add_connection {out1_s1_agent.rp} {router_002.sink} {avalon_streaming};preview_set_connection_tag {out1_s1_agent.rp/router_002.sink} {qsys_mm.response};add_connection {router_002.src} {rsp_demux_001.sink} {avalon_streaming};preview_set_connection_tag {router_002.src/rsp_demux_001.sink} {qsys_mm.response};add_connection {in0_s1_agent.rp} {router_003.sink} {avalon_streaming};preview_set_connection_tag {in0_s1_agent.rp/router_003.sink} {qsys_mm.response};add_connection {router_003.src} {rsp_demux_002.sink} {avalon_streaming};preview_set_connection_tag {router_003.src/rsp_demux_002.sink} {qsys_mm.response};add_connection {in1_s1_agent.rp} {router_004.sink} {avalon_streaming};preview_set_connection_tag {in1_s1_agent.rp/router_004.sink} {qsys_mm.response};add_connection {router_004.src} {rsp_demux_003.sink} {avalon_streaming};preview_set_connection_tag {router_004.src/rsp_demux_003.sink} {qsys_mm.response};add_connection {router.src} {master_0_master_limiter.cmd_sink} {avalon_streaming};preview_set_connection_tag {router.src/master_0_master_limiter.cmd_sink} {qsys_mm.command};add_connection {master_0_master_limiter.cmd_src} {cmd_demux.sink} {avalon_streaming};preview_set_connection_tag {master_0_master_limiter.cmd_src/cmd_demux.sink} {qsys_mm.command};add_connection {rsp_mux.src} {master_0_master_limiter.rsp_sink} {avalon_streaming};preview_set_connection_tag {rsp_mux.src/master_0_master_limiter.rsp_sink} {qsys_mm.response};add_connection {master_0_master_limiter.rsp_src} {master_0_master_agent.rp} {avalon_streaming};preview_set_connection_tag {master_0_master_limiter.rsp_src/master_0_master_agent.rp} {qsys_mm.response};add_connection {cmd_demux.src0} {cmd_mux.sink0} {avalon_streaming};preview_set_connection_tag {cmd_demux.src0/cmd_mux.sink0} {qsys_mm.command};add_connection {cmd_demux.src1} {cmd_mux_001.sink0} {avalon_streaming};preview_set_connection_tag {cmd_demux.src1/cmd_mux_001.sink0} {qsys_mm.command};add_connection {cmd_demux.src2} {cmd_mux_002.sink0} {avalon_streaming};preview_set_connection_tag {cmd_demux.src2/cmd_mux_002.sink0} {qsys_mm.command};add_connection {cmd_demux.src3} {cmd_mux_003.sink0} {avalon_streaming};preview_set_connection_tag {cmd_demux.src3/cmd_mux_003.sink0} {qsys_mm.command};add_connection {rsp_demux.src0} {rsp_mux.sink0} {avalon_streaming};preview_set_connection_tag {rsp_demux.src0/rsp_mux.sink0} {qsys_mm.response};add_connection {rsp_demux_001.src0} {rsp_mux.sink1} {avalon_streaming};preview_set_connection_tag {rsp_demux_001.src0/rsp_mux.sink1} {qsys_mm.response};add_connection {rsp_demux_002.src0} {rsp_mux.sink2} {avalon_streaming};preview_set_connection_tag {rsp_demux_002.src0/rsp_mux.sink2} {qsys_mm.response};add_connection {rsp_demux_003.src0} {rsp_mux.sink3} {avalon_streaming};preview_set_connection_tag {rsp_demux_003.src0/rsp_mux.sink3} {qsys_mm.response};add_connection {master_0_master_limiter.cmd_valid} {cmd_demux.sink_valid} {avalon_streaming};add_connection {out0_reset_reset_bridge.out_reset} {master_0_master_translator.reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {out0_s1_translator.reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {out1_s1_translator.reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {in0_s1_translator.reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {in1_s1_translator.reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {master_0_master_agent.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {out0_s1_agent.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {out0_s1_agent_rsp_fifo.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {out1_s1_agent.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {out1_s1_agent_rsp_fifo.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {in0_s1_agent.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {in0_s1_agent_rsp_fifo.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {in1_s1_agent.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {in1_s1_agent_rsp_fifo.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {router.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {router_001.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {router_002.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {router_003.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {router_004.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {master_0_master_limiter.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {cmd_demux.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {cmd_mux.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {cmd_mux_001.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {cmd_mux_002.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {cmd_mux_003.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {rsp_demux.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {rsp_demux_001.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {rsp_demux_002.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {rsp_demux_003.clk_reset} {reset};add_connection {out0_reset_reset_bridge.out_reset} {rsp_mux.clk_reset} {reset};add_connection {clk_0_clk_clock_bridge.out_clk} {master_0_master_translator.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {out0_s1_translator.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {out1_s1_translator.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {in0_s1_translator.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {in1_s1_translator.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {master_0_master_agent.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {out0_s1_agent.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {out0_s1_agent_rsp_fifo.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {out1_s1_agent.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {out1_s1_agent_rsp_fifo.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {in0_s1_agent.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {in0_s1_agent_rsp_fifo.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {in1_s1_agent.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {in1_s1_agent_rsp_fifo.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {router.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {router_001.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {router_002.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {router_003.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {router_004.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {master_0_master_limiter.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {cmd_demux.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {rsp_mux.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {cmd_mux.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {rsp_demux.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {cmd_mux_001.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {rsp_demux_001.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {cmd_mux_002.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {rsp_demux_002.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {cmd_mux_003.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {rsp_demux_003.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {master_0_clk_reset_reset_bridge.clk} {clock};add_connection {clk_0_clk_clock_bridge.out_clk} {out0_reset_reset_bridge.clk} {clock};add_interface {clk_0_clk} {clock} {slave};set_interface_property {clk_0_clk} {EXPORT_OF} {clk_0_clk_clock_bridge.in_clk};add_interface {master_0_clk_reset_reset_bridge_in_reset} {reset} {slave};set_interface_property {master_0_clk_reset_reset_bridge_in_reset} {EXPORT_OF} {master_0_clk_reset_reset_bridge.in_reset};add_interface {out0_reset_reset_bridge_in_reset} {reset} {slave};set_interface_property {out0_reset_reset_bridge_in_reset} {EXPORT_OF} {out0_reset_reset_bridge.in_reset};add_interface {master_0_master} {avalon} {slave};set_interface_property {master_0_master} {EXPORT_OF} {master_0_master_translator.avalon_anti_master_0};add_interface {in0_s1} {avalon} {master};set_interface_property {in0_s1} {EXPORT_OF} {in0_s1_translator.avalon_anti_slave_0};add_interface {in1_s1} {avalon} {master};set_interface_property {in1_s1} {EXPORT_OF} {in1_s1_translator.avalon_anti_slave_0};add_interface {out0_s1} {avalon} {master};set_interface_property {out0_s1} {EXPORT_OF} {out0_s1_translator.avalon_anti_slave_0};add_interface {out1_s1} {avalon} {master};set_interface_property {out1_s1} {EXPORT_OF} {out1_s1_translator.avalon_anti_slave_0};set_module_assignment {interconnect_id.in0.s1} {0};set_module_assignment {interconnect_id.in1.s1} {1};set_module_assignment {interconnect_id.master_0.master} {0};set_module_assignment {interconnect_id.out0.s1} {2};set_module_assignment {interconnect_id.out1.s1} {3};]]> + false + true + true + true + + + java.lang.String + CYCLONEV + false + true + false + true + DEVICE_FAMILY + + + java.lang.String + 5CSEBA6U23I7 + false + true + false + true + DEVICE + + + java.lang.String + + false + true + false + true + DEVICE_SPEEDGRADE + + + java.lang.String + Cyclone V + false + true + false + true + DEVICE_FAMILY + + + boolean + false + false + true + true + true + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clock + false + + clk_0_clk_clk + Input + 1 + clk + + + + + + java.lang.String + clk_0_clk + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + DEASSERT + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + master_0_clk_reset_reset_bridge_in_reset_reset + Input + 1 + reset + + + + + + java.lang.String + clk_0_clk + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + DEASSERT + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + out0_reset_reset_bridge_in_reset_reset + Input + 1 + reset + + + + + + embeddedsw.configuration.isFlash + 0 + + + embeddedsw.configuration.isMemoryDevice + 0 + + + embeddedsw.configuration.isNonVolatileStorage + 0 + + + embeddedsw.configuration.isPrintableDevice + 0 + + + merlin.flow.avalon_universal_master_0 + avalon_universal_master_0 + + + com.altera.sopcmodel.avalon.AvalonConnectionPoint$AddressAlignment + DYNAMIC + false + true + true + true + + + int + 0 + false + true + false + true + + + java.math.BigInteger + 4294967296 + true + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + SYMBOLS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk_0_clk + false + true + true + true + + + java.lang.String + out0_reset_reset_bridge_in_reset + false + true + false + true + + + int + 8 + false + true + false + true + + + java.math.BigInteger + 0 + false + true + false + true + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + false + true + + + boolean + false + false + true + false + true + + + java.math.BigInteger + 0 + false + true + true + true + + + int + 0 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + int + 64 + false + false + true + true + + + int + 0 + false + false + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + int + 1 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + false + + master_0_master_address + Input + 32 + address + + + master_0_master_waitrequest + Output + 1 + waitrequest + + + master_0_master_byteenable + Input + 4 + byteenable + + + master_0_master_read + Input + 1 + read + + + master_0_master_readdata + Output + 32 + readdata + + + master_0_master_readdatavalid + Output + 1 + readdatavalid + + + master_0_master_write + Input + 1 + write + + + master_0_master_writedata + Input + 32 + writedata + + + + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + int + 0 + false + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk_0_clk + false + true + true + true + + + java.lang.String + out0_reset_reset_bridge_in_reset + false + true + true + true + + + int + 8 + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + int + 0 + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 32 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + false + true + + + int + 0 + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + true + + in0_s1_address + Output + 2 + address + + + in0_s1_readdata + Input + 32 + readdata + + + false + in0 + s1 + in0.s1 + 0 + 16 + + + + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + int + 0 + false + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk_0_clk + false + true + true + true + + + java.lang.String + out0_reset_reset_bridge_in_reset + false + true + true + true + + + int + 8 + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + int + 0 + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 32 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + false + true + + + int + 0 + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + true + + in1_s1_address + Output + 2 + address + + + in1_s1_readdata + Input + 32 + readdata + + + false + in1 + s1 + in1.s1 + 0 + 16 + + + + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + int + 0 + false + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk_0_clk + false + true + true + true + + + java.lang.String + out0_reset_reset_bridge_in_reset + false + true + true + true + + + int + 8 + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + int + 0 + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 32 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + false + true + + + int + 0 + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + true + + out0_s1_address + Output + 2 + address + + + out0_s1_write + Output + 1 + write + + + out0_s1_readdata + Input + 32 + readdata + + + out0_s1_writedata + Output + 32 + writedata + + + out0_s1_chipselect + Output + 1 + chipselect + + + false + out0 + s1 + out0.s1 + 0 + 16 + + + + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + int + 0 + false + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk_0_clk + false + true + true + true + + + java.lang.String + out0_reset_reset_bridge_in_reset + false + true + true + true + + + int + 8 + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + int + 0 + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 32 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + false + true + + + int + 0 + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + true + + out1_s1_address + Output + 2 + address + + + out1_s1_write + Output + 1 + write + + + out1_s1_readdata + Input + 32 + readdata + + + out1_s1_writedata + Output + 32 + writedata + + + out1_s1_chipselect + Output + 1 + chipselect + + + false + out1 + s1 + out1.s1 + 0 + 16 + + + + + + + int + 1 + false + true + true + true + + + java.lang.String + deassert + false + true + true + true + + + int + 2 + false + true + true + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + true + true + + + int + 3 + false + true + true + true + + + int + 1 + false + true + true + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + int + 0 + true + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + + + java.lang.String + + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + NONE + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + reset_in0 + Input + 1 + reset + + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clock + false + + clk + Input + 1 + clk + + + + + + java.lang.String + clk + false + true + true + true + + + java.lang.String + + false + true + true + true + + + [Ljava.lang.String; + reset_in0 + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + DEASSERT + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + true + + reset_out + Output + 1 + reset + + + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk + out0 + clk + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk + master_0 + clk + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk + out1 + clk + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk + in0 + clk + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk + in1 + clk + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk_reset + master_0 + clk_reset + + + + int + 1 + false + true + true + true + + + java.math.BigInteger + 0x0000 + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + master_0 + master + mm_interconnect_0 + master_0_master + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk + mm_interconnect_0 + clk_0_clk + + + + int + 1 + false + true + true + true + + + java.math.BigInteger + 0x0000 + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + mm_interconnect_0 + out0_s1 + out0 + s1 + + + + int + 1 + false + true + true + true + + + java.math.BigInteger + 0x0000 + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + mm_interconnect_0 + out1_s1 + out1 + s1 + + + + int + 1 + false + true + true + true + + + java.math.BigInteger + 0x0000 + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + mm_interconnect_0 + in0_s1 + in0 + s1 + + + + int + 1 + false + true + true + true + + + java.math.BigInteger + 0x0000 + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + mm_interconnect_0 + in1_s1 + in1 + s1 + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + rst_controller + reset_out + in0 + reset + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + rst_controller + reset_out + in1 + reset + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + rst_controller + reset_out + out0 + reset + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + rst_controller + reset_out + out1 + reset + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + rst_controller + reset_out + mm_interconnect_0 + master_0_clk_reset_reset_bridge_in_reset + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + rst_controller + reset_out + mm_interconnect_0 + out0_reset_reset_bridge_in_reset + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk_reset + rst_controller + reset_in0 + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk + rst_controller + clk + + + 1 + clock_source + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IModule + Clock Source + 20.1 + + + 1 + clock_sink + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Clock Input + 20.1 + + + 1 + reset_sink + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Reset Input + 20.1 + + + 1 + clock_source + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Clock Output + 20.1 + + + 1 + reset_source + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Reset Output + 20.1 + + + 4 + altera_avalon_pio + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IModule + PIO (Parallel I/O) Intel FPGA IP + 20.1 + + + 7 + clock_sink + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Clock Input + 20.1 + + + 8 + reset_sink + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Reset Input + 20.1 + + + 5 + avalon_slave + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Avalon Memory Mapped Slave + 20.1 + + + 4 + conduit_end + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Conduit + 20.1 + + + 1 + altera_jtag_avalon_master + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IModule + JTAG to Avalon Master Bridge + 20.1 + + + 5 + avalon_master + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Avalon Memory Mapped Master + 20.1 + + + 2 + reset_source + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Reset Output + 20.1 + + + 1 + altera_mm_interconnect + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IModule + MM Interconnect + 20.1 + + + 1 + altera_reset_controller + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IModule + Merlin Reset Controller + 20.1 + + + 5 + clock + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IConnection + Clock Connection + 20.1 + + + 1 + reset + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IConnection + Reset Connection + 20.1 + + + 5 + avalon + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IConnection + Avalon Memory Mapped Connection + 20.1 + + + 2 + clock + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IConnection + Clock Connection + 20.1 + + + 7 + reset + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IConnection + Reset Connection + 20.1 + + 20.1 711 + AC1F6B144A7E0000017FE475D337 + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/jtag_io.qip b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/jtag_io.qip new file mode 100755 index 0000000..7f49296 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/jtag_io.qip @@ -0,0 +1,786 @@ +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_TOOL_NAME "Qsys" +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -library "jtag_io" -name SOPCINFO_FILE [file join $::quartus(qip_path) "../../jtag_io.sopcinfo"] +set_global_assignment -entity "jtag_io" -library "jtag_io" -name SLD_INFO "QSYS_NAME jtag_io HAS_SOPCINFO 1 GENERATION_ID 1648805399" +set_global_assignment -library "jtag_io" -name MISC_FILE [file join $::quartus(qip_path) "../jtag_io.cmp"] +set_global_assignment -library "jtag_io" -name SLD_FILE [file join $::quartus(qip_path) "jtag_io.regmap"] +set_global_assignment -library "jtag_io" -name SLD_FILE [file join $::quartus(qip_path) "jtag_io.debuginfo"] +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_TARGETED_DEVICE_FAMILY "Cyclone V" +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_QSYS_MODE "SYSTEM" +set_global_assignment -name SYNTHESIS_ONLY_QIP ON +set_global_assignment -library "jtag_io" -name MISC_FILE [file join $::quartus(qip_path) "../../jtag_io.qsys"] +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_COMPONENT_NAME "anRhZ19pbw==" +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "anRhZ19pbw==" +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "On" +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_COMPONENT_VERSION "MS4w" +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19HRU5FUkFUSU9OX0lE::MTY0ODgwNTM5OQ==::QXV0byBHRU5FUkFUSU9OX0lE" +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19ERVZJQ0VfRkFNSUxZ::Q3ljbG9uZSBW::QXV0byBERVZJQ0VfRkFNSUxZ" +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19ERVZJQ0U=::NUNTRUJBNlUyM0k3::QXV0byBERVZJQ0U=" +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19ERVZJQ0VfU1BFRURHUkFERQ==::Nw==::QXV0byBERVZJQ0VfU1BFRURHUkFERQ==" +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19DTEtfQ0xPQ0tfUkFURQ==::LTE=::QXV0byBDTE9DS19SQVRF" +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19DTEtfQ0xPQ0tfRE9NQUlO::LTE=::QXV0byBDTE9DS19ET01BSU4=" +set_global_assignment -entity "jtag_io" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19DTEtfUkVTRVRfRE9NQUlO::LTE=::QXV0byBSRVNFVF9ET01BSU4=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_NAME "YWx0ZXJhX3Jlc2V0X2NvbnRyb2xsZXI=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "TWVybGluIFJlc2V0IENvbnRyb2xsZXI=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "Rm9yIHN5c3RlbXMgd2l0aCBtdWx0aXBsZSByZXNldCBpbnB1dHMsIHRoZSBNZXJsaW4gUmVzZXQgQ29udHJvbGxlciBPUnMgYWxsIHJlc2V0IGlucHV0cyBhbmQgZ2VuZXJhdGVzIGEgc2luZ2xlIHJlc2V0IG91dHB1dC4=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TlVNX1JFU0VUX0lOUFVUUw==::MQ==::TnVtYmVyIG9mIGlucHV0cw==" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "T1VUUFVUX1JFU0VUX1NZTkNfRURHRVM=::ZGVhc3NlcnQ=::T3V0cHV0IFJlc2V0IFN5bmNocm9ub3VzIEVkZ2Vz" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1lOQ19ERVBUSA==::Mg==::U3luY2hyb25pemVyIGRlcHRo" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UkVTRVRfUkVRVUVTVF9QUkVTRU5U::MA==::UmVzZXQgcmVxdWVzdCBsb2dpYyBlbmFibGU=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UkVTRVRfUkVRX1dBSVRfVElNRQ==::MQ==::UmVzZXQgcmVxdWVzdCB3YWl0IHRpbWU=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUlOX1JTVF9BU1NFUlRJT05fVElNRQ==::Mw==::TWluaW11bSByZXNldCBhc3NlcnRpb24gdGltZQ==" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UkVTRVRfUkVRX0VBUkxZX0RTUlRfVElNRQ==::MQ==::UmVzZXQgcmVxdWVzdCBkZWFzc2VydCB0aW1pbmc=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU4w::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcG9ydCByZXNldF9pbjA=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU4x::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcG9ydCByZXNldF9pbjE=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU4y::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcG9ydCByZXNldF9pbjI=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU4z::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcG9ydCByZXNldF9pbjM=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU40::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcG9ydCByZXNldF9pbjQ=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU41::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcG9ydCByZXNldF9pbjU=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU42::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcG9ydCByZXNldF9pbjY=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU43::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcG9ydCByZXNldF9pbjc=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU44::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcG9ydCByZXNldF9pbjg=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU45::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcG9ydCByZXNldF9pbjk=" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU4xMA==::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcG9ydCByZXNldF9pbjEw" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU4xMQ==::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcG9ydCByZXNldF9pbjEx" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU4xMg==::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcG9ydCByZXNldF9pbjEy" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU4xMw==::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcG9ydCByZXNldF9pbjEz" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU4xNA==::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcG9ydCByZXNldF9pbjE0" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU4xNQ==::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcG9ydCByZXNldF9pbjE1" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFU0VUX1JFUVVFU1RfSU5QVVQ=::MA==::RW5hYmxlIHJlc2V0X3JlcSBmb3IgcmVzZXRfaW5wdXRz" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QURBUFRfUkVTRVRfUkVRVUVTVA==::MA==::T25seSBhZGFwdCBvbmx5IHJlc2V0IHJlcXVlc3Q=" +set_global_assignment -entity "jtag_io_mm_interconnect_0" -library "jtag_io" -name IP_COMPONENT_NAME "anRhZ19pb19tbV9pbnRlcmNvbm5lY3RfMA==" +set_global_assignment -entity "jtag_io_mm_interconnect_0" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "TU0gSW50ZXJjb25uZWN0" +set_global_assignment -entity "jtag_io_mm_interconnect_0" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0" -library "jtag_io" -name IP_COMPONENT_INTERNAL "On" +set_global_assignment -entity "jtag_io_mm_interconnect_0" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "jtag_io_mm_interconnect_0" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "jtag_io_mm_interconnect_0" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "TU0gSW50ZXJjb25uZWN0" +set_global_assignment -entity "jtag_io_mm_interconnect_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19ERVZJQ0VfRkFNSUxZ::Q3ljbG9uZSBW::QXV0byBERVZJQ0VfRkFNSUxZ" +set_global_assignment -entity "jtag_io_mm_interconnect_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19ERVZJQ0U=::NUNTRUJBNlUyM0k3::QXV0byBERVZJQ0U=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_NAME "anRhZ19pb19tbV9pbnRlcmNvbm5lY3RfMF9hdmFsb25fc3RfYWRhcHRlcg==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "QXZhbG9uLVNUIEFkYXB0ZXI=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "QWRhcHQgbWlzbWF0Y2hlZCBBdmFsb24tU1QgZW5kcG9pbnRz" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5CaXRzUGVyU3ltYm9s::MzQ=::U3ltYm9sIFdpZHRo" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VQYWNrZXRz::MA==::VXNlIFBhY2tldA==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5EYXRhV2lkdGg=::MzQ=::U291cmNlIERhdGEgV2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5NYXhDaGFubmVs::MA==::U291cmNlIE1heCBDaGFubmVs" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5DaGFubmVsV2lkdGg=::MA==::U291cmNlIENoYW5uZWwgUG9ydCBXaWR0aA==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5FcnJvcldpZHRo::MA==::U291cmNlIEVycm9yIFBvcnQgV2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VFbXB0eVBvcnQ=::MA==::U291cmNlIFVzZXMgRW1wdHkgUG9ydA==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5FbXB0eVdpZHRo::MQ==::U291cmNlIEVtcHR5IFBvcnQgV2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VWYWxpZA==::MQ==::U291cmNlIFVzZXMgVmFsaWQgUG9ydA==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VSZWFkeQ==::MQ==::U291cmNlIFVzZXMgUmVhZHkgUG9ydA==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5SZWFkeUxhdGVuY3k=::MA==::U291cmNlIFJlYWR5IExhdGVuY3k=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0RGF0YVdpZHRo::MzQ=::U2luayBEYXRhIFdpZHRo" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0TWF4Q2hhbm5lbA==::MA==::U2luayBNYXggQ2hhbm5lbA==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0Q2hhbm5lbFdpZHRo::MA==::U2luayBDaGFubmVsIFBvcnQgV2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0RXJyb3JXaWR0aA==::MQ==::U2luayBFcnJvciBQb3J0IFdpZHRo" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0VXNlRW1wdHlQb3J0::MA==::U2luayBVc2VzIEVtcHR5IFBvcnQ=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0RW1wdHlXaWR0aA==::MQ==::U2luayBFbXB0eSBQb3J0IFdpZHRo" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0VXNlVmFsaWQ=::MQ==::U2luayBVc2VzIFZhbGlkIFBvcnQ=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0VXNlUmVhZHk=::MQ==::U2luayBVc2VzIFJlYWR5IFBvcnQ=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0UmVhZHlMYXRlbmN5::MA==::U2luayBSZWFkeSBMYXRlbmN5" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19ERVZJQ0VfRkFNSUxZ::Q3ljbG9uZSBW::QXV0byBERVZJQ0VfRkFNSUxZ" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19ERVZJQ0U=::NUNTRUJBNlUyM0k3::QXV0byBERVZJQ0U=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_COMPONENT_NAME "anRhZ19pb19tbV9pbnRlcmNvbm5lY3RfMF9hdmFsb25fc3RfYWRhcHRlcl9lcnJvcl9hZGFwdGVyXzA=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "QXZhbG9uLVNUIEVycm9yIEFkYXB0ZXI=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5DaGFubmVsV2lkdGg=::MA==::Q2hhbm5lbCBTaWduYWwgV2lkdGggKGJpdHMp" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5NYXhDaGFubmVs::MA==::TWF4IENoYW5uZWw=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5CaXRzUGVyU3ltYm9s::MzQ=::RGF0YSBCaXRzIFBlciBTeW1ib2w=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VQYWNrZXRz::ZmFsc2U=::SW5jbHVkZSBQYWNrZXQgU3VwcG9ydA==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VFbXB0eQ==::ZmFsc2U=::aW5Vc2VFbXB0eQ==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5TeW1ib2xzUGVyQmVhdA==::MQ==::RGF0YSBTeW1ib2xzIFBlciBCZWF0" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VSZWFkeQ==::dHJ1ZQ==::U3VwcG9ydCBCYWNrcHJlc3N1cmUgd2l0aCB0aGUgcmVhZHkgc2lnbmFs" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5SZWFkeUxhdGVuY3k=::MA==::UmVhZHkgTGF0ZW5jeQ==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5FcnJvcldpZHRo::MA==::RXJyb3IgU2lnbmFsIFdpZHRoIChiaXRzKQ==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0RXJyb3JXaWR0aA==::MQ==::RXJyb3IgU2lnbmFsIFdpZHRoIChiaXRzKQ==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_COMPONENT_NAME "anRhZ19pb19tbV9pbnRlcmNvbm5lY3RfMF9yc3BfbXV4" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "TWVtb3J5IE1hcHBlZCBNdWx0aXBsZXhlcg==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "QXJiaXRyYXRlcyBiZXR3ZWVuIHJlcXVlc3RpbmcgbWFzdGVycyB1c2luZyBhbiBlcXVhbCBzaGFyZSwgcm91bmQtcm9iaW4gYWxnb3JpdGhtLiBUaGUgYXJiaXRyYXRpb24gc2NoZW1lIGNhbiBiZSBjaGFuZ2VkIHRvIHdlaWdodGVkIHJvdW5kLXJvYmluIGJ5IHNwZWNpZnlpbmcgYSByZWxhdGl2ZSBudW1iZXIgb2YgYXJiaXRyYXRpb24gc2hhcmVzIHRvIHRoZSBtYXN0ZXJzIHRoYXQgYWNjZXNzIGEgcGFydGljdWxhciBzbGF2ZS4=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfREFUQV9X::MTA0::U3RyZWFtaW5nIGRhdGEgd2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfQ0hBTk5FTF9X::NA==::U3RyZWFtaW5nIGNoYW5uZWwgd2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TlVNX0lOUFVUUw==::NA==::TnVtYmVyIG9mIG11eCBpbnB1dHM=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UElQRUxJTkVfQVJC::MA==::UGlwZWxpbmVkIGFyYml0cmF0aW9u" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0VYVEVSTkFMX0FSQg==::MA==::VXNlIGV4dGVybmFsIGFyYml0cmF0aW9u" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX0xPQ0s=::NzI=::UGFja2V0IGxvY2sgdHJhbnNhY3Rpb24gZmllbGQgaW5kZXg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVJCSVRSQVRJT05fU0NIRU1F::bm8tYXJi::QXJiaXRyYXRpb24gc2NoZW1l" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVJCSVRSQVRJT05fU0hBUkVT::MSwxLDEsMQ==::QXJiaXRyYXRpb24gc2hhcmVz" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUVSTElOX1BBQ0tFVF9GT1JNQVQ=::b3JpX2J1cnN0X3NpemUoMTAzOjEwMSkgcmVzcG9uc2Vfc3RhdHVzKDEwMDo5OSkgY2FjaGUoOTg6OTUpIHByb3RlY3Rpb24oOTQ6OTIpIHRocmVhZF9pZCg5MSkgZGVzdF9pZCg5MDo4OSkgc3JjX2lkKDg4Ojg3KSBxb3MoODYpIGJlZ2luX2J1cnN0KDg1KSBkYXRhX3NpZGViYW5kKDg0KSBhZGRyX3NpZGViYW5kKDgzKSBidXJzdF90eXBlKDgyOjgxKSBidXJzdF9zaXplKDgwOjc4KSBidXJzdHdyYXAoNzcpIGJ5dGVfY250KDc2Ojc0KSB0cmFuc19leGNsdXNpdmUoNzMpIHRyYW5zX2xvY2soNzIpIHRyYW5zX3JlYWQoNzEpIHRyYW5zX3dyaXRlKDcwKSB0cmFuc19wb3N0ZWQoNjkpIHRyYW5zX2NvbXByZXNzZWRfcmVhZCg2OCkgYWRkcig2NzozNikgYnl0ZWVuKDM1OjMyKSBkYXRhKDMxOjAp::TWVybGluIHBhY2tldCBmb3JtYXQgZGVzY3JpcHRvcg==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_COMPONENT_NAME "anRhZ19pb19tbV9pbnRlcmNvbm5lY3RfMF9yc3BfZGVtdXg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "TWVtb3J5IE1hcHBlZCBEZW11bHRpcGxleGVy" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "QWNjZXB0cyBjaGFubmVsaXplZCBkYXRhIG9uIGl0cyBzaW5rIGludGVyZmFjZSBhbmQgdHJhbnNtaXRzIHRoZSBkYXRhIG9uIG9uZSBvZiBpdHMgc291cmNlIGludGVyZmFjZXMu" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfREFUQV9X::MTA0::UGFja2V0IGRhdGEgd2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfQ0hBTk5FTF9X::NA==::U3RyZWFtaW5nIGNoYW5uZWwgd2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TlVNX09VVFBVVFM=::MQ==::TnVtYmVyIG9mIGRlbXV4IG91dHB1dHM=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VkFMSURfV0lEVEg=::MQ==::VmFsaWQgd2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUVSTElOX1BBQ0tFVF9GT1JNQVQ=::b3JpX2J1cnN0X3NpemUoMTAzOjEwMSkgcmVzcG9uc2Vfc3RhdHVzKDEwMDo5OSkgY2FjaGUoOTg6OTUpIHByb3RlY3Rpb24oOTQ6OTIpIHRocmVhZF9pZCg5MSkgZGVzdF9pZCg5MDo4OSkgc3JjX2lkKDg4Ojg3KSBxb3MoODYpIGJlZ2luX2J1cnN0KDg1KSBkYXRhX3NpZGViYW5kKDg0KSBhZGRyX3NpZGViYW5kKDgzKSBidXJzdF90eXBlKDgyOjgxKSBidXJzdF9zaXplKDgwOjc4KSBidXJzdHdyYXAoNzcpIGJ5dGVfY250KDc2Ojc0KSB0cmFuc19leGNsdXNpdmUoNzMpIHRyYW5zX2xvY2soNzIpIHRyYW5zX3JlYWQoNzEpIHRyYW5zX3dyaXRlKDcwKSB0cmFuc19wb3N0ZWQoNjkpIHRyYW5zX2NvbXByZXNzZWRfcmVhZCg2OCkgYWRkcig2NzozNikgYnl0ZWVuKDM1OjMyKSBkYXRhKDMxOjAp::TWVybGluIHBhY2tldCBmb3JtYXQgZGVzY3JpcHRvcg==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19ERVZJQ0VfRkFNSUxZ::Q3ljbG9uZSBW::QXV0byBERVZJQ0VfRkFNSUxZ" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19DTEtfQ0xPQ0tfUkFURQ==::NTAwMDAwMDA=::QXV0byBDTE9DS19SQVRF" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_COMPONENT_NAME "anRhZ19pb19tbV9pbnRlcmNvbm5lY3RfMF9jbWRfbXV4" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "TWVtb3J5IE1hcHBlZCBNdWx0aXBsZXhlcg==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "QXJiaXRyYXRlcyBiZXR3ZWVuIHJlcXVlc3RpbmcgbWFzdGVycyB1c2luZyBhbiBlcXVhbCBzaGFyZSwgcm91bmQtcm9iaW4gYWxnb3JpdGhtLiBUaGUgYXJiaXRyYXRpb24gc2NoZW1lIGNhbiBiZSBjaGFuZ2VkIHRvIHdlaWdodGVkIHJvdW5kLXJvYmluIGJ5IHNwZWNpZnlpbmcgYSByZWxhdGl2ZSBudW1iZXIgb2YgYXJiaXRyYXRpb24gc2hhcmVzIHRvIHRoZSBtYXN0ZXJzIHRoYXQgYWNjZXNzIGEgcGFydGljdWxhciBzbGF2ZS4=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfREFUQV9X::MTA0::U3RyZWFtaW5nIGRhdGEgd2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfQ0hBTk5FTF9X::NA==::U3RyZWFtaW5nIGNoYW5uZWwgd2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TlVNX0lOUFVUUw==::MQ==::TnVtYmVyIG9mIG11eCBpbnB1dHM=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UElQRUxJTkVfQVJC::MQ==::UGlwZWxpbmVkIGFyYml0cmF0aW9u" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0VYVEVSTkFMX0FSQg==::MA==::VXNlIGV4dGVybmFsIGFyYml0cmF0aW9u" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX0xPQ0s=::NzI=::UGFja2V0IGxvY2sgdHJhbnNhY3Rpb24gZmllbGQgaW5kZXg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVJCSVRSQVRJT05fU0NIRU1F::cm91bmQtcm9iaW4=::QXJiaXRyYXRpb24gc2NoZW1l" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVJCSVRSQVRJT05fU0hBUkVT::MQ==::QXJiaXRyYXRpb24gc2hhcmVz" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUVSTElOX1BBQ0tFVF9GT1JNQVQ=::b3JpX2J1cnN0X3NpemUoMTAzOjEwMSkgcmVzcG9uc2Vfc3RhdHVzKDEwMDo5OSkgY2FjaGUoOTg6OTUpIHByb3RlY3Rpb24oOTQ6OTIpIHRocmVhZF9pZCg5MSkgZGVzdF9pZCg5MDo4OSkgc3JjX2lkKDg4Ojg3KSBxb3MoODYpIGJlZ2luX2J1cnN0KDg1KSBkYXRhX3NpZGViYW5kKDg0KSBhZGRyX3NpZGViYW5kKDgzKSBidXJzdF90eXBlKDgyOjgxKSBidXJzdF9zaXplKDgwOjc4KSBidXJzdHdyYXAoNzcpIGJ5dGVfY250KDc2Ojc0KSB0cmFuc19leGNsdXNpdmUoNzMpIHRyYW5zX2xvY2soNzIpIHRyYW5zX3JlYWQoNzEpIHRyYW5zX3dyaXRlKDcwKSB0cmFuc19wb3N0ZWQoNjkpIHRyYW5zX2NvbXByZXNzZWRfcmVhZCg2OCkgYWRkcig2NzozNikgYnl0ZWVuKDM1OjMyKSBkYXRhKDMxOjAp::TWVybGluIHBhY2tldCBmb3JtYXQgZGVzY3JpcHRvcg==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_COMPONENT_NAME "anRhZ19pb19tbV9pbnRlcmNvbm5lY3RfMF9jbWRfZGVtdXg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "TWVtb3J5IE1hcHBlZCBEZW11bHRpcGxleGVy" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "QWNjZXB0cyBjaGFubmVsaXplZCBkYXRhIG9uIGl0cyBzaW5rIGludGVyZmFjZSBhbmQgdHJhbnNtaXRzIHRoZSBkYXRhIG9uIG9uZSBvZiBpdHMgc291cmNlIGludGVyZmFjZXMu" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfREFUQV9X::MTA0::UGFja2V0IGRhdGEgd2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfQ0hBTk5FTF9X::NA==::U3RyZWFtaW5nIGNoYW5uZWwgd2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TlVNX09VVFBVVFM=::NA==::TnVtYmVyIG9mIGRlbXV4IG91dHB1dHM=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VkFMSURfV0lEVEg=::NA==::VmFsaWQgd2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUVSTElOX1BBQ0tFVF9GT1JNQVQ=::b3JpX2J1cnN0X3NpemUoMTAzOjEwMSkgcmVzcG9uc2Vfc3RhdHVzKDEwMDo5OSkgY2FjaGUoOTg6OTUpIHByb3RlY3Rpb24oOTQ6OTIpIHRocmVhZF9pZCg5MSkgZGVzdF9pZCg5MDo4OSkgc3JjX2lkKDg4Ojg3KSBxb3MoODYpIGJlZ2luX2J1cnN0KDg1KSBkYXRhX3NpZGViYW5kKDg0KSBhZGRyX3NpZGViYW5kKDgzKSBidXJzdF90eXBlKDgyOjgxKSBidXJzdF9zaXplKDgwOjc4KSBidXJzdHdyYXAoNzcpIGJ5dGVfY250KDc2Ojc0KSB0cmFuc19leGNsdXNpdmUoNzMpIHRyYW5zX2xvY2soNzIpIHRyYW5zX3JlYWQoNzEpIHRyYW5zX3dyaXRlKDcwKSB0cmFuc19wb3N0ZWQoNjkpIHRyYW5zX2NvbXByZXNzZWRfcmVhZCg2OCkgYWRkcig2NzozNikgYnl0ZWVuKDM1OjMyKSBkYXRhKDMxOjAp::TWVybGluIHBhY2tldCBmb3JtYXQgZGVzY3JpcHRvcg==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19ERVZJQ0VfRkFNSUxZ::Q3ljbG9uZSBW::QXV0byBERVZJQ0VfRkFNSUxZ" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19DTEtfQ0xPQ0tfUkFURQ==::NTAwMDAwMDA=::QXV0byBDTE9DS19SQVRF" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_NAME "YWx0ZXJhX21lcmxpbl90cmFmZmljX2xpbWl0ZXI=" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "TWVtb3J5IE1hcHBlZCBUcmFmZmljIExpbWl0ZXI=" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "RW5zdXJlcyB0aGUgcmVzcG9uc2VzIGFycml2ZSBpbiBvcmRlciwgc2ltcGxpZnlpbmcgdGhlIFFzeXMgcmVzcG9uc2UgbmV0d29yay4=" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0RFU1RfSURfSA==::OTA=::UGFja2V0IGRlc3RpbmF0aW9uIGlkIGZpZWxkIGluZGV4IC0gaGlnaA==" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0RFU1RfSURfTA==::ODk=::UGFja2V0IGRlc3RpbmF0aW9uIGlkIGZpZWxkIGluZGV4IC0gbG93" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1NSQ19JRF9I::ODg=::UGFja2V0IHNvdXJjZSBpZCBmaWVsZCBpbmRleCAtIGhpZ2g=" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1NSQ19JRF9M::ODc=::UGFja2V0IHNvdXJjZSBpZCBmaWVsZCBpbmRleCAtIGxvdw==" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JZVEVfQ05UX0g=::NzY=::UGFja2V0IGJ5dGUgY291bnQgZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JZVEVfQ05UX0w=::NzQ=::UGFja2V0IGJ5dGUgY291bnQgZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JZVEVFTl9I::MzU=::UGFja2V0IGJ5dGVlbmFibGUgZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JZVEVFTl9M::MzI=::UGFja2V0IGJ5dGVlbmFibGUgZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX1BPU1RFRA==::Njk=::UGFja2V0IHBvc3RlZCB0cmFuc2FjdGlvbiBmaWVsZCBpbmRleA==" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX1dSSVRF::NzA=::UGFja2V0IHdyaXRlIHRyYW5zYWN0aW9uIGZpZWxkIGluZGV4" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RIUkVBRF9JRF9I::OTE=::UGFja2V0IHRocmVhZCBJRCBmaWVsZCBpbmRleCBNU0I=" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RIUkVBRF9JRF9M::OTE=::UGFja2V0IHRocmVhZCBJRCBmaWVsZCBpbmRleCBMU0I=" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUFYX0JVUlNUX0xFTkdUSA==::MQ==::TWF4aW11bSBidXJzdCBsZW5ndGg=" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUFYX09VVFNUQU5ESU5HX1JFU1BPTlNFUw==::MQ==::TWF4aW11bSBvdXRzdGFuZGluZyByZXNwb25zZXM=" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UElQRUxJTkVE::MA==::UGlwZWxpbmU=" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfREFUQV9X::MTA0::U3RyZWFtaW5nIGRhdGEgd2lkdGg=" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfQ0hBTk5FTF9X::NA==::U3RyZWFtaW5nIGNoYW5uZWwgd2lkdGg=" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VkFMSURfV0lEVEg=::NA==::VmFsaWQgd2lkdGg=" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RU5GT1JDRV9PUkRFUg==::MQ==::RW5mb3JjZSBvcmRlcg==" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UFJFVkVOVF9IQVpBUkRT::MA==::UHJldmVudCBoYXphcmRz" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1VQUE9SVFNfUE9TVEVEX1dSSVRFUw==::MQ==::SGF6YXJkIHByZXZlbnRpb246IHBvc3RlZCB3cml0ZSBzdXBwb3J0" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1VQUE9SVFNfTk9OUE9TVEVEX1dSSVRFUw==::MA==::SGF6YXJkIHByZXZlbnRpb246IG5vbi1wb3N0ZWQgd3JpdGUgc3VwcG9ydA==" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUVSTElOX1BBQ0tFVF9GT1JNQVQ=::b3JpX2J1cnN0X3NpemUoMTAzOjEwMSkgcmVzcG9uc2Vfc3RhdHVzKDEwMDo5OSkgY2FjaGUoOTg6OTUpIHByb3RlY3Rpb24oOTQ6OTIpIHRocmVhZF9pZCg5MSkgZGVzdF9pZCg5MDo4OSkgc3JjX2lkKDg4Ojg3KSBxb3MoODYpIGJlZ2luX2J1cnN0KDg1KSBkYXRhX3NpZGViYW5kKDg0KSBhZGRyX3NpZGViYW5kKDgzKSBidXJzdF90eXBlKDgyOjgxKSBidXJzdF9zaXplKDgwOjc4KSBidXJzdHdyYXAoNzcpIGJ5dGVfY250KDc2Ojc0KSB0cmFuc19leGNsdXNpdmUoNzMpIHRyYW5zX2xvY2soNzIpIHRyYW5zX3JlYWQoNzEpIHRyYW5zX3dyaXRlKDcwKSB0cmFuc19wb3N0ZWQoNjkpIHRyYW5zX2NvbXByZXNzZWRfcmVhZCg2OCkgYWRkcig2NzozNikgYnl0ZWVuKDM1OjMyKSBkYXRhKDMxOjAp::TWVybGluIHBhY2tldCBmb3JtYXQgZGVzY3JpcHRvcg==" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UkVPUkRFUg==::MA==::RW5hYmxlIHJlb3JkZXIgYnVmZmVy" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_NAME "anRhZ19pb19tbV9pbnRlcmNvbm5lY3RfMF9yb3V0ZXJfMDAx" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "TWVtb3J5IE1hcHBlZCBSb3V0ZXI=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "Um91dGVzIGNvbW1hbmQgcGFja2V0cyBmcm9tIHRoZSBtYXN0ZXIgdG8gdGhlIHNsYXZlIGFuZCByZXNwb25zZSBwYWNrZXRzIGZyb20gdGhlIHNsYXZlIHRvIHRoZSBtYXN0ZXIu" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "REVTVElOQVRJT05fSUQ=::MA==::RGVzdGluYXRpb24gSUQ=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Q0hBTk5FTF9JRA==::MQ==::QmluYXJ5IENoYW5uZWwgU3RyaW5n" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VFlQRV9PRl9UUkFOU0FDVElPTg==::Ym90aA==::VHlwZSBvZiBUcmFuc2FjdGlvbg==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RBUlRfQUREUkVTUw==::MHgw::U3RhcnQgYWRkcmVzc2VzIChpbmNsdXNpdmUp" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RU5EX0FERFJFU1M=::MHgw::RW5kIGFkZHJlc3NlcyAoZXhjbHVzaXZlKQ==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Tk9OX1NFQ1VSRURfVEFH::MQ==::Tm9uLXNlY3VyZWQgdGFncw==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U0VDVVJFRF9SQU5HRV9QQUlSUw==::MA==::TnVtYmVyIG9mIHNlY3VyZWQgcmFuZ2UgcGFpcnM=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U0VDVVJFRF9SQU5HRV9MSVNU::MA==::U2VjdXJlZCByYW5nZSBwYWlycw==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0FERFJfSA==::Njc=::UGFja2V0IGFkZHJlc3MgZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0FERFJfTA==::MzY=::UGFja2V0IGFkZHJlc3MgZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1BST1RFQ1RJT05fSA==::OTQ=::UGFja2V0IEFYSSBwcm90ZWN0aW9uIGZpZWxkIGluZGV4IC0gaGlnaA==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1BST1RFQ1RJT05fTA==::OTI=::UGFja2V0IEFYSSBwcm90ZWN0aW9uIGZpZWxkIGluZGV4IC0gbG93" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0RFU1RfSURfSA==::OTA=::UGFja2V0IGRlc3RpbmF0aW9uIGlkIGZpZWxkIGluZGV4IC0gaGlnaA==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0RFU1RfSURfTA==::ODk=::UGFja2V0IGRlc3RpbmF0aW9uIGlkIGZpZWxkIGluZGV4IC0gbG93" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX1dSSVRF::NzA=::UGFja2V0IHdyaXRlIHRyYW5zYWN0aW9uIGZpZWxkIGluZGV4" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX1JFQUQ=::NzE=::UGFja2V0IHJlYWQgdHJhbnNhY3Rpb24gZmllbGQgaW5kZXg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfREFUQV9X::MTA0::U3RyZWFtaW5nIGRhdGEgd2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfQ0hBTk5FTF9X::NA==::U3RyZWFtaW5nIGNoYW5uZWwgd2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U0xBVkVTX0lORk8=::MDoxOjB4MDoweDA6Ym90aDoxOjA6MDox::U0xBVkVTX0lORk8=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "REVDT0RFUl9UWVBF::MQ==::RGVjb2RlciB0eXBl" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "REVGQVVMVF9DSEFOTkVM::MA==::RGVmYXVsdCBjaGFubmVs" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "REVGQVVMVF9XUl9DSEFOTkVM::LTE=::RGVmYXVsdCB3ciBjaGFubmVs" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "REVGQVVMVF9SRF9DSEFOTkVM::LTE=::RGVmYXVsdCByZCBjaGFubmVs" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "REVGQVVMVF9ERVNUSUQ=::MA==::RGVmYXVsdCBkZXN0aW5hdGlvbiBJRA==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUVSTElOX1BBQ0tFVF9GT1JNQVQ=::b3JpX2J1cnN0X3NpemUoMTAzOjEwMSkgcmVzcG9uc2Vfc3RhdHVzKDEwMDo5OSkgY2FjaGUoOTg6OTUpIHByb3RlY3Rpb24oOTQ6OTIpIHRocmVhZF9pZCg5MSkgZGVzdF9pZCg5MDo4OSkgc3JjX2lkKDg4Ojg3KSBxb3MoODYpIGJlZ2luX2J1cnN0KDg1KSBkYXRhX3NpZGViYW5kKDg0KSBhZGRyX3NpZGViYW5kKDgzKSBidXJzdF90eXBlKDgyOjgxKSBidXJzdF9zaXplKDgwOjc4KSBidXJzdHdyYXAoNzcpIGJ5dGVfY250KDc2Ojc0KSB0cmFuc19leGNsdXNpdmUoNzMpIHRyYW5zX2xvY2soNzIpIHRyYW5zX3JlYWQoNzEpIHRyYW5zX3dyaXRlKDcwKSB0cmFuc19wb3N0ZWQoNjkpIHRyYW5zX2NvbXByZXNzZWRfcmVhZCg2OCkgYWRkcig2NzozNikgYnl0ZWVuKDM1OjMyKSBkYXRhKDMxOjAp::TWVybGluIHBhY2tldCBmb3JtYXQgZGVzY3JpcHRvcg==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUVNT1JZX0FMSUFTSU5HX0RFQ09ERQ==::MA==::TWVtb3J5IEFsaWFzaW5nIERlY29kZQ==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_NAME "anRhZ19pb19tbV9pbnRlcmNvbm5lY3RfMF9yb3V0ZXI=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "TWVtb3J5IE1hcHBlZCBSb3V0ZXI=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "Um91dGVzIGNvbW1hbmQgcGFja2V0cyBmcm9tIHRoZSBtYXN0ZXIgdG8gdGhlIHNsYXZlIGFuZCByZXNwb25zZSBwYWNrZXRzIGZyb20gdGhlIHNsYXZlIHRvIHRoZSBtYXN0ZXIu" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "REVTVElOQVRJT05fSUQ=::MiwzLDAsMQ==::RGVzdGluYXRpb24gSUQ=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Q0hBTk5FTF9JRA==::MDAwMSwwMDEwLDAxMDAsMTAwMA==::QmluYXJ5IENoYW5uZWwgU3RyaW5n" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VFlQRV9PRl9UUkFOU0FDVElPTg==::Ym90aCxib3RoLHJlYWQscmVhZA==::VHlwZSBvZiBUcmFuc2FjdGlvbg==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RBUlRfQUREUkVTUw==::MHgwLDB4MTAsMHgyMCwweDMw::U3RhcnQgYWRkcmVzc2VzIChpbmNsdXNpdmUp" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RU5EX0FERFJFU1M=::MHgxMCwweDIwLDB4MzAsMHg0MA==::RW5kIGFkZHJlc3NlcyAoZXhjbHVzaXZlKQ==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Tk9OX1NFQ1VSRURfVEFH::MSwxLDEsMQ==::Tm9uLXNlY3VyZWQgdGFncw==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U0VDVVJFRF9SQU5HRV9QQUlSUw==::MCwwLDAsMA==::TnVtYmVyIG9mIHNlY3VyZWQgcmFuZ2UgcGFpcnM=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U0VDVVJFRF9SQU5HRV9MSVNU::MCwwLDAsMA==::U2VjdXJlZCByYW5nZSBwYWlycw==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0FERFJfSA==::Njc=::UGFja2V0IGFkZHJlc3MgZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0FERFJfTA==::MzY=::UGFja2V0IGFkZHJlc3MgZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1BST1RFQ1RJT05fSA==::OTQ=::UGFja2V0IEFYSSBwcm90ZWN0aW9uIGZpZWxkIGluZGV4IC0gaGlnaA==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1BST1RFQ1RJT05fTA==::OTI=::UGFja2V0IEFYSSBwcm90ZWN0aW9uIGZpZWxkIGluZGV4IC0gbG93" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0RFU1RfSURfSA==::OTA=::UGFja2V0IGRlc3RpbmF0aW9uIGlkIGZpZWxkIGluZGV4IC0gaGlnaA==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0RFU1RfSURfTA==::ODk=::UGFja2V0IGRlc3RpbmF0aW9uIGlkIGZpZWxkIGluZGV4IC0gbG93" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX1dSSVRF::NzA=::UGFja2V0IHdyaXRlIHRyYW5zYWN0aW9uIGZpZWxkIGluZGV4" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX1JFQUQ=::NzE=::UGFja2V0IHJlYWQgdHJhbnNhY3Rpb24gZmllbGQgaW5kZXg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfREFUQV9X::MTA0::U3RyZWFtaW5nIGRhdGEgd2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfQ0hBTk5FTF9X::NA==::U3RyZWFtaW5nIGNoYW5uZWwgd2lkdGg=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U0xBVkVTX0lORk8=::MjowMDAxOjB4MDoweDEwOmJvdGg6MTowOjA6MSwzOjAwMTA6MHgxMDoweDIwOmJvdGg6MTowOjA6MSwwOjAxMDA6MHgyMDoweDMwOnJlYWQ6MTowOjA6MSwxOjEwMDA6MHgzMDoweDQwOnJlYWQ6MTowOjA6MQ==::U0xBVkVTX0lORk8=" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "REVDT0RFUl9UWVBF::MA==::RGVjb2RlciB0eXBl" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "REVGQVVMVF9DSEFOTkVM::MA==::RGVmYXVsdCBjaGFubmVs" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "REVGQVVMVF9XUl9DSEFOTkVM::LTE=::RGVmYXVsdCB3ciBjaGFubmVs" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "REVGQVVMVF9SRF9DSEFOTkVM::LTE=::RGVmYXVsdCByZCBjaGFubmVs" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "REVGQVVMVF9ERVNUSUQ=::Mg==::RGVmYXVsdCBkZXN0aW5hdGlvbiBJRA==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUVSTElOX1BBQ0tFVF9GT1JNQVQ=::b3JpX2J1cnN0X3NpemUoMTAzOjEwMSkgcmVzcG9uc2Vfc3RhdHVzKDEwMDo5OSkgY2FjaGUoOTg6OTUpIHByb3RlY3Rpb24oOTQ6OTIpIHRocmVhZF9pZCg5MSkgZGVzdF9pZCg5MDo4OSkgc3JjX2lkKDg4Ojg3KSBxb3MoODYpIGJlZ2luX2J1cnN0KDg1KSBkYXRhX3NpZGViYW5kKDg0KSBhZGRyX3NpZGViYW5kKDgzKSBidXJzdF90eXBlKDgyOjgxKSBidXJzdF9zaXplKDgwOjc4KSBidXJzdHdyYXAoNzcpIGJ5dGVfY250KDc2Ojc0KSB0cmFuc19leGNsdXNpdmUoNzMpIHRyYW5zX2xvY2soNzIpIHRyYW5zX3JlYWQoNzEpIHRyYW5zX3dyaXRlKDcwKSB0cmFuc19wb3N0ZWQoNjkpIHRyYW5zX2NvbXByZXNzZWRfcmVhZCg2OCkgYWRkcig2NzozNikgYnl0ZWVuKDM1OjMyKSBkYXRhKDMxOjAp::TWVybGluIHBhY2tldCBmb3JtYXQgZGVzY3JpcHRvcg==" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUVNT1JZX0FMSUFTSU5HX0RFQ09ERQ==::MA==::TWVtb3J5IEFsaWFzaW5nIERlY29kZQ==" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_NAME "YWx0ZXJhX2F2YWxvbl9zY19maWZv" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "QXZhbG9uLVNUIFNpbmdsZSBDbG9jayBGSUZP" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1lNQk9MU19QRVJfQkVBVA==::MQ==::U3ltYm9scyBwZXIgYmVhdA==" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QklUU19QRVJfU1lNQk9M::OA==::Qml0cyBwZXIgc3ltYm9s" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RklGT19ERVBUSA==::NjQ=::RklGTyBkZXB0aA==" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Q0hBTk5FTF9XSURUSA==::MA==::Q2hhbm5lbCB3aWR0aA==" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RVJST1JfV0lEVEg=::MA==::RXJyb3Igd2lkdGg=" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1BBQ0tFVFM=::MA==::VXNlIHBhY2tldHM=" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0ZJTExfTEVWRUw=::MA==::VXNlIGZpbGwgbGV2ZWw=" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RU1QVFlfTEFURU5DWQ==::Mw==::TGF0ZW5jeQ==" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX01FTU9SWV9CTE9DS1M=::MQ==::VXNlIG1lbW9yeSBibG9ja3M=" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1NUT1JFX0ZPUldBUkQ=::MA==::VXNlIHN0b3JlIGFuZCBmb3J3YXJk" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0FMTU9TVF9GVUxMX0lG::MA==::VXNlIGFsbW9zdCBmdWxsIHN0YXR1cw==" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0FMTU9TVF9FTVBUWV9JRg==::MA==::VXNlIGFsbW9zdCBlbXB0eSBzdGF0dXM=" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RU5BQkxFX0VYUExJQ0lUX01BWENIQU5ORUw=::ZmFsc2U=::RW5hYmxlIGV4cGxpY2l0IG1heENoYW5uZWw=" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RVhQTElDSVRfTUFYQ0hBTk5FTA==::MA==::RXhwbGljaXQgbWF4Q2hhbm5lbA==" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_NAME "YWx0ZXJhX21lcmxpbl9zbGF2ZV9hZ2VudA==" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "QXZhbG9uIE1NIFNsYXZlIEFnZW50" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "QWNjZXB0cyBjb21tYW5kIHBhY2tldHMgYW5kIGlzc3VlcyB0aGUgcmVzdWx0aW5nIHRyYW5zYWN0aW9ucyB0byB0aGUgQXZhbG9uIGludGVyZmFjZS4gUmVmZXIgdG8gdGhlIEF2YWxvbiBJbnRlcmZhY2UgU3BlY2lmaWNhdGlvbnMgKGh0dHA6Ly93d3cuYWx0ZXJhLmNvbS9saXRlcmF0dXJlL21hbnVhbC9tbmxfYXZhbG9uX3NwZWMucGRmKSBmb3IgZXhwbGFuYXRpb25zIG9mIHRoZSBidXJzdGluZyBwcm9wZXJ0aWVzLg==" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX09SSV9CVVJTVF9TSVpFX0g=::MTAz::UGFja2V0IG9yaWdpbmFsIGJ1cnN0IHNpemUgZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX09SSV9CVVJTVF9TSVpFX0w=::MTAx::UGFja2V0IG9yaWdpbmFsIGJ1cnN0IHNpemUgZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1JFU1BPTlNFX1NUQVRVU19I::MTAw::UGFja2V0IHJlc3BvbnNlIHN0YXR1cyBmaWVsZCBpbmRleCAtIGhpZ2g=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1JFU1BPTlNFX1NUQVRVU19M::OTk=::UGFja2V0IHJlc3BvbnNlIHN0YXR1cyBmaWVsZCBpbmRleCAtIGxvdw==" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JVUlNUX1NJWkVfSA==::ODA=::UGFja2V0IGJ1cnN0c2l6ZSBmaWVsZCBpbmRleCAtIGhpZ2g=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JVUlNUX1NJWkVfTA==::Nzg=::UGFja2V0IGJ1cnN0c2l6ZSBmaWVsZCBpbmRleCAtIGxvdw==" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX0xPQ0s=::NzI=::UGFja2V0IGxvY2sgdHJhbnNhY3Rpb24gZmllbGQgaW5kZXg=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JFR0lOX0JVUlNU::ODU=::UGFja2V0IGJlZ2luIGJ1cnN0IGZpZWxkIGluZGV4" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1BST1RFQ1RJT05fSA==::OTQ=::UGFja2V0IHByb3RlY3Rpb24gZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1BST1RFQ1RJT05fTA==::OTI=::UGFja2V0IHByb3RlY3Rpb24gZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JVUlNUV1JBUF9I::Nzc=::UGFja2V0IGJ1cnN0d3JhcCBmaWVsZCBpbmRleCAtIGhpZ2g=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JVUlNUV1JBUF9M::Nzc=::UGFja2V0IGJ1cnN0d3JhcCBmaWVsZCBpbmRleCAtIGxvdw==" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JZVEVfQ05UX0g=::NzY=::UGFja2V0IGJ5dGUgY291bnQgZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JZVEVfQ05UX0w=::NzQ=::UGFja2V0IGJ5dGUgY291bnQgZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0FERFJfSA==::Njc=::UGFja2V0IGFkZHJlc3MgZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0FERFJfTA==::MzY=::UGFja2V0IGFkZHJlc3MgZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX0NPTVBSRVNTRURfUkVBRA==::Njg=::UGFja2V0IGNvbXByZXNzZWQgcmVhZCB0cmFuc2FjdGlvbiBmaWVsZCBpbmRleA==" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX1BPU1RFRA==::Njk=::UGFja2V0IHBvc3RlZCB0cmFuc2FjdGlvbiBmaWVsZCBpbmRleA==" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX1dSSVRF::NzA=::UGFja2V0IHdyaXRlIHRyYW5zYWN0aW9uIGZpZWxkIGluZGV4" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX1JFQUQ=::NzE=::UGFja2V0IHJlYWQgdHJhbnNhY3Rpb24gZmllbGQgaW5kZXg=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0RBVEFfSA==::MzE=::UGFja2V0IGRhdGEgZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0RBVEFfTA==::MA==::UGFja2V0IGRhdGEgZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JZVEVFTl9I::MzU=::UGFja2V0IGJ5dGVlbmFibGUgZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JZVEVFTl9M::MzI=::UGFja2V0IGJ5dGVlbmFibGUgZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1NSQ19JRF9I::ODg=::UGFja2V0IHNvdXJjZSBpZCBmaWVsZCBpbmRleCAtIGhpZ2g=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1NSQ19JRF9M::ODc=::UGFja2V0IHNvdXJjZSBpZCBmaWVsZCBpbmRleCAtIGxvdw==" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0RFU1RfSURfSA==::OTA=::UGFja2V0IGRlc3RpbmF0aW9uIGlkIGZpZWxkIGluZGV4IC0gaGlnaA==" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0RFU1RfSURfTA==::ODk=::UGFja2V0IGRlc3RpbmF0aW9uIGlkIGZpZWxkIGluZGV4IC0gbG93" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1NZTUJPTF9X::OA==::UGFja2V0IHN5bWJvbCB3aWR0aA==" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfQ0hBTk5FTF9X::NA==::U3RyZWFtaW5nIGNoYW5uZWwgd2lkdGg=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfREFUQV9X::MTA0::U3RyZWFtaW5nIGRhdGEgd2lkdGg=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZTX0JVUlNUQ09VTlRfU1lNQk9MUw==::MA==::YnVyc3Rjb3VudFN5bWJvbHM=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZTX0JVUlNUQ09VTlRfVw==::Mw==::YnVyc3Rjb3VudCB3aWR0aA==" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfTElORVdSQVBCVVJTVFM=::MA==::bGluZXdyYXBCdXJzdHM=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUVSTElOX1BBQ0tFVF9GT1JNQVQ=::b3JpX2J1cnN0X3NpemUoMTAzOjEwMSkgcmVzcG9uc2Vfc3RhdHVzKDEwMDo5OSkgY2FjaGUoOTg6OTUpIHByb3RlY3Rpb24oOTQ6OTIpIHRocmVhZF9pZCg5MSkgZGVzdF9pZCg5MDo4OSkgc3JjX2lkKDg4Ojg3KSBxb3MoODYpIGJlZ2luX2J1cnN0KDg1KSBkYXRhX3NpZGViYW5kKDg0KSBhZGRyX3NpZGViYW5kKDgzKSBidXJzdF90eXBlKDgyOjgxKSBidXJzdF9zaXplKDgwOjc4KSBidXJzdHdyYXAoNzcpIGJ5dGVfY250KDc2Ojc0KSB0cmFuc19leGNsdXNpdmUoNzMpIHRyYW5zX2xvY2soNzIpIHRyYW5zX3JlYWQoNzEpIHRyYW5zX3dyaXRlKDcwKSB0cmFuc19wb3N0ZWQoNjkpIHRyYW5zX2NvbXByZXNzZWRfcmVhZCg2OCkgYWRkcig2NzozNikgYnl0ZWVuKDM1OjMyKSBkYXRhKDMxOjAp::TWVybGluIHBhY2tldCBmb3JtYXQgZGVzY3JpcHRvcg==" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1VQUFJFU1NfMF9CWVRFRU5fQ01E::MA==::U3VwcHJlc3MgMC1ieXRlZW5hYmxlIHRyYW5zYWN0aW9ucw==" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UFJFVkVOVF9GSUZPX09WRVJGTE9X::MQ==::UHJldmVudCBGSUZPIG92ZXJmbG93" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUFYX0JZVEVfQ05U::NA==::TWF4aW11bSBieXRlLWNvdW50IHZhbHVl" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUFYX0JVUlNUV1JBUA==::MQ==::TWF4aW11bSBidXJzdHdyYXAgdmFsdWU=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "SUQ=::Mg==::U2xhdmUgSUQ=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFQURSRVNQT05TRQ==::MA==::VXNlIHJlYWRyZXNwb25zZQ==" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1dSSVRFUkVTUE9OU0U=::MA==::VXNlIHdyaXRlcmVzcG9uc2U=" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RUNDX0VOQUJMRQ==::MA==::RUNDX0VOQUJMRQ==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_NAME "YWx0ZXJhX21lcmxpbl9tYXN0ZXJfYWdlbnQ=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "QXZhbG9uIE1NIE1hc3RlciBBZ2VudA==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "VHJhbnNsYXRlcyBBdmFsb24tTU0gbWFzdGVyIHRyYW5zYWN0aW9ucyBpbnRvIFFzeXMgY29tbWFuZCBwYWNrZXRzIGFuZCB0cmFuc2xhdGVzIHRoZSBRc3lzIEF2YWxvbi1NTSBzbGF2ZSByZXNwb25zZSBwYWNrZXRzIGludG8gQXZhbG9uLU1NIHJlc3BvbnNlcy4gUmVmZXIgdG8gdGhlIEF2YWxvbiBJbnRlcmZhY2UgU3BlY2lmaWNhdGlvbnMgKGh0dHA6Ly93d3cuYWx0ZXJhLmNvbS9saXRlcmF0dXJlL21hbnVhbC9tbmxfYXZhbG9uX3NwZWMucGRmKSBmb3IgYW4gZXhwbGFuYXRpb24gb2YgYnVyc3RpbmcgYmVoYXZpb3Iu" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX09SSV9CVVJTVF9TSVpFX0g=::MTAz::UGFja2V0IG9yaWdpbmFsIGJ1cnN0IHNpemUgZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX09SSV9CVVJTVF9TSVpFX0w=::MTAx::UGFja2V0IG9yaWdpbmFsIGJ1cnN0IHNpemUgZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1JFU1BPTlNFX1NUQVRVU19I::MTAw::UGFja2V0IHJlc3BvbnNlIHN0YXR1cyBmaWVsZCBpbmRleCAtIGhpZ2g=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1JFU1BPTlNFX1NUQVRVU19M::OTk=::UGFja2V0IHJlc3BvbnNlIHN0YXR1cyBmaWVsZCBpbmRleCAtIGxvdw==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1FPU19I::ODY=::UGFja2V0IHFvcyBzaWRlYmFuZCBmaWVsZCBpbmRleCAtIGhpZ2g=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1FPU19M::ODY=::UGFja2V0IHFvcyBzaWRlYmFuZCBmaWVsZCBpbmRleCAtIGxvdw==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0RBVEFfU0lERUJBTkRfSA==::ODQ=::UGFja2V0IGRhdGEgc2lkZWJhbmQgZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0RBVEFfU0lERUJBTkRfTA==::ODQ=::UGFja2V0IGRhdGEgc2lkZWJhbmQgZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0FERFJfU0lERUJBTkRfSA==::ODM=::UGFja2V0IGFkZHJlc3Mgc2lkZWJhbmQgZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0FERFJfU0lERUJBTkRfTA==::ODM=::UGFja2V0IGFkZHJlc3Mgc2lkZWJhbmQgZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JVUlNUX1RZUEVfSA==::ODI=::UGFja2V0IGJ1cnN0dHlwZSBmaWVsZCBpbmRleCAtIGhpZ2g=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JVUlNUX1RZUEVfTA==::ODE=::UGFja2V0IGJ1cnN0dHlwZSBmaWVsZCBpbmRleCAtIGxvdw==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0NBQ0hFX0g=::OTg=::UGFja2V0IGNhY2hlIGZpZWxkIGluZGV4IC0gaGlnaA==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0NBQ0hFX0w=::OTU=::UGFja2V0IGNhY2hlIGZpZWxkIGluZGV4IC0gbG93" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RIUkVBRF9JRF9I::OTE=::UGFja2V0IHRocmVhZCBpZCBmaWVsZCBpbmRleCAtIGhpZ2g=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RIUkVBRF9JRF9M::OTE=::UGFja2V0IHRocmVhZCBpZCBmaWVsZCBpbmRleCAtIGxvdw==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JVUlNUX1NJWkVfSA==::ODA=::UGFja2V0IGJ1cnN0c2l6ZSBmaWVsZCBpbmRleCAtIGhpZ2g=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JVUlNUX1NJWkVfTA==::Nzg=::UGFja2V0IGJ1cnN0c2l6ZSBmaWVsZCBpbmRleCAtIGxvdw==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX0VYQ0xVU0lWRQ==::NzM=::UGFja2V0IGV4Y2x1c2l2ZSB0cmFuc2FjdGlvbiBmaWVsZCBpbmRleA==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX0xPQ0s=::NzI=::UGFja2V0IGxvY2sgdHJhbnNhY3Rpb24gZmllbGQgaW5kZXg=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JFR0lOX0JVUlNU::ODU=::UGFja2V0IGJlZ2luIGJ1cnN0IGZpZWxkIGluZGV4" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1BST1RFQ1RJT05fSA==::OTQ=::UGFja2V0IHByb3RlY3Rpb24gZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1BST1RFQ1RJT05fTA==::OTI=::UGFja2V0IHByb3RlY3Rpb24gZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JVUlNUV1JBUF9I::Nzc=::UGFja2V0IGJ1cnN0d3JhcCBmaWVsZCBpbmRleCAtIGhpZ2g=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JVUlNUV1JBUF9M::Nzc=::UGFja2V0IGJ1cnN0d3JhcCBmaWVsZCBpbmRleCAtIGxvdw==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JZVEVfQ05UX0g=::NzY=::UGFja2V0IGJ5dGUgY291bnQgZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JZVEVfQ05UX0w=::NzQ=::UGFja2V0IGJ5dGUgY291bnQgZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0FERFJfSA==::Njc=::UGFja2V0IGFkZHJlc3MgZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0FERFJfTA==::MzY=::UGFja2V0IGFkZHJlc3MgZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX0NPTVBSRVNTRURfUkVBRA==::Njg=::UGFja2V0IGNvbXByZXNzZWQgcmVhZCB0cmFuc2FjdGlvbiBmaWVsZCBpbmRleA==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX1BPU1RFRA==::Njk=::UGFja2V0IHBvc3RlZCB0cmFuc2FjdGlvbiBmaWVsZCBpbmRleA==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX1dSSVRF::NzA=::UGFja2V0IHdyaXRlIHRyYW5zYWN0aW9uIGZpZWxkIGluZGV4" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1RSQU5TX1JFQUQ=::NzE=::UGFja2V0IHJlYWQgdHJhbnNhY3Rpb24gZmllbGQgaW5kZXg=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0RBVEFfSA==::MzE=::UGFja2V0IGRhdGEgZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0RBVEFfTA==::MA==::UGFja2V0IGRhdGEgZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JZVEVFTl9I::MzU=::UGFja2V0IGJ5dGVlbmFibGUgZmllbGQgaW5kZXggLSBoaWdo" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0JZVEVFTl9M::MzI=::UGFja2V0IGJ5dGVlbmFibGUgZmllbGQgaW5kZXggLSBsb3c=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1NSQ19JRF9I::ODg=::UGFja2V0IHNvdXJjZSBpZCBmaWVsZCBpbmRleCAtIGhpZ2g=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX1NSQ19JRF9M::ODc=::UGFja2V0IHNvdXJjZSBpZCBmaWVsZCBpbmRleCAtIGxvdw==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0RFU1RfSURfSA==::OTA=::UGFja2V0IGRlc3RpbmF0aW9uIGlkIGZpZWxkIGluZGV4IC0gaGlnaA==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UEtUX0RFU1RfSURfTA==::ODk=::UGFja2V0IGRlc3RpbmF0aW9uIGlkIGZpZWxkIGluZGV4IC0gbG93" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfREFUQV9X::MTA0::U3RyZWFtaW5nIGRhdGEgd2lkdGg=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1RfQ0hBTk5FTF9X::NA==::U3RyZWFtaW5nIGNoYW5uZWwgd2lkdGg=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQlVSU1RDT1VOVF9X::Mw==::QXZhbG9uLU1NIGJ1cnN0Y291bnQgd2lkdGg=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfTElORVdSQVBCVVJTVFM=::MA==::bGluZXdyYXBCdXJzdHM=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQlVSU1RCT1VOREFSSUVT::MA==::YnVyc3RPbkJ1cnN0Qm91bmRhcmllc09ubHk=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUVSTElOX1BBQ0tFVF9GT1JNQVQ=::b3JpX2J1cnN0X3NpemUoMTAzOjEwMSkgcmVzcG9uc2Vfc3RhdHVzKDEwMDo5OSkgY2FjaGUoOTg6OTUpIHByb3RlY3Rpb24oOTQ6OTIpIHRocmVhZF9pZCg5MSkgZGVzdF9pZCg5MDo4OSkgc3JjX2lkKDg4Ojg3KSBxb3MoODYpIGJlZ2luX2J1cnN0KDg1KSBkYXRhX3NpZGViYW5kKDg0KSBhZGRyX3NpZGViYW5kKDgzKSBidXJzdF90eXBlKDgyOjgxKSBidXJzdF9zaXplKDgwOjc4KSBidXJzdHdyYXAoNzcpIGJ5dGVfY250KDc2Ojc0KSB0cmFuc19leGNsdXNpdmUoNzMpIHRyYW5zX2xvY2soNzIpIHRyYW5zX3JlYWQoNzEpIHRyYW5zX3dyaXRlKDcwKSB0cmFuc19wb3N0ZWQoNjkpIHRyYW5zX2NvbXByZXNzZWRfcmVhZCg2OCkgYWRkcig2NzozNikgYnl0ZWVuKDM1OjMyKSBkYXRhKDMxOjAp::TWVybGluIHBhY2tldCBmb3JtYXQgZGVzY3JpcHRvcg==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1VQUFJFU1NfMF9CWVRFRU5fUlNQ::MA==::U3VwcHJlc3MgMC1ieXRlZW5hYmxlIHJlc3BvbnNlcw==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "SUQ=::MA==::TWFzdGVyIElE" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QlVSU1RXUkFQX1ZBTFVF::MQ==::QnVyc3R3cmFwIHZhbHVl" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Q0FDSEVfVkFMVUU=::MA==::Q2FjaGUgdmFsdWU=" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U0VDVVJFX0FDQ0VTU19CSVQ=::MQ==::U2VjdXJpdHkgYml0IHZhbHVl" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFQURSRVNQT05TRQ==::MA==::VXNlIHJlYWRyZXNwb25zZQ==" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1dSSVRFUkVTUE9OU0U=::MA==::VXNlIHdyaXRlcmVzcG9uc2U=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_NAME "YWx0ZXJhX21lcmxpbl9zbGF2ZV90cmFuc2xhdG9y" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "QXZhbG9uIE1NIFNsYXZlIFRyYW5zbGF0b3I=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "Q29udmVydHMgdGhlIEF2YWxvbi1NTSBzbGF2ZSBpbnRlcmZhY2UgdG8gYSBzaW1wbGlmaWVkIHJlcHJlc2VudGF0aW9uIHRoYXQgdGhlIFFzeXMgbmV0d29yayB1c2VzLiBSZWZlciB0byB0aGUgQXZhbG9uIEludGVyZmFjZSBTcGVjaWZpY2F0aW9ucyAoaHR0cDovL3d3dy5hbHRlcmEuY29tL2xpdGVyYXR1cmUvbWFudWFsL21ubF9hdmFsb25fc3BlYy5wZGYpIGZvciBkZWZpbml0aW9ucyBvZiB0aGUgQXZhbG9uLU1NIHNpZ25hbHMgYW5kIGV4cGxhbmF0aW9ucyBvZiB0aGUgYnVyc3RpbmcgcHJvcGVydGllcyBhbmQgYWRkcmVzcyBhbGlnbm1lbnQu" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQUREUkVTU19X::Mg==::Q29tcG9uZW50IGFkZHJlc3Mgd2lkdGg=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfREFUQV9X::MzI=::Q29tcG9uZW50IERhdGEgd2lkdGg=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VUFWX0RBVEFfVw==::MzI=::TmV0d29yayBEYXRhIHdpZHRo" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQlVSU1RDT1VOVF9X::MQ==::Q29tcG9uZW50IGJ1cnN0Y291bnQgd2lkdGg=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQllURUVOQUJMRV9X::MQ==::Q29tcG9uZW50IGJ5dGVlbmFibGUgd2lkdGg=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VUFWX0JZVEVFTkFCTEVfVw==::NA==::TmV0d29yayBieXRlZW5hYmxlIHdpZHRo" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VUFWX0FERFJFU1NfVw==::MzI=::TmV0d29yayBhZGRyZXNzIHdpZHRo" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VUFWX0JVUlNUQ09VTlRfVw==::Mw==::TmV0d29yayBidXJzdGNvdW50IHdpZHRo" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfUkVBRExBVEVOQ1k=::MA==::cmVhZExhdGVuY3k=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfU0VUVVBfV0FJVA==::MA==::c2V0dXBUaW1l" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfV1JJVEVfV0FJVA==::MA==::d3JpdGVXYWl0VGltZQ==" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfUkVBRF9XQUlU::MQ==::cmVhZFdhaXRUaW1l" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfREFUQV9IT0xE::MA==::SG9sZCB0aW1l" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfVElNSU5HX1VOSVRT::MQ==::VGltaW5nIHVuaXRz" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFQUREQVRB::MQ==::VXNlIHJlYWRkYXRh" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1dSSVRFREFUQQ==::MQ==::VXNlIHdyaXRlZGF0YQ==" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFQUQ=::MA==::VXNlIHJlYWQ=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1dSSVRF::MQ==::VXNlIHdyaXRl" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0JFR0lOQlVSU1RUUkFOU0ZFUg==::MA==::VXNlIGJlZ2luYnVyc3R0cmFuc2Zlcg==" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0JFR0lOVFJBTlNGRVI=::MA==::VXNlIGJlZ2ludHJhbnNmZXI=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0JZVEVFTkFCTEU=::MA==::VXNlIGJ5dGVlbmFibGU=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0NISVBTRUxFQ1Q=::MQ==::VXNlIGNoaXBzZWxlY3Q=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0FERFJFU1M=::MQ==::VXNlIGFkZHJlc3M=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0JVUlNUQ09VTlQ=::MA==::VXNlIGJ1cnN0Y291bnQ=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFQUREQVRBVkFMSUQ=::MA==::VXNlIHJlYWRkYXRhdmFsaWQ=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1dBSVRSRVFVRVNU::MA==::VXNlIHdhaXRyZXF1ZXN0" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1dSSVRFQllURUVOQUJMRQ==::MA==::VXNlIHdyaXRlYnl0ZWVuYWJsZQ==" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0xPQ0s=::MA==::VXNlIGxvY2s=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0FWX0NMS0VO::MA==::VXNlIGNvbXBvbmVudCBjbGtlbg==" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1VBVl9DTEtFTg==::MA==::VXNlIG5ldHdvcmsgY2xrZW4=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX09VVFBVVEVOQUJMRQ==::MA==::VXNlIG91dHB1dGVuYWJsZQ==" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0RFQlVHQUNDRVNT::MA==::VXNlIGRlYnVnYWNjZXNz" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFQURSRVNQT05TRQ==::MA==::VXNlIHJlYWRyZXNwb25zZQ==" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1dSSVRFUkVTUE9OU0U=::MA==::VXNlIHdyaXRlcmVzcG9uc2U=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfU1lNQk9MU19QRVJfV09SRA==::NA==::U3ltYm9scyBwZXIgd29yZA==" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQUREUkVTU19TWU1CT0xT::MA==::QWRkcmVzcyBzeW1ib2xz" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQlVSU1RDT1VOVF9TWU1CT0xT::MA==::QnVyc3Rjb3VudCBzeW1ib2xz" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQ09OU1RBTlRfQlVSU1RfQkVIQVZJT1I=::MA==::Q29tcG9uZW50IGNvbnN0YW50QnVyc3RCZWhhdmlvcg==" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VUFWX0NPTlNUQU5UX0JVUlNUX0JFSEFWSU9S::MA==::TmV0d29yayBjb25zdGFudEJ1cnN0QmVoYXZpb3I=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfUkVRVUlSRV9VTkFMSUdORURfQUREUkVTU0VT::MA==::VW5hbGlnbmVkIGFkZHJlc3Nlcw==" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfTElORVdSQVBCVVJTVFM=::MA==::bGluZXdyYXBCdXJzdHM=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfTUFYX1BFTkRJTkdfUkVBRF9UUkFOU0FDVElPTlM=::MQ==::bWF4UGVuZGluZ1JlYWRUcmFuc2FjdGlvbnM=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfTUFYX1BFTkRJTkdfV1JJVEVfVFJBTlNBQ1RJT05T::MA==::bWF4UGVuZGluZ1dyaXRlVHJhbnNhY3Rpb25z" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQlVSU1RCT1VOREFSSUVT::MA==::YnVyc3RPbkJ1cnN0Qm91bmRhcmllc09ubHk=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfSU5URVJMRUFWRUJVUlNUUw==::MA==::aW50ZXJsZWF2ZUJ1cnN0cw==" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQklUU19QRVJfU1lNQk9M::OA==::Qml0cy9zeW1ib2w=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfSVNCSUdFTkRJQU4=::MA==::aXNCaWdFbmRpYW4=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQUREUkVTU0dST1VQ::MA==::Q29tcG9uZW50IGFkZHJlc3MgZ3JvdXA=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VUFWX0FERFJFU1NHUk9VUA==::MA==::TmV0d29yayBhZGRyZXNzIGdyb3Vw" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfUkVHSVNURVJPVVRHT0lOR1NJR05BTFM=::MA==::cmVnaXN0ZXJPdXRnb2luZ1NpZ25hbHM=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfUkVHSVNURVJJTkNPTUlOR1NJR05BTFM=::MA==::cmVnaXN0ZXJJbmNvbWluZ1NpZ25hbHM=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQUxXQVlTQlVSU1RNQVhCVVJTVA==::MA==::QWx3YXlzIGJ1cnN0IG1heC1idXJzdA==" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Q0hJUFNFTEVDVF9USFJPVUdIX1JFQURMQVRFTkNZ::MA==::Q2hpcHNlbGVjdCB0aHJvdWdoIHJlYWQgbGF0ZW5jeQ==" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Q0xPQ0tfUkFURQ==::NTAwMDAwMDA=::Q0xPQ0tfUkFURQ==" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfUkVBRF9XQUlUX0NZQ0xFUw==::MQ==::QVZfUkVBRF9XQUlUX0NZQ0xFUw==" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfV1JJVEVfV0FJVF9DWUNMRVM=::MA==::QVZfV1JJVEVfV0FJVF9DWUNMRVM=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfU0VUVVBfV0FJVF9DWUNMRVM=::MA==::QVZfU0VUVVBfV0FJVF9DWUNMRVM=" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfREFUQV9IT0xEX0NZQ0xFUw==::MA==::QVZfREFUQV9IT0xEX0NZQ0xFUw==" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_NAME "YWx0ZXJhX21lcmxpbl9tYXN0ZXJfdHJhbnNsYXRvcg==" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "QXZhbG9uIE1NIE1hc3RlciBUcmFuc2xhdG9y" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "Q29udmVydHMgdGhlIEF2YWxvbi1NTSBtYXN0ZXIgaW50ZXJmYWNlIHRvIGEgc2ltcGxlciByZXByZXNlbnRhdGlvbiB0aGF0IHRoZSBRc3lzIG5ldHdvcmsgdXNlcy4gUmVmZXIgdG8gdGhlIEF2YWxvbiBJbnRlcmZhY2UgU3BlY2lmaWNhdGlvbnMgKGh0dHA6Ly93d3cuYWx0ZXJhLmNvbS9saXRlcmF0dXJlL21hbnVhbC9tbmxfYXZhbG9uX3NwZWMucGRmKSBmb3IgZGVmaW5pdGlvbnMgb2YgdGhlIEF2YWxvbi1NTSBzaWduYWxzIGFuZCBleHBsYW5hdGlvbnMgb2YgdGhlIGJ1cnN0aW5nIHByb3BlcnRpZXMu" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQUREUkVTU19X::MzI=::Q29tcG9uZW50IGFkZHJlc3Mgd2lkdGg=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfREFUQV9X::MzI=::Q29tcG9uZW50IERhdGEgd2lkdGg=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQlVSU1RDT1VOVF9X::MQ==::Q29tcG9uZW50IGJ1cnN0Y291bnQgd2lkdGg=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQllURUVOQUJMRV9X::NA==::Q29tcG9uZW50IGJ5dGVlbmFibGUgd2lkdGg=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VUFWX0FERFJFU1NfVw==::MzI=::TmV0d29yayBhZGRyZXNzIHdpZHRo" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VUFWX0JVUlNUQ09VTlRfVw==::Mw==::TmV0d29yayBidXJzdGNvdW50IHdpZHRo" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfUkVBRExBVEVOQ1k=::MA==::cmVhZExhdGVuY3k=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfV1JJVEVfV0FJVA==::MA==::d3JpdGVXYWl0VGltZQ==" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfUkVBRF9XQUlU::MQ==::cmVhZFdhaXRUaW1l" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfREFUQV9IT0xE::MA==::SG9sZCB0aW1l" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfU0VUVVBfV0FJVA==::MA==::c2V0dXBUaW1l" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFQUREQVRB::MQ==::VXNlIHJlYWRkYXRh" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1dSSVRFREFUQQ==::MQ==::VXNlIHdyaXRlZGF0YQ==" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFQUQ=::MQ==::VXNlIHJlYWQ=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1dSSVRF::MQ==::VXNlIHdyaXRl" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0JFR0lOQlVSU1RUUkFOU0ZFUg==::MA==::VXNlIGJlZ2luYnVyc3R0cmFuc2Zlcg==" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0JFR0lOVFJBTlNGRVI=::MA==::VXNlIGJlZ2ludHJhbnNmZXI=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0JZVEVFTkFCTEU=::MQ==::VXNlIGJ5dGVlbmFibGU=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0NISVBTRUxFQ1Q=::MA==::VXNlIGNoaXBzZWxlY3Q=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0FERFJFU1M=::MQ==::VXNlIGFkZHJlc3M=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0JVUlNUQ09VTlQ=::MA==::VXNlIGJ1cnN0Y291bnQ=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0RFQlVHQUNDRVNT::MA==::VXNlIGRlYnVnYWNjZXNz" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0NMS0VO::MA==::VXNlIG5ldHdvcmsgY2xrZW4=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFQUREQVRBVkFMSUQ=::MQ==::VXNlIHJlYWRkYXRhdmFsaWQ=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1dBSVRSRVFVRVNU::MQ==::VXNlIHdhaXRyZXF1ZXN0" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0xPQ0s=::MA==::VXNlIGxvY2s=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1JFQURSRVNQT05TRQ==::MA==::VXNlIHJlYWRyZXNwb25zZQ==" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1dSSVRFUkVTUE9OU0U=::MA==::VXNlIHdyaXRlcmVzcG9uc2U=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfU1lNQk9MU19QRVJfV09SRA==::NA==::U3ltYm9scyBwZXIgd29yZA==" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQUREUkVTU19TWU1CT0xT::MQ==::QWRkcmVzcyBzeW1ib2xz" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQlVSU1RDT1VOVF9TWU1CT0xT::MA==::QnVyc3Rjb3VudCBzeW1ib2xz" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQ09OU1RBTlRfQlVSU1RfQkVIQVZJT1I=::MA==::Q29tcG9uZW50IGNvbnN0YW50QnVyc3RCZWhhdmlvcg==" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VUFWX0NPTlNUQU5UX0JVUlNUX0JFSEFWSU9S::MA==::TmV0d29yayBjb25zdGFudEJ1cnN0QmVoYXZpb3I=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfTElORVdSQVBCVVJTVFM=::MA==::bGluZXdyYXBCdXJzdHM=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfTUFYX1BFTkRJTkdfUkVBRF9UUkFOU0FDVElPTlM=::NjQ=::bWF4UGVuZGluZ1JlYWRUcmFuc2FjdGlvbnM=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQlVSU1RCT1VOREFSSUVT::MA==::YnVyc3RPbkJ1cnN0Qm91bmRhcmllc09ubHk=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfSU5URVJMRUFWRUJVUlNUUw==::MA==::aW50ZXJsZWF2ZUJ1cnN0cw==" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQklUU19QRVJfU1lNQk9M::OA==::Qml0cy9zeW1ib2w=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfSVNCSUdFTkRJQU4=::MA==::aXNCaWdFbmRpYW4=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQUREUkVTU0dST1VQ::MA==::Q29tcG9uZW50IGFkZHJlc3MgZ3JvdXA=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VUFWX0FERFJFU1NHUk9VUA==::MA==::TmV0d29yayBhZGRyZXNzIGdyb3Vw" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfUkVHSVNURVJPVVRHT0lOR1NJR05BTFM=::MA==::cmVnaXN0ZXJPdXRnb2luZ1NpZ25hbHM=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfUkVHSVNURVJJTkNPTUlOR1NJR05BTFM=::MA==::cmVnaXN0ZXJJbmNvbWluZ1NpZ25hbHM=" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVZfQUxXQVlTQlVSU1RNQVhCVVJTVA==::MA==::QWx3YXlzIGJ1cnN0IG1heC1idXJzdA==" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_COMPONENT_PARAMETER "U1lOQ19SRVNFVA==::MA==::VXNlIHN5bmNocm9ub3VzIHJlc2V0cw==" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_NAME "anRhZ19pb19vdXQw" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "UElPIChQYXJhbGxlbCBJL08pIEludGVsIEZQR0EgSVA=" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_AUTHOR "SW50ZWwgQ29ycG9yYXRpb24=" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Yml0TW9kaWZ5aW5nT3V0UmVn::ZmFsc2U=::RW5hYmxlIGluZGl2aWR1YWwgYml0IHNldHRpbmcvY2xlYXJpbmc=" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGlyZWN0aW9u::T3V0cHV0::RGlyZWN0aW9u" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "cmVzZXRWYWx1ZQ==::MA==::T3V0cHV0IFBvcnQgUmVzZXQgVmFsdWU=" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "d2lkdGg=::MzI=::V2lkdGggKDEtMzIgYml0cyk=" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Y2xvY2tSYXRl::NTAwMDAwMDA=::Y2xvY2tSYXRl" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGVyaXZlZF9oYXNfdHJp::ZmFsc2U=::ZGVyaXZlZF9oYXNfdHJp" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGVyaXZlZF9oYXNfb3V0::dHJ1ZQ==::ZGVyaXZlZF9oYXNfb3V0" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGVyaXZlZF9oYXNfaW4=::ZmFsc2U=::ZGVyaXZlZF9oYXNfaW4=" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGVyaXZlZF9kb190ZXN0X2JlbmNoX3dpcmluZw==::ZmFsc2U=::ZGVyaXZlZF9kb190ZXN0X2JlbmNoX3dpcmluZw==" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGVyaXZlZF9jYXB0dXJl::ZmFsc2U=::ZGVyaXZlZF9jYXB0dXJl" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGVyaXZlZF9lZGdlX3R5cGU=::Tk9ORQ==::ZGVyaXZlZF9lZGdlX3R5cGU=" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGVyaXZlZF9pcnFfdHlwZQ==::Tk9ORQ==::ZGVyaXZlZF9pcnFfdHlwZQ==" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGVyaXZlZF9oYXNfaXJx::ZmFsc2U=::ZGVyaXZlZF9oYXNfaXJx" +set_global_assignment -entity "jtag_io_master_0" -library "jtag_io" -name IP_COMPONENT_NAME "anRhZ19pb19tYXN0ZXJfMA==" +set_global_assignment -entity "jtag_io_master_0" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "SlRBRyB0byBBdmFsb24gTWFzdGVyIEJyaWRnZQ==" +set_global_assignment -entity "jtag_io_master_0" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "jtag_io_master_0" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "jtag_io_master_0" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "jtag_io_master_0" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "jtag_io_master_0" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "VGhlIEpUQUcgdG8gQXZhbG9uIE1hc3RlciBCcmlkZ2UgaXMgYSBjb2xsZWN0aW9uIG9mIHByZS13aXJlZCBjb21wb25lbnRzIHRoYXQgcHJvdmlkZSBhbiBBdmFsb24gTWFzdGVyIHVzaW5nIHRoZSBuZXcgSlRBRyBjaGFubmVsLg==" +set_global_assignment -entity "jtag_io_master_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1BMSQ==::MA==::VXNlIFNpbXVsYXRpb24gTGluayBNb2Rl" +set_global_assignment -entity "jtag_io_master_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Q09NUE9ORU5UX0NMT0NL::MA==::Q09NUE9ORU5UX0NMT0NL" +set_global_assignment -entity "jtag_io_master_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RkFTVF9WRVI=::MA==::RW5oYW5jZWQgdHJhbnNhY3Rpb24gbWFzdGVy" +set_global_assignment -entity "jtag_io_master_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19ERVZJQ0VfRkFNSUxZ::Q3ljbG9uZSBW::QXV0byBERVZJQ0VfRkFNSUxZ" +set_global_assignment -entity "jtag_io_master_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19ERVZJQ0U=::NUNTRUJBNlUyM0k3::QXV0byBERVZJQ0U=" +set_global_assignment -entity "jtag_io_master_0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "QVVUT19ERVZJQ0VfU1BFRURHUkFERQ==::Nw==::QXV0byBERVZJQ0VfU1BFRURHUkFERQ==" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_NAME "anRhZ19pb19tYXN0ZXJfMF9wMmJfYWRhcHRlcg==" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "QXZhbG9uLVNUIENoYW5uZWwgQWRhcHRlcg==" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5DaGFubmVsV2lkdGg=::MA==::Q2hhbm5lbCBTaWduYWwgV2lkdGggKGJpdHMp" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5NYXhDaGFubmVs::MA==::TWF4IENoYW5uZWw=" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0Q2hhbm5lbFdpZHRo::OA==::Q2hhbm5lbCBTaWduYWwgV2lkdGggKGJpdHMp" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0TWF4Q2hhbm5lbA==::MjU1::TWF4IENoYW5uZWw=" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5CaXRzUGVyU3ltYm9s::OA==::RGF0YSBCaXRzIFBlciBTeW1ib2w=" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VQYWNrZXRz::dHJ1ZQ==::SW5jbHVkZSBQYWNrZXQgU3VwcG9ydA==" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VFbXB0eVBvcnQ=::QVVUTw==::SW5jbHVkZSBFbXB0eSBTaWduYWw=" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VFbXB0eQ==::ZmFsc2U=::aW5Vc2VFbXB0eQ==" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5TeW1ib2xzUGVyQmVhdA==::MQ==::RGF0YSBTeW1ib2xzIFBlciBCZWF0" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VSZWFkeQ==::dHJ1ZQ==::U3VwcG9ydCBCYWNrcHJlc3N1cmUgd2l0aCB0aGUgcmVhZHkgc2lnbmFs" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5SZWFkeUxhdGVuY3k=::MA==::UmVhZHkgTGF0ZW5jeQ==" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5FcnJvcldpZHRo::MA==::RXJyb3IgU2lnbmFsIFdpZHRoIChiaXRzKQ==" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_NAME "anRhZ19pb19tYXN0ZXJfMF9iMnBfYWRhcHRlcg==" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "QXZhbG9uLVNUIENoYW5uZWwgQWRhcHRlcg==" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5DaGFubmVsV2lkdGg=::OA==::Q2hhbm5lbCBTaWduYWwgV2lkdGggKGJpdHMp" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5NYXhDaGFubmVs::MjU1::TWF4IENoYW5uZWw=" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0Q2hhbm5lbFdpZHRo::MA==::Q2hhbm5lbCBTaWduYWwgV2lkdGggKGJpdHMp" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0TWF4Q2hhbm5lbA==::MA==::TWF4IENoYW5uZWw=" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5CaXRzUGVyU3ltYm9s::OA==::RGF0YSBCaXRzIFBlciBTeW1ib2w=" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VQYWNrZXRz::dHJ1ZQ==::SW5jbHVkZSBQYWNrZXQgU3VwcG9ydA==" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VFbXB0eVBvcnQ=::QVVUTw==::SW5jbHVkZSBFbXB0eSBTaWduYWw=" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VFbXB0eQ==::ZmFsc2U=::aW5Vc2VFbXB0eQ==" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5TeW1ib2xzUGVyQmVhdA==::MQ==::RGF0YSBTeW1ib2xzIFBlciBCZWF0" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VSZWFkeQ==::dHJ1ZQ==::U3VwcG9ydCBCYWNrcHJlc3N1cmUgd2l0aCB0aGUgcmVhZHkgc2lnbmFs" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5SZWFkeUxhdGVuY3k=::MA==::UmVhZHkgTGF0ZW5jeQ==" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5FcnJvcldpZHRo::MA==::RXJyb3IgU2lnbmFsIFdpZHRoIChiaXRzKQ==" +set_global_assignment -entity "altera_avalon_packets_to_master" -library "jtag_io" -name IP_COMPONENT_NAME "YWx0ZXJhX2F2YWxvbl9wYWNrZXRzX3RvX21hc3Rlcg==" +set_global_assignment -entity "altera_avalon_packets_to_master" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "QXZhbG9uIFBhY2tldHMgdG8gVHJhbnNhY3Rpb24gQ29udmVydGVy" +set_global_assignment -entity "altera_avalon_packets_to_master" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "altera_avalon_packets_to_master" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "altera_avalon_packets_to_master" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "altera_avalon_packets_to_master" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "altera_avalon_packets_to_master" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "QXZhbG9uIFBhY2tldHMgdG8gVHJhbnNhY3Rpb24gQ29udmVydGVy" +set_global_assignment -entity "altera_avalon_packets_to_master" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RVhQT1JUX01BU1RFUl9TSUdOQUxT::MA==::RVhQT1JUX01BU1RFUl9TSUdOQUxT" +set_global_assignment -entity "altera_avalon_packets_to_master" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RkFTVF9WRVI=::MA==::RW5oYW5jZWQgdHJhbnNhY3Rpb24gbWFzdGVy" +set_global_assignment -entity "altera_avalon_st_packets_to_bytes" -library "jtag_io" -name IP_COMPONENT_NAME "YWx0ZXJhX2F2YWxvbl9zdF9wYWNrZXRzX3RvX2J5dGVz" +set_global_assignment -entity "altera_avalon_st_packets_to_bytes" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "QXZhbG9uLVNUIFBhY2tldHMgdG8gQnl0ZXMgQ29udmVydGVy" +set_global_assignment -entity "altera_avalon_st_packets_to_bytes" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "altera_avalon_st_packets_to_bytes" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "altera_avalon_st_packets_to_bytes" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "altera_avalon_st_packets_to_bytes" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "altera_avalon_st_packets_to_bytes" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "QXZhbG9uLVNUIFBhY2tldHMgdG8gQnl0ZXMgQ29udmVydGVy" +set_global_assignment -entity "altera_avalon_st_packets_to_bytes" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Q0hBTk5FTF9XSURUSF9ERVJJVkVE::OA==::Q0hBTk5FTF9XSURUSF9ERVJJVkVE" +set_global_assignment -entity "altera_avalon_st_packets_to_bytes" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RU5DT0RJTkc=::MA==::RW5jb2Rpbmc=" +set_global_assignment -entity "altera_avalon_st_bytes_to_packets" -library "jtag_io" -name IP_COMPONENT_NAME "YWx0ZXJhX2F2YWxvbl9zdF9ieXRlc190b19wYWNrZXRz" +set_global_assignment -entity "altera_avalon_st_bytes_to_packets" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "QXZhbG9uLVNUIEJ5dGVzIHRvIFBhY2tldHMgQ29udmVydGVy" +set_global_assignment -entity "altera_avalon_st_bytes_to_packets" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "altera_avalon_st_bytes_to_packets" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "altera_avalon_st_bytes_to_packets" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "altera_avalon_st_bytes_to_packets" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "altera_avalon_st_bytes_to_packets" -library "jtag_io" -name IP_COMPONENT_DESCRIPTION "QXZhbG9uLVNUIEJ5dGVzIHRvIFBhY2tldHMgQ29udmVydGVy" +set_global_assignment -entity "altera_avalon_st_bytes_to_packets" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Q0hBTk5FTF9XSURUSF9ERVJJVkVE::OA==::Q0hBTk5FTF9XSURUSF9ERVJJVkVE" +set_global_assignment -entity "altera_avalon_st_bytes_to_packets" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RU5DT0RJTkc=::MA==::RW5jb2Rpbmc=" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_NAME "anRhZ19pb19tYXN0ZXJfMF90aW1pbmdfYWR0" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "QXZhbG9uLVNUIFRpbWluZyBBZGFwdGVy" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5DaGFubmVsV2lkdGg=::MA==::Q2hhbm5lbCBTaWduYWwgV2lkdGggKGJpdHMp" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5NYXhDaGFubmVs::MA==::TWF4IENoYW5uZWw=" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5CaXRzUGVyU3ltYm9s::OA==::RGF0YSBCaXRzIFBlciBTeW1ib2w=" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VQYWNrZXRz::ZmFsc2U=::SW5jbHVkZSBQYWNrZXQgU3VwcG9ydA==" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VFbXB0eQ==::ZmFsc2U=::aW5Vc2VFbXB0eQ==" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5TeW1ib2xzUGVyQmVhdA==::MQ==::RGF0YSBTeW1ib2xzIFBlciBCZWF0" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VSZWFkeQ==::ZmFsc2U=::U3VwcG9ydCBCYWNrcHJlc3N1cmUgd2l0aCB0aGUgcmVhZHkgc2lnbmFs" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0VXNlUmVhZHk=::dHJ1ZQ==::U3VwcG9ydCBCYWNrcHJlc3N1cmUgd2l0aCB0aGUgcmVhZHkgc2lnbmFs" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0UmVhZHlMYXRlbmN5::MA==::UmVhZHkgTGF0ZW5jeQ==" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5FcnJvcldpZHRo::MA==::RXJyb3IgU2lnbmFsIFdpZHRoIChiaXRzKQ==" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_PARAMETER "aW5Vc2VWYWxpZA==::dHJ1ZQ==::SW5jbHVkZSBWYWxpZCBTaWduYWw=" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_COMPONENT_PARAMETER "b3V0VXNlVmFsaWQ=::dHJ1ZQ==::SW5jbHVkIFZhbGlkIFNpZ25hbA==" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_COMPONENT_NAME "YWx0ZXJhX2F2YWxvbl9zdF9qdGFnX2ludGVyZmFjZQ==" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "QXZhbG9uLVNUIEpUQUcgSW50ZXJmYWNl" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_COMPONENT_INTERNAL "On" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_COMPONENT_AUTHOR "QWx0ZXJhIENvcnBvcmF0aW9u" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_COMPONENT_PARAMETER "UFVSUE9TRQ==::MQ==::UFVSUE9TRQ==" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVBTVFJFQU1fRklGT19TSVpF::MA==::VVBTVFJFQU1fRklGT19TSVpF" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RE9XTlNUUkVBTV9GSUZPX1NJWkU=::NjQ=::RE9XTlNUUkVBTV9GSUZPX1NJWkU=" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_COMPONENT_PARAMETER "TUdNVF9DSEFOTkVMX1dJRFRI::LTE=::TWFuYWdlbWVudCBjaGFubmVsIHdpZHRo" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RVhQT1JUX0pUQUc=::MA==::RVhQT1JUX0pUQUc=" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX1BMSQ==::MA==::VXNlIFNpbXVsYXRpb24gTGluayBNb2Rl" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_COMPONENT_PARAMETER "VVNFX0RPV05TVFJFQU1fUkVBRFk=::MA==::VVNFX0RPV05TVFJFQU1fUkVBRFk=" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Q09NUE9ORU5UX0NMT0NL::MA==::Q09NUE9ORU5UX0NMT0NL" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_COMPONENT_PARAMETER "RkFCUklD::Mi4w::RkFCUklD" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_NAME "anRhZ19pb19pbjA=" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_DISPLAY_NAME "UElPIChQYXJhbGxlbCBJL08pIEludGVsIEZQR0EgSVA=" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_AUTHOR "SW50ZWwgQ29ycG9yYXRpb24=" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Y2FwdHVyZUVkZ2U=::ZmFsc2U=::U3luY2hyb25vdXNseSBjYXB0dXJl" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGlyZWN0aW9u::SW5wdXQ=::RGlyZWN0aW9u" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Z2VuZXJhdGVJUlE=::ZmFsc2U=::R2VuZXJhdGUgSVJR" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "c2ltRG9UZXN0QmVuY2hXaXJpbmc=::ZmFsc2U=::SGFyZHdpcmUgUElPIGlucHV0cyBpbiB0ZXN0IGJlbmNo" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "d2lkdGg=::MzI=::V2lkdGggKDEtMzIgYml0cyk=" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "Y2xvY2tSYXRl::NTAwMDAwMDA=::Y2xvY2tSYXRl" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGVyaXZlZF9oYXNfdHJp::ZmFsc2U=::ZGVyaXZlZF9oYXNfdHJp" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGVyaXZlZF9oYXNfb3V0::ZmFsc2U=::ZGVyaXZlZF9oYXNfb3V0" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGVyaXZlZF9oYXNfaW4=::dHJ1ZQ==::ZGVyaXZlZF9oYXNfaW4=" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGVyaXZlZF9kb190ZXN0X2JlbmNoX3dpcmluZw==::ZmFsc2U=::ZGVyaXZlZF9kb190ZXN0X2JlbmNoX3dpcmluZw==" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGVyaXZlZF9jYXB0dXJl::ZmFsc2U=::ZGVyaXZlZF9jYXB0dXJl" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGVyaXZlZF9lZGdlX3R5cGU=::Tk9ORQ==::ZGVyaXZlZF9lZGdlX3R5cGU=" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGVyaXZlZF9pcnFfdHlwZQ==::Tk9ORQ==::ZGVyaXZlZF9pcnFfdHlwZQ==" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_COMPONENT_PARAMETER "ZGVyaXZlZF9oYXNfaXJx::ZmFsc2U=::ZGVyaXZlZF9oYXNfaXJx" + +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "jtag_io.v"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_reset_controller.v"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_reset_synchronizer.v"] +set_global_assignment -library "jtag_io" -name SDC_FILE [file join $::quartus(qip_path) "submodules/altera_reset_controller.sdc"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/jtag_io_mm_interconnect_0.v"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter.v"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0.sv"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/jtag_io_mm_interconnect_0_rsp_mux.sv"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_merlin_arbitrator.sv"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/jtag_io_mm_interconnect_0_rsp_demux.sv"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/jtag_io_mm_interconnect_0_cmd_mux.sv"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/jtag_io_mm_interconnect_0_cmd_demux.sv"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_merlin_traffic_limiter.sv"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_merlin_reorder_memory.sv"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_avalon_sc_fifo.v"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_avalon_st_pipeline_base.v"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/jtag_io_mm_interconnect_0_router_001.sv"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/jtag_io_mm_interconnect_0_router.sv"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_merlin_slave_agent.sv"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_merlin_burst_uncompressor.sv"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_merlin_master_agent.sv"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_merlin_slave_translator.sv"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_merlin_master_translator.sv"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/jtag_io_out0.v"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/jtag_io_master_0.v"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/jtag_io_master_0_p2b_adapter.sv"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/jtag_io_master_0_b2p_adapter.sv"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_avalon_packets_to_master.v"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_avalon_st_packets_to_bytes.v"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_avalon_st_bytes_to_packets.v"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/jtag_io_master_0_timing_adt.sv"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_avalon_st_jtag_interface.v"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_jtag_dc_streaming.v"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_jtag_sld_node.v"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_jtag_streaming.v"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_avalon_st_clock_crosser.v"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_std_synchronizer_nocut.v"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_avalon_st_idle_remover.v"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_avalon_st_idle_inserter.v"] +set_global_assignment -library "jtag_io" -name SYSTEMVERILOG_FILE [file join $::quartus(qip_path) "submodules/altera_avalon_st_pipeline_stage.sv"] +set_global_assignment -library "jtag_io" -name SDC_FILE [file join $::quartus(qip_path) "submodules/altera_avalon_st_jtag_interface.sdc"] +set_global_assignment -library "jtag_io" -name VERILOG_FILE [file join $::quartus(qip_path) "submodules/jtag_io_in0.v"] + +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_TOOL_NAME "altera_reset_controller" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "altera_reset_controller" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "jtag_io_mm_interconnect_0" -library "jtag_io" -name IP_TOOL_NAME "altera_mm_interconnect" +set_global_assignment -entity "jtag_io_mm_interconnect_0" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "jtag_io_mm_interconnect_0" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_TOOL_NAME "altera_avalon_st_adapter" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_TOOL_NAME "error_adapter" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_TOOL_NAME "altera_merlin_multiplexer" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_mux" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_TOOL_NAME "altera_merlin_demultiplexer" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "jtag_io_mm_interconnect_0_rsp_demux" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_TOOL_NAME "altera_merlin_multiplexer" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_mux" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_TOOL_NAME "altera_merlin_demultiplexer" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "jtag_io_mm_interconnect_0_cmd_demux" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_TOOL_NAME "altera_merlin_traffic_limiter" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "altera_merlin_traffic_limiter" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_TOOL_NAME "altera_merlin_router" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router_001" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_TOOL_NAME "altera_merlin_router" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "jtag_io_mm_interconnect_0_router" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_TOOL_NAME "altera_avalon_sc_fifo" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "altera_avalon_sc_fifo" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_TOOL_NAME "altera_merlin_slave_agent" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "altera_merlin_slave_agent" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_TOOL_NAME "altera_merlin_master_agent" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "altera_merlin_master_agent" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_TOOL_NAME "altera_merlin_slave_translator" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "altera_merlin_slave_translator" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_TOOL_NAME "altera_merlin_master_translator" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "altera_merlin_master_translator" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_TOOL_NAME "altera_avalon_pio" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "jtag_io_out0" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "jtag_io_master_0" -library "jtag_io" -name IP_TOOL_NAME "altera_jtag_avalon_master" +set_global_assignment -entity "jtag_io_master_0" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "jtag_io_master_0" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_TOOL_NAME "channel_adapter" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "jtag_io_master_0_p2b_adapter" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_TOOL_NAME "channel_adapter" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "jtag_io_master_0_b2p_adapter" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "altera_avalon_packets_to_master" -library "jtag_io" -name IP_TOOL_NAME "altera_avalon_packets_to_master" +set_global_assignment -entity "altera_avalon_packets_to_master" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "altera_avalon_packets_to_master" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "altera_avalon_st_packets_to_bytes" -library "jtag_io" -name IP_TOOL_NAME "altera_avalon_st_packets_to_bytes" +set_global_assignment -entity "altera_avalon_st_packets_to_bytes" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "altera_avalon_st_packets_to_bytes" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "altera_avalon_st_bytes_to_packets" -library "jtag_io" -name IP_TOOL_NAME "altera_avalon_st_bytes_to_packets" +set_global_assignment -entity "altera_avalon_st_bytes_to_packets" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "altera_avalon_st_bytes_to_packets" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_TOOL_NAME "timing_adapter" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "jtag_io_master_0_timing_adt" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_TOOL_NAME "altera_jtag_dc_streaming" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "altera_avalon_st_jtag_interface" -library "jtag_io" -name IP_TOOL_ENV "Qsys" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_TOOL_NAME "altera_avalon_pio" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "jtag_io_in0" -library "jtag_io" -name IP_TOOL_ENV "Qsys" diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/jtag_io.regmap b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/jtag_io.regmap new file mode 100755 index 0000000..94a3695 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/jtag_io.regmap @@ -0,0 +1,478 @@ + + +jtag_io + + + jtag_io_out1_s1_altera_avalon_pio0x00000000 + + 0x0 + 32 + registers + + + + DATA + Data + Reading from data returns the value present at the input ports. If the PIO core hardware is configured in output-only mode, reading from data returns an undefined value. Writing to data stores the value to a register that drives the output ports. If the PIO core hardware is configured in input-only mode, writing to data has no effect. If the PIO core hardware is in bidirectional mode, the registered value appears on an output port only when the corresponding bit in the direction register is set to 1 (output). + 0x0 + 32 + read-write + 0x0 + 0xffffffff + + data + Reads: Data value currently on PIO inputs. Writes: New value to drive on PIO outputs. + 0x0 + 32 + read-write + + + + + DIRECTION + Direction + The direction register controls the data direction for each PIO port, assuming the port is bidirectional. When bit n in direction is set to 1, port n drives out the value in the corresponding bit of the data register The direction register only exists when the PIO core hardware is configured in bidirectional mode. The mode (input, output, or bidirectional) is specified at system generation time, and cannot be changed at runtime. In input-only or output-only mode, the direction register does not exist. In this case, reading direction returns an undefined value, writing direction has no effect. After reset, all bits of direction are 0, so that all bidirectional I/O ports are configured as inputs. If those PIO ports are connected to device pins, the pins are held in a high-impedance state. In bi-directional mode, to change the direction of the PIO port, reprogram the direction register. + 0x4 + 32 + read-write + 0x0 + 0xffffffff + + direction + Individual direction control for each I/O port. A value of 0 sets the direction to input; 1 sets the direction to output. + 0x0 + 32 + read-write + + + + + IRQ_MASK + Interrupt mask + Setting a bit in the interruptmask register to 1 enables interrupts for the corresponding PIO input port. Interrupt behavior depends on the hardware configuration of the PIO core. The interruptmask register only exists when the hardware is configured to generate IRQs. If the core cannot generate IRQs, reading interruptmask returns an undefined value, and writing to interruptmask has no effect. After reset, all bits of interruptmask are zero, so that interrupts are disabled for all PIO ports. + 0x8 + 32 + read-write + 0x0 + 0xffffffff + + interruptmask + IRQ enable/disable for each input port. Setting a bit to 1 enables interrupts for the corresponding port. + 0x0 + 32 + read-write + + + + + EDGE_CAP + Edge capture + Bit n in the edgecapture register is set to 1 whenever an edge is detected on input port n. An Avalon-MM master peripheral can read the edgecapture register to determine if an edge has occurred on any of the PIO input ports. If the option Enable bit-clearing for edge capture register is turned off, writing any value to the edgecapture register clears all bits in the register. Otherwise, writing a 1 to a particular bit in the register clears only that bit. The type of edge(s) to detect is fixed in hardware at system generation time. The edgecapture register only exists when the hardware is configured to capture edges. If the core is not configured to capture edges, reading from edgecapture returns an undefined value, and writing to edgecapture has no effect. + 0xc + 32 + read-write + 0x0 + 0xffffffff + + edgecapture + Edge detection for each input port. + 0x0 + 32 + read-write + + + + + SET_BIT + Outset + You can use the outset register to set individual bits of the output port. For example, to set bit 6 of the output port, write 0x40 to the outset register. This register is only present when the option Enable individual bit set/clear output register is turned on. + 0x10 + 32 + write-only + 0x0 + 0xffffffff + + outset + Specifies which bit of the output port to set. + 0x0 + 32 + write-only + + + + + CLEAR_BITS + Outclear + You can use the outclear register to clear individual bits of the output port. For example, writing 0x08 to the outclear register clears bit 3 of the output port. This register is only present when the option Enable individual bit set/clear output register is turned on. + 0x14 + 32 + write-only + 0x0 + 0xffffffff + + outclear + Specifies which output bit to clear. + 0x0 + 32 + write-only + + + + + + + jtag_io_out0_s1_altera_avalon_pio0x00000000 + + 0x0 + 32 + registers + + + + DATA + Data + Reading from data returns the value present at the input ports. If the PIO core hardware is configured in output-only mode, reading from data returns an undefined value. Writing to data stores the value to a register that drives the output ports. If the PIO core hardware is configured in input-only mode, writing to data has no effect. If the PIO core hardware is in bidirectional mode, the registered value appears on an output port only when the corresponding bit in the direction register is set to 1 (output). + 0x0 + 32 + read-write + 0x0 + 0xffffffff + + data + Reads: Data value currently on PIO inputs. Writes: New value to drive on PIO outputs. + 0x0 + 32 + read-write + + + + + DIRECTION + Direction + The direction register controls the data direction for each PIO port, assuming the port is bidirectional. When bit n in direction is set to 1, port n drives out the value in the corresponding bit of the data register The direction register only exists when the PIO core hardware is configured in bidirectional mode. The mode (input, output, or bidirectional) is specified at system generation time, and cannot be changed at runtime. In input-only or output-only mode, the direction register does not exist. In this case, reading direction returns an undefined value, writing direction has no effect. After reset, all bits of direction are 0, so that all bidirectional I/O ports are configured as inputs. If those PIO ports are connected to device pins, the pins are held in a high-impedance state. In bi-directional mode, to change the direction of the PIO port, reprogram the direction register. + 0x4 + 32 + read-write + 0x0 + 0xffffffff + + direction + Individual direction control for each I/O port. A value of 0 sets the direction to input; 1 sets the direction to output. + 0x0 + 32 + read-write + + + + + IRQ_MASK + Interrupt mask + Setting a bit in the interruptmask register to 1 enables interrupts for the corresponding PIO input port. Interrupt behavior depends on the hardware configuration of the PIO core. The interruptmask register only exists when the hardware is configured to generate IRQs. If the core cannot generate IRQs, reading interruptmask returns an undefined value, and writing to interruptmask has no effect. After reset, all bits of interruptmask are zero, so that interrupts are disabled for all PIO ports. + 0x8 + 32 + read-write + 0x0 + 0xffffffff + + interruptmask + IRQ enable/disable for each input port. Setting a bit to 1 enables interrupts for the corresponding port. + 0x0 + 32 + read-write + + + + + EDGE_CAP + Edge capture + Bit n in the edgecapture register is set to 1 whenever an edge is detected on input port n. An Avalon-MM master peripheral can read the edgecapture register to determine if an edge has occurred on any of the PIO input ports. If the option Enable bit-clearing for edge capture register is turned off, writing any value to the edgecapture register clears all bits in the register. Otherwise, writing a 1 to a particular bit in the register clears only that bit. The type of edge(s) to detect is fixed in hardware at system generation time. The edgecapture register only exists when the hardware is configured to capture edges. If the core is not configured to capture edges, reading from edgecapture returns an undefined value, and writing to edgecapture has no effect. + 0xc + 32 + read-write + 0x0 + 0xffffffff + + edgecapture + Edge detection for each input port. + 0x0 + 32 + read-write + + + + + SET_BIT + Outset + You can use the outset register to set individual bits of the output port. For example, to set bit 6 of the output port, write 0x40 to the outset register. This register is only present when the option Enable individual bit set/clear output register is turned on. + 0x10 + 32 + write-only + 0x0 + 0xffffffff + + outset + Specifies which bit of the output port to set. + 0x0 + 32 + write-only + + + + + CLEAR_BITS + Outclear + You can use the outclear register to clear individual bits of the output port. For example, writing 0x08 to the outclear register clears bit 3 of the output port. This register is only present when the option Enable individual bit set/clear output register is turned on. + 0x14 + 32 + write-only + 0x0 + 0xffffffff + + outclear + Specifies which output bit to clear. + 0x0 + 32 + write-only + + + + + + + jtag_io_in1_s1_altera_avalon_pio0x00000000 + + 0x0 + 32 + registers + + + + DATA + Data + Reading from data returns the value present at the input ports. If the PIO core hardware is configured in output-only mode, reading from data returns an undefined value. Writing to data stores the value to a register that drives the output ports. If the PIO core hardware is configured in input-only mode, writing to data has no effect. If the PIO core hardware is in bidirectional mode, the registered value appears on an output port only when the corresponding bit in the direction register is set to 1 (output). + 0x0 + 32 + read-write + 0x0 + 0xffffffff + + data + Reads: Data value currently on PIO inputs. Writes: New value to drive on PIO outputs. + 0x0 + 32 + read-write + + + + + DIRECTION + Direction + The direction register controls the data direction for each PIO port, assuming the port is bidirectional. When bit n in direction is set to 1, port n drives out the value in the corresponding bit of the data register The direction register only exists when the PIO core hardware is configured in bidirectional mode. The mode (input, output, or bidirectional) is specified at system generation time, and cannot be changed at runtime. In input-only or output-only mode, the direction register does not exist. In this case, reading direction returns an undefined value, writing direction has no effect. After reset, all bits of direction are 0, so that all bidirectional I/O ports are configured as inputs. If those PIO ports are connected to device pins, the pins are held in a high-impedance state. In bi-directional mode, to change the direction of the PIO port, reprogram the direction register. + 0x4 + 32 + read-write + 0x0 + 0xffffffff + + direction + Individual direction control for each I/O port. A value of 0 sets the direction to input; 1 sets the direction to output. + 0x0 + 32 + read-write + + + + + IRQ_MASK + Interrupt mask + Setting a bit in the interruptmask register to 1 enables interrupts for the corresponding PIO input port. Interrupt behavior depends on the hardware configuration of the PIO core. The interruptmask register only exists when the hardware is configured to generate IRQs. If the core cannot generate IRQs, reading interruptmask returns an undefined value, and writing to interruptmask has no effect. After reset, all bits of interruptmask are zero, so that interrupts are disabled for all PIO ports. + 0x8 + 32 + read-write + 0x0 + 0xffffffff + + interruptmask + IRQ enable/disable for each input port. Setting a bit to 1 enables interrupts for the corresponding port. + 0x0 + 32 + read-write + + + + + EDGE_CAP + Edge capture + Bit n in the edgecapture register is set to 1 whenever an edge is detected on input port n. An Avalon-MM master peripheral can read the edgecapture register to determine if an edge has occurred on any of the PIO input ports. If the option Enable bit-clearing for edge capture register is turned off, writing any value to the edgecapture register clears all bits in the register. Otherwise, writing a 1 to a particular bit in the register clears only that bit. The type of edge(s) to detect is fixed in hardware at system generation time. The edgecapture register only exists when the hardware is configured to capture edges. If the core is not configured to capture edges, reading from edgecapture returns an undefined value, and writing to edgecapture has no effect. + 0xc + 32 + read-write + 0x0 + 0xffffffff + + edgecapture + Edge detection for each input port. + 0x0 + 32 + read-write + + + + + SET_BIT + Outset + You can use the outset register to set individual bits of the output port. For example, to set bit 6 of the output port, write 0x40 to the outset register. This register is only present when the option Enable individual bit set/clear output register is turned on. + 0x10 + 32 + write-only + 0x0 + 0xffffffff + + outset + Specifies which bit of the output port to set. + 0x0 + 32 + write-only + + + + + CLEAR_BITS + Outclear + You can use the outclear register to clear individual bits of the output port. For example, writing 0x08 to the outclear register clears bit 3 of the output port. This register is only present when the option Enable individual bit set/clear output register is turned on. + 0x14 + 32 + write-only + 0x0 + 0xffffffff + + outclear + Specifies which output bit to clear. + 0x0 + 32 + write-only + + + + + + + jtag_io_in0_s1_altera_avalon_pio0x00000000 + + 0x0 + 32 + registers + + + + DATA + Data + Reading from data returns the value present at the input ports. If the PIO core hardware is configured in output-only mode, reading from data returns an undefined value. Writing to data stores the value to a register that drives the output ports. If the PIO core hardware is configured in input-only mode, writing to data has no effect. If the PIO core hardware is in bidirectional mode, the registered value appears on an output port only when the corresponding bit in the direction register is set to 1 (output). + 0x0 + 32 + read-write + 0x0 + 0xffffffff + + data + Reads: Data value currently on PIO inputs. Writes: New value to drive on PIO outputs. + 0x0 + 32 + read-write + + + + + DIRECTION + Direction + The direction register controls the data direction for each PIO port, assuming the port is bidirectional. When bit n in direction is set to 1, port n drives out the value in the corresponding bit of the data register The direction register only exists when the PIO core hardware is configured in bidirectional mode. The mode (input, output, or bidirectional) is specified at system generation time, and cannot be changed at runtime. In input-only or output-only mode, the direction register does not exist. In this case, reading direction returns an undefined value, writing direction has no effect. After reset, all bits of direction are 0, so that all bidirectional I/O ports are configured as inputs. If those PIO ports are connected to device pins, the pins are held in a high-impedance state. In bi-directional mode, to change the direction of the PIO port, reprogram the direction register. + 0x4 + 32 + read-write + 0x0 + 0xffffffff + + direction + Individual direction control for each I/O port. A value of 0 sets the direction to input; 1 sets the direction to output. + 0x0 + 32 + read-write + + + + + IRQ_MASK + Interrupt mask + Setting a bit in the interruptmask register to 1 enables interrupts for the corresponding PIO input port. Interrupt behavior depends on the hardware configuration of the PIO core. The interruptmask register only exists when the hardware is configured to generate IRQs. If the core cannot generate IRQs, reading interruptmask returns an undefined value, and writing to interruptmask has no effect. After reset, all bits of interruptmask are zero, so that interrupts are disabled for all PIO ports. + 0x8 + 32 + read-write + 0x0 + 0xffffffff + + interruptmask + IRQ enable/disable for each input port. Setting a bit to 1 enables interrupts for the corresponding port. + 0x0 + 32 + read-write + + + + + EDGE_CAP + Edge capture + Bit n in the edgecapture register is set to 1 whenever an edge is detected on input port n. An Avalon-MM master peripheral can read the edgecapture register to determine if an edge has occurred on any of the PIO input ports. If the option Enable bit-clearing for edge capture register is turned off, writing any value to the edgecapture register clears all bits in the register. Otherwise, writing a 1 to a particular bit in the register clears only that bit. The type of edge(s) to detect is fixed in hardware at system generation time. The edgecapture register only exists when the hardware is configured to capture edges. If the core is not configured to capture edges, reading from edgecapture returns an undefined value, and writing to edgecapture has no effect. + 0xc + 32 + read-write + 0x0 + 0xffffffff + + edgecapture + Edge detection for each input port. + 0x0 + 32 + read-write + + + + + SET_BIT + Outset + You can use the outset register to set individual bits of the output port. For example, to set bit 6 of the output port, write 0x40 to the outset register. This register is only present when the option Enable individual bit set/clear output register is turned on. + 0x10 + 32 + write-only + 0x0 + 0xffffffff + + outset + Specifies which bit of the output port to set. + 0x0 + 32 + write-only + + + + + CLEAR_BITS + Outclear + You can use the outclear register to clear individual bits of the output port. For example, writing 0x08 to the outclear register clears bit 3 of the output port. This register is only present when the option Enable individual bit set/clear output register is turned on. + 0x14 + 32 + write-only + 0x0 + 0xffffffff + + outclear + Specifies which output bit to clear. + 0x0 + 32 + write-only + + + + + + + \ No newline at end of file diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/jtag_io.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/jtag_io.v new file mode 100755 index 0000000..6179883 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/jtag_io.v @@ -0,0 +1,186 @@ +// jtag_io.v + +// Generated using ACDS version 20.1 711 + +`timescale 1 ps / 1 ps +module jtag_io ( + input wire clk_clk, // clk.clk + input wire [31:0] in0_export, // in0.export + input wire [31:0] in1_export, // in1.export + output wire [31:0] out0_export, // out0.export + output wire [31:0] out1_export, // out1.export + input wire reset_reset_n // reset.reset_n + ); + + wire [31:0] master_0_master_readdata; // mm_interconnect_0:master_0_master_readdata -> master_0:master_readdata + wire master_0_master_waitrequest; // mm_interconnect_0:master_0_master_waitrequest -> master_0:master_waitrequest + wire [31:0] master_0_master_address; // master_0:master_address -> mm_interconnect_0:master_0_master_address + wire master_0_master_read; // master_0:master_read -> mm_interconnect_0:master_0_master_read + wire [3:0] master_0_master_byteenable; // master_0:master_byteenable -> mm_interconnect_0:master_0_master_byteenable + wire master_0_master_readdatavalid; // mm_interconnect_0:master_0_master_readdatavalid -> master_0:master_readdatavalid + wire master_0_master_write; // master_0:master_write -> mm_interconnect_0:master_0_master_write + wire [31:0] master_0_master_writedata; // master_0:master_writedata -> mm_interconnect_0:master_0_master_writedata + wire mm_interconnect_0_out0_s1_chipselect; // mm_interconnect_0:out0_s1_chipselect -> out0:chipselect + wire [31:0] mm_interconnect_0_out0_s1_readdata; // out0:readdata -> mm_interconnect_0:out0_s1_readdata + wire [1:0] mm_interconnect_0_out0_s1_address; // mm_interconnect_0:out0_s1_address -> out0:address + wire mm_interconnect_0_out0_s1_write; // mm_interconnect_0:out0_s1_write -> out0:write_n + wire [31:0] mm_interconnect_0_out0_s1_writedata; // mm_interconnect_0:out0_s1_writedata -> out0:writedata + wire mm_interconnect_0_out1_s1_chipselect; // mm_interconnect_0:out1_s1_chipselect -> out1:chipselect + wire [31:0] mm_interconnect_0_out1_s1_readdata; // out1:readdata -> mm_interconnect_0:out1_s1_readdata + wire [1:0] mm_interconnect_0_out1_s1_address; // mm_interconnect_0:out1_s1_address -> out1:address + wire mm_interconnect_0_out1_s1_write; // mm_interconnect_0:out1_s1_write -> out1:write_n + wire [31:0] mm_interconnect_0_out1_s1_writedata; // mm_interconnect_0:out1_s1_writedata -> out1:writedata + wire [31:0] mm_interconnect_0_in0_s1_readdata; // in0:readdata -> mm_interconnect_0:in0_s1_readdata + wire [1:0] mm_interconnect_0_in0_s1_address; // mm_interconnect_0:in0_s1_address -> in0:address + wire [31:0] mm_interconnect_0_in1_s1_readdata; // in1:readdata -> mm_interconnect_0:in1_s1_readdata + wire [1:0] mm_interconnect_0_in1_s1_address; // mm_interconnect_0:in1_s1_address -> in1:address + wire rst_controller_reset_out_reset; // rst_controller:reset_out -> [in0:reset_n, in1:reset_n, mm_interconnect_0:master_0_clk_reset_reset_bridge_in_reset_reset, mm_interconnect_0:out0_reset_reset_bridge_in_reset_reset, out0:reset_n, out1:reset_n] + + jtag_io_in0 in0 ( + .clk (clk_clk), // clk.clk + .reset_n (~rst_controller_reset_out_reset), // reset.reset_n + .address (mm_interconnect_0_in0_s1_address), // s1.address + .readdata (mm_interconnect_0_in0_s1_readdata), // .readdata + .in_port (in0_export) // external_connection.export + ); + + jtag_io_in0 in1 ( + .clk (clk_clk), // clk.clk + .reset_n (~rst_controller_reset_out_reset), // reset.reset_n + .address (mm_interconnect_0_in1_s1_address), // s1.address + .readdata (mm_interconnect_0_in1_s1_readdata), // .readdata + .in_port (in1_export) // external_connection.export + ); + + jtag_io_master_0 #( + .USE_PLI (0), + .PLI_PORT (50000), + .FIFO_DEPTHS (2) + ) master_0 ( + .clk_clk (clk_clk), // clk.clk + .clk_reset_reset (~reset_reset_n), // clk_reset.reset + .master_address (master_0_master_address), // master.address + .master_readdata (master_0_master_readdata), // .readdata + .master_read (master_0_master_read), // .read + .master_write (master_0_master_write), // .write + .master_writedata (master_0_master_writedata), // .writedata + .master_waitrequest (master_0_master_waitrequest), // .waitrequest + .master_readdatavalid (master_0_master_readdatavalid), // .readdatavalid + .master_byteenable (master_0_master_byteenable), // .byteenable + .master_reset_reset () // master_reset.reset + ); + + jtag_io_out0 out0 ( + .clk (clk_clk), // clk.clk + .reset_n (~rst_controller_reset_out_reset), // reset.reset_n + .address (mm_interconnect_0_out0_s1_address), // s1.address + .write_n (~mm_interconnect_0_out0_s1_write), // .write_n + .writedata (mm_interconnect_0_out0_s1_writedata), // .writedata + .chipselect (mm_interconnect_0_out0_s1_chipselect), // .chipselect + .readdata (mm_interconnect_0_out0_s1_readdata), // .readdata + .out_port (out0_export) // external_connection.export + ); + + jtag_io_out0 out1 ( + .clk (clk_clk), // clk.clk + .reset_n (~rst_controller_reset_out_reset), // reset.reset_n + .address (mm_interconnect_0_out1_s1_address), // s1.address + .write_n (~mm_interconnect_0_out1_s1_write), // .write_n + .writedata (mm_interconnect_0_out1_s1_writedata), // .writedata + .chipselect (mm_interconnect_0_out1_s1_chipselect), // .chipselect + .readdata (mm_interconnect_0_out1_s1_readdata), // .readdata + .out_port (out1_export) // external_connection.export + ); + + jtag_io_mm_interconnect_0 mm_interconnect_0 ( + .clk_0_clk_clk (clk_clk), // clk_0_clk.clk + .master_0_clk_reset_reset_bridge_in_reset_reset (rst_controller_reset_out_reset), // master_0_clk_reset_reset_bridge_in_reset.reset + .out0_reset_reset_bridge_in_reset_reset (rst_controller_reset_out_reset), // out0_reset_reset_bridge_in_reset.reset + .master_0_master_address (master_0_master_address), // master_0_master.address + .master_0_master_waitrequest (master_0_master_waitrequest), // .waitrequest + .master_0_master_byteenable (master_0_master_byteenable), // .byteenable + .master_0_master_read (master_0_master_read), // .read + .master_0_master_readdata (master_0_master_readdata), // .readdata + .master_0_master_readdatavalid (master_0_master_readdatavalid), // .readdatavalid + .master_0_master_write (master_0_master_write), // .write + .master_0_master_writedata (master_0_master_writedata), // .writedata + .in0_s1_address (mm_interconnect_0_in0_s1_address), // in0_s1.address + .in0_s1_readdata (mm_interconnect_0_in0_s1_readdata), // .readdata + .in1_s1_address (mm_interconnect_0_in1_s1_address), // in1_s1.address + .in1_s1_readdata (mm_interconnect_0_in1_s1_readdata), // .readdata + .out0_s1_address (mm_interconnect_0_out0_s1_address), // out0_s1.address + .out0_s1_write (mm_interconnect_0_out0_s1_write), // .write + .out0_s1_readdata (mm_interconnect_0_out0_s1_readdata), // .readdata + .out0_s1_writedata (mm_interconnect_0_out0_s1_writedata), // .writedata + .out0_s1_chipselect (mm_interconnect_0_out0_s1_chipselect), // .chipselect + .out1_s1_address (mm_interconnect_0_out1_s1_address), // out1_s1.address + .out1_s1_write (mm_interconnect_0_out1_s1_write), // .write + .out1_s1_readdata (mm_interconnect_0_out1_s1_readdata), // .readdata + .out1_s1_writedata (mm_interconnect_0_out1_s1_writedata), // .writedata + .out1_s1_chipselect (mm_interconnect_0_out1_s1_chipselect) // .chipselect + ); + + altera_reset_controller #( + .NUM_RESET_INPUTS (1), + .OUTPUT_RESET_SYNC_EDGES ("deassert"), + .SYNC_DEPTH (2), + .RESET_REQUEST_PRESENT (0), + .RESET_REQ_WAIT_TIME (1), + .MIN_RST_ASSERTION_TIME (3), + .RESET_REQ_EARLY_DSRT_TIME (1), + .USE_RESET_REQUEST_IN0 (0), + .USE_RESET_REQUEST_IN1 (0), + .USE_RESET_REQUEST_IN2 (0), + .USE_RESET_REQUEST_IN3 (0), + .USE_RESET_REQUEST_IN4 (0), + .USE_RESET_REQUEST_IN5 (0), + .USE_RESET_REQUEST_IN6 (0), + .USE_RESET_REQUEST_IN7 (0), + .USE_RESET_REQUEST_IN8 (0), + .USE_RESET_REQUEST_IN9 (0), + .USE_RESET_REQUEST_IN10 (0), + .USE_RESET_REQUEST_IN11 (0), + .USE_RESET_REQUEST_IN12 (0), + .USE_RESET_REQUEST_IN13 (0), + .USE_RESET_REQUEST_IN14 (0), + .USE_RESET_REQUEST_IN15 (0), + .ADAPT_RESET_REQUEST (0) + ) rst_controller ( + .reset_in0 (~reset_reset_n), // reset_in0.reset + .clk (clk_clk), // clk.clk + .reset_out (rst_controller_reset_out_reset), // reset_out.reset + .reset_req (), // (terminated) + .reset_req_in0 (1'b0), // (terminated) + .reset_in1 (1'b0), // (terminated) + .reset_req_in1 (1'b0), // (terminated) + .reset_in2 (1'b0), // (terminated) + .reset_req_in2 (1'b0), // (terminated) + .reset_in3 (1'b0), // (terminated) + .reset_req_in3 (1'b0), // (terminated) + .reset_in4 (1'b0), // (terminated) + .reset_req_in4 (1'b0), // (terminated) + .reset_in5 (1'b0), // (terminated) + .reset_req_in5 (1'b0), // (terminated) + .reset_in6 (1'b0), // (terminated) + .reset_req_in6 (1'b0), // (terminated) + .reset_in7 (1'b0), // (terminated) + .reset_req_in7 (1'b0), // (terminated) + .reset_in8 (1'b0), // (terminated) + .reset_req_in8 (1'b0), // (terminated) + .reset_in9 (1'b0), // (terminated) + .reset_req_in9 (1'b0), // (terminated) + .reset_in10 (1'b0), // (terminated) + .reset_req_in10 (1'b0), // (terminated) + .reset_in11 (1'b0), // (terminated) + .reset_req_in11 (1'b0), // (terminated) + .reset_in12 (1'b0), // (terminated) + .reset_req_in12 (1'b0), // (terminated) + .reset_in13 (1'b0), // (terminated) + .reset_req_in13 (1'b0), // (terminated) + .reset_in14 (1'b0), // (terminated) + .reset_req_in14 (1'b0), // (terminated) + .reset_in15 (1'b0), // (terminated) + .reset_req_in15 (1'b0) // (terminated) + ); + +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_packets_to_master.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_packets_to_master.v new file mode 100755 index 0000000..3ce33e1 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_packets_to_master.v @@ -0,0 +1,1240 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// -------------------------------------------------------------------------------- +//| Avalon ST Packets to MM Master Transaction Component +// -------------------------------------------------------------------------------- + +`timescale 1ns / 100ps +// -------------------------------------------------------------------------------- +//| Fast Transaction Master +// -------------------------------------------------------------------------------- +module altera_avalon_packets_to_master ( + // Interface: clk + input wire clk, + input wire reset_n, + // Interface: ST in + output wire in_ready, + input wire in_valid, + input wire [ 7: 0] in_data, + input wire in_startofpacket, + input wire in_endofpacket, + + // Interface: ST out + input wire out_ready, + output wire out_valid, + output wire [ 7: 0] out_data, + output wire out_startofpacket, + output wire out_endofpacket, + + // Interface: MM out + output wire [31: 0] address, + input wire [31: 0] readdata, + output wire read, + output wire write, + output wire [ 3: 0] byteenable, + output wire [31: 0] writedata, + input wire waitrequest, + input wire readdatavalid +); + + wire [ 35: 0] fifo_readdata; + wire fifo_read; + wire fifo_empty; + wire [ 35: 0] fifo_writedata; + wire fifo_write; + wire fifo_write_waitrequest; + + // --------------------------------------------------------------------- + //| Parameter Declarations + // --------------------------------------------------------------------- + parameter EXPORT_MASTER_SIGNALS = 0; + parameter FIFO_DEPTHS = 2; + parameter FIFO_WIDTHU = 1; + parameter FAST_VER = 0; + + generate + if (FAST_VER) begin + packets_to_fifo p2f ( + .clk (clk), + .reset_n (reset_n), + .in_ready (in_ready), + .in_valid (in_valid), + .in_data (in_data), + .in_startofpacket (in_startofpacket), + .in_endofpacket (in_endofpacket), + .address (address), + .readdata (readdata), + .read (read), + .write (write), + .byteenable (byteenable), + .writedata (writedata), + .waitrequest (waitrequest), + .readdatavalid (readdatavalid), + .fifo_writedata (fifo_writedata), + .fifo_write (fifo_write), + .fifo_write_waitrequest (fifo_write_waitrequest) + ); + + fifo_to_packet f2p ( + .clk (clk), + .reset_n (reset_n), + .out_ready (out_ready), + .out_valid (out_valid), + .out_data (out_data), + .out_startofpacket (out_startofpacket), + .out_endofpacket (out_endofpacket), + .fifo_readdata (fifo_readdata), + .fifo_read (fifo_read), + .fifo_empty (fifo_empty) + ); + + fifo_buffer #( + .FIFO_DEPTHS(FIFO_DEPTHS), + .FIFO_WIDTHU(FIFO_WIDTHU) + ) fb ( + .wrclock (clk), + .reset_n (reset_n), + .avalonmm_write_slave_writedata (fifo_writedata), + .avalonmm_write_slave_write (fifo_write), + .avalonmm_write_slave_waitrequest (fifo_write_waitrequest), + .avalonmm_read_slave_readdata (fifo_readdata), + .avalonmm_read_slave_read (fifo_read), + .avalonmm_read_slave_waitrequest (fifo_empty) + ); + end else begin + packets_to_master p2m ( + .clk (clk), + .reset_n (reset_n), + .in_ready (in_ready), + .in_valid (in_valid), + .in_data (in_data), + .in_startofpacket (in_startofpacket), + .in_endofpacket (in_endofpacket), + .address (address), + .readdata (readdata), + .read (read), + .write (write), + .byteenable (byteenable), + .writedata (writedata), + .waitrequest (waitrequest), + .readdatavalid (readdatavalid), + .out_ready (out_ready), + .out_valid (out_valid), + .out_data (out_data), + .out_startofpacket (out_startofpacket), + .out_endofpacket (out_endofpacket) + ); + end + endgenerate +endmodule + +module packets_to_fifo ( + + // Interface: clk + input clk, + input reset_n, + // Interface: ST in + output reg in_ready, + input in_valid, + input [ 7: 0] in_data, + input in_startofpacket, + input in_endofpacket, + + // Interface: MM out + output reg [31: 0] address, + input [31: 0] readdata, + output reg read, + output reg write, + output reg [ 3: 0] byteenable, + output reg [31: 0] writedata, + input waitrequest, + input readdatavalid, + + // Interface: FIFO + // FIFO data format: + // | sop, eop, [1:0]valid, [31:0]data | + output reg [ 35: 0] fifo_writedata, + output reg fifo_write, + input wire fifo_write_waitrequest +); + + // --------------------------------------------------------------------- + //| Command Declarations + // --------------------------------------------------------------------- + localparam CMD_WRITE_NON_INCR = 8'h00; + localparam CMD_WRITE_INCR = 8'h04; + localparam CMD_READ_NON_INCR = 8'h10; + localparam CMD_READ_INCR = 8'h14; + + // --------------------------------------------------------------------- + //| Signal Declarations + // --------------------------------------------------------------------- + + reg [ 3: 0] state; + reg [ 7: 0] command; + reg [ 1: 0] current_byte, byte_avail; + reg [ 15: 0] counter; + reg [ 31: 0] read_data_buffer; + reg [ 31: 0] fifo_data_buffer; + reg in_ready_0; + reg first_trans, last_trans, fifo_sop; + reg [ 3: 0] unshifted_byteenable; + wire enable; + + localparam READY = 4'b0000, + GET_EXTRA = 4'b0001, + GET_SIZE1 = 4'b0010, + GET_SIZE2 = 4'b0011, + GET_ADDR1 = 4'b0100, + GET_ADDR2 = 4'b0101, + GET_ADDR3 = 4'b0110, + GET_ADDR4 = 4'b0111, + GET_WRITE_DATA = 4'b1000, + WRITE_WAIT = 4'b1001, + READ_ASSERT = 4'b1010, + READ_CMD_WAIT = 4'b1011, + READ_DATA_WAIT = 4'b1100, + PUSH_FIFO = 4'b1101, + PUSH_FIFO_WAIT = 4'b1110, + FIFO_CMD_WAIT = 4'b1111; + // --------------------------------------------------------------------- + //| Thingofamagick + // --------------------------------------------------------------------- + + assign enable = (in_ready & in_valid); + + always @* begin + in_ready = in_ready_0; + end + + always @(posedge clk or negedge reset_n) begin + if (!reset_n) begin + in_ready_0 <= 1'b0; + fifo_writedata <= 'b0; + fifo_write <= 1'b0; + fifo_sop <= 1'b0; + read <= 1'b0; + write <= 1'b0; + byteenable <= 'b0; + writedata <= 'b0; + address <= 'b0; + counter <= 'b0; + command <= 'b0; + first_trans <= 1'b0; + last_trans <= 1'b0; + state <= 'b0; + current_byte <= 'b0; + read_data_buffer <= 'b0; + unshifted_byteenable <= 'b0; + byte_avail <= 'b0; + fifo_data_buffer <= 'b0; + end else begin + address[1:0] <= 'b0; + in_ready_0 <= 1'b0; + + if (counter > 3) unshifted_byteenable <= 4'b1111; + else if (counter == 3) unshifted_byteenable <= 4'b0111; + else if (counter == 2) unshifted_byteenable <= 4'b0011; + else if (counter == 1) unshifted_byteenable <= 4'b0001; + + case (state) + READY : begin + in_ready_0 <= !fifo_write_waitrequest; + fifo_write <= 1'b0; + end + GET_EXTRA : begin + in_ready_0 <= 1'b1; + byteenable <= 'b0; + if (enable) state <= GET_SIZE1; + end + + GET_SIZE1 : begin + in_ready_0 <= 1'b1; + //load counter on reads only + counter[15:8] <= command[4]?in_data:8'b0; + if (enable) state <= GET_SIZE2; + end + + GET_SIZE2 : begin + in_ready_0 <= 1'b1; + //load counter on reads only + counter[7:0] <= command[4]?in_data:8'b0; + if (enable) state <= GET_ADDR1; + end + + GET_ADDR1 : begin + in_ready_0 <= 1'b1; + first_trans <= 1'b1; + last_trans <= 1'b0; + address[31:24] <= in_data; + if (enable) state <= GET_ADDR2; + end + + GET_ADDR2 : begin + in_ready_0 <= 1'b1; + address[23:16] <= in_data; + if (enable) state <= GET_ADDR3; + end + + GET_ADDR3 : begin + in_ready_0 <= 1'b1; + address[15:8] <= in_data; + if (enable) state <= GET_ADDR4; + end + + GET_ADDR4 : begin + in_ready_0 <= 1'b1; + address[7:2] <= in_data[7:2]; + current_byte <= in_data[1:0]; + if (enable) begin + if (command == CMD_WRITE_NON_INCR | command == CMD_WRITE_INCR) begin + state <= GET_WRITE_DATA; //writes + in_ready_0 <= 1'b1; + end + else if (command == CMD_READ_NON_INCR | command == CMD_READ_INCR) begin + state <= READ_ASSERT; //reads + in_ready_0 <= 1'b0; + end + else begin + //nops + //treat all unrecognized commands as nops as well + in_ready_0 <= 1'b0; + state <= FIFO_CMD_WAIT; + //| sop, eop, [1:0]valid, [31:0]data | + //| 1 , 1 , 2'b11 ,{counter,reserved_byte}| + fifo_writedata[7:0] <= (8'h80 | command); + fifo_writedata[35:8]<= {4'b1111,counter[7:0],counter[15:8],8'b0}; + fifo_write <= 1'b1; + counter <= 0; + end + end + end + + GET_WRITE_DATA : begin + in_ready_0 <= 1'b1; + if (enable) begin + counter <= counter + 1'b1; + //2 bit, should wrap by itself + current_byte <= current_byte + 1'b1; + if (in_endofpacket || current_byte == 3) + begin + in_ready_0 <= 1'b0; + write <= 1'b1; + state <= WRITE_WAIT; + end + end + if (in_endofpacket) begin + last_trans <= 1'b1; + end + // handle byte writes properly + // drive data pins based on addresses + case (current_byte) + 0: begin + writedata[7:0] <= in_data; + byteenable[0] <= 1'b1; + end + 1: begin + writedata[15:8] <= in_data; + byteenable[1] <= 1'b1; + end + 2: begin + writedata[23:16] <= in_data; + byteenable[2] <= 1'b1; + end + 3: begin + writedata[31:24] <= in_data; + byteenable[3] <= 1'b1; + end + endcase + end + WRITE_WAIT : begin + in_ready_0 <= 1'b0; + write <= 1'b1; + if (~waitrequest) begin + write <= 1'b0; + state <= GET_WRITE_DATA; + in_ready_0 <= 1'b1; + byteenable <= 'b0; + if (command[2] == 1'b1) begin + //increment address, but word-align it + address[31:2] <= (address[31:2] + 1'b1); + end + if (last_trans) begin + in_ready_0 <= 1'b0; + state <= FIFO_CMD_WAIT; + //| sop, eop, [1:0]valid, [31:0]data | + //| 1 , 1 , 2'b11 ,{counter,reserved_byte}| + fifo_writedata[7:0] <= (8'h80 | command); + fifo_writedata[35:8]<= {4'b1111,counter[7:0],counter[15:8],8'b0}; + fifo_write <= 1'b1; + counter <= 0; + end + end + end + READ_ASSERT : begin + if (current_byte == 3) byteenable <= unshifted_byteenable << 3; + if (current_byte == 2) byteenable <= unshifted_byteenable << 2; + if (current_byte == 1) byteenable <= unshifted_byteenable << 1; + if (current_byte == 0) byteenable <= unshifted_byteenable; + read <= 1'b1; + fifo_write <= 1'b0; + state <= READ_CMD_WAIT; + end + READ_CMD_WAIT : begin + // number of valid byte + case (byteenable) + 4'b0000 : byte_avail <= 1'b0; + 4'b0001 : byte_avail <= 1'b0; + 4'b0010 : byte_avail <= 1'b0; + 4'b0100 : byte_avail <= 1'b0; + 4'b1000 : byte_avail <= 1'b0; + 4'b0011 : byte_avail <= 1'b1; + 4'b0110 : byte_avail <= 1'b1; + 4'b1100 : byte_avail <= 1'b1; + 4'b0111 : byte_avail <= 2'h2; + 4'b1110 : byte_avail <= 2'h2; + default : byte_avail <= 2'h3; + endcase + read_data_buffer <= readdata; + read <= 1; + // if readdatavalid, take the data and + // go directly to READ_SEND_ISSUE. This is for fixed + // latency slaves. Ignore waitrequest in this case, + // since this master does not issue pipelined reads. + // + // For variable latency slaves, once waitrequest is low + // the read command is accepted, so deassert read and + // go to READ_DATA_WAIT to wait for readdatavalid + if (readdatavalid) begin + state <= PUSH_FIFO; + read <= 0; + end else begin + if (~waitrequest) begin + state <= READ_DATA_WAIT; + read <= 0; + end + end + end + READ_DATA_WAIT : begin + read_data_buffer <= readdata; + if (readdatavalid) begin + state <= PUSH_FIFO; + end + end + PUSH_FIFO : begin + fifo_write <= 1'b0; + fifo_sop <= 1'b0; + if (first_trans) begin + first_trans <= 1'b0; + fifo_sop <= 1'b1; + end + case (current_byte) + 3 : begin + fifo_data_buffer <= read_data_buffer >> 24; + counter <= counter - 1'b1; + end + 2 : begin + fifo_data_buffer <= read_data_buffer >> 16; + if (counter == 1) counter <= 0; + else counter <= counter - 2'h2; + end + 1 : begin + fifo_data_buffer <= read_data_buffer >> 8; + if (counter < 3) counter <= 0; + else counter <= counter - 2'h3; + end + default : begin + fifo_data_buffer <= read_data_buffer; + if (counter < 4) counter <= 0; + else counter <= counter - 3'h4; + end + endcase + current_byte <= 0; + state <= PUSH_FIFO_WAIT; + end + PUSH_FIFO_WAIT : begin + // pushd return packet with data + fifo_write <= 1'b1; + fifo_writedata <= {fifo_sop,(counter == 0)?1'b1:1'b0,byte_avail,fifo_data_buffer}; + // count down on the number of bytes to read + // shift current byte location within word + // if increment address, add it, so the next read + // can use it, if more reads are required + + // no more bytes to send - go to READY state + if (counter == 0) begin + state <= FIFO_CMD_WAIT; + end else if (command[2]== 1'b1) begin + //increment address, but word-align it + state <= FIFO_CMD_WAIT; + address[31:2] <= (address[31:2] + 1'b1); + end + end + FIFO_CMD_WAIT : begin + // back pressure if fifo_write_waitrequest + if (!fifo_write_waitrequest) begin + if (counter == 0) begin + state <= READY; + end else begin + state <= READ_ASSERT; + end + fifo_write <= 1'b0; + end + end + endcase + if (enable & in_startofpacket) begin + state <= GET_EXTRA; + command <= in_data; + in_ready_0 <= !fifo_write_waitrequest; + end + end // end else + end // end always block +endmodule + +// -------------------------------------------------------------------------------- +// FIFO buffer +// -------------------------------------------------------------------------------- +// turn off superfluous verilog processor warnings +// altera message_level Level1 +// altera message_off 10034 10035 10036 10037 10230 10240 10030 + +module fifo_buffer_single_clock_fifo ( + // inputs: + aclr, + clock, + data, + rdreq, + wrreq, + + // outputs: + empty, + full, + q + ) +; + + parameter FIFO_DEPTHS = 2; + parameter FIFO_WIDTHU = 1; + + output empty; + output full; + output [ 35: 0] q; + input aclr; + input clock; + input [ 35: 0] data; + input rdreq; + input wrreq; + + wire empty; + wire full; + wire [ 35: 0] q; + scfifo single_clock_fifo + ( + .aclr (aclr), + .clock (clock), + .data (data), + .empty (empty), + .full (full), + .q (q), + .rdreq (rdreq), + .wrreq (wrreq) + ); + + defparam single_clock_fifo.add_ram_output_register = "OFF", + single_clock_fifo.lpm_numwords = FIFO_DEPTHS, + single_clock_fifo.lpm_showahead = "OFF", + single_clock_fifo.lpm_type = "scfifo", + single_clock_fifo.lpm_width = 36, + single_clock_fifo.lpm_widthu = FIFO_WIDTHU, + single_clock_fifo.overflow_checking = "ON", + single_clock_fifo.underflow_checking = "ON", + single_clock_fifo.use_eab = "OFF"; + + +endmodule + + + +// turn off superfluous verilog processor warnings +// altera message_level Level1 +// altera message_off 10034 10035 10036 10037 10230 10240 10030 + +module fifo_buffer_scfifo_with_controls ( + // inputs: + clock, + data, + rdreq, + reset_n, + wrreq, + + // outputs: + empty, + full, + q + ) +; + + parameter FIFO_DEPTHS = 2; + parameter FIFO_WIDTHU = 1; + + output empty; + output full; + output [ 35: 0] q; + input clock; + input [ 35: 0] data; + input rdreq; + input reset_n; + input wrreq; + + wire empty; + wire full; + wire [ 35: 0] q; + wire wrreq_valid; + //the_scfifo, which is an e_instance + fifo_buffer_single_clock_fifo #( + .FIFO_DEPTHS(FIFO_DEPTHS), + .FIFO_WIDTHU(FIFO_WIDTHU) + ) the_scfifo ( + .aclr (~reset_n), + .clock (clock), + .data (data), + .empty (empty), + .full (full), + .q (q), + .rdreq (rdreq), + .wrreq (wrreq_valid) + ); + + assign wrreq_valid = wrreq & ~full; + +endmodule + +// turn off superfluous verilog processor warnings +// altera message_level Level1 +// altera message_off 10034 10035 10036 10037 10230 10240 10030 + +module fifo_buffer ( + // inputs: + avalonmm_read_slave_read, + avalonmm_write_slave_write, + avalonmm_write_slave_writedata, + reset_n, + wrclock, + + // outputs: + avalonmm_read_slave_readdata, + avalonmm_read_slave_waitrequest, + avalonmm_write_slave_waitrequest + ) +; + + parameter FIFO_DEPTHS = 2; + parameter FIFO_WIDTHU = 1; + + + output [ 35: 0] avalonmm_read_slave_readdata; + output avalonmm_read_slave_waitrequest; + output avalonmm_write_slave_waitrequest; + input avalonmm_read_slave_read; + input avalonmm_write_slave_write; + input [ 35: 0] avalonmm_write_slave_writedata; + input reset_n; + input wrclock; + + wire [ 35: 0] avalonmm_read_slave_readdata; + wire avalonmm_read_slave_waitrequest; + wire avalonmm_write_slave_waitrequest; + wire clock; + wire [ 35: 0] data; + wire empty; + wire full; + wire [ 35: 0] q; + wire rdreq; + wire wrreq; + //the_scfifo_with_controls, which is an e_instance + fifo_buffer_scfifo_with_controls #( + .FIFO_DEPTHS(FIFO_DEPTHS), + .FIFO_WIDTHU(FIFO_WIDTHU) + ) the_scfifo_with_controls + ( + .clock (clock), + .data (data), + .empty (empty), + .full (full), + .q (q), + .rdreq (rdreq), + .reset_n (reset_n), + .wrreq (wrreq) + ); + + //in, which is an e_avalon_slave + //out, which is an e_avalon_slave + assign data = avalonmm_write_slave_writedata; + assign wrreq = avalonmm_write_slave_write; + assign avalonmm_read_slave_readdata = q; + assign rdreq = avalonmm_read_slave_read; + assign clock = wrclock; + assign avalonmm_write_slave_waitrequest = full; + assign avalonmm_read_slave_waitrequest = empty; + +endmodule + +// -------------------------------------------------------------------------------- +// fifo_buffer to Avalon-ST interface +// -------------------------------------------------------------------------------- + +module fifo_to_packet ( + + // Interface: clk + input clk, + input reset_n, + + // Interface: ST out + input out_ready, + output reg out_valid, + output reg [ 7: 0] out_data, + output reg out_startofpacket, + output reg out_endofpacket, + + // Interface: FIFO in + input [ 35: 0] fifo_readdata, + output reg fifo_read, + input fifo_empty +); + +reg [ 1: 0] state; +reg enable, sent_all; +reg [ 1: 0] current_byte, byte_end; +reg first_trans, last_trans; +reg [ 23:0] fifo_data_buffer; + +localparam POP_FIFO = 2'b00, + POP_FIFO_WAIT = 2'b01, + FIFO_DATA_WAIT = 2'b10, + READ_SEND_ISSUE = 2'b11; + +always @* begin + enable = (!fifo_empty & sent_all); +end + +always @(posedge clk or negedge reset_n) begin + if (!reset_n) begin + fifo_data_buffer <= 'b0; + out_startofpacket <= 1'b0; + out_endofpacket <= 1'b0; + out_valid <= 1'b0; + out_data <= 'b0; + state <= 'b0; + fifo_read <= 1'b0; + current_byte <= 'b0; + byte_end <= 'b0; + first_trans <= 1'b0; + last_trans <= 1'b0; + sent_all <= 1'b1; + end else begin + if (out_ready) begin + out_startofpacket <= 1'b0; + out_endofpacket <= 1'b0; + end + + case (state) + POP_FIFO : begin + if (out_ready) begin + out_startofpacket <= 1'b0; + out_endofpacket <= 1'b0; + out_valid <= 1'b0; + first_trans <= 1'b0; + last_trans <= 1'b0; + byte_end <= 'b0; + fifo_read <= 1'b0; + sent_all <= 1'b1; + end + // start poping fifo after all data sent and data available + if (enable) begin + fifo_read <= 1'b1; + out_valid <= 1'b0; + state <= POP_FIFO_WAIT; + end + end + POP_FIFO_WAIT : begin + //fifo latency of 1 + fifo_read <= 1'b0; + state <= FIFO_DATA_WAIT; + end + FIFO_DATA_WAIT : begin + sent_all <= 1'b0; + first_trans <= fifo_readdata[35]; + last_trans <= fifo_readdata[34]; + out_data <= fifo_readdata[7:0]; + fifo_data_buffer <= fifo_readdata[31:8]; + byte_end <= fifo_readdata[33:32]; + current_byte <= 1'b1; + out_valid <= 1'b1; + + // first byte sop eop handling + if (fifo_readdata[35] & fifo_readdata[34] & (fifo_readdata[33:32] == 0)) begin + first_trans <= 1'b0; + last_trans <= 1'b0; + out_startofpacket <= 1'b1; + out_endofpacket <= 1'b1; + state <= POP_FIFO; + end else if (fifo_readdata[35] & (fifo_readdata[33:32] == 0)) begin + first_trans <= 1'b0; + out_startofpacket <= 1'b1; + state <= POP_FIFO; + end else if (fifo_readdata[35]) begin + first_trans <= 1'b0; + out_startofpacket <= 1'b1; + state <= READ_SEND_ISSUE; + end else if (fifo_readdata[34] & (fifo_readdata[33:32] == 0)) begin + last_trans <= 1'b0; + out_endofpacket <= 1'b1; + state <= POP_FIFO; + end else begin + state <= READ_SEND_ISSUE; + end + + end + READ_SEND_ISSUE : begin + out_valid <= 1'b1; + sent_all <= 1'b0; + + if (out_ready) begin + out_startofpacket <= 1'b0; + // last byte + if (last_trans & (current_byte == byte_end)) begin + last_trans <= 1'b0; + out_endofpacket <= 1'b1; + state <= POP_FIFO; + end + case (current_byte) + 3: begin + out_data <= fifo_data_buffer[23:16]; + end + 2: begin + out_data <= fifo_data_buffer[15:8]; + end + 1: begin + out_data <= fifo_data_buffer[7:0]; + end + default: begin + //out_data <= fifo_readdata[7:0]; + end + endcase + current_byte <= current_byte + 1'b1; + if (current_byte == byte_end) begin + state <= POP_FIFO; + end else begin + state <= READ_SEND_ISSUE; + end + end + end + endcase + end + end +endmodule + +// -------------------------------------------------------------------------------- +//| Economy Transaction Master +// -------------------------------------------------------------------------------- +module packets_to_master ( + + // Interface: clk + input clk, + input reset_n, + // Interface: ST in + output reg in_ready, + input in_valid, + input [ 7: 0] in_data, + input in_startofpacket, + input in_endofpacket, + + // Interface: ST out + input out_ready, + output reg out_valid, + output reg [ 7: 0] out_data, + output reg out_startofpacket, + output reg out_endofpacket, + + // Interface: MM out + output reg [31: 0] address, + input [31: 0] readdata, + output reg read, + output reg write, + output reg [ 3: 0] byteenable, + output reg [31: 0] writedata, + input waitrequest, + input readdatavalid + +); + + // --------------------------------------------------------------------- + //| Parameter Declarations + // --------------------------------------------------------------------- + parameter EXPORT_MASTER_SIGNALS = 0; + + // --------------------------------------------------------------------- + //| Command Declarations + // --------------------------------------------------------------------- + localparam CMD_WRITE_NON_INCR = 8'h00; + localparam CMD_WRITE_INCR = 8'h04; + localparam CMD_READ_NON_INCR = 8'h10; + localparam CMD_READ_INCR = 8'h14; + + // --------------------------------------------------------------------- + //| Signal Declarations + // --------------------------------------------------------------------- + + reg [ 3: 0] state; + reg [ 7: 0] command; + reg [ 1: 0] current_byte; //, result_byte; + reg [ 15: 0] counter; + reg [ 23: 0] read_data_buffer; + reg in_ready_0; + reg first_trans, last_trans; + reg [ 3: 0] unshifted_byteenable; + wire enable; + + localparam READY = 4'b0000, + GET_EXTRA = 4'b0001, + GET_SIZE1 = 4'b0010, + GET_SIZE2 = 4'b0011, + GET_ADDR1 = 4'b0100, + GET_ADDR2 = 4'b0101, + GET_ADDR3 = 4'b0110, + GET_ADDR4 = 4'b0111, + GET_WRITE_DATA = 4'b1000, + WRITE_WAIT = 4'b1001, + RETURN_PACKET = 4'b1010, + READ_ASSERT = 4'b1011, + READ_CMD_WAIT = 4'b1100, + READ_DATA_WAIT = 4'b1101, + READ_SEND_ISSUE= 4'b1110, + READ_SEND_WAIT = 4'b1111; + + + // --------------------------------------------------------------------- + //| Thingofamagick + // --------------------------------------------------------------------- + + assign enable = (in_ready & in_valid); + + always @* +// in_ready = in_ready_0 & out_ready; + in_ready = in_ready_0; + + always @(posedge clk or negedge reset_n) begin + if (!reset_n) begin + in_ready_0 <= 1'b0; + out_startofpacket <= 1'b0; + out_endofpacket <= 1'b0; + out_valid <= 1'b0; + out_data <= 'b0; + read <= 1'b0; + write <= 1'b0; + byteenable <= 'b0; + writedata <= 'b0; + address <= 'b0; + counter <= 'b0; + command <= 'b0; + first_trans <= 1'b0; + last_trans <= 1'b0; + state <= 'b0; + current_byte <= 'b0; + // result_byte <= 'b0; + read_data_buffer <= 'b0; + unshifted_byteenable <= 'b0; + end else begin + address[1:0] <= 'b0; + + if (out_ready) begin + out_startofpacket <= 1'b0; + out_endofpacket <= 1'b0; + out_valid <= 1'b0; + end + in_ready_0 <= 1'b0; + + if (counter >= 3) unshifted_byteenable <= 4'b1111; + else if (counter == 3) unshifted_byteenable <= 4'b0111; + else if (counter == 2) unshifted_byteenable <= 4'b0011; + else if (counter == 1) unshifted_byteenable <= 4'b0001; + + case (state) + READY : begin + out_valid <= 1'b0; + in_ready_0 <= 1'b1; + end + GET_EXTRA : begin + in_ready_0 <= 1'b1; + byteenable <= 'b0; + if (enable) state <= GET_SIZE1; + end + + GET_SIZE1 : begin + in_ready_0 <= 1'b1; + //load counter on reads only + counter[15:8] <= command[4]?in_data:8'b0; + if (enable) state <= GET_SIZE2; + end + + GET_SIZE2 : begin + in_ready_0 <= 1'b1; + //load counter on reads only + counter[7:0] <= command[4]?in_data:8'b0; + if (enable) state <= GET_ADDR1; + end + + GET_ADDR1 : begin + in_ready_0 <= 1'b1; + first_trans <= 1'b1; + last_trans <= 1'b0; + address[31:24] <= in_data; + if (enable) state <= GET_ADDR2; + end + + GET_ADDR2 : begin + in_ready_0 <= 1'b1; + address[23:16] <= in_data; + if (enable) state <= GET_ADDR3; + end + + GET_ADDR3 : begin + in_ready_0 <= 1'b1; + address[15:8] <= in_data; + if (enable) state <= GET_ADDR4; + end + + GET_ADDR4 : begin + in_ready_0 <= 1'b1; + address[7:2] <= in_data[7:2]; + current_byte <= in_data[1:0]; + if (enable) begin + if (command == CMD_WRITE_NON_INCR | command == CMD_WRITE_INCR) begin + state <= GET_WRITE_DATA; //writes + in_ready_0 <= 1'b1; + end + else if (command == CMD_READ_NON_INCR | command == CMD_READ_INCR) begin + state <= READ_ASSERT; //reads + in_ready_0 <= 1'b0; + end + else begin + //nops + //treat all unrecognized commands as nops as well + state <= RETURN_PACKET; + out_startofpacket <= 1'b1; + out_data <= (8'h80 | command); + out_valid <= 1'b1; + current_byte <= 'h0; + in_ready_0 <= 1'b0; + end + end + end + + GET_WRITE_DATA : begin + in_ready_0 <= 1; + if (enable) begin + counter <= counter + 1'b1; + //2 bit, should wrap by itself + current_byte <= current_byte + 1'b1; + if (in_endofpacket || current_byte == 3) + begin + in_ready_0 <= 0; + write <= 1'b1; + state <= WRITE_WAIT; + end + end + if (in_endofpacket) begin + last_trans <= 1'b1; + end + // handle byte writes properly + // drive data pins based on addresses + case (current_byte) + 0: begin + writedata[7:0] <= in_data; + byteenable[0] <= 1; + end + 1: begin + writedata[15:8] <= in_data; + byteenable[1] <= 1; + end + 2: begin + writedata[23:16] <= in_data; + byteenable[2] <= 1; + end + 3: begin + writedata[31:24] <= in_data; + byteenable[3] <= 1; + end + endcase + end + + WRITE_WAIT : begin + in_ready_0 <= 0; + write <= 1'b1; + if (~waitrequest) begin + write <= 1'b0; + state <= GET_WRITE_DATA; + in_ready_0 <= 1; + byteenable <= 'b0; + if (command[2] == 1'b1) begin + //increment address, but word-align it + address[31:2] <= (address[31:2] + 1'b1); + end + if (last_trans) begin + state <= RETURN_PACKET; + out_startofpacket <= 1'b1; + out_data <= (8'h80 | command); + out_valid <= 1'b1; + current_byte <= 'h0; + in_ready_0 <= 1'b0; + end + end + end + + RETURN_PACKET : begin + out_valid <= 1'b1; + if (out_ready) begin + case (current_byte) + // 0: begin + // out_startofpacket <= 1'b1; + // out_data <= (8'h80 | command); + // end + 0: begin + out_data <= 8'b0; + end + 1: begin + out_data <= counter[15:8]; + end + 2: begin + out_endofpacket <= 1'b1; + out_data <= counter[7:0]; + end + default: begin + // out_data <= 8'b0; + // out_startofpacket <= 1'b0; + // out_endofpacket <= 1'b0; + end + endcase + current_byte <= current_byte + 1'b1; + if (current_byte == 3) begin + state <= READY; + out_valid <= 1'b0; + end + else state <= RETURN_PACKET; + end + end + READ_ASSERT : begin + if (current_byte == 3) byteenable <= unshifted_byteenable << 3; + if (current_byte == 2) byteenable <= unshifted_byteenable << 2; + if (current_byte == 1) byteenable <= unshifted_byteenable << 1; + if (current_byte == 0) byteenable <= unshifted_byteenable; +// byteenable <= unshifted_byteenable << current_byte; + read <= 1; + state <= READ_CMD_WAIT; + end + READ_CMD_WAIT : begin + read_data_buffer <= readdata[31:8]; + out_data <= readdata[7:0]; + read <= 1; + // if readdatavalid, take the data and + // go directly to READ_SEND_ISSUE. This is for fixed + // latency slaves. Ignore waitrequest in this case, + // since this master does not issue pipelined reads. + // + // For variable latency slaves, once waitrequest is low + // the read command is accepted, so deassert read and + // go to READ_DATA_WAIT to wait for readdatavalid + if (readdatavalid) begin + state <= READ_SEND_ISSUE; + read <= 0; + end else begin + if (~waitrequest) begin + state <= READ_DATA_WAIT; + read <= 0; + end + end + end + READ_DATA_WAIT : begin + read_data_buffer <= readdata[31:8]; + out_data <= readdata[7:0]; + if (readdatavalid) begin + state <= READ_SEND_ISSUE; + end + end + READ_SEND_ISSUE : begin + out_valid <= 1'b1; + out_startofpacket <= 'h0; + out_endofpacket <= 'h0; + if (counter == 1) begin + out_endofpacket <= 1'b1; + end + if (first_trans) begin + first_trans <= 1'b0; + out_startofpacket <= 1'b1; + end + case (current_byte) + 3: begin + out_data <= read_data_buffer[23:16]; + end + 2: begin + out_data <= read_data_buffer[15:8]; + end + 1: begin + out_data <= read_data_buffer[7:0]; + end + default: begin + out_data <= out_data; + end + endcase + state <= READ_SEND_WAIT; + end + READ_SEND_WAIT : begin + out_valid <= 1'b1; + if (out_ready) begin + counter <= counter - 1'b1; + current_byte <= current_byte + 1'b1; + out_valid <= 1'b0; + // count down on the number of bytes to read + // shift current byte location within word + // if increment address, add it, so the next read + // can use it, if more reads are required + + // no more bytes to send - go to READY state + if (counter == 1) begin + state <= READY; + // end of current word, but we have more bytes to + // read - go back to READ_ASSERT + end else if (current_byte == 3) begin + if (command[2] == 1'b1) begin + //increment address, but word-align it + address[31:2] <= (address[31:2] + 1'b1); + end + state <= READ_ASSERT; + // continue sending current word + end else begin + state <= READ_SEND_ISSUE; + end + //maybe add in_ready_0 here so we are ready to go + //right away + end + end + endcase + if (enable & in_startofpacket) begin + state <= GET_EXTRA; + command <= in_data; + in_ready_0 <= 1'b1; + end + end // end else + end // end always block +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_sc_fifo.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_sc_fifo.v new file mode 100755 index 0000000..cf8576a --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_sc_fifo.v @@ -0,0 +1,915 @@ +// ----------------------------------------------------------- +// Legal Notice: (C)2007 Altera Corporation. All rights reserved. Your +// use of Altera Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any +// output files any of the foregoing (including device programming or +// simulation files), and any associated documentation or information are +// expressly subject to the terms and conditions of the Altera Program +// License Subscription Agreement or other applicable license agreement, +// including, without limitation, that your use is for the sole purpose +// of programming logic devices manufactured by Altera and sold by Altera +// or its authorized distributors. Please refer to the applicable +// agreement for further details. +// +// Description: Single clock Avalon-ST FIFO. +// ----------------------------------------------------------- + +`timescale 1 ns / 1 ns + + +//altera message_off 10036 +module altera_avalon_sc_fifo +#( + // -------------------------------------------------- + // Parameters + // -------------------------------------------------- + parameter SYMBOLS_PER_BEAT = 1, + parameter BITS_PER_SYMBOL = 8, + parameter FIFO_DEPTH = 16, + parameter CHANNEL_WIDTH = 0, + parameter ERROR_WIDTH = 0, + parameter USE_PACKETS = 0, + parameter USE_FILL_LEVEL = 0, + parameter USE_STORE_FORWARD = 0, + parameter USE_ALMOST_FULL_IF = 0, + parameter USE_ALMOST_EMPTY_IF = 0, + + // -------------------------------------------------- + // Empty latency is defined as the number of cycles + // required for a write to deassert the empty flag. + // For example, a latency of 1 means that the empty + // flag is deasserted on the cycle after a write. + // + // Another way to think of it is the latency for a + // write to propagate to the output. + // + // An empty latency of 0 implies lookahead, which is + // only implemented for the register-based FIFO. + // -------------------------------------------------- + parameter EMPTY_LATENCY = 3, + parameter USE_MEMORY_BLOCKS = 1, + + // -------------------------------------------------- + // Internal Parameters + // -------------------------------------------------- + parameter DATA_WIDTH = SYMBOLS_PER_BEAT * BITS_PER_SYMBOL, + parameter EMPTY_WIDTH = log2ceil(SYMBOLS_PER_BEAT) +) +( + // -------------------------------------------------- + // Ports + // -------------------------------------------------- + input clk, + input reset, + + input [DATA_WIDTH-1: 0] in_data, + input in_valid, + input in_startofpacket, + input in_endofpacket, + input [((EMPTY_WIDTH>0) ? (EMPTY_WIDTH-1):0) : 0] in_empty, + input [((ERROR_WIDTH>0) ? (ERROR_WIDTH-1):0) : 0] in_error, + input [((CHANNEL_WIDTH>0) ? (CHANNEL_WIDTH-1):0): 0] in_channel, + output in_ready, + + output [DATA_WIDTH-1 : 0] out_data, + output reg out_valid, + output out_startofpacket, + output out_endofpacket, + output [((EMPTY_WIDTH>0) ? (EMPTY_WIDTH-1):0) : 0] out_empty, + output [((ERROR_WIDTH>0) ? (ERROR_WIDTH-1):0) : 0] out_error, + output [((CHANNEL_WIDTH>0) ? (CHANNEL_WIDTH-1):0): 0] out_channel, + input out_ready, + + input [(USE_STORE_FORWARD ? 2 : 1) : 0] csr_address, + input csr_write, + input csr_read, + input [31 : 0] csr_writedata, + output reg [31 : 0] csr_readdata, + + output wire almost_full_data, + output wire almost_empty_data +); + + // -------------------------------------------------- + // Local Parameters + // -------------------------------------------------- + localparam ADDR_WIDTH = log2ceil(FIFO_DEPTH); + localparam DEPTH = FIFO_DEPTH; + localparam PKT_SIGNALS_WIDTH = 2 + EMPTY_WIDTH; + localparam PAYLOAD_WIDTH = (USE_PACKETS == 1) ? + 2 + EMPTY_WIDTH + DATA_WIDTH + ERROR_WIDTH + CHANNEL_WIDTH: + DATA_WIDTH + ERROR_WIDTH + CHANNEL_WIDTH; + + // -------------------------------------------------- + // Internal Signals + // -------------------------------------------------- + genvar i; + + reg [PAYLOAD_WIDTH-1 : 0] mem [DEPTH-1 : 0]; + reg [ADDR_WIDTH-1 : 0] wr_ptr; + reg [ADDR_WIDTH-1 : 0] rd_ptr; + reg [DEPTH-1 : 0] mem_used; + + wire [ADDR_WIDTH-1 : 0] next_wr_ptr; + wire [ADDR_WIDTH-1 : 0] next_rd_ptr; + wire [ADDR_WIDTH-1 : 0] incremented_wr_ptr; + wire [ADDR_WIDTH-1 : 0] incremented_rd_ptr; + + wire [ADDR_WIDTH-1 : 0] mem_rd_ptr; + + wire read; + wire write; + + reg empty; + reg next_empty; + reg full; + reg next_full; + + wire [PKT_SIGNALS_WIDTH-1 : 0] in_packet_signals; + wire [PKT_SIGNALS_WIDTH-1 : 0] out_packet_signals; + wire [PAYLOAD_WIDTH-1 : 0] in_payload; + reg [PAYLOAD_WIDTH-1 : 0] internal_out_payload; + reg [PAYLOAD_WIDTH-1 : 0] out_payload; + + reg internal_out_valid; + wire internal_out_ready; + + reg [ADDR_WIDTH : 0] fifo_fill_level; + reg [ADDR_WIDTH : 0] fill_level; + + reg [ADDR_WIDTH-1 : 0] sop_ptr = 0; + wire [ADDR_WIDTH-1 : 0] curr_sop_ptr; + reg [23:0] almost_full_threshold; + reg [23:0] almost_empty_threshold; + reg [23:0] cut_through_threshold; + reg [15:0] pkt_cnt; + reg drop_on_error_en; + reg error_in_pkt; + reg pkt_has_started; + reg sop_has_left_fifo; + reg fifo_too_small_r; + reg pkt_cnt_eq_zero; + reg pkt_cnt_eq_one; + + wire wait_for_threshold; + reg pkt_mode; + wire wait_for_pkt; + wire ok_to_forward; + wire in_pkt_eop_arrive; + wire out_pkt_leave; + wire in_pkt_start; + wire in_pkt_error; + wire drop_on_error; + wire fifo_too_small; + wire out_pkt_sop_leave; + wire [31:0] max_fifo_size; + reg fifo_fill_level_lt_cut_through_threshold; + + // -------------------------------------------------- + // Define Payload + // + // Icky part where we decide which signals form the + // payload to the FIFO with generate blocks. + // -------------------------------------------------- + generate + if (EMPTY_WIDTH > 0) begin : gen_blk1 + assign in_packet_signals = {in_startofpacket, in_endofpacket, in_empty}; + assign {out_startofpacket, out_endofpacket, out_empty} = out_packet_signals; + end + else begin : gen_blk1_else + assign out_empty = in_error; + assign in_packet_signals = {in_startofpacket, in_endofpacket}; + assign {out_startofpacket, out_endofpacket} = out_packet_signals; + end + endgenerate + + generate + if (USE_PACKETS) begin : gen_blk2 + if (ERROR_WIDTH > 0) begin : gen_blk3 + if (CHANNEL_WIDTH > 0) begin : gen_blk4 + assign in_payload = {in_packet_signals, in_data, in_error, in_channel}; + assign {out_packet_signals, out_data, out_error, out_channel} = out_payload; + end + else begin : gen_blk4_else + assign out_channel = in_channel; + assign in_payload = {in_packet_signals, in_data, in_error}; + assign {out_packet_signals, out_data, out_error} = out_payload; + end + end + else begin : gen_blk3_else + assign out_error = in_error; + if (CHANNEL_WIDTH > 0) begin : gen_blk5 + assign in_payload = {in_packet_signals, in_data, in_channel}; + assign {out_packet_signals, out_data, out_channel} = out_payload; + end + else begin : gen_blk5_else + assign out_channel = in_channel; + assign in_payload = {in_packet_signals, in_data}; + assign {out_packet_signals, out_data} = out_payload; + end + end + end + else begin : gen_blk2_else + assign out_packet_signals = 0; + if (ERROR_WIDTH > 0) begin : gen_blk6 + if (CHANNEL_WIDTH > 0) begin : gen_blk7 + assign in_payload = {in_data, in_error, in_channel}; + assign {out_data, out_error, out_channel} = out_payload; + end + else begin : gen_blk7_else + assign out_channel = in_channel; + assign in_payload = {in_data, in_error}; + assign {out_data, out_error} = out_payload; + end + end + else begin : gen_blk6_else + assign out_error = in_error; + if (CHANNEL_WIDTH > 0) begin : gen_blk8 + assign in_payload = {in_data, in_channel}; + assign {out_data, out_channel} = out_payload; + end + else begin : gen_blk8_else + assign out_channel = in_channel; + assign in_payload = in_data; + assign out_data = out_payload; + end + end + end + endgenerate + + // -------------------------------------------------- + // Memory-based FIFO storage + // + // To allow a ready latency of 0, the read index is + // obtained from the next read pointer and memory + // outputs are unregistered. + // + // If the empty latency is 1, we infer bypass logic + // around the memory so writes propagate to the + // outputs on the next cycle. + // + // Do not change the way this is coded: Quartus needs + // a perfect match to the template, and any attempt to + // refactor the two always blocks into one will break + // memory inference. + // -------------------------------------------------- + generate if (USE_MEMORY_BLOCKS == 1) begin : gen_blk9 + + if (EMPTY_LATENCY == 1) begin : gen_blk10 + + always @(posedge clk) begin + if (in_valid && in_ready) + mem[wr_ptr] = in_payload; + + internal_out_payload = mem[mem_rd_ptr]; + end + + end else begin : gen_blk10_else + + always @(posedge clk) begin + if (in_valid && in_ready) + mem[wr_ptr] <= in_payload; + + internal_out_payload <= mem[mem_rd_ptr]; + end + + end + + assign mem_rd_ptr = next_rd_ptr; + + end else begin : gen_blk9_else + + // -------------------------------------------------- + // Register-based FIFO storage + // + // Uses a shift register as the storage element. Each + // shift register slot has a bit which indicates if + // the slot is occupied (credit to Sam H for the idea). + // The occupancy bits are contiguous and start from the + // lsb, so 0000, 0001, 0011, 0111, 1111 for a 4-deep + // FIFO. + // + // Each slot is enabled during a read or when it + // is unoccupied. New data is always written to every + // going-to-be-empty slot (we keep track of which ones + // are actually useful with the occupancy bits). On a + // read we shift occupied slots. + // + // The exception is the last slot, which always gets + // new data when it is unoccupied. + // -------------------------------------------------- + for (i = 0; i < DEPTH-1; i = i + 1) begin : shift_reg + always @(posedge clk or posedge reset) begin + if (reset) begin + mem[i] <= 0; + end + else if (read || !mem_used[i]) begin + if (!mem_used[i+1]) + mem[i] <= in_payload; + else + mem[i] <= mem[i+1]; + end + end + end + + always @(posedge clk, posedge reset) begin + if (reset) begin + mem[DEPTH-1] <= 0; + end + else begin + if (DEPTH == 1) begin + if (write) + mem[DEPTH-1] <= in_payload; + end + else if (!mem_used[DEPTH-1]) + mem[DEPTH-1] <= in_payload; + end + end + + end + endgenerate + + assign read = internal_out_ready && internal_out_valid && ok_to_forward; + assign write = in_ready && in_valid; + + // -------------------------------------------------- + // Pointer Management + // -------------------------------------------------- + generate if (USE_MEMORY_BLOCKS == 1) begin : gen_blk11 + + assign incremented_wr_ptr = wr_ptr + 1'b1; + assign incremented_rd_ptr = rd_ptr + 1'b1; + assign next_wr_ptr = drop_on_error ? curr_sop_ptr : write ? incremented_wr_ptr : wr_ptr; + assign next_rd_ptr = (read) ? incremented_rd_ptr : rd_ptr; + + always @(posedge clk or posedge reset) begin + if (reset) begin + wr_ptr <= 0; + rd_ptr <= 0; + end + else begin + wr_ptr <= next_wr_ptr; + rd_ptr <= next_rd_ptr; + end + end + + end else begin : gen_blk11_else + + // -------------------------------------------------- + // Shift Register Occupancy Bits + // + // Consider a 4-deep FIFO with 2 entries: 0011 + // On a read and write, do not modify the bits. + // On a write, left-shift the bits to get 0111. + // On a read, right-shift the bits to get 0001. + // + // Also, on a write we set bit0 (the head), while + // clearing the tail on a read. + // -------------------------------------------------- + always @(posedge clk or posedge reset) begin + if (reset) begin + mem_used[0] <= 0; + end + else begin + if (write ^ read) begin + if (write) + mem_used[0] <= 1; + else if (read) begin + if (DEPTH > 1) + mem_used[0] <= mem_used[1]; + else + mem_used[0] <= 0; + end + end + end + end + + if (DEPTH > 1) begin : gen_blk12 + always @(posedge clk or posedge reset) begin + if (reset) begin + mem_used[DEPTH-1] <= 0; + end + else begin + if (write ^ read) begin + mem_used[DEPTH-1] <= 0; + if (write) + mem_used[DEPTH-1] <= mem_used[DEPTH-2]; + end + end + end + end + + for (i = 1; i < DEPTH-1; i = i + 1) begin : storage_logic + always @(posedge clk, posedge reset) begin + if (reset) begin + mem_used[i] <= 0; + end + else begin + if (write ^ read) begin + if (write) + mem_used[i] <= mem_used[i-1]; + else if (read) + mem_used[i] <= mem_used[i+1]; + end + end + end + end + + end + endgenerate + + + // -------------------------------------------------- + // Memory FIFO Status Management + // + // Generates the full and empty signals from the + // pointers. The FIFO is full when the next write + // pointer will be equal to the read pointer after + // a write. Reading from a FIFO clears full. + // + // The FIFO is empty when the next read pointer will + // be equal to the write pointer after a read. Writing + // to a FIFO clears empty. + // + // A simultaneous read and write must not change any of + // the empty or full flags unless there is a drop on error event. + // -------------------------------------------------- + generate if (USE_MEMORY_BLOCKS == 1) begin : gen_blk13 + + always @* begin + next_full = full; + next_empty = empty; + + if (read && !write) begin + next_full = 1'b0; + + if (incremented_rd_ptr == wr_ptr) + next_empty = 1'b1; + end + + if (write && !read) begin + if (!drop_on_error) + next_empty = 1'b0; + else if (curr_sop_ptr == rd_ptr) // drop on error and only 1 pkt in fifo + next_empty = 1'b1; + + if (incremented_wr_ptr == rd_ptr && !drop_on_error) + next_full = 1'b1; + end + + if (write && read && drop_on_error) begin + if (curr_sop_ptr == next_rd_ptr) + next_empty = 1'b1; + end + end + + always @(posedge clk or posedge reset) begin + if (reset) begin + empty <= 1; + full <= 0; + end + else begin + empty <= next_empty; + full <= next_full; + end + end + + end else begin : gen_blk13_else + // -------------------------------------------------- + // Register FIFO Status Management + // + // Full when the tail occupancy bit is 1. Empty when + // the head occupancy bit is 0. + // -------------------------------------------------- + always @* begin + full = mem_used[DEPTH-1]; + empty = !mem_used[0]; + + // ------------------------------------------ + // For a single slot FIFO, reading clears the + // full status immediately. + // ------------------------------------------ + if (DEPTH == 1) + full = mem_used[0] && !read; + + internal_out_payload = mem[0]; + + // ------------------------------------------ + // Writes clear empty immediately for lookahead modes. + // Note that we use in_valid instead of write to avoid + // combinational loops (in lookahead mode, qualifying + // with in_ready is meaningless). + // + // In a 1-deep FIFO, a possible combinational loop runs + // from write -> out_valid -> out_ready -> write + // ------------------------------------------ + if (EMPTY_LATENCY == 0) begin + empty = !mem_used[0] && !in_valid; + + if (!mem_used[0] && in_valid) + internal_out_payload = in_payload; + end + end + + end + endgenerate + + // -------------------------------------------------- + // Avalon-ST Signals + // + // The in_ready signal is straightforward. + // + // To match memory latency when empty latency > 1, + // out_valid assertions must be delayed by one clock + // cycle. + // + // Note: out_valid deassertions must not be delayed or + // the FIFO will underflow. + // -------------------------------------------------- + assign in_ready = !full; + assign internal_out_ready = out_ready || !out_valid; + + generate if (EMPTY_LATENCY > 1) begin : gen_blk14 + always @(posedge clk or posedge reset) begin + if (reset) + internal_out_valid <= 0; + else begin + internal_out_valid <= !empty & ok_to_forward & ~drop_on_error; + + if (read) begin + if (incremented_rd_ptr == wr_ptr) + internal_out_valid <= 1'b0; + end + end + end + end else begin : gen_blk14_else + always @* begin + internal_out_valid = !empty & ok_to_forward; + end + end + endgenerate + + // -------------------------------------------------- + // Single Output Pipeline Stage + // + // This output pipeline stage is enabled if the FIFO's + // empty latency is set to 3 (default). It is disabled + // for all other allowed latencies. + // + // Reason: The memory outputs are unregistered, so we have to + // register the output or fmax will drop if combinatorial + // logic is present on the output datapath. + // + // Q: The Avalon-ST spec says that I have to register my outputs + // But isn't the memory counted as a register? + // A: The path from the address lookup to the memory output is + // slow. Registering the memory outputs is a good idea. + // + // The registers get packed into the memory by the fitter + // which means minimal resources are consumed (the result + // is a altsyncram with registered outputs, available on + // all modern Altera devices). + // + // This output stage acts as an extra slot in the FIFO, + // and complicates the fill level. + // -------------------------------------------------- + generate if (EMPTY_LATENCY == 3) begin : gen_blk15 + always @(posedge clk or posedge reset) begin + if (reset) begin + out_valid <= 0; + out_payload <= 0; + end + else begin + if (internal_out_ready) begin + out_valid <= internal_out_valid & ok_to_forward; + out_payload <= internal_out_payload; + end + end + end + end + else begin : gen_blk15_else + always @* begin + out_valid = internal_out_valid; + out_payload = internal_out_payload; + end + end + endgenerate + + // -------------------------------------------------- + // Fill Level + // + // The fill level is calculated from the next write + // and read pointers to avoid unnecessary latency + // and logic. + // + // However, if the store-and-forward mode of the FIFO + // is enabled, the fill level is an up-down counter + // for fmax optimization reasons. + // + // If the output pipeline is enabled, the fill level + // must account for it, or we'll always be off by one. + // This may, or may not be important depending on the + // application. + // + // For now, we'll always calculate the exact fill level + // at the cost of an extra adder when the output stage + // is enabled. + // -------------------------------------------------- + generate if (USE_FILL_LEVEL) begin : gen_blk16 + wire [31:0] depth32; + assign depth32 = DEPTH; + + if (USE_STORE_FORWARD) begin + + reg [ADDR_WIDTH : 0] curr_packet_len_less_one; + + // -------------------------------------------------- + // We only drop on endofpacket. As long as we don't add to the fill + // level on the dropped endofpacket cycle, we can simply subtract + // (packet length - 1) from the fill level for dropped packets. + // -------------------------------------------------- + always @(posedge clk or posedge reset) begin + if (reset) begin + curr_packet_len_less_one <= 0; + end else begin + if (write) begin + curr_packet_len_less_one <= curr_packet_len_less_one + 1'b1; + if (in_endofpacket) + curr_packet_len_less_one <= 0; + end + end + end + + always @(posedge clk or posedge reset) begin + if (reset) begin + fifo_fill_level <= 0; + end else if (drop_on_error) begin + fifo_fill_level <= fifo_fill_level - curr_packet_len_less_one; + if (read) + fifo_fill_level <= fifo_fill_level - curr_packet_len_less_one - 1'b1; + end else if (write && !read) begin + fifo_fill_level <= fifo_fill_level + 1'b1; + end else if (read && !write) begin + fifo_fill_level <= fifo_fill_level - 1'b1; + end + end + + end else begin + + always @(posedge clk or posedge reset) begin + if (reset) + fifo_fill_level <= 0; + else if (next_full & !drop_on_error) + fifo_fill_level <= depth32[ADDR_WIDTH:0]; + else begin + fifo_fill_level[ADDR_WIDTH] <= 1'b0; + fifo_fill_level[ADDR_WIDTH-1 : 0] <= next_wr_ptr - next_rd_ptr; + end + end + + end + + always @* begin + fill_level = fifo_fill_level; + + if (EMPTY_LATENCY == 3) + fill_level = fifo_fill_level + {{ADDR_WIDTH{1'b0}}, out_valid}; + end + end + else begin : gen_blk16_else + always @* begin + fill_level = 0; + end + end + endgenerate + + generate if (USE_ALMOST_FULL_IF) begin : gen_blk17 + assign almost_full_data = (fill_level >= almost_full_threshold); + end + else + assign almost_full_data = 0; + endgenerate + + generate if (USE_ALMOST_EMPTY_IF) begin : gen_blk18 + assign almost_empty_data = (fill_level <= almost_empty_threshold); + end + else + assign almost_empty_data = 0; + endgenerate + + // -------------------------------------------------- + // Avalon-MM Status & Control Connection Point + // + // Register map: + // + // | Addr | RW | 31 - 0 | + // | 0 | R | Fill level | + // + // The registering of this connection point means + // that there is a cycle of latency between + // reads/writes and the updating of the fill level. + // -------------------------------------------------- + generate if (USE_STORE_FORWARD) begin : gen_blk19 + assign max_fifo_size = FIFO_DEPTH - 1; + always @(posedge clk or posedge reset) begin + if (reset) begin + almost_full_threshold <= max_fifo_size[23 : 0]; + almost_empty_threshold <= 0; + cut_through_threshold <= 0; + drop_on_error_en <= 0; + csr_readdata <= 0; + pkt_mode <= 1'b1; + end + else begin + if (csr_read) begin + csr_readdata <= 32'b0; + if (csr_address == 5) + csr_readdata <= {31'b0, drop_on_error_en}; + else if (csr_address == 4) + csr_readdata <= {8'b0, cut_through_threshold}; + else if (csr_address == 3) + csr_readdata <= {8'b0, almost_empty_threshold}; + else if (csr_address == 2) + csr_readdata <= {8'b0, almost_full_threshold}; + else if (csr_address == 0) + csr_readdata <= {{(31 - ADDR_WIDTH){1'b0}}, fill_level}; + end + else if (csr_write) begin + if(csr_address == 3'b101) + drop_on_error_en <= csr_writedata[0]; + else if(csr_address == 3'b100) begin + cut_through_threshold <= csr_writedata[23:0]; + pkt_mode <= (csr_writedata[23:0] == 0); + end + else if(csr_address == 3'b011) + almost_empty_threshold <= csr_writedata[23:0]; + else if(csr_address == 3'b010) + almost_full_threshold <= csr_writedata[23:0]; + end + end + end + end + else if (USE_ALMOST_FULL_IF || USE_ALMOST_EMPTY_IF) begin : gen_blk19_else1 + assign max_fifo_size = FIFO_DEPTH - 1; + always @(posedge clk or posedge reset) begin + if (reset) begin + almost_full_threshold <= max_fifo_size[23 : 0]; + almost_empty_threshold <= 0; + csr_readdata <= 0; + end + else begin + if (csr_read) begin + csr_readdata <= 32'b0; + if (csr_address == 3) + csr_readdata <= {8'b0, almost_empty_threshold}; + else if (csr_address == 2) + csr_readdata <= {8'b0, almost_full_threshold}; + else if (csr_address == 0) + csr_readdata <= {{(31 - ADDR_WIDTH){1'b0}}, fill_level}; + end + else if (csr_write) begin + if(csr_address == 3'b011) + almost_empty_threshold <= csr_writedata[23:0]; + else if(csr_address == 3'b010) + almost_full_threshold <= csr_writedata[23:0]; + end + end + end + end + else begin : gen_blk19_else2 + always @(posedge clk or posedge reset) begin + if (reset) begin + csr_readdata <= 0; + end + else if (csr_read) begin + csr_readdata <= 0; + + if (csr_address == 0) + csr_readdata <= {{(31 - ADDR_WIDTH){1'b0}}, fill_level}; + end + end + end + endgenerate + + // -------------------------------------------------- + // Store and forward logic + // -------------------------------------------------- + // if the fifo gets full before the entire packet or the + // cut-threshold condition is met then start sending out + // data in order to avoid dead-lock situation + + generate if (USE_STORE_FORWARD) begin : gen_blk20 + assign wait_for_threshold = (fifo_fill_level_lt_cut_through_threshold) & wait_for_pkt ; + assign wait_for_pkt = pkt_cnt_eq_zero | (pkt_cnt_eq_one & out_pkt_leave); + assign ok_to_forward = (pkt_mode ? (~wait_for_pkt | ~pkt_has_started) : + ~wait_for_threshold) | fifo_too_small_r; + assign in_pkt_eop_arrive = in_valid & in_ready & in_endofpacket; + assign in_pkt_start = in_valid & in_ready & in_startofpacket; + assign in_pkt_error = in_valid & in_ready & |in_error; + assign out_pkt_sop_leave = out_valid & out_ready & out_startofpacket; + assign out_pkt_leave = out_valid & out_ready & out_endofpacket; + assign fifo_too_small = (pkt_mode ? wait_for_pkt : wait_for_threshold) & full & out_ready; + + // count packets coming and going into the fifo + always @(posedge clk or posedge reset) begin + if (reset) begin + pkt_cnt <= 0; + pkt_has_started <= 0; + sop_has_left_fifo <= 0; + fifo_too_small_r <= 0; + pkt_cnt_eq_zero <= 1'b1; + pkt_cnt_eq_one <= 1'b0; + fifo_fill_level_lt_cut_through_threshold <= 1'b1; + end + else begin + fifo_fill_level_lt_cut_through_threshold <= fifo_fill_level < cut_through_threshold; + fifo_too_small_r <= fifo_too_small; + + if( in_pkt_eop_arrive ) + sop_has_left_fifo <= 1'b0; + else if (out_pkt_sop_leave & pkt_cnt_eq_zero ) + sop_has_left_fifo <= 1'b1; + + if (in_pkt_eop_arrive & ~out_pkt_leave & ~drop_on_error ) begin + pkt_cnt <= pkt_cnt + 1'b1; + pkt_cnt_eq_zero <= 0; + if (pkt_cnt == 0) + pkt_cnt_eq_one <= 1'b1; + else + pkt_cnt_eq_one <= 1'b0; + end + else if((~in_pkt_eop_arrive | drop_on_error) & out_pkt_leave) begin + pkt_cnt <= pkt_cnt - 1'b1; + if (pkt_cnt == 1) + pkt_cnt_eq_zero <= 1'b1; + else + pkt_cnt_eq_zero <= 1'b0; + if (pkt_cnt == 2) + pkt_cnt_eq_one <= 1'b1; + else + pkt_cnt_eq_one <= 1'b0; + end + + if (in_pkt_start) + pkt_has_started <= 1'b1; + else if (in_pkt_eop_arrive) + pkt_has_started <= 1'b0; + end + end + + // drop on error logic + always @(posedge clk or posedge reset) begin + if (reset) begin + sop_ptr <= 0; + error_in_pkt <= 0; + end + else begin + // save the location of the SOP + if ( in_pkt_start ) + sop_ptr <= wr_ptr; + + // remember if error in pkt + // log error only if packet has already started + if (in_pkt_eop_arrive) + error_in_pkt <= 1'b0; + else if ( in_pkt_error & (pkt_has_started | in_pkt_start)) + error_in_pkt <= 1'b1; + end + end + + assign drop_on_error = drop_on_error_en & (error_in_pkt | in_pkt_error) & in_pkt_eop_arrive & + ~sop_has_left_fifo & ~(out_pkt_sop_leave & pkt_cnt_eq_zero); + + assign curr_sop_ptr = (write && in_startofpacket && in_endofpacket) ? wr_ptr : sop_ptr; + + end + else begin : gen_blk20_else + assign ok_to_forward = 1'b1; + assign drop_on_error = 1'b0; + if (ADDR_WIDTH <= 1) + assign curr_sop_ptr = 1'b0; + else + assign curr_sop_ptr = {ADDR_WIDTH - 1 { 1'b0 }}; + end + endgenerate + + + // -------------------------------------------------- + // Calculates the log2ceil of the input value + // -------------------------------------------------- + function integer log2ceil; + input integer val; + reg[31:0] i; + + begin + i = 1; + log2ceil = 0; + + while (i < val) begin + log2ceil = log2ceil + 1; + i = i[30:0] << 1; + end + end + endfunction + +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_bytes_to_packets.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_bytes_to_packets.v new file mode 100755 index 0000000..97a1031 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_bytes_to_packets.v @@ -0,0 +1,210 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// -------------------------------------------------------------------------------- +//| Avalon ST Bytes to Packet +// -------------------------------------------------------------------------------- + +`timescale 1ns / 100ps +module altera_avalon_st_bytes_to_packets +//if ENCODING ==0, CHANNEL_WIDTH must be 8 +//else CHANNEL_WIDTH can be from 0 to 127 +#( parameter CHANNEL_WIDTH = 8, + parameter ENCODING = 0 ) +( + // Interface: clk + input clk, + input reset_n, + // Interface: ST out with packets + input out_ready, + output reg out_valid, + output reg [7: 0] out_data, + output reg [CHANNEL_WIDTH-1: 0] out_channel, + output reg out_startofpacket, + output reg out_endofpacket, + + // Interface: ST in + output reg in_ready, + input in_valid, + input [7: 0] in_data +); + + // --------------------------------------------------------------------- + //| Signal Declarations + // --------------------------------------------------------------------- + + reg received_esc, received_channel, received_varchannel; + wire escape_char, sop_char, eop_char, channel_char, varchannelesc_char; + + // data out mux. + // we need it twice (data & channel out), so use a wire here + wire [7:0] data_out; + + // --------------------------------------------------------------------- + //| Thingofamagick + // --------------------------------------------------------------------- + + assign sop_char = (in_data == 8'h7a); + assign eop_char = (in_data == 8'h7b); + assign channel_char = (in_data == 8'h7c); + assign escape_char = (in_data == 8'h7d); + + assign data_out = received_esc ? (in_data ^ 8'h20) : in_data; + +generate +if (CHANNEL_WIDTH == 0) begin + // Synchorous block -- reset and registers + always @(posedge clk or negedge reset_n) begin + if (!reset_n) begin + received_esc <= 0; + out_startofpacket <= 0; + out_endofpacket <= 0; + end else begin + // we take data when in_valid and in_ready + if (in_valid & in_ready) begin + if (received_esc) begin + //if we got esc char, after next byte is consumed, quit esc mode + if (out_ready) received_esc <= 0; + end else begin + if (escape_char) received_esc <= 1; + if (sop_char) out_startofpacket <= 1; + if (eop_char) out_endofpacket <= 1; + end + if (out_ready & out_valid) begin + out_startofpacket <= 0; + out_endofpacket <= 0; + end + end + end + end + + // Combinational block for in_ready and out_valid + always @* begin + //we choose not to pipeline here. We can process special characters when + //in_ready, but in a chain of microcores, backpressure path is usually + //time critical, so we keep it simple here. + in_ready = out_ready; + + //out_valid when in_valid, except when we are processing the special + //characters. However, if we are in escape received mode, then we are + //valid + out_valid = 0; + if ((out_ready | ~out_valid) && in_valid) begin + out_valid = 1; + if (sop_char | eop_char | escape_char | channel_char) out_valid = 0; + end + out_data = data_out; + end + +end else begin + assign varchannelesc_char = in_data[7]; + // Synchorous block -- reset and registers + always @(posedge clk or negedge reset_n) begin + if (!reset_n) begin + received_esc <= 0; + received_channel <= 0; + received_varchannel <= 0; + out_startofpacket <= 0; + out_endofpacket <= 0; + end else begin + // we take data when in_valid and in_ready + if (in_valid & in_ready) begin + if (received_esc) begin + //if we got esc char, after next byte is consumed, quit esc mode + if (out_ready | received_channel | received_varchannel) received_esc <= 0; + end else begin + if (escape_char) received_esc <= 1; + if (sop_char) out_startofpacket <= 1; + if (eop_char) out_endofpacket <= 1; + if (channel_char & ENCODING ) received_varchannel <= 1; + if (channel_char & ~ENCODING) received_channel <= 1; + end + if (received_channel & (received_esc | (~sop_char & ~eop_char & ~escape_char & ~channel_char ))) begin + received_channel <= 0; + end + if (received_varchannel & ~varchannelesc_char & (received_esc | (~sop_char & ~eop_char & ~escape_char & ~channel_char))) begin + received_varchannel <= 0; + end + if (out_ready & out_valid) begin + out_startofpacket <= 0; + out_endofpacket <= 0; + end + end + end + end + + // Combinational block for in_ready and out_valid + always @* begin + in_ready = out_ready; + out_valid = 0; + if ((out_ready | ~out_valid) && in_valid) begin + out_valid = 1; + if (received_esc) begin + if (received_channel | received_varchannel) out_valid = 0; + end else begin + if (sop_char | eop_char | escape_char | channel_char | received_channel | received_varchannel) out_valid = 0; + end + end + out_data = data_out; + end +end + +endgenerate + +// Channel block +generate +if (CHANNEL_WIDTH == 0) begin + always @(posedge clk) begin + out_channel <= 'h0; + end + +end else if (CHANNEL_WIDTH < 8) begin + always @(posedge clk or negedge reset_n) begin + if (!reset_n) begin + out_channel <= 'h0; + end else begin + if (in_ready & in_valid) begin + if ((channel_char & ENCODING) & (~received_esc & ~sop_char & ~eop_char & ~escape_char )) begin + out_channel <= 'h0; + end else if (received_varchannel & (received_esc | (~sop_char & ~eop_char & ~escape_char & ~channel_char & ~received_channel))) begin + // Shifting out only the required bits + out_channel[CHANNEL_WIDTH-1:0] <= data_out[CHANNEL_WIDTH-1:0]; + end + end + end + end + +end else begin + always @(posedge clk or negedge reset_n) begin + if (!reset_n) begin + out_channel <= 'h0; + end else begin + if (in_ready & in_valid) begin + if (received_channel & (received_esc | (~sop_char & ~eop_char & ~escape_char & ~channel_char))) begin + out_channel <= data_out; + end else if ((channel_char & ENCODING) & (~received_esc & ~sop_char & ~eop_char & ~escape_char )) begin + // Variable Channel Encoding always setting to 0 before begin to shift the channel in + out_channel <= 'h0; + end else if (received_varchannel & (received_esc | (~sop_char & ~eop_char & ~escape_char & ~channel_char & ~received_channel))) begin + // Shifting out the lower 7 bits + out_channel <= out_channel <<7; + out_channel[6:0] <= data_out[6:0]; + end + end + end + end + +end +endgenerate + +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_clock_crosser.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_clock_crosser.v new file mode 100755 index 0000000..01146d1 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_clock_crosser.v @@ -0,0 +1,141 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $File: //acds/rel/20.1std/ip/avalon_st/altera_avalon_st_handshake_clock_crosser/altera_avalon_st_clock_crosser.v $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ +//------------------------------------------------------------------------------ + +`timescale 1ns / 1ns + +module altera_avalon_st_clock_crosser( + in_clk, + in_reset, + in_ready, + in_valid, + in_data, + out_clk, + out_reset, + out_ready, + out_valid, + out_data + ); + + parameter SYMBOLS_PER_BEAT = 1; + parameter BITS_PER_SYMBOL = 8; + parameter FORWARD_SYNC_DEPTH = 2; + parameter BACKWARD_SYNC_DEPTH = 2; + parameter USE_OUTPUT_PIPELINE = 1; + + localparam DATA_WIDTH = SYMBOLS_PER_BEAT * BITS_PER_SYMBOL; + + input in_clk; + input in_reset; + output in_ready; + input in_valid; + input [DATA_WIDTH-1:0] in_data; + + input out_clk; + input out_reset; + input out_ready; + output out_valid; + output [DATA_WIDTH-1:0] out_data; + + // Data is guaranteed valid by control signal clock crossing. Cut data + // buffer false path. + (* altera_attribute = {"-name SUPPRESS_DA_RULE_INTERNAL \"D101,D102\""} *) reg [DATA_WIDTH-1:0] in_data_buffer; + reg [DATA_WIDTH-1:0] out_data_buffer; + + reg in_data_toggle; + wire in_data_toggle_returned; + wire out_data_toggle; + reg out_data_toggle_flopped; + + wire take_in_data; + wire out_data_taken; + + wire out_valid_internal; + wire out_ready_internal; + + assign in_ready = ~(in_data_toggle_returned ^ in_data_toggle); + assign take_in_data = in_valid & in_ready; + assign out_valid_internal = out_data_toggle ^ out_data_toggle_flopped; + assign out_data_taken = out_ready_internal & out_valid_internal; + + always @(posedge in_clk or posedge in_reset) begin + if (in_reset) begin + in_data_buffer <= {DATA_WIDTH{1'b0}}; + in_data_toggle <= 1'b0; + end else begin + if (take_in_data) begin + in_data_toggle <= ~in_data_toggle; + in_data_buffer <= in_data; + end + end //in_reset + end //in_clk always block + + always @(posedge out_clk or posedge out_reset) begin + if (out_reset) begin + out_data_toggle_flopped <= 1'b0; + out_data_buffer <= {DATA_WIDTH{1'b0}}; + end else begin + out_data_buffer <= in_data_buffer; + if (out_data_taken) begin + out_data_toggle_flopped <= out_data_toggle; + end + end //end if + end //out_clk always block + + altera_std_synchronizer_nocut #(.depth(FORWARD_SYNC_DEPTH)) in_to_out_synchronizer ( + .clk(out_clk), + .reset_n(~out_reset), + .din(in_data_toggle), + .dout(out_data_toggle) + ); + + altera_std_synchronizer_nocut #(.depth(BACKWARD_SYNC_DEPTH)) out_to_in_synchronizer ( + .clk(in_clk), + .reset_n(~in_reset), + .din(out_data_toggle_flopped), + .dout(in_data_toggle_returned) + ); + + generate if (USE_OUTPUT_PIPELINE == 1) begin + + altera_avalon_st_pipeline_base + #( + .BITS_PER_SYMBOL(BITS_PER_SYMBOL), + .SYMBOLS_PER_BEAT(SYMBOLS_PER_BEAT) + ) output_stage ( + .clk(out_clk), + .reset(out_reset), + .in_ready(out_ready_internal), + .in_valid(out_valid_internal), + .in_data(out_data_buffer), + .out_ready(out_ready), + .out_valid(out_valid), + .out_data(out_data) + ); + + end else begin + + assign out_valid = out_valid_internal; + assign out_ready_internal = out_ready; + assign out_data = out_data_buffer; + + end + + endgenerate + +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_idle_inserter.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_idle_inserter.v new file mode 100755 index 0000000..bd99127 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_idle_inserter.v @@ -0,0 +1,72 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// -------------------------------------------------------------------------------- +//| Avalon ST Idle Inserter +// -------------------------------------------------------------------------------- + +`timescale 1ns / 100ps +module altera_avalon_st_idle_inserter ( + + // Interface: clk + input clk, + input reset_n, + // Interface: ST in + output reg in_ready, + input in_valid, + input [7: 0] in_data, + + // Interface: ST out + input out_ready, + output reg out_valid, + output reg [7: 0] out_data +); + + // --------------------------------------------------------------------- + //| Signal Declarations + // --------------------------------------------------------------------- + + reg received_esc; + wire escape_char, idle_char; + + // --------------------------------------------------------------------- + //| Thingofamagick + // --------------------------------------------------------------------- + + assign idle_char = (in_data == 8'h4a); + assign escape_char = (in_data == 8'h4d); + + always @(posedge clk or negedge reset_n) begin + if (!reset_n) begin + received_esc <= 0; + end else begin + if (in_valid & out_ready) begin + if ((idle_char | escape_char) & ~received_esc & out_ready) begin + received_esc <= 1; + end else begin + received_esc <= 0; + end + end + end + end + + always @* begin + //we are always valid + out_valid = 1'b1; + in_ready = out_ready & (~in_valid | ((~idle_char & ~escape_char) | received_esc)); + out_data = (~in_valid) ? 8'h4a : //if input is not valid, insert idle + (received_esc) ? in_data ^ 8'h20 : //escaped once, send data XOR'd + (idle_char | escape_char) ? 8'h4d : //input needs escaping, send escape_char + in_data; //send data + end +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_idle_remover.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_idle_remover.v new file mode 100755 index 0000000..52840f2 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_idle_remover.v @@ -0,0 +1,70 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// -------------------------------------------------------------------------------- +//| Avalon ST Idle Remover +// -------------------------------------------------------------------------------- + +`timescale 1ns / 100ps +module altera_avalon_st_idle_remover ( + + // Interface: clk + input clk, + input reset_n, + // Interface: ST in + output reg in_ready, + input in_valid, + input [7: 0] in_data, + + // Interface: ST out + input out_ready, + output reg out_valid, + output reg [7: 0] out_data +); + + // --------------------------------------------------------------------- + //| Signal Declarations + // --------------------------------------------------------------------- + + reg received_esc; + wire escape_char, idle_char; + + // --------------------------------------------------------------------- + //| Thingofamagick + // --------------------------------------------------------------------- + + assign idle_char = (in_data == 8'h4a); + assign escape_char = (in_data == 8'h4d); + + always @(posedge clk or negedge reset_n) begin + if (!reset_n) begin + received_esc <= 0; + end else begin + if (in_valid & in_ready) begin + if (escape_char & ~received_esc) begin + received_esc <= 1; + end else if (out_valid) begin + received_esc <= 0; + end + end + end + end + + always @* begin + in_ready = out_ready; + //out valid when in_valid. Except when we get idle or escape + //however, if we have received an escape character, then we are valid + out_valid = in_valid & ~idle_char & (received_esc | ~escape_char); + out_data = received_esc ? (in_data ^ 8'h20) : in_data; + end +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_jtag_interface.sdc b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_jtag_interface.sdc new file mode 100755 index 0000000..5d0ef84 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_jtag_interface.sdc @@ -0,0 +1,14 @@ +# (C) 2001-2020 Intel Corporation. All rights reserved. +# Your use of Intel Corporation's design tools, logic functions and other +# software and tools, and its AMPP partner logic functions, and any output +# files from any of the foregoing (including device programming or simulation +# files), and any associated documentation or information are expressly subject +# to the terms and conditions of the Intel Program License Subscription +# Agreement, Intel FPGA IP License Agreement, or other applicable +# license agreement, including, without limitation, that your use is for the +# sole purpose of programming logic devices manufactured by Intel and sold by +# Intel or its authorized distributors. Please refer to the applicable +# agreement for further details. + + +set_false_path -from [get_registers *altera_jtag_src_crosser:*|sink_data_buffer*] -to [get_registers *altera_jtag_src_crosser:*|src_data*] diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_jtag_interface.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_jtag_interface.v new file mode 100755 index 0000000..2ac8895 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_jtag_interface.v @@ -0,0 +1,224 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// This top level module chooses between the original Altera-ST JTAG Interface +// component in ACDS version 8.1 and before, and the new one with the PLI +// Simulation mode turned on, which adds a wrapper over the original component. + +`timescale 1 ns / 1 ns + +module altera_avalon_st_jtag_interface #( + parameter PURPOSE = 0, // for discovery of services behind this JTAG Phy - 0 + // for JTAG Phy, 1 for Packets to Master + parameter UPSTREAM_FIFO_SIZE = 0, + parameter DOWNSTREAM_FIFO_SIZE = 0, + parameter MGMT_CHANNEL_WIDTH = -1, + parameter EXPORT_JTAG = 0, + parameter USE_PLI = 0, // set to 1 enable PLI Simulation Mode + parameter PLI_PORT = 50000 // PLI Simulation Port +) ( + input wire jtag_tck, + input wire jtag_tms, + input wire jtag_tdi, + output wire jtag_tdo, + input wire jtag_ena, + input wire jtag_usr1, + input wire jtag_clr, + input wire jtag_clrn, + input wire jtag_state_tlr, + input wire jtag_state_rti, + input wire jtag_state_sdrs, + input wire jtag_state_cdr, + input wire jtag_state_sdr, + input wire jtag_state_e1dr, + input wire jtag_state_pdr, + input wire jtag_state_e2dr, + input wire jtag_state_udr, + input wire jtag_state_sirs, + input wire jtag_state_cir, + input wire jtag_state_sir, + input wire jtag_state_e1ir, + input wire jtag_state_pir, + input wire jtag_state_e2ir, + input wire jtag_state_uir, + input wire [2:0] jtag_ir_in, + output wire jtag_irq, + output wire [2:0] jtag_ir_out, + input wire clk, + input wire reset_n, + input wire source_ready, + output wire [7:0] source_data, + output wire source_valid, + input wire [7:0] sink_data, + input wire sink_valid, + output wire sink_ready, + output wire resetrequest, + output wire debug_reset, + output wire mgmt_valid, + output wire [(MGMT_CHANNEL_WIDTH>0?MGMT_CHANNEL_WIDTH:1)-1:0] mgmt_channel, + output wire mgmt_data +); + + // Signals in the JTAG clock domain + wire tck; + wire tdi; + wire tdo; + wire [2:0] ir_in; + wire virtual_state_cdr; + wire virtual_state_sdr; + wire virtual_state_udr; + + assign jtag_irq = 1'b0; + assign jtag_ir_out = 3'b000; + + generate + if (EXPORT_JTAG == 0) begin + // SLD node instantiation + altera_jtag_sld_node node ( + .tck (tck), + .tdi (tdi), + .tdo (tdo), + .ir_out (1'b0), + .ir_in (ir_in), + .virtual_state_cdr (virtual_state_cdr), + .virtual_state_cir (), + .virtual_state_e1dr (), + .virtual_state_e2dr (), + .virtual_state_pdr (), + .virtual_state_sdr (virtual_state_sdr), + .virtual_state_udr (virtual_state_udr), + .virtual_state_uir () + ); + + assign jtag_tdo = 1'b0; + end else begin + assign tck = jtag_tck; + assign tdi = jtag_tdi; + assign jtag_tdo = tdo; + assign ir_in = jtag_ir_in; + assign virtual_state_cdr = jtag_ena && !jtag_usr1 && jtag_state_cdr; + assign virtual_state_sdr = jtag_ena && !jtag_usr1 && jtag_state_sdr; + assign virtual_state_udr = jtag_ena && !jtag_usr1 && jtag_state_udr; + end + endgenerate + + generate + if (USE_PLI == 0) + begin : normal + altera_jtag_dc_streaming #( + .PURPOSE(PURPOSE), + .UPSTREAM_FIFO_SIZE(UPSTREAM_FIFO_SIZE), + .DOWNSTREAM_FIFO_SIZE(DOWNSTREAM_FIFO_SIZE), + .MGMT_CHANNEL_WIDTH(MGMT_CHANNEL_WIDTH) + ) jtag_dc_streaming ( + .tck (tck), + .tdi (tdi), + .tdo (tdo), + .ir_in (ir_in), + .virtual_state_cdr(virtual_state_cdr), + .virtual_state_sdr(virtual_state_sdr), + .virtual_state_udr(virtual_state_udr), + .clk(clk), + .reset_n(reset_n), + .source_data(source_data), + .source_valid(source_valid), + .sink_data(sink_data), + .sink_valid(sink_valid), + .sink_ready(sink_ready), + .resetrequest(resetrequest), + .debug_reset(debug_reset), + .mgmt_valid(mgmt_valid), + .mgmt_channel(mgmt_channel), + .mgmt_data(mgmt_data) + ); + + end + else + begin : pli_mode + + //synthesis translate_off + reg pli_out_valid; + reg pli_in_ready; + reg [7 : 0] pli_out_data; + + always @(posedge clk or negedge reset_n) begin + if (!reset_n) begin + pli_out_valid <= 0; + pli_out_data <= 'b0; + pli_in_ready <= 0; + end + else begin + `ifdef MODEL_TECH + $do_transaction( + PLI_PORT, + pli_out_valid, + source_ready, + pli_out_data, + sink_valid, + pli_in_ready, + sink_data + ); + `endif + end + end + + //synthesis translate_on + wire [7:0] jtag_source_data; + wire jtag_source_valid; + wire jtag_sink_ready; + wire jtag_resetrequest; + + altera_jtag_dc_streaming #( + .PURPOSE(PURPOSE), + .UPSTREAM_FIFO_SIZE(UPSTREAM_FIFO_SIZE), + .DOWNSTREAM_FIFO_SIZE(DOWNSTREAM_FIFO_SIZE), + .MGMT_CHANNEL_WIDTH(MGMT_CHANNEL_WIDTH) + ) jtag_dc_streaming ( + .tck (tck), + .tdi (tdi), + .tdo (tdo), + .ir_in (ir_in), + .virtual_state_cdr(virtual_state_cdr), + .virtual_state_sdr(virtual_state_sdr), + .virtual_state_udr(virtual_state_udr), + .clk(clk), + .reset_n(reset_n), + .source_data(jtag_source_data), + .source_valid(jtag_source_valid), + .sink_data(sink_data), + .sink_valid(sink_valid), + .sink_ready(jtag_sink_ready), + .resetrequest(jtag_resetrequest)//, + //.debug_reset(debug_reset), + //.mgmt_valid(mgmt_valid), + //.mgmt_channel(mgmt_channel), + //.mgmt_data(mgmt_data) + ); + + // synthesis read_comments_as_HDL on + // assign source_valid = jtag_source_valid; + // assign source_data = jtag_source_data; + // assign sink_ready = jtag_sink_ready; + // assign resetrequest = jtag_resetrequest; + // synthesis read_comments_as_HDL off + + //synthesis translate_off + assign source_valid = pli_out_valid; + assign source_data = pli_out_data; + assign sink_ready = pli_in_ready; + assign resetrequest = 1'b0; + //synthesis translate_on + assign jtag_tdo = 1'b0; + end + endgenerate +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_packets_to_bytes.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_packets_to_bytes.v new file mode 100755 index 0000000..7204e36 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_packets_to_bytes.v @@ -0,0 +1,253 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// -------------------------------------------------------------------------------- +//| Avalon ST Packets to Bytes Component +// -------------------------------------------------------------------------------- + +`timescale 1ns / 100ps +module altera_avalon_st_packets_to_bytes +//if ENCODING ==0, CHANNEL_WIDTH must be 8 +//else CHANNEL_WIDTH can be from 0 to 127 +#( parameter CHANNEL_WIDTH = 8, + parameter ENCODING = 0) +( + // Interface: clk + input clk, + input reset_n, + // Interface: ST in with packets + output reg in_ready, + input in_valid, + input [7: 0] in_data, + input [CHANNEL_WIDTH-1: 0] in_channel, + input in_startofpacket, + input in_endofpacket, + + // Interface: ST out + input out_ready, + output reg out_valid, + output reg [7: 0] out_data +); + + // --------------------------------------------------------------------- + //| Signal Declarations + // --------------------------------------------------------------------- + + localparam CHN_COUNT = (CHANNEL_WIDTH-1)/7; + localparam CHN_EFFECTIVE = CHANNEL_WIDTH-1; + reg sent_esc, sent_sop, sent_eop; + reg sent_channel_char, channel_escaped, sent_channel; + reg [CHANNEL_WIDTH:0] stored_channel; + reg [4:0] channel_count; + reg [((CHN_EFFECTIVE/7+1)*7)-1:0] stored_varchannel; + reg channel_needs_esc; + + + + wire need_sop, need_eop, need_esc, need_channel; + + // --------------------------------------------------------------------- + //| Thingofamagick + // --------------------------------------------------------------------- + + assign need_esc = (in_data === 8'h7a | + in_data === 8'h7b | + in_data === 8'h7c | + in_data === 8'h7d ); + assign need_eop = (in_endofpacket); + assign need_sop = (in_startofpacket); + + +generate +if( CHANNEL_WIDTH > 0) begin + wire channel_changed; + assign channel_changed = (in_channel != stored_channel); + assign need_channel = (need_sop | channel_changed); + + always @(posedge clk or negedge reset_n) begin + if (!reset_n) begin + sent_esc <= 0; + sent_sop <= 0; + sent_eop <= 0; + sent_channel <= 0; + channel_escaped <= 0; + sent_channel_char <= 0; + out_data <= 0; + out_valid <= 0; + channel_count <= 0; + channel_needs_esc <= 0; + end else begin + + if (out_ready ) + out_valid <= 0; + + if ((out_ready | ~out_valid) && in_valid ) + out_valid <= 1; + + if ((out_ready | ~out_valid) && in_valid) begin + if (need_channel & ~sent_channel) begin + if (~sent_channel_char) begin + sent_channel_char <= 1; + out_data <= 8'h7c; + channel_count <= CHN_COUNT[4:0]; + stored_varchannel <= in_channel; + if ((ENCODING == 0) | (CHANNEL_WIDTH == 7)) begin + channel_needs_esc <= (in_channel == 8'h7a | + in_channel == 8'h7b | + in_channel == 8'h7c | + in_channel == 8'h7d ); + end + end else if (channel_needs_esc & ~channel_escaped) begin + out_data <= 8'h7d; + channel_escaped <= 1; + end else if (~sent_channel) begin + if (ENCODING) begin + // Sending out MSB=1, while not last 7 bits of Channel + if (channel_count > 0) begin + if (channel_needs_esc) out_data <= {1'b1, stored_varchannel[((CHN_EFFECTIVE/7+1)*7)-1:((CHN_EFFECTIVE/7+1)*7)-7]} ^ 8'h20; + else out_data <= {1'b1, stored_varchannel[((CHN_EFFECTIVE/7+1)*7)-1:((CHN_EFFECTIVE/7+1)*7)-7]}; + stored_varchannel <= stored_varchannel<<7; + + channel_count <= channel_count - 1'b1; + // check whether the last 7 bits need escape or not + if (channel_count ==1 & CHANNEL_WIDTH > 7) begin + channel_needs_esc <= + ((stored_varchannel[((CHN_EFFECTIVE/7+1)*7)-8:((CHN_EFFECTIVE/7+1)*7)-14] == 7'h7a)| + (stored_varchannel[((CHN_EFFECTIVE/7+1)*7)-8:((CHN_EFFECTIVE/7+1)*7)-14] == 7'h7b) | + (stored_varchannel[((CHN_EFFECTIVE/7+1)*7)-8:((CHN_EFFECTIVE/7+1)*7)-14] == 7'h7c) | + (stored_varchannel[((CHN_EFFECTIVE/7+1)*7)-8:((CHN_EFFECTIVE/7+1)*7)-14] == 7'h7d) ); + end + end else begin + // Sending out MSB=0, last 7 bits of Channel + if (channel_needs_esc) begin + channel_needs_esc <= 0; + out_data <= {1'b0, stored_varchannel[((CHN_EFFECTIVE/7+1)*7)-1:((CHN_EFFECTIVE/7+1)*7)-7]} ^ 8'h20; + end else out_data <= {1'b0, stored_varchannel[((CHN_EFFECTIVE/7+1)*7)-1:((CHN_EFFECTIVE/7+1)*7)-7]}; + sent_channel <= 1; + end + end else begin + if (channel_needs_esc) begin + channel_needs_esc <= 0; + out_data <= in_channel ^ 8'h20; + end else out_data <= in_channel; + sent_channel <= 1; + end + end + end else if (need_sop & ~sent_sop) begin + sent_sop <= 1; + out_data <= 8'h7a; + + end else if (need_eop & ~sent_eop) begin + sent_eop <= 1; + out_data <= 8'h7b; + + end else if (need_esc & ~sent_esc) begin + sent_esc <= 1; + out_data <= 8'h7d; + end else begin + if (sent_esc) out_data <= in_data ^ 8'h20; + else out_data <= in_data; + sent_esc <= 0; + sent_sop <= 0; + sent_eop <= 0; + sent_channel <= 0; + channel_escaped <= 0; + sent_channel_char <= 0; + end + end + end + end + + //channel related signals + always @(posedge clk or negedge reset_n) begin + if (!reset_n) begin + //extra bit in stored_channel to force reset + stored_channel <= {CHANNEL_WIDTH{1'b1}}; + end else begin + //update stored_channel only when it is sent out + if (sent_channel) stored_channel <= in_channel; + end + end + always @* begin + + // in_ready. Low when: + // back pressured, or when + // we are outputting a control character, which means that one of + // {escape_char, start of packet, end of packet, channel} + // needs to be, but has not yet, been handled. + in_ready = (out_ready | !out_valid) & in_valid & (~need_esc | sent_esc) + & (~need_sop | sent_sop) + & (~need_eop | sent_eop) + & (~need_channel | sent_channel); + end + +end else begin + +assign need_channel = (need_sop); + + always @(posedge clk or negedge reset_n) begin + if (!reset_n) begin + sent_esc <= 0; + sent_sop <= 0; + sent_eop <= 0; + out_data <= 0; + out_valid <= 0; + sent_channel <= 0; + sent_channel_char <= 0; + end else begin + + if (out_ready ) + out_valid <= 0; + + if ((out_ready | ~out_valid) && in_valid ) + out_valid <= 1; + + if ((out_ready | ~out_valid) && in_valid) begin + if (need_channel & ~sent_channel) begin + if (~sent_channel_char) begin //Added sent channel 0 before the 1st SOP + sent_channel_char <= 1; + out_data <= 8'h7c; + end else if (~sent_channel) begin + out_data <= 'h0; + sent_channel <= 1; + end + end else if (need_sop & ~sent_sop) begin + sent_sop <= 1; + out_data <= 8'h7a; + end else if (need_eop & ~sent_eop) begin + sent_eop <= 1; + out_data <= 8'h7b; + end else if (need_esc & ~sent_esc) begin + sent_esc <= 1; + out_data <= 8'h7d; + end else begin + if (sent_esc) out_data <= in_data ^ 8'h20; + else out_data <= in_data; + sent_esc <= 0; + sent_sop <= 0; + sent_eop <= 0; + end + end + end + end + + always @* begin + in_ready = (out_ready | !out_valid) & in_valid & (~need_esc | sent_esc) + & (~need_sop | sent_sop) + & (~need_eop | sent_eop) + & (~need_channel | sent_channel); + end +end +endgenerate + +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_pipeline_base.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_pipeline_base.v new file mode 100755 index 0000000..0807f22 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_pipeline_base.v @@ -0,0 +1,139 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $File: //acds/rel/20.1std/ip/avalon_st/altera_avalon_st_pipeline_stage/altera_avalon_st_pipeline_base.v $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ +//------------------------------------------------------------------------------ + +`timescale 1ns / 1ns + +module altera_avalon_st_pipeline_base ( + clk, + reset, + in_ready, + in_valid, + in_data, + out_ready, + out_valid, + out_data + ); + + parameter SYMBOLS_PER_BEAT = 1; + parameter BITS_PER_SYMBOL = 8; + parameter PIPELINE_READY = 1; + localparam DATA_WIDTH = SYMBOLS_PER_BEAT * BITS_PER_SYMBOL; + + input clk; + input reset; + + output in_ready; + input in_valid; + input [DATA_WIDTH-1:0] in_data; + + input out_ready; + output out_valid; + output [DATA_WIDTH-1:0] out_data; + + reg full0; + reg full1; + reg [DATA_WIDTH-1:0] data0; + reg [DATA_WIDTH-1:0] data1; + + assign out_valid = full1; + assign out_data = data1; + + generate if (PIPELINE_READY == 1) + begin : REGISTERED_READY_PLINE + + assign in_ready = !full0; + + always @(posedge clk, posedge reset) begin + if (reset) begin + data0 <= {DATA_WIDTH{1'b0}}; + data1 <= {DATA_WIDTH{1'b0}}; + end else begin + // ---------------------------- + // always load the second slot if we can + // ---------------------------- + if (~full0) + data0 <= in_data; + // ---------------------------- + // first slot is loaded either from the second, + // or with new data + // ---------------------------- + if (~full1 || (out_ready && out_valid)) begin + if (full0) + data1 <= data0; + else + data1 <= in_data; + end + end + end + + always @(posedge clk or posedge reset) begin + if (reset) begin + full0 <= 1'b0; + full1 <= 1'b0; + end else begin + // no data in pipeline + if (~full0 & ~full1) begin + if (in_valid) begin + full1 <= 1'b1; + end + end // ~f1 & ~f0 + + // one datum in pipeline + if (full1 & ~full0) begin + if (in_valid & ~out_ready) begin + full0 <= 1'b1; + end + // back to empty + if (~in_valid & out_ready) begin + full1 <= 1'b0; + end + end // f1 & ~f0 + + // two data in pipeline + if (full1 & full0) begin + // go back to one datum state + if (out_ready) begin + full0 <= 1'b0; + end + end // end go back to one datum stage + end + end + + end + else + begin : UNREGISTERED_READY_PLINE + + // in_ready will be a pass through of the out_ready signal as it is not registered + assign in_ready = (~full1) | out_ready; + + always @(posedge clk or posedge reset) begin + if (reset) begin + data1 <= 'b0; + full1 <= 1'b0; + end + else begin + if (in_ready) begin + data1 <= in_data; + full1 <= in_valid; + end + end + end + end + endgenerate +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_pipeline_stage.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_pipeline_stage.sv new file mode 100755 index 0000000..a799cf6 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_avalon_st_pipeline_stage.sv @@ -0,0 +1,166 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $File: //acds/rel/20.1std/ip/avalon_st/altera_avalon_st_pipeline_stage/altera_avalon_st_pipeline_stage.sv $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ +//------------------------------------------------------------------------------ + +`timescale 1ns / 1ns + +module altera_avalon_st_pipeline_stage #( + parameter + SYMBOLS_PER_BEAT = 1, + BITS_PER_SYMBOL = 8, + USE_PACKETS = 0, + USE_EMPTY = 0, + PIPELINE_READY = 1, + + // Optional ST signal widths. Value "0" means no such port. + CHANNEL_WIDTH = 0, + ERROR_WIDTH = 0, + + // Derived parameters + DATA_WIDTH = SYMBOLS_PER_BEAT * BITS_PER_SYMBOL, + PACKET_WIDTH = 0, + EMPTY_WIDTH = 0 + ) + ( + input clk, + input reset, + + output in_ready, + input in_valid, + input [DATA_WIDTH - 1 : 0] in_data, + input [(CHANNEL_WIDTH ? (CHANNEL_WIDTH - 1) : 0) : 0] in_channel, + input [(ERROR_WIDTH ? (ERROR_WIDTH - 1) : 0) : 0] in_error, + input in_startofpacket, + input in_endofpacket, + input [(EMPTY_WIDTH ? (EMPTY_WIDTH - 1) : 0) : 0] in_empty, + + input out_ready, + output out_valid, + output [DATA_WIDTH - 1 : 0] out_data, + output [(CHANNEL_WIDTH ? (CHANNEL_WIDTH - 1) : 0) : 0] out_channel, + output [(ERROR_WIDTH ? (ERROR_WIDTH - 1) : 0) : 0] out_error, + output out_startofpacket, + output out_endofpacket, + output [(EMPTY_WIDTH ? (EMPTY_WIDTH - 1) : 0) : 0] out_empty +); + localparam + PAYLOAD_WIDTH = + DATA_WIDTH + + PACKET_WIDTH + + CHANNEL_WIDTH + + EMPTY_WIDTH + + ERROR_WIDTH; + + wire [PAYLOAD_WIDTH - 1: 0] in_payload; + wire [PAYLOAD_WIDTH - 1: 0] out_payload; + + // Assign in_data and other optional in_* interface signals to in_payload. + assign in_payload[DATA_WIDTH - 1 : 0] = in_data; + generate + // optional packet inputs + if (PACKET_WIDTH) begin + assign in_payload[ + DATA_WIDTH + PACKET_WIDTH - 1 : + DATA_WIDTH + ] = {in_startofpacket, in_endofpacket}; + end + // optional channel input + if (CHANNEL_WIDTH) begin + assign in_payload[ + DATA_WIDTH + PACKET_WIDTH + CHANNEL_WIDTH - 1 : + DATA_WIDTH + PACKET_WIDTH + ] = in_channel; + end + // optional empty input + if (EMPTY_WIDTH) begin + assign in_payload[ + DATA_WIDTH + PACKET_WIDTH + CHANNEL_WIDTH + EMPTY_WIDTH - 1 : + DATA_WIDTH + PACKET_WIDTH + CHANNEL_WIDTH + ] = in_empty; + end + // optional error input + if (ERROR_WIDTH) begin + assign in_payload[ + DATA_WIDTH + PACKET_WIDTH + CHANNEL_WIDTH + EMPTY_WIDTH + ERROR_WIDTH - 1 : + DATA_WIDTH + PACKET_WIDTH + CHANNEL_WIDTH + EMPTY_WIDTH + ] = in_error; + end + endgenerate + + altera_avalon_st_pipeline_base #( + .SYMBOLS_PER_BEAT (PAYLOAD_WIDTH), + .BITS_PER_SYMBOL (1), + .PIPELINE_READY (PIPELINE_READY) + ) core ( + .clk (clk), + .reset (reset), + .in_ready (in_ready), + .in_valid (in_valid), + .in_data (in_payload), + .out_ready (out_ready), + .out_valid (out_valid), + .out_data (out_payload) + ); + + // Assign out_data and other optional out_* interface signals from out_payload. + assign out_data = out_payload[DATA_WIDTH - 1 : 0]; + generate + // optional packet outputs + if (PACKET_WIDTH) begin + assign {out_startofpacket, out_endofpacket} = + out_payload[DATA_WIDTH + PACKET_WIDTH - 1 : DATA_WIDTH]; + end else begin + // Avoid a "has no driver" warning. + assign {out_startofpacket, out_endofpacket} = 2'b0; + end + + // optional channel output + if (CHANNEL_WIDTH) begin + assign out_channel = out_payload[ + DATA_WIDTH + PACKET_WIDTH + CHANNEL_WIDTH - 1 : + DATA_WIDTH + PACKET_WIDTH + ]; + end else begin + // Avoid a "has no driver" warning. + assign out_channel = 1'b0; + end + // optional empty output + if (EMPTY_WIDTH) begin + assign out_empty = out_payload[ + DATA_WIDTH + PACKET_WIDTH + CHANNEL_WIDTH + EMPTY_WIDTH - 1 : + DATA_WIDTH + PACKET_WIDTH + CHANNEL_WIDTH + ]; + end else begin + // Avoid a "has no driver" warning. + assign out_empty = 1'b0; + end + // optional error output + if (ERROR_WIDTH) begin + assign out_error = out_payload[ + DATA_WIDTH + PACKET_WIDTH + CHANNEL_WIDTH + EMPTY_WIDTH + ERROR_WIDTH - 1 : + DATA_WIDTH + PACKET_WIDTH + CHANNEL_WIDTH + EMPTY_WIDTH + ]; + end else begin + // Avoid a "has no driver" warning. + assign out_error = 1'b0; + end + endgenerate + +endmodule + + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_jtag_dc_streaming.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_jtag_dc_streaming.v new file mode 100755 index 0000000..2403eba --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_jtag_dc_streaming.v @@ -0,0 +1,261 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// This module is a simple clock crosser for control signals. It will take +// the asynchronous control signal and synchronize it to the clk domain +// attached to the clk input. It does so by passing the control signal +// through a pair of registers and then sensing the level transition from +// either hi-to-lo or lo-to-hi. *ATTENTION* This module makes the assumption +// that the control signal will always transition every time is asserted. +// i.e.: +// ____ ___________________ +// -> ___| |___ and ___| |_____ +// +// on the control signal will be seen as only one assertion of the control +// signal. In short, if your control could be asserted back-to-back, then +// don't use this module. You'll be losing data. + +`timescale 1 ns / 1 ns + +module altera_jtag_control_signal_crosser ( + clk, + reset_n, + async_control_signal, + sense_pos_edge, + sync_control_signal +); + input clk; + input reset_n; + input async_control_signal; + input sense_pos_edge; + output sync_control_signal; + + parameter SYNC_DEPTH = 3; // number of synchronizer stages for clock crossing + + reg sync_control_signal; + + wire synchronized_raw_signal; + reg edge_detector_register; + + altera_std_synchronizer #(.depth(SYNC_DEPTH)) synchronizer ( + .clk(clk), + .reset_n(reset_n), + .din(async_control_signal), + .dout(synchronized_raw_signal) + ); + + always @ (posedge clk or negedge reset_n) + if (~reset_n) + edge_detector_register <= 1'b0; + else + edge_detector_register <= synchronized_raw_signal; + + always @* begin + if (sense_pos_edge) + sync_control_signal <= ~edge_detector_register & synchronized_raw_signal; + else + sync_control_signal <= edge_detector_register & ~synchronized_raw_signal; + end +endmodule + +// This module crosses the clock domain for a given source +module altera_jtag_src_crosser ( + sink_clk, + sink_reset_n, + sink_valid, + sink_data, + src_clk, + src_reset_n, + src_valid, + src_data +); + parameter WIDTH = 8; + parameter SYNC_DEPTH = 3; // number of synchronizer stages for clock crossing + + input sink_clk; + input sink_reset_n; + input sink_valid; + input [WIDTH-1:0] sink_data; + input src_clk; + input src_reset_n; + output src_valid; + output [WIDTH-1:0] src_data; + + reg sink_valid_buffer; + reg [WIDTH-1:0] sink_data_buffer; + + reg src_valid; + reg [WIDTH-1:0] src_data /* synthesis ALTERA_ATTRIBUTE = "PRESERVE_REGISTER=ON ; SUPPRESS_DA_RULE_INTERNAL=R101 ; {-from \"*\"} CUT=ON " */; + + wire synchronized_valid; + + altera_jtag_control_signal_crosser #( + .SYNC_DEPTH(SYNC_DEPTH) + ) crosser ( + .clk(src_clk), + .reset_n(src_reset_n), + .async_control_signal(sink_valid_buffer), + .sense_pos_edge(1'b1), + .sync_control_signal(synchronized_valid) + ); + always @ (posedge sink_clk or negedge sink_reset_n) begin + if (~sink_reset_n) begin + sink_valid_buffer <= 1'b0; + sink_data_buffer <= 'b0; + end else begin + sink_valid_buffer <= sink_valid; + if (sink_valid) begin + sink_data_buffer <= sink_data; + end + end //end if + end //always sink_clk + + always @ (posedge src_clk or negedge src_reset_n) begin + if (~src_reset_n) begin + src_valid <= 1'b0; + src_data <= {WIDTH{1'b0}}; + end else begin + src_valid <= synchronized_valid; + src_data <= synchronized_valid ? sink_data_buffer : src_data; + end + end + +endmodule + +module altera_jtag_dc_streaming #( + parameter PURPOSE = 0, // for discovery of services behind this JTAG Phy - 0 + // for JTAG Phy, 1 for Packets to Master + parameter UPSTREAM_FIFO_SIZE = 0, + parameter DOWNSTREAM_FIFO_SIZE = 0, + parameter MGMT_CHANNEL_WIDTH = -1 +) ( + // Signals in the JTAG clock domain + input wire tck, + input wire tdi, + output wire tdo, + input wire [2:0] ir_in, + input wire virtual_state_cdr, + input wire virtual_state_sdr, + input wire virtual_state_udr, + + input wire clk, + input wire reset_n, + output wire [7:0] source_data, + output wire source_valid, + input wire [7:0] sink_data, + input wire sink_valid, + output wire sink_ready, + output wire resetrequest, + output wire debug_reset, + output wire mgmt_valid, + output wire [(MGMT_CHANNEL_WIDTH>0?MGMT_CHANNEL_WIDTH:1)-1:0] mgmt_channel, + output wire mgmt_data +); + + // the tck to sysclk sync depth is fixed at 8 + // 8 is the worst case scenario from our metastability analysis, and since + // using TCK serially is so slow we should have plenty of clock cycles. + localparam TCK_TO_SYSCLK_SYNC_DEPTH = 8; + // The clk to tck path is fixed at 3 deep for Synchronizer depth. + // Since the tck clock is so slow, no parameter is exposed. + localparam SYSCLK_TO_TCK_SYNC_DEPTH = 3; + + wire jtag_clock_reset_n; // system reset is synchronized with tck + wire [7:0] jtag_source_data; + wire jtag_source_valid; + wire [7:0] jtag_sink_data; + wire jtag_sink_valid; + wire jtag_sink_ready; + + /* Reset Synchronizer module. + * + * The SLD Node does not provide a reset for the TCK clock domain. + * Due to the handshaking nature of the Avalon-ST Clock Crosser, + * internal states need to be reset to 0 in order to guarantee proper + * functionality throughout resets. + * + * This reset block will asynchronously assert reset, and synchronously + * deassert reset for the tck clock domain. + */ + altera_std_synchronizer #( + .depth(SYSCLK_TO_TCK_SYNC_DEPTH) + ) synchronizer ( + .clk(tck), + .reset_n(reset_n), + .din(1'b1), + .dout(jtag_clock_reset_n) + ); + + altera_jtag_streaming #( + .PURPOSE(PURPOSE), + .UPSTREAM_FIFO_SIZE(UPSTREAM_FIFO_SIZE), + .DOWNSTREAM_FIFO_SIZE(DOWNSTREAM_FIFO_SIZE), + .MGMT_CHANNEL_WIDTH(MGMT_CHANNEL_WIDTH) + ) jtag_streaming ( + .tck (tck), + .tdi (tdi), + .tdo (tdo), + .ir_in (ir_in), + .virtual_state_cdr(virtual_state_cdr), + .virtual_state_sdr(virtual_state_sdr), + .virtual_state_udr(virtual_state_udr), + + .reset_n(jtag_clock_reset_n), + .source_data(jtag_source_data), + .source_valid(jtag_source_valid), + .sink_data(jtag_sink_data), + .sink_valid(jtag_sink_valid), + .sink_ready(jtag_sink_ready), + .clock_to_sample(clk), + .reset_to_sample(reset_n), + .resetrequest(resetrequest), + .debug_reset(debug_reset), + .mgmt_valid(mgmt_valid), + .mgmt_channel(mgmt_channel), + .mgmt_data(mgmt_data) + ); + + // synchronization in both clock domain crossings takes place in the "clk" system clock domain! + + altera_avalon_st_clock_crosser #( + .SYMBOLS_PER_BEAT(1), + .BITS_PER_SYMBOL(8), + .FORWARD_SYNC_DEPTH(SYSCLK_TO_TCK_SYNC_DEPTH), + .BACKWARD_SYNC_DEPTH(TCK_TO_SYSCLK_SYNC_DEPTH) + ) sink_crosser ( + .in_clk(clk), + .in_reset(~reset_n), + .in_data(sink_data), + .in_ready(sink_ready), + .in_valid(sink_valid), + .out_clk(tck), + .out_reset(~jtag_clock_reset_n), + .out_data(jtag_sink_data), + .out_ready(jtag_sink_ready), + .out_valid(jtag_sink_valid) + ); + + altera_jtag_src_crosser #( + .SYNC_DEPTH(TCK_TO_SYSCLK_SYNC_DEPTH) + ) source_crosser ( + .sink_clk(tck), + .sink_reset_n(jtag_clock_reset_n), + .sink_valid(jtag_source_valid), + .sink_data(jtag_source_data), + .src_clk(clk), + .src_reset_n(reset_n), + .src_valid(source_valid), + .src_data(source_data) + ); + +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_jtag_sld_node.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_jtag_sld_node.v new file mode 100755 index 0000000..1ffcb79 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_jtag_sld_node.v @@ -0,0 +1,261 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// synopsys translate_off +`timescale 1 ns / 1 ns +// synopsys translate_on +module altera_jtag_sld_node ( + ir_out, + tdo, + ir_in, + tck, + tdi, + virtual_state_cdr, + virtual_state_cir, + virtual_state_e1dr, + virtual_state_e2dr, + virtual_state_pdr, + virtual_state_sdr, + virtual_state_udr, + virtual_state_uir +); + +parameter TCK_FREQ_MHZ = 20; +localparam TCK_HALF_PERIOD_US = (1000/TCK_FREQ_MHZ)/2; +localparam IRWIDTH = 3; + +input [IRWIDTH - 1:0] ir_out; +input tdo; +output reg [IRWIDTH - 1:0] ir_in; +output tck; +output reg tdi = 1'b0; +output virtual_state_cdr; +output virtual_state_cir; +output virtual_state_e1dr; +output virtual_state_e2dr; +output virtual_state_pdr; +output virtual_state_sdr; +output virtual_state_udr; +output virtual_state_uir; + +// PHY Simulation signals +`ifndef ALTERA_RESERVED_QIS + reg simulation_clock; + reg sdrs; + reg cdr; + reg sdr; + reg e1dr; + reg udr; + reg [7:0] bit_index; +`endif + + +// PHY Instantiation +`ifdef ALTERA_RESERVED_QIS + wire tdi_port; + wire [IRWIDTH - 1:0] ir_in_port; + always @(tdi_port) + tdi = tdi_port; + always @(ir_in_port) + ir_in = ir_in_port; + sld_virtual_jtag_basic sld_virtual_jtag_component ( + .ir_out (ir_out), + .tdo (tdo), + .tdi (tdi_port), + .tck (tck), + .ir_in (ir_in_port), + .virtual_state_cir (virtual_state_cir), + .virtual_state_pdr (virtual_state_pdr), + .virtual_state_uir (virtual_state_uir), + .virtual_state_sdr (virtual_state_sdr), + .virtual_state_cdr (virtual_state_cdr), + .virtual_state_udr (virtual_state_udr), + .virtual_state_e1dr (virtual_state_e1dr), + .virtual_state_e2dr (virtual_state_e2dr) + // synopsys translate_off + , + .jtag_state_cdr (), + .jtag_state_cir (), + .jtag_state_e1dr (), + .jtag_state_e1ir (), + .jtag_state_e2dr (), + .jtag_state_e2ir (), + .jtag_state_pdr (), + .jtag_state_pir (), + .jtag_state_rti (), + .jtag_state_sdr (), + .jtag_state_sdrs (), + .jtag_state_sir (), + .jtag_state_sirs (), + .jtag_state_tlr (), + .jtag_state_udr (), + .jtag_state_uir (), + .tms () + // synopsys translate_on + ); + defparam + sld_virtual_jtag_component.sld_mfg_id = 110, + sld_virtual_jtag_component.sld_type_id = 132, + sld_virtual_jtag_component.sld_version = 1, + sld_virtual_jtag_component.sld_auto_instance_index = "YES", + sld_virtual_jtag_component.sld_instance_index = 0, + sld_virtual_jtag_component.sld_ir_width = IRWIDTH, + sld_virtual_jtag_component.sld_sim_action = "", + sld_virtual_jtag_component.sld_sim_n_scan = 0, + sld_virtual_jtag_component.sld_sim_total_length = 0; +`endif + +// PHY Simulation +`ifndef ALTERA_RESERVED_QIS + + localparam DATA = 0; + localparam LOOPBACK = 1; + localparam DEBUG = 2; + localparam INFO = 3; + localparam CONTROL = 4; + localparam MGMT = 5; + + always + //#TCK_HALF_PERIOD_US simulation_clock = $random; + #TCK_HALF_PERIOD_US simulation_clock = ~simulation_clock; + + assign tck = simulation_clock; + assign virtual_state_cdr = cdr; + assign virtual_state_sdr = sdr; + assign virtual_state_e1dr = e1dr; + assign virtual_state_udr = udr; + + task reset_jtag_state; + begin + simulation_clock = 0; + enter_data_mode; + clear_states_async; + end + endtask + + task enter_data_mode; + begin + ir_in = DATA; + clear_states; + end + endtask + + task enter_loopback_mode; + begin + ir_in = LOOPBACK; + clear_states; + end + endtask + + task enter_debug_mode; + begin + ir_in = DEBUG; + clear_states; + end + endtask + + task enter_info_mode; + begin + ir_in = INFO; + clear_states; + end + endtask + + task enter_control_mode; + begin + ir_in = CONTROL; + clear_states; + end + endtask + + task enter_mgmt_mode; + begin + ir_in = MGMT; + clear_states; + end + endtask + + task enter_sdrs_state; + begin + {sdrs, cdr, sdr, e1dr, udr} = 5'b10000; + tdi = 1'b0; + @(posedge tck); + end + endtask + + task enter_cdr_state; + begin + {sdrs, cdr, sdr, e1dr, udr} = 5'b01000; + tdi = 1'b0; + @(posedge tck); + end + endtask + + task enter_e1dr_state; + begin + {sdrs, cdr, sdr, e1dr, udr} = 5'b00010; + tdi = 1'b0; + @(posedge tck); + end + endtask + + task enter_udr_state; + begin + {sdrs, cdr, sdr, e1dr, udr} = 5'b00001; + tdi = 1'b0; + @(posedge tck); + end + endtask + + task clear_states; + begin + clear_states_async; + @(posedge tck); + end + endtask + + task clear_states_async; + begin + {cdr, sdr, e1dr, udr} = 4'b0000; + end + endtask + + task shift_one_bit; + input bit_to_send; + output reg bit_received; + begin + {cdr, sdr, e1dr, udr} = 4'b0100; + tdi = bit_to_send; + @(posedge tck); + bit_received = tdo; + end + endtask + + task shift_one_byte; + input [7:0] byte_to_send; + output reg [7:0] byte_received; + integer i; + reg bit_received; + begin + for (i=0; i<8; i=i+1) + begin + bit_index = i; + shift_one_bit(byte_to_send[i], bit_received); + byte_received[i] = bit_received; + end + end + endtask + +`endif + +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_jtag_streaming.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_jtag_streaming.v new file mode 100755 index 0000000..9df1303 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_jtag_streaming.v @@ -0,0 +1,634 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// synopsys translate_off +`timescale 1 ns / 1 ns +// synopsys translate_on + +module altera_jtag_streaming #( + parameter PURPOSE = 0, + parameter UPSTREAM_FIFO_SIZE = 0, + parameter DOWNSTREAM_FIFO_SIZE = 0, + parameter MGMT_CHANNEL_WIDTH = -1 +) ( + // JTAG Signals + input wire tck, + input wire tdi, + output reg tdo, + input wire [2:0] ir_in, + input wire virtual_state_cdr, + input wire virtual_state_sdr, + input wire virtual_state_udr, + + input wire reset_n, + // Source Signals + output wire [7:0] source_data, + output wire source_valid, + // Sink Signals + input wire [7:0] sink_data, + input wire sink_valid, + output wire sink_ready, + // Clock Debug Signals + input wire clock_to_sample, + input wire reset_to_sample, + // Resetrequest signal + output reg resetrequest, + // Debug reset and management channel + output wire debug_reset, + output reg mgmt_valid, + output reg [(MGMT_CHANNEL_WIDTH>0?MGMT_CHANNEL_WIDTH:1)-1:0] mgmt_channel, + output reg mgmt_data +); + + // function to calculate log2, floored. + function integer flog2; + input [31:0] Depth; + integer i; + begin + i = Depth; + if ( i <= 0 ) flog2 = 0; + else begin + for(flog2 = -1; i > 0; flog2 = flog2 + 1) + i = i >> 1; + end + end + endfunction // flog2 + + localparam UPSTREAM_ENCODED_SIZE = flog2(UPSTREAM_FIFO_SIZE); + localparam DOWNSTREAM_ENCODED_SIZE = flog2(DOWNSTREAM_FIFO_SIZE); + + localparam TCK_TO_SYSCLK_SYNC_DEPTH = 8; + localparam SYSCLK_TO_TCK_SYNC_DEPTH = 3; + + // IR values determine the operating modes + localparam DATA = 0; + localparam LOOPBACK = 1; + localparam DEBUG = 2; + localparam INFO = 3; + localparam CONTROL = 4; + localparam MGMT = 5; + + // Operating Modes: + // Data - To send data which its size and valid position are encoded in the header bytes of the data stream + // Loopback - To become a JTAG loopback with a bypass register + // Debug - To read the values of the clock sensing, clock sampling and reset sampling + // Info - To read the parameterized values that describe the components connected to JTAG Phy which is of great interest to the driver + // Control - To set the offset of bit-padding and to do a reset request + // Mgmt - Send management commands (resets mostly) to agents + + localparam IRWIDTH = 3; + + // State machine encoding for write_state + localparam ST_BYPASS = 'h0; + localparam ST_HEADER_1 = 'h1; + localparam ST_HEADER_2 = 'h2; + localparam ST_WRITE_DATA = 'h3; + + // State machine encoding for read_state + localparam ST_HEADER = 'h0; + localparam ST_PADDED = 'h1; + localparam ST_READ_DATA = 'h2; + + reg [1:0] write_state = ST_BYPASS; + reg [1:0] read_state = ST_HEADER; + + reg [ 7:0] dr_data_in = 'b0; + reg [ 7:0] dr_data_out = 'b0; + reg dr_loopback = 'b0; + reg [ 2:0] dr_debug = 'b0; + reg [10:0] dr_info = 'b0; + reg [ 8:0] dr_control = 'b0; + reg [MGMT_CHANNEL_WIDTH+2:0] dr_mgmt = 'b0; + + reg [ 8:0] padded_bit_counter = 'b0; + reg [ 7:0] bypass_bit_counter = 'b0; + reg [ 2:0] write_data_bit_counter = 'b0; + reg [ 2:0] read_data_bit_counter = 'b0; + reg [ 3:0] header_in_bit_counter = 'b0; + reg [ 3:0] header_out_bit_counter = 'b0; + reg [18:0] scan_length_byte_counter = 'b0; + reg [18:0] valid_write_data_length_byte_counter = 'b0; + + reg write_data_valid = 'b0; + reg read_data_valid = 'b0; + reg read_data_all_valid = 'b0; + + reg decode_header_1 = 'b0; + reg decode_header_2 = 'b0; + + wire write_data_byte_aligned; + wire read_data_byte_aligned; + wire padded_bit_byte_aligned; + wire bytestream_end; + + assign write_data_byte_aligned = (write_data_bit_counter == 1); + assign read_data_byte_aligned = (read_data_bit_counter == 1); + assign padded_bit_byte_aligned = (padded_bit_counter[2:0] == 'b0); + assign bytestream_end = (scan_length_byte_counter == 'b0); + + reg [ 7:0] offset = 'b0; + reg [15:0] header_in = 'b0; + + reg [9:0] scan_length = 'b0; + reg [2:0] read_data_length = 'b0; + reg [2:0] write_data_length = 'b0; + + wire [7:0] idle_inserter_sink_data; + wire idle_inserter_sink_valid; + wire idle_inserter_sink_ready; + wire [7:0] idle_inserter_source_data; + reg idle_inserter_source_ready = 'b0; + reg [7:0] idle_remover_sink_data = 'b0; + reg idle_remover_sink_valid = 'b0; + wire [7:0] idle_remover_source_data; + wire idle_remover_source_valid; + + assign source_data = idle_remover_source_data; + assign source_valid = idle_remover_source_valid; + assign sink_ready = idle_inserter_sink_ready; + assign idle_inserter_sink_data = sink_data; + assign idle_inserter_sink_valid = sink_valid; + + reg clock_sensor = 'b0; + reg clock_to_sample_div2 = 'b0; + (* altera_attribute = {"-name GLOBAL_SIGNAL OFF"}*) reg clock_sense_reset_n = 'b1; + + wire data_available; + + assign data_available = sink_valid; + + wire [18:0] decoded_scan_length; + wire [18:0] decoded_write_data_length; + wire [18:0] decoded_read_data_length; + + assign decoded_scan_length = { scan_length, {8{1'b1}} }; + // +-------------------+----------------+---------------------+ + // | scan_length | Length (bytes) | decoded_scan_length | + // +-------------------+----------------+---------------------+ + // | 0x0 | 256 | 0x0ff (255) | + // | 0x1 | 512 | 0x1ff (511) | + // | 0x2 | 768 | 0x2ff (767) | + // | . | . | . | + // | 0x3ff | 256k | 0x3ff (256k-1) | + // +-------------------+----------------+---------------------+ + + // TODO: use look up table to save LEs? + // Decoded value is correct except for 0x7 + assign decoded_write_data_length = (write_data_length == 0) ? 19'h0 : (19'h00080 << write_data_length); + assign decoded_read_data_length = (read_data_length == 0) ? 19'h0 : (19'h00080 << read_data_length); + // +-------------------+---------------+---------------------------+ + // | read_data_length | Length | decoded_read_data_length | + // | write_data_length | (bytes) | decoded_write_data_length | + // +-------------------+---------------+---------------------------+ + // | 0x0 | 0 | 0x0000 (0) | + // | 0x1 | 256 | 0x0100 (256) | + // | 0x2 | 512 | 0x0200 (512) | + // | 0x3 | 1k | 0x0400 (1024) | + // | 0x4 | 2k | 0x0800 (2048) | + // | 0x5 | 4k | 0x1000 (4096) | + // | 0x6 | 8k | 0x2000 (8192) | + // | 0x7 | scan_length | invalid | + // +-------------------+---------------+---------------------------+ + + wire clock_sensor_sync; + wire reset_to_sample_sync; + wire clock_to_sample_div2_sync; + wire clock_sense_reset_n_sync; + + + altera_std_synchronizer #(.depth(SYSCLK_TO_TCK_SYNC_DEPTH)) clock_sensor_synchronizer ( + .clk(tck), + .reset_n(1'b1), + .din(clock_sensor), + .dout(clock_sensor_sync)); + + altera_std_synchronizer #(.depth(SYSCLK_TO_TCK_SYNC_DEPTH)) reset_to_sample_synchronizer ( + .clk(tck), + .reset_n(1'b1), + .din(reset_to_sample), + .dout(reset_to_sample_sync)); + + altera_std_synchronizer #(.depth(SYSCLK_TO_TCK_SYNC_DEPTH)) clock_to_sample_div2_synchronizer ( + .clk(tck), + .reset_n(1'b1), + .din(clock_to_sample_div2), + .dout(clock_to_sample_div2_sync)); + + altera_std_synchronizer #(.depth(TCK_TO_SYSCLK_SYNC_DEPTH)) clock_sense_reset_n_synchronizer ( + .clk(clock_to_sample), + .reset_n(clock_sense_reset_n), + .din(1'b1), + .dout(clock_sense_reset_n_sync)); + + always @ (posedge clock_to_sample or negedge clock_sense_reset_n_sync) begin + if (~clock_sense_reset_n_sync) begin + clock_sensor <= 1'b0; + end else begin + clock_sensor <= 1'b1; + end + end + + always @ (posedge clock_to_sample) begin + clock_to_sample_div2 <= ~clock_to_sample_div2; + end + + always @ (posedge tck) begin + + idle_remover_sink_valid <= 1'b0; + idle_inserter_source_ready <= 1'b0; + + // Data mode sourcing (write) + + // offset(rounded 8) m-i i 16 offset + // +------------+-----------+------------------+--------+------------+ + // tdi -> | padded_bit | undefined | valid_write_data | header | bypass_bit | + // +------------+-----------+------------------+--------+------------+ + // Data mode DR data stream write format (as seen by hardware) + // + if (ir_in == DATA) begin + + + if (virtual_state_cdr) begin + if (offset == 'b0) begin + write_state <= ST_HEADER_1; + end else begin + write_state <= ST_BYPASS; + end + // 8-bit bypass_bit_counter + bypass_bit_counter <= offset; + // 4-bit header_in_bit_counter + header_in_bit_counter <= 15; + // 3-bit write_data_bit_counter + write_data_bit_counter <= 0; + // Reset the registers + // TODO: not necessarily all, reduce LE + decode_header_1 <= 1'b0; + decode_header_2 <= 1'b0; + read_data_all_valid <= 1'b0; + valid_write_data_length_byte_counter <= 0; + end + + if (virtual_state_sdr) begin + // Discard bypass bits, then decode the 16-bit header + // 3 3 10 + // +-------------------+------------------+-------------+ + // | write_data_length | read_data_length | scan_length | + // +-------------------+------------------+-------------+ + // Header format + + case (write_state) + ST_BYPASS: begin + // Discard the bypass bit + bypass_bit_counter <= bypass_bit_counter - 1'b1; + if (bypass_bit_counter == 1) begin + write_state <= ST_HEADER_1; + end + end + // Shift the scan_length and read_data_length + ST_HEADER_1: begin + // TODO: header_in can be shorter + // Shift into header_in + header_in <= {tdi, header_in[15:1]}; + header_in_bit_counter <= header_in_bit_counter - 1'b1; + if (header_in_bit_counter == 3) begin + read_data_length <= {tdi, header_in[15:14]}; + scan_length <= header_in[13:4]; + write_state <= ST_HEADER_2; + decode_header_1 <= 1'b1; + end + end + // Shift the write_data_length + ST_HEADER_2: begin + // Shift into header_in + header_in <= {tdi, header_in[15:1]}; + header_in_bit_counter <= header_in_bit_counter - 1'b1; + // Decode read_data_length and scan_length + if (decode_header_1) begin + decode_header_1 <= 1'b0; + // Set read_data_all_valid + if (read_data_length == 3'b111) begin + read_data_all_valid <= 1'b1; + end + // Load scan_length_byte_counter + scan_length_byte_counter <= decoded_scan_length; + end + if (header_in_bit_counter == 0) begin + write_data_length <= {tdi, header_in[15:14]}; + write_state <= ST_WRITE_DATA; + decode_header_2 <= 1'b1; + end + end + // Shift the valid_write_data + ST_WRITE_DATA: begin + // Shift into dr_data_in + dr_data_in <= {tdi, dr_data_in[7:1]}; + // Decode write_data_length + if (decode_header_2) begin + decode_header_2 <= 1'b0; + // Load valid_write_data_length_byte_counter + case (write_data_length) + 3'b111: valid_write_data_length_byte_counter <= decoded_scan_length + 1'b1; + 3'b000: valid_write_data_length_byte_counter <= 'b0; + default: valid_write_data_length_byte_counter <= decoded_write_data_length; + endcase + end + write_data_bit_counter <= write_data_bit_counter - 1'b1; + write_data_valid <= (valid_write_data_length_byte_counter != 0); + // Feed the data to the idle remover + if (write_data_byte_aligned && write_data_valid) begin + valid_write_data_length_byte_counter <= valid_write_data_length_byte_counter - 1'b1; + idle_remover_sink_valid <= 1'b1; + idle_remover_sink_data <= {tdi, dr_data_in[7:1]}; + end + end + endcase + end + + end + + // Data mode sinking (read) + + // i m-i offset(rounded 8) 16 + // +-----------------+-----------+------------+--------+ + // | valid_read_data | undefined | padded_bit | header | -> tdo + // +-----------------+-----------+------------+--------+ + // Data mode DR data stream read format (as seen by hardware) + // + if (ir_in == DATA) begin + + if (virtual_state_cdr) begin + + read_state <= ST_HEADER; + // Offset is rounded to nearest ceiling x8 to byte-align padded bits + // 9-bit padded_bit_counter + if (|offset[2:0]) begin + padded_bit_counter[8:3] <= offset[7:3] + 1'b1; + padded_bit_counter[2:0] <= 3'b0; + end else begin + padded_bit_counter <= {1'b0, offset}; + end + // 4-bit header_out_bit_counter + header_out_bit_counter <= 0; + // 3-bit read_data_bit_counter + read_data_bit_counter <= 0; + // Load the data_available bit into header + dr_data_out <= {{7{1'b0}}, data_available}; + read_data_valid <= 0; + + end + + if (virtual_state_sdr) begin + // 10 1 + // +-----------------------------------+----------------+ + // | reserved | data_available | + // +-----------------------------------+----------------+ + // Header format + + dr_data_out <= {1'b0, dr_data_out[7:1]}; + case (read_state) + // Shift the scan_length and read_data_length + ST_HEADER: begin + header_out_bit_counter <= header_out_bit_counter - 1'b1; + // Retrieve data from idle inserter for the next shift if no paddded bits + if (header_out_bit_counter == 2) begin + if (padded_bit_counter == 0) begin + idle_inserter_source_ready <= read_data_all_valid; + end + end + if (header_out_bit_counter == 1) begin + if (padded_bit_counter == 0) begin + read_state <= ST_READ_DATA; + read_data_valid <= read_data_all_valid || (scan_length_byte_counter<=decoded_read_data_length+1); + dr_data_out <= read_data_all_valid ? idle_inserter_source_data : 8'h4a; + end else begin + read_state <= ST_PADDED; + padded_bit_counter <= padded_bit_counter - 1'b1; + idle_inserter_source_ready <= 1'b0; + dr_data_out <= 8'h4a; + end + end + end + ST_PADDED: begin + padded_bit_counter <= padded_bit_counter - 1'b1; + if (padded_bit_byte_aligned) begin + // Load idle character into data register + dr_data_out <= 8'h4a; + end + // Retrieve data from idle inserter for the next shift when padded bits finish + if (padded_bit_counter == 1) begin + idle_inserter_source_ready <= read_data_all_valid; + end + if (padded_bit_counter == 0) begin // TODO: might make use of (padded_bit_counter[8:3]&padded_bit_byte_aligned) + read_state <= ST_READ_DATA; + read_data_valid <= read_data_all_valid || (scan_length_byte_counter<=decoded_read_data_length+1); + dr_data_out <= read_data_all_valid ? idle_inserter_source_data : 8'h4a; + end + end + ST_READ_DATA: begin + read_data_bit_counter <= read_data_bit_counter - 1'b1; + // Retrieve data from idle inserter just before read_data_byte_aligned + if (read_data_bit_counter == 2) begin + // Assert ready to retrieve data from idle inserter only when the bytestream has not ended, + // data is valid (idle_inserter is always valid) and data is needed (read_data_valid) + idle_inserter_source_ready <= bytestream_end ? 1'b0 : read_data_valid; + end + if (read_data_byte_aligned) begin + // Note that bytestream_end is driven by scan_length_byte_counter + if (~bytestream_end) begin + scan_length_byte_counter <= scan_length_byte_counter - 1'b1; + end + read_data_valid <= read_data_all_valid || (scan_length_byte_counter<=decoded_read_data_length+1); + // Load idle character if bytestream has ended, else get data from the idle inserter + dr_data_out <= (read_data_valid & ~bytestream_end) ? idle_inserter_source_data : 8'h4a; + end + end + endcase + + end + + end + + // Loopback mode + if (ir_in == LOOPBACK) begin + if (virtual_state_cdr) begin + dr_loopback <= 1'b0; // capture 0 + end + if (virtual_state_sdr) begin + // Shift dr_loopback + dr_loopback <= tdi; + end + end + + // Debug mode + if (ir_in == DEBUG) begin + if (virtual_state_cdr) begin + dr_debug <= {clock_sensor_sync, clock_to_sample_div2_sync, reset_to_sample_sync}; + end + if (virtual_state_sdr) begin + // Shift dr_debug + dr_debug <= {1'b0, dr_debug[2:1]}; // tdi is ignored + end + if (virtual_state_udr) begin + clock_sense_reset_n <= 1'b0; + end else begin + clock_sense_reset_n <= 1'b1; + end + end + + // Info mode + if (ir_in == INFO) begin + if (virtual_state_cdr) begin + dr_info <= {PURPOSE[2:0], UPSTREAM_ENCODED_SIZE[3:0], DOWNSTREAM_ENCODED_SIZE[3:0]}; + end + if (virtual_state_sdr) begin + // Shift dr_info + dr_info <= {1'b0, dr_info[10:1]}; // tdi is ignored + end + end + + // Control mode + if (ir_in == CONTROL) begin + if (virtual_state_cdr) begin + dr_control <= 'b0; // capture 0 + end + if (virtual_state_sdr) begin + // Shift dr_control + dr_control <= {tdi, dr_control[8:1]}; + end + if (virtual_state_udr) begin + // Update resetrequest and offset + {resetrequest, offset} <= dr_control; + end + end + + end + + always @ * begin + if (virtual_state_sdr) begin + case (ir_in) + DATA: tdo <= dr_data_out[0]; + LOOPBACK: tdo <= dr_loopback; + DEBUG: tdo <= dr_debug[0]; + INFO: tdo <= dr_info[0]; + CONTROL: tdo <= dr_control[0]; + MGMT: tdo <= dr_mgmt[0]; + default: tdo <= 1'b0; + endcase + end else begin + tdo <= 1'b0; + end + end + + // Idle Remover + altera_avalon_st_idle_remover idle_remover ( + // Interface: clk + .clk (tck), + .reset_n (reset_n), + + // Interface: ST in + .in_ready (), // left disconnected + .in_valid (idle_remover_sink_valid), + .in_data (idle_remover_sink_data), + + // Interface: ST out + .out_ready (1'b1), // downstream is expected to be always ready + .out_valid (idle_remover_source_valid), + .out_data (idle_remover_source_data) + ); + + // Idle Inserter + altera_avalon_st_idle_inserter idle_inserter ( + // Interface: clk + .clk (tck), + .reset_n (reset_n), + + // Interface: ST in + .in_ready (idle_inserter_sink_ready), + .in_valid (idle_inserter_sink_valid), + .in_data (idle_inserter_sink_data), + + // Interface: ST out + .out_ready (idle_inserter_source_ready), + .out_valid (), + .out_data (idle_inserter_source_data) + ); + + generate + if (MGMT_CHANNEL_WIDTH > 0) + begin : has_mgmt + reg [MGMT_CHANNEL_WIDTH+2:0] mgmt_out = 'b0; + reg mgmt_toggle = 1'b0; + wire mgmt_toggle_sync; + reg mgmt_toggle_prev; + always @ (posedge tck) begin + // Debug mode + if (ir_in == MGMT) begin + if (virtual_state_cdr) begin + dr_mgmt <= 'b0; + dr_mgmt[MGMT_CHANNEL_WIDTH+2] <= 1'b1; + end + if (virtual_state_sdr) begin + // Shift dr_debug + dr_mgmt <= {tdi, dr_mgmt[MGMT_CHANNEL_WIDTH+2:1]}; + end + if (virtual_state_udr) begin + mgmt_out <= dr_mgmt; + mgmt_toggle <= mgmt_out[MGMT_CHANNEL_WIDTH+2] ? 1'b0 : ~mgmt_toggle; + end + end + end + + altera_std_synchronizer #(.depth(TCK_TO_SYSCLK_SYNC_DEPTH)) debug_reset_synchronizer ( + .clk(clock_to_sample), + .reset_n(1'b1), + .din(mgmt_out[MGMT_CHANNEL_WIDTH+2]), + .dout(debug_reset)); + + altera_std_synchronizer #(.depth(TCK_TO_SYSCLK_SYNC_DEPTH)) mgmt_toggle_synchronizer ( + .clk(clock_to_sample), + .reset_n(1'b1), + .din(mgmt_toggle), + .dout(mgmt_toggle_sync)); + + always @ (posedge clock_to_sample or posedge debug_reset) begin + if (debug_reset) begin + mgmt_valid <= 1'b0; + mgmt_toggle_prev <= 1'b0; + end else begin + if ((mgmt_toggle_sync ^ mgmt_toggle_prev) && mgmt_out[MGMT_CHANNEL_WIDTH+1]) begin + mgmt_valid <= 1'b1; + mgmt_channel <= mgmt_out[MGMT_CHANNEL_WIDTH:1]; + mgmt_data <= mgmt_out[0]; + end else begin + mgmt_valid <= 1'b0; + end + mgmt_toggle_prev <= mgmt_toggle_sync; + end + end + + end + else + begin : no_mgmt + always @ (posedge tck) begin + dr_mgmt[0] <= 1'b0; + end + assign debug_reset = 1'b0; + always @ (posedge clock_to_sample) begin + mgmt_valid <= 1'b0; + mgmt_data <= 'b0; + mgmt_channel <= 'b0; + end + end + endgenerate + +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_arbitrator.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_arbitrator.sv new file mode 100755 index 0000000..54ee7d9 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_arbitrator.sv @@ -0,0 +1,272 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// (C) 2001-2010 Altera Corporation. All rights reserved. +// Your use of Altera Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License Subscription +// Agreement, Altera MegaCore Function License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/main/ip/merlin/altera_merlin_std_arbitrator/altera_merlin_std_arbitrator_core.sv#3 $ +// $Revision: #3 $ +// $Date: 2010/07/07 $ +// $Author: jyeap $ + +/* ----------------------------------------------------------------------- +Round-robin/fixed arbitration implementation. + +Q: how do you find the least-significant set-bit in an n-bit binary number, X? + +A: M = X & (~X + 1) + +Example: X = 101000100 + 101000100 & + 010111011 + 1 = + + 101000100 & + 010111100 = + ----------- + 000000100 + +The method can be generalized to find the first set-bit +at a bit index no lower than bit-index N, simply by adding +2**N rather than 1. + + +Q: how does this relate to round-robin arbitration? +A: +Let X be the concatenation of all request signals. +Let the number to be added to X (hereafter called the +top_priority) initialize to 1, and be assigned from the +concatenation of the previous saved-grant, left-rotated +by one position, each time arbitration occurs. The +concatenation of grants is then M. + +Problem: consider this case: + +top_priority = 010000 +request = 001001 +~request + top_priority = 000110 +next_grant = 000000 <- no one is granted! + +There was no "set bit at a bit index no lower than bit-index 4", so +the result was 0. + +We need to propagate the carry out from (~request + top_priority) to the LSB, so +that the sum becomes 000111, and next_grant is 000001. This operation could be +called a "circular add". + +A bit of experimentation on the circular add reveals a significant amount of +delay in exiting and re-entering the carry chain - this will vary with device +family. Quartus also reports a combinational loop warning. Finally, +Modelsim 6.3g has trouble with the expression, evaluating it to 'X'. But +Modelsim _doesn't_ report a combinational loop!) + +An alternate solution: concatenate the request vector with itself, and OR +corresponding bits from the top and bottom halves to determine next_grant. + +Example: + +top_priority = 010000 +{request, request} = 001001 001001 +{~request, ~request} + top_priority = 110111 000110 +result of & operation = 000001 000000 +next_grant = 000001 + +Notice that if request = 0, the sum operation will overflow, but we can ignore +this; the next_grant result is 0 (no one granted), as you might expect. +In the implementation, the last-granted value must be maintained as +a non-zero value - best probably simply not to update it when no requests +occur. + +----------------------------------------------------------------------- */ + +`timescale 1 ns / 1 ns + +module altera_merlin_arbitrator +#( + parameter NUM_REQUESTERS = 8, + // -------------------------------------- + // Implemented schemes + // "round-robin" + // "fixed-priority" + // "no-arb" + // -------------------------------------- + parameter SCHEME = "round-robin", + parameter PIPELINE = 0 +) +( + input clk, + input reset, + + // -------------------------------------- + // Requests + // -------------------------------------- + input [NUM_REQUESTERS-1:0] request, + + // -------------------------------------- + // Grants + // -------------------------------------- + output [NUM_REQUESTERS-1:0] grant, + + // -------------------------------------- + // Control Signals + // -------------------------------------- + input increment_top_priority, + input save_top_priority +); + + // -------------------------------------- + // Signals + // -------------------------------------- + wire [NUM_REQUESTERS-1:0] top_priority; + reg [NUM_REQUESTERS-1:0] top_priority_reg; + reg [NUM_REQUESTERS-1:0] last_grant; + wire [2*NUM_REQUESTERS-1:0] result; + + // -------------------------------------- + // Scheme Selection + // -------------------------------------- + generate + if (SCHEME == "round-robin" && NUM_REQUESTERS > 1) begin + assign top_priority = top_priority_reg; + end + else begin + // Fixed arbitration (or single-requester corner case) + assign top_priority = 1'b1; + end + endgenerate + + // -------------------------------------- + // Decision Logic + // -------------------------------------- + altera_merlin_arb_adder + #( + .WIDTH (2 * NUM_REQUESTERS) + ) + adder + ( + .a ({ ~request, ~request }), + .b ({{NUM_REQUESTERS{1'b0}}, top_priority}), + .sum (result) + ); + + + generate if (SCHEME == "no-arb") begin + + // -------------------------------------- + // No arbitration: just wire request directly to grant + // -------------------------------------- + assign grant = request; + + end else begin + // Do the math in double-vector domain + wire [2*NUM_REQUESTERS-1:0] grant_double_vector; + assign grant_double_vector = {request, request} & result; + + // -------------------------------------- + // Extract grant from the top and bottom halves + // of the double vector. + // -------------------------------------- + assign grant = + grant_double_vector[NUM_REQUESTERS - 1 : 0] | + grant_double_vector[2 * NUM_REQUESTERS - 1 : NUM_REQUESTERS]; + + end + endgenerate + + // -------------------------------------- + // Left-rotate the last grant vector to create top_priority. + // -------------------------------------- + always @(posedge clk or posedge reset) begin + if (reset) begin + top_priority_reg <= 1'b1; + end + else begin + if (PIPELINE) begin + if (increment_top_priority) begin + top_priority_reg <= (|request) ? {grant[NUM_REQUESTERS-2:0], + grant[NUM_REQUESTERS-1]} : top_priority_reg; + end + end else begin + if (increment_top_priority) begin + if (|request) + top_priority_reg <= { grant[NUM_REQUESTERS-2:0], + grant[NUM_REQUESTERS-1] }; + else + top_priority_reg <= { top_priority_reg[NUM_REQUESTERS-2:0], top_priority_reg[NUM_REQUESTERS-1] }; + end + else if (save_top_priority) begin + top_priority_reg <= grant; + end + end + end + end + +endmodule + +// ---------------------------------------------- +// Adder for the standard arbitrator +// ---------------------------------------------- +module altera_merlin_arb_adder +#( + parameter WIDTH = 8 +) +( + input [WIDTH-1:0] a, + input [WIDTH-1:0] b, + + output [WIDTH-1:0] sum +); + + wire [WIDTH:0] sum_lint; + // ---------------------------------------------- + // Benchmarks indicate that for small widths, the full + // adder has higher fmax because synthesis can merge + // it with the mux, allowing partial decisions to be + // made early. + // + // The magic number is 4 requesters, which means an + // 8 bit adder. + // ---------------------------------------------- + genvar i; + generate if (WIDTH <= 8) begin : full_adder + + wire cout[WIDTH-1:0]; + + assign sum[0] = (a[0] ^ b[0]); + assign cout[0] = (a[0] & b[0]); + + for (i = 1; i < WIDTH; i = i+1) begin : arb + + assign sum[i] = (a[i] ^ b[i]) ^ cout[i-1]; + assign cout[i] = (a[i] & b[i]) | (cout[i-1] & (a[i] ^ b[i])); + + end + + end else begin : carry_chain + + assign sum_lint = a + b; + assign sum = sum_lint[WIDTH-1:0]; + + end + endgenerate + +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_burst_uncompressor.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_burst_uncompressor.sv new file mode 100755 index 0000000..854dd65 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_burst_uncompressor.sv @@ -0,0 +1,296 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// (C) 2001-2012 Altera Corporation. All rights reserved. +// Your use of Altera Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License Subscription +// Agreement, Altera MegaCore Function License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/20.1std/ip/merlin/altera_merlin_slave_agent/altera_merlin_burst_uncompressor.sv#1 $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ + +// ------------------------------------------ +// Merlin Burst Uncompressor +// +// Compressed read bursts -> uncompressed +// ------------------------------------------ + +`timescale 1 ns / 1 ns + +module altera_merlin_burst_uncompressor +#( + parameter ADDR_W = 16, + parameter BURSTWRAP_W = 3, + parameter BYTE_CNT_W = 4, + parameter PKT_SYMBOLS = 4, + parameter BURST_SIZE_W = 3 +) +( + input clk, + input reset, + + // sink ST signals + input sink_startofpacket, + input sink_endofpacket, + input sink_valid, + output sink_ready, + + // sink ST "data" + input [ADDR_W - 1: 0] sink_addr, + input [BURSTWRAP_W - 1 : 0] sink_burstwrap, + input [BYTE_CNT_W - 1 : 0] sink_byte_cnt, + input sink_is_compressed, + input [BURST_SIZE_W-1 : 0] sink_burstsize, + + // source ST signals + output source_startofpacket, + output source_endofpacket, + output source_valid, + input source_ready, + + // source ST "data" + output [ADDR_W - 1: 0] source_addr, + output [BURSTWRAP_W - 1 : 0] source_burstwrap, + output [BYTE_CNT_W - 1 : 0] source_byte_cnt, + + // Note: in the slave agent, the output should always be uncompressed. In + // other applications, it may be required to leave-compressed or not. How to + // control? Seems like a simple mux - pass-through if no uncompression is + // required. + output source_is_compressed, + output [BURST_SIZE_W-1 : 0] source_burstsize +); + +//---------------------------------------------------- +// AXSIZE decoding +// +// Turns the axsize value into the actual number of bytes +// being transferred. +// --------------------------------------------------- +function reg[63:0] bytes_in_transfer; + input [BURST_SIZE_W-1:0] axsize; + case (axsize) + 4'b0000: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000000001; + 4'b0001: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000000010; + 4'b0010: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000000100; + 4'b0011: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000001000; + 4'b0100: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000010000; + 4'b0101: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000100000; + 4'b0110: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000001000000; + 4'b0111: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000010000000; + 4'b1000: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000100000000; + 4'b1001: bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000001000000000; + default:bytes_in_transfer = 64'b0000000000000000000000000000000000000000000000000000000000000001; + endcase + +endfunction + + // num_symbols is PKT_SYMBOLS, appropriately sized. + wire [31:0] int_num_symbols = PKT_SYMBOLS; + wire [BYTE_CNT_W-1:0] num_symbols = int_num_symbols[BYTE_CNT_W-1:0]; + + // def: Burst Compression. In a merlin network, a compressed burst is one + // which is transmitted in a single beat. Example: read burst. In + // constrast, an uncompressed burst (example: write burst) is transmitted in + // one beat per writedata item. + // + // For compressed bursts which require response packets, burst + // uncompression is required. Concrete example: a read burst of size 8 + // occupies one response-fifo position. When that fifo position reaches the + // front of the FIFO, the slave starts providing the required 8 readdatavalid + // pulses. The 8 return response beats must be provided in a single packet, + // with incrementing address and decrementing byte_cnt fields. Upon receipt + // of the final readdata item of the burst, the response FIFO item is + // retired. + // Burst uncompression logic provides: + // a) 2-state FSM (idle, busy) + // reset to idle state + // transition to busy state for 2nd and subsequent rdv pulses + // - a single-cycle burst (aka non-burst read) causes no transition to + // busy state. + // b) response startofpacket/endofpacket logic. The response FIFO item + // will have sop asserted, and may have eop asserted. (In the case of + // multiple read bursts transmit in the command fabric in a single packet, + // the eop assertion will come in a later FIFO item.) To support packet + // conservation, and emit a well-formed packet on the response fabric, + // i) response fabric startofpacket is asserted only for the first resp. + // beat; + // ii) response fabric endofpacket is asserted only for the last resp. + // beat. + // c) response address field. The response address field contains an + // incrementing sequence, such that each readdata item is associated with + // its slave-map location. N.b. a) computing the address correctly requires + // knowledge of burstwrap behavior b) there may be no clients of the address + // field, which makes this field a good target for optimization. See + // burst_uncompress_address_counter below. + // d) response byte_cnt field. The response byte_cnt field contains a + // decrementing sequence, such that each beat of the response contains the + // count of bytes to follow. In the case of sub-bursts in a single packet, + // the byte_cnt field may decrement down to num_symbols, then back up to + // some value, multiple times in the packet. + + reg burst_uncompress_busy; + reg [BYTE_CNT_W:0] burst_uncompress_byte_counter; + wire [BYTE_CNT_W-1:0] burst_uncompress_byte_counter_lint; + wire first_packet_beat; + wire last_packet_beat; + + assign first_packet_beat = sink_valid & ~burst_uncompress_busy; + assign burst_uncompress_byte_counter_lint = burst_uncompress_byte_counter[BYTE_CNT_W-1:0]; + + // First cycle: burst_uncompress_byte_counter isn't ready yet, mux the input to + // the output. + assign source_byte_cnt = + first_packet_beat ? sink_byte_cnt : burst_uncompress_byte_counter_lint; + assign source_valid = sink_valid; + + // Last packet beat is set throughout receipt of an uncompressed read burst + // from the response FIFO - this forces all the burst uncompression machinery + // idle. + assign last_packet_beat = ~sink_is_compressed | + ( + burst_uncompress_busy ? + (sink_valid & (burst_uncompress_byte_counter_lint == num_symbols)) : + sink_valid & (sink_byte_cnt == num_symbols) + ); + + always @(posedge clk or posedge reset) begin + if (reset) begin + burst_uncompress_busy <= '0; + burst_uncompress_byte_counter <= '0; + end + else begin + if (source_valid & source_ready & sink_valid) begin + // No matter what the current state, last_packet_beat leads to + // idle. + if (last_packet_beat) begin + burst_uncompress_busy <= '0; + burst_uncompress_byte_counter <= '0; + end + else begin + if (burst_uncompress_busy) begin + burst_uncompress_byte_counter <= (burst_uncompress_byte_counter > 0) ? + (burst_uncompress_byte_counter_lint - num_symbols) : + (sink_byte_cnt - num_symbols); + end + else begin // not busy, at least one more beat to go + burst_uncompress_byte_counter <= sink_byte_cnt - num_symbols; + // To do: should busy go true for numsymbols-size compressed + // bursts? + burst_uncompress_busy <= 1'b1; + end + end + end + end + end + + reg [ADDR_W - 1 : 0 ] burst_uncompress_address_base; + reg [ADDR_W - 1 : 0] burst_uncompress_address_offset; + + wire [63:0] decoded_burstsize_wire; + wire [ADDR_W-1:0] decoded_burstsize; + + + localparam ADD_BURSTWRAP_W = (ADDR_W > BURSTWRAP_W) ? ADDR_W : BURSTWRAP_W; + wire [ADD_BURSTWRAP_W-1:0] addr_width_burstwrap; + // The input burstwrap value can be used as a mask against address values, + // but with one caveat: the address width may be (probably is) wider than + // the burstwrap width. The spec says: extend the msb of the burstwrap + // value out over the entire address width (but only if the address width + // actually is wider than the burstwrap width; otherwise it's a 0-width or + // negative range and concatenation multiplier). + generate + if (ADDR_W > BURSTWRAP_W) begin : addr_sign_extend + // Sign-extend, just wires: + assign addr_width_burstwrap[ADDR_W - 1 : BURSTWRAP_W] = + {(ADDR_W - BURSTWRAP_W) {sink_burstwrap[BURSTWRAP_W - 1]}}; + assign addr_width_burstwrap[BURSTWRAP_W-1:0] = sink_burstwrap [BURSTWRAP_W-1:0]; + end + else begin + assign addr_width_burstwrap[BURSTWRAP_W-1 : 0] = sink_burstwrap; + end + endgenerate + + always @(posedge clk or posedge reset) begin + if (reset) begin + burst_uncompress_address_base <= '0; + end + else if (first_packet_beat & source_ready) begin + burst_uncompress_address_base <= sink_addr & ~addr_width_burstwrap[ADDR_W-1:0]; + end + end + + assign decoded_burstsize_wire = bytes_in_transfer(sink_burstsize); //expand it to 64 bits + assign decoded_burstsize = decoded_burstsize_wire[ADDR_W-1:0]; //then take the width that is needed + + wire [ADDR_W : 0] p1_burst_uncompress_address_offset = + ( + (first_packet_beat ? + sink_addr : + burst_uncompress_address_offset) + decoded_burstsize + ) & + addr_width_burstwrap[ADDR_W-1:0]; + wire [ADDR_W-1:0] p1_burst_uncompress_address_offset_lint = p1_burst_uncompress_address_offset [ADDR_W-1:0]; + + always @(posedge clk or posedge reset) begin + if (reset) begin + burst_uncompress_address_offset <= '0; + end + else begin + if (source_ready & source_valid) begin + burst_uncompress_address_offset <= p1_burst_uncompress_address_offset_lint; + // if (first_packet_beat) begin + // burst_uncompress_address_offset <= + // (sink_addr + num_symbols) & addr_width_burstwrap; + // end + // else begin + // burst_uncompress_address_offset <= + // (burst_uncompress_address_offset + num_symbols) & addr_width_burstwrap; + // end + end + end + end + + // On the first packet beat, send the input address out unchanged, + // while values are computed/registered for 2nd and subsequent beats. + assign source_addr = first_packet_beat ? sink_addr : + burst_uncompress_address_base | burst_uncompress_address_offset; + assign source_burstwrap = sink_burstwrap; + assign source_burstsize = sink_burstsize; + + //------------------------------------------------------------------- + // A single (compressed) read burst will have sop/eop in the same beat. + // A sequence of read sub-bursts emitted by a burst adapter in response to a + // single read burst will have sop on the first sub-burst, eop on the last. + // Assert eop only upon (sink_endofpacket & last_packet_beat) to preserve + // packet conservation. + assign source_startofpacket = sink_startofpacket & ~burst_uncompress_busy; + assign source_endofpacket = sink_endofpacket & last_packet_beat; + assign sink_ready = source_valid & source_ready & last_packet_beat; + + // This is correct for the slave agent usage, but won't always be true in the + // width adapter. To do: add an "please uncompress" input, and use it to + // pass-through or modify, and set source_is_compressed accordingly. + assign source_is_compressed = 1'b0; +endmodule + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_master_agent.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_master_agent.sv new file mode 100755 index 0000000..e1409b1 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_master_agent.sv @@ -0,0 +1,303 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/20.1std/ip/merlin/altera_merlin_master_agent/altera_merlin_master_agent.sv#1 $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ + +// -------------------------------------- +// Merlin Master Agent +// +// Converts Avalon-MM transactions into +// Merlin network packets. +// -------------------------------------- + +`timescale 1 ns / 1 ns + +module altera_merlin_master_agent +#( + // ------------------- + // Packet Format Parameters + // ------------------- + parameter + PKT_QOS_H = 109, + PKT_QOS_L = 106, + PKT_DATA_SIDEBAND_H = 105, + PKT_DATA_SIDEBAND_L = 98, + PKT_ADDR_SIDEBAND_H = 97, + PKT_ADDR_SIDEBAND_L = 93, + PKT_CACHE_H = 92, + PKT_CACHE_L = 89, + PKT_THREAD_ID_H = 88, + PKT_THREAD_ID_L = 87, + PKT_BEGIN_BURST = 81, + PKT_PROTECTION_H = 80, + PKT_PROTECTION_L = 80, + PKT_BURSTWRAP_H = 79, + PKT_BURSTWRAP_L = 77, + PKT_BYTE_CNT_H = 76, + PKT_BYTE_CNT_L = 74, + PKT_ADDR_H = 73, + PKT_ADDR_L = 42, + PKT_BURST_SIZE_H = 86, + PKT_BURST_SIZE_L = 84, + PKT_BURST_TYPE_H = 94, + PKT_BURST_TYPE_L = 93, + PKT_TRANS_EXCLUSIVE = 83, + PKT_TRANS_LOCK = 82, + PKT_TRANS_COMPRESSED_READ = 41, + PKT_TRANS_POSTED = 40, + PKT_TRANS_WRITE = 39, + PKT_TRANS_READ = 38, + PKT_DATA_H = 37, + PKT_DATA_L = 6, + PKT_BYTEEN_H = 5, + PKT_BYTEEN_L = 2, + PKT_SRC_ID_H = 1, + PKT_SRC_ID_L = 1, + PKT_DEST_ID_H = 0, + PKT_DEST_ID_L = 0, + PKT_RESPONSE_STATUS_L = 110, + PKT_RESPONSE_STATUS_H = 111, + PKT_ORI_BURST_SIZE_L = 112, + PKT_ORI_BURST_SIZE_H = 114, + ST_DATA_W = 115, + ST_CHANNEL_W = 1, + + // ------------------- + // Agent Parameters + // ------------------- + AV_BURSTCOUNT_W = 3, + ID = 1, + SUPPRESS_0_BYTEEN_RSP = 1, + BURSTWRAP_VALUE = 4, + CACHE_VALUE = 0, + SECURE_ACCESS_BIT = 1, + USE_READRESPONSE = 0, + USE_WRITERESPONSE = 0, + + // ------------------- + // Derived Parameters + // ------------------- + PKT_BURSTWRAP_W = PKT_BURSTWRAP_H - PKT_BURSTWRAP_L + 1, + PKT_BYTE_CNT_W = PKT_BYTE_CNT_H - PKT_BYTE_CNT_L + 1, + PKT_PROTECTION_W = PKT_PROTECTION_H - PKT_PROTECTION_L + 1, + PKT_ADDR_W = PKT_ADDR_H - PKT_ADDR_L + 1, + PKT_DATA_W = PKT_DATA_H - PKT_DATA_L + 1, + PKT_BYTEEN_W = PKT_BYTEEN_H - PKT_BYTEEN_L + 1, + PKT_SRC_ID_W = PKT_SRC_ID_H - PKT_SRC_ID_L + 1, + PKT_DEST_ID_W = PKT_DEST_ID_H - PKT_DEST_ID_L + 1, + PKT_BURST_SIZE_W = PKT_BURST_SIZE_H - PKT_BURST_SIZE_L + 1 +) ( + // ------------------- + // Clock & Reset + // ------------------- + input clk, + input reset, + + // ------------------- + // Avalon-MM Anti-Master + // ------------------- + input [PKT_ADDR_W-1 : 0] av_address, + input av_write, + input av_read, + input [PKT_DATA_W-1 : 0] av_writedata, + output reg [PKT_DATA_W-1 : 0] av_readdata, + output reg av_waitrequest, + output reg av_readdatavalid, + input [PKT_BYTEEN_W-1 : 0] av_byteenable, + input [AV_BURSTCOUNT_W-1 : 0] av_burstcount, + input av_debugaccess, + input av_lock, + output reg [1 : 0] av_response, + output reg av_writeresponsevalid, + + // ------------------- + // Command Source + // ------------------- + output reg cp_valid, + output reg [ST_DATA_W-1 : 0] cp_data, + output wire cp_startofpacket, + output wire cp_endofpacket, + input cp_ready, + + // ------------------- + // Response Sink + // ------------------- + input rp_valid, + input [ST_DATA_W-1 : 0] rp_data, + input [ST_CHANNEL_W-1 : 0] rp_channel, + input rp_startofpacket, + input rp_endofpacket, + output reg rp_ready +); + // ------------------------------------------------------------ + // Utility Functions + // ------------------------------------------------------------ + function integer clogb2; + input [31 : 0] value; + begin + for (clogb2 = 0; value > 0; clogb2 = clogb2 + 1) + value = value >> 1; + clogb2 = clogb2 - 1; + end + endfunction // clogb2 + + localparam MAX_BURST = 1 << (AV_BURSTCOUNT_W - 1); + localparam NUMSYMBOLS = PKT_BYTEEN_W; + localparam BURSTING = (MAX_BURST > NUMSYMBOLS); + localparam BITS_TO_ZERO = clogb2(NUMSYMBOLS); + localparam BURST_SIZE = clogb2(NUMSYMBOLS); + + typedef enum bit [1 : 0] + { + FIXED = 2'b00, + INCR = 2'b01, + WRAP = 2'b10, + OTHER_WRAP = 2'b11 + } MerlinBurstType; + + // -------------------------------------- + // Potential optimization: compare in words to save bits? + // -------------------------------------- + wire is_burst; + assign is_burst = (BURSTING) & (av_burstcount > NUMSYMBOLS); + + wire [31 : 0] burstwrap_value_int = BURSTWRAP_VALUE; + wire [31 : 0] id_int = ID; + wire [PKT_BURST_SIZE_W-1 : 0] burstsize_sig = BURST_SIZE[PKT_BURST_SIZE_W-1 : 0]; + wire [1 : 0] bursttype_value = burstwrap_value_int[PKT_BURSTWRAP_W-1] ? INCR : WRAP; + + // -------------------------------------- + // Address alignment + // + // The packet format requires that addresses be aligned to + // the transaction size. + // -------------------------------------- + wire [PKT_ADDR_W-1 : 0] av_address_aligned; + generate + if (NUMSYMBOLS > 1) begin + assign av_address_aligned = + {av_address[PKT_ADDR_W-1 : BITS_TO_ZERO], {BITS_TO_ZERO {1'b0}}}; + end + else begin + assign av_address_aligned = av_address; + end + endgenerate + + // -------------------------------------- + // Command & Response Construction + // -------------------------------------- + always_comb begin + cp_data = '0; + + cp_data[PKT_PROTECTION_L] = av_debugaccess; + cp_data[PKT_PROTECTION_L+1] = SECURE_ACCESS_BIT[0]; // secure cache bit + cp_data[PKT_PROTECTION_L+2] = 1'b0; // instruction/data cache bit + cp_data[PKT_BURSTWRAP_H : PKT_BURSTWRAP_L] = burstwrap_value_int[PKT_BURSTWRAP_W-1 : 0]; + cp_data[PKT_BYTE_CNT_H : PKT_BYTE_CNT_L] = av_burstcount; + cp_data[PKT_ADDR_H : PKT_ADDR_L] = av_address_aligned; + cp_data[PKT_TRANS_EXCLUSIVE] = 1'b0; + cp_data[PKT_TRANS_LOCK] = av_lock; + cp_data[PKT_TRANS_COMPRESSED_READ] = av_read & is_burst; + cp_data[PKT_TRANS_READ] = av_read; + cp_data[PKT_TRANS_WRITE] = av_write; + cp_data[PKT_TRANS_POSTED] = av_write & !USE_WRITERESPONSE; + cp_data[PKT_DATA_H : PKT_DATA_L] = av_writedata; + cp_data[PKT_BYTEEN_H : PKT_BYTEEN_L] = av_byteenable; + cp_data[PKT_BURST_SIZE_H : PKT_BURST_SIZE_L] = burstsize_sig; + cp_data[PKT_ORI_BURST_SIZE_H : PKT_ORI_BURST_SIZE_L] = burstsize_sig; + cp_data[PKT_BURST_TYPE_H : PKT_BURST_TYPE_L] = bursttype_value; + cp_data[PKT_SRC_ID_H : PKT_SRC_ID_L] = id_int[PKT_SRC_ID_W-1 : 0]; + cp_data[PKT_THREAD_ID_H : PKT_THREAD_ID_L] = '0; + cp_data[PKT_CACHE_H : PKT_CACHE_L] = CACHE_VALUE[3 : 0]; + cp_data[PKT_QOS_H : PKT_QOS_L] = '0; + cp_data[PKT_ADDR_SIDEBAND_H : PKT_ADDR_SIDEBAND_L] = '0; + cp_data[PKT_DATA_SIDEBAND_H : PKT_DATA_SIDEBAND_L] = '0; + + av_readdata = rp_data[PKT_DATA_H : PKT_DATA_L]; + if (USE_WRITERESPONSE || USE_READRESPONSE) + av_response = rp_data[PKT_RESPONSE_STATUS_H : PKT_RESPONSE_STATUS_L]; + else + av_response = '0; + end + + // -------------------------------------- + // Command Control + // -------------------------------------- + reg hold_waitrequest; + + always @ (posedge clk, posedge reset) begin + if (reset) + hold_waitrequest <= 1'b1; + else + hold_waitrequest <= 1'b0; + end + + always_comb begin + cp_valid = 0; + + if ((av_write || av_read) && ~hold_waitrequest) + cp_valid = 1; + end + + generate if (BURSTING) begin + reg sop_enable; + + always @(posedge clk, posedge reset) begin + if (reset) begin + sop_enable <= 1'b1; + end + else begin + if (cp_valid && cp_ready) begin + sop_enable <= 1'b0; + if (cp_endofpacket) + sop_enable <= 1'b1; + end + end + end + + assign cp_startofpacket = sop_enable; + assign cp_endofpacket = (av_read) | (av_burstcount == NUMSYMBOLS); + + end + else begin + + assign cp_startofpacket = 1'b1; + assign cp_endofpacket = 1'b1; + + end + endgenerate + + // -------------------------------------- + // Backpressure & Readdatavalid + // -------------------------------------- + always_comb begin + rp_ready = 1; + av_readdatavalid = 0; + av_writeresponsevalid = 0; + av_waitrequest = hold_waitrequest | !cp_ready; + + if (USE_WRITERESPONSE && (rp_data[PKT_TRANS_WRITE] == 1)) + av_writeresponsevalid = rp_valid; + else + av_readdatavalid = rp_valid; + + if (SUPPRESS_0_BYTEEN_RSP) begin + if (rp_data[PKT_BYTEEN_H : PKT_BYTEEN_L] == 0) + av_readdatavalid = 0; + end + end + +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_master_translator.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_master_translator.sv new file mode 100755 index 0000000..11c25cf --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_master_translator.sv @@ -0,0 +1,556 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/20.1std/ip/merlin/altera_merlin_master_translator/altera_merlin_master_translator.sv#1 $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ + +// -------------------------------------- +// Merlin Master Translator +// +// Converts an Avalon-MM master interface into an +// Avalon-MM "universal" master interface. +// +// The universal interface is defined as the superset of ports +// and parameters that can represent any legal Avalon +// interface. +// -------------------------------------- + +`timescale 1 ns / 1 ns + +module altera_merlin_master_translator #( + parameter + // widths + AV_ADDRESS_W = 32, + AV_DATA_W = 32, + AV_BURSTCOUNT_W = 4, + AV_BYTEENABLE_W = 4, + + UAV_ADDRESS_W = 38, + UAV_BURSTCOUNT_W = 10, + + // optional ports + USE_BURSTCOUNT = 1, + USE_BEGINBURSTTRANSFER = 0, + USE_BEGINTRANSFER = 0, + USE_CHIPSELECT = 0, + USE_READ = 1, + USE_READDATAVALID = 1, + USE_WRITE = 1, + USE_WAITREQUEST = 1, + USE_WRITERESPONSE = 0, + USE_READRESPONSE = 0, + + AV_REGISTERINCOMINGSIGNALS = 0, + AV_SYMBOLS_PER_WORD = 4, + AV_ADDRESS_SYMBOLS = 0, + // must be enabled for a bursting master + AV_CONSTANT_BURST_BEHAVIOR = 1, + UAV_CONSTANT_BURST_BEHAVIOR = 0, + AV_BURSTCOUNT_SYMBOLS = 0, + AV_LINEWRAPBURSTS = 0 +)( + input wire clk, + input wire reset, + + // Universal Avalon Master + output reg uav_write, + output reg uav_read, + output reg [UAV_ADDRESS_W -1 : 0] uav_address, + output reg [UAV_BURSTCOUNT_W -1 : 0] uav_burstcount, + output wire [AV_BYTEENABLE_W -1 : 0] uav_byteenable, + output wire [AV_DATA_W -1 : 0] uav_writedata, + output wire uav_lock, + output wire uav_debugaccess, + output wire uav_clken, + + input wire [AV_DATA_W -1 : 0] uav_readdata, + input wire uav_readdatavalid, + input wire uav_waitrequest, + input wire [1 : 0] uav_response, + input wire uav_writeresponsevalid, + + // Avalon-MM Anti-master (slave) + input reg av_write, + input reg av_read, + input wire [AV_ADDRESS_W -1 : 0] av_address, + input wire [AV_BYTEENABLE_W -1 : 0] av_byteenable, + input wire [AV_BURSTCOUNT_W -1 : 0] av_burstcount, + input wire [AV_DATA_W -1 : 0] av_writedata, + input wire av_begintransfer, + input wire av_beginbursttransfer, + input wire av_lock, + input wire av_chipselect, + input wire av_debugaccess, + input wire av_clken, + + output wire [AV_DATA_W -1 : 0] av_readdata, + output wire av_readdatavalid, + output reg av_waitrequest, + output reg [1 : 0] av_response, + output reg av_writeresponsevalid +); + + localparam BITS_PER_WORD = clog2(AV_SYMBOLS_PER_WORD); + localparam AV_MAX_SYMBOL_BURST = flog2(pow2(AV_BURSTCOUNT_W - 1) * (AV_BURSTCOUNT_SYMBOLS ? 1 : AV_SYMBOLS_PER_WORD)); + localparam AV_MAX_SYMBOL_BURST_MINUS_ONE = AV_MAX_SYMBOL_BURST ? AV_MAX_SYMBOL_BURST - 1 : 0; + localparam UAV_BURSTCOUNT_H_OR_31 = (UAV_BURSTCOUNT_W > 32) ? 31 : UAV_BURSTCOUNT_W - 1; + localparam UAV_ADDRESS_H_OR_31 = (UAV_ADDRESS_W > 32) ? 31 : UAV_ADDRESS_W - 1; + + localparam BITS_PER_WORD_BURSTCOUNT = (UAV_BURSTCOUNT_W == 1) ? 0 : BITS_PER_WORD; + localparam BITS_PER_WORD_ADDRESS = (UAV_ADDRESS_W == 1) ? 0 : BITS_PER_WORD; + + localparam ADDRESS_LOW = AV_ADDRESS_SYMBOLS ? 0 : BITS_PER_WORD_ADDRESS; + localparam BURSTCOUNT_LOW = AV_BURSTCOUNT_SYMBOLS ? 0 : BITS_PER_WORD_BURSTCOUNT; + + localparam ADDRESS_HIGH = (UAV_ADDRESS_W > AV_ADDRESS_W + ADDRESS_LOW) ? AV_ADDRESS_W : (UAV_ADDRESS_W - ADDRESS_LOW); + localparam BURSTCOUNT_HIGH = (UAV_BURSTCOUNT_W > AV_BURSTCOUNT_W + BURSTCOUNT_LOW) ? AV_BURSTCOUNT_W : (UAV_BURSTCOUNT_W - BURSTCOUNT_LOW); + + function integer flog2; + input [31:0] depth; + integer i; + begin + i = depth; + if ( i <= 0 ) flog2 = 0; + else begin + for (flog2 = -1; i > 0; flog2 = flog2 + 1) + i = i >> 1; + end + end + endfunction // flog2 + + // ------------------------------------------------------------ + // Calculates the ceil(log2()) of the input val. + // + // Limited to a positive 32-bit input value. + // ------------------------------------------------------------ + function integer clog2; + input[31:0] val; + reg[31:0] i; + + begin + i = 1; + clog2 = 0; + + while (i < val) begin + clog2 = clog2 + 1; + i = i[30:0] << 1; + end + end + endfunction + + function integer pow2; + input [31:0] toShift; + begin + pow2 = 1; + pow2 = pow2 << toShift; + end + endfunction // pow2 + + // ------------------------------------------------- + // Assign some constants to appropriately-sized signals to + // avoid synthesis warnings. This also helps some simulators + // with their inferred sensitivity lists. + // + // The symbols per word calculation here rounds non-power of two + // symbols to the next highest power of two, which is what we want + // when calculating the decrementing byte count. + // ------------------------------------------------- + wire [31 : 0] symbols_per_word_int = 2**(clog2(AV_SYMBOLS_PER_WORD[UAV_BURSTCOUNT_H_OR_31 : 0])); + wire [UAV_BURSTCOUNT_H_OR_31 : 0] symbols_per_word = symbols_per_word_int[UAV_BURSTCOUNT_H_OR_31 : 0]; + + reg internal_beginbursttransfer; + reg internal_begintransfer; + reg [UAV_ADDRESS_W -1 : 0] uav_address_pre; + reg [UAV_BURSTCOUNT_W -1 : 0] uav_burstcount_pre; + + reg uav_read_pre; + reg uav_write_pre; + reg read_accepted; + + // ------------------------------------------------- + // Pass through signals that we don't touch + // ------------------------------------------------- + assign uav_writedata = av_writedata; + assign uav_byteenable = av_byteenable; + assign uav_lock = av_lock; + assign uav_debugaccess = av_debugaccess; + assign uav_clken = av_clken; + + assign av_readdata = uav_readdata; + assign av_readdatavalid = uav_readdatavalid; + + // ------------------------------------------------- + // Response signals + // ------------------------------------------------- + always_comb begin + if (!USE_READRESPONSE && !USE_WRITERESPONSE) + av_response = '0; + else + av_response = uav_response; + + if (USE_WRITERESPONSE) begin + av_writeresponsevalid = uav_writeresponsevalid; + end else begin + av_writeresponsevalid = '0; + end + end + + // ------------------------------------------------- + // Convert byte and word addresses into byte addresses + // ------------------------------------------------- + always_comb begin + uav_address_pre = {UAV_ADDRESS_W{1'b0}}; + + if (AV_ADDRESS_SYMBOLS) + uav_address_pre[(ADDRESS_HIGH ? ADDRESS_HIGH - 1 : 0) : 0] = av_address[(ADDRESS_HIGH ? ADDRESS_HIGH - 1 : 0) : 0]; + else begin + uav_address_pre[ADDRESS_LOW + ADDRESS_HIGH - 1 : ADDRESS_LOW] = av_address[(ADDRESS_HIGH ? ADDRESS_HIGH - 1 : 0) : 0]; + end + end + + // ------------------------------------------------- + // Convert burstcount into symbol units + // ------------------------------------------------- + always_comb begin + uav_burstcount_pre = symbols_per_word; // default to a single transfer + + if (USE_BURSTCOUNT) begin + uav_burstcount_pre = {UAV_BURSTCOUNT_W{1'b0}}; + if (AV_BURSTCOUNT_SYMBOLS) + uav_burstcount_pre[(BURSTCOUNT_HIGH ? BURSTCOUNT_HIGH - 1 : 0) :0] = av_burstcount[(BURSTCOUNT_HIGH ? BURSTCOUNT_HIGH - 1 : 0) : 0]; + else begin + uav_burstcount_pre[UAV_BURSTCOUNT_W - 1 : BURSTCOUNT_LOW] = av_burstcount[(BURSTCOUNT_HIGH ? BURSTCOUNT_HIGH - 1 : 0) : 0]; + end + end + end + + // ------------------------------------------------- + // This is where we perform the per-transfer address and burstcount + // calculations that are required by downstream modules. + // ------------------------------------------------- + reg [UAV_ADDRESS_W -1 : 0] address_register; + wire [UAV_BURSTCOUNT_W -1 : 0] burstcount_register; + reg [UAV_BURSTCOUNT_W : 0] burstcount_register_lint; + + assign burstcount_register = burstcount_register_lint[UAV_BURSTCOUNT_W -1 : 0]; + + always_comb begin + uav_address = uav_address_pre; + uav_burstcount = uav_burstcount_pre; + + if (AV_CONSTANT_BURST_BEHAVIOR && !UAV_CONSTANT_BURST_BEHAVIOR && ~internal_beginbursttransfer) begin + uav_address = address_register; + uav_burstcount = burstcount_register; + end + end + + reg first_burst_stalled; + reg burst_stalled; + + wire [UAV_ADDRESS_W -1 : 0] combi_burst_addr_reg; + wire [UAV_ADDRESS_W -1 : 0] combi_addr_reg; + + generate + if (AV_LINEWRAPBURSTS && AV_MAX_SYMBOL_BURST != 0) begin + if (AV_MAX_SYMBOL_BURST > UAV_ADDRESS_W - 1) begin + assign combi_burst_addr_reg = { uav_address_pre[UAV_ADDRESS_W-1:0] + AV_SYMBOLS_PER_WORD[UAV_ADDRESS_W-1:0] }; + assign combi_addr_reg = { address_register[UAV_ADDRESS_W-1:0] + AV_SYMBOLS_PER_WORD[UAV_ADDRESS_W-1:0] }; + end + else begin + assign combi_burst_addr_reg = { uav_address_pre[UAV_ADDRESS_W - 1 : AV_MAX_SYMBOL_BURST], uav_address_pre[AV_MAX_SYMBOL_BURST_MINUS_ONE:0] + AV_SYMBOLS_PER_WORD[AV_MAX_SYMBOL_BURST_MINUS_ONE:0] }; + assign combi_addr_reg = { address_register[UAV_ADDRESS_W - 1 : AV_MAX_SYMBOL_BURST], address_register[AV_MAX_SYMBOL_BURST_MINUS_ONE:0] + AV_SYMBOLS_PER_WORD[AV_MAX_SYMBOL_BURST_MINUS_ONE:0] }; + end + end + else begin + assign combi_burst_addr_reg = uav_address_pre + AV_SYMBOLS_PER_WORD[UAV_ADDRESS_H_OR_31:0]; + assign combi_addr_reg = address_register + AV_SYMBOLS_PER_WORD[UAV_ADDRESS_H_OR_31:0]; + end + endgenerate + + always @(posedge clk, posedge reset) begin + if (reset) begin + address_register <= '0; + burstcount_register_lint <= '0; + end else begin + address_register <= address_register; + burstcount_register_lint <= burstcount_register_lint; + + if (internal_beginbursttransfer || first_burst_stalled) begin + if (av_waitrequest) begin + address_register <= uav_address_pre; + burstcount_register_lint[UAV_BURSTCOUNT_W - 1 : 0] <= uav_burstcount_pre; + end else begin + address_register <= combi_burst_addr_reg; + burstcount_register_lint <= uav_burstcount_pre - symbols_per_word; + end + end else if (internal_begintransfer || burst_stalled) begin + if (~av_waitrequest) begin + address_register <= combi_addr_reg; + burstcount_register_lint <= burstcount_register - symbols_per_word; + end + end + end + end + + always @(posedge clk, posedge reset) begin + if (reset) begin + first_burst_stalled <= 1'b0; + burst_stalled <= 1'b0; + end else begin + if (internal_beginbursttransfer || first_burst_stalled) begin + if (av_waitrequest) begin + first_burst_stalled <= 1'b1; + end else begin + first_burst_stalled <= 1'b0; + end + end else if (internal_begintransfer || burst_stalled) begin + if (~av_waitrequest) begin + burst_stalled <= 1'b0; + end else begin + burst_stalled <= 1'b1; + end + end + end + end + + // ------------------------------------------------- + // Waitrequest translation + // ------------------------------------------------- + always @(posedge clk, posedge reset) begin + if (reset) + read_accepted <= 1'b0; + else begin + read_accepted <= read_accepted; + if (read_accepted == 0) + read_accepted <= av_waitrequest ? uav_read_pre & ~uav_waitrequest : 1'b0; + else if (read_accepted == 1 && uav_readdatavalid == 1) // reset acceptance only when rdv arrives + read_accepted <= 1'b0; + end + + end + + reg write_accepted = 0; + generate if (AV_REGISTERINCOMINGSIGNALS) begin + always @(posedge clk, posedge reset) begin + if (reset) + write_accepted <= 1'b0; + else begin + write_accepted <= + ~av_waitrequest ? 1'b0 : + uav_write & ~uav_waitrequest? 1'b1 : + write_accepted; + end + end + end endgenerate + + always_comb begin + av_waitrequest = uav_waitrequest; + + if (USE_READDATAVALID == 0) begin + av_waitrequest = uav_read_pre ? ~uav_readdatavalid : uav_waitrequest; + end + + if (AV_REGISTERINCOMINGSIGNALS) begin + av_waitrequest = + uav_read_pre ? ~uav_readdatavalid : + uav_write_pre ? (internal_begintransfer | uav_waitrequest) & ~write_accepted : + 1'b1; + end + + if (USE_WAITREQUEST == 0) begin + av_waitrequest = 0; + end + end + + // ------------------------------------------------- + // Determine the output read and write signals from + // the read/write/chipselect input signals. + // ------------------------------------------------- + always_comb begin + uav_write = 1'b0; + uav_write_pre = 1'b0; + uav_read = 1'b0; + uav_read_pre = 1'b0; + + if (!USE_CHIPSELECT) begin + if (USE_READ) begin + uav_read_pre = av_read; + end + + if (USE_WRITE) begin + uav_write_pre = av_write; + end + end else begin + if (!USE_WRITE && USE_READ) begin + uav_write_pre = av_chipselect & ~av_read; + uav_read_pre = av_read; + end else if (!USE_READ && USE_WRITE) begin + uav_write_pre = av_write; + uav_read_pre = av_chipselect & ~av_write; + end else if (USE_READ && USE_WRITE) begin + uav_write_pre = av_write; + uav_read_pre = av_read; + end + end + + if (USE_READDATAVALID == 0) + uav_read = uav_read_pre & ~read_accepted; + else + uav_read = uav_read_pre; + + if (AV_REGISTERINCOMINGSIGNALS == 0) + uav_write = uav_write_pre; + else + uav_write = uav_write_pre & ~write_accepted; + end + + // ------------------------------------------------- + // Begintransfer assignment + // ------------------------------------------------- + reg end_begintransfer; + + always_comb begin + if (USE_BEGINTRANSFER) begin + internal_begintransfer = av_begintransfer; + end else begin + internal_begintransfer = ( uav_write | uav_read ) & ~end_begintransfer; + end + end + + always @(posedge clk or posedge reset) begin + if (reset) begin + end_begintransfer <= 1'b0; + end else begin + if (internal_begintransfer == 1 && uav_waitrequest) + end_begintransfer <= 1'b1; + else if (uav_waitrequest) + end_begintransfer <= end_begintransfer; + else + end_begintransfer <= 1'b0; + end + end + + // ------------------------------------------------- + // Beginbursttransfer assignment + // ------------------------------------------------- + reg end_beginbursttransfer; + wire last_burst_transfer_pre; + wire last_burst_transfer_reg; + wire last_burst_transfer; + + // compare values before the mux to shorten critical path; benchmark before changing + assign last_burst_transfer_pre = (uav_burstcount_pre == symbols_per_word); + assign last_burst_transfer_reg = (burstcount_register == symbols_per_word); + assign last_burst_transfer = (internal_beginbursttransfer) ? last_burst_transfer_pre : last_burst_transfer_reg; + + always_comb begin + if (USE_BEGINBURSTTRANSFER) begin + internal_beginbursttransfer = av_beginbursttransfer; + end else begin + internal_beginbursttransfer = uav_read ? internal_begintransfer : internal_begintransfer && ~end_beginbursttransfer; + end + end + + always @(posedge clk or posedge reset) begin + if (reset) begin + end_beginbursttransfer <= 1'b0; + end else begin + end_beginbursttransfer <= end_beginbursttransfer; + if (last_burst_transfer && internal_begintransfer || uav_read) begin + end_beginbursttransfer <= 1'b0; + end + else if (uav_write && internal_begintransfer) begin + end_beginbursttransfer <= 1'b1; + end + end + end + + // synthesis translate_off + + // ------------------------------------------------ + // check_1 : for waitrequest signal violation + // Ensure that when waitreqeust is asserted, the master is not allowed to change its controls + // Exception : begintransfer / beginbursttransfer + // : previously not in any transaction (idle) + // Note : Not checking clken which is not exactly part of Avalon controls/inputs + // : Not using system verilog assertions (seq/prop) since it is not supported if using Modelsim_SE + // ------------------------------------------------ + + reg av_waitrequest_r; + reg av_write_r, av_read_r, av_lock_r, av_chipselect_r, av_debugaccess_r; + reg [AV_ADDRESS_W-1:0] av_address_r; + reg [AV_BYTEENABLE_W-1:0] av_byteenable_r; + reg [AV_BURSTCOUNT_W-1:0] av_burstcount_r; + reg [AV_DATA_W-1:0] av_writedata_r; + + always @(posedge clk or posedge reset) begin + if (reset) begin + av_waitrequest_r <= '0; + av_write_r <= '0; + av_read_r <= '0; + av_lock_r <= '0; + av_chipselect_r <= '0; + av_debugaccess_r <= '0; + av_address_r <= '0; + av_byteenable_r <= '0; + av_burstcount_r <= '0; + av_writedata_r <= '0; + end else begin + av_waitrequest_r <= av_waitrequest; + av_write_r <= av_write; + av_read_r <= av_read; + av_lock_r <= av_lock; + av_chipselect_r <= av_chipselect; + av_debugaccess_r <= av_debugaccess; + av_address_r <= av_address; + av_byteenable_r <= av_byteenable; + av_burstcount_r <= av_burstcount; + av_writedata_r <= av_writedata; + + if ( + av_waitrequest_r && // When waitrequest is asserted + ( + (av_write != av_write_r) || // Checks that : Input controls/data does not change + (av_read != av_read_r) || + (av_lock != av_lock_r) || + (av_debugaccess != av_debugaccess_r) || + (av_address != av_address_r) || + (av_byteenable != av_byteenable_r) || + (av_burstcount != av_burstcount_r) + ) && + (av_write_r | av_read_r) && // Check only when : previously initiated a write/read + (!USE_CHIPSELECT | av_chipselect_r) // and chipselect was asserted (or unused) + ) begin + $display( "%t: %m: Error: Input controls/data changed while av_waitrequest is asserted.", $time()); + $display("av_address %x --> %x", av_address_r , av_address ); + $display("av_byteenable %x --> %x", av_byteenable_r , av_byteenable ); + $display("av_burstcount %x --> %x", av_burstcount_r , av_burstcount ); + $display("av_writedata %x --> %x", av_writedata_r , av_writedata ); + $display("av_write %x --> %x", av_write_r , av_write ); + $display("av_read %x --> %x", av_read_r , av_read ); + $display("av_lock %x --> %x", av_lock_r , av_lock ); + $display("av_chipselect %x --> %x", av_chipselect_r , av_chipselect ); + $display("av_debugaccess %x --> %x", av_debugaccess_r , av_debugaccess ); + end + end + + // end check_1 + + end + + // synthesis translate_on + + +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_reorder_memory.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_reorder_memory.sv new file mode 100755 index 0000000..cdbe316 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_reorder_memory.sv @@ -0,0 +1,297 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/20.1std/ip/merlin/altera_merlin_traffic_limiter/altera_merlin_reorder_memory.sv#1 $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ + +// ------------------------------------------------------------------ +// Merlin Order Memory: this stores responses from slave +// and do reorder. The memory structure is normal memory +// with many segments for different responses that master +// can handle. +// The number of segment is the number of MAX_OUTSTANDING_RESPONSE +// ------------------------------------------------------------------ + +`timescale 1 ns / 1 ns +module altera_merlin_reorder_memory +#( + parameter DATA_W = 32, + ADDR_H_W = 4, // width to represent how many segments + ADDR_L_W = 4, + VALID_W = 4, + NUM_SEGMENT = 4, + DEPTH = 16 + +) + +( + // ------------------- + // Clock + // ------------------- + input clk, + input reset, + // ------------------- + // Signals + // ------------------- + input [DATA_W - 1 : 0] in_data, + input in_valid, + output in_ready, + + output reg [DATA_W - 1 : 0] out_data, + output reg out_valid, + input out_ready, + // -------------------------------------------- + // wr_segment: select write portion of memory + // rd_segment: select read portion of memory + // -------------------------------------------- + input [ADDR_H_W - 1 : 0] wr_segment, + input [ADDR_H_W - 1 : 0] rd_segment + +); + + // ------------------------------------- + // Local parameter + // ------------------------------------- + localparam SEGMENT_W = ADDR_H_W; + + wire [ADDR_H_W + ADDR_L_W - 1 : 0] mem_wr_addr; + reg [ADDR_H_W + ADDR_L_W - 1 : 0] mem_rd_addr; + wire [ADDR_L_W - 1 : 0] mem_wr_ptr; + wire [ADDR_L_W - 1 : 0] mem_rd_ptr; + reg [ADDR_L_W - 1 : 0] mem_next_rd_ptr; + reg [DATA_W - 1 : 0] out_payload; + + wire [NUM_SEGMENT - 1 : 0] pointer_ctrl_in_ready; + wire [NUM_SEGMENT - 1 : 0] pointer_ctrl_in_valid; + wire [NUM_SEGMENT - 1 : 0] pointer_ctrl_out_valid; + wire [NUM_SEGMENT - 1 : 0] pointer_ctrl_out_ready; + wire [ADDR_L_W - 1 : 0] pointer_ctrl_wr_ptr [NUM_SEGMENT]; + wire [ADDR_L_W - 1 : 0] pointer_ctrl_rd_ptr [NUM_SEGMENT]; + wire [ADDR_L_W - 1 : 0] pointer_ctrl_next_rd_ptr [NUM_SEGMENT]; + + // --------------------------------- + // Memory storage + // --------------------------------- + (* ramstyle="no_rw_check" *) reg [DATA_W - 1 : 0] mem [DEPTH - 1 : 0]; + always @(posedge clk) begin + if (in_valid && in_ready) + mem[mem_wr_addr] = in_data; + out_payload = mem[mem_rd_addr]; + end + //assign mem_rd_addr = {rd_segment, mem_next_rd_ptr}; + + always_comb + begin + out_data = out_payload; + out_valid = pointer_ctrl_out_valid[rd_segment]; + end + // --------------------------------- + // Memory addresses + // --------------------------------- + assign mem_wr_ptr = pointer_ctrl_wr_ptr[wr_segment]; + //assign mem_rd_ptr = pointer_ctrl_rd_ptr[rd_segment]; + //assign mem_next_rd_ptr = pointer_ctrl_next_rd_ptr[rd_segment]; + + assign mem_wr_addr = {wr_segment, mem_wr_ptr}; + + // --------------------------------------------------------------------------- + // Bcos want, empty latency, mean assert read the data will appear on out_data. + // And need to jump around different segment of the memory. + // So when seeing endofpacket for this current segment, the read address + // will jump to next segment at first read address, so that the data will be ready + // it is okay to jump to next segment as this is the sequence of all transaction + // and they just increment. (standing at segment 0, then for sure next segment 1) + // ---------------------------------------------------------------------------- + wire endofpacket; + assign endofpacket = out_payload[0]; + wire [ADDR_H_W - 1: 0] next_rd_segment; + assign next_rd_segment = ((rd_segment + 1'b1) == NUM_SEGMENT) ? '0 : rd_segment + 1'b1; + + always_comb + begin + if (out_valid && out_ready && endofpacket) + begin + mem_next_rd_ptr = pointer_ctrl_rd_ptr[next_rd_segment]; + //mem_rd_addr = {rd_segment + 1'b1, mem_next_rd_ptr}; + mem_rd_addr = {next_rd_segment, mem_next_rd_ptr}; + + end + else + begin + mem_next_rd_ptr = pointer_ctrl_next_rd_ptr[rd_segment]; + mem_rd_addr = {rd_segment, mem_next_rd_ptr}; + end + end + + + // --------------------------------- + // Output signals + // --------------------------------- + assign in_ready = pointer_ctrl_in_ready[wr_segment]; + + // --------------------------------- + // Control signals for each segment + // --------------------------------- + genvar j; + generate + for (j = 0; j < NUM_SEGMENT; j = j + 1) + begin : pointer_signal + assign pointer_ctrl_in_valid[j] = (wr_segment == j) && in_valid; + assign pointer_ctrl_out_ready[j] = (rd_segment == j) && out_ready; + + end + endgenerate + + // --------------------------------- + // Seperate write and read pointer + // for each segment in memory + // --------------------------------- + genvar i; + generate + for (i = 0; i < NUM_SEGMENT; i = i + 1) + begin : each_segment_pointer_controller + memory_pointer_controller + #( + .ADDR_W (ADDR_L_W) + ) reorder_memory_pointer_controller + ( + .clk (clk), + .reset (reset), + .in_ready (pointer_ctrl_in_ready[i]), + .in_valid (pointer_ctrl_in_valid[i]), + .out_ready (pointer_ctrl_out_ready[i]), + .out_valid (pointer_ctrl_out_valid[i]), + .wr_pointer (pointer_ctrl_wr_ptr[i]), + .rd_pointer (pointer_ctrl_rd_ptr[i]), + .next_rd_pointer (pointer_ctrl_next_rd_ptr[i]) + ); + end // block: each_segment_pointer_controller + endgenerate +endmodule + + +module memory_pointer_controller +#( + parameter ADDR_W = 4 +) +( + // ------------------- + // Clock + // ------------------- + input clk, + input reset, + // ------------------- + // Signals + // ------------------- + output reg in_ready, + input in_valid, + input out_ready, + output reg out_valid, + // ------------------------------- + // Output write and read pointer + // ------------------------------- + output [ADDR_W - 1 : 0] wr_pointer, + output [ADDR_W - 1 : 0] rd_pointer, + output [ADDR_W - 1 : 0] next_rd_pointer +); + + reg [ADDR_W - 1 : 0] incremented_wr_ptr; + reg [ADDR_W - 1 : 0] incremented_rd_ptr; + reg [ADDR_W - 1 : 0] wr_ptr; + reg [ADDR_W - 1 : 0] rd_ptr; + reg [ADDR_W - 1 : 0] next_wr_ptr; + reg [ADDR_W - 1 : 0] next_rd_ptr; + reg full, empty, next_full, next_empty; + reg read, write, internal_out_ready, internal_out_valid; + + assign incremented_wr_ptr = wr_ptr + 1'b1; + assign incremented_rd_ptr = rd_ptr + 1'b1; + assign next_wr_ptr = write ? incremented_wr_ptr : wr_ptr; + assign next_rd_ptr = read ? incremented_rd_ptr : rd_ptr; + assign wr_pointer = wr_ptr; + assign rd_pointer = rd_ptr; + assign next_rd_pointer = next_rd_ptr; + + // ------------------------------- + // Define write and read signals + // -------------------------------- + // internal read, if it has any valid data + // and output are ready to accepts data then a read will be performed. + // ------------------------------- + //assign read = internal_out_ready && internal_out_valid; + assign read = internal_out_ready && !empty; + assign write = in_ready && in_valid; + + always_ff @(posedge clk or posedge reset) + begin + if (reset) + begin + wr_ptr <= 0; + rd_ptr <= 0; + end + else + begin + wr_ptr <= next_wr_ptr; + rd_ptr <= next_rd_ptr; + end + end + // --------------------------------------------------------------------------- + // Generate full/empty signal for memory + // if read and next read pointer same as write, set empty, write will clear empty + // if write and next write pointer same as read, set full, read will clear full + // ----------------------------------------------------------------------------- + always_comb + begin + next_full = full; + next_empty = empty; + if (read && !write) + begin + next_full = 1'b0; + if (incremented_rd_ptr == wr_ptr) + next_empty = 1'b1; + end + if (write && !read) + begin + next_empty = 1'b0; + if (incremented_wr_ptr == rd_ptr) + next_full = 1'b1; + end + end // always_comb + + always_ff @(posedge clk or posedge reset) + begin + if (reset) + begin + empty <= 1; + full <= 0; + end + else + begin + empty <= next_empty; + full <= next_full; + end + end + + // -------------------- + // Control signals + // -------------------- + always_comb + begin + in_ready = !full; + out_valid = !empty; + internal_out_ready = out_ready; + end // always_comb +endmodule + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_slave_agent.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_slave_agent.sv new file mode 100755 index 0000000..017b3a4 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_slave_agent.sv @@ -0,0 +1,622 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// (C) 2001-2011 Altera Corporation. All rights reserved. +// Your use of Altera Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License Subscription +// Agreement, Altera MegaCore Function License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/20.1std/ip/merlin/altera_merlin_slave_agent/altera_merlin_slave_agent.sv#1 $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ + +`timescale 1 ns / 1 ns + +module altera_merlin_slave_agent +#( + // Packet parameters + parameter PKT_BEGIN_BURST = 81, + parameter PKT_DATA_H = 31, + parameter PKT_DATA_L = 0, + parameter PKT_SYMBOL_W = 8, + parameter PKT_BYTEEN_H = 71, + parameter PKT_BYTEEN_L = 68, + parameter PKT_ADDR_H = 63, + parameter PKT_ADDR_L = 32, + parameter PKT_TRANS_LOCK = 87, + parameter PKT_TRANS_COMPRESSED_READ = 67, + parameter PKT_TRANS_POSTED = 66, + parameter PKT_TRANS_WRITE = 65, + parameter PKT_TRANS_READ = 64, + parameter PKT_SRC_ID_H = 74, + parameter PKT_SRC_ID_L = 72, + parameter PKT_DEST_ID_H = 77, + parameter PKT_DEST_ID_L = 75, + parameter PKT_BURSTWRAP_H = 85, + parameter PKT_BURSTWRAP_L = 82, + parameter PKT_BYTE_CNT_H = 81, + parameter PKT_BYTE_CNT_L = 78, + parameter PKT_PROTECTION_H = 86, + parameter PKT_PROTECTION_L = 86, + parameter PKT_RESPONSE_STATUS_H = 89, + parameter PKT_RESPONSE_STATUS_L = 88, + parameter PKT_BURST_SIZE_H = 92, + parameter PKT_BURST_SIZE_L = 90, + parameter PKT_ORI_BURST_SIZE_L = 93, + parameter PKT_ORI_BURST_SIZE_H = 95, + parameter ST_DATA_W = 96, + parameter ST_CHANNEL_W = 32, + + // Slave parameters + parameter ADDR_W = PKT_ADDR_H - PKT_ADDR_L + 1, + parameter AVS_DATA_W = PKT_DATA_H - PKT_DATA_L + 1, + parameter AVS_BURSTCOUNT_W = 4, + parameter PKT_SYMBOLS = AVS_DATA_W / PKT_SYMBOL_W, + + // Slave agent parameters + parameter PREVENT_FIFO_OVERFLOW = 0, + parameter SUPPRESS_0_BYTEEN_CMD = 1, + parameter USE_READRESPONSE = 0, + parameter USE_WRITERESPONSE = 0, + + // Derived slave parameters + parameter AVS_BE_W = PKT_BYTEEN_H - PKT_BYTEEN_L + 1, + parameter BURST_SIZE_W = 3, + + // Derived FIFO width + parameter FIFO_DATA_W = ST_DATA_W + 1, + + // ECC parameter + parameter ECC_ENABLE = 0 +) ( + input clk, + input reset, + + // Universal-Avalon anti-slave + output [ADDR_W-1:0] m0_address, + output [AVS_BURSTCOUNT_W-1:0] m0_burstcount, + output [AVS_BE_W-1:0] m0_byteenable, + output m0_read, + input [AVS_DATA_W-1:0] m0_readdata, + input m0_waitrequest, + output m0_write, + output [AVS_DATA_W-1:0] m0_writedata, + input m0_readdatavalid, + output m0_debugaccess, + output m0_lock, + input [1:0] m0_response, + input m0_writeresponsevalid, + + // Avalon-ST FIFO interfaces. + // Note: there's no need to include the "data" field here, at least for + // reads, since readdata is filled in from slave info. To keep life + // simple, have a data field, but fill it with 0s. + // Av-st response fifo source interface + output reg [FIFO_DATA_W-1:0] rf_source_data, + output rf_source_valid, + output rf_source_startofpacket, + output rf_source_endofpacket, + input rf_source_ready, + + // Av-st response fifo sink interface + input [FIFO_DATA_W-1:0] rf_sink_data, + input rf_sink_valid, + input rf_sink_startofpacket, + input rf_sink_endofpacket, + output rf_sink_ready, + + // Av-st readdata fifo src interface, data and response + // extra 2 bits for storing RESPONSE STATUS + output [AVS_DATA_W+1:0] rdata_fifo_src_data, + output rdata_fifo_src_valid, + input rdata_fifo_src_ready, + + // Av-st readdata fifo sink interface + input [AVS_DATA_W+1:0] rdata_fifo_sink_data, + input rdata_fifo_sink_valid, + output rdata_fifo_sink_ready, + input rdata_fifo_sink_error, + + // Av-st sink command packet interface + output cp_ready, + input cp_valid, + input [ST_DATA_W-1:0] cp_data, + input [ST_CHANNEL_W-1:0] cp_channel, + input cp_startofpacket, + input cp_endofpacket, + + // Av-st source response packet interface + input rp_ready, + output reg rp_valid, + output reg [ST_DATA_W-1:0] rp_data, + output rp_startofpacket, + output rp_endofpacket +); + + // -------------------------------------------------- + // Ceil(log2()) function log2ceil of 4 = 2 + // -------------------------------------------------- + function integer log2ceil; + input reg[63:0] val; + reg [63:0] i; + + begin + i = 1; + log2ceil = 0; + + while (i < val) begin + log2ceil = log2ceil + 1; + i = i << 1; + end + end + endfunction + + // ------------------------------------------------ + // Local Parameters + // ------------------------------------------------ + localparam DATA_W = PKT_DATA_H - PKT_DATA_L + 1; + localparam BE_W = PKT_BYTEEN_H - PKT_BYTEEN_L + 1; + localparam MID_W = PKT_SRC_ID_H - PKT_SRC_ID_L + 1; + localparam SID_W = PKT_DEST_ID_H - PKT_DEST_ID_L + 1; + localparam BYTE_CNT_W = PKT_BYTE_CNT_H - PKT_BYTE_CNT_L + 1; + localparam BURSTWRAP_W = PKT_BURSTWRAP_H - PKT_BURSTWRAP_L + 1; + localparam BURSTSIZE_W = PKT_BURST_SIZE_H - PKT_BURST_SIZE_L + 1; + localparam BITS_TO_MASK = log2ceil(PKT_SYMBOLS); + localparam MAX_BURST = 1 << (AVS_BURSTCOUNT_W - 1); + localparam BURSTING = (MAX_BURST > PKT_SYMBOLS); + + // ------------------------------------------------ + // Signals + // ------------------------------------------------ + wire [DATA_W-1:0] cmd_data; + wire [BE_W-1:0] cmd_byteen; + wire [ADDR_W-1:0] cmd_addr; + wire [MID_W-1:0] cmd_mid; + wire [SID_W-1:0] cmd_sid; + wire cmd_read; + wire cmd_write; + wire cmd_compressed; + wire cmd_posted; + wire [BYTE_CNT_W-1:0] cmd_byte_cnt; + wire [BURSTWRAP_W-1:0] cmd_burstwrap; + wire [BURSTSIZE_W-1:0] cmd_burstsize; + wire cmd_debugaccess; + + wire suppress_cmd; + wire byteen_asserted; + wire suppress_read; + wire suppress_write; + wire needs_response_synthesis; + wire generate_response; + + // Assign command fields + assign cmd_data = cp_data[PKT_DATA_H :PKT_DATA_L ]; + assign cmd_byteen = cp_data[PKT_BYTEEN_H:PKT_BYTEEN_L]; + assign cmd_addr = cp_data[PKT_ADDR_H :PKT_ADDR_L ]; + assign cmd_compressed = cp_data[PKT_TRANS_COMPRESSED_READ]; + assign cmd_posted = cp_data[PKT_TRANS_POSTED]; + assign cmd_write = cp_data[PKT_TRANS_WRITE]; + assign cmd_read = cp_data[PKT_TRANS_READ]; + assign cmd_mid = cp_data[PKT_SRC_ID_H :PKT_SRC_ID_L]; + assign cmd_sid = cp_data[PKT_DEST_ID_H:PKT_DEST_ID_L]; + assign cmd_byte_cnt = cp_data[PKT_BYTE_CNT_H:PKT_BYTE_CNT_L]; + assign cmd_burstwrap = cp_data[PKT_BURSTWRAP_H:PKT_BURSTWRAP_L]; + assign cmd_burstsize = cp_data[PKT_BURST_SIZE_H:PKT_BURST_SIZE_L]; + assign cmd_debugaccess = cp_data[PKT_PROTECTION_L]; + + // Local "ready_for_command" signal: deasserted when the agent is unable to accept + // another command, e.g. rdv FIFO is full, (local readdata storage is full && + // ~rp_ready), ... + // Say, this could depend on the type of command, for example, even if the + // rdv FIFO is full, a write request can be accepted. For later. + wire ready_for_command; + + wire local_lock = cp_valid & cp_data[PKT_TRANS_LOCK]; + wire local_write = cp_valid & cp_data[PKT_TRANS_WRITE]; + wire local_read = cp_valid & cp_data[PKT_TRANS_READ]; + wire local_compressed_read = cp_valid & cp_data[PKT_TRANS_COMPRESSED_READ]; + wire nonposted_write_endofpacket = ~cp_data[PKT_TRANS_POSTED] & local_write & cp_endofpacket; + + // num_symbols is PKT_SYMBOLS, appropriately sized. + wire [31:0] int_num_symbols = PKT_SYMBOLS; + wire [BYTE_CNT_W-1:0] num_symbols = int_num_symbols[BYTE_CNT_W-1:0]; + + generate + if (PREVENT_FIFO_OVERFLOW) begin : prevent_fifo_overflow_block + // --------------------------------------------------- + // Backpressure if the slave says to, or if FIFO overflow may occur. + // + // All commands are backpressured once the FIFO is full + // even if they don't need storage. This breaks a long + // combinatorial path from the master read/write through + // this logic and back to the master via the backpressure + // path. + // + // To avoid a loss of throughput the FIFO will be parameterized + // one slot deeper. The extra slot should never be used in normal + // operation, but should a slave misbehave and accept one more + // read than it should then backpressure will kick in. + // + // An example: assume a slave with MPRT = 2. It can accept a + // command sequence RRWW without backpressuring. If the FIFO is + // only 2 deep, we'd backpressure the writes leading to loss of + // throughput. If the FIFO is 3 deep, we'll only backpressure when + // RRR... which is an illegal condition anyway. + // --------------------------------------------------- + + assign ready_for_command = rf_source_ready; + assign cp_ready = (~m0_waitrequest | suppress_cmd) && ready_for_command; + + end else begin : no_prevent_fifo_overflow_block + + // Do not suppress the command or the slave will + // not be able to waitrequest + assign ready_for_command = 1'b1; + // Backpressure only if the slave says to. + assign cp_ready = ~m0_waitrequest | suppress_cmd; + + end + endgenerate + + generate if (SUPPRESS_0_BYTEEN_CMD && !BURSTING) begin : suppress_0_byteen_cmd_non_bursting + assign byteen_asserted = |cmd_byteen; + assign suppress_read = ~byteen_asserted; + assign suppress_write = ~byteen_asserted; + assign suppress_cmd = ~byteen_asserted; + end else if (SUPPRESS_0_BYTEEN_CMD && BURSTING) begin: suppress_0_byteen_cmd_bursting + assign byteen_asserted = |cmd_byteen; + assign suppress_read = ~byteen_asserted; + assign suppress_write = 1'b0; + assign suppress_cmd = ~byteen_asserted && cmd_read; + end else begin : no_suppress_0_byteen_cmd + assign suppress_read = 1'b0; + assign suppress_write = 1'b0; + assign suppress_cmd = 1'b0; + end + endgenerate + + // ------------------------------------------------------------------- + // Extract avalon signals from command packet. + // ------------------------------------------------------------------- + // Mask off the lower bits of address. + // The burst adapter before this component will break narrow sized packets + // into sub-bursts of length 1. However, the packet addresses are preserved, + // which means this component may see size-aligned addresses. + // + // Masking ensures that the addresses seen by an Avalon slave are aligned to + // the full data width instead of the size. + // + // Example: + // output from burst adapter (datawidth=4, size=2 bytes): + // subburst1 addr=0, subburst2 addr=2, subburst3 addr=4, subburst4 addr=6 + // expected output from slave agent: + // subburst1 addr=0, subburst2 addr=0, subburst3 addr=4, subburst4 addr=4 + generate + if (BITS_TO_MASK > 0) begin : mask_address + + assign m0_address = { cmd_addr[ADDR_W-1:BITS_TO_MASK], {BITS_TO_MASK{1'b0}} }; + + end else begin : no_mask_address + + assign m0_address = cmd_addr; + + end + endgenerate + + assign m0_byteenable = cmd_byteen; + assign m0_writedata = cmd_data; + + // Note: no Avalon-MM slave in existence accepts uncompressed read bursts - + // this sort of burst exists only in merlin fabric ST packets. What to do + // if we see such a burst? All beats in that burst need to be transmitted + // to the slave so we have enough space-time for byteenable expression. + // + // There can be multiple bursts in a packet, but only one beat per burst + // in cases. The exception is when we've decided not to insert a + // burst adapter for efficiency reasons, in which case this agent is also + // responsible for driving burstcount to 1 on each beat of an uncompressed + // read burst. + + assign m0_read = ready_for_command & !suppress_read & (local_compressed_read | local_read); + + generate + // AVS_BURSTCOUNT_W and BYTE_CNT_W may not be equal. Assign m0_burstcount + // from a sub-range, or 0-pad, as appropriate. + if (AVS_BURSTCOUNT_W > BYTE_CNT_W) begin : m0_burstcount_zero_pad + wire [AVS_BURSTCOUNT_W - BYTE_CNT_W - 1 : 0] zero_pad = {(AVS_BURSTCOUNT_W - BYTE_CNT_W) {1'b0}}; + assign m0_burstcount = (local_read & ~local_compressed_read) ? + {zero_pad, num_symbols} : + {zero_pad, cmd_byte_cnt}; + end + else begin : m0_burstcount_no_pad + assign m0_burstcount = (local_read & ~local_compressed_read) ? + num_symbols[AVS_BURSTCOUNT_W-1:0] : + cmd_byte_cnt[AVS_BURSTCOUNT_W-1:0]; + end + endgenerate + + assign m0_write = ready_for_command & local_write & !suppress_write; + assign m0_lock = ready_for_command & local_lock & (m0_read | m0_write); + assign m0_debugaccess = cmd_debugaccess; + + // ------------------------------------------------------------------- + // Indirection layer for response packet values. Some may always wire + // directly from the slave translator; others will no doubt emerge from + // various FIFOs. + // What to put in resp_data when a write occured? Answer: it does not + // matter, because only response status is needed for non-posted writes, + // and the packet already has a field for that. + // + // We use the rdata_fifo to store write responses as well. This allows us + // to handle backpressure on the response path, and allows write response + // merging. + assign rdata_fifo_src_valid = m0_readdatavalid | m0_writeresponsevalid; + assign rdata_fifo_src_data = {m0_response, m0_readdata}; + + // ------------------------------------------------------------------ + // Generate a token when read commands are suppressed. The token + // is stored in the response FIFO, and will be used to synthesize + // a read response. The same token is used for non-posted write + // response synthesis. + // + // Note: this token is not generated for suppressed uncompressed read cycles; + // the burst uncompression logic at the read side of the response FIFO + // generates the correct number of responses. + // + // When the slave can return the response, let it do its job. Don't + // synthesize a response in that case, unless we've suppressed the + // the last transfer in a write sub-burst. + // ------------------------------------------------------------------ + wire write_end_of_subburst; + assign needs_response_synthesis = ((local_read | local_compressed_read) & suppress_read) || + (!USE_WRITERESPONSE && nonposted_write_endofpacket) || + (USE_WRITERESPONSE && write_end_of_subburst && suppress_write); + + // Avalon-ST interfaces to external response FIFO. + // + // For efficiency, when synthesizing a write response we only store a non-posted write + // transaction at its endofpacket, even if it was split into multiple sub-bursts. + // + // When not synthesizing write responses, we store each sub-burst in the FIFO. + // Each sub-burst to the slave will return a response, which corresponds to one + // entry in the FIFO. We merge all the sub-burst responses on the final + // sub-burst and send it on the response channel. + + wire internal_cp_endofburst; + wire [31:0] minimum_bytecount_wire = PKT_SYMBOLS; // to solve qis warning + wire [AVS_BURSTCOUNT_W-1:0] minimum_bytecount; + + assign minimum_bytecount = minimum_bytecount_wire[AVS_BURSTCOUNT_W-1:0]; + assign internal_cp_endofburst = (cmd_byte_cnt == minimum_bytecount); + assign write_end_of_subburst = local_write & internal_cp_endofburst; + + assign rf_source_valid = (local_read | local_compressed_read | (nonposted_write_endofpacket && !USE_WRITERESPONSE) | (USE_WRITERESPONSE && internal_cp_endofburst && local_write)) + & ready_for_command & cp_ready; + assign rf_source_startofpacket = cp_startofpacket; + assign rf_source_endofpacket = cp_endofpacket; + always @* begin + // default: assign every command packet field to the response FIFO... + rf_source_data = {1'b0, cp_data}; + + // ... and override select fields as needed. + rf_source_data[FIFO_DATA_W-1] = needs_response_synthesis; + rf_source_data[PKT_DATA_H :PKT_DATA_L] = {DATA_W {1'b0}}; + rf_source_data[PKT_BYTEEN_H :PKT_BYTEEN_L] = cmd_byteen; + rf_source_data[PKT_ADDR_H :PKT_ADDR_L] = cmd_addr; + rf_source_data[PKT_TRANS_COMPRESSED_READ] = cmd_compressed; + rf_source_data[PKT_TRANS_POSTED] = cmd_posted; + rf_source_data[PKT_TRANS_WRITE] = cmd_write; + rf_source_data[PKT_TRANS_READ] = cmd_read; + rf_source_data[PKT_SRC_ID_H :PKT_SRC_ID_L] = cmd_mid; + rf_source_data[PKT_DEST_ID_H:PKT_DEST_ID_L] = cmd_sid; + rf_source_data[PKT_BYTE_CNT_H:PKT_BYTE_CNT_L] = cmd_byte_cnt; + rf_source_data[PKT_BURSTWRAP_H:PKT_BURSTWRAP_L] = cmd_burstwrap; + rf_source_data[PKT_BURST_SIZE_H:PKT_BURST_SIZE_L] = cmd_burstsize; + rf_source_data[PKT_PROTECTION_H:PKT_PROTECTION_L] = '0; + rf_source_data[PKT_PROTECTION_L] = cmd_debugaccess; + end + + wire uncompressor_source_valid; + wire [BURSTSIZE_W-1:0] uncompressor_burstsize; + wire last_write_response; + + // last_write_response indicates the last response of the broken-up write burst (sub-bursts). + // At this time, the final merged response is sent, and rp_valid is only asserted + // once for the whole burst. + generate + if (USE_WRITERESPONSE) begin + assign last_write_response = rf_sink_data[PKT_TRANS_WRITE] & rf_sink_endofpacket; + always @* begin + if (rf_sink_data[PKT_TRANS_WRITE] == 1) + rp_valid = (rdata_fifo_sink_valid | generate_response) & last_write_response & !rf_sink_data[PKT_TRANS_POSTED]; + else + rp_valid = rdata_fifo_sink_valid | uncompressor_source_valid; + end + end else begin + assign last_write_response = 1'b0; + always @* begin + rp_valid = rdata_fifo_sink_valid | uncompressor_source_valid; + end + end + endgenerate + + // ------------------------------------------------------------------ + // Response merging + // ------------------------------------------------------------------ + reg [1:0] current_response; + reg [1:0] response_merged; + generate + if (USE_WRITERESPONSE) begin : response_merging_all + reg first_write_response; + reg reset_merged_output; + reg [1:0] previous_response_in; + reg [1:0] previous_response; + + always_ff @(posedge clk, posedge reset) begin + if (reset) begin + first_write_response <= 1'b1; + end + else begin // Merging work for write response, for read: previous_response_in = current_response + if (rf_sink_valid & (rdata_fifo_sink_valid | generate_response) & rf_sink_data[PKT_TRANS_WRITE]) begin + first_write_response <= 1'b0; + if (rf_sink_endofpacket) + first_write_response <= 1'b1; + end + end + end + + always_comb begin + current_response = generate_response ? 2'b00 : rdata_fifo_sink_data[AVS_DATA_W+1:AVS_DATA_W] | {2{rdata_fifo_sink_error}}; + reset_merged_output = first_write_response && (rdata_fifo_sink_valid || generate_response); + previous_response_in = reset_merged_output ? current_response : previous_response; + response_merged = current_response >= previous_response ? current_response: previous_response_in; + end + + always_ff @(posedge clk or posedge reset) begin + if (reset) begin + previous_response <= 2'b00; + end + else begin + if (rf_sink_valid & (rdata_fifo_sink_valid || generate_response)) begin + previous_response <= response_merged; + end + end + end + end else begin : response_merging_read_only + always @* begin + current_response = generate_response ? 2'b00: rdata_fifo_sink_data[AVS_DATA_W+1:AVS_DATA_W] | + {2{rdata_fifo_sink_error}}; + response_merged = current_response; + end + end + endgenerate + + assign generate_response = rf_sink_data[FIFO_DATA_W-1]; + + wire [BYTE_CNT_W-1:0] rf_sink_byte_cnt = rf_sink_data[PKT_BYTE_CNT_H:PKT_BYTE_CNT_L]; + wire rf_sink_compressed = rf_sink_data[PKT_TRANS_COMPRESSED_READ]; + wire [BURSTWRAP_W-1:0] rf_sink_burstwrap = rf_sink_data[PKT_BURSTWRAP_H:PKT_BURSTWRAP_L]; + wire [BURSTSIZE_W-1:0] rf_sink_burstsize = rf_sink_data[PKT_BURST_SIZE_H:PKT_BURST_SIZE_L]; + wire [ADDR_W-1:0] rf_sink_addr = rf_sink_data[PKT_ADDR_H:PKT_ADDR_L]; + // a non posted write response is always completed in 1 cycle. Modify the startofpacket signal to 1'b1 instead of taking whatever is in the rf_fifo + wire rf_sink_startofpacket_wire = rf_sink_data[PKT_TRANS_WRITE] ? 1'b1 : rf_sink_startofpacket; + + wire [BYTE_CNT_W-1:0] burst_byte_cnt; + wire [BURSTWRAP_W-1:0] rp_burstwrap; + wire [ADDR_W-1:0] rp_address; + wire rp_is_compressed; + wire ready_for_response; + + // ------------------------------------------------------------------ + // We're typically ready for a response if the network is ready. There + // is one exception: + // + // If the slave issues write responses, we only issue a merged response on + // the final sub-burst. As a result, we only care about response channel + // availability on the final burst when we send out the merged response. + // ------------------------------------------------------------------ + assign ready_for_response = (USE_WRITERESPONSE) ? + rp_ready || (rf_sink_data[PKT_TRANS_WRITE] && !last_write_response) || rf_sink_data[PKT_TRANS_POSTED]: + rp_ready; + + // ------------------------------------------------------------------ + // Backpressure the readdata fifo if we're supposed to synthesize a response. + // This may be a read response (for suppressed reads) or a write response + // (for non-posted writes). + // ------------------------------------------------------------------ + assign rdata_fifo_sink_ready = rdata_fifo_sink_valid & ready_for_response & ~(rf_sink_valid & generate_response); + + always @* begin + // By default, return all fields... + rp_data = rf_sink_data[ST_DATA_W - 1 : 0]; + + // ... and override specific fields. + rp_data[PKT_DATA_H :PKT_DATA_L] = rdata_fifo_sink_data[AVS_DATA_W-1:0]; + // Assignments directly from the response fifo. + rp_data[PKT_TRANS_POSTED] = rf_sink_data[PKT_TRANS_POSTED]; + rp_data[PKT_TRANS_WRITE] = rf_sink_data[PKT_TRANS_WRITE]; + rp_data[PKT_SRC_ID_H :PKT_SRC_ID_L] = rf_sink_data[PKT_DEST_ID_H : PKT_DEST_ID_L]; + rp_data[PKT_DEST_ID_H:PKT_DEST_ID_L] = rf_sink_data[PKT_SRC_ID_H : PKT_SRC_ID_L]; + rp_data[PKT_BYTEEN_H :PKT_BYTEEN_L] = rf_sink_data[PKT_BYTEEN_H : PKT_BYTEEN_L]; + rp_data[PKT_PROTECTION_H:PKT_PROTECTION_L] = rf_sink_data[PKT_PROTECTION_H:PKT_PROTECTION_L]; + + // Burst uncompressor assignments + rp_data[PKT_ADDR_H :PKT_ADDR_L] = rp_address; + rp_data[PKT_BURSTWRAP_H:PKT_BURSTWRAP_L] = rp_burstwrap; + rp_data[PKT_BYTE_CNT_H:PKT_BYTE_CNT_L] = burst_byte_cnt; + rp_data[PKT_TRANS_READ] = rf_sink_data[PKT_TRANS_READ] | rf_sink_data[PKT_TRANS_COMPRESSED_READ]; + rp_data[PKT_TRANS_COMPRESSED_READ] = rp_is_compressed; + + rp_data[PKT_RESPONSE_STATUS_H:PKT_RESPONSE_STATUS_L] = response_merged; + rp_data[PKT_BURST_SIZE_H:PKT_BURST_SIZE_L] = uncompressor_burstsize; + // bounce the original size back to the master untouched + rp_data[PKT_ORI_BURST_SIZE_H:PKT_ORI_BURST_SIZE_L] = rf_sink_data[PKT_ORI_BURST_SIZE_H:PKT_ORI_BURST_SIZE_L]; + end + + // ------------------------------------------------------------------ + // Note: the burst uncompressor may be asked to generate responses for + // write packets; these are treated the same as single-cycle uncompressed + // reads. + // ------------------------------------------------------------------ + altera_merlin_burst_uncompressor #( + .ADDR_W (ADDR_W), + .BURSTWRAP_W (BURSTWRAP_W), + .BYTE_CNT_W (BYTE_CNT_W), + .PKT_SYMBOLS (PKT_SYMBOLS), + .BURST_SIZE_W (BURSTSIZE_W) + ) uncompressor ( + .clk (clk), + .reset (reset), + .sink_startofpacket (rf_sink_startofpacket_wire), + .sink_endofpacket (rf_sink_endofpacket), + .sink_valid (rf_sink_valid & (rdata_fifo_sink_valid | generate_response)), + .sink_ready (rf_sink_ready), + .sink_addr (rf_sink_addr), + .sink_burstwrap (rf_sink_burstwrap), + .sink_byte_cnt (rf_sink_byte_cnt), + .sink_is_compressed (rf_sink_compressed), + .sink_burstsize (rf_sink_burstsize), + + .source_startofpacket (rp_startofpacket), + .source_endofpacket (rp_endofpacket), + .source_valid (uncompressor_source_valid), + .source_ready (ready_for_response), + .source_addr (rp_address), + .source_burstwrap (rp_burstwrap), + .source_byte_cnt (burst_byte_cnt), + .source_is_compressed (rp_is_compressed), + .source_burstsize (uncompressor_burstsize) + ); + + //-------------------------------------- + // Assertion: In case slave support response. The slave needs return response in order + // Ex: non-posted write followed by a read: write response must complete before read data + //-------------------------------------- + // synthesis translate_off + ERROR_write_response_and_read_response_cannot_happen_same_time: + assert property ( @(posedge clk) + disable iff (reset) !(m0_writeresponsevalid && m0_readdatavalid) + ); + + // synthesis translate_on +endmodule + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_slave_translator.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_slave_translator.sv new file mode 100755 index 0000000..d0ea2b9 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_slave_translator.sv @@ -0,0 +1,482 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + + +// $Id: //acds/rel/20.1std/ip/merlin/altera_merlin_slave_translator/altera_merlin_slave_translator.sv#1 $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ + +// ------------------------------------- +// Merlin Slave Translator +// +// Translates Universal Avalon MM Slave +// to any Avalon MM Slave +// ------------------------------------- +// +//Notable Note: 0 AV_READLATENCY is not allowed and will be converted to a 1 cycle readlatency in all cases but one +//If you declare a slave with fixed read timing requirements, the readlatency of such a slave will be allowed to be zero +//The key feature here is that no same cycle turnaround data is processed through the fabric. + +//import avalon_utilities_pkg::*; + +`timescale 1 ns / 1 ns + +module altera_merlin_slave_translator #( + parameter + //Widths + AV_ADDRESS_W = 32, + AV_DATA_W = 32, + AV_BURSTCOUNT_W = 4, + AV_BYTEENABLE_W = 4, + UAV_BYTEENABLE_W = 4, + + //Read Latency + AV_READLATENCY = 1, + + //Timing + AV_READ_WAIT_CYCLES = 0, + AV_WRITE_WAIT_CYCLES = 0, + AV_SETUP_WAIT_CYCLES = 0, + AV_DATA_HOLD_CYCLES = 0, + + //Optional Port Declarations + USE_READDATAVALID = 1, + USE_WAITREQUEST = 1, + USE_READRESPONSE = 0, + USE_WRITERESPONSE = 0, + + //Variable Addressing + AV_SYMBOLS_PER_WORD = 4, + AV_ADDRESS_SYMBOLS = 0, + AV_BURSTCOUNT_SYMBOLS = 0, + BITS_PER_WORD = clog2_plusone(AV_SYMBOLS_PER_WORD - 1), + UAV_ADDRESS_W = 38, + UAV_BURSTCOUNT_W = 10, + UAV_DATA_W = 32, + + AV_CONSTANT_BURST_BEHAVIOR = 0, + UAV_CONSTANT_BURST_BEHAVIOR = 0, + CHIPSELECT_THROUGH_READLATENCY = 0, + + // Tightly-Coupled Options + USE_UAV_CLKEN = 0, + AV_REQUIRE_UNALIGNED_ADDRESSES = 0 +) ( + + // ------------------- + // Clock & Reset + // ------------------- + input wire clk, + input wire reset, + + // ------------------- + // Universal Avalon Slave + // ------------------- + + input wire [UAV_ADDRESS_W - 1 : 0] uav_address, + input wire [UAV_DATA_W - 1 : 0] uav_writedata, + input wire uav_write, + input wire uav_read, + input wire [UAV_BURSTCOUNT_W - 1 : 0] uav_burstcount, + input wire [UAV_BYTEENABLE_W - 1 : 0] uav_byteenable, + input wire uav_lock, + input wire uav_debugaccess, + input wire uav_clken, + + output logic uav_readdatavalid, + output logic uav_waitrequest, + output logic [UAV_DATA_W - 1 : 0] uav_readdata, + output logic [1:0] uav_response, + // input wire uav_writeresponserequest, + output logic uav_writeresponsevalid, + + // ------------------- + // Customizable Avalon Master + // ------------------- + output logic [AV_ADDRESS_W - 1 : 0] av_address, + output logic [AV_DATA_W - 1 : 0] av_writedata, + output logic av_write, + output logic av_read, + output logic [AV_BURSTCOUNT_W - 1 : 0] av_burstcount, + output logic [AV_BYTEENABLE_W - 1 : 0] av_byteenable, + output logic [AV_BYTEENABLE_W - 1 : 0] av_writebyteenable, + output logic av_begintransfer, + output wire av_chipselect, + output logic av_beginbursttransfer, + output logic av_lock, + output wire av_clken, + output wire av_debugaccess, + output wire av_outputenable, + + input logic [AV_DATA_W - 1 : 0] av_readdata, + input logic av_readdatavalid, + input logic av_waitrequest, + + input logic [1:0] av_response, + // output logic av_writeresponserequest, + input wire av_writeresponsevalid + +); + + function integer clog2_plusone; + input [31:0] Depth; + integer i; + begin + i = Depth; + for(clog2_plusone = 0; i > 0; clog2_plusone = clog2_plusone + 1) + i = i >> 1; + end + endfunction + + function integer max; + //returns the larger of two passed arguments + input [31:0] one; + input [31:0] two; + if(one > two) + max=one; + else + max=two; + endfunction // int + + localparam AV_READ_WAIT_INDEXED = (AV_SETUP_WAIT_CYCLES + AV_READ_WAIT_CYCLES); + localparam AV_WRITE_WAIT_INDEXED = (AV_SETUP_WAIT_CYCLES + AV_WRITE_WAIT_CYCLES); + localparam AV_DATA_HOLD_INDEXED = (AV_WRITE_WAIT_INDEXED + AV_DATA_HOLD_CYCLES); + localparam LOG2_OF_LATENCY_SUM = max(clog2_plusone(AV_READ_WAIT_INDEXED + 1),clog2_plusone(AV_DATA_HOLD_INDEXED + 1)); + localparam BURSTCOUNT_SHIFT_SELECTOR = AV_BURSTCOUNT_SYMBOLS ? 0 : BITS_PER_WORD; + localparam ADDRESS_SHIFT_SELECTOR = AV_ADDRESS_SYMBOLS ? 0 : BITS_PER_WORD; + localparam ADDRESS_HIGH = ( UAV_ADDRESS_W > AV_ADDRESS_W + ADDRESS_SHIFT_SELECTOR ) ? + AV_ADDRESS_W : + UAV_ADDRESS_W - ADDRESS_SHIFT_SELECTOR; + localparam BURSTCOUNT_HIGH = ( UAV_BURSTCOUNT_W > AV_BURSTCOUNT_W + BURSTCOUNT_SHIFT_SELECTOR ) ? + AV_BURSTCOUNT_W : + UAV_BURSTCOUNT_W - BURSTCOUNT_SHIFT_SELECTOR; + localparam BYTEENABLE_ADDRESS_BITS = ( clog2_plusone(UAV_BYTEENABLE_W) - 1 ) >= 1 ? clog2_plusone(UAV_BYTEENABLE_W) - 1 : 1; + + + // Calculate the symbols per word as the power of 2 extended symbols per word + wire [31 : 0] symbols_per_word_int = 2**(clog2_plusone(AV_SYMBOLS_PER_WORD[UAV_BURSTCOUNT_W : 0] - 1)); + wire [UAV_BURSTCOUNT_W-1 : 0] symbols_per_word = symbols_per_word_int[UAV_BURSTCOUNT_W-1 : 0]; + + // +-------------------------------- + // |Backwards Compatibility Signals + // +-------------------------------- + assign av_clken = (USE_UAV_CLKEN) ? uav_clken : 1'b1; + assign av_debugaccess = uav_debugaccess; + + // +------------------- + // |Passthru Signals + // +------------------- + + reg [1 : 0] av_response_delayed; + + always @(posedge clk, posedge reset) begin + if (reset) begin + av_response_delayed <= 2'b0; + end else begin + av_response_delayed <= av_response; + end + end + + always_comb + begin + if (!USE_READRESPONSE && !USE_WRITERESPONSE) begin + uav_response = '0; + end else begin + if (AV_READLATENCY != 0 || USE_READDATAVALID) begin + uav_response = av_response; + end else begin + uav_response = av_response_delayed; + end + end + end + // assign av_writeresponserequest = uav_writeresponserequest; + assign uav_writeresponsevalid = av_writeresponsevalid; + + //------------------------- + //Writedata and Byteenable + //------------------------- + + always@* begin + av_byteenable = '0; + av_byteenable = uav_byteenable[AV_BYTEENABLE_W - 1 : 0]; + end + + always@* begin + av_writedata = '0; + av_writedata = uav_writedata[AV_DATA_W - 1 : 0]; + end + + // +------------------- + // |Calculated Signals + // +------------------- + + logic [UAV_ADDRESS_W - 1 : 0 ] real_uav_address; + + function [BYTEENABLE_ADDRESS_BITS - 1 : 0 ] decode_byteenable; + input [UAV_BYTEENABLE_W - 1 : 0 ] byteenable; + + for(int i = 0 ; i < UAV_BYTEENABLE_W; i++ ) begin + if(byteenable[i] == 1) begin + return i; + end + end + + return '0; + + endfunction + + reg [AV_BURSTCOUNT_W - 1 : 0] burstcount_reg; + reg [AV_ADDRESS_W - 1 : 0] address_reg; + always@(posedge clk, posedge reset) begin + if(reset) begin + burstcount_reg <= '0; + address_reg <= '0; + end else begin + burstcount_reg <= burstcount_reg; + address_reg <= address_reg; + if(av_beginbursttransfer) begin + burstcount_reg <= uav_burstcount [ BURSTCOUNT_HIGH - 1 + BURSTCOUNT_SHIFT_SELECTOR : BURSTCOUNT_SHIFT_SELECTOR ]; + address_reg <= real_uav_address [ ADDRESS_HIGH - 1 + ADDRESS_SHIFT_SELECTOR : ADDRESS_SHIFT_SELECTOR ]; + end + end + end + + logic [BYTEENABLE_ADDRESS_BITS-1:0] temp_wire; + + always@* begin + if( AV_REQUIRE_UNALIGNED_ADDRESSES == 1) begin + temp_wire = decode_byteenable(uav_byteenable); + real_uav_address = { uav_address[UAV_ADDRESS_W - 1 : BYTEENABLE_ADDRESS_BITS ], temp_wire[BYTEENABLE_ADDRESS_BITS - 1 : 0 ] }; + end else begin + real_uav_address = uav_address; + end + + av_address = real_uav_address[ADDRESS_HIGH - 1 + ADDRESS_SHIFT_SELECTOR : ADDRESS_SHIFT_SELECTOR ]; + if( AV_CONSTANT_BURST_BEHAVIOR && !UAV_CONSTANT_BURST_BEHAVIOR && ~av_beginbursttransfer ) + av_address = address_reg; + end + + always@* begin + av_burstcount=uav_burstcount[BURSTCOUNT_HIGH - 1 + BURSTCOUNT_SHIFT_SELECTOR : BURSTCOUNT_SHIFT_SELECTOR ]; + if( AV_CONSTANT_BURST_BEHAVIOR && !UAV_CONSTANT_BURST_BEHAVIOR && ~av_beginbursttransfer ) + av_burstcount = burstcount_reg; + end + + always@* begin + av_lock = uav_lock; + end + + // ------------------- + // Writebyteenable Assignment + // ------------------- + always@* begin + av_writebyteenable = { (AV_BYTEENABLE_W){uav_write} } & uav_byteenable[AV_BYTEENABLE_W - 1 : 0]; + end + + // ------------------- + // Waitrequest Assignment + // ------------------- + + reg av_waitrequest_generated; + reg av_waitrequest_generated_read; + reg av_waitrequest_generated_write; + reg waitrequest_reset_override; + reg [ ( LOG2_OF_LATENCY_SUM ? LOG2_OF_LATENCY_SUM - 1 : 0 ) : 0 ] wait_latency_counter; + + always@(posedge reset, posedge clk) begin + if(reset) begin + wait_latency_counter <= '0; + waitrequest_reset_override <= 1'h1; + end else begin + waitrequest_reset_override <= 1'h0; + wait_latency_counter <= '0; + if( ~uav_waitrequest | waitrequest_reset_override ) + wait_latency_counter <= '0; + else if( uav_read | uav_write ) + wait_latency_counter <= wait_latency_counter + 1'h1; + end + end + + + always @* begin + + av_read = uav_read; + av_write = uav_write; + av_waitrequest_generated = 1'h1; + av_waitrequest_generated_read = 1'h1; + av_waitrequest_generated_write = 1'h1; + + if(LOG2_OF_LATENCY_SUM == 1) + av_waitrequest_generated = 0; + + if(LOG2_OF_LATENCY_SUM > 1 && !USE_WAITREQUEST) begin + av_read = wait_latency_counter >= AV_SETUP_WAIT_CYCLES && uav_read; + av_write = wait_latency_counter >= AV_SETUP_WAIT_CYCLES && uav_write && wait_latency_counter <= AV_WRITE_WAIT_INDEXED; + av_waitrequest_generated_read = wait_latency_counter != AV_READ_WAIT_INDEXED; + av_waitrequest_generated_write = wait_latency_counter != AV_DATA_HOLD_INDEXED; + + if(uav_write) + av_waitrequest_generated = av_waitrequest_generated_write; + else + av_waitrequest_generated = av_waitrequest_generated_read; + + end + + if(USE_WAITREQUEST) begin + uav_waitrequest = av_waitrequest; + end else begin + uav_waitrequest = av_waitrequest_generated | waitrequest_reset_override; + end + + end + + // -------------- + // Readdata Assignment + // -------------- + + reg[(AV_DATA_W ? AV_DATA_W -1 : 0 ): 0] av_readdata_pre; + + always@(posedge clk, posedge reset) begin + if(reset) + av_readdata_pre <= 'b0; + else + av_readdata_pre <= av_readdata; + end + + always@* begin + uav_readdata = {UAV_DATA_W{1'b0}}; + if( AV_READLATENCY != 0 || USE_READDATAVALID ) begin + uav_readdata[AV_DATA_W-1:0] = av_readdata; + end else begin + uav_readdata[AV_DATA_W-1:0] = av_readdata_pre; + end + end + + // ------------------- + // Readdatavalid Assigment + // ------------------- + reg[(AV_READLATENCY>0 ? AV_READLATENCY-1:0) :0] read_latency_shift_reg; + reg top_read_latency_shift_reg; + + always@* begin + uav_readdatavalid=top_read_latency_shift_reg; + if(USE_READDATAVALID) begin + uav_readdatavalid = av_readdatavalid; + end + end + + always@* begin + top_read_latency_shift_reg = uav_read & ~uav_waitrequest & ~waitrequest_reset_override; + if(AV_READLATENCY == 1 || AV_READLATENCY == 0 ) begin + top_read_latency_shift_reg=read_latency_shift_reg; + end + if (AV_READLATENCY > 1) begin + top_read_latency_shift_reg = read_latency_shift_reg[(AV_READLATENCY ? AV_READLATENCY-1 : 0)]; + end + end + + always@(posedge reset, posedge clk) begin + if (reset) begin + read_latency_shift_reg <= '0; + end else if (av_clken) begin + read_latency_shift_reg[0] <= uav_read && ~uav_waitrequest & ~waitrequest_reset_override; + for (int i=0; i+1 < AV_READLATENCY ; i+=1 ) begin + read_latency_shift_reg[i+1] <= read_latency_shift_reg[i]; + end + end + end + + // ------------ + // Chipselect and OutputEnable + // ------------ + reg av_chipselect_pre; + wire cs_extension; + reg av_outputenable_pre; + + assign av_chipselect = (uav_read | uav_write) ? 1'b1 : av_chipselect_pre; + assign cs_extension = ( (^ read_latency_shift_reg) & ~top_read_latency_shift_reg ) | ((| read_latency_shift_reg) & ~(^ read_latency_shift_reg)); + assign av_outputenable = uav_read ? 1'b1 : av_outputenable_pre; + + always@(posedge reset, posedge clk) begin + if(reset) + av_outputenable_pre <= 1'b0; + else if( AV_READLATENCY == 0 && AV_READ_WAIT_INDEXED != 0 ) + av_outputenable_pre <= 0; + else + av_outputenable_pre <= cs_extension | uav_read; + end + + always@(posedge reset, posedge clk) begin + if(reset) begin + av_chipselect_pre <= 1'b0; + end else begin + av_chipselect_pre <= 1'b0; + if(AV_READLATENCY != 0 && CHIPSELECT_THROUGH_READLATENCY == 1) begin + //The AV_READLATENCY term is only here to prevent chipselect from remaining asserted while read and write fall. + //There is no functional impact as 0 cycle transactions are treated as 1 cycle on the other side of the translator. + if(uav_read) begin + av_chipselect_pre <= 1'b1; + end else if(cs_extension == 1) begin + av_chipselect_pre <= 1'b1; + end + end + end + end + + // ------------------- + // Begintransfer Assigment + // ------------------- + reg end_begintransfer; + + always@* begin + av_begintransfer = ( uav_write | uav_read ) & ~end_begintransfer; + end + + always@ ( posedge clk or posedge reset ) begin + if(reset) begin + end_begintransfer <= 1'b0; + end else begin + if(av_begintransfer == 1 && uav_waitrequest && ~waitrequest_reset_override) + end_begintransfer <= 1'b1; + else if(uav_waitrequest) + end_begintransfer <= end_begintransfer; + else + end_begintransfer <= 1'b0; + end + end + + // ------------------- + // Beginbursttransfer Assigment + // ------------------- + reg end_beginbursttransfer; + reg in_transfer; + + always@* begin + av_beginbursttransfer = uav_read ? av_begintransfer : (av_begintransfer && ~end_beginbursttransfer && ~in_transfer); + end + + always@ ( posedge clk or posedge reset ) begin + if(reset) begin + end_beginbursttransfer <= 1'b0; + in_transfer <= 1'b0; + end else begin + end_beginbursttransfer <= uav_write & ( uav_burstcount != symbols_per_word ); + if(uav_write && uav_burstcount == symbols_per_word) + in_transfer <=1'b0; + else if(uav_write) + in_transfer <=1'b1; + end + end + +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_traffic_limiter.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_traffic_limiter.sv new file mode 100755 index 0000000..3dc7e23 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_merlin_traffic_limiter.sv @@ -0,0 +1,787 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/20.1std/ip/merlin/altera_merlin_traffic_limiter/altera_merlin_traffic_limiter.sv#1 $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ + +// ----------------------------------------------------- +// Merlin Traffic Limiter +// +// Ensures that non-posted transaction responses are returned +// in order of request. Out-of-order responses can happen +// when a master does a non-posted transaction on a slave +// while responses are pending from a different slave. +// +// Examples: +// 1) read to any latent slave, followed by a read to a +// variable-latent slave +// 2) read to any fixed-latency slave, followed by a read +// to another fixed-latency slave whose fixed latency is smaller. +// 3) non-posted write to any latent slave, followed by a non-posted +// write or read to any variable-latent slave. +// +// This component has two implementation modes that ensure +// response order, controlled by the REORDER parameter. +// +// 0) Backpressure to prevent a master from switching slaves +// until all outstanding responses have returned. We also +// have to suppress the non-posted transaction, obviously. +// +// 1) Reorder the responses as they return using a memory +// block. +// ----------------------------------------------------- + +`timescale 1 ns / 1 ns + +// altera message_off 10036 +module altera_merlin_traffic_limiter +#( + parameter + PKT_TRANS_POSTED = 1, + PKT_DEST_ID_H = 0, + PKT_DEST_ID_L = 0, + PKT_SRC_ID_H = 0, + PKT_SRC_ID_L = 0, + PKT_BYTE_CNT_H = 0, + PKT_BYTE_CNT_L = 0, + PKT_BYTEEN_H = 0, + PKT_BYTEEN_L = 0, + PKT_TRANS_WRITE = 0, + PKT_TRANS_READ = 0, + ST_DATA_W = 72, + ST_CHANNEL_W = 32, + + MAX_OUTSTANDING_RESPONSES = 1, + PIPELINED = 0, + ENFORCE_ORDER = 1, + + // ------------------------------------- + // internal: allows optimization between this + // component and the demux + // ------------------------------------- + VALID_WIDTH = 1, + + // ------------------------------------- + // Prevents all RAW and WAR hazards by waiting for + // responses to return before issuing a command + // with different direction. + // + // This is intended for Avalon masters which are + // connected to AXI slaves, because of the differing + // ordering models for the protocols. + // + // If PREVENT_HAZARDS is 1, then the current implementation + // needs to know whether incoming writes will be posted or + // not at compile-time. Only one of SUPPORTS_POSTED_WRITES + // and SUPPORTS_NONPOSTED_WRITES can be 1. + // + // When PREVENT_HAZARDS is 0 there is no such restriction. + // + // It is possible to be less restrictive for memories. + // ------------------------------------- + PREVENT_HAZARDS = 0, + + // ------------------------------------- + // Used only when hazard prevention is on, but may be used + // for optimization work in the future. + // ------------------------------------- + SUPPORTS_POSTED_WRITES = 1, + SUPPORTS_NONPOSTED_WRITES = 0, + + // ------------------------------------------------- + // Enables the reorder buffer which allows a master to + // switch slaves while responses are pending. + // Reponses will be reordered following command issue order. + // ------------------------------------------------- + REORDER = 0 +) +( + // ------------------- + // Clock & Reset + // ------------------- + input clk, + input reset, + + // ------------------- + // Command + // ------------------- + input cmd_sink_valid, + input [ST_DATA_W-1 : 0] cmd_sink_data, + input [ST_CHANNEL_W-1 : 0] cmd_sink_channel, + input cmd_sink_startofpacket, + input cmd_sink_endofpacket, + output cmd_sink_ready, + + output reg [VALID_WIDTH-1 : 0] cmd_src_valid, + output reg [ST_DATA_W-1 : 0] cmd_src_data, + output reg [ST_CHANNEL_W-1 : 0] cmd_src_channel, + output reg cmd_src_startofpacket, + output reg cmd_src_endofpacket, + input cmd_src_ready, + + // ------------------- + // Response + // ------------------- + input rsp_sink_valid, + input [ST_DATA_W-1 : 0] rsp_sink_data, + input [ST_CHANNEL_W-1 : 0] rsp_sink_channel, + input rsp_sink_startofpacket, + input rsp_sink_endofpacket, + output reg rsp_sink_ready, + + output reg rsp_src_valid, + output reg [ST_DATA_W-1 : 0] rsp_src_data, + output reg [ST_CHANNEL_W-1 : 0] rsp_src_channel, + output reg rsp_src_startofpacket, + output reg rsp_src_endofpacket, + input rsp_src_ready +); + + // ------------------------------------- + // Local Parameters + // ------------------------------------- + localparam DEST_ID_W = PKT_DEST_ID_H - PKT_DEST_ID_L + 1; + localparam COUNTER_W = log2ceil(MAX_OUTSTANDING_RESPONSES + 1); + localparam PAYLOAD_W = ST_DATA_W + ST_CHANNEL_W + 4; + localparam NUMSYMBOLS = PKT_BYTEEN_H - PKT_BYTEEN_L + 1; + localparam MAX_DEST_ID = 1 << (DEST_ID_W); + localparam PKT_BYTE_CNT_W = PKT_BYTE_CNT_H - PKT_BYTE_CNT_L + 1; + + // ------------------------------------------------------- + // Memory Parameters + // ------------------------------------------------------ + localparam MAX_BYTE_CNT = 1 << (PKT_BYTE_CNT_W); + localparam MAX_BURST_LENGTH = log2ceil(MAX_BYTE_CNT/NUMSYMBOLS); + + // Memory stores packet width, including sop and eop + localparam MEM_W = ST_DATA_W + ST_CHANNEL_W + 1 + 1; + localparam MEM_DEPTH = MAX_OUTSTANDING_RESPONSES * (MAX_BYTE_CNT/NUMSYMBOLS); + + // ----------------------------------------------------- + // Input Stage + // + // Figure out if the destination id has changed + // ----------------------------------------------------- + wire stage1_dest_changed; + wire stage1_trans_changed; + wire [PAYLOAD_W-1 : 0] stage1_payload; + wire in_nonposted_cmd; + reg [ST_CHANNEL_W-1:0] last_channel; + wire [DEST_ID_W-1 : 0] dest_id; + reg [DEST_ID_W-1 : 0] last_dest_id; + reg was_write; + wire is_write; + wire suppress; + wire save_dest_id; + + wire suppress_change_dest_id; + wire suppress_max_outstanding; + wire suppress_change_trans_but_not_dest; + wire suppress_change_trans_for_one_slave; + + generate if (PREVENT_HAZARDS == 1) begin : convert_posted_to_nonposted_block + assign in_nonposted_cmd = 1'b1; + end else begin : non_posted_cmd_assignment_block + assign in_nonposted_cmd = (cmd_sink_data[PKT_TRANS_POSTED] == 0); + end + endgenerate + + // ------------------------------------ + // Optimization: for the unpipelined case, we can save the destid if + // this is an unsuppressed nonposted command. This eliminates + // dependence on the backpressure signal. + // + // Not a problem for the pipelined case. + // ------------------------------------ + generate + if (PIPELINED) begin : pipelined_save_dest_id + assign save_dest_id = cmd_sink_valid & cmd_sink_ready & in_nonposted_cmd; + end else begin : unpipelined_save_dest_id + assign save_dest_id = cmd_sink_valid & ~(suppress_change_dest_id | suppress_max_outstanding) & in_nonposted_cmd; + end + endgenerate + + always @(posedge clk, posedge reset) begin + if (reset) begin + last_dest_id <= 0; + last_channel <= 0; + was_write <= 0; + end + else if (save_dest_id) begin + last_dest_id <= dest_id; + last_channel <= cmd_sink_channel; + was_write <= is_write; + end + end + + assign dest_id = cmd_sink_data[PKT_DEST_ID_H:PKT_DEST_ID_L]; + assign is_write = cmd_sink_data[PKT_TRANS_WRITE]; + assign stage1_dest_changed = (last_dest_id != dest_id); + assign stage1_trans_changed = (was_write != is_write); + + assign stage1_payload = { + cmd_sink_data, + cmd_sink_channel, + cmd_sink_startofpacket, + cmd_sink_endofpacket, + stage1_dest_changed, + stage1_trans_changed }; + + // ----------------------------------------------------- + // (Optional) pipeline between input and output + // ----------------------------------------------------- + wire stage2_valid; + reg stage2_ready; + wire [PAYLOAD_W-1 : 0] stage2_payload; + + generate + if (PIPELINED == 1) begin : pipelined_limiter + altera_avalon_st_pipeline_base + #( + .BITS_PER_SYMBOL(PAYLOAD_W) + ) stage1_pipe ( + .clk (clk), + .reset (reset), + .in_ready (cmd_sink_ready), + .in_valid (cmd_sink_valid), + .in_data (stage1_payload), + .out_valid (stage2_valid), + .out_ready (stage2_ready), + .out_data (stage2_payload) + ); + end else begin : unpipelined_limiter + assign stage2_valid = cmd_sink_valid; + assign stage2_payload = stage1_payload; + assign cmd_sink_ready = stage2_ready; + end + endgenerate + + // ----------------------------------------------------- + // Output Stage + // ----------------------------------------------------- + wire [ST_DATA_W-1 : 0] stage2_data; + wire [ST_CHANNEL_W-1:0] stage2_channel; + wire stage2_startofpacket; + wire stage2_endofpacket; + wire stage2_dest_changed; + wire stage2_trans_changed; + reg has_pending_responses; + reg [COUNTER_W-1 : 0] pending_response_count; + reg [COUNTER_W-1 : 0] next_pending_response_count; + wire nonposted_cmd; + wire nonposted_cmd_accepted; + wire response_accepted; + wire response_sink_accepted; + wire response_src_accepted; + wire count_is_1; + wire count_is_0; + reg internal_valid; + wire [VALID_WIDTH-1:0] wide_valid; + + assign { stage2_data, + stage2_channel, + stage2_startofpacket, + stage2_endofpacket, + stage2_dest_changed, + stage2_trans_changed } = stage2_payload; + + generate if (PREVENT_HAZARDS == 1) begin : stage2_nonposted_block + assign nonposted_cmd = 1'b1; + end else begin + assign nonposted_cmd = (stage2_data[PKT_TRANS_POSTED] == 0); + end + endgenerate + + assign nonposted_cmd_accepted = nonposted_cmd && internal_valid && (cmd_src_ready && cmd_src_endofpacket); + + // ----------------------------------------------------------------------------- + // Use the sink's control signals here, because write responses may be dropped + // when hazard prevention is on. + // + // When case REORDER, move all side to rsp_source as all packets from rsp_sink will + // go in the reorder memory. + // One special case when PREVENT_HAZARD is on, need to use reorder_memory_valid + // as the rsp_source will drop + // ----------------------------------------------------------------------------- + + assign response_sink_accepted = rsp_sink_valid && rsp_sink_ready && rsp_sink_endofpacket; + // Avoid Qis warning when incase, no REORDER, the signal reorder_mem_valid is not in used. + wire reorder_mem_out_valid; + wire reorder_mem_valid; + generate + if (REORDER) begin + assign reorder_mem_out_valid = reorder_mem_valid; + end else begin + assign reorder_mem_out_valid = '0; + end + endgenerate + + assign response_src_accepted = reorder_mem_out_valid & rsp_src_ready & rsp_src_endofpacket; + assign response_accepted = (REORDER == 1) ? response_src_accepted : response_sink_accepted; + + always @* begin + next_pending_response_count = pending_response_count; + + if (nonposted_cmd_accepted) + next_pending_response_count = pending_response_count + 1'b1; + if (response_accepted) + next_pending_response_count = pending_response_count - 1'b1; + if (nonposted_cmd_accepted && response_accepted) + next_pending_response_count = pending_response_count; + end + + assign count_is_1 = (pending_response_count == 1); + assign count_is_0 = (pending_response_count == 0); + // ------------------------------------------------------------------ + // count_max_reached : count if maximum command reach to backpressure + // ------------------------------------------------------------------ + reg count_max_reached; + always @(posedge clk, posedge reset) begin + if (reset) begin + pending_response_count <= 0; + has_pending_responses <= 0; + count_max_reached <= 0; + end + else begin + pending_response_count <= next_pending_response_count; + // synthesis translate_off + if (count_is_0 && response_accepted) + $display("%t: %m: Error: unexpected response: pending_response_count underflow", $time()); + // synthesis translate_on + has_pending_responses <= has_pending_responses + && ~(count_is_1 && response_accepted && ~nonposted_cmd_accepted) + || (count_is_0 && nonposted_cmd_accepted && ~response_accepted); + count_max_reached <= (next_pending_response_count == MAX_OUTSTANDING_RESPONSES); + + end + end + + wire suppress_prevent_harzard_for_particular_destid; + wire this_destid_trans_changed; + genvar j; + generate + if (REORDER) begin: fifo_dest_id_write_read_control_reorder_on + wire [COUNTER_W - 1 : 0] current_trans_seq_of_this_destid; + wire [MAX_DEST_ID - 1 : 0] current_trans_seq_of_this_destid_valid; + wire [MAX_DEST_ID - 1 : 0] responses_arrived; + reg [COUNTER_W - 1:0] trans_sequence; + wire [MAX_DEST_ID - 1 : 0] trans_sequence_we; + + wire [COUNTER_W : 0] trans_sequence_plus_trans_type; + wire current_trans_type_of_this_destid; + wire [COUNTER_W : 0] current_trans_seq_of_this_destid_plus_trans_type [MAX_DEST_ID]; + // ------------------------------------------------------------ + // Control write trans_sequence to fifos + // + // 1. when command accepted, read destid from command packet, + // write this id to the fifo (each fifo for each desitid) + // 2. when response acepted, read the destid from response packet, + // will know which sequence of this response, write it to + // correct segment in memory. + // what if two commands go to same slave, the two sequences + // go time same fifo, this even helps us to maintain order + // when two commands same thread to one slave. + // ----------------------------------------------------------- + wire [DEST_ID_W - 1 : 0] rsp_sink_dest_id; + wire [DEST_ID_W - 1 : 0] cmd_dest_id; + assign rsp_sink_dest_id = rsp_sink_data[PKT_SRC_ID_H : PKT_SRC_ID_L]; + + // write in fifo the trans_sequence and type of transaction + assign trans_sequence_plus_trans_type = {stage2_data[PKT_TRANS_WRITE], trans_sequence}; + + // read the cmd_dest_id from output of pipeline stage so that either + // or not, it wont affect how we write to fifo + assign cmd_dest_id = stage2_data[PKT_DEST_ID_H : PKT_DEST_ID_L]; + // ------------------------------------- + // Get the transaction_seq for that dest_id + // ------------------------------------- + wire [COUNTER_W - 1: 0] trans_sequence_rsp; + wire [COUNTER_W : 0] trans_sequence_rsp_plus_trans_type; + wire [COUNTER_W - 1: 0] trans_sequence_rsp_this_destid_waiting; + wire [COUNTER_W : 0] sequence_and_trans_type_this_destid_waiting; + wire trans_sequence_rsp_this_destid_waiting_valid; + assign trans_sequence_rsp_plus_trans_type = current_trans_seq_of_this_destid_plus_trans_type[rsp_sink_dest_id]; + assign trans_sequence_rsp = trans_sequence_rsp_plus_trans_type[COUNTER_W - 1: 0]; + + // do I need to check if this fifo is valid, it should be always valid, unless a command not yet sent + // and response comes back which means something weird happens. + // It is worth to do an assertion but now to avoid QIS warning, just do as normal ST handshaking + // check valid and ready + + for (j = 0; j < MAX_DEST_ID; j = j+1) + begin : write_and_read_trans_sequence + assign trans_sequence_we[j] = (cmd_dest_id == j) && nonposted_cmd_accepted; + assign responses_arrived[j] = (rsp_sink_dest_id == j) && response_sink_accepted; + end + + // -------------------------------------------------------------------- + // This is array of fifos, which will be created base on how many slaves + // that this master can see (max dest_id_width) + // Each fifo, will store the trans_sequence, which go to that slave + // On the response path, based in the response from which slave + // the fifo of that slave will be read, to check the sequences. + // and this sequence is the write address to the memory + // ----------------------------------------------------------------------------------- + // There are 3 sequences run around the limiter, they have a relationship + // And this is how the key point of reorder work: + // + // trans_sequence : command sequence, each command go thru the limiter + // will have a sequence to show their order. A simple + // counter from 0 go up and repeat. + // trans_sequence_rsp : response sequence, each response that go back to limiter, + // will be read from trans_fifos to know their sequence. + // expect_trans_sequence : Expected sequences for response that the master is waiting + // The limiter will hold this sequence and wait until exactly response + // for this sequence come back (trans_sequence_rsp) + // aka: if trans_sequence_rsp back is same as expect_trans_sequence + // then it is correct order, else response store in memory and + // send out to master later, when expect_trans_sequence match. + // ------------------------------------------------------------------------------------ + for (j = 0;j < MAX_DEST_ID; j = j+1) begin : trans_sequence_per_fifo + altera_avalon_sc_fifo + #( + .SYMBOLS_PER_BEAT (1), + .BITS_PER_SYMBOL (COUNTER_W + 1), // one bit extra to store type of transaction + .FIFO_DEPTH (MAX_OUTSTANDING_RESPONSES), + .CHANNEL_WIDTH (0), + .ERROR_WIDTH (0), + .USE_PACKETS (0), + .USE_FILL_LEVEL (0), + .EMPTY_LATENCY (1), + .USE_MEMORY_BLOCKS (0), + .USE_STORE_FORWARD (0), + .USE_ALMOST_FULL_IF (0), + .USE_ALMOST_EMPTY_IF (0) + ) dest_id_fifo + ( + .clk (clk), + .reset (reset), + .in_data (trans_sequence_plus_trans_type), + .in_valid (trans_sequence_we[j]), + .in_ready (), + .out_data (current_trans_seq_of_this_destid_plus_trans_type[j]), + .out_valid (current_trans_seq_of_this_destid_valid[j]), + .out_ready (responses_arrived[j]), + .csr_address (2'b00), // (terminated) + .csr_read (1'b0), // (terminated) + .csr_write (1'b0), // (terminated) + .csr_readdata (), // (terminated) + .csr_writedata (32'b00000000000000000000000000000000), // (terminated) + .almost_full_data (), // (terminated) + .almost_empty_data (), // (terminated) + .in_startofpacket (1'b0), // (terminated) + .in_endofpacket (1'b0), // (terminated) + .out_startofpacket (), // (terminated) + .out_endofpacket (), // (terminated) + .in_empty (1'b0), // (terminated) + .out_empty (), // (terminated) + .in_error (1'b0), // (terminated) + .out_error (), // (terminated) + .in_channel (1'b0), // (terminated) + .out_channel () // (terminated) + ); + end // block: trans_sequence_per_fifo + + // ------------------------------------------------------- + // Calculate the transaction sequence, just simple increase + // when each commands pass by + // -------------------------------------------------------- + always @(posedge clk or posedge reset) + begin + if (reset) begin + trans_sequence <= '0; + end else begin + if (nonposted_cmd_accepted) + trans_sequence <= ( (trans_sequence + 1'b1) == MAX_OUTSTANDING_RESPONSES) ? '0 : trans_sequence + 1'b1; + end + end + + // ------------------------------------- + // Control Memory for reorder responses + // ------------------------------------- + wire [COUNTER_W - 1 : 0] next_rd_trans_sequence; + reg [COUNTER_W - 1 : 0] rd_trans_sequence; + reg [COUNTER_W - 1 : 0] next_expected_trans_sequence; + reg [COUNTER_W - 1 : 0] expect_trans_sequence; + wire [ST_DATA_W - 1 : 0] reorder_mem_data; + wire [ST_CHANNEL_W - 1 : 0] reorder_mem_channel; + wire reorder_mem_startofpacket; + wire reorder_mem_endofpacket; + wire reorder_mem_ready; + // ------------------------------------------- + // Data to write and read from reorder memory + // Store everything includes channel, sop, eop + // ------------------------------------------- + reg [MEM_W - 1 : 0] mem_in_rsp_sink_data; + reg [MEM_W - 1 : 0] reorder_mem_out_data; + always_comb + begin + mem_in_rsp_sink_data = {rsp_sink_data, rsp_sink_channel, rsp_sink_startofpacket, rsp_sink_endofpacket}; + end + + assign next_rd_trans_sequence = ((rd_trans_sequence + 1'b1) == MAX_OUTSTANDING_RESPONSES) ? '0 : rd_trans_sequence + 1'b1; + assign next_expected_trans_sequence = ((expect_trans_sequence + 1'b1) == MAX_OUTSTANDING_RESPONSES) ? '0 : expect_trans_sequence + 1'b1; + + always_ff @(posedge clk, posedge reset) + begin + if (reset) begin + rd_trans_sequence <= '0; + expect_trans_sequence <= '0; + end else begin + if (rsp_src_ready && reorder_mem_valid) begin + if (reorder_mem_endofpacket == 1) begin //endofpacket + expect_trans_sequence <= next_expected_trans_sequence; + rd_trans_sequence <= next_rd_trans_sequence; + end + end + end + end // always_ff @ + + // For PREVENT_HAZARD, + // Case: Master Write to S0, read S1, and Read S0 back but if Write for S0 + // not yet return then we need to backpressure this, else read S0 might take over write + // This is more checking after the fifo destid, as read S1 is inserted in midle + // when see new packet, try to look at the fifo for that slave id, check if it + // type of transaction + assign sequence_and_trans_type_this_destid_waiting = current_trans_seq_of_this_destid_plus_trans_type[cmd_dest_id]; + assign current_trans_type_of_this_destid = sequence_and_trans_type_this_destid_waiting[COUNTER_W]; + assign trans_sequence_rsp_this_destid_waiting_valid = current_trans_seq_of_this_destid_valid[cmd_dest_id]; + // it might waiting other sequence, check if different type of transaction as only for PREVENT HAZARD + // if comming comamnd to one slave and this slave is still waiting for response from previous command + // which has diiferent type of transaction, we back-pressure this command to avoid HAZARD + assign suppress_prevent_harzard_for_particular_destid = (current_trans_type_of_this_destid != is_write) & trans_sequence_rsp_this_destid_waiting_valid; + + // ------------------------------------- + // Memory for reorder buffer + // ------------------------------------- + altera_merlin_reorder_memory + #( + .DATA_W (MEM_W), + .ADDR_H_W (COUNTER_W), + .ADDR_L_W (MAX_BURST_LENGTH), + .NUM_SEGMENT (MAX_OUTSTANDING_RESPONSES), + .DEPTH (MEM_DEPTH) + ) reorder_memory + ( + .clk (clk), + .reset (reset), + .in_data (mem_in_rsp_sink_data), + .in_valid (rsp_sink_valid), + .in_ready (reorder_mem_ready), + .out_data (reorder_mem_out_data), + .out_valid (reorder_mem_valid), + .out_ready (rsp_src_ready), + .wr_segment (trans_sequence_rsp), + .rd_segment (expect_trans_sequence) + ); + // ------------------------------------- + // Output from reorder buffer + // ------------------------------------- + assign reorder_mem_data = reorder_mem_out_data[MEM_W -1 : ST_CHANNEL_W + 2]; + assign reorder_mem_channel = reorder_mem_out_data[ST_CHANNEL_W + 2 - 1 : 2]; + assign reorder_mem_startofpacket = reorder_mem_out_data[1]; + assign reorder_mem_endofpacket = reorder_mem_out_data[0]; + + // ------------------------------------- + // Because use generate statment + // so move all rsp_src_xxx controls here + // ------------------------------------- + always_comb begin + cmd_src_data = stage2_data; + rsp_src_valid = reorder_mem_valid; + rsp_src_data = reorder_mem_data; + rsp_src_channel = reorder_mem_channel; + rsp_src_startofpacket = reorder_mem_startofpacket; + rsp_src_endofpacket = reorder_mem_endofpacket; + // ------------------------------------- + // Forces commands to be non-posted if hazard prevention + // is on, also drops write responses + // ------------------------------------- + rsp_sink_ready = reorder_mem_ready; // now it takes ready signal from the memory not direct from master + if (PREVENT_HAZARDS == 1) begin + cmd_src_data[PKT_TRANS_POSTED] = 1'b0; + + if (rsp_src_data[PKT_TRANS_WRITE] == 1'b1 && SUPPORTS_POSTED_WRITES == 1 && SUPPORTS_NONPOSTED_WRITES == 0) begin + rsp_src_valid = 1'b0; + rsp_sink_ready = 1'b1; + end + end + end // always_comb + + end // block: fifo_dest_id_write_read_control_reorder_on + endgenerate + + // ------------------------------------- + // Pass-through command and response + // ------------------------------------- + + always_comb + begin + cmd_src_channel = stage2_channel; + cmd_src_startofpacket = stage2_startofpacket; + cmd_src_endofpacket = stage2_endofpacket; + end // always_comb + + // ------------------------------------- + // When there is no REORDER requirement + // Just pass through signals + // ------------------------------------- + generate + if (!REORDER) begin : use_selector_or_pass_thru_rsp + always_comb begin + cmd_src_data = stage2_data; + // pass thru almost signals + rsp_src_valid = rsp_sink_valid; + rsp_src_data = rsp_sink_data; + rsp_src_channel = rsp_sink_channel; + rsp_src_startofpacket = rsp_sink_startofpacket; + rsp_src_endofpacket = rsp_sink_endofpacket; + // ------------------------------------- + // Forces commands to be non-posted if hazard prevention + // is on, also drops write responses + // ------------------------------------- + rsp_sink_ready = rsp_src_ready; // take care this, should check memory empty + if (PREVENT_HAZARDS == 1) begin + cmd_src_data[PKT_TRANS_POSTED] = 1'b0; + + if (rsp_sink_data[PKT_TRANS_WRITE] == 1'b1 && SUPPORTS_POSTED_WRITES == 1 && SUPPORTS_NONPOSTED_WRITES == 0) begin + rsp_src_valid = 1'b0; + rsp_sink_ready = 1'b1; + end + end + end // always_comb + end // if (!REORDER) + endgenerate + + // -------------------------------------------------------- + // Backpressure & Suppression + // -------------------------------------------------------- + // ENFORCE_ORDER: unused option, always is 1, remove it + // Now the limiter will suppress when max_outstanding reach + // -------------------------------------------------------- + generate + if (ENFORCE_ORDER) begin : enforce_order_block + assign suppress_change_dest_id = (REORDER == 1) ? 1'b0 : nonposted_cmd && has_pending_responses && + (stage2_dest_changed || (PREVENT_HAZARDS == 1 && stage2_trans_changed)); + end else begin : no_order_block + assign suppress_change_dest_id = 1'b0; + end + endgenerate + + // ------------------------------------------------------------ + // Even we allow change slave while still have pending responses + // But one special case, when PREVENT_HAZARD=1, we still allow + // switch slave while type of transaction change (RAW, WAR) but + // only to different slaves. + // if to same slave, we still need back pressure that to make + // sure no racing + // ------------------------------------------------------------ + + generate + if (REORDER) begin : prevent_hazard_block + assign suppress_change_trans_but_not_dest = nonposted_cmd && has_pending_responses && + !stage2_dest_changed && (PREVENT_HAZARDS == 1 && stage2_trans_changed); + end else begin : no_hazard_block + assign suppress_change_trans_but_not_dest = 1'b0; // no REORDER, the suppress_changes_destid take care of this. + end + endgenerate + + generate + if (REORDER) begin : prevent_hazard_block_for_particular_slave + assign suppress_change_trans_for_one_slave = nonposted_cmd && has_pending_responses && (PREVENT_HAZARDS == 1 && suppress_prevent_harzard_for_particular_destid); + end else begin : no_hazard_block_for_particular_slave + assign suppress_change_trans_for_one_slave = 1'b0; // no REORDER, the suppress_changes_destid take care of this. + end + endgenerate + + // ------------------------------------------ + // Backpressure when max outstanding transactions are reached + // ------------------------------------------ + generate + if (REORDER) begin : max_outstanding_block + assign suppress_max_outstanding = count_max_reached; + end else begin + assign suppress_max_outstanding = 1'b0; + end + endgenerate + + assign suppress = suppress_change_trans_for_one_slave | suppress_change_dest_id | suppress_max_outstanding; + assign wide_valid = { VALID_WIDTH {stage2_valid} } & stage2_channel; + + always @* begin + stage2_ready = cmd_src_ready; + internal_valid = stage2_valid; + // -------------------------------------------------------- + // change suppress condidtion, in case REODER it will alllow changing slave + // even still have pending transactions. + // ------------------------------------------------------- + if (suppress) begin + stage2_ready = 0; + internal_valid = 0; + end + + if (VALID_WIDTH == 1) begin + cmd_src_valid = {VALID_WIDTH{1'b0}}; + cmd_src_valid[0] = internal_valid; + end else begin + // ------------------------------------- + // Use the one-hot channel to determine if the destination + // has changed. This results in a wide valid bus + // ------------------------------------- + cmd_src_valid = wide_valid; + if (nonposted_cmd & has_pending_responses) begin + if (!REORDER) begin + cmd_src_valid = wide_valid & last_channel; + // ------------------------------------- + // Mask the valid signals if the transaction type has changed + // if hazard prevention is enabled + // ------------------------------------- + if (PREVENT_HAZARDS == 1) + cmd_src_valid = wide_valid & last_channel & { VALID_WIDTH {!stage2_trans_changed} }; + end else begin // else: !if(!REORDER) if REORDER happen + if (PREVENT_HAZARDS == 1) + cmd_src_valid = wide_valid & { VALID_WIDTH {!suppress_change_trans_for_one_slave} }; + if (suppress_max_outstanding) begin + cmd_src_valid = {VALID_WIDTH {1'b0}}; + end + + end + end + end + end + + // -------------------------------------------------- + // Calculates the log2ceil of the input value. + // + // This function occurs a lot... please refactor. + // -------------------------------------------------- + function integer log2ceil; + input integer val; + integer i; + + begin + i = 1; + log2ceil = 0; + + while (i < val) begin + log2ceil = log2ceil + 1; + i = i << 1; + end + end + endfunction + +endmodule + + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_reset_controller.sdc b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_reset_controller.sdc new file mode 100755 index 0000000..751ee17 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_reset_controller.sdc @@ -0,0 +1,30 @@ +# (C) 2001-2020 Intel Corporation. All rights reserved. +# Your use of Intel Corporation's design tools, logic functions and other +# software and tools, and its AMPP partner logic functions, and any output +# files from any of the foregoing (including device programming or simulation +# files), and any associated documentation or information are expressly subject +# to the terms and conditions of the Intel Program License Subscription +# Agreement, Intel FPGA IP License Agreement, or other applicable +# license agreement, including, without limitation, that your use is for the +# sole purpose of programming logic devices manufactured by Intel and sold by +# Intel or its authorized distributors. Please refer to the applicable +# agreement for further details. + + +# +--------------------------------------------------- +# | Cut the async clear paths +# +--------------------------------------------------- +set aclr_counter 0 +set clrn_counter 0 +set aclr_collection [get_pins -compatibility_mode -nocase -nowarn *|alt_rst_sync_uq1|altera_reset_synchronizer_int_chain*|aclr] +set clrn_collection [get_pins -compatibility_mode -nocase -nowarn *|alt_rst_sync_uq1|altera_reset_synchronizer_int_chain*|clrn] +set aclr_counter [get_collection_size $aclr_collection] +set clrn_counter [get_collection_size $clrn_collection] + +if {$aclr_counter > 0} { + set_false_path -to [get_pins -compatibility_mode -nocase *|alt_rst_sync_uq1|altera_reset_synchronizer_int_chain*|aclr] +} + +if {$clrn_counter > 0} { + set_false_path -to [get_pins -compatibility_mode -nocase *|alt_rst_sync_uq1|altera_reset_synchronizer_int_chain*|clrn] +} diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_reset_controller.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_reset_controller.v new file mode 100755 index 0000000..c550ff3 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_reset_controller.v @@ -0,0 +1,319 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// (C) 2001-2013 Altera Corporation. All rights reserved. +// Your use of Altera Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License Subscription +// Agreement, Altera MegaCore Function License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/20.1std/ip/merlin/altera_reset_controller/altera_reset_controller.v#1 $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ + +// -------------------------------------- +// Reset controller +// +// Combines all the input resets and synchronizes +// the result to the clk. +// ACDS13.1 - Added reset request as part of reset sequencing +// -------------------------------------- + +`timescale 1 ns / 1 ns + +module altera_reset_controller +#( + parameter NUM_RESET_INPUTS = 6, + parameter USE_RESET_REQUEST_IN0 = 0, + parameter USE_RESET_REQUEST_IN1 = 0, + parameter USE_RESET_REQUEST_IN2 = 0, + parameter USE_RESET_REQUEST_IN3 = 0, + parameter USE_RESET_REQUEST_IN4 = 0, + parameter USE_RESET_REQUEST_IN5 = 0, + parameter USE_RESET_REQUEST_IN6 = 0, + parameter USE_RESET_REQUEST_IN7 = 0, + parameter USE_RESET_REQUEST_IN8 = 0, + parameter USE_RESET_REQUEST_IN9 = 0, + parameter USE_RESET_REQUEST_IN10 = 0, + parameter USE_RESET_REQUEST_IN11 = 0, + parameter USE_RESET_REQUEST_IN12 = 0, + parameter USE_RESET_REQUEST_IN13 = 0, + parameter USE_RESET_REQUEST_IN14 = 0, + parameter USE_RESET_REQUEST_IN15 = 0, + parameter OUTPUT_RESET_SYNC_EDGES = "deassert", + parameter SYNC_DEPTH = 2, + parameter RESET_REQUEST_PRESENT = 0, + parameter RESET_REQ_WAIT_TIME = 3, + parameter MIN_RST_ASSERTION_TIME = 11, + parameter RESET_REQ_EARLY_DSRT_TIME = 4, + parameter ADAPT_RESET_REQUEST = 0 +) +( + // -------------------------------------- + // We support up to 16 reset inputs, for now + // -------------------------------------- + input reset_in0, + input reset_in1, + input reset_in2, + input reset_in3, + input reset_in4, + input reset_in5, + input reset_in6, + input reset_in7, + input reset_in8, + input reset_in9, + input reset_in10, + input reset_in11, + input reset_in12, + input reset_in13, + input reset_in14, + input reset_in15, + input reset_req_in0, + input reset_req_in1, + input reset_req_in2, + input reset_req_in3, + input reset_req_in4, + input reset_req_in5, + input reset_req_in6, + input reset_req_in7, + input reset_req_in8, + input reset_req_in9, + input reset_req_in10, + input reset_req_in11, + input reset_req_in12, + input reset_req_in13, + input reset_req_in14, + input reset_req_in15, + + + input clk, + output reg reset_out, + output reg reset_req +); + + // Always use async reset synchronizer if reset_req is used + localparam ASYNC_RESET = (OUTPUT_RESET_SYNC_EDGES == "deassert"); + + // -------------------------------------- + // Local parameter to control the reset_req and reset_out timing when RESET_REQUEST_PRESENT==1 + // -------------------------------------- + localparam MIN_METASTABLE = 3; + localparam RSTREQ_ASRT_SYNC_TAP = MIN_METASTABLE + RESET_REQ_WAIT_TIME; + + localparam LARGER = RESET_REQ_WAIT_TIME > RESET_REQ_EARLY_DSRT_TIME ? RESET_REQ_WAIT_TIME : RESET_REQ_EARLY_DSRT_TIME; + + localparam ASSERTION_CHAIN_LENGTH = (MIN_METASTABLE > LARGER) ? + MIN_RST_ASSERTION_TIME + 1 : + ( + (MIN_RST_ASSERTION_TIME > LARGER)? + MIN_RST_ASSERTION_TIME + (LARGER - MIN_METASTABLE + 1) + 1 : + MIN_RST_ASSERTION_TIME + RESET_REQ_EARLY_DSRT_TIME + RESET_REQ_WAIT_TIME - MIN_METASTABLE + 2 + ); + + localparam RESET_REQ_DRST_TAP = RESET_REQ_EARLY_DSRT_TIME + 1; + // -------------------------------------- + + wire merged_reset; + wire merged_reset_req_in; + wire reset_out_pre; + wire reset_req_pre; + + // Registers and Interconnect + (*preserve*) reg [RSTREQ_ASRT_SYNC_TAP: 0] altera_reset_synchronizer_int_chain; + reg [ASSERTION_CHAIN_LENGTH-1: 0] r_sync_rst_chain; + reg r_sync_rst; + reg r_early_rst; + + // -------------------------------------- + // "Or" all the input resets together + // -------------------------------------- + assign merged_reset = ( + reset_in0 | + reset_in1 | + reset_in2 | + reset_in3 | + reset_in4 | + reset_in5 | + reset_in6 | + reset_in7 | + reset_in8 | + reset_in9 | + reset_in10 | + reset_in11 | + reset_in12 | + reset_in13 | + reset_in14 | + reset_in15 + ); + + assign merged_reset_req_in = ( + ( (USE_RESET_REQUEST_IN0 == 1) ? reset_req_in0 : 1'b0) | + ( (USE_RESET_REQUEST_IN1 == 1) ? reset_req_in1 : 1'b0) | + ( (USE_RESET_REQUEST_IN2 == 1) ? reset_req_in2 : 1'b0) | + ( (USE_RESET_REQUEST_IN3 == 1) ? reset_req_in3 : 1'b0) | + ( (USE_RESET_REQUEST_IN4 == 1) ? reset_req_in4 : 1'b0) | + ( (USE_RESET_REQUEST_IN5 == 1) ? reset_req_in5 : 1'b0) | + ( (USE_RESET_REQUEST_IN6 == 1) ? reset_req_in6 : 1'b0) | + ( (USE_RESET_REQUEST_IN7 == 1) ? reset_req_in7 : 1'b0) | + ( (USE_RESET_REQUEST_IN8 == 1) ? reset_req_in8 : 1'b0) | + ( (USE_RESET_REQUEST_IN9 == 1) ? reset_req_in9 : 1'b0) | + ( (USE_RESET_REQUEST_IN10 == 1) ? reset_req_in10 : 1'b0) | + ( (USE_RESET_REQUEST_IN11 == 1) ? reset_req_in11 : 1'b0) | + ( (USE_RESET_REQUEST_IN12 == 1) ? reset_req_in12 : 1'b0) | + ( (USE_RESET_REQUEST_IN13 == 1) ? reset_req_in13 : 1'b0) | + ( (USE_RESET_REQUEST_IN14 == 1) ? reset_req_in14 : 1'b0) | + ( (USE_RESET_REQUEST_IN15 == 1) ? reset_req_in15 : 1'b0) + ); + + + // -------------------------------------- + // And if required, synchronize it to the required clock domain, + // with the correct synchronization type + // -------------------------------------- + generate if (OUTPUT_RESET_SYNC_EDGES == "none" && (RESET_REQUEST_PRESENT==0)) begin + + assign reset_out_pre = merged_reset; + assign reset_req_pre = merged_reset_req_in; + + end else begin + + altera_reset_synchronizer + #( + .DEPTH (SYNC_DEPTH), + .ASYNC_RESET(RESET_REQUEST_PRESENT? 1'b1 : ASYNC_RESET) + ) + alt_rst_sync_uq1 + ( + .clk (clk), + .reset_in (merged_reset), + .reset_out (reset_out_pre) + ); + + altera_reset_synchronizer + #( + .DEPTH (SYNC_DEPTH), + .ASYNC_RESET(0) + ) + alt_rst_req_sync_uq1 + ( + .clk (clk), + .reset_in (merged_reset_req_in), + .reset_out (reset_req_pre) + ); + + end + endgenerate + + generate if ( ( (RESET_REQUEST_PRESENT == 0) && (ADAPT_RESET_REQUEST==0) )| + ( (ADAPT_RESET_REQUEST == 1) && (OUTPUT_RESET_SYNC_EDGES != "deassert") ) ) begin + always @* begin + reset_out = reset_out_pre; + reset_req = reset_req_pre; + end + end else if ( (RESET_REQUEST_PRESENT == 0) && (ADAPT_RESET_REQUEST==1) ) begin + + wire reset_out_pre2; + + altera_reset_synchronizer + #( + .DEPTH (SYNC_DEPTH+1), + .ASYNC_RESET(0) + ) + alt_rst_sync_uq2 + ( + .clk (clk), + .reset_in (reset_out_pre), + .reset_out (reset_out_pre2) + ); + + always @* begin + reset_out = reset_out_pre2; + reset_req = reset_req_pre; + end + + end + else begin + + // 3-FF Metastability Synchronizer + initial + begin + altera_reset_synchronizer_int_chain <= {RSTREQ_ASRT_SYNC_TAP{1'b1}}; + end + + always @(posedge clk) + begin + altera_reset_synchronizer_int_chain[RSTREQ_ASRT_SYNC_TAP:0] <= + {altera_reset_synchronizer_int_chain[RSTREQ_ASRT_SYNC_TAP-1:0], reset_out_pre}; + end + + // Synchronous reset pipe + initial + begin + r_sync_rst_chain <= {ASSERTION_CHAIN_LENGTH{1'b1}}; + end + + always @(posedge clk) + begin + if (altera_reset_synchronizer_int_chain[MIN_METASTABLE-1] == 1'b1) + begin + r_sync_rst_chain <= {ASSERTION_CHAIN_LENGTH{1'b1}}; + end + else + begin + r_sync_rst_chain <= {1'b0, r_sync_rst_chain[ASSERTION_CHAIN_LENGTH-1:1]}; + end + end + + // Standard synchronous reset output. From 0-1, the transition lags the early output. For 1->0, the transition + // matches the early input. + + always @(posedge clk) + begin + case ({altera_reset_synchronizer_int_chain[RSTREQ_ASRT_SYNC_TAP], r_sync_rst_chain[1], r_sync_rst}) + 3'b000: r_sync_rst <= 1'b0; // Not reset + 3'b001: r_sync_rst <= 1'b0; + 3'b010: r_sync_rst <= 1'b0; + 3'b011: r_sync_rst <= 1'b1; + 3'b100: r_sync_rst <= 1'b1; + 3'b101: r_sync_rst <= 1'b1; + 3'b110: r_sync_rst <= 1'b1; + 3'b111: r_sync_rst <= 1'b1; // In Reset + default: r_sync_rst <= 1'b1; + endcase + + case ({r_sync_rst_chain[1], r_sync_rst_chain[RESET_REQ_DRST_TAP] | reset_req_pre}) + 2'b00: r_early_rst <= 1'b0; // Not reset + 2'b01: r_early_rst <= 1'b1; // Coming out of reset + 2'b10: r_early_rst <= 1'b0; // Spurious reset - should not be possible via synchronous design. + 2'b11: r_early_rst <= 1'b1; // Held in reset + default: r_early_rst <= 1'b1; + endcase + end + + always @* begin + reset_out = r_sync_rst; + reset_req = r_early_rst; + end + + end + endgenerate + +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_reset_synchronizer.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_reset_synchronizer.v new file mode 100755 index 0000000..229d11c --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_reset_synchronizer.v @@ -0,0 +1,87 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/20.1std/ip/merlin/altera_reset_controller/altera_reset_synchronizer.v#1 $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ + +// ----------------------------------------------- +// Reset Synchronizer +// ----------------------------------------------- +`timescale 1 ns / 1 ns + +module altera_reset_synchronizer +#( + parameter ASYNC_RESET = 1, + parameter DEPTH = 2 +) +( + input reset_in /* synthesis ALTERA_ATTRIBUTE = "SUPPRESS_DA_RULE_INTERNAL=R101" */, + + input clk, + output reset_out +); + + // ----------------------------------------------- + // Synchronizer register chain. We cannot reuse the + // standard synchronizer in this implementation + // because our timing constraints are different. + // + // Instead of cutting the timing path to the d-input + // on the first flop we need to cut the aclr input. + // + // We omit the "preserve" attribute on the final + // output register, so that the synthesis tool can + // duplicate it where needed. + // ----------------------------------------------- + (*preserve*) reg [DEPTH-1:0] altera_reset_synchronizer_int_chain; + reg altera_reset_synchronizer_int_chain_out; + + generate if (ASYNC_RESET) begin + + // ----------------------------------------------- + // Assert asynchronously, deassert synchronously. + // ----------------------------------------------- + always @(posedge clk or posedge reset_in) begin + if (reset_in) begin + altera_reset_synchronizer_int_chain <= {DEPTH{1'b1}}; + altera_reset_synchronizer_int_chain_out <= 1'b1; + end + else begin + altera_reset_synchronizer_int_chain[DEPTH-2:0] <= altera_reset_synchronizer_int_chain[DEPTH-1:1]; + altera_reset_synchronizer_int_chain[DEPTH-1] <= 0; + altera_reset_synchronizer_int_chain_out <= altera_reset_synchronizer_int_chain[0]; + end + end + + assign reset_out = altera_reset_synchronizer_int_chain_out; + + end else begin + + // ----------------------------------------------- + // Assert synchronously, deassert synchronously. + // ----------------------------------------------- + always @(posedge clk) begin + altera_reset_synchronizer_int_chain[DEPTH-2:0] <= altera_reset_synchronizer_int_chain[DEPTH-1:1]; + altera_reset_synchronizer_int_chain[DEPTH-1] <= reset_in; + altera_reset_synchronizer_int_chain_out <= altera_reset_synchronizer_int_chain[0]; + end + + assign reset_out = altera_reset_synchronizer_int_chain_out; + + end + endgenerate + +endmodule + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_std_synchronizer_nocut.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_std_synchronizer_nocut.v new file mode 100755 index 0000000..5db597f --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/altera_std_synchronizer_nocut.v @@ -0,0 +1,195 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/main/ip/sopc/components/primitives/altera_std_synchronizer/altera_std_synchronizer.v#8 $ +// $Revision: #8 $ +// $Date: 2009/02/18 $ +// $Author: pscheidt $ +//----------------------------------------------------------------------------- +// +// File: altera_std_synchronizer_nocut.v +// +// Abstract: Single bit clock domain crossing synchronizer. Exactly the same +// as altera_std_synchronizer.v, except that the embedded false +// path constraint is removed in this module. If you use this +// module, you will have to apply the appropriate timing +// constraints. +// +// We expect to make this a standard Quartus atom eventually. +// +// Composed of two or more flip flops connected in series. +// Random metastable condition is simulated when the +// __ALTERA_STD__METASTABLE_SIM macro is defined. +// Use +define+__ALTERA_STD__METASTABLE_SIM argument +// on the Verilog simulator compiler command line to +// enable this mode. In addition, define the macro +// __ALTERA_STD__METASTABLE_SIM_VERBOSE to get console output +// with every metastable event generated in the synchronizer. +// +// Copyright (C) Altera Corporation 2009, All Rights Reserved +//----------------------------------------------------------------------------- + +`timescale 1ns / 1ns + +module altera_std_synchronizer_nocut ( + clk, + reset_n, + din, + dout + ); + + parameter depth = 3; // This value must be >= 2 ! + parameter rst_value = 0; + + input clk; + input reset_n; + input din; + output dout; + + // QuartusII synthesis directives: + // 1. Preserve all registers ie. do not touch them. + // 2. Do not merge other flip-flops with synchronizer flip-flops. + // QuartusII TimeQuest directives: + // 1. Identify all flip-flops in this module as members of the synchronizer + // to enable automatic metastability MTBF analysis. + + (* altera_attribute = {"-name ADV_NETLIST_OPT_ALLOWED NEVER_ALLOW; -name SYNCHRONIZER_IDENTIFICATION FORCED; -name DONT_MERGE_REGISTER ON; -name PRESERVE_REGISTER ON "} *) reg din_s1; + + (* altera_attribute = {"-name ADV_NETLIST_OPT_ALLOWED NEVER_ALLOW; -name DONT_MERGE_REGISTER ON; -name PRESERVE_REGISTER ON"} *) reg [depth-2:0] dreg; + + //synthesis translate_off + initial begin + if (depth <2) begin + $display("%m: Error: synchronizer length: %0d less than 2.", depth); + end + end + + // the first synchronizer register is either a simple D flop for synthesis + // and non-metastable simulation or a D flop with a method to inject random + // metastable events resulting in random delay of [0,1] cycles + +`ifdef __ALTERA_STD__METASTABLE_SIM + + reg[31:0] RANDOM_SEED = 123456; + wire next_din_s1; + wire dout; + reg din_last; + reg random; + event metastable_event; // hook for debug monitoring + + initial begin + $display("%m: Info: Metastable event injection simulation mode enabled"); + end + + always @(posedge clk) begin + if (reset_n == 0) + random <= $random(RANDOM_SEED); + else + random <= $random; + end + + assign next_din_s1 = (din_last ^ din) ? random : din; + + always @(posedge clk or negedge reset_n) begin + if (reset_n == 0) + din_last <= (rst_value == 0)? 1'b0 : 1'b1; + else + din_last <= din; + end + + always @(posedge clk or negedge reset_n) begin + if (reset_n == 0) + din_s1 <= (rst_value == 0)? 1'b0 : 1'b1; + else + din_s1 <= next_din_s1; + end + +`else + + //synthesis translate_on + generate if (rst_value == 0) + always @(posedge clk or negedge reset_n) begin + if (reset_n == 0) + din_s1 <= 1'b0; + else + din_s1 <= din; + end + endgenerate + + generate if (rst_value == 1) + always @(posedge clk or negedge reset_n) begin + if (reset_n == 0) + din_s1 <= 1'b1; + else + din_s1 <= din; + end + endgenerate + //synthesis translate_off + +`endif + +`ifdef __ALTERA_STD__METASTABLE_SIM_VERBOSE + always @(*) begin + if (reset_n && (din_last != din) && (random != din)) begin + $display("%m: Verbose Info: metastable event @ time %t", $time); + ->metastable_event; + end + end +`endif + + //synthesis translate_on + + // the remaining synchronizer registers form a simple shift register + // of length depth-1 + generate if (rst_value == 0) + if (depth < 3) begin + always @(posedge clk or negedge reset_n) begin + if (reset_n == 0) + dreg <= {depth-1{1'b0}}; + else + dreg <= din_s1; + end + end else begin + always @(posedge clk or negedge reset_n) begin + if (reset_n == 0) + dreg <= {depth-1{1'b0}}; + else + dreg <= {dreg[depth-3:0], din_s1}; + end + end + endgenerate + + generate if (rst_value == 1) + if (depth < 3) begin + always @(posedge clk or negedge reset_n) begin + if (reset_n == 0) + dreg <= {depth-1{1'b1}}; + else + dreg <= din_s1; + end + end else begin + always @(posedge clk or negedge reset_n) begin + if (reset_n == 0) + dreg <= {depth-1{1'b1}}; + else + dreg <= {dreg[depth-3:0], din_s1}; + end + end + endgenerate + + assign dout = dreg[depth-2]; + +endmodule + + + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_in0.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_in0.v new file mode 100755 index 0000000..8af3bc1 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_in0.v @@ -0,0 +1,59 @@ +//Legal Notice: (C)2022 Altera Corporation. All rights reserved. Your +//use of Altera Corporation's design tools, logic functions and other +//software and tools, and its AMPP partner logic functions, and any +//output files any of the foregoing (including device programming or +//simulation files), and any associated documentation or information are +//expressly subject to the terms and conditions of the Altera Program +//License Subscription Agreement or other applicable license agreement, +//including, without limitation, that your use is for the sole purpose +//of programming logic devices manufactured by Altera and sold by Altera +//or its authorized distributors. Please refer to the applicable +//agreement for further details. + +// synthesis translate_off +`timescale 1ns / 1ps +// synthesis translate_on + +// turn off superfluous verilog processor warnings +// altera message_level Level1 +// altera message_off 10034 10035 10036 10037 10230 10240 10030 + +module jtag_io_in0 ( + // inputs: + address, + clk, + in_port, + reset_n, + + // outputs: + readdata + ) +; + + output [ 31: 0] readdata; + input [ 1: 0] address; + input clk; + input [ 31: 0] in_port; + input reset_n; + + +wire clk_en; +wire [ 31: 0] data_in; +wire [ 31: 0] read_mux_out; +reg [ 31: 0] readdata; + assign clk_en = 1; + //s1, which is an e_avalon_slave + assign read_mux_out = {32 {(address == 0)}} & data_in; + always @(posedge clk or negedge reset_n) + begin + if (reset_n == 0) + readdata <= 0; + else if (clk_en) + readdata <= {32'b0 | read_mux_out}; + end + + + assign data_in = in_port; + +endmodule + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_master_0.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_master_0.v new file mode 100755 index 0000000..c8aa8e3 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_master_0.v @@ -0,0 +1,354 @@ +// jtag_io_master_0.v + +// This file was auto-generated from altera_jtag_avalon_master_hw.tcl. If you edit it your changes +// will probably be lost. +// +// Generated using ACDS version 20.1 711 + +`timescale 1 ps / 1 ps +module jtag_io_master_0 #( + parameter USE_PLI = 0, + parameter PLI_PORT = 50000, + parameter FIFO_DEPTHS = 2 + ) ( + input wire clk_clk, // clk.clk + input wire clk_reset_reset, // clk_reset.reset + output wire [31:0] master_address, // master.address + input wire [31:0] master_readdata, // .readdata + output wire master_read, // .read + output wire master_write, // .write + output wire [31:0] master_writedata, // .writedata + input wire master_waitrequest, // .waitrequest + input wire master_readdatavalid, // .readdatavalid + output wire [3:0] master_byteenable, // .byteenable + output wire master_reset_reset // master_reset.reset + ); + + wire jtag_phy_embedded_in_jtag_master_src_valid; // jtag_phy_embedded_in_jtag_master:source_valid -> timing_adt:in_valid + wire [7:0] jtag_phy_embedded_in_jtag_master_src_data; // jtag_phy_embedded_in_jtag_master:source_data -> timing_adt:in_data + wire timing_adt_out_valid; // timing_adt:out_valid -> fifo:in_valid + wire [7:0] timing_adt_out_data; // timing_adt:out_data -> fifo:in_data + wire timing_adt_out_ready; // fifo:in_ready -> timing_adt:out_ready + wire fifo_out_valid; // fifo:out_valid -> b2p:in_valid + wire [7:0] fifo_out_data; // fifo:out_data -> b2p:in_data + wire fifo_out_ready; // b2p:in_ready -> fifo:out_ready + wire b2p_out_packets_stream_valid; // b2p:out_valid -> b2p_adapter:in_valid + wire [7:0] b2p_out_packets_stream_data; // b2p:out_data -> b2p_adapter:in_data + wire b2p_out_packets_stream_ready; // b2p_adapter:in_ready -> b2p:out_ready + wire [7:0] b2p_out_packets_stream_channel; // b2p:out_channel -> b2p_adapter:in_channel + wire b2p_out_packets_stream_startofpacket; // b2p:out_startofpacket -> b2p_adapter:in_startofpacket + wire b2p_out_packets_stream_endofpacket; // b2p:out_endofpacket -> b2p_adapter:in_endofpacket + wire b2p_adapter_out_valid; // b2p_adapter:out_valid -> transacto:in_valid + wire [7:0] b2p_adapter_out_data; // b2p_adapter:out_data -> transacto:in_data + wire b2p_adapter_out_ready; // transacto:in_ready -> b2p_adapter:out_ready + wire b2p_adapter_out_startofpacket; // b2p_adapter:out_startofpacket -> transacto:in_startofpacket + wire b2p_adapter_out_endofpacket; // b2p_adapter:out_endofpacket -> transacto:in_endofpacket + wire transacto_out_stream_valid; // transacto:out_valid -> p2b_adapter:in_valid + wire [7:0] transacto_out_stream_data; // transacto:out_data -> p2b_adapter:in_data + wire transacto_out_stream_ready; // p2b_adapter:in_ready -> transacto:out_ready + wire transacto_out_stream_startofpacket; // transacto:out_startofpacket -> p2b_adapter:in_startofpacket + wire transacto_out_stream_endofpacket; // transacto:out_endofpacket -> p2b_adapter:in_endofpacket + wire p2b_adapter_out_valid; // p2b_adapter:out_valid -> p2b:in_valid + wire [7:0] p2b_adapter_out_data; // p2b_adapter:out_data -> p2b:in_data + wire p2b_adapter_out_ready; // p2b:in_ready -> p2b_adapter:out_ready + wire [7:0] p2b_adapter_out_channel; // p2b_adapter:out_channel -> p2b:in_channel + wire p2b_adapter_out_startofpacket; // p2b_adapter:out_startofpacket -> p2b:in_startofpacket + wire p2b_adapter_out_endofpacket; // p2b_adapter:out_endofpacket -> p2b:in_endofpacket + wire p2b_out_bytes_stream_valid; // p2b:out_valid -> jtag_phy_embedded_in_jtag_master:sink_valid + wire [7:0] p2b_out_bytes_stream_data; // p2b:out_data -> jtag_phy_embedded_in_jtag_master:sink_data + wire p2b_out_bytes_stream_ready; // jtag_phy_embedded_in_jtag_master:sink_ready -> p2b:out_ready + wire rst_controller_reset_out_reset; // rst_controller:reset_out -> [b2p:reset_n, b2p_adapter:reset_n, fifo:reset, jtag_phy_embedded_in_jtag_master:reset_n, p2b:reset_n, p2b_adapter:reset_n, timing_adt:reset_n, transacto:reset_n] + + generate + // If any of the display statements (or deliberately broken + // instantiations) within this generate block triggers then this module + // has been instantiated this module with a set of parameters different + // from those it was generated for. This will usually result in a + // non-functioning system. + if (USE_PLI != 0) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + use_pli_check ( .error(1'b1) ); + end + if (PLI_PORT != 50000) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + pli_port_check ( .error(1'b1) ); + end + if (FIFO_DEPTHS != 2) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + fifo_depths_check ( .error(1'b1) ); + end + endgenerate + + altera_avalon_st_jtag_interface #( + .PURPOSE (1), + .UPSTREAM_FIFO_SIZE (0), + .DOWNSTREAM_FIFO_SIZE (64), + .MGMT_CHANNEL_WIDTH (-1), + .EXPORT_JTAG (0), + .USE_PLI (0), + .PLI_PORT (50000) + ) jtag_phy_embedded_in_jtag_master ( + .clk (clk_clk), // clock.clk + .reset_n (~rst_controller_reset_out_reset), // clock_reset.reset_n + .source_data (jtag_phy_embedded_in_jtag_master_src_data), // src.data + .source_valid (jtag_phy_embedded_in_jtag_master_src_valid), // .valid + .sink_data (p2b_out_bytes_stream_data), // sink.data + .sink_valid (p2b_out_bytes_stream_valid), // .valid + .sink_ready (p2b_out_bytes_stream_ready), // .ready + .resetrequest (master_reset_reset), // resetrequest.reset + .source_ready (1'b1), // (terminated) + .mgmt_valid (), // (terminated) + .mgmt_channel (), // (terminated) + .mgmt_data (), // (terminated) + .jtag_tck (1'b0), // (terminated) + .jtag_tms (1'b0), // (terminated) + .jtag_tdi (1'b0), // (terminated) + .jtag_tdo (), // (terminated) + .jtag_ena (1'b0), // (terminated) + .jtag_usr1 (1'b0), // (terminated) + .jtag_clr (1'b0), // (terminated) + .jtag_clrn (1'b0), // (terminated) + .jtag_state_tlr (1'b0), // (terminated) + .jtag_state_rti (1'b0), // (terminated) + .jtag_state_sdrs (1'b0), // (terminated) + .jtag_state_cdr (1'b0), // (terminated) + .jtag_state_sdr (1'b0), // (terminated) + .jtag_state_e1dr (1'b0), // (terminated) + .jtag_state_pdr (1'b0), // (terminated) + .jtag_state_e2dr (1'b0), // (terminated) + .jtag_state_udr (1'b0), // (terminated) + .jtag_state_sirs (1'b0), // (terminated) + .jtag_state_cir (1'b0), // (terminated) + .jtag_state_sir (1'b0), // (terminated) + .jtag_state_e1ir (1'b0), // (terminated) + .jtag_state_pir (1'b0), // (terminated) + .jtag_state_e2ir (1'b0), // (terminated) + .jtag_state_uir (1'b0), // (terminated) + .jtag_ir_in (3'b000), // (terminated) + .jtag_irq (), // (terminated) + .jtag_ir_out () // (terminated) + ); + + jtag_io_master_0_timing_adt timing_adt ( + .clk (clk_clk), // clk.clk + .reset_n (~rst_controller_reset_out_reset), // reset.reset_n + .in_data (jtag_phy_embedded_in_jtag_master_src_data), // in.data + .in_valid (jtag_phy_embedded_in_jtag_master_src_valid), // .valid + .out_data (timing_adt_out_data), // out.data + .out_valid (timing_adt_out_valid), // .valid + .out_ready (timing_adt_out_ready) // .ready + ); + + altera_avalon_sc_fifo #( + .SYMBOLS_PER_BEAT (1), + .BITS_PER_SYMBOL (8), + .FIFO_DEPTH (64), + .CHANNEL_WIDTH (0), + .ERROR_WIDTH (0), + .USE_PACKETS (0), + .USE_FILL_LEVEL (0), + .EMPTY_LATENCY (3), + .USE_MEMORY_BLOCKS (1), + .USE_STORE_FORWARD (0), + .USE_ALMOST_FULL_IF (0), + .USE_ALMOST_EMPTY_IF (0) + ) fifo ( + .clk (clk_clk), // clk.clk + .reset (rst_controller_reset_out_reset), // clk_reset.reset + .in_data (timing_adt_out_data), // in.data + .in_valid (timing_adt_out_valid), // .valid + .in_ready (timing_adt_out_ready), // .ready + .out_data (fifo_out_data), // out.data + .out_valid (fifo_out_valid), // .valid + .out_ready (fifo_out_ready), // .ready + .csr_address (2'b00), // (terminated) + .csr_read (1'b0), // (terminated) + .csr_write (1'b0), // (terminated) + .csr_readdata (), // (terminated) + .csr_writedata (32'b00000000000000000000000000000000), // (terminated) + .almost_full_data (), // (terminated) + .almost_empty_data (), // (terminated) + .in_startofpacket (1'b0), // (terminated) + .in_endofpacket (1'b0), // (terminated) + .out_startofpacket (), // (terminated) + .out_endofpacket (), // (terminated) + .in_empty (1'b0), // (terminated) + .out_empty (), // (terminated) + .in_error (1'b0), // (terminated) + .out_error (), // (terminated) + .in_channel (1'b0), // (terminated) + .out_channel () // (terminated) + ); + + altera_avalon_st_bytes_to_packets #( + .CHANNEL_WIDTH (8), + .ENCODING (0) + ) b2p ( + .clk (clk_clk), // clk.clk + .reset_n (~rst_controller_reset_out_reset), // clk_reset.reset_n + .out_channel (b2p_out_packets_stream_channel), // out_packets_stream.channel + .out_ready (b2p_out_packets_stream_ready), // .ready + .out_valid (b2p_out_packets_stream_valid), // .valid + .out_data (b2p_out_packets_stream_data), // .data + .out_startofpacket (b2p_out_packets_stream_startofpacket), // .startofpacket + .out_endofpacket (b2p_out_packets_stream_endofpacket), // .endofpacket + .in_ready (fifo_out_ready), // in_bytes_stream.ready + .in_valid (fifo_out_valid), // .valid + .in_data (fifo_out_data) // .data + ); + + altera_avalon_st_packets_to_bytes #( + .CHANNEL_WIDTH (8), + .ENCODING (0) + ) p2b ( + .clk (clk_clk), // clk.clk + .reset_n (~rst_controller_reset_out_reset), // clk_reset.reset_n + .in_ready (p2b_adapter_out_ready), // in_packets_stream.ready + .in_valid (p2b_adapter_out_valid), // .valid + .in_data (p2b_adapter_out_data), // .data + .in_channel (p2b_adapter_out_channel), // .channel + .in_startofpacket (p2b_adapter_out_startofpacket), // .startofpacket + .in_endofpacket (p2b_adapter_out_endofpacket), // .endofpacket + .out_ready (p2b_out_bytes_stream_ready), // out_bytes_stream.ready + .out_valid (p2b_out_bytes_stream_valid), // .valid + .out_data (p2b_out_bytes_stream_data) // .data + ); + + altera_avalon_packets_to_master #( + .FAST_VER (0), + .FIFO_DEPTHS (2), + .FIFO_WIDTHU (1) + ) transacto ( + .clk (clk_clk), // clk.clk + .reset_n (~rst_controller_reset_out_reset), // clk_reset.reset_n + .out_ready (transacto_out_stream_ready), // out_stream.ready + .out_valid (transacto_out_stream_valid), // .valid + .out_data (transacto_out_stream_data), // .data + .out_startofpacket (transacto_out_stream_startofpacket), // .startofpacket + .out_endofpacket (transacto_out_stream_endofpacket), // .endofpacket + .in_ready (b2p_adapter_out_ready), // in_stream.ready + .in_valid (b2p_adapter_out_valid), // .valid + .in_data (b2p_adapter_out_data), // .data + .in_startofpacket (b2p_adapter_out_startofpacket), // .startofpacket + .in_endofpacket (b2p_adapter_out_endofpacket), // .endofpacket + .address (master_address), // avalon_master.address + .readdata (master_readdata), // .readdata + .read (master_read), // .read + .write (master_write), // .write + .writedata (master_writedata), // .writedata + .waitrequest (master_waitrequest), // .waitrequest + .readdatavalid (master_readdatavalid), // .readdatavalid + .byteenable (master_byteenable) // .byteenable + ); + + jtag_io_master_0_b2p_adapter b2p_adapter ( + .clk (clk_clk), // clk.clk + .reset_n (~rst_controller_reset_out_reset), // reset.reset_n + .in_data (b2p_out_packets_stream_data), // in.data + .in_valid (b2p_out_packets_stream_valid), // .valid + .in_ready (b2p_out_packets_stream_ready), // .ready + .in_startofpacket (b2p_out_packets_stream_startofpacket), // .startofpacket + .in_endofpacket (b2p_out_packets_stream_endofpacket), // .endofpacket + .in_channel (b2p_out_packets_stream_channel), // .channel + .out_data (b2p_adapter_out_data), // out.data + .out_valid (b2p_adapter_out_valid), // .valid + .out_ready (b2p_adapter_out_ready), // .ready + .out_startofpacket (b2p_adapter_out_startofpacket), // .startofpacket + .out_endofpacket (b2p_adapter_out_endofpacket) // .endofpacket + ); + + jtag_io_master_0_p2b_adapter p2b_adapter ( + .clk (clk_clk), // clk.clk + .reset_n (~rst_controller_reset_out_reset), // reset.reset_n + .in_data (transacto_out_stream_data), // in.data + .in_valid (transacto_out_stream_valid), // .valid + .in_ready (transacto_out_stream_ready), // .ready + .in_startofpacket (transacto_out_stream_startofpacket), // .startofpacket + .in_endofpacket (transacto_out_stream_endofpacket), // .endofpacket + .out_data (p2b_adapter_out_data), // out.data + .out_valid (p2b_adapter_out_valid), // .valid + .out_ready (p2b_adapter_out_ready), // .ready + .out_startofpacket (p2b_adapter_out_startofpacket), // .startofpacket + .out_endofpacket (p2b_adapter_out_endofpacket), // .endofpacket + .out_channel (p2b_adapter_out_channel) // .channel + ); + + altera_reset_controller #( + .NUM_RESET_INPUTS (1), + .OUTPUT_RESET_SYNC_EDGES ("deassert"), + .SYNC_DEPTH (2), + .RESET_REQUEST_PRESENT (0), + .RESET_REQ_WAIT_TIME (1), + .MIN_RST_ASSERTION_TIME (3), + .RESET_REQ_EARLY_DSRT_TIME (1), + .USE_RESET_REQUEST_IN0 (0), + .USE_RESET_REQUEST_IN1 (0), + .USE_RESET_REQUEST_IN2 (0), + .USE_RESET_REQUEST_IN3 (0), + .USE_RESET_REQUEST_IN4 (0), + .USE_RESET_REQUEST_IN5 (0), + .USE_RESET_REQUEST_IN6 (0), + .USE_RESET_REQUEST_IN7 (0), + .USE_RESET_REQUEST_IN8 (0), + .USE_RESET_REQUEST_IN9 (0), + .USE_RESET_REQUEST_IN10 (0), + .USE_RESET_REQUEST_IN11 (0), + .USE_RESET_REQUEST_IN12 (0), + .USE_RESET_REQUEST_IN13 (0), + .USE_RESET_REQUEST_IN14 (0), + .USE_RESET_REQUEST_IN15 (0), + .ADAPT_RESET_REQUEST (0) + ) rst_controller ( + .reset_in0 (clk_reset_reset), // reset_in0.reset + .clk (clk_clk), // clk.clk + .reset_out (rst_controller_reset_out_reset), // reset_out.reset + .reset_req (), // (terminated) + .reset_req_in0 (1'b0), // (terminated) + .reset_in1 (1'b0), // (terminated) + .reset_req_in1 (1'b0), // (terminated) + .reset_in2 (1'b0), // (terminated) + .reset_req_in2 (1'b0), // (terminated) + .reset_in3 (1'b0), // (terminated) + .reset_req_in3 (1'b0), // (terminated) + .reset_in4 (1'b0), // (terminated) + .reset_req_in4 (1'b0), // (terminated) + .reset_in5 (1'b0), // (terminated) + .reset_req_in5 (1'b0), // (terminated) + .reset_in6 (1'b0), // (terminated) + .reset_req_in6 (1'b0), // (terminated) + .reset_in7 (1'b0), // (terminated) + .reset_req_in7 (1'b0), // (terminated) + .reset_in8 (1'b0), // (terminated) + .reset_req_in8 (1'b0), // (terminated) + .reset_in9 (1'b0), // (terminated) + .reset_req_in9 (1'b0), // (terminated) + .reset_in10 (1'b0), // (terminated) + .reset_req_in10 (1'b0), // (terminated) + .reset_in11 (1'b0), // (terminated) + .reset_req_in11 (1'b0), // (terminated) + .reset_in12 (1'b0), // (terminated) + .reset_req_in12 (1'b0), // (terminated) + .reset_in13 (1'b0), // (terminated) + .reset_req_in13 (1'b0), // (terminated) + .reset_in14 (1'b0), // (terminated) + .reset_req_in14 (1'b0), // (terminated) + .reset_in15 (1'b0), // (terminated) + .reset_req_in15 (1'b0) // (terminated) + ); + +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_master_0_b2p_adapter.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_master_0_b2p_adapter.sv new file mode 100755 index 0000000..946d558 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_master_0_b2p_adapter.sv @@ -0,0 +1,100 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// (C) 2001-2013 Altera Corporation. All rights reserved. +// Your use of Altera Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License Subscription +// Agreement, Altera MegaCore Function License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/13.1/ip/.../avalon-st_channel_adapter.sv.terp#1 $ +// $Revision: #1 $ +// $Date: 2013/09/09 $ +// $Author: dmunday $ + +// -------------------------------------------------------------------------------- +//| Avalon Streaming Channel Adapter +// -------------------------------------------------------------------------------- + +`timescale 1ns / 100ps + +// ------------------------------------------ +// Generation parameters: +// output_name: jtag_io_master_0_b2p_adapter +// in_channel_width: 8 +// in_max_channel: 255 +// out_channel_width: 0 +// out_max_channel: 0 +// data_width: 8 +// error_width: 0 +// use_ready: true +// use_packets: true +// use_empty: 0 +// empty_width: 0 + +// ------------------------------------------ + + +module jtag_io_master_0_b2p_adapter +( + // Interface: in + output reg in_ready, + input in_valid, + input [8-1: 0] in_data, + input [8-1: 0] in_channel, + input in_startofpacket, + input in_endofpacket, + // Interface: out + input out_ready, + output reg out_valid, + output reg [8-1: 0] out_data, + output reg out_startofpacket, + output reg out_endofpacket, + // Interface: clk + input clk, + // Interface: reset + input reset_n + + +); + + reg out_channel; + + // --------------------------------------------------------------------- + //| Payload Mapping + // --------------------------------------------------------------------- + always @* begin + in_ready = out_ready; + out_valid = in_valid; + out_data = in_data; + out_startofpacket = in_startofpacket; + out_endofpacket = in_endofpacket; + + out_channel = in_channel; //TODO delete this to avoid Quartus warnings + + // Suppress channels that are higher than the destination's max_channel. + if (in_channel > 0) begin + out_valid = 0; + // Simulation Message goes here. + end + end + +endmodule + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_master_0_p2b_adapter.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_master_0_p2b_adapter.sv new file mode 100755 index 0000000..0e38d3e --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_master_0_p2b_adapter.sv @@ -0,0 +1,96 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// (C) 2001-2013 Altera Corporation. All rights reserved. +// Your use of Altera Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License Subscription +// Agreement, Altera MegaCore Function License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/13.1/ip/.../avalon-st_channel_adapter.sv.terp#1 $ +// $Revision: #1 $ +// $Date: 2013/09/09 $ +// $Author: dmunday $ + +// -------------------------------------------------------------------------------- +//| Avalon Streaming Channel Adapter +// -------------------------------------------------------------------------------- + +`timescale 1ns / 100ps + +// ------------------------------------------ +// Generation parameters: +// output_name: jtag_io_master_0_p2b_adapter +// in_channel_width: 0 +// in_max_channel: 0 +// out_channel_width: 8 +// out_max_channel: 255 +// data_width: 8 +// error_width: 0 +// use_ready: true +// use_packets: true +// use_empty: 0 +// empty_width: 0 + +// ------------------------------------------ + + +module jtag_io_master_0_p2b_adapter +( + // Interface: in + output reg in_ready, + input in_valid, + input [8-1: 0] in_data, + input in_startofpacket, + input in_endofpacket, + // Interface: out + input out_ready, + output reg out_valid, + output reg [8-1: 0] out_data, + output reg [8-1: 0] out_channel, + output reg out_startofpacket, + output reg out_endofpacket, + // Interface: clk + input clk, + // Interface: reset + input reset_n + + +); + + reg in_channel = 0; + + // --------------------------------------------------------------------- + //| Payload Mapping + // --------------------------------------------------------------------- + always @* begin + in_ready = out_ready; + out_valid = in_valid; + out_data = in_data; + out_startofpacket = in_startofpacket; + out_endofpacket = in_endofpacket; + + out_channel = 0; + out_channel = in_channel; + + end + +endmodule + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_master_0_timing_adt.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_master_0_timing_adt.sv new file mode 100755 index 0000000..576e9a8 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_master_0_timing_adt.sv @@ -0,0 +1,112 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// (C) 2001-2013 Altera Corporation. All rights reserved. +// Your use of Altera Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License Subscription +// Agreement, Altera MegaCore Function License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/13.1/ip/.../avalon-st_timing_adapter.sv.terp#1 $ +// $Revision: #1 $ +// $Date: 2013/09/27 $ +// $Author: dmunday, korthner $ + +// -------------------------------------------------------------------------------- +//| Avalon Streaming Timing Adapter +// -------------------------------------------------------------------------------- + +`timescale 1ns / 100ps +// ------------------------------------------ +// Generation parameters: +// output_name: jtag_io_master_0_timing_adt +// in_use_ready: false +// out_use_ready: true +// in_use_valid: true +// out_use_valid: true +// use_packets: false +// use_empty: 0 +// empty_width: 0 +// data_width: 8 +// channel_width: 0 +// error_width: 0 +// in_ready_latency: 0 +// out_ready_latency: 0 +// in_payload_width: 8 +// out_payload_width: 8 +// in_payload_map: in_data +// out_payload_map: out_data +// ------------------------------------------ + + + +module jtag_io_master_0_timing_adt +( + input in_valid, + input [8-1: 0] in_data, + // Interface: out + input out_ready, + output reg out_valid, + output reg [8-1: 0] out_data, + // Interface: clk + input clk, + // Interface: reset + input reset_n + + /*AUTOARG*/); + + // --------------------------------------------------------------------- + //| Signal Declarations + // --------------------------------------------------------------------- + + reg [8-1:0] in_payload; + reg [8-1:0] out_payload; + reg [1-1:0] ready; + reg in_ready; + // synthesis translate_off + always @(negedge in_ready) begin + $display("%m: The downstream component is backpressuring by deasserting ready, but the upstream component can't be backpressured."); + end + // synthesis translate_on + + // --------------------------------------------------------------------- + //| Payload Mapping + // --------------------------------------------------------------------- + always @* begin + in_payload = {in_data}; + {out_data} = out_payload; + end + + // --------------------------------------------------------------------- + //| Ready & valid signals. + // --------------------------------------------------------------------- + always_comb begin + ready[0] = out_ready; + out_valid = in_valid; + out_payload = in_payload; + in_ready = ready[0]; + end + + + + +endmodule + + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0.v new file mode 100755 index 0000000..ce450d0 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0.v @@ -0,0 +1,1655 @@ +// jtag_io_mm_interconnect_0.v + +// This file was auto-generated from altera_mm_interconnect_hw.tcl. If you edit it your changes +// will probably be lost. +// +// Generated using ACDS version 20.1 711 + +`timescale 1 ps / 1 ps +module jtag_io_mm_interconnect_0 ( + input wire clk_0_clk_clk, // clk_0_clk.clk + input wire master_0_clk_reset_reset_bridge_in_reset_reset, // master_0_clk_reset_reset_bridge_in_reset.reset + input wire out0_reset_reset_bridge_in_reset_reset, // out0_reset_reset_bridge_in_reset.reset + input wire [31:0] master_0_master_address, // master_0_master.address + output wire master_0_master_waitrequest, // .waitrequest + input wire [3:0] master_0_master_byteenable, // .byteenable + input wire master_0_master_read, // .read + output wire [31:0] master_0_master_readdata, // .readdata + output wire master_0_master_readdatavalid, // .readdatavalid + input wire master_0_master_write, // .write + input wire [31:0] master_0_master_writedata, // .writedata + output wire [1:0] in0_s1_address, // in0_s1.address + input wire [31:0] in0_s1_readdata, // .readdata + output wire [1:0] in1_s1_address, // in1_s1.address + input wire [31:0] in1_s1_readdata, // .readdata + output wire [1:0] out0_s1_address, // out0_s1.address + output wire out0_s1_write, // .write + input wire [31:0] out0_s1_readdata, // .readdata + output wire [31:0] out0_s1_writedata, // .writedata + output wire out0_s1_chipselect, // .chipselect + output wire [1:0] out1_s1_address, // out1_s1.address + output wire out1_s1_write, // .write + input wire [31:0] out1_s1_readdata, // .readdata + output wire [31:0] out1_s1_writedata, // .writedata + output wire out1_s1_chipselect // .chipselect + ); + + wire master_0_master_translator_avalon_universal_master_0_waitrequest; // master_0_master_agent:av_waitrequest -> master_0_master_translator:uav_waitrequest + wire [31:0] master_0_master_translator_avalon_universal_master_0_readdata; // master_0_master_agent:av_readdata -> master_0_master_translator:uav_readdata + wire master_0_master_translator_avalon_universal_master_0_debugaccess; // master_0_master_translator:uav_debugaccess -> master_0_master_agent:av_debugaccess + wire [31:0] master_0_master_translator_avalon_universal_master_0_address; // master_0_master_translator:uav_address -> master_0_master_agent:av_address + wire master_0_master_translator_avalon_universal_master_0_read; // master_0_master_translator:uav_read -> master_0_master_agent:av_read + wire [3:0] master_0_master_translator_avalon_universal_master_0_byteenable; // master_0_master_translator:uav_byteenable -> master_0_master_agent:av_byteenable + wire master_0_master_translator_avalon_universal_master_0_readdatavalid; // master_0_master_agent:av_readdatavalid -> master_0_master_translator:uav_readdatavalid + wire master_0_master_translator_avalon_universal_master_0_lock; // master_0_master_translator:uav_lock -> master_0_master_agent:av_lock + wire master_0_master_translator_avalon_universal_master_0_write; // master_0_master_translator:uav_write -> master_0_master_agent:av_write + wire [31:0] master_0_master_translator_avalon_universal_master_0_writedata; // master_0_master_translator:uav_writedata -> master_0_master_agent:av_writedata + wire [2:0] master_0_master_translator_avalon_universal_master_0_burstcount; // master_0_master_translator:uav_burstcount -> master_0_master_agent:av_burstcount + wire [31:0] out0_s1_agent_m0_readdata; // out0_s1_translator:uav_readdata -> out0_s1_agent:m0_readdata + wire out0_s1_agent_m0_waitrequest; // out0_s1_translator:uav_waitrequest -> out0_s1_agent:m0_waitrequest + wire out0_s1_agent_m0_debugaccess; // out0_s1_agent:m0_debugaccess -> out0_s1_translator:uav_debugaccess + wire [31:0] out0_s1_agent_m0_address; // out0_s1_agent:m0_address -> out0_s1_translator:uav_address + wire [3:0] out0_s1_agent_m0_byteenable; // out0_s1_agent:m0_byteenable -> out0_s1_translator:uav_byteenable + wire out0_s1_agent_m0_read; // out0_s1_agent:m0_read -> out0_s1_translator:uav_read + wire out0_s1_agent_m0_readdatavalid; // out0_s1_translator:uav_readdatavalid -> out0_s1_agent:m0_readdatavalid + wire out0_s1_agent_m0_lock; // out0_s1_agent:m0_lock -> out0_s1_translator:uav_lock + wire [31:0] out0_s1_agent_m0_writedata; // out0_s1_agent:m0_writedata -> out0_s1_translator:uav_writedata + wire out0_s1_agent_m0_write; // out0_s1_agent:m0_write -> out0_s1_translator:uav_write + wire [2:0] out0_s1_agent_m0_burstcount; // out0_s1_agent:m0_burstcount -> out0_s1_translator:uav_burstcount + wire out0_s1_agent_rf_source_valid; // out0_s1_agent:rf_source_valid -> out0_s1_agent_rsp_fifo:in_valid + wire [104:0] out0_s1_agent_rf_source_data; // out0_s1_agent:rf_source_data -> out0_s1_agent_rsp_fifo:in_data + wire out0_s1_agent_rf_source_ready; // out0_s1_agent_rsp_fifo:in_ready -> out0_s1_agent:rf_source_ready + wire out0_s1_agent_rf_source_startofpacket; // out0_s1_agent:rf_source_startofpacket -> out0_s1_agent_rsp_fifo:in_startofpacket + wire out0_s1_agent_rf_source_endofpacket; // out0_s1_agent:rf_source_endofpacket -> out0_s1_agent_rsp_fifo:in_endofpacket + wire out0_s1_agent_rsp_fifo_out_valid; // out0_s1_agent_rsp_fifo:out_valid -> out0_s1_agent:rf_sink_valid + wire [104:0] out0_s1_agent_rsp_fifo_out_data; // out0_s1_agent_rsp_fifo:out_data -> out0_s1_agent:rf_sink_data + wire out0_s1_agent_rsp_fifo_out_ready; // out0_s1_agent:rf_sink_ready -> out0_s1_agent_rsp_fifo:out_ready + wire out0_s1_agent_rsp_fifo_out_startofpacket; // out0_s1_agent_rsp_fifo:out_startofpacket -> out0_s1_agent:rf_sink_startofpacket + wire out0_s1_agent_rsp_fifo_out_endofpacket; // out0_s1_agent_rsp_fifo:out_endofpacket -> out0_s1_agent:rf_sink_endofpacket + wire cmd_mux_src_valid; // cmd_mux:src_valid -> out0_s1_agent:cp_valid + wire [103:0] cmd_mux_src_data; // cmd_mux:src_data -> out0_s1_agent:cp_data + wire cmd_mux_src_ready; // out0_s1_agent:cp_ready -> cmd_mux:src_ready + wire [3:0] cmd_mux_src_channel; // cmd_mux:src_channel -> out0_s1_agent:cp_channel + wire cmd_mux_src_startofpacket; // cmd_mux:src_startofpacket -> out0_s1_agent:cp_startofpacket + wire cmd_mux_src_endofpacket; // cmd_mux:src_endofpacket -> out0_s1_agent:cp_endofpacket + wire [31:0] out1_s1_agent_m0_readdata; // out1_s1_translator:uav_readdata -> out1_s1_agent:m0_readdata + wire out1_s1_agent_m0_waitrequest; // out1_s1_translator:uav_waitrequest -> out1_s1_agent:m0_waitrequest + wire out1_s1_agent_m0_debugaccess; // out1_s1_agent:m0_debugaccess -> out1_s1_translator:uav_debugaccess + wire [31:0] out1_s1_agent_m0_address; // out1_s1_agent:m0_address -> out1_s1_translator:uav_address + wire [3:0] out1_s1_agent_m0_byteenable; // out1_s1_agent:m0_byteenable -> out1_s1_translator:uav_byteenable + wire out1_s1_agent_m0_read; // out1_s1_agent:m0_read -> out1_s1_translator:uav_read + wire out1_s1_agent_m0_readdatavalid; // out1_s1_translator:uav_readdatavalid -> out1_s1_agent:m0_readdatavalid + wire out1_s1_agent_m0_lock; // out1_s1_agent:m0_lock -> out1_s1_translator:uav_lock + wire [31:0] out1_s1_agent_m0_writedata; // out1_s1_agent:m0_writedata -> out1_s1_translator:uav_writedata + wire out1_s1_agent_m0_write; // out1_s1_agent:m0_write -> out1_s1_translator:uav_write + wire [2:0] out1_s1_agent_m0_burstcount; // out1_s1_agent:m0_burstcount -> out1_s1_translator:uav_burstcount + wire out1_s1_agent_rf_source_valid; // out1_s1_agent:rf_source_valid -> out1_s1_agent_rsp_fifo:in_valid + wire [104:0] out1_s1_agent_rf_source_data; // out1_s1_agent:rf_source_data -> out1_s1_agent_rsp_fifo:in_data + wire out1_s1_agent_rf_source_ready; // out1_s1_agent_rsp_fifo:in_ready -> out1_s1_agent:rf_source_ready + wire out1_s1_agent_rf_source_startofpacket; // out1_s1_agent:rf_source_startofpacket -> out1_s1_agent_rsp_fifo:in_startofpacket + wire out1_s1_agent_rf_source_endofpacket; // out1_s1_agent:rf_source_endofpacket -> out1_s1_agent_rsp_fifo:in_endofpacket + wire out1_s1_agent_rsp_fifo_out_valid; // out1_s1_agent_rsp_fifo:out_valid -> out1_s1_agent:rf_sink_valid + wire [104:0] out1_s1_agent_rsp_fifo_out_data; // out1_s1_agent_rsp_fifo:out_data -> out1_s1_agent:rf_sink_data + wire out1_s1_agent_rsp_fifo_out_ready; // out1_s1_agent:rf_sink_ready -> out1_s1_agent_rsp_fifo:out_ready + wire out1_s1_agent_rsp_fifo_out_startofpacket; // out1_s1_agent_rsp_fifo:out_startofpacket -> out1_s1_agent:rf_sink_startofpacket + wire out1_s1_agent_rsp_fifo_out_endofpacket; // out1_s1_agent_rsp_fifo:out_endofpacket -> out1_s1_agent:rf_sink_endofpacket + wire cmd_mux_001_src_valid; // cmd_mux_001:src_valid -> out1_s1_agent:cp_valid + wire [103:0] cmd_mux_001_src_data; // cmd_mux_001:src_data -> out1_s1_agent:cp_data + wire cmd_mux_001_src_ready; // out1_s1_agent:cp_ready -> cmd_mux_001:src_ready + wire [3:0] cmd_mux_001_src_channel; // cmd_mux_001:src_channel -> out1_s1_agent:cp_channel + wire cmd_mux_001_src_startofpacket; // cmd_mux_001:src_startofpacket -> out1_s1_agent:cp_startofpacket + wire cmd_mux_001_src_endofpacket; // cmd_mux_001:src_endofpacket -> out1_s1_agent:cp_endofpacket + wire [31:0] in0_s1_agent_m0_readdata; // in0_s1_translator:uav_readdata -> in0_s1_agent:m0_readdata + wire in0_s1_agent_m0_waitrequest; // in0_s1_translator:uav_waitrequest -> in0_s1_agent:m0_waitrequest + wire in0_s1_agent_m0_debugaccess; // in0_s1_agent:m0_debugaccess -> in0_s1_translator:uav_debugaccess + wire [31:0] in0_s1_agent_m0_address; // in0_s1_agent:m0_address -> in0_s1_translator:uav_address + wire [3:0] in0_s1_agent_m0_byteenable; // in0_s1_agent:m0_byteenable -> in0_s1_translator:uav_byteenable + wire in0_s1_agent_m0_read; // in0_s1_agent:m0_read -> in0_s1_translator:uav_read + wire in0_s1_agent_m0_readdatavalid; // in0_s1_translator:uav_readdatavalid -> in0_s1_agent:m0_readdatavalid + wire in0_s1_agent_m0_lock; // in0_s1_agent:m0_lock -> in0_s1_translator:uav_lock + wire [31:0] in0_s1_agent_m0_writedata; // in0_s1_agent:m0_writedata -> in0_s1_translator:uav_writedata + wire in0_s1_agent_m0_write; // in0_s1_agent:m0_write -> in0_s1_translator:uav_write + wire [2:0] in0_s1_agent_m0_burstcount; // in0_s1_agent:m0_burstcount -> in0_s1_translator:uav_burstcount + wire in0_s1_agent_rf_source_valid; // in0_s1_agent:rf_source_valid -> in0_s1_agent_rsp_fifo:in_valid + wire [104:0] in0_s1_agent_rf_source_data; // in0_s1_agent:rf_source_data -> in0_s1_agent_rsp_fifo:in_data + wire in0_s1_agent_rf_source_ready; // in0_s1_agent_rsp_fifo:in_ready -> in0_s1_agent:rf_source_ready + wire in0_s1_agent_rf_source_startofpacket; // in0_s1_agent:rf_source_startofpacket -> in0_s1_agent_rsp_fifo:in_startofpacket + wire in0_s1_agent_rf_source_endofpacket; // in0_s1_agent:rf_source_endofpacket -> in0_s1_agent_rsp_fifo:in_endofpacket + wire in0_s1_agent_rsp_fifo_out_valid; // in0_s1_agent_rsp_fifo:out_valid -> in0_s1_agent:rf_sink_valid + wire [104:0] in0_s1_agent_rsp_fifo_out_data; // in0_s1_agent_rsp_fifo:out_data -> in0_s1_agent:rf_sink_data + wire in0_s1_agent_rsp_fifo_out_ready; // in0_s1_agent:rf_sink_ready -> in0_s1_agent_rsp_fifo:out_ready + wire in0_s1_agent_rsp_fifo_out_startofpacket; // in0_s1_agent_rsp_fifo:out_startofpacket -> in0_s1_agent:rf_sink_startofpacket + wire in0_s1_agent_rsp_fifo_out_endofpacket; // in0_s1_agent_rsp_fifo:out_endofpacket -> in0_s1_agent:rf_sink_endofpacket + wire cmd_mux_002_src_valid; // cmd_mux_002:src_valid -> in0_s1_agent:cp_valid + wire [103:0] cmd_mux_002_src_data; // cmd_mux_002:src_data -> in0_s1_agent:cp_data + wire cmd_mux_002_src_ready; // in0_s1_agent:cp_ready -> cmd_mux_002:src_ready + wire [3:0] cmd_mux_002_src_channel; // cmd_mux_002:src_channel -> in0_s1_agent:cp_channel + wire cmd_mux_002_src_startofpacket; // cmd_mux_002:src_startofpacket -> in0_s1_agent:cp_startofpacket + wire cmd_mux_002_src_endofpacket; // cmd_mux_002:src_endofpacket -> in0_s1_agent:cp_endofpacket + wire [31:0] in1_s1_agent_m0_readdata; // in1_s1_translator:uav_readdata -> in1_s1_agent:m0_readdata + wire in1_s1_agent_m0_waitrequest; // in1_s1_translator:uav_waitrequest -> in1_s1_agent:m0_waitrequest + wire in1_s1_agent_m0_debugaccess; // in1_s1_agent:m0_debugaccess -> in1_s1_translator:uav_debugaccess + wire [31:0] in1_s1_agent_m0_address; // in1_s1_agent:m0_address -> in1_s1_translator:uav_address + wire [3:0] in1_s1_agent_m0_byteenable; // in1_s1_agent:m0_byteenable -> in1_s1_translator:uav_byteenable + wire in1_s1_agent_m0_read; // in1_s1_agent:m0_read -> in1_s1_translator:uav_read + wire in1_s1_agent_m0_readdatavalid; // in1_s1_translator:uav_readdatavalid -> in1_s1_agent:m0_readdatavalid + wire in1_s1_agent_m0_lock; // in1_s1_agent:m0_lock -> in1_s1_translator:uav_lock + wire [31:0] in1_s1_agent_m0_writedata; // in1_s1_agent:m0_writedata -> in1_s1_translator:uav_writedata + wire in1_s1_agent_m0_write; // in1_s1_agent:m0_write -> in1_s1_translator:uav_write + wire [2:0] in1_s1_agent_m0_burstcount; // in1_s1_agent:m0_burstcount -> in1_s1_translator:uav_burstcount + wire in1_s1_agent_rf_source_valid; // in1_s1_agent:rf_source_valid -> in1_s1_agent_rsp_fifo:in_valid + wire [104:0] in1_s1_agent_rf_source_data; // in1_s1_agent:rf_source_data -> in1_s1_agent_rsp_fifo:in_data + wire in1_s1_agent_rf_source_ready; // in1_s1_agent_rsp_fifo:in_ready -> in1_s1_agent:rf_source_ready + wire in1_s1_agent_rf_source_startofpacket; // in1_s1_agent:rf_source_startofpacket -> in1_s1_agent_rsp_fifo:in_startofpacket + wire in1_s1_agent_rf_source_endofpacket; // in1_s1_agent:rf_source_endofpacket -> in1_s1_agent_rsp_fifo:in_endofpacket + wire in1_s1_agent_rsp_fifo_out_valid; // in1_s1_agent_rsp_fifo:out_valid -> in1_s1_agent:rf_sink_valid + wire [104:0] in1_s1_agent_rsp_fifo_out_data; // in1_s1_agent_rsp_fifo:out_data -> in1_s1_agent:rf_sink_data + wire in1_s1_agent_rsp_fifo_out_ready; // in1_s1_agent:rf_sink_ready -> in1_s1_agent_rsp_fifo:out_ready + wire in1_s1_agent_rsp_fifo_out_startofpacket; // in1_s1_agent_rsp_fifo:out_startofpacket -> in1_s1_agent:rf_sink_startofpacket + wire in1_s1_agent_rsp_fifo_out_endofpacket; // in1_s1_agent_rsp_fifo:out_endofpacket -> in1_s1_agent:rf_sink_endofpacket + wire cmd_mux_003_src_valid; // cmd_mux_003:src_valid -> in1_s1_agent:cp_valid + wire [103:0] cmd_mux_003_src_data; // cmd_mux_003:src_data -> in1_s1_agent:cp_data + wire cmd_mux_003_src_ready; // in1_s1_agent:cp_ready -> cmd_mux_003:src_ready + wire [3:0] cmd_mux_003_src_channel; // cmd_mux_003:src_channel -> in1_s1_agent:cp_channel + wire cmd_mux_003_src_startofpacket; // cmd_mux_003:src_startofpacket -> in1_s1_agent:cp_startofpacket + wire cmd_mux_003_src_endofpacket; // cmd_mux_003:src_endofpacket -> in1_s1_agent:cp_endofpacket + wire master_0_master_agent_cp_valid; // master_0_master_agent:cp_valid -> router:sink_valid + wire [103:0] master_0_master_agent_cp_data; // master_0_master_agent:cp_data -> router:sink_data + wire master_0_master_agent_cp_ready; // router:sink_ready -> master_0_master_agent:cp_ready + wire master_0_master_agent_cp_startofpacket; // master_0_master_agent:cp_startofpacket -> router:sink_startofpacket + wire master_0_master_agent_cp_endofpacket; // master_0_master_agent:cp_endofpacket -> router:sink_endofpacket + wire out0_s1_agent_rp_valid; // out0_s1_agent:rp_valid -> router_001:sink_valid + wire [103:0] out0_s1_agent_rp_data; // out0_s1_agent:rp_data -> router_001:sink_data + wire out0_s1_agent_rp_ready; // router_001:sink_ready -> out0_s1_agent:rp_ready + wire out0_s1_agent_rp_startofpacket; // out0_s1_agent:rp_startofpacket -> router_001:sink_startofpacket + wire out0_s1_agent_rp_endofpacket; // out0_s1_agent:rp_endofpacket -> router_001:sink_endofpacket + wire router_001_src_valid; // router_001:src_valid -> rsp_demux:sink_valid + wire [103:0] router_001_src_data; // router_001:src_data -> rsp_demux:sink_data + wire router_001_src_ready; // rsp_demux:sink_ready -> router_001:src_ready + wire [3:0] router_001_src_channel; // router_001:src_channel -> rsp_demux:sink_channel + wire router_001_src_startofpacket; // router_001:src_startofpacket -> rsp_demux:sink_startofpacket + wire router_001_src_endofpacket; // router_001:src_endofpacket -> rsp_demux:sink_endofpacket + wire out1_s1_agent_rp_valid; // out1_s1_agent:rp_valid -> router_002:sink_valid + wire [103:0] out1_s1_agent_rp_data; // out1_s1_agent:rp_data -> router_002:sink_data + wire out1_s1_agent_rp_ready; // router_002:sink_ready -> out1_s1_agent:rp_ready + wire out1_s1_agent_rp_startofpacket; // out1_s1_agent:rp_startofpacket -> router_002:sink_startofpacket + wire out1_s1_agent_rp_endofpacket; // out1_s1_agent:rp_endofpacket -> router_002:sink_endofpacket + wire router_002_src_valid; // router_002:src_valid -> rsp_demux_001:sink_valid + wire [103:0] router_002_src_data; // router_002:src_data -> rsp_demux_001:sink_data + wire router_002_src_ready; // rsp_demux_001:sink_ready -> router_002:src_ready + wire [3:0] router_002_src_channel; // router_002:src_channel -> rsp_demux_001:sink_channel + wire router_002_src_startofpacket; // router_002:src_startofpacket -> rsp_demux_001:sink_startofpacket + wire router_002_src_endofpacket; // router_002:src_endofpacket -> rsp_demux_001:sink_endofpacket + wire in0_s1_agent_rp_valid; // in0_s1_agent:rp_valid -> router_003:sink_valid + wire [103:0] in0_s1_agent_rp_data; // in0_s1_agent:rp_data -> router_003:sink_data + wire in0_s1_agent_rp_ready; // router_003:sink_ready -> in0_s1_agent:rp_ready + wire in0_s1_agent_rp_startofpacket; // in0_s1_agent:rp_startofpacket -> router_003:sink_startofpacket + wire in0_s1_agent_rp_endofpacket; // in0_s1_agent:rp_endofpacket -> router_003:sink_endofpacket + wire router_003_src_valid; // router_003:src_valid -> rsp_demux_002:sink_valid + wire [103:0] router_003_src_data; // router_003:src_data -> rsp_demux_002:sink_data + wire router_003_src_ready; // rsp_demux_002:sink_ready -> router_003:src_ready + wire [3:0] router_003_src_channel; // router_003:src_channel -> rsp_demux_002:sink_channel + wire router_003_src_startofpacket; // router_003:src_startofpacket -> rsp_demux_002:sink_startofpacket + wire router_003_src_endofpacket; // router_003:src_endofpacket -> rsp_demux_002:sink_endofpacket + wire in1_s1_agent_rp_valid; // in1_s1_agent:rp_valid -> router_004:sink_valid + wire [103:0] in1_s1_agent_rp_data; // in1_s1_agent:rp_data -> router_004:sink_data + wire in1_s1_agent_rp_ready; // router_004:sink_ready -> in1_s1_agent:rp_ready + wire in1_s1_agent_rp_startofpacket; // in1_s1_agent:rp_startofpacket -> router_004:sink_startofpacket + wire in1_s1_agent_rp_endofpacket; // in1_s1_agent:rp_endofpacket -> router_004:sink_endofpacket + wire router_004_src_valid; // router_004:src_valid -> rsp_demux_003:sink_valid + wire [103:0] router_004_src_data; // router_004:src_data -> rsp_demux_003:sink_data + wire router_004_src_ready; // rsp_demux_003:sink_ready -> router_004:src_ready + wire [3:0] router_004_src_channel; // router_004:src_channel -> rsp_demux_003:sink_channel + wire router_004_src_startofpacket; // router_004:src_startofpacket -> rsp_demux_003:sink_startofpacket + wire router_004_src_endofpacket; // router_004:src_endofpacket -> rsp_demux_003:sink_endofpacket + wire router_src_valid; // router:src_valid -> master_0_master_limiter:cmd_sink_valid + wire [103:0] router_src_data; // router:src_data -> master_0_master_limiter:cmd_sink_data + wire router_src_ready; // master_0_master_limiter:cmd_sink_ready -> router:src_ready + wire [3:0] router_src_channel; // router:src_channel -> master_0_master_limiter:cmd_sink_channel + wire router_src_startofpacket; // router:src_startofpacket -> master_0_master_limiter:cmd_sink_startofpacket + wire router_src_endofpacket; // router:src_endofpacket -> master_0_master_limiter:cmd_sink_endofpacket + wire [103:0] master_0_master_limiter_cmd_src_data; // master_0_master_limiter:cmd_src_data -> cmd_demux:sink_data + wire master_0_master_limiter_cmd_src_ready; // cmd_demux:sink_ready -> master_0_master_limiter:cmd_src_ready + wire [3:0] master_0_master_limiter_cmd_src_channel; // master_0_master_limiter:cmd_src_channel -> cmd_demux:sink_channel + wire master_0_master_limiter_cmd_src_startofpacket; // master_0_master_limiter:cmd_src_startofpacket -> cmd_demux:sink_startofpacket + wire master_0_master_limiter_cmd_src_endofpacket; // master_0_master_limiter:cmd_src_endofpacket -> cmd_demux:sink_endofpacket + wire rsp_mux_src_valid; // rsp_mux:src_valid -> master_0_master_limiter:rsp_sink_valid + wire [103:0] rsp_mux_src_data; // rsp_mux:src_data -> master_0_master_limiter:rsp_sink_data + wire rsp_mux_src_ready; // master_0_master_limiter:rsp_sink_ready -> rsp_mux:src_ready + wire [3:0] rsp_mux_src_channel; // rsp_mux:src_channel -> master_0_master_limiter:rsp_sink_channel + wire rsp_mux_src_startofpacket; // rsp_mux:src_startofpacket -> master_0_master_limiter:rsp_sink_startofpacket + wire rsp_mux_src_endofpacket; // rsp_mux:src_endofpacket -> master_0_master_limiter:rsp_sink_endofpacket + wire master_0_master_limiter_rsp_src_valid; // master_0_master_limiter:rsp_src_valid -> master_0_master_agent:rp_valid + wire [103:0] master_0_master_limiter_rsp_src_data; // master_0_master_limiter:rsp_src_data -> master_0_master_agent:rp_data + wire master_0_master_limiter_rsp_src_ready; // master_0_master_agent:rp_ready -> master_0_master_limiter:rsp_src_ready + wire [3:0] master_0_master_limiter_rsp_src_channel; // master_0_master_limiter:rsp_src_channel -> master_0_master_agent:rp_channel + wire master_0_master_limiter_rsp_src_startofpacket; // master_0_master_limiter:rsp_src_startofpacket -> master_0_master_agent:rp_startofpacket + wire master_0_master_limiter_rsp_src_endofpacket; // master_0_master_limiter:rsp_src_endofpacket -> master_0_master_agent:rp_endofpacket + wire cmd_demux_src0_valid; // cmd_demux:src0_valid -> cmd_mux:sink0_valid + wire [103:0] cmd_demux_src0_data; // cmd_demux:src0_data -> cmd_mux:sink0_data + wire cmd_demux_src0_ready; // cmd_mux:sink0_ready -> cmd_demux:src0_ready + wire [3:0] cmd_demux_src0_channel; // cmd_demux:src0_channel -> cmd_mux:sink0_channel + wire cmd_demux_src0_startofpacket; // cmd_demux:src0_startofpacket -> cmd_mux:sink0_startofpacket + wire cmd_demux_src0_endofpacket; // cmd_demux:src0_endofpacket -> cmd_mux:sink0_endofpacket + wire cmd_demux_src1_valid; // cmd_demux:src1_valid -> cmd_mux_001:sink0_valid + wire [103:0] cmd_demux_src1_data; // cmd_demux:src1_data -> cmd_mux_001:sink0_data + wire cmd_demux_src1_ready; // cmd_mux_001:sink0_ready -> cmd_demux:src1_ready + wire [3:0] cmd_demux_src1_channel; // cmd_demux:src1_channel -> cmd_mux_001:sink0_channel + wire cmd_demux_src1_startofpacket; // cmd_demux:src1_startofpacket -> cmd_mux_001:sink0_startofpacket + wire cmd_demux_src1_endofpacket; // cmd_demux:src1_endofpacket -> cmd_mux_001:sink0_endofpacket + wire cmd_demux_src2_valid; // cmd_demux:src2_valid -> cmd_mux_002:sink0_valid + wire [103:0] cmd_demux_src2_data; // cmd_demux:src2_data -> cmd_mux_002:sink0_data + wire cmd_demux_src2_ready; // cmd_mux_002:sink0_ready -> cmd_demux:src2_ready + wire [3:0] cmd_demux_src2_channel; // cmd_demux:src2_channel -> cmd_mux_002:sink0_channel + wire cmd_demux_src2_startofpacket; // cmd_demux:src2_startofpacket -> cmd_mux_002:sink0_startofpacket + wire cmd_demux_src2_endofpacket; // cmd_demux:src2_endofpacket -> cmd_mux_002:sink0_endofpacket + wire cmd_demux_src3_valid; // cmd_demux:src3_valid -> cmd_mux_003:sink0_valid + wire [103:0] cmd_demux_src3_data; // cmd_demux:src3_data -> cmd_mux_003:sink0_data + wire cmd_demux_src3_ready; // cmd_mux_003:sink0_ready -> cmd_demux:src3_ready + wire [3:0] cmd_demux_src3_channel; // cmd_demux:src3_channel -> cmd_mux_003:sink0_channel + wire cmd_demux_src3_startofpacket; // cmd_demux:src3_startofpacket -> cmd_mux_003:sink0_startofpacket + wire cmd_demux_src3_endofpacket; // cmd_demux:src3_endofpacket -> cmd_mux_003:sink0_endofpacket + wire rsp_demux_src0_valid; // rsp_demux:src0_valid -> rsp_mux:sink0_valid + wire [103:0] rsp_demux_src0_data; // rsp_demux:src0_data -> rsp_mux:sink0_data + wire rsp_demux_src0_ready; // rsp_mux:sink0_ready -> rsp_demux:src0_ready + wire [3:0] rsp_demux_src0_channel; // rsp_demux:src0_channel -> rsp_mux:sink0_channel + wire rsp_demux_src0_startofpacket; // rsp_demux:src0_startofpacket -> rsp_mux:sink0_startofpacket + wire rsp_demux_src0_endofpacket; // rsp_demux:src0_endofpacket -> rsp_mux:sink0_endofpacket + wire rsp_demux_001_src0_valid; // rsp_demux_001:src0_valid -> rsp_mux:sink1_valid + wire [103:0] rsp_demux_001_src0_data; // rsp_demux_001:src0_data -> rsp_mux:sink1_data + wire rsp_demux_001_src0_ready; // rsp_mux:sink1_ready -> rsp_demux_001:src0_ready + wire [3:0] rsp_demux_001_src0_channel; // rsp_demux_001:src0_channel -> rsp_mux:sink1_channel + wire rsp_demux_001_src0_startofpacket; // rsp_demux_001:src0_startofpacket -> rsp_mux:sink1_startofpacket + wire rsp_demux_001_src0_endofpacket; // rsp_demux_001:src0_endofpacket -> rsp_mux:sink1_endofpacket + wire rsp_demux_002_src0_valid; // rsp_demux_002:src0_valid -> rsp_mux:sink2_valid + wire [103:0] rsp_demux_002_src0_data; // rsp_demux_002:src0_data -> rsp_mux:sink2_data + wire rsp_demux_002_src0_ready; // rsp_mux:sink2_ready -> rsp_demux_002:src0_ready + wire [3:0] rsp_demux_002_src0_channel; // rsp_demux_002:src0_channel -> rsp_mux:sink2_channel + wire rsp_demux_002_src0_startofpacket; // rsp_demux_002:src0_startofpacket -> rsp_mux:sink2_startofpacket + wire rsp_demux_002_src0_endofpacket; // rsp_demux_002:src0_endofpacket -> rsp_mux:sink2_endofpacket + wire rsp_demux_003_src0_valid; // rsp_demux_003:src0_valid -> rsp_mux:sink3_valid + wire [103:0] rsp_demux_003_src0_data; // rsp_demux_003:src0_data -> rsp_mux:sink3_data + wire rsp_demux_003_src0_ready; // rsp_mux:sink3_ready -> rsp_demux_003:src0_ready + wire [3:0] rsp_demux_003_src0_channel; // rsp_demux_003:src0_channel -> rsp_mux:sink3_channel + wire rsp_demux_003_src0_startofpacket; // rsp_demux_003:src0_startofpacket -> rsp_mux:sink3_startofpacket + wire rsp_demux_003_src0_endofpacket; // rsp_demux_003:src0_endofpacket -> rsp_mux:sink3_endofpacket + wire [3:0] master_0_master_limiter_cmd_valid_data; // master_0_master_limiter:cmd_src_valid -> cmd_demux:sink_valid + wire out0_s1_agent_rdata_fifo_src_valid; // out0_s1_agent:rdata_fifo_src_valid -> avalon_st_adapter:in_0_valid + wire [33:0] out0_s1_agent_rdata_fifo_src_data; // out0_s1_agent:rdata_fifo_src_data -> avalon_st_adapter:in_0_data + wire out0_s1_agent_rdata_fifo_src_ready; // avalon_st_adapter:in_0_ready -> out0_s1_agent:rdata_fifo_src_ready + wire avalon_st_adapter_out_0_valid; // avalon_st_adapter:out_0_valid -> out0_s1_agent:rdata_fifo_sink_valid + wire [33:0] avalon_st_adapter_out_0_data; // avalon_st_adapter:out_0_data -> out0_s1_agent:rdata_fifo_sink_data + wire avalon_st_adapter_out_0_ready; // out0_s1_agent:rdata_fifo_sink_ready -> avalon_st_adapter:out_0_ready + wire [0:0] avalon_st_adapter_out_0_error; // avalon_st_adapter:out_0_error -> out0_s1_agent:rdata_fifo_sink_error + wire out1_s1_agent_rdata_fifo_src_valid; // out1_s1_agent:rdata_fifo_src_valid -> avalon_st_adapter_001:in_0_valid + wire [33:0] out1_s1_agent_rdata_fifo_src_data; // out1_s1_agent:rdata_fifo_src_data -> avalon_st_adapter_001:in_0_data + wire out1_s1_agent_rdata_fifo_src_ready; // avalon_st_adapter_001:in_0_ready -> out1_s1_agent:rdata_fifo_src_ready + wire avalon_st_adapter_001_out_0_valid; // avalon_st_adapter_001:out_0_valid -> out1_s1_agent:rdata_fifo_sink_valid + wire [33:0] avalon_st_adapter_001_out_0_data; // avalon_st_adapter_001:out_0_data -> out1_s1_agent:rdata_fifo_sink_data + wire avalon_st_adapter_001_out_0_ready; // out1_s1_agent:rdata_fifo_sink_ready -> avalon_st_adapter_001:out_0_ready + wire [0:0] avalon_st_adapter_001_out_0_error; // avalon_st_adapter_001:out_0_error -> out1_s1_agent:rdata_fifo_sink_error + wire in0_s1_agent_rdata_fifo_src_valid; // in0_s1_agent:rdata_fifo_src_valid -> avalon_st_adapter_002:in_0_valid + wire [33:0] in0_s1_agent_rdata_fifo_src_data; // in0_s1_agent:rdata_fifo_src_data -> avalon_st_adapter_002:in_0_data + wire in0_s1_agent_rdata_fifo_src_ready; // avalon_st_adapter_002:in_0_ready -> in0_s1_agent:rdata_fifo_src_ready + wire avalon_st_adapter_002_out_0_valid; // avalon_st_adapter_002:out_0_valid -> in0_s1_agent:rdata_fifo_sink_valid + wire [33:0] avalon_st_adapter_002_out_0_data; // avalon_st_adapter_002:out_0_data -> in0_s1_agent:rdata_fifo_sink_data + wire avalon_st_adapter_002_out_0_ready; // in0_s1_agent:rdata_fifo_sink_ready -> avalon_st_adapter_002:out_0_ready + wire [0:0] avalon_st_adapter_002_out_0_error; // avalon_st_adapter_002:out_0_error -> in0_s1_agent:rdata_fifo_sink_error + wire in1_s1_agent_rdata_fifo_src_valid; // in1_s1_agent:rdata_fifo_src_valid -> avalon_st_adapter_003:in_0_valid + wire [33:0] in1_s1_agent_rdata_fifo_src_data; // in1_s1_agent:rdata_fifo_src_data -> avalon_st_adapter_003:in_0_data + wire in1_s1_agent_rdata_fifo_src_ready; // avalon_st_adapter_003:in_0_ready -> in1_s1_agent:rdata_fifo_src_ready + wire avalon_st_adapter_003_out_0_valid; // avalon_st_adapter_003:out_0_valid -> in1_s1_agent:rdata_fifo_sink_valid + wire [33:0] avalon_st_adapter_003_out_0_data; // avalon_st_adapter_003:out_0_data -> in1_s1_agent:rdata_fifo_sink_data + wire avalon_st_adapter_003_out_0_ready; // in1_s1_agent:rdata_fifo_sink_ready -> avalon_st_adapter_003:out_0_ready + wire [0:0] avalon_st_adapter_003_out_0_error; // avalon_st_adapter_003:out_0_error -> in1_s1_agent:rdata_fifo_sink_error + + altera_merlin_master_translator #( + .AV_ADDRESS_W (32), + .AV_DATA_W (32), + .AV_BURSTCOUNT_W (1), + .AV_BYTEENABLE_W (4), + .UAV_ADDRESS_W (32), + .UAV_BURSTCOUNT_W (3), + .USE_READ (1), + .USE_WRITE (1), + .USE_BEGINBURSTTRANSFER (0), + .USE_BEGINTRANSFER (0), + .USE_CHIPSELECT (0), + .USE_BURSTCOUNT (0), + .USE_READDATAVALID (1), + .USE_WAITREQUEST (1), + .USE_READRESPONSE (0), + .USE_WRITERESPONSE (0), + .AV_SYMBOLS_PER_WORD (4), + .AV_ADDRESS_SYMBOLS (1), + .AV_BURSTCOUNT_SYMBOLS (0), + .AV_CONSTANT_BURST_BEHAVIOR (0), + .UAV_CONSTANT_BURST_BEHAVIOR (0), + .AV_LINEWRAPBURSTS (0), + .AV_REGISTERINCOMINGSIGNALS (0) + ) master_0_master_translator ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // reset.reset + .uav_address (master_0_master_translator_avalon_universal_master_0_address), // avalon_universal_master_0.address + .uav_burstcount (master_0_master_translator_avalon_universal_master_0_burstcount), // .burstcount + .uav_read (master_0_master_translator_avalon_universal_master_0_read), // .read + .uav_write (master_0_master_translator_avalon_universal_master_0_write), // .write + .uav_waitrequest (master_0_master_translator_avalon_universal_master_0_waitrequest), // .waitrequest + .uav_readdatavalid (master_0_master_translator_avalon_universal_master_0_readdatavalid), // .readdatavalid + .uav_byteenable (master_0_master_translator_avalon_universal_master_0_byteenable), // .byteenable + .uav_readdata (master_0_master_translator_avalon_universal_master_0_readdata), // .readdata + .uav_writedata (master_0_master_translator_avalon_universal_master_0_writedata), // .writedata + .uav_lock (master_0_master_translator_avalon_universal_master_0_lock), // .lock + .uav_debugaccess (master_0_master_translator_avalon_universal_master_0_debugaccess), // .debugaccess + .av_address (master_0_master_address), // avalon_anti_master_0.address + .av_waitrequest (master_0_master_waitrequest), // .waitrequest + .av_byteenable (master_0_master_byteenable), // .byteenable + .av_read (master_0_master_read), // .read + .av_readdata (master_0_master_readdata), // .readdata + .av_readdatavalid (master_0_master_readdatavalid), // .readdatavalid + .av_write (master_0_master_write), // .write + .av_writedata (master_0_master_writedata), // .writedata + .av_burstcount (1'b1), // (terminated) + .av_beginbursttransfer (1'b0), // (terminated) + .av_begintransfer (1'b0), // (terminated) + .av_chipselect (1'b0), // (terminated) + .av_lock (1'b0), // (terminated) + .av_debugaccess (1'b0), // (terminated) + .uav_clken (), // (terminated) + .av_clken (1'b1), // (terminated) + .uav_response (2'b00), // (terminated) + .av_response (), // (terminated) + .uav_writeresponsevalid (1'b0), // (terminated) + .av_writeresponsevalid () // (terminated) + ); + + altera_merlin_slave_translator #( + .AV_ADDRESS_W (2), + .AV_DATA_W (32), + .UAV_DATA_W (32), + .AV_BURSTCOUNT_W (1), + .AV_BYTEENABLE_W (1), + .UAV_BYTEENABLE_W (4), + .UAV_ADDRESS_W (32), + .UAV_BURSTCOUNT_W (3), + .AV_READLATENCY (0), + .USE_READDATAVALID (0), + .USE_WAITREQUEST (0), + .USE_UAV_CLKEN (0), + .USE_READRESPONSE (0), + .USE_WRITERESPONSE (0), + .AV_SYMBOLS_PER_WORD (4), + .AV_ADDRESS_SYMBOLS (0), + .AV_BURSTCOUNT_SYMBOLS (0), + .AV_CONSTANT_BURST_BEHAVIOR (0), + .UAV_CONSTANT_BURST_BEHAVIOR (0), + .AV_REQUIRE_UNALIGNED_ADDRESSES (0), + .CHIPSELECT_THROUGH_READLATENCY (0), + .AV_READ_WAIT_CYCLES (1), + .AV_WRITE_WAIT_CYCLES (0), + .AV_SETUP_WAIT_CYCLES (0), + .AV_DATA_HOLD_CYCLES (0) + ) out0_s1_translator ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // reset.reset + .uav_address (out0_s1_agent_m0_address), // avalon_universal_slave_0.address + .uav_burstcount (out0_s1_agent_m0_burstcount), // .burstcount + .uav_read (out0_s1_agent_m0_read), // .read + .uav_write (out0_s1_agent_m0_write), // .write + .uav_waitrequest (out0_s1_agent_m0_waitrequest), // .waitrequest + .uav_readdatavalid (out0_s1_agent_m0_readdatavalid), // .readdatavalid + .uav_byteenable (out0_s1_agent_m0_byteenable), // .byteenable + .uav_readdata (out0_s1_agent_m0_readdata), // .readdata + .uav_writedata (out0_s1_agent_m0_writedata), // .writedata + .uav_lock (out0_s1_agent_m0_lock), // .lock + .uav_debugaccess (out0_s1_agent_m0_debugaccess), // .debugaccess + .av_address (out0_s1_address), // avalon_anti_slave_0.address + .av_write (out0_s1_write), // .write + .av_readdata (out0_s1_readdata), // .readdata + .av_writedata (out0_s1_writedata), // .writedata + .av_chipselect (out0_s1_chipselect), // .chipselect + .av_read (), // (terminated) + .av_begintransfer (), // (terminated) + .av_beginbursttransfer (), // (terminated) + .av_burstcount (), // (terminated) + .av_byteenable (), // (terminated) + .av_readdatavalid (1'b0), // (terminated) + .av_waitrequest (1'b0), // (terminated) + .av_writebyteenable (), // (terminated) + .av_lock (), // (terminated) + .av_clken (), // (terminated) + .uav_clken (1'b0), // (terminated) + .av_debugaccess (), // (terminated) + .av_outputenable (), // (terminated) + .uav_response (), // (terminated) + .av_response (2'b00), // (terminated) + .uav_writeresponsevalid (), // (terminated) + .av_writeresponsevalid (1'b0) // (terminated) + ); + + altera_merlin_slave_translator #( + .AV_ADDRESS_W (2), + .AV_DATA_W (32), + .UAV_DATA_W (32), + .AV_BURSTCOUNT_W (1), + .AV_BYTEENABLE_W (1), + .UAV_BYTEENABLE_W (4), + .UAV_ADDRESS_W (32), + .UAV_BURSTCOUNT_W (3), + .AV_READLATENCY (0), + .USE_READDATAVALID (0), + .USE_WAITREQUEST (0), + .USE_UAV_CLKEN (0), + .USE_READRESPONSE (0), + .USE_WRITERESPONSE (0), + .AV_SYMBOLS_PER_WORD (4), + .AV_ADDRESS_SYMBOLS (0), + .AV_BURSTCOUNT_SYMBOLS (0), + .AV_CONSTANT_BURST_BEHAVIOR (0), + .UAV_CONSTANT_BURST_BEHAVIOR (0), + .AV_REQUIRE_UNALIGNED_ADDRESSES (0), + .CHIPSELECT_THROUGH_READLATENCY (0), + .AV_READ_WAIT_CYCLES (1), + .AV_WRITE_WAIT_CYCLES (0), + .AV_SETUP_WAIT_CYCLES (0), + .AV_DATA_HOLD_CYCLES (0) + ) out1_s1_translator ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // reset.reset + .uav_address (out1_s1_agent_m0_address), // avalon_universal_slave_0.address + .uav_burstcount (out1_s1_agent_m0_burstcount), // .burstcount + .uav_read (out1_s1_agent_m0_read), // .read + .uav_write (out1_s1_agent_m0_write), // .write + .uav_waitrequest (out1_s1_agent_m0_waitrequest), // .waitrequest + .uav_readdatavalid (out1_s1_agent_m0_readdatavalid), // .readdatavalid + .uav_byteenable (out1_s1_agent_m0_byteenable), // .byteenable + .uav_readdata (out1_s1_agent_m0_readdata), // .readdata + .uav_writedata (out1_s1_agent_m0_writedata), // .writedata + .uav_lock (out1_s1_agent_m0_lock), // .lock + .uav_debugaccess (out1_s1_agent_m0_debugaccess), // .debugaccess + .av_address (out1_s1_address), // avalon_anti_slave_0.address + .av_write (out1_s1_write), // .write + .av_readdata (out1_s1_readdata), // .readdata + .av_writedata (out1_s1_writedata), // .writedata + .av_chipselect (out1_s1_chipselect), // .chipselect + .av_read (), // (terminated) + .av_begintransfer (), // (terminated) + .av_beginbursttransfer (), // (terminated) + .av_burstcount (), // (terminated) + .av_byteenable (), // (terminated) + .av_readdatavalid (1'b0), // (terminated) + .av_waitrequest (1'b0), // (terminated) + .av_writebyteenable (), // (terminated) + .av_lock (), // (terminated) + .av_clken (), // (terminated) + .uav_clken (1'b0), // (terminated) + .av_debugaccess (), // (terminated) + .av_outputenable (), // (terminated) + .uav_response (), // (terminated) + .av_response (2'b00), // (terminated) + .uav_writeresponsevalid (), // (terminated) + .av_writeresponsevalid (1'b0) // (terminated) + ); + + altera_merlin_slave_translator #( + .AV_ADDRESS_W (2), + .AV_DATA_W (32), + .UAV_DATA_W (32), + .AV_BURSTCOUNT_W (1), + .AV_BYTEENABLE_W (1), + .UAV_BYTEENABLE_W (4), + .UAV_ADDRESS_W (32), + .UAV_BURSTCOUNT_W (3), + .AV_READLATENCY (0), + .USE_READDATAVALID (0), + .USE_WAITREQUEST (0), + .USE_UAV_CLKEN (0), + .USE_READRESPONSE (0), + .USE_WRITERESPONSE (0), + .AV_SYMBOLS_PER_WORD (4), + .AV_ADDRESS_SYMBOLS (0), + .AV_BURSTCOUNT_SYMBOLS (0), + .AV_CONSTANT_BURST_BEHAVIOR (0), + .UAV_CONSTANT_BURST_BEHAVIOR (0), + .AV_REQUIRE_UNALIGNED_ADDRESSES (0), + .CHIPSELECT_THROUGH_READLATENCY (0), + .AV_READ_WAIT_CYCLES (1), + .AV_WRITE_WAIT_CYCLES (0), + .AV_SETUP_WAIT_CYCLES (0), + .AV_DATA_HOLD_CYCLES (0) + ) in0_s1_translator ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // reset.reset + .uav_address (in0_s1_agent_m0_address), // avalon_universal_slave_0.address + .uav_burstcount (in0_s1_agent_m0_burstcount), // .burstcount + .uav_read (in0_s1_agent_m0_read), // .read + .uav_write (in0_s1_agent_m0_write), // .write + .uav_waitrequest (in0_s1_agent_m0_waitrequest), // .waitrequest + .uav_readdatavalid (in0_s1_agent_m0_readdatavalid), // .readdatavalid + .uav_byteenable (in0_s1_agent_m0_byteenable), // .byteenable + .uav_readdata (in0_s1_agent_m0_readdata), // .readdata + .uav_writedata (in0_s1_agent_m0_writedata), // .writedata + .uav_lock (in0_s1_agent_m0_lock), // .lock + .uav_debugaccess (in0_s1_agent_m0_debugaccess), // .debugaccess + .av_address (in0_s1_address), // avalon_anti_slave_0.address + .av_readdata (in0_s1_readdata), // .readdata + .av_write (), // (terminated) + .av_read (), // (terminated) + .av_writedata (), // (terminated) + .av_begintransfer (), // (terminated) + .av_beginbursttransfer (), // (terminated) + .av_burstcount (), // (terminated) + .av_byteenable (), // (terminated) + .av_readdatavalid (1'b0), // (terminated) + .av_waitrequest (1'b0), // (terminated) + .av_writebyteenable (), // (terminated) + .av_lock (), // (terminated) + .av_chipselect (), // (terminated) + .av_clken (), // (terminated) + .uav_clken (1'b0), // (terminated) + .av_debugaccess (), // (terminated) + .av_outputenable (), // (terminated) + .uav_response (), // (terminated) + .av_response (2'b00), // (terminated) + .uav_writeresponsevalid (), // (terminated) + .av_writeresponsevalid (1'b0) // (terminated) + ); + + altera_merlin_slave_translator #( + .AV_ADDRESS_W (2), + .AV_DATA_W (32), + .UAV_DATA_W (32), + .AV_BURSTCOUNT_W (1), + .AV_BYTEENABLE_W (1), + .UAV_BYTEENABLE_W (4), + .UAV_ADDRESS_W (32), + .UAV_BURSTCOUNT_W (3), + .AV_READLATENCY (0), + .USE_READDATAVALID (0), + .USE_WAITREQUEST (0), + .USE_UAV_CLKEN (0), + .USE_READRESPONSE (0), + .USE_WRITERESPONSE (0), + .AV_SYMBOLS_PER_WORD (4), + .AV_ADDRESS_SYMBOLS (0), + .AV_BURSTCOUNT_SYMBOLS (0), + .AV_CONSTANT_BURST_BEHAVIOR (0), + .UAV_CONSTANT_BURST_BEHAVIOR (0), + .AV_REQUIRE_UNALIGNED_ADDRESSES (0), + .CHIPSELECT_THROUGH_READLATENCY (0), + .AV_READ_WAIT_CYCLES (1), + .AV_WRITE_WAIT_CYCLES (0), + .AV_SETUP_WAIT_CYCLES (0), + .AV_DATA_HOLD_CYCLES (0) + ) in1_s1_translator ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // reset.reset + .uav_address (in1_s1_agent_m0_address), // avalon_universal_slave_0.address + .uav_burstcount (in1_s1_agent_m0_burstcount), // .burstcount + .uav_read (in1_s1_agent_m0_read), // .read + .uav_write (in1_s1_agent_m0_write), // .write + .uav_waitrequest (in1_s1_agent_m0_waitrequest), // .waitrequest + .uav_readdatavalid (in1_s1_agent_m0_readdatavalid), // .readdatavalid + .uav_byteenable (in1_s1_agent_m0_byteenable), // .byteenable + .uav_readdata (in1_s1_agent_m0_readdata), // .readdata + .uav_writedata (in1_s1_agent_m0_writedata), // .writedata + .uav_lock (in1_s1_agent_m0_lock), // .lock + .uav_debugaccess (in1_s1_agent_m0_debugaccess), // .debugaccess + .av_address (in1_s1_address), // avalon_anti_slave_0.address + .av_readdata (in1_s1_readdata), // .readdata + .av_write (), // (terminated) + .av_read (), // (terminated) + .av_writedata (), // (terminated) + .av_begintransfer (), // (terminated) + .av_beginbursttransfer (), // (terminated) + .av_burstcount (), // (terminated) + .av_byteenable (), // (terminated) + .av_readdatavalid (1'b0), // (terminated) + .av_waitrequest (1'b0), // (terminated) + .av_writebyteenable (), // (terminated) + .av_lock (), // (terminated) + .av_chipselect (), // (terminated) + .av_clken (), // (terminated) + .uav_clken (1'b0), // (terminated) + .av_debugaccess (), // (terminated) + .av_outputenable (), // (terminated) + .uav_response (), // (terminated) + .av_response (2'b00), // (terminated) + .uav_writeresponsevalid (), // (terminated) + .av_writeresponsevalid (1'b0) // (terminated) + ); + + altera_merlin_master_agent #( + .PKT_ORI_BURST_SIZE_H (103), + .PKT_ORI_BURST_SIZE_L (101), + .PKT_RESPONSE_STATUS_H (100), + .PKT_RESPONSE_STATUS_L (99), + .PKT_QOS_H (86), + .PKT_QOS_L (86), + .PKT_DATA_SIDEBAND_H (84), + .PKT_DATA_SIDEBAND_L (84), + .PKT_ADDR_SIDEBAND_H (83), + .PKT_ADDR_SIDEBAND_L (83), + .PKT_BURST_TYPE_H (82), + .PKT_BURST_TYPE_L (81), + .PKT_CACHE_H (98), + .PKT_CACHE_L (95), + .PKT_THREAD_ID_H (91), + .PKT_THREAD_ID_L (91), + .PKT_BURST_SIZE_H (80), + .PKT_BURST_SIZE_L (78), + .PKT_TRANS_EXCLUSIVE (73), + .PKT_TRANS_LOCK (72), + .PKT_BEGIN_BURST (85), + .PKT_PROTECTION_H (94), + .PKT_PROTECTION_L (92), + .PKT_BURSTWRAP_H (77), + .PKT_BURSTWRAP_L (77), + .PKT_BYTE_CNT_H (76), + .PKT_BYTE_CNT_L (74), + .PKT_ADDR_H (67), + .PKT_ADDR_L (36), + .PKT_TRANS_COMPRESSED_READ (68), + .PKT_TRANS_POSTED (69), + .PKT_TRANS_WRITE (70), + .PKT_TRANS_READ (71), + .PKT_DATA_H (31), + .PKT_DATA_L (0), + .PKT_BYTEEN_H (35), + .PKT_BYTEEN_L (32), + .PKT_SRC_ID_H (88), + .PKT_SRC_ID_L (87), + .PKT_DEST_ID_H (90), + .PKT_DEST_ID_L (89), + .ST_DATA_W (104), + .ST_CHANNEL_W (4), + .AV_BURSTCOUNT_W (3), + .SUPPRESS_0_BYTEEN_RSP (0), + .ID (0), + .BURSTWRAP_VALUE (1), + .CACHE_VALUE (0), + .SECURE_ACCESS_BIT (1), + .USE_READRESPONSE (0), + .USE_WRITERESPONSE (0) + ) master_0_master_agent ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .av_address (master_0_master_translator_avalon_universal_master_0_address), // av.address + .av_write (master_0_master_translator_avalon_universal_master_0_write), // .write + .av_read (master_0_master_translator_avalon_universal_master_0_read), // .read + .av_writedata (master_0_master_translator_avalon_universal_master_0_writedata), // .writedata + .av_readdata (master_0_master_translator_avalon_universal_master_0_readdata), // .readdata + .av_waitrequest (master_0_master_translator_avalon_universal_master_0_waitrequest), // .waitrequest + .av_readdatavalid (master_0_master_translator_avalon_universal_master_0_readdatavalid), // .readdatavalid + .av_byteenable (master_0_master_translator_avalon_universal_master_0_byteenable), // .byteenable + .av_burstcount (master_0_master_translator_avalon_universal_master_0_burstcount), // .burstcount + .av_debugaccess (master_0_master_translator_avalon_universal_master_0_debugaccess), // .debugaccess + .av_lock (master_0_master_translator_avalon_universal_master_0_lock), // .lock + .cp_valid (master_0_master_agent_cp_valid), // cp.valid + .cp_data (master_0_master_agent_cp_data), // .data + .cp_startofpacket (master_0_master_agent_cp_startofpacket), // .startofpacket + .cp_endofpacket (master_0_master_agent_cp_endofpacket), // .endofpacket + .cp_ready (master_0_master_agent_cp_ready), // .ready + .rp_valid (master_0_master_limiter_rsp_src_valid), // rp.valid + .rp_data (master_0_master_limiter_rsp_src_data), // .data + .rp_channel (master_0_master_limiter_rsp_src_channel), // .channel + .rp_startofpacket (master_0_master_limiter_rsp_src_startofpacket), // .startofpacket + .rp_endofpacket (master_0_master_limiter_rsp_src_endofpacket), // .endofpacket + .rp_ready (master_0_master_limiter_rsp_src_ready), // .ready + .av_response (), // (terminated) + .av_writeresponsevalid () // (terminated) + ); + + altera_merlin_slave_agent #( + .PKT_ORI_BURST_SIZE_H (103), + .PKT_ORI_BURST_SIZE_L (101), + .PKT_RESPONSE_STATUS_H (100), + .PKT_RESPONSE_STATUS_L (99), + .PKT_BURST_SIZE_H (80), + .PKT_BURST_SIZE_L (78), + .PKT_TRANS_LOCK (72), + .PKT_BEGIN_BURST (85), + .PKT_PROTECTION_H (94), + .PKT_PROTECTION_L (92), + .PKT_BURSTWRAP_H (77), + .PKT_BURSTWRAP_L (77), + .PKT_BYTE_CNT_H (76), + .PKT_BYTE_CNT_L (74), + .PKT_ADDR_H (67), + .PKT_ADDR_L (36), + .PKT_TRANS_COMPRESSED_READ (68), + .PKT_TRANS_POSTED (69), + .PKT_TRANS_WRITE (70), + .PKT_TRANS_READ (71), + .PKT_DATA_H (31), + .PKT_DATA_L (0), + .PKT_BYTEEN_H (35), + .PKT_BYTEEN_L (32), + .PKT_SRC_ID_H (88), + .PKT_SRC_ID_L (87), + .PKT_DEST_ID_H (90), + .PKT_DEST_ID_L (89), + .PKT_SYMBOL_W (8), + .ST_CHANNEL_W (4), + .ST_DATA_W (104), + .AVS_BURSTCOUNT_W (3), + .SUPPRESS_0_BYTEEN_CMD (0), + .PREVENT_FIFO_OVERFLOW (1), + .USE_READRESPONSE (0), + .USE_WRITERESPONSE (0), + .ECC_ENABLE (0) + ) out0_s1_agent ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .m0_address (out0_s1_agent_m0_address), // m0.address + .m0_burstcount (out0_s1_agent_m0_burstcount), // .burstcount + .m0_byteenable (out0_s1_agent_m0_byteenable), // .byteenable + .m0_debugaccess (out0_s1_agent_m0_debugaccess), // .debugaccess + .m0_lock (out0_s1_agent_m0_lock), // .lock + .m0_readdata (out0_s1_agent_m0_readdata), // .readdata + .m0_readdatavalid (out0_s1_agent_m0_readdatavalid), // .readdatavalid + .m0_read (out0_s1_agent_m0_read), // .read + .m0_waitrequest (out0_s1_agent_m0_waitrequest), // .waitrequest + .m0_writedata (out0_s1_agent_m0_writedata), // .writedata + .m0_write (out0_s1_agent_m0_write), // .write + .rp_endofpacket (out0_s1_agent_rp_endofpacket), // rp.endofpacket + .rp_ready (out0_s1_agent_rp_ready), // .ready + .rp_valid (out0_s1_agent_rp_valid), // .valid + .rp_data (out0_s1_agent_rp_data), // .data + .rp_startofpacket (out0_s1_agent_rp_startofpacket), // .startofpacket + .cp_ready (cmd_mux_src_ready), // cp.ready + .cp_valid (cmd_mux_src_valid), // .valid + .cp_data (cmd_mux_src_data), // .data + .cp_startofpacket (cmd_mux_src_startofpacket), // .startofpacket + .cp_endofpacket (cmd_mux_src_endofpacket), // .endofpacket + .cp_channel (cmd_mux_src_channel), // .channel + .rf_sink_ready (out0_s1_agent_rsp_fifo_out_ready), // rf_sink.ready + .rf_sink_valid (out0_s1_agent_rsp_fifo_out_valid), // .valid + .rf_sink_startofpacket (out0_s1_agent_rsp_fifo_out_startofpacket), // .startofpacket + .rf_sink_endofpacket (out0_s1_agent_rsp_fifo_out_endofpacket), // .endofpacket + .rf_sink_data (out0_s1_agent_rsp_fifo_out_data), // .data + .rf_source_ready (out0_s1_agent_rf_source_ready), // rf_source.ready + .rf_source_valid (out0_s1_agent_rf_source_valid), // .valid + .rf_source_startofpacket (out0_s1_agent_rf_source_startofpacket), // .startofpacket + .rf_source_endofpacket (out0_s1_agent_rf_source_endofpacket), // .endofpacket + .rf_source_data (out0_s1_agent_rf_source_data), // .data + .rdata_fifo_sink_ready (avalon_st_adapter_out_0_ready), // rdata_fifo_sink.ready + .rdata_fifo_sink_valid (avalon_st_adapter_out_0_valid), // .valid + .rdata_fifo_sink_data (avalon_st_adapter_out_0_data), // .data + .rdata_fifo_sink_error (avalon_st_adapter_out_0_error), // .error + .rdata_fifo_src_ready (out0_s1_agent_rdata_fifo_src_ready), // rdata_fifo_src.ready + .rdata_fifo_src_valid (out0_s1_agent_rdata_fifo_src_valid), // .valid + .rdata_fifo_src_data (out0_s1_agent_rdata_fifo_src_data), // .data + .m0_response (2'b00), // (terminated) + .m0_writeresponsevalid (1'b0) // (terminated) + ); + + altera_avalon_sc_fifo #( + .SYMBOLS_PER_BEAT (1), + .BITS_PER_SYMBOL (105), + .FIFO_DEPTH (2), + .CHANNEL_WIDTH (0), + .ERROR_WIDTH (0), + .USE_PACKETS (1), + .USE_FILL_LEVEL (0), + .EMPTY_LATENCY (1), + .USE_MEMORY_BLOCKS (0), + .USE_STORE_FORWARD (0), + .USE_ALMOST_FULL_IF (0), + .USE_ALMOST_EMPTY_IF (0) + ) out0_s1_agent_rsp_fifo ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .in_data (out0_s1_agent_rf_source_data), // in.data + .in_valid (out0_s1_agent_rf_source_valid), // .valid + .in_ready (out0_s1_agent_rf_source_ready), // .ready + .in_startofpacket (out0_s1_agent_rf_source_startofpacket), // .startofpacket + .in_endofpacket (out0_s1_agent_rf_source_endofpacket), // .endofpacket + .out_data (out0_s1_agent_rsp_fifo_out_data), // out.data + .out_valid (out0_s1_agent_rsp_fifo_out_valid), // .valid + .out_ready (out0_s1_agent_rsp_fifo_out_ready), // .ready + .out_startofpacket (out0_s1_agent_rsp_fifo_out_startofpacket), // .startofpacket + .out_endofpacket (out0_s1_agent_rsp_fifo_out_endofpacket), // .endofpacket + .csr_address (2'b00), // (terminated) + .csr_read (1'b0), // (terminated) + .csr_write (1'b0), // (terminated) + .csr_readdata (), // (terminated) + .csr_writedata (32'b00000000000000000000000000000000), // (terminated) + .almost_full_data (), // (terminated) + .almost_empty_data (), // (terminated) + .in_empty (1'b0), // (terminated) + .out_empty (), // (terminated) + .in_error (1'b0), // (terminated) + .out_error (), // (terminated) + .in_channel (1'b0), // (terminated) + .out_channel () // (terminated) + ); + + altera_merlin_slave_agent #( + .PKT_ORI_BURST_SIZE_H (103), + .PKT_ORI_BURST_SIZE_L (101), + .PKT_RESPONSE_STATUS_H (100), + .PKT_RESPONSE_STATUS_L (99), + .PKT_BURST_SIZE_H (80), + .PKT_BURST_SIZE_L (78), + .PKT_TRANS_LOCK (72), + .PKT_BEGIN_BURST (85), + .PKT_PROTECTION_H (94), + .PKT_PROTECTION_L (92), + .PKT_BURSTWRAP_H (77), + .PKT_BURSTWRAP_L (77), + .PKT_BYTE_CNT_H (76), + .PKT_BYTE_CNT_L (74), + .PKT_ADDR_H (67), + .PKT_ADDR_L (36), + .PKT_TRANS_COMPRESSED_READ (68), + .PKT_TRANS_POSTED (69), + .PKT_TRANS_WRITE (70), + .PKT_TRANS_READ (71), + .PKT_DATA_H (31), + .PKT_DATA_L (0), + .PKT_BYTEEN_H (35), + .PKT_BYTEEN_L (32), + .PKT_SRC_ID_H (88), + .PKT_SRC_ID_L (87), + .PKT_DEST_ID_H (90), + .PKT_DEST_ID_L (89), + .PKT_SYMBOL_W (8), + .ST_CHANNEL_W (4), + .ST_DATA_W (104), + .AVS_BURSTCOUNT_W (3), + .SUPPRESS_0_BYTEEN_CMD (0), + .PREVENT_FIFO_OVERFLOW (1), + .USE_READRESPONSE (0), + .USE_WRITERESPONSE (0), + .ECC_ENABLE (0) + ) out1_s1_agent ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .m0_address (out1_s1_agent_m0_address), // m0.address + .m0_burstcount (out1_s1_agent_m0_burstcount), // .burstcount + .m0_byteenable (out1_s1_agent_m0_byteenable), // .byteenable + .m0_debugaccess (out1_s1_agent_m0_debugaccess), // .debugaccess + .m0_lock (out1_s1_agent_m0_lock), // .lock + .m0_readdata (out1_s1_agent_m0_readdata), // .readdata + .m0_readdatavalid (out1_s1_agent_m0_readdatavalid), // .readdatavalid + .m0_read (out1_s1_agent_m0_read), // .read + .m0_waitrequest (out1_s1_agent_m0_waitrequest), // .waitrequest + .m0_writedata (out1_s1_agent_m0_writedata), // .writedata + .m0_write (out1_s1_agent_m0_write), // .write + .rp_endofpacket (out1_s1_agent_rp_endofpacket), // rp.endofpacket + .rp_ready (out1_s1_agent_rp_ready), // .ready + .rp_valid (out1_s1_agent_rp_valid), // .valid + .rp_data (out1_s1_agent_rp_data), // .data + .rp_startofpacket (out1_s1_agent_rp_startofpacket), // .startofpacket + .cp_ready (cmd_mux_001_src_ready), // cp.ready + .cp_valid (cmd_mux_001_src_valid), // .valid + .cp_data (cmd_mux_001_src_data), // .data + .cp_startofpacket (cmd_mux_001_src_startofpacket), // .startofpacket + .cp_endofpacket (cmd_mux_001_src_endofpacket), // .endofpacket + .cp_channel (cmd_mux_001_src_channel), // .channel + .rf_sink_ready (out1_s1_agent_rsp_fifo_out_ready), // rf_sink.ready + .rf_sink_valid (out1_s1_agent_rsp_fifo_out_valid), // .valid + .rf_sink_startofpacket (out1_s1_agent_rsp_fifo_out_startofpacket), // .startofpacket + .rf_sink_endofpacket (out1_s1_agent_rsp_fifo_out_endofpacket), // .endofpacket + .rf_sink_data (out1_s1_agent_rsp_fifo_out_data), // .data + .rf_source_ready (out1_s1_agent_rf_source_ready), // rf_source.ready + .rf_source_valid (out1_s1_agent_rf_source_valid), // .valid + .rf_source_startofpacket (out1_s1_agent_rf_source_startofpacket), // .startofpacket + .rf_source_endofpacket (out1_s1_agent_rf_source_endofpacket), // .endofpacket + .rf_source_data (out1_s1_agent_rf_source_data), // .data + .rdata_fifo_sink_ready (avalon_st_adapter_001_out_0_ready), // rdata_fifo_sink.ready + .rdata_fifo_sink_valid (avalon_st_adapter_001_out_0_valid), // .valid + .rdata_fifo_sink_data (avalon_st_adapter_001_out_0_data), // .data + .rdata_fifo_sink_error (avalon_st_adapter_001_out_0_error), // .error + .rdata_fifo_src_ready (out1_s1_agent_rdata_fifo_src_ready), // rdata_fifo_src.ready + .rdata_fifo_src_valid (out1_s1_agent_rdata_fifo_src_valid), // .valid + .rdata_fifo_src_data (out1_s1_agent_rdata_fifo_src_data), // .data + .m0_response (2'b00), // (terminated) + .m0_writeresponsevalid (1'b0) // (terminated) + ); + + altera_avalon_sc_fifo #( + .SYMBOLS_PER_BEAT (1), + .BITS_PER_SYMBOL (105), + .FIFO_DEPTH (2), + .CHANNEL_WIDTH (0), + .ERROR_WIDTH (0), + .USE_PACKETS (1), + .USE_FILL_LEVEL (0), + .EMPTY_LATENCY (1), + .USE_MEMORY_BLOCKS (0), + .USE_STORE_FORWARD (0), + .USE_ALMOST_FULL_IF (0), + .USE_ALMOST_EMPTY_IF (0) + ) out1_s1_agent_rsp_fifo ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .in_data (out1_s1_agent_rf_source_data), // in.data + .in_valid (out1_s1_agent_rf_source_valid), // .valid + .in_ready (out1_s1_agent_rf_source_ready), // .ready + .in_startofpacket (out1_s1_agent_rf_source_startofpacket), // .startofpacket + .in_endofpacket (out1_s1_agent_rf_source_endofpacket), // .endofpacket + .out_data (out1_s1_agent_rsp_fifo_out_data), // out.data + .out_valid (out1_s1_agent_rsp_fifo_out_valid), // .valid + .out_ready (out1_s1_agent_rsp_fifo_out_ready), // .ready + .out_startofpacket (out1_s1_agent_rsp_fifo_out_startofpacket), // .startofpacket + .out_endofpacket (out1_s1_agent_rsp_fifo_out_endofpacket), // .endofpacket + .csr_address (2'b00), // (terminated) + .csr_read (1'b0), // (terminated) + .csr_write (1'b0), // (terminated) + .csr_readdata (), // (terminated) + .csr_writedata (32'b00000000000000000000000000000000), // (terminated) + .almost_full_data (), // (terminated) + .almost_empty_data (), // (terminated) + .in_empty (1'b0), // (terminated) + .out_empty (), // (terminated) + .in_error (1'b0), // (terminated) + .out_error (), // (terminated) + .in_channel (1'b0), // (terminated) + .out_channel () // (terminated) + ); + + altera_merlin_slave_agent #( + .PKT_ORI_BURST_SIZE_H (103), + .PKT_ORI_BURST_SIZE_L (101), + .PKT_RESPONSE_STATUS_H (100), + .PKT_RESPONSE_STATUS_L (99), + .PKT_BURST_SIZE_H (80), + .PKT_BURST_SIZE_L (78), + .PKT_TRANS_LOCK (72), + .PKT_BEGIN_BURST (85), + .PKT_PROTECTION_H (94), + .PKT_PROTECTION_L (92), + .PKT_BURSTWRAP_H (77), + .PKT_BURSTWRAP_L (77), + .PKT_BYTE_CNT_H (76), + .PKT_BYTE_CNT_L (74), + .PKT_ADDR_H (67), + .PKT_ADDR_L (36), + .PKT_TRANS_COMPRESSED_READ (68), + .PKT_TRANS_POSTED (69), + .PKT_TRANS_WRITE (70), + .PKT_TRANS_READ (71), + .PKT_DATA_H (31), + .PKT_DATA_L (0), + .PKT_BYTEEN_H (35), + .PKT_BYTEEN_L (32), + .PKT_SRC_ID_H (88), + .PKT_SRC_ID_L (87), + .PKT_DEST_ID_H (90), + .PKT_DEST_ID_L (89), + .PKT_SYMBOL_W (8), + .ST_CHANNEL_W (4), + .ST_DATA_W (104), + .AVS_BURSTCOUNT_W (3), + .SUPPRESS_0_BYTEEN_CMD (0), + .PREVENT_FIFO_OVERFLOW (1), + .USE_READRESPONSE (0), + .USE_WRITERESPONSE (0), + .ECC_ENABLE (0) + ) in0_s1_agent ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .m0_address (in0_s1_agent_m0_address), // m0.address + .m0_burstcount (in0_s1_agent_m0_burstcount), // .burstcount + .m0_byteenable (in0_s1_agent_m0_byteenable), // .byteenable + .m0_debugaccess (in0_s1_agent_m0_debugaccess), // .debugaccess + .m0_lock (in0_s1_agent_m0_lock), // .lock + .m0_readdata (in0_s1_agent_m0_readdata), // .readdata + .m0_readdatavalid (in0_s1_agent_m0_readdatavalid), // .readdatavalid + .m0_read (in0_s1_agent_m0_read), // .read + .m0_waitrequest (in0_s1_agent_m0_waitrequest), // .waitrequest + .m0_writedata (in0_s1_agent_m0_writedata), // .writedata + .m0_write (in0_s1_agent_m0_write), // .write + .rp_endofpacket (in0_s1_agent_rp_endofpacket), // rp.endofpacket + .rp_ready (in0_s1_agent_rp_ready), // .ready + .rp_valid (in0_s1_agent_rp_valid), // .valid + .rp_data (in0_s1_agent_rp_data), // .data + .rp_startofpacket (in0_s1_agent_rp_startofpacket), // .startofpacket + .cp_ready (cmd_mux_002_src_ready), // cp.ready + .cp_valid (cmd_mux_002_src_valid), // .valid + .cp_data (cmd_mux_002_src_data), // .data + .cp_startofpacket (cmd_mux_002_src_startofpacket), // .startofpacket + .cp_endofpacket (cmd_mux_002_src_endofpacket), // .endofpacket + .cp_channel (cmd_mux_002_src_channel), // .channel + .rf_sink_ready (in0_s1_agent_rsp_fifo_out_ready), // rf_sink.ready + .rf_sink_valid (in0_s1_agent_rsp_fifo_out_valid), // .valid + .rf_sink_startofpacket (in0_s1_agent_rsp_fifo_out_startofpacket), // .startofpacket + .rf_sink_endofpacket (in0_s1_agent_rsp_fifo_out_endofpacket), // .endofpacket + .rf_sink_data (in0_s1_agent_rsp_fifo_out_data), // .data + .rf_source_ready (in0_s1_agent_rf_source_ready), // rf_source.ready + .rf_source_valid (in0_s1_agent_rf_source_valid), // .valid + .rf_source_startofpacket (in0_s1_agent_rf_source_startofpacket), // .startofpacket + .rf_source_endofpacket (in0_s1_agent_rf_source_endofpacket), // .endofpacket + .rf_source_data (in0_s1_agent_rf_source_data), // .data + .rdata_fifo_sink_ready (avalon_st_adapter_002_out_0_ready), // rdata_fifo_sink.ready + .rdata_fifo_sink_valid (avalon_st_adapter_002_out_0_valid), // .valid + .rdata_fifo_sink_data (avalon_st_adapter_002_out_0_data), // .data + .rdata_fifo_sink_error (avalon_st_adapter_002_out_0_error), // .error + .rdata_fifo_src_ready (in0_s1_agent_rdata_fifo_src_ready), // rdata_fifo_src.ready + .rdata_fifo_src_valid (in0_s1_agent_rdata_fifo_src_valid), // .valid + .rdata_fifo_src_data (in0_s1_agent_rdata_fifo_src_data), // .data + .m0_response (2'b00), // (terminated) + .m0_writeresponsevalid (1'b0) // (terminated) + ); + + altera_avalon_sc_fifo #( + .SYMBOLS_PER_BEAT (1), + .BITS_PER_SYMBOL (105), + .FIFO_DEPTH (2), + .CHANNEL_WIDTH (0), + .ERROR_WIDTH (0), + .USE_PACKETS (1), + .USE_FILL_LEVEL (0), + .EMPTY_LATENCY (1), + .USE_MEMORY_BLOCKS (0), + .USE_STORE_FORWARD (0), + .USE_ALMOST_FULL_IF (0), + .USE_ALMOST_EMPTY_IF (0) + ) in0_s1_agent_rsp_fifo ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .in_data (in0_s1_agent_rf_source_data), // in.data + .in_valid (in0_s1_agent_rf_source_valid), // .valid + .in_ready (in0_s1_agent_rf_source_ready), // .ready + .in_startofpacket (in0_s1_agent_rf_source_startofpacket), // .startofpacket + .in_endofpacket (in0_s1_agent_rf_source_endofpacket), // .endofpacket + .out_data (in0_s1_agent_rsp_fifo_out_data), // out.data + .out_valid (in0_s1_agent_rsp_fifo_out_valid), // .valid + .out_ready (in0_s1_agent_rsp_fifo_out_ready), // .ready + .out_startofpacket (in0_s1_agent_rsp_fifo_out_startofpacket), // .startofpacket + .out_endofpacket (in0_s1_agent_rsp_fifo_out_endofpacket), // .endofpacket + .csr_address (2'b00), // (terminated) + .csr_read (1'b0), // (terminated) + .csr_write (1'b0), // (terminated) + .csr_readdata (), // (terminated) + .csr_writedata (32'b00000000000000000000000000000000), // (terminated) + .almost_full_data (), // (terminated) + .almost_empty_data (), // (terminated) + .in_empty (1'b0), // (terminated) + .out_empty (), // (terminated) + .in_error (1'b0), // (terminated) + .out_error (), // (terminated) + .in_channel (1'b0), // (terminated) + .out_channel () // (terminated) + ); + + altera_merlin_slave_agent #( + .PKT_ORI_BURST_SIZE_H (103), + .PKT_ORI_BURST_SIZE_L (101), + .PKT_RESPONSE_STATUS_H (100), + .PKT_RESPONSE_STATUS_L (99), + .PKT_BURST_SIZE_H (80), + .PKT_BURST_SIZE_L (78), + .PKT_TRANS_LOCK (72), + .PKT_BEGIN_BURST (85), + .PKT_PROTECTION_H (94), + .PKT_PROTECTION_L (92), + .PKT_BURSTWRAP_H (77), + .PKT_BURSTWRAP_L (77), + .PKT_BYTE_CNT_H (76), + .PKT_BYTE_CNT_L (74), + .PKT_ADDR_H (67), + .PKT_ADDR_L (36), + .PKT_TRANS_COMPRESSED_READ (68), + .PKT_TRANS_POSTED (69), + .PKT_TRANS_WRITE (70), + .PKT_TRANS_READ (71), + .PKT_DATA_H (31), + .PKT_DATA_L (0), + .PKT_BYTEEN_H (35), + .PKT_BYTEEN_L (32), + .PKT_SRC_ID_H (88), + .PKT_SRC_ID_L (87), + .PKT_DEST_ID_H (90), + .PKT_DEST_ID_L (89), + .PKT_SYMBOL_W (8), + .ST_CHANNEL_W (4), + .ST_DATA_W (104), + .AVS_BURSTCOUNT_W (3), + .SUPPRESS_0_BYTEEN_CMD (0), + .PREVENT_FIFO_OVERFLOW (1), + .USE_READRESPONSE (0), + .USE_WRITERESPONSE (0), + .ECC_ENABLE (0) + ) in1_s1_agent ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .m0_address (in1_s1_agent_m0_address), // m0.address + .m0_burstcount (in1_s1_agent_m0_burstcount), // .burstcount + .m0_byteenable (in1_s1_agent_m0_byteenable), // .byteenable + .m0_debugaccess (in1_s1_agent_m0_debugaccess), // .debugaccess + .m0_lock (in1_s1_agent_m0_lock), // .lock + .m0_readdata (in1_s1_agent_m0_readdata), // .readdata + .m0_readdatavalid (in1_s1_agent_m0_readdatavalid), // .readdatavalid + .m0_read (in1_s1_agent_m0_read), // .read + .m0_waitrequest (in1_s1_agent_m0_waitrequest), // .waitrequest + .m0_writedata (in1_s1_agent_m0_writedata), // .writedata + .m0_write (in1_s1_agent_m0_write), // .write + .rp_endofpacket (in1_s1_agent_rp_endofpacket), // rp.endofpacket + .rp_ready (in1_s1_agent_rp_ready), // .ready + .rp_valid (in1_s1_agent_rp_valid), // .valid + .rp_data (in1_s1_agent_rp_data), // .data + .rp_startofpacket (in1_s1_agent_rp_startofpacket), // .startofpacket + .cp_ready (cmd_mux_003_src_ready), // cp.ready + .cp_valid (cmd_mux_003_src_valid), // .valid + .cp_data (cmd_mux_003_src_data), // .data + .cp_startofpacket (cmd_mux_003_src_startofpacket), // .startofpacket + .cp_endofpacket (cmd_mux_003_src_endofpacket), // .endofpacket + .cp_channel (cmd_mux_003_src_channel), // .channel + .rf_sink_ready (in1_s1_agent_rsp_fifo_out_ready), // rf_sink.ready + .rf_sink_valid (in1_s1_agent_rsp_fifo_out_valid), // .valid + .rf_sink_startofpacket (in1_s1_agent_rsp_fifo_out_startofpacket), // .startofpacket + .rf_sink_endofpacket (in1_s1_agent_rsp_fifo_out_endofpacket), // .endofpacket + .rf_sink_data (in1_s1_agent_rsp_fifo_out_data), // .data + .rf_source_ready (in1_s1_agent_rf_source_ready), // rf_source.ready + .rf_source_valid (in1_s1_agent_rf_source_valid), // .valid + .rf_source_startofpacket (in1_s1_agent_rf_source_startofpacket), // .startofpacket + .rf_source_endofpacket (in1_s1_agent_rf_source_endofpacket), // .endofpacket + .rf_source_data (in1_s1_agent_rf_source_data), // .data + .rdata_fifo_sink_ready (avalon_st_adapter_003_out_0_ready), // rdata_fifo_sink.ready + .rdata_fifo_sink_valid (avalon_st_adapter_003_out_0_valid), // .valid + .rdata_fifo_sink_data (avalon_st_adapter_003_out_0_data), // .data + .rdata_fifo_sink_error (avalon_st_adapter_003_out_0_error), // .error + .rdata_fifo_src_ready (in1_s1_agent_rdata_fifo_src_ready), // rdata_fifo_src.ready + .rdata_fifo_src_valid (in1_s1_agent_rdata_fifo_src_valid), // .valid + .rdata_fifo_src_data (in1_s1_agent_rdata_fifo_src_data), // .data + .m0_response (2'b00), // (terminated) + .m0_writeresponsevalid (1'b0) // (terminated) + ); + + altera_avalon_sc_fifo #( + .SYMBOLS_PER_BEAT (1), + .BITS_PER_SYMBOL (105), + .FIFO_DEPTH (2), + .CHANNEL_WIDTH (0), + .ERROR_WIDTH (0), + .USE_PACKETS (1), + .USE_FILL_LEVEL (0), + .EMPTY_LATENCY (1), + .USE_MEMORY_BLOCKS (0), + .USE_STORE_FORWARD (0), + .USE_ALMOST_FULL_IF (0), + .USE_ALMOST_EMPTY_IF (0) + ) in1_s1_agent_rsp_fifo ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .in_data (in1_s1_agent_rf_source_data), // in.data + .in_valid (in1_s1_agent_rf_source_valid), // .valid + .in_ready (in1_s1_agent_rf_source_ready), // .ready + .in_startofpacket (in1_s1_agent_rf_source_startofpacket), // .startofpacket + .in_endofpacket (in1_s1_agent_rf_source_endofpacket), // .endofpacket + .out_data (in1_s1_agent_rsp_fifo_out_data), // out.data + .out_valid (in1_s1_agent_rsp_fifo_out_valid), // .valid + .out_ready (in1_s1_agent_rsp_fifo_out_ready), // .ready + .out_startofpacket (in1_s1_agent_rsp_fifo_out_startofpacket), // .startofpacket + .out_endofpacket (in1_s1_agent_rsp_fifo_out_endofpacket), // .endofpacket + .csr_address (2'b00), // (terminated) + .csr_read (1'b0), // (terminated) + .csr_write (1'b0), // (terminated) + .csr_readdata (), // (terminated) + .csr_writedata (32'b00000000000000000000000000000000), // (terminated) + .almost_full_data (), // (terminated) + .almost_empty_data (), // (terminated) + .in_empty (1'b0), // (terminated) + .out_empty (), // (terminated) + .in_error (1'b0), // (terminated) + .out_error (), // (terminated) + .in_channel (1'b0), // (terminated) + .out_channel () // (terminated) + ); + + jtag_io_mm_interconnect_0_router router ( + .sink_ready (master_0_master_agent_cp_ready), // sink.ready + .sink_valid (master_0_master_agent_cp_valid), // .valid + .sink_data (master_0_master_agent_cp_data), // .data + .sink_startofpacket (master_0_master_agent_cp_startofpacket), // .startofpacket + .sink_endofpacket (master_0_master_agent_cp_endofpacket), // .endofpacket + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .src_ready (router_src_ready), // src.ready + .src_valid (router_src_valid), // .valid + .src_data (router_src_data), // .data + .src_channel (router_src_channel), // .channel + .src_startofpacket (router_src_startofpacket), // .startofpacket + .src_endofpacket (router_src_endofpacket) // .endofpacket + ); + + jtag_io_mm_interconnect_0_router_001 router_001 ( + .sink_ready (out0_s1_agent_rp_ready), // sink.ready + .sink_valid (out0_s1_agent_rp_valid), // .valid + .sink_data (out0_s1_agent_rp_data), // .data + .sink_startofpacket (out0_s1_agent_rp_startofpacket), // .startofpacket + .sink_endofpacket (out0_s1_agent_rp_endofpacket), // .endofpacket + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .src_ready (router_001_src_ready), // src.ready + .src_valid (router_001_src_valid), // .valid + .src_data (router_001_src_data), // .data + .src_channel (router_001_src_channel), // .channel + .src_startofpacket (router_001_src_startofpacket), // .startofpacket + .src_endofpacket (router_001_src_endofpacket) // .endofpacket + ); + + jtag_io_mm_interconnect_0_router_001 router_002 ( + .sink_ready (out1_s1_agent_rp_ready), // sink.ready + .sink_valid (out1_s1_agent_rp_valid), // .valid + .sink_data (out1_s1_agent_rp_data), // .data + .sink_startofpacket (out1_s1_agent_rp_startofpacket), // .startofpacket + .sink_endofpacket (out1_s1_agent_rp_endofpacket), // .endofpacket + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .src_ready (router_002_src_ready), // src.ready + .src_valid (router_002_src_valid), // .valid + .src_data (router_002_src_data), // .data + .src_channel (router_002_src_channel), // .channel + .src_startofpacket (router_002_src_startofpacket), // .startofpacket + .src_endofpacket (router_002_src_endofpacket) // .endofpacket + ); + + jtag_io_mm_interconnect_0_router_001 router_003 ( + .sink_ready (in0_s1_agent_rp_ready), // sink.ready + .sink_valid (in0_s1_agent_rp_valid), // .valid + .sink_data (in0_s1_agent_rp_data), // .data + .sink_startofpacket (in0_s1_agent_rp_startofpacket), // .startofpacket + .sink_endofpacket (in0_s1_agent_rp_endofpacket), // .endofpacket + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .src_ready (router_003_src_ready), // src.ready + .src_valid (router_003_src_valid), // .valid + .src_data (router_003_src_data), // .data + .src_channel (router_003_src_channel), // .channel + .src_startofpacket (router_003_src_startofpacket), // .startofpacket + .src_endofpacket (router_003_src_endofpacket) // .endofpacket + ); + + jtag_io_mm_interconnect_0_router_001 router_004 ( + .sink_ready (in1_s1_agent_rp_ready), // sink.ready + .sink_valid (in1_s1_agent_rp_valid), // .valid + .sink_data (in1_s1_agent_rp_data), // .data + .sink_startofpacket (in1_s1_agent_rp_startofpacket), // .startofpacket + .sink_endofpacket (in1_s1_agent_rp_endofpacket), // .endofpacket + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .src_ready (router_004_src_ready), // src.ready + .src_valid (router_004_src_valid), // .valid + .src_data (router_004_src_data), // .data + .src_channel (router_004_src_channel), // .channel + .src_startofpacket (router_004_src_startofpacket), // .startofpacket + .src_endofpacket (router_004_src_endofpacket) // .endofpacket + ); + + altera_merlin_traffic_limiter #( + .PKT_DEST_ID_H (90), + .PKT_DEST_ID_L (89), + .PKT_SRC_ID_H (88), + .PKT_SRC_ID_L (87), + .PKT_BYTE_CNT_H (76), + .PKT_BYTE_CNT_L (74), + .PKT_BYTEEN_H (35), + .PKT_BYTEEN_L (32), + .PKT_TRANS_POSTED (69), + .PKT_TRANS_WRITE (70), + .MAX_OUTSTANDING_RESPONSES (1), + .PIPELINED (0), + .ST_DATA_W (104), + .ST_CHANNEL_W (4), + .VALID_WIDTH (4), + .ENFORCE_ORDER (1), + .PREVENT_HAZARDS (0), + .SUPPORTS_POSTED_WRITES (1), + .SUPPORTS_NONPOSTED_WRITES (0), + .REORDER (0) + ) master_0_master_limiter ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .cmd_sink_ready (router_src_ready), // cmd_sink.ready + .cmd_sink_valid (router_src_valid), // .valid + .cmd_sink_data (router_src_data), // .data + .cmd_sink_channel (router_src_channel), // .channel + .cmd_sink_startofpacket (router_src_startofpacket), // .startofpacket + .cmd_sink_endofpacket (router_src_endofpacket), // .endofpacket + .cmd_src_ready (master_0_master_limiter_cmd_src_ready), // cmd_src.ready + .cmd_src_data (master_0_master_limiter_cmd_src_data), // .data + .cmd_src_channel (master_0_master_limiter_cmd_src_channel), // .channel + .cmd_src_startofpacket (master_0_master_limiter_cmd_src_startofpacket), // .startofpacket + .cmd_src_endofpacket (master_0_master_limiter_cmd_src_endofpacket), // .endofpacket + .rsp_sink_ready (rsp_mux_src_ready), // rsp_sink.ready + .rsp_sink_valid (rsp_mux_src_valid), // .valid + .rsp_sink_channel (rsp_mux_src_channel), // .channel + .rsp_sink_data (rsp_mux_src_data), // .data + .rsp_sink_startofpacket (rsp_mux_src_startofpacket), // .startofpacket + .rsp_sink_endofpacket (rsp_mux_src_endofpacket), // .endofpacket + .rsp_src_ready (master_0_master_limiter_rsp_src_ready), // rsp_src.ready + .rsp_src_valid (master_0_master_limiter_rsp_src_valid), // .valid + .rsp_src_data (master_0_master_limiter_rsp_src_data), // .data + .rsp_src_channel (master_0_master_limiter_rsp_src_channel), // .channel + .rsp_src_startofpacket (master_0_master_limiter_rsp_src_startofpacket), // .startofpacket + .rsp_src_endofpacket (master_0_master_limiter_rsp_src_endofpacket), // .endofpacket + .cmd_src_valid (master_0_master_limiter_cmd_valid_data) // cmd_valid.data + ); + + jtag_io_mm_interconnect_0_cmd_demux cmd_demux ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .sink_ready (master_0_master_limiter_cmd_src_ready), // sink.ready + .sink_channel (master_0_master_limiter_cmd_src_channel), // .channel + .sink_data (master_0_master_limiter_cmd_src_data), // .data + .sink_startofpacket (master_0_master_limiter_cmd_src_startofpacket), // .startofpacket + .sink_endofpacket (master_0_master_limiter_cmd_src_endofpacket), // .endofpacket + .sink_valid (master_0_master_limiter_cmd_valid_data), // sink_valid.data + .src0_ready (cmd_demux_src0_ready), // src0.ready + .src0_valid (cmd_demux_src0_valid), // .valid + .src0_data (cmd_demux_src0_data), // .data + .src0_channel (cmd_demux_src0_channel), // .channel + .src0_startofpacket (cmd_demux_src0_startofpacket), // .startofpacket + .src0_endofpacket (cmd_demux_src0_endofpacket), // .endofpacket + .src1_ready (cmd_demux_src1_ready), // src1.ready + .src1_valid (cmd_demux_src1_valid), // .valid + .src1_data (cmd_demux_src1_data), // .data + .src1_channel (cmd_demux_src1_channel), // .channel + .src1_startofpacket (cmd_demux_src1_startofpacket), // .startofpacket + .src1_endofpacket (cmd_demux_src1_endofpacket), // .endofpacket + .src2_ready (cmd_demux_src2_ready), // src2.ready + .src2_valid (cmd_demux_src2_valid), // .valid + .src2_data (cmd_demux_src2_data), // .data + .src2_channel (cmd_demux_src2_channel), // .channel + .src2_startofpacket (cmd_demux_src2_startofpacket), // .startofpacket + .src2_endofpacket (cmd_demux_src2_endofpacket), // .endofpacket + .src3_ready (cmd_demux_src3_ready), // src3.ready + .src3_valid (cmd_demux_src3_valid), // .valid + .src3_data (cmd_demux_src3_data), // .data + .src3_channel (cmd_demux_src3_channel), // .channel + .src3_startofpacket (cmd_demux_src3_startofpacket), // .startofpacket + .src3_endofpacket (cmd_demux_src3_endofpacket) // .endofpacket + ); + + jtag_io_mm_interconnect_0_cmd_mux cmd_mux ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .src_ready (cmd_mux_src_ready), // src.ready + .src_valid (cmd_mux_src_valid), // .valid + .src_data (cmd_mux_src_data), // .data + .src_channel (cmd_mux_src_channel), // .channel + .src_startofpacket (cmd_mux_src_startofpacket), // .startofpacket + .src_endofpacket (cmd_mux_src_endofpacket), // .endofpacket + .sink0_ready (cmd_demux_src0_ready), // sink0.ready + .sink0_valid (cmd_demux_src0_valid), // .valid + .sink0_channel (cmd_demux_src0_channel), // .channel + .sink0_data (cmd_demux_src0_data), // .data + .sink0_startofpacket (cmd_demux_src0_startofpacket), // .startofpacket + .sink0_endofpacket (cmd_demux_src0_endofpacket) // .endofpacket + ); + + jtag_io_mm_interconnect_0_cmd_mux cmd_mux_001 ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .src_ready (cmd_mux_001_src_ready), // src.ready + .src_valid (cmd_mux_001_src_valid), // .valid + .src_data (cmd_mux_001_src_data), // .data + .src_channel (cmd_mux_001_src_channel), // .channel + .src_startofpacket (cmd_mux_001_src_startofpacket), // .startofpacket + .src_endofpacket (cmd_mux_001_src_endofpacket), // .endofpacket + .sink0_ready (cmd_demux_src1_ready), // sink0.ready + .sink0_valid (cmd_demux_src1_valid), // .valid + .sink0_channel (cmd_demux_src1_channel), // .channel + .sink0_data (cmd_demux_src1_data), // .data + .sink0_startofpacket (cmd_demux_src1_startofpacket), // .startofpacket + .sink0_endofpacket (cmd_demux_src1_endofpacket) // .endofpacket + ); + + jtag_io_mm_interconnect_0_cmd_mux cmd_mux_002 ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .src_ready (cmd_mux_002_src_ready), // src.ready + .src_valid (cmd_mux_002_src_valid), // .valid + .src_data (cmd_mux_002_src_data), // .data + .src_channel (cmd_mux_002_src_channel), // .channel + .src_startofpacket (cmd_mux_002_src_startofpacket), // .startofpacket + .src_endofpacket (cmd_mux_002_src_endofpacket), // .endofpacket + .sink0_ready (cmd_demux_src2_ready), // sink0.ready + .sink0_valid (cmd_demux_src2_valid), // .valid + .sink0_channel (cmd_demux_src2_channel), // .channel + .sink0_data (cmd_demux_src2_data), // .data + .sink0_startofpacket (cmd_demux_src2_startofpacket), // .startofpacket + .sink0_endofpacket (cmd_demux_src2_endofpacket) // .endofpacket + ); + + jtag_io_mm_interconnect_0_cmd_mux cmd_mux_003 ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .src_ready (cmd_mux_003_src_ready), // src.ready + .src_valid (cmd_mux_003_src_valid), // .valid + .src_data (cmd_mux_003_src_data), // .data + .src_channel (cmd_mux_003_src_channel), // .channel + .src_startofpacket (cmd_mux_003_src_startofpacket), // .startofpacket + .src_endofpacket (cmd_mux_003_src_endofpacket), // .endofpacket + .sink0_ready (cmd_demux_src3_ready), // sink0.ready + .sink0_valid (cmd_demux_src3_valid), // .valid + .sink0_channel (cmd_demux_src3_channel), // .channel + .sink0_data (cmd_demux_src3_data), // .data + .sink0_startofpacket (cmd_demux_src3_startofpacket), // .startofpacket + .sink0_endofpacket (cmd_demux_src3_endofpacket) // .endofpacket + ); + + jtag_io_mm_interconnect_0_rsp_demux rsp_demux ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .sink_ready (router_001_src_ready), // sink.ready + .sink_channel (router_001_src_channel), // .channel + .sink_data (router_001_src_data), // .data + .sink_startofpacket (router_001_src_startofpacket), // .startofpacket + .sink_endofpacket (router_001_src_endofpacket), // .endofpacket + .sink_valid (router_001_src_valid), // .valid + .src0_ready (rsp_demux_src0_ready), // src0.ready + .src0_valid (rsp_demux_src0_valid), // .valid + .src0_data (rsp_demux_src0_data), // .data + .src0_channel (rsp_demux_src0_channel), // .channel + .src0_startofpacket (rsp_demux_src0_startofpacket), // .startofpacket + .src0_endofpacket (rsp_demux_src0_endofpacket) // .endofpacket + ); + + jtag_io_mm_interconnect_0_rsp_demux rsp_demux_001 ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .sink_ready (router_002_src_ready), // sink.ready + .sink_channel (router_002_src_channel), // .channel + .sink_data (router_002_src_data), // .data + .sink_startofpacket (router_002_src_startofpacket), // .startofpacket + .sink_endofpacket (router_002_src_endofpacket), // .endofpacket + .sink_valid (router_002_src_valid), // .valid + .src0_ready (rsp_demux_001_src0_ready), // src0.ready + .src0_valid (rsp_demux_001_src0_valid), // .valid + .src0_data (rsp_demux_001_src0_data), // .data + .src0_channel (rsp_demux_001_src0_channel), // .channel + .src0_startofpacket (rsp_demux_001_src0_startofpacket), // .startofpacket + .src0_endofpacket (rsp_demux_001_src0_endofpacket) // .endofpacket + ); + + jtag_io_mm_interconnect_0_rsp_demux rsp_demux_002 ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .sink_ready (router_003_src_ready), // sink.ready + .sink_channel (router_003_src_channel), // .channel + .sink_data (router_003_src_data), // .data + .sink_startofpacket (router_003_src_startofpacket), // .startofpacket + .sink_endofpacket (router_003_src_endofpacket), // .endofpacket + .sink_valid (router_003_src_valid), // .valid + .src0_ready (rsp_demux_002_src0_ready), // src0.ready + .src0_valid (rsp_demux_002_src0_valid), // .valid + .src0_data (rsp_demux_002_src0_data), // .data + .src0_channel (rsp_demux_002_src0_channel), // .channel + .src0_startofpacket (rsp_demux_002_src0_startofpacket), // .startofpacket + .src0_endofpacket (rsp_demux_002_src0_endofpacket) // .endofpacket + ); + + jtag_io_mm_interconnect_0_rsp_demux rsp_demux_003 ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .sink_ready (router_004_src_ready), // sink.ready + .sink_channel (router_004_src_channel), // .channel + .sink_data (router_004_src_data), // .data + .sink_startofpacket (router_004_src_startofpacket), // .startofpacket + .sink_endofpacket (router_004_src_endofpacket), // .endofpacket + .sink_valid (router_004_src_valid), // .valid + .src0_ready (rsp_demux_003_src0_ready), // src0.ready + .src0_valid (rsp_demux_003_src0_valid), // .valid + .src0_data (rsp_demux_003_src0_data), // .data + .src0_channel (rsp_demux_003_src0_channel), // .channel + .src0_startofpacket (rsp_demux_003_src0_startofpacket), // .startofpacket + .src0_endofpacket (rsp_demux_003_src0_endofpacket) // .endofpacket + ); + + jtag_io_mm_interconnect_0_rsp_mux rsp_mux ( + .clk (clk_0_clk_clk), // clk.clk + .reset (out0_reset_reset_bridge_in_reset_reset), // clk_reset.reset + .src_ready (rsp_mux_src_ready), // src.ready + .src_valid (rsp_mux_src_valid), // .valid + .src_data (rsp_mux_src_data), // .data + .src_channel (rsp_mux_src_channel), // .channel + .src_startofpacket (rsp_mux_src_startofpacket), // .startofpacket + .src_endofpacket (rsp_mux_src_endofpacket), // .endofpacket + .sink0_ready (rsp_demux_src0_ready), // sink0.ready + .sink0_valid (rsp_demux_src0_valid), // .valid + .sink0_channel (rsp_demux_src0_channel), // .channel + .sink0_data (rsp_demux_src0_data), // .data + .sink0_startofpacket (rsp_demux_src0_startofpacket), // .startofpacket + .sink0_endofpacket (rsp_demux_src0_endofpacket), // .endofpacket + .sink1_ready (rsp_demux_001_src0_ready), // sink1.ready + .sink1_valid (rsp_demux_001_src0_valid), // .valid + .sink1_channel (rsp_demux_001_src0_channel), // .channel + .sink1_data (rsp_demux_001_src0_data), // .data + .sink1_startofpacket (rsp_demux_001_src0_startofpacket), // .startofpacket + .sink1_endofpacket (rsp_demux_001_src0_endofpacket), // .endofpacket + .sink2_ready (rsp_demux_002_src0_ready), // sink2.ready + .sink2_valid (rsp_demux_002_src0_valid), // .valid + .sink2_channel (rsp_demux_002_src0_channel), // .channel + .sink2_data (rsp_demux_002_src0_data), // .data + .sink2_startofpacket (rsp_demux_002_src0_startofpacket), // .startofpacket + .sink2_endofpacket (rsp_demux_002_src0_endofpacket), // .endofpacket + .sink3_ready (rsp_demux_003_src0_ready), // sink3.ready + .sink3_valid (rsp_demux_003_src0_valid), // .valid + .sink3_channel (rsp_demux_003_src0_channel), // .channel + .sink3_data (rsp_demux_003_src0_data), // .data + .sink3_startofpacket (rsp_demux_003_src0_startofpacket), // .startofpacket + .sink3_endofpacket (rsp_demux_003_src0_endofpacket) // .endofpacket + ); + + jtag_io_mm_interconnect_0_avalon_st_adapter #( + .inBitsPerSymbol (34), + .inUsePackets (0), + .inDataWidth (34), + .inChannelWidth (0), + .inErrorWidth (0), + .inUseEmptyPort (0), + .inUseValid (1), + .inUseReady (1), + .inReadyLatency (0), + .outDataWidth (34), + .outChannelWidth (0), + .outErrorWidth (1), + .outUseEmptyPort (0), + .outUseValid (1), + .outUseReady (1), + .outReadyLatency (0) + ) avalon_st_adapter ( + .in_clk_0_clk (clk_0_clk_clk), // in_clk_0.clk + .in_rst_0_reset (out0_reset_reset_bridge_in_reset_reset), // in_rst_0.reset + .in_0_data (out0_s1_agent_rdata_fifo_src_data), // in_0.data + .in_0_valid (out0_s1_agent_rdata_fifo_src_valid), // .valid + .in_0_ready (out0_s1_agent_rdata_fifo_src_ready), // .ready + .out_0_data (avalon_st_adapter_out_0_data), // out_0.data + .out_0_valid (avalon_st_adapter_out_0_valid), // .valid + .out_0_ready (avalon_st_adapter_out_0_ready), // .ready + .out_0_error (avalon_st_adapter_out_0_error) // .error + ); + + jtag_io_mm_interconnect_0_avalon_st_adapter #( + .inBitsPerSymbol (34), + .inUsePackets (0), + .inDataWidth (34), + .inChannelWidth (0), + .inErrorWidth (0), + .inUseEmptyPort (0), + .inUseValid (1), + .inUseReady (1), + .inReadyLatency (0), + .outDataWidth (34), + .outChannelWidth (0), + .outErrorWidth (1), + .outUseEmptyPort (0), + .outUseValid (1), + .outUseReady (1), + .outReadyLatency (0) + ) avalon_st_adapter_001 ( + .in_clk_0_clk (clk_0_clk_clk), // in_clk_0.clk + .in_rst_0_reset (out0_reset_reset_bridge_in_reset_reset), // in_rst_0.reset + .in_0_data (out1_s1_agent_rdata_fifo_src_data), // in_0.data + .in_0_valid (out1_s1_agent_rdata_fifo_src_valid), // .valid + .in_0_ready (out1_s1_agent_rdata_fifo_src_ready), // .ready + .out_0_data (avalon_st_adapter_001_out_0_data), // out_0.data + .out_0_valid (avalon_st_adapter_001_out_0_valid), // .valid + .out_0_ready (avalon_st_adapter_001_out_0_ready), // .ready + .out_0_error (avalon_st_adapter_001_out_0_error) // .error + ); + + jtag_io_mm_interconnect_0_avalon_st_adapter #( + .inBitsPerSymbol (34), + .inUsePackets (0), + .inDataWidth (34), + .inChannelWidth (0), + .inErrorWidth (0), + .inUseEmptyPort (0), + .inUseValid (1), + .inUseReady (1), + .inReadyLatency (0), + .outDataWidth (34), + .outChannelWidth (0), + .outErrorWidth (1), + .outUseEmptyPort (0), + .outUseValid (1), + .outUseReady (1), + .outReadyLatency (0) + ) avalon_st_adapter_002 ( + .in_clk_0_clk (clk_0_clk_clk), // in_clk_0.clk + .in_rst_0_reset (out0_reset_reset_bridge_in_reset_reset), // in_rst_0.reset + .in_0_data (in0_s1_agent_rdata_fifo_src_data), // in_0.data + .in_0_valid (in0_s1_agent_rdata_fifo_src_valid), // .valid + .in_0_ready (in0_s1_agent_rdata_fifo_src_ready), // .ready + .out_0_data (avalon_st_adapter_002_out_0_data), // out_0.data + .out_0_valid (avalon_st_adapter_002_out_0_valid), // .valid + .out_0_ready (avalon_st_adapter_002_out_0_ready), // .ready + .out_0_error (avalon_st_adapter_002_out_0_error) // .error + ); + + jtag_io_mm_interconnect_0_avalon_st_adapter #( + .inBitsPerSymbol (34), + .inUsePackets (0), + .inDataWidth (34), + .inChannelWidth (0), + .inErrorWidth (0), + .inUseEmptyPort (0), + .inUseValid (1), + .inUseReady (1), + .inReadyLatency (0), + .outDataWidth (34), + .outChannelWidth (0), + .outErrorWidth (1), + .outUseEmptyPort (0), + .outUseValid (1), + .outUseReady (1), + .outReadyLatency (0) + ) avalon_st_adapter_003 ( + .in_clk_0_clk (clk_0_clk_clk), // in_clk_0.clk + .in_rst_0_reset (out0_reset_reset_bridge_in_reset_reset), // in_rst_0.reset + .in_0_data (in1_s1_agent_rdata_fifo_src_data), // in_0.data + .in_0_valid (in1_s1_agent_rdata_fifo_src_valid), // .valid + .in_0_ready (in1_s1_agent_rdata_fifo_src_ready), // .ready + .out_0_data (avalon_st_adapter_003_out_0_data), // out_0.data + .out_0_valid (avalon_st_adapter_003_out_0_valid), // .valid + .out_0_ready (avalon_st_adapter_003_out_0_ready), // .ready + .out_0_error (avalon_st_adapter_003_out_0_error) // .error + ); + +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_avalon_st_adapter.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_avalon_st_adapter.v new file mode 100755 index 0000000..353eb96 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_avalon_st_adapter.v @@ -0,0 +1,202 @@ +// jtag_io_mm_interconnect_0_avalon_st_adapter.v + +// This file was auto-generated from altera_avalon_st_adapter_hw.tcl. If you edit it your changes +// will probably be lost. +// +// Generated using ACDS version 20.1 711 + +`timescale 1 ps / 1 ps +module jtag_io_mm_interconnect_0_avalon_st_adapter #( + parameter inBitsPerSymbol = 34, + parameter inUsePackets = 0, + parameter inDataWidth = 34, + parameter inChannelWidth = 0, + parameter inErrorWidth = 0, + parameter inUseEmptyPort = 0, + parameter inUseValid = 1, + parameter inUseReady = 1, + parameter inReadyLatency = 0, + parameter outDataWidth = 34, + parameter outChannelWidth = 0, + parameter outErrorWidth = 1, + parameter outUseEmptyPort = 0, + parameter outUseValid = 1, + parameter outUseReady = 1, + parameter outReadyLatency = 0 + ) ( + input wire in_clk_0_clk, // in_clk_0.clk + input wire in_rst_0_reset, // in_rst_0.reset + input wire [33:0] in_0_data, // in_0.data + input wire in_0_valid, // .valid + output wire in_0_ready, // .ready + output wire [33:0] out_0_data, // out_0.data + output wire out_0_valid, // .valid + input wire out_0_ready, // .ready + output wire [0:0] out_0_error // .error + ); + + generate + // If any of the display statements (or deliberately broken + // instantiations) within this generate block triggers then this module + // has been instantiated this module with a set of parameters different + // from those it was generated for. This will usually result in a + // non-functioning system. + if (inBitsPerSymbol != 34) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + inbitspersymbol_check ( .error(1'b1) ); + end + if (inUsePackets != 0) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + inusepackets_check ( .error(1'b1) ); + end + if (inDataWidth != 34) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + indatawidth_check ( .error(1'b1) ); + end + if (inChannelWidth != 0) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + inchannelwidth_check ( .error(1'b1) ); + end + if (inErrorWidth != 0) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + inerrorwidth_check ( .error(1'b1) ); + end + if (inUseEmptyPort != 0) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + inuseemptyport_check ( .error(1'b1) ); + end + if (inUseValid != 1) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + inusevalid_check ( .error(1'b1) ); + end + if (inUseReady != 1) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + inuseready_check ( .error(1'b1) ); + end + if (inReadyLatency != 0) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + inreadylatency_check ( .error(1'b1) ); + end + if (outDataWidth != 34) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + outdatawidth_check ( .error(1'b1) ); + end + if (outChannelWidth != 0) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + outchannelwidth_check ( .error(1'b1) ); + end + if (outErrorWidth != 1) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + outerrorwidth_check ( .error(1'b1) ); + end + if (outUseEmptyPort != 0) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + outuseemptyport_check ( .error(1'b1) ); + end + if (outUseValid != 1) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + outusevalid_check ( .error(1'b1) ); + end + if (outUseReady != 1) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + outuseready_check ( .error(1'b1) ); + end + if (outReadyLatency != 0) + begin + initial begin + $display("Generated module instantiated with wrong parameters"); + $stop; + end + instantiated_with_wrong_parameters_error_see_comment_above + outreadylatency_check ( .error(1'b1) ); + end + endgenerate + + jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0 error_adapter_0 ( + .clk (in_clk_0_clk), // clk.clk + .reset_n (~in_rst_0_reset), // reset.reset_n + .in_data (in_0_data), // in.data + .in_valid (in_0_valid), // .valid + .in_ready (in_0_ready), // .ready + .out_data (out_0_data), // out.data + .out_valid (out_0_valid), // .valid + .out_ready (out_0_ready), // .ready + .out_error (out_0_error) // .error + ); + +endmodule diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0.sv new file mode 100755 index 0000000..836ddbe --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0.sv @@ -0,0 +1,107 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// (C) 2001-2013 Altera Corporation. All rights reserved. +// Your use of Altera Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License Subscription +// Agreement, Altera MegaCore Function License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/13.1/ip/.../avalon-st_error_adapter.sv.terp#1 $ +// $Revision: #1 $ +// $Date: 2013/09/09 $ +// $Author: dmunday $ + + +// -------------------------------------------------------------------------------- +//| Avalon Streaming Error Adapter +// -------------------------------------------------------------------------------- + +`timescale 1ns / 100ps + +// ------------------------------------------ +// Generation parameters: +// output_name: jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0 +// use_ready: true +// use_packets: false +// use_empty: 0 +// empty_width: 0 +// data_width: 34 +// channel_width: 0 +// in_error_width: 0 +// out_error_width: 1 +// in_errors_list +// in_errors_indices 0 +// out_errors_list +// has_in_error_desc: FALSE +// has_out_error_desc: FALSE +// out_has_other: FALSE +// out_other_index: -1 +// dumpVar: +// inString: in_error[ +// closeString: ] | + +// ------------------------------------------ + + + + +module jtag_io_mm_interconnect_0_avalon_st_adapter_error_adapter_0 +( + // Interface: in + output reg in_ready, + input in_valid, + input [34-1: 0] in_data, + // Interface: out + input out_ready, + output reg out_valid, + output reg [34-1: 0] out_data, + output reg [0:0] out_error, + // Interface: clk + input clk, + // Interface: reset + input reset_n + + /*AUTOARG*/); + + reg in_error = 0; + initial in_error = 0; + + // --------------------------------------------------------------------- + //| Pass-through Mapping + // --------------------------------------------------------------------- + always_comb begin + in_ready = out_ready; + out_valid = in_valid; + out_data = in_data; + + end + + // --------------------------------------------------------------------- + //| Error Mapping + // --------------------------------------------------------------------- + always_comb begin + out_error = 0; + + out_error = in_error; + + end //always @* +endmodule + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_cmd_demux.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_cmd_demux.sv new file mode 100755 index 0000000..74a8071 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_cmd_demux.sv @@ -0,0 +1,145 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/20.1std/ip/merlin/altera_merlin_demultiplexer/altera_merlin_demultiplexer.sv.terp#1 $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ + +// ------------------------------------- +// Merlin Demultiplexer +// +// Asserts valid on the appropriate output +// given a one-hot channel signal. +// ------------------------------------- + +`timescale 1 ns / 1 ns + +// ------------------------------------------ +// Generation parameters: +// output_name: jtag_io_mm_interconnect_0_cmd_demux +// ST_DATA_W: 104 +// ST_CHANNEL_W: 4 +// NUM_OUTPUTS: 4 +// VALID_WIDTH: 4 +// ------------------------------------------ + +//------------------------------------------ +// Message Supression Used +// QIS Warnings +// 15610 - Warning: Design contains x input pin(s) that do not drive logic +//------------------------------------------ + +module jtag_io_mm_interconnect_0_cmd_demux +( + // ------------------- + // Sink + // ------------------- + input [4-1 : 0] sink_valid, + input [104-1 : 0] sink_data, // ST_DATA_W=104 + input [4-1 : 0] sink_channel, // ST_CHANNEL_W=4 + input sink_startofpacket, + input sink_endofpacket, + output sink_ready, + + // ------------------- + // Sources + // ------------------- + output reg src0_valid, + output reg [104-1 : 0] src0_data, // ST_DATA_W=104 + output reg [4-1 : 0] src0_channel, // ST_CHANNEL_W=4 + output reg src0_startofpacket, + output reg src0_endofpacket, + input src0_ready, + + output reg src1_valid, + output reg [104-1 : 0] src1_data, // ST_DATA_W=104 + output reg [4-1 : 0] src1_channel, // ST_CHANNEL_W=4 + output reg src1_startofpacket, + output reg src1_endofpacket, + input src1_ready, + + output reg src2_valid, + output reg [104-1 : 0] src2_data, // ST_DATA_W=104 + output reg [4-1 : 0] src2_channel, // ST_CHANNEL_W=4 + output reg src2_startofpacket, + output reg src2_endofpacket, + input src2_ready, + + output reg src3_valid, + output reg [104-1 : 0] src3_data, // ST_DATA_W=104 + output reg [4-1 : 0] src3_channel, // ST_CHANNEL_W=4 + output reg src3_startofpacket, + output reg src3_endofpacket, + input src3_ready, + + + // ------------------- + // Clock & Reset + // ------------------- + (*altera_attribute = "-name MESSAGE_DISABLE 15610" *) // setting message suppression on clk + input clk, + (*altera_attribute = "-name MESSAGE_DISABLE 15610" *) // setting message suppression on reset + input reset + +); + + localparam NUM_OUTPUTS = 4; + wire [NUM_OUTPUTS - 1 : 0] ready_vector; + + // ------------------- + // Demux + // ------------------- + always @* begin + src0_data = sink_data; + src0_startofpacket = sink_startofpacket; + src0_endofpacket = sink_endofpacket; + src0_channel = sink_channel >> NUM_OUTPUTS; + + src0_valid = sink_channel[0] && sink_valid[0]; + + src1_data = sink_data; + src1_startofpacket = sink_startofpacket; + src1_endofpacket = sink_endofpacket; + src1_channel = sink_channel >> NUM_OUTPUTS; + + src1_valid = sink_channel[1] && sink_valid[1]; + + src2_data = sink_data; + src2_startofpacket = sink_startofpacket; + src2_endofpacket = sink_endofpacket; + src2_channel = sink_channel >> NUM_OUTPUTS; + + src2_valid = sink_channel[2] && sink_valid[2]; + + src3_data = sink_data; + src3_startofpacket = sink_startofpacket; + src3_endofpacket = sink_endofpacket; + src3_channel = sink_channel >> NUM_OUTPUTS; + + src3_valid = sink_channel[3] && sink_valid[3]; + + end + + // ------------------- + // Backpressure + // ------------------- + assign ready_vector[0] = src0_ready; + assign ready_vector[1] = src1_ready; + assign ready_vector[2] = src2_ready; + assign ready_vector[3] = src3_ready; + + assign sink_ready = |(sink_channel & ready_vector); + +endmodule + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_cmd_mux.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_cmd_mux.sv new file mode 100755 index 0000000..29bc771 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_cmd_mux.sv @@ -0,0 +1,96 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// (C) 2001-2014 Altera Corporation. All rights reserved. +// Your use of Altera Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License Subscription +// Agreement, Altera MegaCore Function License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/20.1std/ip/merlin/altera_merlin_multiplexer/altera_merlin_multiplexer.sv.terp#1 $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ + +// ------------------------------------------ +// Merlin Multiplexer +// ------------------------------------------ + +`timescale 1 ns / 1 ns + + +// ------------------------------------------ +// Generation parameters: +// output_name: jtag_io_mm_interconnect_0_cmd_mux +// NUM_INPUTS: 1 +// ARBITRATION_SHARES: 1 +// ARBITRATION_SCHEME "round-robin" +// PIPELINE_ARB: 1 +// PKT_TRANS_LOCK: 72 (arbitration locking enabled) +// ST_DATA_W: 104 +// ST_CHANNEL_W: 4 +// ------------------------------------------ + +module jtag_io_mm_interconnect_0_cmd_mux +( + // ---------------------- + // Sinks + // ---------------------- + input sink0_valid, + input [104-1 : 0] sink0_data, + input [4-1: 0] sink0_channel, + input sink0_startofpacket, + input sink0_endofpacket, + output sink0_ready, + + + // ---------------------- + // Source + // ---------------------- + output src_valid, + output [104-1 : 0] src_data, + output [4-1 : 0] src_channel, + output src_startofpacket, + output src_endofpacket, + input src_ready, + + // ---------------------- + // Clock & Reset + // ---------------------- + input clk, + input reset +); + localparam PAYLOAD_W = 104 + 4 + 2; + localparam NUM_INPUTS = 1; + localparam SHARE_COUNTER_W = 1; + localparam PIPELINE_ARB = 1; + localparam ST_DATA_W = 104; + localparam ST_CHANNEL_W = 4; + localparam PKT_TRANS_LOCK = 72; + + assign src_valid = sink0_valid; + assign src_data = sink0_data; + assign src_channel = sink0_channel; + assign src_startofpacket = sink0_startofpacket; + assign src_endofpacket = sink0_endofpacket; + assign sink0_ready = src_ready; +endmodule + + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_router.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_router.sv new file mode 100755 index 0000000..f480395 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_router.sv @@ -0,0 +1,246 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + + +// Your use of Altera Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License Subscription +// Agreement, Altera MegaCore Function License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/20.1std/ip/merlin/altera_merlin_router/altera_merlin_router.sv.terp#1 $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ + +// ------------------------------------------------------- +// Merlin Router +// +// Asserts the appropriate one-hot encoded channel based on +// either (a) the address or (b) the dest id. The DECODER_TYPE +// parameter controls this behaviour. 0 means address decoder, +// 1 means dest id decoder. +// +// In the case of (a), it also sets the destination id. +// ------------------------------------------------------- + +`timescale 1 ns / 1 ns + +module jtag_io_mm_interconnect_0_router_default_decode + #( + parameter DEFAULT_CHANNEL = 0, + DEFAULT_WR_CHANNEL = -1, + DEFAULT_RD_CHANNEL = -1, + DEFAULT_DESTID = 2 + ) + (output [90 - 89 : 0] default_destination_id, + output [4-1 : 0] default_wr_channel, + output [4-1 : 0] default_rd_channel, + output [4-1 : 0] default_src_channel + ); + + assign default_destination_id = + DEFAULT_DESTID[90 - 89 : 0]; + + generate + if (DEFAULT_CHANNEL == -1) begin : no_default_channel_assignment + assign default_src_channel = '0; + end + else begin : default_channel_assignment + assign default_src_channel = 4'b1 << DEFAULT_CHANNEL; + end + endgenerate + + generate + if (DEFAULT_RD_CHANNEL == -1) begin : no_default_rw_channel_assignment + assign default_wr_channel = '0; + assign default_rd_channel = '0; + end + else begin : default_rw_channel_assignment + assign default_wr_channel = 4'b1 << DEFAULT_WR_CHANNEL; + assign default_rd_channel = 4'b1 << DEFAULT_RD_CHANNEL; + end + endgenerate + +endmodule + + +module jtag_io_mm_interconnect_0_router +( + // ------------------- + // Clock & Reset + // ------------------- + input clk, + input reset, + + // ------------------- + // Command Sink (Input) + // ------------------- + input sink_valid, + input [104-1 : 0] sink_data, + input sink_startofpacket, + input sink_endofpacket, + output sink_ready, + + // ------------------- + // Command Source (Output) + // ------------------- + output src_valid, + output reg [104-1 : 0] src_data, + output reg [4-1 : 0] src_channel, + output src_startofpacket, + output src_endofpacket, + input src_ready +); + + // ------------------------------------------------------- + // Local parameters and variables + // ------------------------------------------------------- + localparam PKT_ADDR_H = 67; + localparam PKT_ADDR_L = 36; + localparam PKT_DEST_ID_H = 90; + localparam PKT_DEST_ID_L = 89; + localparam PKT_PROTECTION_H = 94; + localparam PKT_PROTECTION_L = 92; + localparam ST_DATA_W = 104; + localparam ST_CHANNEL_W = 4; + localparam DECODER_TYPE = 0; + + localparam PKT_TRANS_WRITE = 70; + localparam PKT_TRANS_READ = 71; + + localparam PKT_ADDR_W = PKT_ADDR_H-PKT_ADDR_L + 1; + localparam PKT_DEST_ID_W = PKT_DEST_ID_H-PKT_DEST_ID_L + 1; + + + + // ------------------------------------------------------- + // Figure out the number of bits to mask off for each slave span + // during address decoding + // ------------------------------------------------------- + localparam PAD0 = log2ceil(64'h10 - 64'h0); + localparam PAD1 = log2ceil(64'h20 - 64'h10); + localparam PAD2 = log2ceil(64'h30 - 64'h20); + localparam PAD3 = log2ceil(64'h40 - 64'h30); + // ------------------------------------------------------- + // Work out which address bits are significant based on the + // address range of the slaves. If the required width is too + // large or too small, we use the address field width instead. + // ------------------------------------------------------- + localparam ADDR_RANGE = 64'h40; + localparam RANGE_ADDR_WIDTH = log2ceil(ADDR_RANGE); + localparam OPTIMIZED_ADDR_H = (RANGE_ADDR_WIDTH > PKT_ADDR_W) || + (RANGE_ADDR_WIDTH == 0) ? + PKT_ADDR_H : + PKT_ADDR_L + RANGE_ADDR_WIDTH - 1; + + localparam RG = RANGE_ADDR_WIDTH-1; + localparam REAL_ADDRESS_RANGE = OPTIMIZED_ADDR_H - PKT_ADDR_L; + + reg [PKT_ADDR_W-1 : 0] address; + always @* begin + address = {PKT_ADDR_W{1'b0}}; + address [REAL_ADDRESS_RANGE:0] = sink_data[OPTIMIZED_ADDR_H : PKT_ADDR_L]; + end + + // ------------------------------------------------------- + // Pass almost everything through, untouched + // ------------------------------------------------------- + assign sink_ready = src_ready; + assign src_valid = sink_valid; + assign src_startofpacket = sink_startofpacket; + assign src_endofpacket = sink_endofpacket; + wire [PKT_DEST_ID_W-1:0] default_destid; + wire [4-1 : 0] default_src_channel; + + + + + // ------------------------------------------------------- + // Write and read transaction signals + // ------------------------------------------------------- + wire read_transaction; + assign read_transaction = sink_data[PKT_TRANS_READ]; + + + jtag_io_mm_interconnect_0_router_default_decode the_default_decode( + .default_destination_id (default_destid), + .default_wr_channel (), + .default_rd_channel (), + .default_src_channel (default_src_channel) + ); + + always @* begin + src_data = sink_data; + src_channel = default_src_channel; + src_data[PKT_DEST_ID_H:PKT_DEST_ID_L] = default_destid; + + // -------------------------------------------------- + // Address Decoder + // Sets the channel and destination ID based on the address + // -------------------------------------------------- + + // ( 0x0 .. 0x10 ) + if ( {address[RG:PAD0],{PAD0{1'b0}}} == 6'h0 ) begin + src_channel = 4'b0001; + src_data[PKT_DEST_ID_H:PKT_DEST_ID_L] = 2; + end + + // ( 0x10 .. 0x20 ) + if ( {address[RG:PAD1],{PAD1{1'b0}}} == 6'h10 ) begin + src_channel = 4'b0010; + src_data[PKT_DEST_ID_H:PKT_DEST_ID_L] = 3; + end + + // ( 0x20 .. 0x30 ) + if ( {address[RG:PAD2],{PAD2{1'b0}}} == 6'h20 && read_transaction ) begin + src_channel = 4'b0100; + src_data[PKT_DEST_ID_H:PKT_DEST_ID_L] = 0; + end + + // ( 0x30 .. 0x40 ) + if ( {address[RG:PAD3],{PAD3{1'b0}}} == 6'h30 && read_transaction ) begin + src_channel = 4'b1000; + src_data[PKT_DEST_ID_H:PKT_DEST_ID_L] = 1; + end + +end + + + // -------------------------------------------------- + // Ceil(log2()) function + // -------------------------------------------------- + function integer log2ceil; + input reg[65:0] val; + reg [65:0] i; + + begin + i = 1; + log2ceil = 0; + + while (i < val) begin + log2ceil = log2ceil + 1; + i = i << 1; + end + end + endfunction + +endmodule + + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_router_001.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_router_001.sv new file mode 100755 index 0000000..f262ff4 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_router_001.sv @@ -0,0 +1,215 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + + +// Your use of Altera Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License Subscription +// Agreement, Altera MegaCore Function License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/20.1std/ip/merlin/altera_merlin_router/altera_merlin_router.sv.terp#1 $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ + +// ------------------------------------------------------- +// Merlin Router +// +// Asserts the appropriate one-hot encoded channel based on +// either (a) the address or (b) the dest id. The DECODER_TYPE +// parameter controls this behaviour. 0 means address decoder, +// 1 means dest id decoder. +// +// In the case of (a), it also sets the destination id. +// ------------------------------------------------------- + +`timescale 1 ns / 1 ns + +module jtag_io_mm_interconnect_0_router_001_default_decode + #( + parameter DEFAULT_CHANNEL = 0, + DEFAULT_WR_CHANNEL = -1, + DEFAULT_RD_CHANNEL = -1, + DEFAULT_DESTID = 0 + ) + (output [90 - 89 : 0] default_destination_id, + output [4-1 : 0] default_wr_channel, + output [4-1 : 0] default_rd_channel, + output [4-1 : 0] default_src_channel + ); + + assign default_destination_id = + DEFAULT_DESTID[90 - 89 : 0]; + + generate + if (DEFAULT_CHANNEL == -1) begin : no_default_channel_assignment + assign default_src_channel = '0; + end + else begin : default_channel_assignment + assign default_src_channel = 4'b1 << DEFAULT_CHANNEL; + end + endgenerate + + generate + if (DEFAULT_RD_CHANNEL == -1) begin : no_default_rw_channel_assignment + assign default_wr_channel = '0; + assign default_rd_channel = '0; + end + else begin : default_rw_channel_assignment + assign default_wr_channel = 4'b1 << DEFAULT_WR_CHANNEL; + assign default_rd_channel = 4'b1 << DEFAULT_RD_CHANNEL; + end + endgenerate + +endmodule + + +module jtag_io_mm_interconnect_0_router_001 +( + // ------------------- + // Clock & Reset + // ------------------- + input clk, + input reset, + + // ------------------- + // Command Sink (Input) + // ------------------- + input sink_valid, + input [104-1 : 0] sink_data, + input sink_startofpacket, + input sink_endofpacket, + output sink_ready, + + // ------------------- + // Command Source (Output) + // ------------------- + output src_valid, + output reg [104-1 : 0] src_data, + output reg [4-1 : 0] src_channel, + output src_startofpacket, + output src_endofpacket, + input src_ready +); + + // ------------------------------------------------------- + // Local parameters and variables + // ------------------------------------------------------- + localparam PKT_ADDR_H = 67; + localparam PKT_ADDR_L = 36; + localparam PKT_DEST_ID_H = 90; + localparam PKT_DEST_ID_L = 89; + localparam PKT_PROTECTION_H = 94; + localparam PKT_PROTECTION_L = 92; + localparam ST_DATA_W = 104; + localparam ST_CHANNEL_W = 4; + localparam DECODER_TYPE = 1; + + localparam PKT_TRANS_WRITE = 70; + localparam PKT_TRANS_READ = 71; + + localparam PKT_ADDR_W = PKT_ADDR_H-PKT_ADDR_L + 1; + localparam PKT_DEST_ID_W = PKT_DEST_ID_H-PKT_DEST_ID_L + 1; + + + + // ------------------------------------------------------- + // Figure out the number of bits to mask off for each slave span + // during address decoding + // ------------------------------------------------------- + // ------------------------------------------------------- + // Work out which address bits are significant based on the + // address range of the slaves. If the required width is too + // large or too small, we use the address field width instead. + // ------------------------------------------------------- + localparam ADDR_RANGE = 64'h0; + localparam RANGE_ADDR_WIDTH = log2ceil(ADDR_RANGE); + localparam OPTIMIZED_ADDR_H = (RANGE_ADDR_WIDTH > PKT_ADDR_W) || + (RANGE_ADDR_WIDTH == 0) ? + PKT_ADDR_H : + PKT_ADDR_L + RANGE_ADDR_WIDTH - 1; + + localparam RG = RANGE_ADDR_WIDTH; + localparam REAL_ADDRESS_RANGE = OPTIMIZED_ADDR_H - PKT_ADDR_L; + + reg [PKT_DEST_ID_W-1 : 0] destid; + + // ------------------------------------------------------- + // Pass almost everything through, untouched + // ------------------------------------------------------- + assign sink_ready = src_ready; + assign src_valid = sink_valid; + assign src_startofpacket = sink_startofpacket; + assign src_endofpacket = sink_endofpacket; + wire [4-1 : 0] default_src_channel; + + + + + + + jtag_io_mm_interconnect_0_router_001_default_decode the_default_decode( + .default_destination_id (), + .default_wr_channel (), + .default_rd_channel (), + .default_src_channel (default_src_channel) + ); + + always @* begin + src_data = sink_data; + src_channel = default_src_channel; + + // -------------------------------------------------- + // DestinationID Decoder + // Sets the channel based on the destination ID. + // -------------------------------------------------- + destid = sink_data[PKT_DEST_ID_H : PKT_DEST_ID_L]; + + + + if (destid == 0 ) begin + src_channel = 4'b1; + end + + +end + + + // -------------------------------------------------- + // Ceil(log2()) function + // -------------------------------------------------- + function integer log2ceil; + input reg[65:0] val; + reg [65:0] i; + + begin + i = 1; + log2ceil = 0; + + while (i < val) begin + log2ceil = log2ceil + 1; + i = i << 1; + end + end + endfunction + +endmodule + + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_rsp_demux.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_rsp_demux.sv new file mode 100755 index 0000000..84df01e --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_rsp_demux.sv @@ -0,0 +1,100 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/20.1std/ip/merlin/altera_merlin_demultiplexer/altera_merlin_demultiplexer.sv.terp#1 $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ + +// ------------------------------------- +// Merlin Demultiplexer +// +// Asserts valid on the appropriate output +// given a one-hot channel signal. +// ------------------------------------- + +`timescale 1 ns / 1 ns + +// ------------------------------------------ +// Generation parameters: +// output_name: jtag_io_mm_interconnect_0_rsp_demux +// ST_DATA_W: 104 +// ST_CHANNEL_W: 4 +// NUM_OUTPUTS: 1 +// VALID_WIDTH: 1 +// ------------------------------------------ + +//------------------------------------------ +// Message Supression Used +// QIS Warnings +// 15610 - Warning: Design contains x input pin(s) that do not drive logic +//------------------------------------------ + +module jtag_io_mm_interconnect_0_rsp_demux +( + // ------------------- + // Sink + // ------------------- + input [1-1 : 0] sink_valid, + input [104-1 : 0] sink_data, // ST_DATA_W=104 + input [4-1 : 0] sink_channel, // ST_CHANNEL_W=4 + input sink_startofpacket, + input sink_endofpacket, + output sink_ready, + + // ------------------- + // Sources + // ------------------- + output reg src0_valid, + output reg [104-1 : 0] src0_data, // ST_DATA_W=104 + output reg [4-1 : 0] src0_channel, // ST_CHANNEL_W=4 + output reg src0_startofpacket, + output reg src0_endofpacket, + input src0_ready, + + + // ------------------- + // Clock & Reset + // ------------------- + (*altera_attribute = "-name MESSAGE_DISABLE 15610" *) // setting message suppression on clk + input clk, + (*altera_attribute = "-name MESSAGE_DISABLE 15610" *) // setting message suppression on reset + input reset + +); + + localparam NUM_OUTPUTS = 1; + wire [NUM_OUTPUTS - 1 : 0] ready_vector; + + // ------------------- + // Demux + // ------------------- + always @* begin + src0_data = sink_data; + src0_startofpacket = sink_startofpacket; + src0_endofpacket = sink_endofpacket; + src0_channel = sink_channel >> NUM_OUTPUTS; + + src0_valid = sink_channel[0] && sink_valid; + + end + + // ------------------- + // Backpressure + // ------------------- + assign ready_vector[0] = src0_ready; + + assign sink_ready = |(sink_channel & {{3{1'b0}},{ready_vector[NUM_OUTPUTS - 1 : 0]}}); + +endmodule + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_rsp_mux.sv b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_rsp_mux.sv new file mode 100755 index 0000000..7bf494f --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_mm_interconnect_0_rsp_mux.sv @@ -0,0 +1,385 @@ +// (C) 2001-2020 Intel Corporation. All rights reserved. +// Your use of Intel Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files from any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Intel Program License Subscription +// Agreement, Intel FPGA IP License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Intel and sold by +// Intel or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// (C) 2001-2014 Altera Corporation. All rights reserved. +// Your use of Altera Corporation's design tools, logic functions and other +// software and tools, and its AMPP partner logic functions, and any output +// files any of the foregoing (including device programming or simulation +// files), and any associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License Subscription +// Agreement, Altera MegaCore Function License Agreement, or other applicable +// license agreement, including, without limitation, that your use is for the +// sole purpose of programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the applicable +// agreement for further details. + + +// $Id: //acds/rel/20.1std/ip/merlin/altera_merlin_multiplexer/altera_merlin_multiplexer.sv.terp#1 $ +// $Revision: #1 $ +// $Date: 2019/10/06 $ +// $Author: psgswbuild $ + +// ------------------------------------------ +// Merlin Multiplexer +// ------------------------------------------ + +`timescale 1 ns / 1 ns + + +// ------------------------------------------ +// Generation parameters: +// output_name: jtag_io_mm_interconnect_0_rsp_mux +// NUM_INPUTS: 4 +// ARBITRATION_SHARES: 1 1 1 1 +// ARBITRATION_SCHEME "no-arb" +// PIPELINE_ARB: 0 +// PKT_TRANS_LOCK: 72 (arbitration locking enabled) +// ST_DATA_W: 104 +// ST_CHANNEL_W: 4 +// ------------------------------------------ + +module jtag_io_mm_interconnect_0_rsp_mux +( + // ---------------------- + // Sinks + // ---------------------- + input sink0_valid, + input [104-1 : 0] sink0_data, + input [4-1: 0] sink0_channel, + input sink0_startofpacket, + input sink0_endofpacket, + output sink0_ready, + + input sink1_valid, + input [104-1 : 0] sink1_data, + input [4-1: 0] sink1_channel, + input sink1_startofpacket, + input sink1_endofpacket, + output sink1_ready, + + input sink2_valid, + input [104-1 : 0] sink2_data, + input [4-1: 0] sink2_channel, + input sink2_startofpacket, + input sink2_endofpacket, + output sink2_ready, + + input sink3_valid, + input [104-1 : 0] sink3_data, + input [4-1: 0] sink3_channel, + input sink3_startofpacket, + input sink3_endofpacket, + output sink3_ready, + + + // ---------------------- + // Source + // ---------------------- + output src_valid, + output [104-1 : 0] src_data, + output [4-1 : 0] src_channel, + output src_startofpacket, + output src_endofpacket, + input src_ready, + + // ---------------------- + // Clock & Reset + // ---------------------- + input clk, + input reset +); + localparam PAYLOAD_W = 104 + 4 + 2; + localparam NUM_INPUTS = 4; + localparam SHARE_COUNTER_W = 1; + localparam PIPELINE_ARB = 0; + localparam ST_DATA_W = 104; + localparam ST_CHANNEL_W = 4; + localparam PKT_TRANS_LOCK = 72; + + // ------------------------------------------ + // Signals + // ------------------------------------------ + wire [NUM_INPUTS - 1 : 0] request; + wire [NUM_INPUTS - 1 : 0] valid; + wire [NUM_INPUTS - 1 : 0] grant; + wire [NUM_INPUTS - 1 : 0] next_grant; + reg [NUM_INPUTS - 1 : 0] saved_grant; + reg [PAYLOAD_W - 1 : 0] src_payload; + wire last_cycle; + reg packet_in_progress; + reg update_grant; + + wire [PAYLOAD_W - 1 : 0] sink0_payload; + wire [PAYLOAD_W - 1 : 0] sink1_payload; + wire [PAYLOAD_W - 1 : 0] sink2_payload; + wire [PAYLOAD_W - 1 : 0] sink3_payload; + + assign valid[0] = sink0_valid; + assign valid[1] = sink1_valid; + assign valid[2] = sink2_valid; + assign valid[3] = sink3_valid; + + + // ------------------------------------------ + // ------------------------------------------ + // Grant Logic & Updates + // ------------------------------------------ + // ------------------------------------------ + reg [NUM_INPUTS - 1 : 0] lock; + always @* begin + lock[0] = sink0_data[72]; + lock[1] = sink1_data[72]; + lock[2] = sink2_data[72]; + lock[3] = sink3_data[72]; + end + + assign last_cycle = src_valid & src_ready & src_endofpacket & ~(|(lock & grant)); + + // ------------------------------------------ + // We're working on a packet at any time valid is high, except + // when this is the endofpacket. + // ------------------------------------------ + always @(posedge clk or posedge reset) begin + if (reset) begin + packet_in_progress <= 1'b0; + end + else begin + if (last_cycle) + packet_in_progress <= 1'b0; + else if (src_valid) + packet_in_progress <= 1'b1; + end + end + + + // ------------------------------------------ + // Shares + // + // Special case: all-equal shares _should_ be optimized into assigning a + // constant to next_grant_share. + // Special case: all-1's shares _should_ result in the share counter + // being optimized away. + // ------------------------------------------ + // Input | arb shares | counter load value + // 0 | 1 | 0 + // 1 | 1 | 0 + // 2 | 1 | 0 + // 3 | 1 | 0 + wire [SHARE_COUNTER_W - 1 : 0] share_0 = 1'd0; + wire [SHARE_COUNTER_W - 1 : 0] share_1 = 1'd0; + wire [SHARE_COUNTER_W - 1 : 0] share_2 = 1'd0; + wire [SHARE_COUNTER_W - 1 : 0] share_3 = 1'd0; + + // ------------------------------------------ + // Choose the share value corresponding to the grant. + // ------------------------------------------ + reg [SHARE_COUNTER_W - 1 : 0] next_grant_share; + always @* begin + next_grant_share = + share_0 & { SHARE_COUNTER_W {next_grant[0]} } | + share_1 & { SHARE_COUNTER_W {next_grant[1]} } | + share_2 & { SHARE_COUNTER_W {next_grant[2]} } | + share_3 & { SHARE_COUNTER_W {next_grant[3]} }; + end + + // ------------------------------------------ + // Flag to indicate first packet of an arb sequence. + // ------------------------------------------ + wire grant_changed = ~packet_in_progress && ~(|(saved_grant & valid)); + reg first_packet_r; + wire first_packet = grant_changed | first_packet_r; + always @(posedge clk or posedge reset) begin + if (reset) begin + first_packet_r <= 1'b0; + end + else begin + if (update_grant) + first_packet_r <= 1'b1; + else if (last_cycle) + first_packet_r <= 1'b0; + else if (grant_changed) + first_packet_r <= 1'b1; + end + end + + // ------------------------------------------ + // Compute the next share-count value. + // ------------------------------------------ + reg [SHARE_COUNTER_W - 1 : 0] p1_share_count; + reg [SHARE_COUNTER_W - 1 : 0] share_count; + reg share_count_zero_flag; + + always @* begin + if (first_packet) begin + p1_share_count = next_grant_share; + end + else begin + // Update the counter, but don't decrement below 0. + p1_share_count = share_count_zero_flag ? '0 : share_count - 1'b1; + end + end + + // ------------------------------------------ + // Update the share counter and share-counter=zero flag. + // ------------------------------------------ + always @(posedge clk or posedge reset) begin + if (reset) begin + share_count <= '0; + share_count_zero_flag <= 1'b1; + end + else begin + if (last_cycle) begin + share_count <= p1_share_count; + share_count_zero_flag <= (p1_share_count == '0); + end + end + end + + // ------------------------------------------ + // For each input, maintain a final_packet signal which goes active for the + // last packet of a full-share packet sequence. Example: if I have 4 + // shares and I'm continuously requesting, final_packet is active in the + // 4th packet. + // ------------------------------------------ + wire final_packet_0 = 1'b1; + + wire final_packet_1 = 1'b1; + + wire final_packet_2 = 1'b1; + + wire final_packet_3 = 1'b1; + + + // ------------------------------------------ + // Concatenate all final_packet signals (wire or reg) into a handy vector. + // ------------------------------------------ + wire [NUM_INPUTS - 1 : 0] final_packet = { + final_packet_3, + final_packet_2, + final_packet_1, + final_packet_0 + }; + + // ------------------------------------------ + // ------------------------------------------ + wire p1_done = |(final_packet & grant); + + // ------------------------------------------ + // Flag for the first cycle of packets within an + // arb sequence + // ------------------------------------------ + reg first_cycle; + always @(posedge clk, posedge reset) begin + if (reset) + first_cycle <= 0; + else + first_cycle <= last_cycle && ~p1_done; + end + + + always @* begin + update_grant = 0; + + // ------------------------------------------ + // No arbitration pipeline, update grant whenever + // the current arb winner has consumed all shares, + // or all requests are low + // ------------------------------------------ + update_grant = (last_cycle && p1_done) || (first_cycle && ~(|valid)); + update_grant = last_cycle; + end + + wire save_grant; + assign save_grant = 1; + assign grant = next_grant; + + always @(posedge clk, posedge reset) begin + if (reset) + saved_grant <= '0; + else if (save_grant) + saved_grant <= next_grant; + end + + // ------------------------------------------ + // ------------------------------------------ + // Arbitrator + // ------------------------------------------ + // ------------------------------------------ + + // ------------------------------------------ + // Create a request vector that stays high during + // the packet for unpipelined arbitration. + // + // The pipelined arbitration scheme does not require + // request to be held high during the packet. + // ------------------------------------------ + assign request = valid; + + wire [NUM_INPUTS - 1 : 0] next_grant_from_arb; + + altera_merlin_arbitrator + #( + .NUM_REQUESTERS(NUM_INPUTS), + .SCHEME ("no-arb"), + .PIPELINE (0) + ) arb ( + .clk (clk), + .reset (reset), + .request (request), + .grant (next_grant_from_arb), + .save_top_priority (src_valid), + .increment_top_priority (update_grant) + ); + + assign next_grant = next_grant_from_arb; + + // ------------------------------------------ + // ------------------------------------------ + // Mux + // + // Implemented as a sum of products. + // ------------------------------------------ + // ------------------------------------------ + + assign sink0_ready = src_ready && grant[0]; + assign sink1_ready = src_ready && grant[1]; + assign sink2_ready = src_ready && grant[2]; + assign sink3_ready = src_ready && grant[3]; + + assign src_valid = |(grant & valid); + + always @* begin + src_payload = + sink0_payload & {PAYLOAD_W {grant[0]} } | + sink1_payload & {PAYLOAD_W {grant[1]} } | + sink2_payload & {PAYLOAD_W {grant[2]} } | + sink3_payload & {PAYLOAD_W {grant[3]} }; + end + + // ------------------------------------------ + // Mux Payload Mapping + // ------------------------------------------ + + assign sink0_payload = {sink0_channel,sink0_data, + sink0_startofpacket,sink0_endofpacket}; + assign sink1_payload = {sink1_channel,sink1_data, + sink1_startofpacket,sink1_endofpacket}; + assign sink2_payload = {sink2_channel,sink2_data, + sink2_startofpacket,sink2_endofpacket}; + assign sink3_payload = {sink3_channel,sink3_data, + sink3_startofpacket,sink3_endofpacket}; + + assign {src_channel,src_data,src_startofpacket,src_endofpacket} = src_payload; +endmodule + + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_out0.v b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_out0.v new file mode 100755 index 0000000..60506d1 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/synthesis/submodules/jtag_io_out0.v @@ -0,0 +1,67 @@ +//Legal Notice: (C)2022 Altera Corporation. All rights reserved. Your +//use of Altera Corporation's design tools, logic functions and other +//software and tools, and its AMPP partner logic functions, and any +//output files any of the foregoing (including device programming or +//simulation files), and any associated documentation or information are +//expressly subject to the terms and conditions of the Altera Program +//License Subscription Agreement or other applicable license agreement, +//including, without limitation, that your use is for the sole purpose +//of programming logic devices manufactured by Altera and sold by Altera +//or its authorized distributors. Please refer to the applicable +//agreement for further details. + +// synthesis translate_off +`timescale 1ns / 1ps +// synthesis translate_on + +// turn off superfluous verilog processor warnings +// altera message_level Level1 +// altera message_off 10034 10035 10036 10037 10230 10240 10030 + +module jtag_io_out0 ( + // inputs: + address, + chipselect, + clk, + reset_n, + write_n, + writedata, + + // outputs: + out_port, + readdata + ) +; + + output [ 31: 0] out_port; + output [ 31: 0] readdata; + input [ 1: 0] address; + input chipselect; + input clk; + input reset_n; + input write_n; + input [ 31: 0] writedata; + + +wire clk_en; +reg [ 31: 0] data_out; +wire [ 31: 0] out_port; +wire [ 31: 0] read_mux_out; +wire [ 31: 0] readdata; + assign clk_en = 1; + //s1, which is an e_avalon_slave + assign read_mux_out = {32 {(address == 0)}} & data_out; + always @(posedge clk or negedge reset_n) + begin + if (reset_n == 0) + data_out <= 0; + else if (chipselect && ~write_n && (address == 0)) + data_out <= writedata[31 : 0]; + end + + + assign readdata = {32'b0 | read_mux_out}; + assign out_port = data_out; + +endmodule + diff --git a/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.bsf b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.bsf new file mode 100755 index 0000000..0bc2542 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.bsf @@ -0,0 +1,93 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 2020 Intel Corporation. All rights reserved. +Your use of Intel Corporation's design tools, logic functions +and other software and tools, and any partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Intel Program License +Subscription Agreement, the Intel Quartus Prime License Agreement, +the Intel FPGA IP License Agreement, or other applicable license +agreement, including, without limitation, that your use is for +the sole purpose of programming logic devices manufactured by +Intel and sold by Intel or its authorized distributors. Please +refer to the applicable agreement for further details, at +https://fpgasoftware.intel.com/eula. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 160 184) + (text "sys_pll" (rect 60 -1 88 11)(font "Arial" (font_size 10))) + (text "inst" (rect 8 168 20 180)(font "Arial" )) + (port + (pt 0 72) + (input) + (text "refclk" (rect 0 0 22 12)(font "Arial" (font_size 8))) + (text "refclk" (rect 4 61 40 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 48 72)(line_width 1)) + ) + (port + (pt 0 112) + (input) + (text "rst" (rect 0 0 10 12)(font "Arial" (font_size 8))) + (text "rst" (rect 4 101 22 112)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 48 112)(line_width 1)) + ) + (port + (pt 160 72) + (output) + (text "outclk_0" (rect 0 0 33 12)(font "Arial" (font_size 8))) + (text "outclk_0" (rect 117 61 165 72)(font "Arial" (font_size 8))) + (line (pt 160 72)(pt 112 72)(line_width 1)) + ) + (port + (pt 160 112) + (output) + (text "outclk_1" (rect 0 0 31 12)(font "Arial" (font_size 8))) + (text "outclk_1" (rect 119 101 167 112)(font "Arial" (font_size 8))) + (line (pt 160 112)(pt 112 112)(line_width 1)) + ) + (port + (pt 160 152) + (output) + (text "locked" (rect 0 0 24 12)(font "Arial" (font_size 8))) + (text "locked" (rect 127 141 163 152)(font "Arial" (font_size 8))) + (line (pt 160 152)(pt 112 152)(line_width 1)) + ) + (drawing + (text "refclk" (rect 16 43 68 99)(font "Arial" (color 128 0 0)(font_size 9))) + (text "clk" (rect 53 67 124 144)(font "Arial" (color 0 0 0))) + (text "reset" (rect 19 83 68 179)(font "Arial" (color 128 0 0)(font_size 9))) + (text "reset" (rect 53 107 136 224)(font "Arial" (color 0 0 0))) + (text "outclk0" (rect 113 43 268 99)(font "Arial" (color 128 0 0)(font_size 9))) + (text "clk" (rect 97 67 212 144)(font "Arial" (color 0 0 0))) + (text "outclk1" (rect 113 83 268 179)(font "Arial" (color 128 0 0)(font_size 9))) + (text "clk" (rect 97 107 212 224)(font "Arial" (color 0 0 0))) + (text "locked" (rect 113 123 262 259)(font "Arial" (color 128 0 0)(font_size 9))) + (text "export" (rect 82 147 200 304)(font "Arial" (color 0 0 0))) + (text " altera_pll " (rect 118 168 308 346)(font "Arial" )) + (line (pt 48 32)(pt 112 32)(line_width 1)) + (line (pt 112 32)(pt 112 168)(line_width 1)) + (line (pt 48 168)(pt 112 168)(line_width 1)) + (line (pt 48 32)(pt 48 168)(line_width 1)) + (line (pt 49 52)(pt 49 76)(line_width 1)) + (line (pt 50 52)(pt 50 76)(line_width 1)) + (line (pt 49 92)(pt 49 116)(line_width 1)) + (line (pt 50 92)(pt 50 116)(line_width 1)) + (line (pt 111 52)(pt 111 76)(line_width 1)) + (line (pt 110 52)(pt 110 76)(line_width 1)) + (line (pt 111 92)(pt 111 116)(line_width 1)) + (line (pt 110 92)(pt 110 116)(line_width 1)) + (line (pt 111 132)(pt 111 156)(line_width 1)) + (line (pt 110 132)(pt 110 156)(line_width 1)) + (line (pt 0 0)(pt 160 0)(line_width 1)) + (line (pt 160 0)(pt 160 184)(line_width 1)) + (line (pt 0 184)(pt 160 184)(line_width 1)) + (line (pt 0 0)(pt 0 184)(line_width 1)) + ) +) diff --git a/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.cmp b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.cmp new file mode 100755 index 0000000..11b1e80 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.cmp @@ -0,0 +1,10 @@ + component sys_pll is + port ( + refclk : in std_logic := 'X'; -- clk + rst : in std_logic := 'X'; -- reset + outclk_0 : out std_logic; -- clk + outclk_1 : out std_logic; -- clk + locked : out std_logic -- export + ); + end component sys_pll; + diff --git a/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.ppf b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.ppf new file mode 100755 index 0000000..b3d3245 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.ppf @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.qip b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.qip new file mode 100755 index 0000000..ea14f3b --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.qip @@ -0,0 +1,337 @@ +set_global_assignment -entity "sys_pll" -library "sys_pll" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "sys_pll" -library "sys_pll" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "sys_pll" -library "sys_pll" -name IP_TOOL_ENV "mwpim" +set_global_assignment -library "sys_pll" -name MISC_FILE [file join $::quartus(qip_path) "sys_pll.cmp"] +set_global_assignment -entity "sys_pll" -library "sys_pll" -name IP_TARGETED_DEVICE_FAMILY "Cyclone V" +set_global_assignment -entity "sys_pll" -library "sys_pll" -name IP_GENERATED_DEVICE_FAMILY "{Cyclone V}" +set_global_assignment -entity "sys_pll" -library "sys_pll" -name IP_QSYS_MODE "UNKNOWN" +set_global_assignment -name SYNTHESIS_ONLY_QIP ON +set_global_assignment -entity "sys_pll" -library "sys_pll" -name IP_COMPONENT_NAME "c3lzX3BsbA==" +set_global_assignment -entity "sys_pll" -library "sys_pll" -name IP_COMPONENT_DISPLAY_NAME "UExMIEludGVsIEZQR0EgSVA=" +set_global_assignment -entity "sys_pll" -library "sys_pll" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "sys_pll" -library "sys_pll" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "sys_pll" -library "sys_pll" -name IP_COMPONENT_AUTHOR "SW50ZWwgQ29ycG9yYXRpb24=" +set_global_assignment -entity "sys_pll" -library "sys_pll" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "sys_pll" -library "sys_pll" -name IP_COMPONENT_DESCRIPTION "SW50ZWwgUGhhc2UtTG9ja2VkIExvb3A=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_NAME "c3lzX3BsbF8wMDAy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_DISPLAY_NAME "UExMIEludGVsIEZQR0EgSVA=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_REPORT_HIERARCHY "Off" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_INTERNAL "Off" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_AUTHOR "SW50ZWwgQ29ycG9yYXRpb24=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_VERSION "MjAuMQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_DESCRIPTION "SW50ZWwgUGhhc2UtTG9ja2VkIExvb3A=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZGVidWdfcHJpbnRfb3V0cHV0::ZmFsc2U=::ZGVidWdfcHJpbnRfb3V0cHV0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZGVidWdfdXNlX3JiY190YWZfbWV0aG9k::ZmFsc2U=::ZGVidWdfdXNlX3JiY190YWZfbWV0aG9k" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZGV2aWNl::NUNFQkEyRjE3QTc=::ZGV2aWNl" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BsbF9tb2Rl::SW50ZWdlci1OIFBMTA==::UExMIE1vZGU=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZnJhY3Rpb25hbF92Y29fbXVsdGlwbGllcg==::ZmFsc2U=::ZnJhY3Rpb25hbF92Y29fbXVsdGlwbGllcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3JlZmVyZW5jZV9jbG9ja19mcmVxdWVuY3k=::NTAuMA==::UmVmZXJlbmNlIENsb2NrIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cmVmZXJlbmNlX2Nsb2NrX2ZyZXF1ZW5jeQ==::NTAuMCBNSHo=::cmVmZXJlbmNlX2Nsb2NrX2ZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2NoYW5uZWxfc3BhY2luZw==::MC4w::Q2hhbm5lbCBTcGFjaW5n" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX29wZXJhdGlvbl9tb2Rl::ZGlyZWN0::T3BlcmF0aW9uIE1vZGU=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2ZlZWRiYWNrX2Nsb2Nr::R2xvYmFsIENsb2Nr::RmVlZGJhY2sgQ2xvY2s=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2ZyYWN0aW9uYWxfY291dA==::MzI=::RnJhY3Rpb25hbCBjYXJyeSBvdXQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RzbV9vdXRfc2Vs::MXN0X29yZGVy::RFNNIE9yZGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3BlcmF0aW9uX21vZGU=::ZGlyZWN0::b3BlcmF0aW9uX21vZGU=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3VzZV9sb2NrZWQ=::dHJ1ZQ==::RW5hYmxlIGxvY2tlZCBvdXRwdXQgcG9ydA==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX2Fkdl9wYXJhbXM=::ZmFsc2U=::RW5hYmxlIHBoeXNpY2FsIG91dHB1dCBjbG9jayBwYXJhbWV0ZXJz" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX251bWJlcl9vZl9jbG9ja3M=::Mg==::TnVtYmVyIE9mIENsb2Nrcw==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "bnVtYmVyX29mX2Nsb2Nrcw==::Mg==::bnVtYmVyX29mX2Nsb2Nrcw==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX211bHRpcGx5X2ZhY3Rvcg==::MQ==::TXVsdGlwbHkgRmFjdG9yIChNLUNvdW50ZXIp" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2ZyYWNfbXVsdGlwbHlfZmFjdG9y::MQ==::RnJhY3Rpb25hbCBNdWx0aXBseSBGYWN0b3IgKEsp" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3Jfbg==::MQ==::RGl2aWRlIEZhY3RvciAoTi1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjA=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kw::MTI1LjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzA=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iw::MTA=::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjA=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMA==::NA==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MA==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzA=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDA=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUw::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kx::NTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Ix::MTA=::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMQ==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MQ==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMQ==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MQ==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUx::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjI=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3ky::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzI=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iy::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjI=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMg==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Mg==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMg==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Mg==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzI=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDI=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUy::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjM=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kz::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzM=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3Iz::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjM=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMw==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Mw==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMw==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Mw==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzM=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDM=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUz::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjQ=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k0::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzQ=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I0::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjQ=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNA==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5NA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0NA==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzQ=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDQ=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU0::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjU=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k1::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzU=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I1::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjU=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNQ==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5NQ==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNQ==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0NQ==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzU=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDU=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU1::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjY=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k2::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzY=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I2::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjY=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNg==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Ng==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNg==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Ng==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzY=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDY=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU2::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjc=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k3::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzc=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I3::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3Rvcjc=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yNw==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5Nw==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzNw==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0Nw==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzc=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDc=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU3::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjg=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k4::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzg=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I4::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3Rvcjg=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yOA==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5OA==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzOA==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0OA==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzg=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDg=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU4::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjk=::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3k5::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzk=::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3I5::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3Rvcjk=::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yOQ==::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5OQ==::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzOQ==::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0OQ==::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzk=::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDk=::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGU5::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEw::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMA==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEw::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMA==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEw::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTA=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTA=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTA=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTA=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEw::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEw::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMA==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEx::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMQ==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEx::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMQ==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEx::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTE=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTE=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTE=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTE=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEx::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEx::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMQ==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEy::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMg==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEy::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMg==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEy::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTI=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTI=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTI=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTI=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEy::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEy::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMg==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjEz::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxMw==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzEz::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxMw==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjEz::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTM=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTM=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTM=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTM=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzEz::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDEz::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxMw==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE0::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNA==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE0::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNA==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE0::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTQ=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTQ=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTQ=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTQ=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE0::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE0::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNA==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE1::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNQ==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE1::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNQ==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE1::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTU=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTU=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTU=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTU=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE1::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE1::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNQ==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE2::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNg==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE2::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNg==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE2::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTY=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTY=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTY=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTY=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE2::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE2::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNg==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Nhc2NhZGVfY291bnRlcjE3::ZmFsc2U=::TWFrZSB0aGlzIGEgY2FzY2FkZSBjb3VudGVy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX291dHB1dF9jbG9ja19mcmVxdWVuY3kxNw==::MTAwLjA=::RGVzaXJlZCBGcmVxdWVuY3k=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2RpdmlkZV9mYWN0b3JfYzE3::MQ==::RGl2aWRlIEZhY3RvciAoQy1Db3VudGVyKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9tdWx0aXBseV9mYWN0b3IxNw==::MQ==::QWN0dWFsIE11bHRpcGx5IEZhY3Rvcg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9mcmFjX211bHRpcGx5X2ZhY3RvcjE3::MQ==::QWN0dWFsIEZyYWN0aW9uYWwgTXVsdGlwbHkgRmFjdG9yIChLKQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9kaXZpZGVfZmFjdG9yMTc=::MQ==::QWN0dWFsIERpdmlkZSBGYWN0b3I=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9vdXRwdXRfY2xvY2tfZnJlcXVlbmN5MTc=::MCBNSHo=::QWN0dWFsIEZyZXF1ZW5jeQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BzX3VuaXRzMTc=::cHM=::UGhhc2UgU2hpZnQgdW5pdHM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0MTc=::MA==::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BoYXNlX3NoaWZ0X2RlZzE3::MC4w::UGhhc2UgU2hpZnQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2FjdHVhbF9waGFzZV9zaGlmdDE3::MA==::QWN0dWFsIFBoYXNlIFNoaWZ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2R1dHlfY3ljbGUxNw==::NTA=::RHV0eSBDeWNsZQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA=::MTI1LjAwMDAwMCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTA=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQw::MCBwcw==::cGhhc2Vfc2hpZnQw" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTA=::NTA=::ZHV0eV9jeWNsZTA=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE=::NTAwLjAwMDAwMCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQx::MCBwcw==::cGhhc2Vfc2hpZnQx" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE=::NTA=::ZHV0eV9jeWNsZTE=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTI=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTI=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQy::MCBwcw==::cGhhc2Vfc2hpZnQy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTI=::NTA=::ZHV0eV9jeWNsZTI=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTM=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQz::MCBwcw==::cGhhc2Vfc2hpZnQz" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTM=::NTA=::ZHV0eV9jeWNsZTM=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTQ=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ0::MCBwcw==::cGhhc2Vfc2hpZnQ0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTQ=::NTA=::ZHV0eV9jeWNsZTQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTU=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTU=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ1::MCBwcw==::cGhhc2Vfc2hpZnQ1" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTU=::NTA=::ZHV0eV9jeWNsZTU=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTY=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTY=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ2::MCBwcw==::cGhhc2Vfc2hpZnQ2" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTY=::NTA=::ZHV0eV9jeWNsZTY=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTc=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTc=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ3::MCBwcw==::cGhhc2Vfc2hpZnQ3" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTc=::NTA=::ZHV0eV9jeWNsZTc=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTg=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTg=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ4::MCBwcw==::cGhhc2Vfc2hpZnQ4" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTg=::NTA=::ZHV0eV9jeWNsZTg=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTk=::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTk=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQ5::MCBwcw==::cGhhc2Vfc2hpZnQ5" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTk=::NTA=::ZHV0eV9jeWNsZTk=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEw::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEw" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMA==::MCBwcw==::cGhhc2Vfc2hpZnQxMA==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEw::NTA=::ZHV0eV9jeWNsZTEw" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEx::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEx" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMQ==::MCBwcw==::cGhhc2Vfc2hpZnQxMQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEx::NTA=::ZHV0eV9jeWNsZTEx" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEy::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMg==::MCBwcw==::cGhhc2Vfc2hpZnQxMg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEy::NTA=::ZHV0eV9jeWNsZTEy" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEz::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTEz" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxMw==::MCBwcw==::cGhhc2Vfc2hpZnQxMw==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTEz::NTA=::ZHV0eV9jeWNsZTEz" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE0::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNA==::MCBwcw==::cGhhc2Vfc2hpZnQxNA==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE0::NTA=::ZHV0eV9jeWNsZTE0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE1::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE1" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNQ==::MCBwcw==::cGhhc2Vfc2hpZnQxNQ==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE1::NTA=::ZHV0eV9jeWNsZTE1" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE2::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE2" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNg==::MCBwcw==::cGhhc2Vfc2hpZnQxNg==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE2::NTA=::ZHV0eV9jeWNsZTE2" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE3::MCBNSHo=::b3V0cHV0X2Nsb2NrX2ZyZXF1ZW5jeTE3" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGhhc2Vfc2hpZnQxNw==::MCBwcw==::cGhhc2Vfc2hpZnQxNw==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "ZHV0eV9jeWNsZTE3::NTA=::ZHV0eV9jeWNsZTE3" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BsbF9hdXRvX3Jlc2V0::T2Zm::UExMIEF1dG8gUmVzZXQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BsbF9iYW5kd2lkdGhfcHJlc2V0::QXV0bw==::UExMIEJhbmR3aWR0aCBQcmVzZXQ=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX3JlY29uZg==::ZmFsc2U=::RW5hYmxlIGR5bmFtaWMgcmVjb25maWd1cmF0aW9uIG9mIFBMTA==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX2Rwc19wb3J0cw==::ZmFsc2U=::RW5hYmxlIGFjY2VzcyB0byBkeW5hbWljIHBoYXNlIHNoaWZ0IHBvcnRz" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2VuX3Bob3V0X3BvcnRz::ZmFsc2U=::RW5hYmxlIGFjY2VzcyB0byBQTEwgRFBBIG91dHB1dCBwb3J0" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGxsX3R5cGU=::R2VuZXJhbA==::UExMIFRZUEU=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "cGxsX3N1YnR5cGU=::R2VuZXJhbA==::UExMIFNVQlRZUEU=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl9saXN0::TS1Db3VudGVyIEhpIERpdmlkZSxNLUNvdW50ZXIgTG93IERpdmlkZSxOLUNvdW50ZXIgSGkgRGl2aWRlLE4tQ291bnRlciBMb3cgRGl2aWRlLE0tQ291bnRlciBCeXBhc3MgRW5hYmxlLE4tQ291bnRlciBCeXBhc3MgRW5hYmxlLE0tQ291bnRlciBPZGQgRGl2aWRlIEVuYWJsZSxOLUNvdW50ZXIgT2RkIERpdmlkZSBFbmFibGUsQy1Db3VudGVyLTAgSGkgRGl2aWRlLEMtQ291bnRlci0wIExvdyBEaXZpZGUsQy1Db3VudGVyLTAgQ29hcnNlIFBoYXNlIFNoaWZ0LEMtQ291bnRlci0wIFZDTyBQaGFzZSBUYXAsQy1Db3VudGVyLTAgSW5wdXQgU291cmNlLEMtQ291bnRlci0wIEJ5cGFzcyBFbmFibGUsQy1Db3VudGVyLTAgT2RkIERpdmlkZSBFbmFibGUsQy1Db3VudGVyLTEgSGkgRGl2aWRlLEMtQ291bnRlci0xIExvdyBEaXZpZGUsQy1Db3VudGVyLTEgQ29hcnNlIFBoYXNlIFNoaWZ0LEMtQ291bnRlci0xIFZDTyBQaGFzZSBUYXAsQy1Db3VudGVyLTEgSW5wdXQgU291cmNlLEMtQ291bnRlci0xIEJ5cGFzcyBFbmFibGUsQy1Db3VudGVyLTEgT2RkIERpdmlkZSBFbmFibGUsVkNPIFBvc3QgRGl2aWRlIENvdW50ZXIgRW5hYmxlLENoYXJnZSBQdW1wIGN1cnJlbnQgKHVBKSxMb29wIEZpbHRlciBCYW5kd2lkdGggUmVzaXN0b3IgKE9obXMpICxQTEwgT3V0cHV0IFZDTyBGcmVxdWVuY3ksSy1GcmFjdGlvbmFsIERpdmlzaW9uIFZhbHVlIChEU00pLEZlZWRiYWNrIENsb2NrIFR5cGUsRmVlZGJhY2sgQ2xvY2sgTVVYIDEsRmVlZGJhY2sgQ2xvY2sgTVVYIDIsTSBDb3VudGVyIFNvdXJjZSBNVVgsUExMIEF1dG8gUmVzZXQ=::UGFyYW1ldGVyIE5hbWVz" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3BhcmFtZXRlcl92YWx1ZXM=::NSw1LDI1NiwyNTYsZmFsc2UsdHJ1ZSxmYWxzZSxmYWxzZSwyLDIsMSwwLHBoX211eF9jbGssZmFsc2UsZmFsc2UsMjU2LDI1NiwxLDAscGhfbXV4X2Nsayx0cnVlLGZhbHNlLDIsMjAsNDAwMCw1MDAuMCBNSHosMSxub25lLGdsYixtX2NudCxwaF9tdXhfY2xrLGZhbHNl::UGFyYW1ldGVyIFZhbHVlcw==" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX21pZl9nZW5lcmF0ZQ==::ZmFsc2U=::R2VuZXJhdGUgTUlGIGZpbGU=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9taWZfZHBz::ZmFsc2U=::RW5hYmxlIER5bmFtaWMgUGhhc2UgU2hpZnQgZm9yIE1JRiBzdHJlYW1pbmc=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19jbnRy::QzA=::RFBTIENvdW50ZXIgU2VsZWN0aW9u" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19udW0=::MQ==::TnVtYmVyIG9mIER5bmFtaWMgUGhhc2UgU2hpZnRz" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2Rwc19kaXI=::UG9zaXRpdmU=::RHluYW1pYyBQaGFzZSBTaGlmdCBEaXJlY3Rpb24=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX3JlZmNsa19zd2l0Y2g=::ZmFsc2U=::Q3JlYXRlIGEgc2Vjb25kIGlucHV0IGNsayAncmVmY2xrMSc=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9jYXNjYWRlX291dA==::ZmFsc2U=::Q3JlYXRlIGEgJ2Nhc2NhZGVfb3V0JyBzaWduYWwgdG8gY29ubmVjdCB3aXRoIGEgZG93bnN0cmVhbSBQTEw=" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_COMPONENT_PARAMETER "Z3VpX2VuYWJsZV9jYXNjYWRlX2lu::ZmFsc2U=::Q3JlYXRlIGFuIGFkanBsbGluIG9yIGNjbGsgc2lnbmFsIHRvIGNvbm5lY3Qgd2l0aCBhbiB1cHN0cmVhbSBQTEw=" + +set_global_assignment -library "sys_pll" -name VERILOG_FILE [file join $::quartus(qip_path) "sys_pll.v"] +set_global_assignment -library "sys_pll" -name VERILOG_FILE [file join $::quartus(qip_path) "sys_pll/sys_pll_0002.v"] +set_global_assignment -library "sys_pll" -name QIP_FILE [file join $::quartus(qip_path) "sys_pll/sys_pll_0002.qip"] + +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "sys_pll_0002" -library "sys_pll" -name IP_TOOL_ENV "mwpim" diff --git a/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.sip b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.sip new file mode 100755 index 0000000..76a72c7 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.sip @@ -0,0 +1,6 @@ +set_global_assignment -entity "sys_pll" -library "lib_sys_pll" -name IP_TOOL_NAME "altera_pll" +set_global_assignment -entity "sys_pll" -library "lib_sys_pll" -name IP_TOOL_VERSION "20.1" +set_global_assignment -entity "sys_pll" -library "lib_sys_pll" -name IP_TOOL_ENV "mwpim" +set_global_assignment -library "lib_sys_pll" -name SPD_FILE [file join $::quartus(sip_path) "sys_pll.spd"] + +set_global_assignment -library "lib_sys_pll" -name MISC_FILE [file join $::quartus(sip_path) "sys_pll_sim/sys_pll.vo"] diff --git a/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.spd b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.spd new file mode 100755 index 0000000..c73412c --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.spd @@ -0,0 +1,6 @@ + + + + + + diff --git a/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.v b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.v new file mode 100755 index 0000000..cd33d3e --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll.v @@ -0,0 +1,255 @@ +// megafunction wizard: %PLL Intel FPGA IP v20.1% +// GENERATION: XML +// sys_pll.v + +// Generated using ACDS version 20.1 711 + +`timescale 1 ps / 1 ps +module sys_pll ( + input wire refclk, // refclk.clk + input wire rst, // reset.reset + output wire outclk_0, // outclk0.clk + output wire outclk_1, // outclk1.clk + output wire locked // locked.export + ); + + sys_pll_0002 sys_pll_inst ( + .refclk (refclk), // refclk.clk + .rst (rst), // reset.reset + .outclk_0 (outclk_0), // outclk0.clk + .outclk_1 (outclk_1), // outclk1.clk + .locked (locked) // locked.export + ); + +endmodule +// Retrieval info: +// +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// Retrieval info: +// IPFS_FILES : sys_pll.vo +// RELATED_FILES: sys_pll.v, sys_pll_0002.v diff --git a/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll/sys_pll_0002.qip b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll/sys_pll_0002.qip new file mode 100755 index 0000000..17c3623 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll/sys_pll_0002.qip @@ -0,0 +1,4 @@ +set_instance_assignment -name PLL_COMPENSATION_MODE DIRECT -to "*sys_pll_0002*|altera_pll:altera_pll_i*|*" + +set_instance_assignment -name PLL_AUTO_RESET OFF -to "*sys_pll_0002*|altera_pll:altera_pll_i*|*" +set_instance_assignment -name PLL_BANDWIDTH_PRESET AUTO -to "*sys_pll_0002*|altera_pll:altera_pll_i*|*" diff --git a/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll/sys_pll_0002.v b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll/sys_pll_0002.v new file mode 100755 index 0000000..3190f06 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll/sys_pll_0002.v @@ -0,0 +1,90 @@ +`timescale 1ns/10ps +module sys_pll_0002( + + // interface 'refclk' + input wire refclk, + + // interface 'reset' + input wire rst, + + // interface 'outclk0' + output wire outclk_0, + + // interface 'outclk1' + output wire outclk_1, + + // interface 'locked' + output wire locked +); + + altera_pll #( + .fractional_vco_multiplier("false"), + .reference_clock_frequency("50.0 MHz"), + .operation_mode("direct"), + .number_of_clocks(2), + .output_clock_frequency0("125.000000 MHz"), + .phase_shift0("0 ps"), + .duty_cycle0(50), + .output_clock_frequency1("500.000000 MHz"), + .phase_shift1("0 ps"), + .duty_cycle1(50), + .output_clock_frequency2("0 MHz"), + .phase_shift2("0 ps"), + .duty_cycle2(50), + .output_clock_frequency3("0 MHz"), + .phase_shift3("0 ps"), + .duty_cycle3(50), + .output_clock_frequency4("0 MHz"), + .phase_shift4("0 ps"), + .duty_cycle4(50), + .output_clock_frequency5("0 MHz"), + .phase_shift5("0 ps"), + .duty_cycle5(50), + .output_clock_frequency6("0 MHz"), + .phase_shift6("0 ps"), + .duty_cycle6(50), + .output_clock_frequency7("0 MHz"), + .phase_shift7("0 ps"), + .duty_cycle7(50), + .output_clock_frequency8("0 MHz"), + .phase_shift8("0 ps"), + .duty_cycle8(50), + .output_clock_frequency9("0 MHz"), + .phase_shift9("0 ps"), + .duty_cycle9(50), + .output_clock_frequency10("0 MHz"), + .phase_shift10("0 ps"), + .duty_cycle10(50), + .output_clock_frequency11("0 MHz"), + .phase_shift11("0 ps"), + .duty_cycle11(50), + .output_clock_frequency12("0 MHz"), + .phase_shift12("0 ps"), + .duty_cycle12(50), + .output_clock_frequency13("0 MHz"), + .phase_shift13("0 ps"), + .duty_cycle13(50), + .output_clock_frequency14("0 MHz"), + .phase_shift14("0 ps"), + .duty_cycle14(50), + .output_clock_frequency15("0 MHz"), + .phase_shift15("0 ps"), + .duty_cycle15(50), + .output_clock_frequency16("0 MHz"), + .phase_shift16("0 ps"), + .duty_cycle16(50), + .output_clock_frequency17("0 MHz"), + .phase_shift17("0 ps"), + .duty_cycle17(50), + .pll_type("General"), + .pll_subtype("General") + ) altera_pll_i ( + .rst (rst), + .outclk ({outclk_1, outclk_0}), + .locked (locked), + .fboutclk ( ), + .fbclk (1'b0), + .refclk (refclk) + ); +endmodule + diff --git a/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll_sim.f b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll_sim.f new file mode 100755 index 0000000..7c52e94 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll_sim.f @@ -0,0 +1 @@ +sys_pll_sim/sys_pll.vo diff --git a/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll_sim/aldec/rivierapro_setup.tcl b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll_sim/aldec/rivierapro_setup.tcl new file mode 100755 index 0000000..b8fef57 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/sys_pll/sys_pll_sim/aldec/rivierapro_setup.tcl @@ -0,0 +1,278 @@ + +# (C) 2001-2022 Altera Corporation. All rights reserved. +# Your use of Altera Corporation's design tools, logic functions and +# other software and tools, and its AMPP partner logic functions, and +# any output files any of the foregoing (including device programming +# or simulation files), and any associated documentation or information +# are expressly subject to the terms and conditions of the Altera +# Program License Subscription Agreement, Altera MegaCore Function +# License Agreement, or other applicable license agreement, including, +# without limitation, that your use is for the sole purpose of +# programming logic devices manufactured by Altera and sold by Altera +# or its authorized distributors. Please refer to the applicable +# agreement for further details. + +# ACDS 20.1 711 win32 2022.04.01.12:36:35 +# ---------------------------------------- +# Auto-generated simulation script rivierapro_setup.tcl +# ---------------------------------------- +# This script provides commands to simulate the following IP detected in +# your Quartus project: +# sys_pll +# +# Altera recommends that you source this Quartus-generated IP simulation +# script from your own customized top-level script, and avoid editing this +# generated script. +# +# To write a top-level script that compiles Altera simulation libraries and +# the Quartus-generated IP in your project, along with your design and +# testbench files, copy the text from the TOP-LEVEL TEMPLATE section below +# into a new file, e.g. named "aldec.do", and modify the text as directed. +# +# ---------------------------------------- +# # TOP-LEVEL TEMPLATE - BEGIN +# # +# # QSYS_SIMDIR is used in the Quartus-generated IP simulation script to +# # construct paths to the files required to simulate the IP in your Quartus +# # project. By default, the IP script assumes that you are launching the +# # simulator from the IP script location. If launching from another +# # location, set QSYS_SIMDIR to the output directory you specified when you +# # generated the IP script, relative to the directory from which you launch +# # the simulator. +# # +# set QSYS_SIMDIR

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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 + 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/quartus_test_prj_template_v4/ip/.qsys_edit/filters.xml b/example_projects/quartus_test_prj_template_v4/ip/.qsys_edit/filters.xml new file mode 100755 index 0000000..54a56c4 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/.qsys_edit/filters.xml @@ -0,0 +1,2 @@ + + diff --git a/example_projects/quartus_test_prj_template_v4/ip/.qsys_edit/jtag_io.xml b/example_projects/quartus_test_prj_template_v4/ip/.qsys_edit/jtag_io.xml new file mode 100755 index 0000000..362db01 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/.qsys_edit/jtag_io.xml @@ -0,0 +1,2167 @@ + + + + eclipse + + + + + + + + + + + + external + true + + + 0 + dock.PlaceholderList + + + + + + + dock.CExternalizeArea + + + + + + + + + ccontrol north + true + + + + 0 + dock.PlaceholderList + + + + + + + dock.CContentArea.minimize + + + + + + + + + ccontrol south + true + + + + 0 + dock.PlaceholderList + + + + + + + dock.CContentArea.minimize + + + + + + + + + ccontrol east + true + + + + 0 + dock.PlaceholderList + + + + + + + dock.CContentArea.minimize + + + + + + + + + ccontrol center + true + + false + + + + + + + + + + + + + + + + + + + + + + + + + dock.CContentArea.center + + + + + + 0 + + 0 + dock.PlaceholderList + + + dock.single.IP\ Catalog + + true + + id + index + placeholder + + 0 + 0 + dock.single.IP\ Catalog + + + + + + + + + IP\ Catalog + + + + + + + + + + 0 + + 0 + dock.PlaceholderList + + + dock.single.Hierarchy + + true + + id + index + placeholder + + 0 + 0 + dock.single.Hierarchy + + + + + + + + + Hierarchy + + + + + + + + + + 0 + + 0 + dock.PlaceholderList + + + dock.single.System\ Contents + + true + + id + index + placeholder + + 0 + 0 + dock.single.System\ Contents + + + + dock.single.Address\ Map + + true + + id + index + placeholder + + 1 + 1 + dock.single.Address\ Map + + + + dock.single.Instrumentation + + true + + id + index + placeholder + + 2 + 2 + dock.single.Instrumentation + + + + dock.single.Clock\ Settings + + true + + id + index + placeholder + + 3 + 3 + dock.single.Clock\ Settings + + + + dock.single.Instance\ Parameters + + true + + id + index + placeholder + + 4 + 4 + dock.single.Instance\ Parameters + + + + dock.single.HDL\ Example + + true + + id + index + placeholder + + 6 + 6 + dock.single.HDL\ Example + + + + dock.single.Generation + + true + + id + index + placeholder + + 7 + 7 + dock.single.Generation + + + + dock.single.Connections + + true + + id + index + placeholder + + 8 + 8 + dock.single.Connections + + + + dock.single.Domains + + true + + id + index + placeholder + + 10 + 10 + dock.single.Domains + + + + + + + + + System Contents + + + + + + + + + + Address Map + + + + + + + + + + Instrumentation + + + + + + + + + + Clock Settings + + + + + + + + + + Instance Parameters + + + + + + + + + + HDL Example + + + + + + + + + + Generation + + + + + + + + + + Connections + + + + + + + + + + Domains + + + + + + + + + + 0 + + 0 + dock.PlaceholderList + + + dock.single.Parameter\ Editor + + true + + id + index + placeholder + + 0 + 0 + dock.single.Parameter\ Editor + + + + + + + + + Parameter Editor + + + + + + + + + + 0 + + 0 + dock.PlaceholderList + + + dock.single.Block\ Symbol + + true + + id + index + placeholder + + 0 + 0 + dock.single.Block\ Symbol + + + + dock.single.Element\ Docs + + true + + id + index + placeholder + + 1 + 1 + dock.single.Element\ Docs + + + + + + + + + Block Symbol + + + + + + + + + + Element Docs + + + + + + + + + + 0 + + 0 + dock.PlaceholderList + + + dock.single.Presets + + true + + id + index + placeholder + + 0 + 0 + dock.single.Presets + + + + + + + + + Presets + + + + + + + + + + 0 + + 0 + dock.PlaceholderList + + + dock.single.Messages + + true + + id + index + placeholder + + 0 + 0 + dock.single.Messages + + + + + + + + + Messages + + + + + + + + + + + + + + ccontrol west + true + + + + 0 + dock.PlaceholderList + + + + + + + dock.CContentArea.minimize + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + + + 0 + dock.PlaceholderList + + + + + + + dock.CExternalizeArea + + + + + + + + + true + + + + 0 + dock.PlaceholderList + + + dock.single.Hierarchy + + + + + dock.single.Clock\ Domains\ \-\ Beta + dock.single.IP\ Catalog + dock.single.Reset\ Domains\ \-\ Beta + + + 0 + dock.PlaceholderList + + + dock.single.IP\ Catalog + + + + + dock.single.Reset\ Domains\ \-\ Beta + + + + + dock.single.Clock\ Domains\ \-\ Beta + + + + + + + dock.single.Interconnect\ Requirements + + + + + + + + + dock.CContentArea.minimize + + + + + + + + + true + + + + 0 + dock.PlaceholderList + + + + + + + dock.CContentArea.minimize + + + + + + + + + true + + + + 0 + dock.PlaceholderList + + + + + + + dock.CContentArea.minimize + + + + + + + + + ccontrol center + true + + false + + + + + dock.single.Clock\ Domains\ \-\ Beta + dock.single.IP\ Catalog + dock.single.Reset\ Domains\ \-\ Beta + + + 0 + dock.PlaceholderList + + + dock.single.IP\ Catalog + + + + + dock.single.Clock\ Domains\ \-\ Beta + + + + + dock.single.Reset\ Domains\ \-\ Beta + + + + + + + dock.single.Hierarchy + + + 0 + dock.PlaceholderList + + + dock.single.Hierarchy + + true + + + + + dock.single.Device\ Family + + true + + + + + + + + + + + dock.single.Connections + dock.single.System\ Contents + dock.single.Assignments + dock.single.Schematic + dock.single.Clocks + dock.single.Interface\ Requirements\ \-\ Alpha + dock.single.Generation + dock.single.Clock\ Settings + dock.single.Instrumentation\ \-\ Beta + dock.single.HDL\ Example + dock.single.Clock\ Domains + dock.single.Interface\ Requirements + dock.single.Interconnect\ Requirements + dock.single.Instrumentation + dock.single.Instance\ Parameters + dock.single.Domains + + + 0 + dock.PlaceholderList + + + dock.single.System\ Contents + + true + + + + + dock.single.Address\ Map + + true + + + + + dock.single.Interconnect\ Requirements + + true + + + + + + + dock.single.Parameter\ Editor + + + + + + + dock.single.Details + dock.single.Parameters + dock.single.Block\ Symbol + dock.single.Presets + + + 0 + dock.PlaceholderList + + + dock.single.Block\ Symbol + + + + + dock.single.Details + + + + + dock.single.Parameters + + + + + dock.single.Presets + + + + + + + dock.single.Element\ Docs + + + + + + + dock.single.Messages + dock.single.Generation\ Messages + + + 0 + dock.PlaceholderList + + + dock.single.Messages + + + + + dock.single.Generation\ Messages + + + + + + + + + + + + dock.CContentArea.center + + + + + + 0 + + 0 + dock.PlaceholderList + + + dock.single.System\ Contents + + true + + index + id + placeholder + + 0 + 0 + dock.single.System\ Contents + + + + dock.single.Address\ Map + + true + + index + id + placeholder + + 1 + 1 + dock.single.Address\ Map + + + + dock.single.Interconnect\ Requirements + + true + + index + id + placeholder + + 2 + 2 + dock.single.Interconnect\ Requirements + + + + dock.single.Assignments + + + + + dock.single.Connections + + + + + dock.single.Instance\ Parameters + + + + + dock.single.Instrumentation\ \-\ Beta + + + + + dock.single.Schematic + + + + + + + + + + System Contents + + + + + + + + + + Address Map + + + + + + + + + + Interconnect Requirements + + + + + + + + + + + + IP Catalog + + + + + + + + 0 + + 0 + dock.PlaceholderList + + + dock.single.Hierarchy + + true + + index + id + placeholder + + 0 + 0 + dock.single.Hierarchy + + + + dock.single.Device\ Family + + true + + index + id + placeholder + + 1 + 1 + dock.single.Device\ Family + + + + + + + + + Hierarchy + + + + + + + + + + Device Family + + + + + + + + + + + + Messages + + + + + + + + + + Parameters + + + + + + + + + + + + true + + + + 0 + dock.PlaceholderList + + + + + + + dock.CContentArea.minimize + + + + + + + + + + dock.single.Details + + + + + + + + + + 1 + dock.single.Details + + + + + + + Details + + + + + + + + + + dock.single.Assignments + + + + + + + + + + 3 + dock.single.Assignments + + + + + + + Assignments + + + + + + + + + + dock.single.Schematic + + + + + + + + + + 7 + dock.single.Schematic + + + + + + + Schematic + + + + + + + + + + dock.single.Presets + + + + + + + + + + 3 + dock.single.Presets + + + + + + + Presets + + + + + + + + + + dock.single.Clock\ Domains\ \-\ Beta + + + + + + + + 1 + dock.single.Clock\ Domains\ \-\ Beta + + + + + + + Clock Domains - Beta + + + + + + + + + + dock.single.Generation\ Messages + + + + + + + + 1 + dock.single.Generation\ Messages + + + + + + + Generation Messages + + + + + + + + + + dock.single.Connections + + + + + + + + + + 4 + dock.single.Connections + + + + + + + Connections + + + + + + + + + + dock.single.Instance\ Parameters + + + + + + + + + + 5 + dock.single.Instance\ Parameters + + + + + + + Instance Parameters + + + + + + + + + + dock.single.Instrumentation\ \-\ Beta + + + + + + + + + + 6 + dock.single.Instrumentation\ \-\ Beta + + + + + + + Instrumentation - Beta + + + + + + + + + + dock.single.Block\ Symbol + + + + + + + + + + + + + + Block Symbol + + + + + + + + + + dock.single.Reset\ Domains\ \-\ Beta + + + + + + + + 1 + dock.single.Reset\ Domains\ \-\ Beta + + + + + + + Reset Domains - Beta + + + + + + + + + + + + + dock.mode.normal + + + + dock.mode.normal + ccontrol center + + + dock.single.Details + + + + + + + + + + 1 + dock.single.Details + + + + + + + + dock.mode.minimized + dock.mode.normal + + + + dock.mode.minimized + ccontrol west + + + 0 + false + 400 + dock.single.Parameters + + + + + dock.mode.normal + ccontrol center + + + dock.single.Parameters + + + + + + + + + + + + + + + + dock.mode.normal + + + + dock.mode.normal + ccontrol center + + + dock.single.Assignments + + + + + + + + + + + + + + + + + dock.mode.normal + + + + dock.mode.normal + ccontrol center + + + dock.single.Address\ Map + + + + + + + + + + + 1 + dock.single.Address\ Map + + + + + + + + dock.mode.normal + + + + dock.mode.normal + ccontrol center + + + dock.single.Schematic + + + + + + + + + + + 4 + dock.single.Schematic + + + + + + + + dock.mode.normal + + + + dock.mode.normal + ccontrol center + + + dock.single.Presets + + + + + + + + + + + + + + + dock.mode.normal + + + + dock.mode.normal + ccontrol center + + + dock.single.Messages + + + + + + + + + + + + + dock.mode.normal + + + + dock.mode.normal + ccontrol center + + + dock.single.Device\ Family + + + + + + + + + + + + 4 + dock.single.Device\ Family + + + + + + + + dock.mode.maximized + dock.mode.minimized + dock.mode.normal + + + + dock.mode.maximized + ccontrol center + + + + 0 + dock.single.Clock\ Domains\ \-\ Beta + + + + + dock.mode.minimized + ccontrol north + + + 0 + false + 400 + dock.single.Clock\ Domains\ \-\ Beta + + + 0 + dock.single.Clock\ Domains\ \-\ Beta + + + + + dock.mode.normal + ccontrol center + + + dock.single.Clock\ Domains\ \-\ Beta + + + + + + + + 2 + dock.single.Clock\ Domains\ \-\ Beta + + + + + + + + dock.mode.normal + + + + dock.mode.normal + ccontrol center + + + dock.single.Generation\ Messages + + + + + + + + + + + + dock.mode.normal + + + + dock.mode.normal + ccontrol center + + + dock.single.Connections + + + + + + + + + + 5 + dock.single.Connections + + + + + + + + dock.mode.normal + + + + dock.mode.normal + ccontrol center + + + dock.single.System\ Contents + + + + + + + + + + + 0 + dock.single.System\ Contents + + + + + + + + dock.mode.minimized + dock.mode.normal + + + + dock.mode.minimized + ccontrol north + + + 0 + false + 400 + dock.single.Interconnect\ Requirements + + + + + dock.mode.normal + ccontrol center + + + dock.single.Interconnect\ Requirements + + + + + + + + + + 2 + dock.single.Interconnect\ Requirements + + + + + + + + dock.mode.normal + + + + dock.mode.normal + ccontrol center + + + dock.single.Instrumentation\ \-\ Beta + + + + + + + + + + + 4 + dock.single.Instrumentation\ \-\ Beta + + + + + + + + dock.mode.normal + + + + dock.mode.normal + ccontrol center + + + dock.single.Instance\ Parameters + + + + + + + + + + + 4 + dock.single.Instance\ Parameters + + + + + + + + dock.mode.maximized + dock.mode.minimized + dock.mode.normal + + + + dock.mode.maximized + ccontrol center + + + + 0 + dock.single.IP\ Catalog + + + + + dock.mode.minimized + ccontrol north + + + 0 + false + 400 + dock.single.IP\ Catalog + + + 0 + dock.single.IP\ Catalog + + + + + dock.mode.normal + ccontrol center + + + dock.single.IP\ Catalog + + + + + + + + 0 + dock.single.IP\ Catalog + + + + + + + + dock.mode.minimized + dock.mode.normal + + + + dock.mode.minimized + ccontrol north + + + 0 + false + 400 + dock.single.Hierarchy + + + + + dock.mode.normal + ccontrol center + + + dock.single.Hierarchy + + + + + + + + + + + + + dock.mode.normal + + + + dock.mode.normal + ccontrol center + + + dock.single.Block\ Symbol + + + + + + + + + + 1 + dock.single.Block\ Symbol + + + + + + + + dock.mode.maximized + dock.mode.minimized + dock.mode.normal + + + + dock.mode.maximized + ccontrol center + + + + 1 + dock.single.Reset\ Domains\ \-\ Beta + + + + + dock.mode.minimized + ccontrol north + + + 0 + false + 400 + dock.single.Reset\ Domains\ \-\ Beta + + + 1 + dock.single.Reset\ Domains\ \-\ Beta + + + + + dock.mode.normal + ccontrol center + + + dock.single.Reset\ Domains\ \-\ Beta + + + + + + + + 1 + dock.single.Reset\ Domains\ \-\ Beta + + + + + + + + + + + dock.mode.normal + + dock.mode.normal + ccontrol center + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example_projects/quartus_test_prj_template_v4/ip/.qsys_edit/jtag_io_schematic.nlv b/example_projects/quartus_test_prj_template_v4/ip/.qsys_edit/jtag_io_schematic.nlv new file mode 100755 index 0000000..1e029b8 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/.qsys_edit/jtag_io_schematic.nlv @@ -0,0 +1,8 @@ +# # File gsaved with Nlview version 6.3.8 2013-12-19 bk=1.2992 VDI=34 GEI=35 +# +preplace inst unsaved.clk_0 -pg 1 -lvl 1 -y 30 +preplace inst unsaved -pg 1 -lvl 1 -y 40 -regy -20 +preplace netloc EXPORTunsaved(SLAVE)unsaved.reset,(SLAVE)clk_0.clk_in_reset) 1 0 1 NJ +preplace netloc EXPORTunsaved(SLAVE)clk_0.clk_in,(SLAVE)unsaved.clk) 1 0 1 NJ +levelinfo -pg 1 0 50 270 +levelinfo -hier unsaved 60 90 260 diff --git a/example_projects/quartus_test_prj_template_v4/ip/.qsys_edit/preferences.xml b/example_projects/quartus_test_prj_template_v4/ip/.qsys_edit/preferences.xml new file mode 100755 index 0000000..b4ae321 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/.qsys_edit/preferences.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io.qsys b/example_projects/quartus_test_prj_template_v4/ip/jtag_io.qsys new file mode 100755 index 0000000..5e71989 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io.qsys @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io.sopcinfo b/example_projects/quartus_test_prj_template_v4/ip/jtag_io.sopcinfo new file mode 100755 index 0000000..65b6e82 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io.sopcinfo @@ -0,0 +1,4690 @@ + + + + + + + java.lang.Integer + 1648805399 + false + true + false + true + GENERATION_ID + + + java.lang.String + + false + true + false + true + UNIQUE_ID + + + java.lang.String + CYCLONEV + false + true + false + true + DEVICE_FAMILY + + + java.lang.String + 5CSEBA6U23I7 + false + true + false + true + DEVICE + + + java.lang.String + 7 + false + true + false + true + DEVICE_SPEEDGRADE + + + java.lang.Long + -1 + false + true + false + true + CLOCK_RATE + clk + + + java.lang.Integer + -1 + false + true + false + true + CLOCK_DOMAIN + clk + + + java.lang.Integer + -1 + false + true + false + true + RESET_DOMAIN + clk + + + java.lang.String + Cyclone V + false + true + false + true + DEVICE_FAMILY + + + boolean + false + false + true + true + true + + + + + long + 50000000 + false + true + true + true + + + boolean + true + false + true + true + true + + + long + 0 + false + true + false + true + CLOCK_RATE + clk_in + + + com.altera.sopcmodel.reset.Reset$Edges + NONE + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + + + qsys.ui.export_name + clk + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.Boolean + true + true + true + false + true + + + java.lang.Long + 50000000 + true + true + false + true + + clock + false + + in_clk + Input + 1 + clk + + + + + + qsys.ui.export_name + reset + + + java.lang.String + + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + NONE + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + reset_n + Input + 1 + reset_n + + + + + + java.lang.String + clk_in + false + true + true + true + + + long + 50000000 + false + true + true + true + + + boolean + true + false + true + true + true + + + boolean + true + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clock + true + + clk_out + Output + 1 + clk + + + false + out0 + clk + out0.clk + + + false + master_0 + clk + master_0.clk + + + false + out1 + clk + out1.clk + + + false + in0 + clk + in0.clk + + + false + in1 + clk + in1.clk + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + clk_in_reset + false + true + true + true + + + [Ljava.lang.String; + clk_in_reset + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + NONE + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + true + + reset_n_out + Output + 1 + reset_n + + + + + + + embeddedsw.CMacro.BIT_CLEARING_EDGE_REGISTER + 0 + + + embeddedsw.CMacro.BIT_MODIFYING_OUTPUT_REGISTER + 0 + + + embeddedsw.CMacro.CAPTURE + 0 + + + embeddedsw.CMacro.DATA_WIDTH + 32 + + + embeddedsw.CMacro.DO_TEST_BENCH_WIRING + 0 + + + embeddedsw.CMacro.DRIVEN_SIM_VALUE + 0 + + + embeddedsw.CMacro.EDGE_TYPE + NONE + + + embeddedsw.CMacro.FREQ + 50000000 + + + embeddedsw.CMacro.HAS_IN + 1 + + + embeddedsw.CMacro.HAS_OUT + 0 + + + embeddedsw.CMacro.HAS_TRI + 0 + + + embeddedsw.CMacro.IRQ_TYPE + NONE + + + embeddedsw.CMacro.RESET_VALUE + 0 + + + embeddedsw.dts.compatible + altr,pio-1.0 + + + embeddedsw.dts.group + gpio + + + embeddedsw.dts.name + pio + + + embeddedsw.dts.params.altr,gpio-bank-width + 32 + + + embeddedsw.dts.params.resetvalue + 0 + + + embeddedsw.dts.vendor + altr + + + boolean + false + false + false + true + true + + + boolean + false + false + false + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + Input + false + true + true + true + + + java.lang.String + RISING + false + false + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + LEVEL + false + false + true + true + + + long + 0 + false + false + true + true + + + boolean + false + false + true + true + true + + + long + 0 + false + false + true + true + + + int + 32 + false + true + true + true + + + long + 50000000 + false + true + false + true + CLOCK_RATE + clk + + + boolean + false + true + true + false + true + + + boolean + false + true + true + false + true + + + boolean + true + true + true + false + true + + + boolean + false + true + true + false + true + + + boolean + false + true + true + false + true + + + java.lang.String + NONE + true + true + false + true + + + java.lang.String + NONE + true + true + false + true + + + boolean + false + true + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.Boolean + true + true + true + false + true + + + java.lang.Long + 50000000 + true + true + false + true + + clock + false + + clk + Input + 1 + clk + + + + + + java.lang.String + clk + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + DEASSERT + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + reset_n + Input + 1 + reset_n + + + + + + embeddedsw.configuration.isFlash + 0 + + + embeddedsw.configuration.isMemoryDevice + 0 + + + embeddedsw.configuration.isNonVolatileStorage + 0 + + + embeddedsw.configuration.isPrintableDevice + 0 + + + com.altera.sopcmodel.avalon.AvalonConnectionPoint$AddressAlignment + NATIVE + false + true + false + true + + + int + 0 + false + true + false + true + + + java.math.BigInteger + 4 + true + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk + false + true + true + true + + + java.lang.String + reset + false + true + true + true + + + int + 8 + false + true + true + true + + + java.math.BigInteger + + false + true + false + true + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.math.BigInteger + 0 + false + true + true + true + + + int + 0 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 0 + false + false + true + true + + + int + 0 + false + false + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + int + 1 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + false + + address + Input + 2 + address + + + readdata + Output + 32 + readdata + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + conduit + false + + in_port + Input + 32 + export + + + + + + + embeddedsw.CMacro.BIT_CLEARING_EDGE_REGISTER + 0 + + + embeddedsw.CMacro.BIT_MODIFYING_OUTPUT_REGISTER + 0 + + + embeddedsw.CMacro.CAPTURE + 0 + + + embeddedsw.CMacro.DATA_WIDTH + 32 + + + embeddedsw.CMacro.DO_TEST_BENCH_WIRING + 0 + + + embeddedsw.CMacro.DRIVEN_SIM_VALUE + 0 + + + embeddedsw.CMacro.EDGE_TYPE + NONE + + + embeddedsw.CMacro.FREQ + 50000000 + + + embeddedsw.CMacro.HAS_IN + 1 + + + embeddedsw.CMacro.HAS_OUT + 0 + + + embeddedsw.CMacro.HAS_TRI + 0 + + + embeddedsw.CMacro.IRQ_TYPE + NONE + + + embeddedsw.CMacro.RESET_VALUE + 0 + + + embeddedsw.dts.compatible + altr,pio-1.0 + + + embeddedsw.dts.group + gpio + + + embeddedsw.dts.name + pio + + + embeddedsw.dts.params.altr,gpio-bank-width + 32 + + + embeddedsw.dts.params.resetvalue + 0 + + + embeddedsw.dts.vendor + altr + + + boolean + false + false + false + true + true + + + boolean + false + false + false + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + Input + false + true + true + true + + + java.lang.String + RISING + false + false + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + LEVEL + false + false + true + true + + + long + 0 + false + false + true + true + + + boolean + false + false + true + true + true + + + long + 0 + false + false + true + true + + + int + 32 + false + true + true + true + + + long + 50000000 + false + true + false + true + CLOCK_RATE + clk + + + boolean + false + true + true + false + true + + + boolean + false + true + true + false + true + + + boolean + true + true + true + false + true + + + boolean + false + true + true + false + true + + + boolean + false + true + true + false + true + + + java.lang.String + NONE + true + true + false + true + + + java.lang.String + NONE + true + true + false + true + + + boolean + false + true + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.Boolean + true + true + true + false + true + + + java.lang.Long + 50000000 + true + true + false + true + + clock + false + + clk + Input + 1 + clk + + + + + + java.lang.String + clk + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + DEASSERT + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + reset_n + Input + 1 + reset_n + + + + + + embeddedsw.configuration.isFlash + 0 + + + embeddedsw.configuration.isMemoryDevice + 0 + + + embeddedsw.configuration.isNonVolatileStorage + 0 + + + embeddedsw.configuration.isPrintableDevice + 0 + + + com.altera.sopcmodel.avalon.AvalonConnectionPoint$AddressAlignment + NATIVE + false + true + false + true + + + int + 0 + false + true + false + true + + + java.math.BigInteger + 4 + true + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk + false + true + true + true + + + java.lang.String + reset + false + true + true + true + + + int + 8 + false + true + true + true + + + java.math.BigInteger + + false + true + false + true + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.math.BigInteger + 0 + false + true + true + true + + + int + 0 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 0 + false + false + true + true + + + int + 0 + false + false + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + int + 1 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + false + + address + Input + 2 + address + + + readdata + Output + 32 + readdata + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + conduit + false + + in_port + Input + 32 + export + + + + + + + debug.hostConnection + type jtag id 110:132 + + + int + 0 + false + true + true + true + + + int + 50000 + false + false + true + true + + + int + 0 + false + true + false + true + CLOCK_RATE + clock + + + int + 0 + false + true + true + true + + + int + 2 + false + false + true + true + + + java.lang.String + CYCLONEV + false + true + false + true + DEVICE_FAMILY + + + java.lang.String + 5CSEBA6U23I7 + false + true + false + true + DEVICE + + + java.lang.String + 7 + false + true + false + true + DEVICE_SPEEDGRADE + + + java.lang.String + Cyclone V + false + true + false + true + DEVICE_FAMILY + + + boolean + false + false + true + true + true + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clock + false + + clk_clk + Input + 1 + clk + + + + + + java.lang.String + + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + NONE + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + clk_reset_reset + Input + 1 + reset + + + + + + debug.providesServices + master + + + debug.visible + true + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + int + 0 + false + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + SYMBOLS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk + false + true + true + true + + + java.lang.String + clk_reset + false + true + true + true + + + int + 8 + false + true + true + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + boolean + false + false + true + true + true + + + int + 0 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 32 + false + true + false + true + + + int + 0 + false + true + true + true + + + int + 0 + false + true + true + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + true + true + + + int + 0 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + true + + master_address + Output + 32 + address + + + master_readdata + Input + 32 + readdata + + + master_read + Output + 1 + read + + + master_write + Output + 1 + write + + + master_writedata + Output + 32 + writedata + + + master_waitrequest + Input + 1 + waitrequest + + + master_readdatavalid + Input + 1 + readdatavalid + + + master_byteenable + Output + 4 + byteenable + + + false + out0 + s1 + out0.s1 + 0 + 16 + + + false + out1 + s1 + out1.s1 + 16 + 16 + + + false + in0 + s1 + in0.s1 + 32 + 16 + + + false + in1 + s1 + in1.s1 + 48 + 16 + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + [Ljava.lang.String; + none + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + NONE + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + true + + master_reset_reset + Output + 1 + reset + + + + + + + embeddedsw.CMacro.BIT_CLEARING_EDGE_REGISTER + 0 + + + embeddedsw.CMacro.BIT_MODIFYING_OUTPUT_REGISTER + 0 + + + embeddedsw.CMacro.CAPTURE + 0 + + + embeddedsw.CMacro.DATA_WIDTH + 32 + + + embeddedsw.CMacro.DO_TEST_BENCH_WIRING + 0 + + + embeddedsw.CMacro.DRIVEN_SIM_VALUE + 0 + + + embeddedsw.CMacro.EDGE_TYPE + NONE + + + embeddedsw.CMacro.FREQ + 50000000 + + + embeddedsw.CMacro.HAS_IN + 0 + + + embeddedsw.CMacro.HAS_OUT + 1 + + + embeddedsw.CMacro.HAS_TRI + 0 + + + embeddedsw.CMacro.IRQ_TYPE + NONE + + + embeddedsw.CMacro.RESET_VALUE + 0 + + + embeddedsw.dts.compatible + altr,pio-1.0 + + + embeddedsw.dts.group + gpio + + + embeddedsw.dts.name + pio + + + embeddedsw.dts.params.altr,gpio-bank-width + 32 + + + embeddedsw.dts.params.resetvalue + 0 + + + embeddedsw.dts.vendor + altr + + + boolean + false + false + false + true + true + + + boolean + false + false + true + true + true + + + boolean + false + false + false + true + true + + + java.lang.String + Output + false + true + true + true + + + java.lang.String + RISING + false + false + true + true + + + boolean + false + false + false + true + true + + + java.lang.String + LEVEL + false + false + true + true + + + long + 0 + false + true + true + true + + + boolean + false + false + false + true + true + + + long + 0 + false + false + true + true + + + int + 32 + false + true + true + true + + + long + 50000000 + false + true + false + true + CLOCK_RATE + clk + + + boolean + false + true + true + false + true + + + boolean + true + true + true + false + true + + + boolean + false + true + true + false + true + + + boolean + false + true + true + false + true + + + boolean + false + true + true + false + true + + + java.lang.String + NONE + true + true + false + true + + + java.lang.String + NONE + true + true + false + true + + + boolean + false + true + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.Boolean + true + true + true + false + true + + + java.lang.Long + 50000000 + true + true + false + true + + clock + false + + clk + Input + 1 + clk + + + + + + java.lang.String + clk + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + DEASSERT + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + reset_n + Input + 1 + reset_n + + + + + + embeddedsw.configuration.isFlash + 0 + + + embeddedsw.configuration.isMemoryDevice + 0 + + + embeddedsw.configuration.isNonVolatileStorage + 0 + + + embeddedsw.configuration.isPrintableDevice + 0 + + + com.altera.sopcmodel.avalon.AvalonConnectionPoint$AddressAlignment + NATIVE + false + true + false + true + + + int + 0 + false + true + false + true + + + java.math.BigInteger + 4 + true + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk + false + true + true + true + + + java.lang.String + reset + false + true + true + true + + + int + 8 + false + true + true + true + + + java.math.BigInteger + + false + true + false + true + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.math.BigInteger + 0 + false + true + true + true + + + int + 0 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 0 + false + false + true + true + + + int + 0 + false + false + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + int + 1 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + false + + address + Input + 2 + address + + + write_n + Input + 1 + write_n + + + writedata + Input + 32 + writedata + + + chipselect + Input + 1 + chipselect + + + readdata + Output + 32 + readdata + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + conduit + false + + out_port + Output + 32 + export + + + + + + + embeddedsw.CMacro.BIT_CLEARING_EDGE_REGISTER + 0 + + + embeddedsw.CMacro.BIT_MODIFYING_OUTPUT_REGISTER + 0 + + + embeddedsw.CMacro.CAPTURE + 0 + + + embeddedsw.CMacro.DATA_WIDTH + 32 + + + embeddedsw.CMacro.DO_TEST_BENCH_WIRING + 0 + + + embeddedsw.CMacro.DRIVEN_SIM_VALUE + 0 + + + embeddedsw.CMacro.EDGE_TYPE + NONE + + + embeddedsw.CMacro.FREQ + 50000000 + + + embeddedsw.CMacro.HAS_IN + 0 + + + embeddedsw.CMacro.HAS_OUT + 1 + + + embeddedsw.CMacro.HAS_TRI + 0 + + + embeddedsw.CMacro.IRQ_TYPE + NONE + + + embeddedsw.CMacro.RESET_VALUE + 0 + + + embeddedsw.dts.compatible + altr,pio-1.0 + + + embeddedsw.dts.group + gpio + + + embeddedsw.dts.name + pio + + + embeddedsw.dts.params.altr,gpio-bank-width + 32 + + + embeddedsw.dts.params.resetvalue + 0 + + + embeddedsw.dts.vendor + altr + + + boolean + false + false + false + true + true + + + boolean + false + false + true + true + true + + + boolean + false + false + false + true + true + + + java.lang.String + Output + false + true + true + true + + + java.lang.String + RISING + false + false + true + true + + + boolean + false + false + false + true + true + + + java.lang.String + LEVEL + false + false + true + true + + + long + 0 + false + true + true + true + + + boolean + false + false + false + true + true + + + long + 0 + false + false + true + true + + + int + 32 + false + true + true + true + + + long + 50000000 + false + true + false + true + CLOCK_RATE + clk + + + boolean + false + true + true + false + true + + + boolean + true + true + true + false + true + + + boolean + false + true + true + false + true + + + boolean + false + true + true + false + true + + + boolean + false + true + true + false + true + + + java.lang.String + NONE + true + true + false + true + + + java.lang.String + NONE + true + true + false + true + + + boolean + false + true + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + + + boolean + false + false + true + false + true + + + java.lang.String + + false + true + false + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.Boolean + true + true + true + false + true + + + java.lang.Long + 50000000 + true + true + false + true + + clock + false + + clk + Input + 1 + clk + + + + + + java.lang.String + clk + false + true + true + true + + + com.altera.sopcmodel.reset.Reset$Edges + DEASSERT + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + reset + false + + reset_n + Input + 1 + reset_n + + + + + + embeddedsw.configuration.isFlash + 0 + + + embeddedsw.configuration.isMemoryDevice + 0 + + + embeddedsw.configuration.isNonVolatileStorage + 0 + + + embeddedsw.configuration.isPrintableDevice + 0 + + + com.altera.sopcmodel.avalon.AvalonConnectionPoint$AddressAlignment + NATIVE + false + true + false + true + + + int + 0 + false + true + false + true + + + java.math.BigInteger + 4 + true + true + false + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.lang.String + clk + false + true + true + true + + + java.lang.String + reset + false + true + true + true + + + int + 8 + false + true + true + true + + + java.math.BigInteger + + false + true + false + true + + + com.altera.entityinterfaces.IConnectionPoint + + false + true + false + true + + + boolean + false + false + true + true + true + + + com.altera.sopcmodel.avalon.EAddrBurstUnits + WORDS + false + true + true + true + + + boolean + false + false + true + false + true + + + java.math.BigInteger + 0 + false + true + true + true + + + int + 0 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + true + true + + + int + 0 + false + false + true + true + + + int + 0 + false + false + true + true + + + int + 1 + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + int + 1 + false + true + false + true + + + int + 1 + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + true + true + + + com.altera.sopcmodel.avalon.TimingUnits + Cycles + false + true + true + true + + + boolean + false + false + true + false + true + + + boolean + false + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + false + true + + + int + 0 + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + avalon + false + + address + Input + 2 + address + + + write_n + Input + 1 + write_n + + + writedata + Input + 32 + writedata + + + chipselect + Input + 1 + chipselect + + + readdata + Output + 32 + readdata + + + + + + java.lang.String + + false + true + true + true + + + java.lang.String + + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + conduit + false + + out_port + Output + 32 + export + + + + + + int + 1 + false + true + true + true + + + java.math.BigInteger + 0x0000 + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + master_0 + master + out0 + s1 + + + + int + 1 + false + true + true + true + + + java.math.BigInteger + 0x0010 + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + master_0 + master + out1 + s1 + + + + int + 1 + false + true + true + true + + + java.math.BigInteger + 0x0020 + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + master_0 + master + in0 + s1 + + + + int + 1 + false + true + true + true + + + java.math.BigInteger + 0x0030 + false + true + true + true + + + boolean + false + false + true + true + true + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + master_0 + master + in1 + s1 + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk + out0 + clk + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk + master_0 + clk + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk + out1 + clk + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk + in0 + clk + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk + in1 + clk + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk_reset + master_0 + clk_reset + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk_reset + out0 + reset + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk_reset + out1 + reset + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk_reset + in0 + reset + + + + java.lang.String + UNKNOWN + false + true + true + true + + + boolean + false + false + true + true + true + + clk_0 + clk_reset + in1 + reset + + + 1 + clock_source + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IModule + Clock Source + 20.1 + + + 1 + clock_sink + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Clock Input + 20.1 + + + 1 + reset_sink + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Reset Input + 20.1 + + + 1 + clock_source + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Clock Output + 20.1 + + + 1 + reset_source + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Reset Output + 20.1 + + + 4 + altera_avalon_pio + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IModule + PIO (Parallel I/O) Intel FPGA IP + 20.1 + + + 5 + clock_sink + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Clock Input + 20.1 + + + 5 + reset_sink + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Reset Input + 20.1 + + + 4 + avalon_slave + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Avalon Memory Mapped Slave + 20.1 + + + 4 + conduit_end + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Conduit + 20.1 + + + 1 + altera_jtag_avalon_master + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IModule + JTAG to Avalon Master Bridge + 20.1 + + + 1 + avalon_master + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Avalon Memory Mapped Master + 20.1 + + + 1 + reset_source + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IMutableConnectionPoint + Reset Output + 20.1 + + + 4 + avalon + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IConnection + Avalon Memory Mapped Connection + 20.1 + + + 5 + clock + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IConnection + Clock Connection + 20.1 + + + 5 + reset + com.altera.entityinterfaces.IElementClass + com.altera.entityinterfaces.IConnection + Reset Connection + 20.1 + + 20.1 711 + + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io.bsf b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io.bsf new file mode 100755 index 0000000..ba4f386 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io.bsf @@ -0,0 +1,104 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 2020 Intel Corporation. All rights reserved. +Your use of Intel Corporation's design tools, logic functions +and other software and tools, and any partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Intel Program License +Subscription Agreement, the Intel Quartus Prime License Agreement, +the Intel FPGA IP License Agreement, or other applicable license +agreement, including, without limitation, that your use is for +the sole purpose of programming logic devices manufactured by +Intel and sold by Intel or its authorized distributors. Please +refer to the applicable agreement for further details, at +https://fpgasoftware.intel.com/eula. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 256 304) + (text "jtag_io" (rect 109 -1 133 11)(font "Arial" (font_size 10))) + (text "inst" (rect 8 288 20 300)(font "Arial" )) + (port + (pt 0 72) + (input) + (text "reset_reset_n" (rect 0 0 56 12)(font "Arial" (font_size 8))) + (text "reset_reset_n" (rect 4 61 82 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 96 72)(line_width 1)) + ) + (port + (pt 0 112) + (input) + (text "clk_clk" (rect 0 0 27 12)(font "Arial" (font_size 8))) + (text "clk_clk" (rect 4 101 46 112)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 96 112)(line_width 1)) + ) + (port + (pt 0 232) + (input) + (text "in0_export[31..0]" (rect 0 0 64 12)(font "Arial" (font_size 8))) + (text "in0_export[31..0]" (rect 4 221 106 232)(font "Arial" (font_size 8))) + (line (pt 0 232)(pt 96 232)(line_width 3)) + ) + (port + (pt 0 272) + (input) + (text "in1_export[31..0]" (rect 0 0 63 12)(font "Arial" (font_size 8))) + (text "in1_export[31..0]" (rect 4 261 106 272)(font "Arial" (font_size 8))) + (line (pt 0 272)(pt 96 272)(line_width 3)) + ) + (port + (pt 0 152) + (output) + (text "out0_export[31..0]" (rect 0 0 70 12)(font "Arial" (font_size 8))) + (text "out0_export[31..0]" (rect 4 141 112 152)(font "Arial" (font_size 8))) + (line (pt 0 152)(pt 96 152)(line_width 3)) + ) + (port + (pt 0 192) + (output) + (text "out1_export[31..0]" (rect 0 0 69 12)(font "Arial" (font_size 8))) + (text "out1_export[31..0]" (rect 4 181 112 192)(font "Arial" (font_size 8))) + (line (pt 0 192)(pt 96 192)(line_width 3)) + ) + (drawing + (text "reset" (rect 67 43 164 99)(font "Arial" (color 128 0 0)(font_size 9))) + (text "reset_n" (rect 101 67 244 144)(font "Arial" (color 0 0 0))) + (text "clk" (rect 81 83 180 179)(font "Arial" (color 128 0 0)(font_size 9))) + (text "clk" (rect 101 107 220 224)(font "Arial" (color 0 0 0))) + (text "out0" (rect 72 123 168 259)(font "Arial" (color 128 0 0)(font_size 9))) + (text "export" (rect 101 147 238 304)(font "Arial" (color 0 0 0))) + (text "out1" (rect 74 163 172 339)(font "Arial" (color 128 0 0)(font_size 9))) + (text "export" (rect 101 187 238 384)(font "Arial" (color 0 0 0))) + (text "in0" (rect 80 203 178 419)(font "Arial" (color 128 0 0)(font_size 9))) + (text "export" (rect 101 227 238 464)(font "Arial" (color 0 0 0))) + (text "in1" (rect 82 243 182 499)(font "Arial" (color 128 0 0)(font_size 9))) + (text "export" (rect 101 267 238 544)(font "Arial" (color 0 0 0))) + (text " system " (rect 221 288 490 586)(font "Arial" )) + (line (pt 96 32)(pt 160 32)(line_width 1)) + (line (pt 160 32)(pt 160 288)(line_width 1)) + (line (pt 96 288)(pt 160 288)(line_width 1)) + (line (pt 96 32)(pt 96 288)(line_width 1)) + (line (pt 97 52)(pt 97 76)(line_width 1)) + (line (pt 98 52)(pt 98 76)(line_width 1)) + (line (pt 97 92)(pt 97 116)(line_width 1)) + (line (pt 98 92)(pt 98 116)(line_width 1)) + (line (pt 97 132)(pt 97 156)(line_width 1)) + (line (pt 98 132)(pt 98 156)(line_width 1)) + (line (pt 97 172)(pt 97 196)(line_width 1)) + (line (pt 98 172)(pt 98 196)(line_width 1)) + (line (pt 97 212)(pt 97 236)(line_width 1)) + (line (pt 98 212)(pt 98 236)(line_width 1)) + (line (pt 97 252)(pt 97 276)(line_width 1)) + (line (pt 98 252)(pt 98 276)(line_width 1)) + (line (pt 0 0)(pt 256 0)(line_width 1)) + (line (pt 256 0)(pt 256 304)(line_width 1)) + (line (pt 0 304)(pt 256 304)(line_width 1)) + (line (pt 0 0)(pt 0 304)(line_width 1)) + ) +) diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io.cmp b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io.cmp new file mode 100755 index 0000000..85f5b76 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io.cmp @@ -0,0 +1,11 @@ + component jtag_io is + port ( + clk_clk : in std_logic := 'X'; -- clk + in0_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export + in1_export : in std_logic_vector(31 downto 0) := (others => 'X'); -- export + out0_export : out std_logic_vector(31 downto 0); -- export + out1_export : out std_logic_vector(31 downto 0); -- export + reset_reset_n : in std_logic := 'X' -- reset_n + ); + end component jtag_io; + diff --git a/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io.html b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io.html new file mode 100755 index 0000000..722c0e7 --- /dev/null +++ b/example_projects/quartus_test_prj_template_v4/ip/jtag_io/jtag_io.html @@ -0,0 +1,1152 @@ + + + + + datasheet for jtag_io + + + + + + + + +
jtag_io +
+
+
+ + + + + +
2022.04.01.12:29:59Datasheet
+