From b77f4b8f6cd48452bbd56e84bba62f34066413f0 Mon Sep 17 00:00:00 2001 From: Joao Vitor MENEGON XAVIER <j23meneg@fl-tp-br-634.imta.fr> Date: Wed, 5 Mar 2025 10:02:06 +0100 Subject: [PATCH] 5 mars --- docs/compte-rendu.md | 2 + docs/img/FSM.png | Bin 117251 -> 132225 bytes proj/AudioProc.cache/sim/ssm.db | 11 + proj/AudioProc.cache/wt/project.wpc | 3 + proj/AudioProc.cache/wt/xsim.wdf | 4 + proj/AudioProc.hw/AudioProc.lpr | 7 + proj/AudioProc.ip_user_files/README.txt | 1 + .../ip/clk_wiz_0/clk_wiz_0.vho | 100 + .../ipstatic/mmcm_pll_drp_func_7s_mmcm.vh | 680 ++++ .../ipstatic/mmcm_pll_drp_func_7s_pll.vh | 542 +++ .../ipstatic/mmcm_pll_drp_func_us_mmcm.vh | 680 ++++ .../ipstatic/mmcm_pll_drp_func_us_pll.vh | 555 +++ .../mmcm_pll_drp_func_us_plus_mmcm.vh | 886 +++++ .../ipstatic/mmcm_pll_drp_func_us_plus_pll.vh | 561 +++ .../clk_wiz_0/activehdl/README.txt | 50 + .../clk_wiz_0/activehdl/clk_wiz_0.sh | 258 ++ .../clk_wiz_0/activehdl/clk_wiz_0.udo | 0 .../clk_wiz_0/activehdl/compile.do | 18 + .../clk_wiz_0/activehdl/file_info.txt | 3 + .../sim_scripts/clk_wiz_0/activehdl/glbl.v | 84 + .../clk_wiz_0/activehdl/simulate.do | 14 + .../sim_scripts/clk_wiz_0/modelsim/README.txt | 50 + .../clk_wiz_0/modelsim/clk_wiz_0.sh | 287 ++ .../clk_wiz_0/modelsim/clk_wiz_0.udo | 0 .../sim_scripts/clk_wiz_0/modelsim/compile.do | 15 + .../clk_wiz_0/modelsim/file_info.txt | 3 + .../sim_scripts/clk_wiz_0/modelsim/glbl.v | 84 + .../clk_wiz_0/modelsim/simulate.do | 19 + .../sim_scripts/clk_wiz_0/modelsim/wave.do | 2 + .../sim_scripts/clk_wiz_0/questa/README.txt | 50 + .../sim_scripts/clk_wiz_0/questa/clk_wiz_0.sh | 297 ++ .../clk_wiz_0/questa/clk_wiz_0.udo | 0 .../sim_scripts/clk_wiz_0/questa/compile.do | 15 + .../sim_scripts/clk_wiz_0/questa/elaborate.do | 1 + .../clk_wiz_0/questa/file_info.txt | 3 + .../sim_scripts/clk_wiz_0/questa/glbl.v | 84 + .../sim_scripts/clk_wiz_0/questa/simulate.do | 19 + .../sim_scripts/clk_wiz_0/questa/wave.do | 2 + .../sim_scripts/clk_wiz_0/riviera/README.txt | 50 + .../clk_wiz_0/riviera/clk_wiz_0.sh | 264 ++ .../clk_wiz_0/riviera/clk_wiz_0.udo | 0 .../sim_scripts/clk_wiz_0/riviera/compile.do | 18 + .../clk_wiz_0/riviera/file_info.txt | 3 + .../sim_scripts/clk_wiz_0/riviera/glbl.v | 84 + .../sim_scripts/clk_wiz_0/riviera/simulate.do | 14 + .../sim_scripts/clk_wiz_0/vcs/README.txt | 50 + .../sim_scripts/clk_wiz_0/vcs/clk_wiz_0.sh | 337 ++ .../sim_scripts/clk_wiz_0/vcs/file_info.txt | 3 + .../sim_scripts/clk_wiz_0/vcs/glbl.v | 84 + .../sim_scripts/clk_wiz_0/vcs/simulate.do | 2 + .../sim_scripts/clk_wiz_0/xcelium/README.txt | 50 + .../clk_wiz_0/xcelium/clk_wiz_0.sh | 343 ++ .../clk_wiz_0/xcelium/file_info.txt | 3 + .../sim_scripts/clk_wiz_0/xcelium/glbl.v | 84 + .../sim_scripts/clk_wiz_0/xcelium/hdl.var | 0 .../sim_scripts/clk_wiz_0/xcelium/simulate.do | 7 + .../sim_scripts/clk_wiz_0/xsim/README.txt | 50 + .../sim_scripts/clk_wiz_0/xsim/clk_wiz_0.sh | 330 ++ .../sim_scripts/clk_wiz_0/xsim/cmd.tcl | 12 + .../sim_scripts/clk_wiz_0/xsim/file_info.txt | 3 + .../sim_scripts/clk_wiz_0/xsim/glbl.v | 84 + .../sim_scripts/clk_wiz_0/xsim/vlog.prj | 8 + .../sim_1/behav/xsim/compile.log | 6 + .../AudioProc.sim/sim_1/behav/xsim/compile.sh | 28 + .../sim_1/behav/xsim/elaborate.log | 49 + .../sim_1/behav/xsim/elaborate.sh | 22 + proj/AudioProc.sim/sim_1/behav/xsim/glbl.v | 84 + .../sim_1/behav/xsim/simulate.log | 1 + .../sim_1/behav/xsim/simulate.sh | 22 + .../sim_1/behav/xsim/tb_firUnit.tcl | 11 + .../sim_1/behav/xsim/tb_firUnit_behav.wdb | Bin 0 -> 94714 bytes .../sim_1/behav/xsim/tb_firUnit_vhdl.prj | 8 + .../sim_1/behav/xsim/tb_firUnit_vlog.prj | 9 + proj/AudioProc.sim/sim_1/behav/xsim/xelab.pb | Bin 0 -> 5756 bytes .../tb_firUnit_behav/Compile_Options.txt | 1 + .../tb_firUnit_behav/TempBreakPointFile.txt | 1 + .../tb_firUnit_behav/obj/xsim_0.lnx64.o | Bin 0 -> 278848 bytes .../xsim.dir/tb_firUnit_behav/obj/xsim_1.c | 572 +++ .../tb_firUnit_behav/obj/xsim_1.lnx64.o | Bin 0 -> 36368 bytes .../xsim/xsim.dir/tb_firUnit_behav/xsim.dbg | Bin 0 -> 51520 bytes .../xsim/xsim.dir/tb_firUnit_behav/xsim.mem | Bin 0 -> 68207 bytes .../xsim/xsim.dir/tb_firUnit_behav/xsim.reloc | Bin 0 -> 116468 bytes .../xsim/xsim.dir/tb_firUnit_behav/xsim.rlx | 12 + .../xsim/xsim.dir/tb_firUnit_behav/xsim.rtti | Bin 0 -> 633 bytes .../xsim.dir/tb_firUnit_behav/xsim.svtype | Bin 0 -> 78 bytes .../xsim/xsim.dir/tb_firUnit_behav/xsim.type | Bin 0 -> 7552 bytes .../xsim/xsim.dir/tb_firUnit_behav/xsim.xdbg | Bin 0 -> 23272 bytes .../tb_firUnit_behav/xsimSettings.ini | 50 + .../xsim.dir/tb_firUnit_behav/xsimcrash.log | 0 .../xsim/xsim.dir/tb_firUnit_behav/xsimk | Bin 0 -> 245872 bytes .../xsim.dir/tb_firUnit_behav/xsimkernel.log | 7 + .../xsim.dir/xil_defaultlib/controlunit.vdb | Bin 0 -> 8568 bytes .../xsim/xsim.dir/xil_defaultlib/firunit.vdb | Bin 0 -> 10248 bytes .../xsim/xsim.dir/xil_defaultlib/glbl.sdb | Bin 0 -> 5635 bytes .../xil_defaultlib/operative@unit.sdb | Bin 0 -> 172617 bytes .../xsim.dir/xil_defaultlib/tb_firunit.vdb | Bin 0 -> 7426 bytes .../xil_defaultlib/xil_defaultlib.rlx | 9 + proj/AudioProc.sim/sim_1/behav/xsim/xsim.ini | 490 +++ .../sim_1/behav/xsim/xsim.ini.bak | 490 +++ proj/AudioProc.sim/sim_1/behav/xsim/xvhdl.log | 6 + proj/AudioProc.sim/sim_1/behav/xsim/xvhdl.pb | Bin 0 -> 789 bytes proj/AudioProc.sim/sim_1/behav/xsim/xvlog.log | 0 proj/AudioProc.sim/sim_1/behav/xsim/xvlog.pb | 4 + proj/AudioProc.xpr | 322 ++ proj/ip_upgrade.log | 27 + proj/tb_firUnit_behav.wcfg | 60 + src/hdl/controlUnit.vhd | 50 +- src/ip/clk_wiz_0/clk_wiz_0.dcp | Bin 12528 -> 0 bytes src/ip/clk_wiz_0/clk_wiz_0.v | 52 +- src/ip/clk_wiz_0/clk_wiz_0.vho | 49 +- src/ip/clk_wiz_0/clk_wiz_0.xci | 1253 +++--- src/ip/clk_wiz_0/clk_wiz_0.xdc | 34 +- src/ip/clk_wiz_0/clk_wiz_0.xml | 3432 +++++++++-------- src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v | 65 +- src/ip/clk_wiz_0/clk_wiz_0_ooc.xdc | 31 +- src/ip/clk_wiz_0/clk_wiz_0_sim_netlist.v | 278 -- src/ip/clk_wiz_0/clk_wiz_0_sim_netlist.vhdl | 218 -- src/ip/clk_wiz_0/clk_wiz_0_stub.v | 24 - src/ip/clk_wiz_0/clk_wiz_0_stub.vhdl | 33 - .../clk_wiz_0/doc/clk_wiz_v5_2_changelog.txt | 115 - .../clk_wiz_0/doc/clk_wiz_v6_0_changelog.txt | 323 ++ src/ip/clk_wiz_0/mmcm_pll_drp_func_7s_mmcm.vh | 680 ++++ src/ip/clk_wiz_0/mmcm_pll_drp_func_7s_pll.vh | 542 +++ src/ip/clk_wiz_0/mmcm_pll_drp_func_us_mmcm.vh | 680 ++++ src/ip/clk_wiz_0/mmcm_pll_drp_func_us_pll.vh | 555 +++ .../mmcm_pll_drp_func_us_plus_mmcm.vh | 886 +++++ .../mmcm_pll_drp_func_us_plus_pll.vh | 561 +++ 127 files changed, 16562 insertions(+), 2863 deletions(-) create mode 100644 proj/AudioProc.cache/sim/ssm.db create mode 100644 proj/AudioProc.cache/wt/project.wpc create mode 100644 proj/AudioProc.cache/wt/xsim.wdf create mode 100644 proj/AudioProc.hw/AudioProc.lpr create mode 100644 proj/AudioProc.ip_user_files/README.txt create mode 100755 proj/AudioProc.ip_user_files/ip/clk_wiz_0/clk_wiz_0.vho create mode 100755 proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_7s_mmcm.vh create mode 100755 proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_7s_pll.vh create mode 100755 proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_us_mmcm.vh create mode 100755 proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_us_pll.vh create mode 100755 proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_us_plus_mmcm.vh create mode 100755 proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_us_plus_pll.vh create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/README.txt create mode 100755 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/clk_wiz_0.sh create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/clk_wiz_0.udo create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/compile.do create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/file_info.txt create mode 100755 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/glbl.v create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/simulate.do create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/README.txt create mode 100755 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/clk_wiz_0.sh create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/clk_wiz_0.udo create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/compile.do create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/file_info.txt create mode 100755 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/glbl.v create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/simulate.do create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/wave.do create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/README.txt create mode 100755 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/clk_wiz_0.sh create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/clk_wiz_0.udo create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/compile.do create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/elaborate.do create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/file_info.txt create mode 100755 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/glbl.v create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/simulate.do create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/wave.do create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/README.txt create mode 100755 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/clk_wiz_0.sh create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/clk_wiz_0.udo create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/compile.do create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/file_info.txt create mode 100755 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/glbl.v create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/simulate.do create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/README.txt create mode 100755 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/clk_wiz_0.sh create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/file_info.txt create mode 100755 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/glbl.v create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/simulate.do create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/README.txt create mode 100755 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/clk_wiz_0.sh create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/file_info.txt create mode 100755 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/glbl.v create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/hdl.var create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/simulate.do create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/README.txt create mode 100755 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/clk_wiz_0.sh create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/cmd.tcl create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/file_info.txt create mode 100755 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/glbl.v create mode 100644 proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/vlog.prj create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/compile.log create mode 100755 proj/AudioProc.sim/sim_1/behav/xsim/compile.sh create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/elaborate.log create mode 100755 proj/AudioProc.sim/sim_1/behav/xsim/elaborate.sh create mode 100755 proj/AudioProc.sim/sim_1/behav/xsim/glbl.v create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/simulate.log create mode 100755 proj/AudioProc.sim/sim_1/behav/xsim/simulate.sh create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/tb_firUnit.tcl create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/tb_firUnit_behav.wdb create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/tb_firUnit_vhdl.prj create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/tb_firUnit_vlog.prj create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xelab.pb create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/Compile_Options.txt create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/TempBreakPointFile.txt create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/obj/xsim_0.lnx64.o create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/obj/xsim_1.c create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/obj/xsim_1.lnx64.o create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.dbg create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.mem create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.reloc create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.rlx create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.rtti create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.svtype create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.type create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.xdbg create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsimSettings.ini create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsimcrash.log create mode 100755 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsimk create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsimkernel.log create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/controlunit.vdb create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/firunit.vdb create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/glbl.sdb create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/operative@unit.sdb create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/tb_firunit.vdb create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/xil_defaultlib.rlx create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.ini create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xsim.ini.bak create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xvhdl.log create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xvhdl.pb create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xvlog.log create mode 100644 proj/AudioProc.sim/sim_1/behav/xsim/xvlog.pb create mode 100644 proj/AudioProc.xpr create mode 100644 proj/ip_upgrade.log create mode 100644 proj/tb_firUnit_behav.wcfg delete mode 100644 src/ip/clk_wiz_0/clk_wiz_0.dcp delete mode 100644 src/ip/clk_wiz_0/clk_wiz_0_sim_netlist.v delete mode 100644 src/ip/clk_wiz_0/clk_wiz_0_sim_netlist.vhdl delete mode 100644 src/ip/clk_wiz_0/clk_wiz_0_stub.v delete mode 100644 src/ip/clk_wiz_0/clk_wiz_0_stub.vhdl delete mode 100644 src/ip/clk_wiz_0/doc/clk_wiz_v5_2_changelog.txt create mode 100755 src/ip/clk_wiz_0/doc/clk_wiz_v6_0_changelog.txt create mode 100755 src/ip/clk_wiz_0/mmcm_pll_drp_func_7s_mmcm.vh create mode 100755 src/ip/clk_wiz_0/mmcm_pll_drp_func_7s_pll.vh create mode 100755 src/ip/clk_wiz_0/mmcm_pll_drp_func_us_mmcm.vh create mode 100755 src/ip/clk_wiz_0/mmcm_pll_drp_func_us_pll.vh create mode 100755 src/ip/clk_wiz_0/mmcm_pll_drp_func_us_plus_mmcm.vh create mode 100755 src/ip/clk_wiz_0/mmcm_pll_drp_func_us_plus_pll.vh diff --git a/docs/compte-rendu.md b/docs/compte-rendu.md index cd056f6..dc0585a 100644 --- a/docs/compte-rendu.md +++ b/docs/compte-rendu.md @@ -9,6 +9,8 @@ ### Question filtre 1 : Combien de processus sont utilisés et de quelles natures sont-ils ? Comment les différenciez-vous ? +Um total de dois processos foram utilizados. O primeiro é um processo sequencial (sincrono), pois trabalha com um sinal de relogio; o segundo é combinacional (assincrono), pois indepente do sinal de relogio. + ### Question filtre 2 : La simulation vous permet-elle de valider votre description VHDL ? Justifiez. diff --git a/docs/img/FSM.png b/docs/img/FSM.png index 7f6db881fff5cdfb9351c0348dfec49ff082516d..6209a6edf52add08fccc178789f76dbbfafdffcc 100644 GIT binary patch delta 108020 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	Z?;9Bd(<a*}!KR!uE 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	_=obTK2F`Mrd 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 VYg8%2!@$76;OXk;vd$@?2>{kQ#$x~g delta 95955 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%0Aa-tQ=@`ZDwN!IB>}6NHMYuP?ml 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℘GLtV?P_$C{XmdpT0=K9i4+TrUqOlLU0NJsqnJnQnl z-5Zs*EZR9OzW(pjy>bdtC%A9!ELLxiy0V9_!av~aqIvxM+<nY~j2|79w4Cfrv#+Iu zmTVPb6SerTqCqFoULiDcb6RTBQYjAJJvIvB9NLQYES82zO%0X`2_{BODeL!Ce!g^| zk@;-m{Y`AP$_@4L%|DKoK0L%~+plw&lgZQhz!cet$=eQ1k!SVi`xIkhYpW^mdrpMq z3_s)IiGox1JPdDICuI1!*)?oR42yvG@%7GAe8AJv2ck}L*qFrEd}OUI3Yes=#u1^+ z<fg35u)gT&DVbo`yv7-&iVd$=zbHGriS-dMU}d`I<>u44wEm1HhlDia;z@#6-YUCw zEwfI#*2++&sjyOSrSAH*+21!w7dtqd=&+1ojcit!V8qhn<+i~^rBrdXP4u=L&FGDD zQm1h=Bs5J>*y#^8)yd7Lan~75ju-5Vizf@FbS+l#$t_(oKlg;jGB*ZMmJCl`TOLR` zFm2<kq`H~)!2$v-LG27)xBmNUN(Nu?<jG$#Q9pd0%=Mk!k^D@1tG+&(<a9R3>GjRI zZ(IZfSXdYx4@huG^!6keubA!r*Jc-gS0p>ri=_?m%U-x?s&Q~IH8m(Ga4cZ~c_}1r z!Owmb>t#=ZW<IwBP2GtGmQ;v<+To54AZwc%0_#t5h;;<;evvvgO?URBucs{2+89b~ zFVu?8)dCHJft0Z{PEklGF=9IEWAZU_dtR*9HSOm!1er4QdB0v>u|mT*D)iO#rd9e| z?wy;W8T^WUvLFj1*mxn=120low3{x7sO$^1eCraf$v#7s>B3Qm+5dZ`&1XIR6|`x^ z{`&v_W~V+`cx{$tahe>{rFS>9qwZyEty=Zi-QE4Tw#~E~J2fL0&rt^ZYpY^{kWte- zkqMXG)-}#}s<a{PtkkUyiOg%`_TG9hyMaUMO4!7F5g{R`RxZ&;>-GugTwd<jboco2 z_C7gVDQle;hWmS~kN5uG!uz}Z)a$#u%S-i?7uFYl-I;fGqk}+Uu7W+kpgG6U%Bm`< zEGx-yP+&KPD1)pF-MwSShIySCdP{yu&B|e@dHL`cuY|#Y1=$Qg8=^EPrLyzOomr^p zu`YaNP^)LB9dA>LM(8|?!lX%Ut*^2xDlFRN&K`C6qG-=Qv*Lvlqkf5_7&s0N#0VPH zOG-v=NMLmQSo-hJ&u3k|YqSMf90Wcrja}@<+nm(;DbeIi_j%^c+1K@?OtVDx&vPhJ zoW8Eg=Yir3qg1ZDdnzZ}{d%Dcn$%r*kndmH-JQklYCba@_U+sE<;6wiY3=RoOX~jq z@+rx?yX)xjgR|Q=m0T5=bxAMKorC>Rn#U{O7xghc6K9#Kv%U#mA9rzM^6?eL&(GEL zF8HSfNlH7F5{!(P96qSF-4R@Q#Ngd&=7)V7laEW4UrIUCw$-tQzwF%|%T)mjnPT@= zO^u0-wU<ae-Y2WG-mdtW&%XKQ`Eq|h9+#In)z~;i!94THiHSC#TQV#vcX>`$EBW`Q za#d{oZnOFA&*$4#A6wKXC@APtcW+;<x1*zD$N~q(bCMUo99j^bP*7k{-NwYkbVHcY zXp)+*)I9Tr#lf4OEjiE;aCw1avqtW%Eqks%J3Cwbsfnc<DB2h&D<%XPDeY8N+x>3k zydRgAdS6)=YyHhl;u2_pcOF+uYKi2eg%960lrz_ZhAUS^Y*Y&WvBZD=yrL&34svcQ zeSPie^SgKM%&1VPX*4PpnA^%N{;Bvy<Kwq)&&si06{vHx@CtvP@MQg$x3{NzcItJ% zzjI}c<;sX=m&Dxf@9(SI+wWg8PwhA-C@&@mvG{noZFqcXsrThmQ?)Jq^wTUk4*V|o z@gXs4SINqHM{(Xu4HHgnN<D2igI!UiLi<DO>SuC_I?eitEioTdWA;{ky>V*Bi4z`b z>J>6mjTBfpE<ZUxfBtc|r`$qzrln;Uo`EVNE9tL_@hqQ@TtDJ}edo%^;-bj`g|z}+ z&Yat(Xi9%c)oSKuYI4vLG_aI(d?S;W8atJ1<(=7c@*G&|CoE=Ey09`>o%x*8oh-R| z>@A<S<o^Hnw<Sw-%C%Kt>*H*Tii#e|fR0WO{&h>nzHZL^W7%s;UtgP3uq*$*os(YI zvz;ftHl(|3c4AN62QGfyx2z3X>ILc=G`(7)ceyk#>)M*OhDlr&9FHd`I$QL+f~G@Q z7>nHwJV{}xf1nUq@Z!S47JVVZ(+&)kB0rw4trF$gn$;2k+L3;ad1dHov4x6~HZmvv z?x_1~)gF6oU99)h)6<{3gjQ%?&}R9msv!NL#AmM6)amR;GoEzj+}@`9?atfV+lwRE zQ=hHia*Ff3xX3kmd+^#QQ?0;7EW&9O856u0N$uh|{MjJqM!kXG1lO(ow`Q{(e_>^A zn(fDvT+uI3c50fgwD1PI+Fu){a~uhTJ6Pug$3BI9Kc7kag^3u~vz(h_>3nxr>Eg@F z{iRbkDhPY{xCUu?uuU@FUH0}=@&7-c&(~D{{G{5R;vnVVa6z0UHst@W*ZNtvwrI+8 z7d51W3dBp)ukxAj<JYsZ(&rQp)}@`Db@YjgsepJz`h!@8iwA$MTDXhd)@`1B{kh^p zx0#eC+yKRGO@nfx*c0xZrYks{oIowxNMFmHa-xf4LS{m02ws*mO+5*=KLXr+{@l*r zKb1S>8OMX^Wo<l?7J?xVzc@Mwc<3^vIlI+w5Ue@)FkEew!jUuLj4iqkR2$44P}I1( zJ^1FfXpv><W*^-H*UIdQv;_Ee6g}<Qn(O-wQZ6ebD6yRB>S16GaaTyWydqFp*iq@S zS_{J@mxaQ{m7h`=y}+5$(Lvw>H&dFs+lB3nw(eK>W>wu>%2U6{oW(&X{mcwSMX9}t zTFl@)qrfpkR`Q@~V;P6aovW+ZcltbQWH^-&c(sX3*brQ`fNGd{jv1<w2cKQ2;Obp= z!QbhOjX*;mw@I?y-!H+RBPOhIg4lULOTZx7h^gda3fEs@1qZdXD3%33o4!3?RGf6{ zwZdlZdT<`?<(OeAd2@HUzPi`Do12eIZQQ=Xc44oT)xt+=kaAE#f#ZcR<7PGG8yZo$ z&Ubu1xqqp=IobT$-QDFoyH_q0t(v@D%Q6aTWt4zHwGq<-MYlGw2N&c8jqRA`*Z;Ew z&3s(hl<NK1U(c8eWUB&4ge_COn4?>PsEn-a$@}-`7d=0h`&Int9J3C!5`mS?33F#C zD1d7|g#->3owl9@7saL|1%A>_vtikke*T=-&RI+a$7aW-34xjg4gwokL5dzEdAPP0 z#!veD>+9l0uHBn>_99HtVA1L7VQAT$e*V&q!pAB(2`lQukJLY&XIDFG-|u(Uzka{p z&ucT8M;~hGYmNvR$%Cw)zkXf%^z?M$maj*6nj5;ixmj6QJSvVEd^oiN+}Pk?lH!O^ zkv#b8`kF}R*Voo2YgQZnRcctJy5)&}__{fD?9(oSA`BclvK$dQk_Y1)-1h9<d-C{k z_j<i`^8_+3FXOHKcvQSaEj<ZpB4}0Uh72R72D6+S4x7`?E^21ymtxjmJumsggM(9y z)BU9EYIcOa4>nVWx;2g?!bXyD&hdWvbVu6~4&8_i3n~?J6j%TJ_xt_IqNk@oH2`<y zMjcRl3)F~;64=0H)YM%sC@JZ=)NAS@%i?DNo72v&dHPEtRer8@`7%&L^+>01uhD!T zC5Rmg92rUprYSCWr%azNE~*zZBkkNA&2TGDjw`D|yZ8P57X9kV%3z_sY0hxp{#8yW zO<@sGY)`qhB{QZlc(EJr-^FRH%5AN!fiEvD&Ahs*J~U)=ny>bai8+qo@Nqm4B)GxL zsHywohlkEisT}(X>i>QX_ugyA7Ww_j$;p||&&`eLeDdT;$^^@l09am7SjiEgD;dZ* z!#rQ^>^$4qyF2-0EDToeh<IA)-Y@sGz-M*X+Kfv}Ji~Un-<$$XQco2VzNWBDuYYoN zb@-RZ{q~!F=}a=I{_-NRGF(ek``Ewg@9%u4>&K_@EHGDw=YbjAOlFR5AsY@KK0I@Z zO~r?X!{)KON;bX<N|?Z}^2zBu`#i-r;qcPKz?>zgt7pXn<@ry(->-ijz0j%kM)0L2 zp2DXlsdn#-oiDOB{d)bnSRbdn`}=(D|9oIBeSgo^_3;T$<TT)Ew21S~zS`dr1^g%H zsCrLZva9s<r?q}_t&Sat&oBP*^XJ8HZ*Oyc&%eJfRp`=+K;^x?`mjQTgQ?Bwz_XJb zY8%x3=PlV={r%J1`}O~qy7$Wkb_%IJx^w65UEcaq-AShJCae3;sCmF9`dG=eYePBv zETf~{;{MkniZ(z4OCiCFrKLxuVc-7!_L=wB#qJjK_FEOY+O4dt?8%!qGS#Q2>CTQ@ z|9p4(`$uaO6%-o&_jh$Y`lq0v&?{}8<|_#=v<?Uf3K&f~v${>7!z*9{2e<8<`UMLX z+>k!OTvfh;g|+_h=}C6ARi`E>GT*<l-#G1z$NKpFY896A>}pS$pWQDjBa`v@+1WxH zV>vmwKlK}vj!xQHWElfVHx2>@{wys$FMjTFP-a(gRn<5@&o)_~&4b-5r!e?G+s2>! z|Npk%w0-;XH#awb_Whji?(SYxTzpyeGgqnwEFB%#Bk-eslF;>Anm^cL85kHCJYD@< J);T3K0RRDDNsa&j diff --git a/proj/AudioProc.cache/sim/ssm.db b/proj/AudioProc.cache/sim/ssm.db new file mode 100644 index 0000000..450ac85 --- /dev/null +++ b/proj/AudioProc.cache/sim/ssm.db @@ -0,0 +1,11 @@ +################################################################################ +# DONOT REMOVE THIS FILE +# Unified simulation database file for selected simulation model for IP +# +# File: ssm.db (Wed Feb 26 12:13:26 2025) +# +# This file is generated by the unified simulation automation and contains the +# selected simulation model information for the IP/BD instances. +# DONOT REMOVE THIS FILE +################################################################################ +clk_wiz_0,rtl diff --git a/proj/AudioProc.cache/wt/project.wpc b/proj/AudioProc.cache/wt/project.wpc new file mode 100644 index 0000000..6888ede --- /dev/null +++ b/proj/AudioProc.cache/wt/project.wpc @@ -0,0 +1,3 @@ +version:1 +6d6f64655f636f756e7465727c4755494d6f6465:2 +eof: diff --git a/proj/AudioProc.cache/wt/xsim.wdf b/proj/AudioProc.cache/wt/xsim.wdf new file mode 100644 index 0000000..50afb2c --- /dev/null +++ b/proj/AudioProc.cache/wt/xsim.wdf @@ -0,0 +1,4 @@ +version:1 +7873696d:7873696d5c636f6d6d616e645f6c696e655f6f7074696f6e73:2d73696d5f6d6f6465:64656661756c743a3a6265686176696f72616c:00:00 +7873696d:7873696d5c636f6d6d616e645f6c696e655f6f7074696f6e73:2d73696d5f74797065:64656661756c743a3a:00:00 +eof:241934075 diff --git a/proj/AudioProc.hw/AudioProc.lpr b/proj/AudioProc.hw/AudioProc.lpr new file mode 100644 index 0000000..afc0a86 --- /dev/null +++ b/proj/AudioProc.hw/AudioProc.lpr @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Product Version: Vivado v2024.1 (64-bit) --> +<!-- --> +<!-- Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. --> +<!-- Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. --> + +<labtools version="1" minor="0"/> diff --git a/proj/AudioProc.ip_user_files/README.txt b/proj/AudioProc.ip_user_files/README.txt new file mode 100644 index 0000000..023052c --- /dev/null +++ b/proj/AudioProc.ip_user_files/README.txt @@ -0,0 +1 @@ +The files in this directory structure are automatically generated and managed by Vivado. Editing these files is not recommended. diff --git a/proj/AudioProc.ip_user_files/ip/clk_wiz_0/clk_wiz_0.vho b/proj/AudioProc.ip_user_files/ip/clk_wiz_0/clk_wiz_0.vho new file mode 100755 index 0000000..b02ca8e --- /dev/null +++ b/proj/AudioProc.ip_user_files/ip/clk_wiz_0/clk_wiz_0.vho @@ -0,0 +1,100 @@ + +-- (c) Copyright 2017-2018, 2023 Advanced Micro Devices, Inc. All rights reserved. +-- +-- This file contains confidential and proprietary information +-- of AMD and is protected under U.S. and international copyright +-- and other intellectual property laws. +-- +-- DISCLAIMER +-- This disclaimer is not a license and does not grant any +-- rights to the materials distributed herewith. Except as +-- otherwise provided in a valid license issued to you by +-- AMD, and to the maximum extent permitted by applicable +-- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +-- WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES +-- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +-- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +-- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +-- (2) AMD shall not be liable (whether in contract or tort, +-- including negligence, or under any other theory of +-- liability) for any loss or damage of any kind or nature +-- related to, arising under or in connection with these +-- materials, including for any direct, or any indirect, +-- special, incidental, or consequential loss or damage +-- (including loss of data, profits, goodwill, or any type of +-- loss or damage suffered as a result of any action brought +-- by a third party) even if such damage or loss was +-- reasonably foreseeable or AMD had been advised of the +-- possibility of the same. +-- +-- CRITICAL APPLICATIONS +-- AMD products are not designed or intended to be fail- +-- safe, or for use in any application requiring fail-safe +-- performance, such as life-support or safety devices or +-- systems, Class III medical devices, nuclear facilities, +-- applications related to the deployment of airbags, or any +-- other applications that could lead to death, personal +-- injury, or severe property or environmental damage +-- (individually and collectively, "Critical +-- Applications"). Customer assumes the sole risk and +-- liability of any use of AMD products in Critical +-- Applications, subject only to applicable laws and +-- regulations governing limitations on product liability. +-- +-- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +-- PART OF THIS FILE AT ALL TIMES. +------------------------------------------------------------------------------ +-- User entered comments +------------------------------------------------------------------------------ +-- None +-- +------------------------------------------------------------------------------ +-- Output Output Phase Duty Cycle Pk-to-Pk Phase +-- Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps) +------------------------------------------------------------------------------ +-- clk_out1__100.00000______0.000______50.0______151.366____132.063 +-- clk_out2__200.00000______0.000______50.0______132.221____132.063 +-- clk_out3__12.00000______0.000______50.0______231.952____132.063 +-- clk_out4__50.00000______0.000______50.0______174.353____132.063 +-- +------------------------------------------------------------------------------ +-- Input Clock Freq (MHz) Input Jitter (UI) +------------------------------------------------------------------------------ +-- __primary_________100.000____________0.010 + + +-- The following code must appear in the VHDL architecture header: +------------- Begin Cut here for COMPONENT Declaration ------ COMP_TAG +component clk_wiz_0 +port + (-- Clock in ports + -- Clock out ports + clk_out1 : out std_logic; + clk_out2 : out std_logic; + clk_out3 : out std_logic; + clk_out4 : out std_logic; + -- Status and control signals + reset : in std_logic; + locked : out std_logic; + clk_in1 : in std_logic + ); +end component; + +-- COMP_TAG_END ------ End COMPONENT Declaration ------------ +-- The following code must appear in the VHDL architecture +-- body. Substitute your own instance name and net names. +------------- Begin Cut here for INSTANTIATION Template ----- INST_TAG +your_instance_name : clk_wiz_0 + port map ( + -- Clock out ports + clk_out1 => clk_out1, + clk_out2 => clk_out2, + clk_out3 => clk_out3, + clk_out4 => clk_out4, + -- Status and control signals + reset => reset, + locked => locked, + -- Clock in ports + clk_in1 => clk_in1 + ); +-- INST_TAG_END ------ End INSTANTIATION Template ------------ diff --git a/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_7s_mmcm.vh b/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_7s_mmcm.vh new file mode 100755 index 0000000..6c4981a --- /dev/null +++ b/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_7s_mmcm.vh @@ -0,0 +1,680 @@ +// (c) Copyright 2009-2010, 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// This file contains confidential and proprietary information +// of AMD and is protected under U.S. and international copyright +// and other intellectual property laws. +// +// DISCLAIMER +// This disclaimer is not a license and does not grant any +// rights to the materials distributed herewith. Except as +// otherwise provided in a valid license issued to you by +// AMD, and to the maximum extent permitted by applicable +// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +// WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES +// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +// (2) AMD shall not be liable (whether in contract or tort, +// including negligence, or under any other theory of +// liability) for any loss or damage of any kind or nature +// related to, arising under or in connection with these +// materials, including for any direct, or any indirect, +// special, incidental, or consequential loss or damage +// (including loss of data, profits, goodwill, or any type of +// loss or damage suffered as a result of any action brought +// by a third party) even if such damage or loss was +// reasonably foreseeable or AMD had been advised of the +// possibility of the same. +// +// CRITICAL APPLICATIONS +// AMD products are not designed or intended to be fail- +// safe, or for use in any application requiring fail-safe +// performance, such as life-support or safety devices or +// systems, Class III medical devices, nuclear facilities, +// applications related to the deployment of airbags, or any +// other applications that could lead to death, personal +// injury, or severe property or environmental damage +// (individually and collectively, "Critical +// Applications"). Customer assumes the sole risk and +// liability of any use of AMD products in Critical +// Applications, subject only to applicable laws and +// regulations governing limitations on product liability. +// +// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +// PART OF THIS FILE AT ALL TIMES. +//////////////////////////////////////////////////////////// +// +/////////////////////////////////////////////////////////////////////////////// + +// These are user functions that should not be modified. Changes to the defines +// or code within the functions may alter the accuracy of the calculations. + +// Define debug to provide extra messages durring elaboration +//`define DEBUG 1 + +// FRAC_PRECISION describes the width of the fractional portion of the fixed +// point numbers. These should not be modified, they are for development +// only +`define FRAC_PRECISION 10 +// FIXED_WIDTH describes the total size for fixed point calculations(int+frac). +// Warning: L.50 and below will not calculate properly with FIXED_WIDTHs +// greater than 32 +`define FIXED_WIDTH 32 + +// This function takes a fixed point number and rounds it to the nearest +// fractional precision bit. +function [`FIXED_WIDTH:1] round_frac + ( + // Input is (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point number + input [`FIXED_WIDTH:1] decimal, + + // This describes the precision of the fraction, for example a value + // of 1 would modify the fractional so that instead of being a .16 + // fractional, it would be a .1 (rounded to the nearest 0.5 in turn) + input [`FIXED_WIDTH:1] precision + ); + + begin + + `ifdef DEBUG + $display("round_frac - decimal: %h, precision: %h", decimal, precision); + `endif + // If the fractional precision bit is high then round up + if( decimal[(`FRAC_PRECISION-precision)] == 1'b1) begin + round_frac = decimal + (1'b1 << (`FRAC_PRECISION-precision)); + end else begin + round_frac = decimal; + end + `ifdef DEBUG + $display("round_frac: %h", round_frac); + `endif + end +endfunction + +// This function calculates high_time, low_time, w_edge, and no_count +// of a non-fractional counter based on the divide and duty cycle +// +// NOTE: high_time and low_time are returned as integers between 0 and 63 +// inclusive. 64 should equal 6'b000000 (in other words it is okay to +// ignore the overflow) +function [13:0] mmcm_pll_divider + ( + input [7:0] divide, // Max divide is 128 + input [31:0] duty_cycle // Duty cycle is multiplied by 100,000 + ); + + reg [`FIXED_WIDTH:1] duty_cycle_fix; + + // High/Low time is initially calculated with a wider integer to prevent a + // calculation error when it overflows to 64. + reg [6:0] high_time; + reg [6:0] low_time; + reg w_edge; + reg no_count; + + reg [`FIXED_WIDTH:1] temp; + + begin + // Duty Cycle must be between 0 and 1,000 + if(duty_cycle <=0 || duty_cycle >= 100000) begin +`ifndef SYNTHESIS + $display("ERROR: duty_cycle: %d is invalid", duty_cycle); + `endif + $finish; + end + + // Convert to FIXED_WIDTH-FRAC_PRECISION.FRAC_PRECISION fixed point + duty_cycle_fix = (duty_cycle << `FRAC_PRECISION) / 100_000; + + `ifdef DEBUG + $display("duty_cycle_fix: %h", duty_cycle_fix); + `endif + + // If the divide is 1 nothing needs to be set except the no_count bit. + // Other values are dummies + if(divide == 7'h01) begin + high_time = 7'h01; + w_edge = 1'b0; + low_time = 7'h01; + no_count = 1'b1; + end else begin + temp = round_frac(duty_cycle_fix*divide, 1); + + // comes from above round_frac + high_time = temp[`FRAC_PRECISION+7:`FRAC_PRECISION+1]; + // If the duty cycle * divide rounded is .5 or greater then this bit + // is set. + w_edge = temp[`FRAC_PRECISION]; // comes from round_frac + + // If the high time comes out to 0, it needs to be set to at least 1 + // and w_edge set to 0 + if(high_time == 7'h00) begin + high_time = 7'h01; + w_edge = 1'b0; + end + + if(high_time == divide) begin + high_time = divide - 1; + w_edge = 1'b1; + end + + // Calculate low_time based on the divide setting and set no_count to + // 0 as it is only used when divide is 1. + low_time = divide - high_time; + no_count = 1'b0; + end + + // Set the return value. + mmcm_pll_divider = {w_edge,no_count,high_time[5:0],low_time[5:0]}; + end +endfunction + +// This function calculates mx, delay_time, and phase_mux +// of a non-fractional counter based on the divide and phase +// +// NOTE: The only valid value for the MX bits is 2'b00 to ensure the coarse mux +// is used. +function [10:0] mmcm_pll_phase + ( + // divide must be an integer (use fractional if not) + // assumed that divide already checked to be valid + input [7:0] divide, // Max divide is 128 + + // Phase is given in degrees (-360,000 to 360,000) + input signed [31:0] phase + ); + + reg [`FIXED_WIDTH:1] phase_in_cycles; + reg [`FIXED_WIDTH:1] phase_fixed; + reg [1:0] mx; + reg [5:0] delay_time; + reg [2:0] phase_mux; + + reg [`FIXED_WIDTH:1] temp; + + begin +`ifdef DEBUG + $display("mmcm_pll_phase-divide:%d,phase:%d", + divide, phase); +`endif + + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + // If phase is less than 0, convert it to a positive phase shift + // Convert to (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point + if(phase < 0) begin + phase_fixed = ( (phase + 360000) << `FRAC_PRECISION ) / 1000; + end else begin + phase_fixed = ( phase << `FRAC_PRECISION ) / 1000; + end + + // Put phase in terms of decimal number of vco clock cycles + phase_in_cycles = ( phase_fixed * divide ) / 360; + +`ifdef DEBUG + $display("phase_in_cycles: %h", phase_in_cycles); +`endif + + + temp = round_frac(phase_in_cycles, 3); + + // set mx to 2'b00 that the phase mux from the VCO is enabled + mx = 2'b00; + phase_mux = temp[`FRAC_PRECISION:`FRAC_PRECISION-2]; + delay_time = temp[`FRAC_PRECISION+6:`FRAC_PRECISION+1]; + + `ifdef DEBUG + $display("temp: %h", temp); + `endif + + // Setup the return value + mmcm_pll_phase={mx, phase_mux, delay_time}; + end +endfunction + +// This function takes the divide value and outputs the necessary lock values +function [39:0] mmcm_pll_lock_lookup + ( + input [6:0] divide // Max divide is 64 + ); + + reg [2559:0] lookup; + + begin + lookup = { + // This table is composed of: + // LockRefDly_LockFBDly_LockCnt_LockSatHigh_UnlockCnt + 40'b00110_00110_1111101000_1111101001_0000000001, + 40'b00110_00110_1111101000_1111101001_0000000001, + 40'b01000_01000_1111101000_1111101001_0000000001, + 40'b01011_01011_1111101000_1111101001_0000000001, + 40'b01110_01110_1111101000_1111101001_0000000001, + 40'b10001_10001_1111101000_1111101001_0000000001, + 40'b10011_10011_1111101000_1111101001_0000000001, + 40'b10110_10110_1111101000_1111101001_0000000001, + 40'b11001_11001_1111101000_1111101001_0000000001, + 40'b11100_11100_1111101000_1111101001_0000000001, + 40'b11111_11111_1110000100_1111101001_0000000001, + 40'b11111_11111_1100111001_1111101001_0000000001, + 40'b11111_11111_1011101110_1111101001_0000000001, + 40'b11111_11111_1010111100_1111101001_0000000001, + 40'b11111_11111_1010001010_1111101001_0000000001, + 40'b11111_11111_1001110001_1111101001_0000000001, + 40'b11111_11111_1000111111_1111101001_0000000001, + 40'b11111_11111_1000100110_1111101001_0000000001, + 40'b11111_11111_1000001101_1111101001_0000000001, + 40'b11111_11111_0111110100_1111101001_0000000001, + 40'b11111_11111_0111011011_1111101001_0000000001, + 40'b11111_11111_0111000010_1111101001_0000000001, + 40'b11111_11111_0110101001_1111101001_0000000001, + 40'b11111_11111_0110010000_1111101001_0000000001, + 40'b11111_11111_0110010000_1111101001_0000000001, + 40'b11111_11111_0101110111_1111101001_0000000001, + 40'b11111_11111_0101011110_1111101001_0000000001, + 40'b11111_11111_0101011110_1111101001_0000000001, + 40'b11111_11111_0101000101_1111101001_0000000001, + 40'b11111_11111_0101000101_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001 + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + mmcm_pll_lock_lookup = lookup[ ((64-divide)*40) +: 40]; + `ifdef DEBUG + $display("lock_lookup: %b", mmcm_pll_lock_lookup); + `endif + end +endfunction + +// This function takes the divide value and the bandwidth setting of the MMCM +// and outputs the digital filter settings necessary. +function [9:0] mmcm_pll_filter_lookup + ( + input [6:0] divide, // Max divide is 64 + input [8*9:0] BANDWIDTH + ); + + reg [639:0] lookup_low; + reg [639:0] lookup_high; + + reg [9:0] lookup_entry; + + begin + lookup_low = { + // CP_RES_LFHF + 10'b0010_1111_00, + 10'b0010_1111_00, + 10'b0010_1111_00, + 10'b0010_1111_00, + 10'b0010_0111_00, + 10'b0010_1011_00, + 10'b0010_1101_00, + 10'b0010_0011_00, + 10'b0010_0101_00, + 10'b0010_0101_00, + 10'b0010_1001_00, + 10'b0010_1110_00, + 10'b0010_1110_00, + 10'b0010_1110_00, + 10'b0010_1110_00, + 10'b0010_0001_00, + 10'b0010_0001_00, + 10'b0010_0001_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_1010_00, + 10'b0010_1010_00, + 10'b0010_1010_00, + 10'b0010_1010_00, + 10'b0010_1010_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00 + }; + + lookup_high = { + // CP_RES_LFHF + 10'b0010_1111_00, + 10'b0100_1111_00, + 10'b0101_1011_00, + 10'b0111_0111_00, + 10'b1101_0111_00, + 10'b1110_1011_00, + 10'b1110_1101_00, + 10'b1111_0011_00, + 10'b1110_0101_00, + 10'b1111_0101_00, + 10'b1111_1001_00, + 10'b1101_0001_00, + 10'b1111_1001_00, + 10'b1111_1001_00, + 10'b1111_1001_00, + 10'b1111_1001_00, + 10'b1111_0101_00, + 10'b1111_0101_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b0101_1100_00, + 10'b0101_1100_00, + 10'b0101_1100_00, + 10'b0101_1100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0111_0001_00, + 10'b0111_0001_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0110_0001_00, + 10'b0110_0001_00, + 10'b0101_0110_00, + 10'b0101_0110_00, + 10'b0101_0110_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0100_1010_00, + 10'b0011_1100_00, + 10'b0011_1100_00 + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + if(BANDWIDTH == "LOW") begin + // Low Bandwidth + mmcm_pll_filter_lookup = lookup_low[ ((64-divide)*10) +: 10]; + end else begin + // High or optimized bandwidth + mmcm_pll_filter_lookup = lookup_high[ ((64-divide)*10) +: 10]; + end + + `ifdef DEBUG + $display("filter_lookup: %b", mmcm_pll_filter_lookup); + `endif + end +endfunction + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +function [37:0] mmcm_pll_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle // Multiplied by 100,000 + ); + + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_pll_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + // w_edge[13], no_count[12], high_time[11:6], low_time[5:0] + div_calc = mmcm_pll_divider(divide, duty_cycle); + // mx[10:9], pm[8:6], dt[5:0] + phase_calc = mmcm_pll_phase(divide, phase); + + // Return value is the upper and lower address of counter + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + `ifdef DEBUG + $display("div:%d dc:%d phase:%d ht:%d lt:%d ed:%d nc:%d mx:%d dt:%d pm:%d", + divide, duty_cycle, phase, div_calc[11:6], div_calc[5:0], + div_calc[13], div_calc[12], + phase_calc[16:15], phase_calc[5:0], phase_calc[14:12]); + `endif + + mmcm_pll_count_calc = + { + // Upper Address + 6'h00, phase_calc[10:9], div_calc[13:12], phase_calc[5:0], + // Lower Address + phase_calc[8:6], 1'b0, div_calc[11:0] + }; + end +endfunction + + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +// for fractional multiply/divide functions. +// +// +function [37:0] mmcm_frac_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle, // Multiplied by 1,000 + input [9:0] frac // Multiplied by 1000 + ); + + //Required for fractional divide calculations + reg [7:0] lt_frac; + reg [7:0] ht_frac; + + reg /*[7:0]*/ wf_fall_frac; + reg /*[7:0]*/ wf_rise_frac; + + reg [31:0] a; + reg [7:0] pm_rise_frac_filtered ; + reg [7:0] pm_fall_frac_filtered ; + reg [7:0] clkout0_divide_int; + reg [2:0] clkout0_divide_frac; + reg [7:0] even_part_high; + reg [7:0] even_part_low; + + reg [7:0] odd; + reg [7:0] odd_and_frac; + + reg [7:0] pm_fall; + reg [7:0] pm_rise; + reg [7:0] dt; + reg [7:0] dt_int; + reg [63:0] dt_calc; + + reg [7:0] pm_rise_frac; + reg [7:0] pm_fall_frac; + + reg [31:0] a_per_in_octets; + reg [31:0] a_phase_in_cycles; + + parameter precision = 0.125; + + reg [31:0] phase_fixed; // changed to 31:0 from 32:1 jt 5/2/11 + reg [31: 0] phase_pos; + reg [31: 0] phase_vco; + reg [31:0] temp;// changed to 31:0 from 32:1 jt 5/2/11 + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_frac_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + //convert phase to fixed + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + + // Return value is + // Transfer data + // RESERVED [37:36] + // FRAC_TIME [35:33] + // FRAC_WF_FALL [32] + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + + + clkout0_divide_frac = frac / 125; + clkout0_divide_int = divide; + + even_part_high = clkout0_divide_int >> 1;//$rtoi(clkout0_divide_int / 2); + even_part_low = even_part_high; + + odd = clkout0_divide_int - even_part_high - even_part_low; + odd_and_frac = (8*odd) + clkout0_divide_frac; + + lt_frac = even_part_high - (odd_and_frac <= 9);//IF(odd_and_frac>9,even_part_high, even_part_high - 1) + ht_frac = even_part_low - (odd_and_frac <= 8);//IF(odd_and_frac>8,even_part_low, even_part_low- 1) + + pm_fall = {odd[6:0],2'b00} + {6'h00, clkout0_divide_frac[2:1]}; // using >> instead of clkout0_divide_frac / 2 + pm_rise = 0; //0 + + wf_fall_frac = ((odd_and_frac >=2) && (odd_and_frac <=9)) || ((clkout0_divide_frac == 1) && (clkout0_divide_int == 2));//CRS610807 + wf_rise_frac = (odd_and_frac >=1) && (odd_and_frac <=8);//IF(odd_and_frac>=1,IF(odd_and_frac <= 8,1,0),0) + + + + //Calculate phase in fractional cycles + a_per_in_octets = (8 * divide) + (frac / 125) ; + a_phase_in_cycles = (phase+10) * a_per_in_octets / 360000 ;//Adding 1 due to rounding errors + pm_rise_frac = (a_phase_in_cycles[7:0] ==8'h00)?8'h00:a_phase_in_cycles[7:0] - {a_phase_in_cycles[7:3],3'b000}; + + dt_calc = ((phase+10) * a_per_in_octets / 8 )/360000 ;//TRUNC(phase* divide / 360); //or_simply (a_per_in_octets / 8) + dt = dt_calc[7:0]; + + pm_rise_frac_filtered = (pm_rise_frac >=8) ? (pm_rise_frac ) - 8: pm_rise_frac ; //((phase_fixed * (divide + frac / 1000)) / 360) - {pm_rise_frac[7:3],3'b000};//$rtoi(clkout0_phase * clkout0_divide / 45);//a; + + dt_int = dt + (& pm_rise_frac[7:4]); //IF(pm_rise_overwriting>7,dt+1,dt) + pm_fall_frac = pm_fall + pm_rise_frac; + pm_fall_frac_filtered = pm_fall + pm_rise_frac - {pm_fall_frac[7:3], 3'b000}; + + div_calc = mmcm_pll_divider(divide, duty_cycle); //Use to determine edge[7], no count[6] + phase_calc = mmcm_pll_phase(divide, phase);// returns{mx[1:0], phase_mux[2:0], delay_time[5:0]} + + mmcm_frac_count_calc[37:0] = + { 2'b00, pm_fall_frac_filtered[2:0], wf_fall_frac, + 1'b0, clkout0_divide_frac[2:0], 1'b1, wf_rise_frac, phase_calc[10:9], div_calc[13:12], dt[5:0], + pm_rise_frac_filtered[2], pm_rise_frac_filtered[1], pm_rise_frac_filtered[0], 1'b0, ht_frac[5:0], lt_frac[5:0] + } ; + + `ifdef DEBUG + $display("-%d.%d p%d>> :DADDR_9_15 frac30to28.frac_en.wf_r_frac.dt:%b%d%d_%b:DADDR_7_13 pm_f_frac_filtered_29to27.wf_f_frac_26:%b%d:DADDR_8_14.pm_r_frac_filt_15to13.ht_frac.lt_frac:%b%b%b:", divide, frac, phase, clkout0_divide_frac, 1, wf_rise_frac, dt, pm_fall_frac_filtered, wf_fall_frac, pm_rise_frac_filtered, ht_frac, lt_frac); + `endif + + end +endfunction + diff --git a/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_7s_pll.vh b/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_7s_pll.vh new file mode 100755 index 0000000..b662a3e --- /dev/null +++ b/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_7s_pll.vh @@ -0,0 +1,542 @@ +// (c) Copyright 2009-2010, 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// This file contains confidential and proprietary information +// of AMD and is protected under U.S. and international copyright +// and other intellectual property laws. +// +// DISCLAIMER +// This disclaimer is not a license and does not grant any +// rights to the materials distributed herewith. Except as +// otherwise provided in a valid license issued to you by +// AMD, and to the maximum extent permitted by applicable +// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +// WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES +// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +// (2) AMD shall not be liable (whether in contract or tort, +// including negligence, or under any other theory of +// liability) for any loss or damage of any kind or nature +// related to, arising under or in connection with these +// materials, including for any direct, or any indirect, +// special, incidental, or consequential loss or damage +// (including loss of data, profits, goodwill, or any type of +// loss or damage suffered as a result of any action brought +// by a third party) even if such damage or loss was +// reasonably foreseeable or AMD had been advised of the +// possibility of the same. +// +// CRITICAL APPLICATIONS +// AMD products are not designed or intended to be fail- +// safe, or for use in any application requiring fail-safe +// performance, such as life-support or safety devices or +// systems, Class III medical devices, nuclear facilities, +// applications related to the deployment of airbags, or any +// other applications that could lead to death, personal +// injury, or severe property or environmental damage +// (individually and collectively, "Critical +// Applications"). Customer assumes the sole risk and +// liability of any use of AMD products in Critical +// Applications, subject only to applicable laws and +// regulations governing limitations on product liability. +// +// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +// PART OF THIS FILE AT ALL TIMES. +//////////////////////////////////////////////////////////// +// +/////////////////////////////////////////////////////////////////////////////// + +// These are user functions that should not be modified. Changes to the defines +// or code within the functions may alter the accuracy of the calculations. + +// Define debug to provide extra messages durring elaboration +//`define DEBUG 1 + +// FRAC_PRECISION describes the width of the fractional portion of the fixed +// point numbers. These should not be modified, they are for development +// only +`define FRAC_PRECISION 10 +// FIXED_WIDTH describes the total size for fixed point calculations(int+frac). +// Warning: L.50 and below will not calculate properly with FIXED_WIDTHs +// greater than 32 +`define FIXED_WIDTH 32 + +// This function takes a fixed point number and rounds it to the nearest +// fractional precision bit. +function [`FIXED_WIDTH:1] round_frac + ( + // Input is (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point number + input [`FIXED_WIDTH:1] decimal, + + // This describes the precision of the fraction, for example a value + // of 1 would modify the fractional so that instead of being a .16 + // fractional, it would be a .1 (rounded to the nearest 0.5 in turn) + input [`FIXED_WIDTH:1] precision + ); + + begin + +`ifdef DEBUG + $display("round_frac - decimal: %h, precision: %h", decimal, precision); +`endif + // If the fractional precision bit is high then round up + if( decimal[(`FRAC_PRECISION-precision)] == 1'b1) begin + round_frac = decimal + (1'b1 << (`FRAC_PRECISION-precision)); + end else begin + round_frac = decimal; + end +`ifdef DEBUG + $display("round_frac: %h", round_frac); +`endif + end +endfunction + +// This function calculates high_time, low_time, w_edge, and no_count +// of a non-fractional counter based on the divide and duty cycle +// +// NOTE: high_time and low_time are returned as integers between 0 and 63 +// inclusive. 64 should equal 6'b000000 (in other words it is okay to +// ignore the overflow) +function [13:0] mmcm_pll_divider + ( + input [7:0] divide, // Max divide is 128 + input [31:0] duty_cycle // Duty cycle is multiplied by 100,000 + ); + + reg [`FIXED_WIDTH:1] duty_cycle_fix; + + // High/Low time is initially calculated with a wider integer to prevent a + // calculation error when it overflows to 64. + reg [6:0] high_time; + reg [6:0] low_time; + reg w_edge; + reg no_count; + + reg [`FIXED_WIDTH:1] temp; + + begin + // Duty Cycle must be between 0 and 1,000 + if(duty_cycle <=0 || duty_cycle >= 100000) begin +`ifndef SYNTHESIS + $display("ERROR: duty_cycle: %d is invalid", duty_cycle); + `endif + $finish; + end + + // Convert to FIXED_WIDTH-FRAC_PRECISION.FRAC_PRECISION fixed point + duty_cycle_fix = (duty_cycle << `FRAC_PRECISION) / 100_000; + +`ifdef DEBUG + $display("duty_cycle_fix: %h", duty_cycle_fix); +`endif + + // If the divide is 1 nothing needs to be set except the no_count bit. + // Other values are dummies + if(divide == 7'h01) begin + high_time = 7'h01; + w_edge = 1'b0; + low_time = 7'h01; + no_count = 1'b1; + end else begin + temp = round_frac(duty_cycle_fix*divide, 1); + + // comes from above round_frac + high_time = temp[`FRAC_PRECISION+7:`FRAC_PRECISION+1]; + // If the duty cycle * divide rounded is .5 or greater then this bit + // is set. + w_edge = temp[`FRAC_PRECISION]; // comes from round_frac + + // If the high time comes out to 0, it needs to be set to at least 1 + // and w_edge set to 0 + if(high_time == 7'h00) begin + high_time = 7'h01; + w_edge = 1'b0; + end + + if(high_time == divide) begin + high_time = divide - 1; + w_edge = 1'b1; + end + + // Calculate low_time based on the divide setting and set no_count to + // 0 as it is only used when divide is 1. + low_time = divide - high_time; + no_count = 1'b0; + end + + // Set the return value. + mmcm_pll_divider = {w_edge,no_count,high_time[5:0],low_time[5:0]}; + end +endfunction + +// This function calculates mx, delay_time, and phase_mux +// of a non-fractional counter based on the divide and phase +// +// NOTE: The only valid value for the MX bits is 2'b00 to ensure the coarse mux +// is used. +function [10:0] mmcm_pll_phase + ( + // divide must be an integer (use fractional if not) + // assumed that divide already checked to be valid + input [7:0] divide, // Max divide is 128 + + // Phase is given in degrees (-360,000 to 360,000) + input signed [31:0] phase + ); + + reg [`FIXED_WIDTH:1] phase_in_cycles; + reg [`FIXED_WIDTH:1] phase_fixed; + reg [1:0] mx; + reg [5:0] delay_time; + reg [2:0] phase_mux; + + reg [`FIXED_WIDTH:1] temp; + + begin +`ifdef DEBUG + $display("mmcm_pll_phase-divide:%d,phase:%d", + divide, phase); +`endif + + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + // If phase is less than 0, convert it to a positive phase shift + // Convert to (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point + if(phase < 0) begin + phase_fixed = ( (phase + 360000) << `FRAC_PRECISION ) / 1000; + end else begin + phase_fixed = ( phase << `FRAC_PRECISION ) / 1000; + end + + // Put phase in terms of decimal number of vco clock cycles + phase_in_cycles = ( phase_fixed * divide ) / 360; + +`ifdef DEBUG + $display("phase_in_cycles: %h", phase_in_cycles); +`endif + + + temp = round_frac(phase_in_cycles, 3); + + // set mx to 2'b00 that the phase mux from the VCO is enabled + mx = 2'b00; + phase_mux = temp[`FRAC_PRECISION:`FRAC_PRECISION-2]; + delay_time = temp[`FRAC_PRECISION+6:`FRAC_PRECISION+1]; + +`ifdef DEBUG + $display("temp: %h", temp); +`endif + + // Setup the return value + mmcm_pll_phase={mx, phase_mux, delay_time}; + end +endfunction + +// This function takes the divide value and outputs the necessary lock values +function [39:0] mmcm_pll_lock_lookup + ( + input [6:0] divide // Max divide is 64 + ); + + reg [2559:0] lookup; + + begin + lookup = { + // This table is composed of: + // LockRefDly_LockFBDly_LockCnt_LockSatHigh_UnlockCnt + 40'b00110_00110_1111101000_1111101001_0000000001, + 40'b00110_00110_1111101000_1111101001_0000000001, + 40'b01000_01000_1111101000_1111101001_0000000001, + 40'b01011_01011_1111101000_1111101001_0000000001, + 40'b01110_01110_1111101000_1111101001_0000000001, + 40'b10001_10001_1111101000_1111101001_0000000001, + 40'b10011_10011_1111101000_1111101001_0000000001, + 40'b10110_10110_1111101000_1111101001_0000000001, + 40'b11001_11001_1111101000_1111101001_0000000001, + 40'b11100_11100_1111101000_1111101001_0000000001, + 40'b11111_11111_1110000100_1111101001_0000000001, + 40'b11111_11111_1100111001_1111101001_0000000001, + 40'b11111_11111_1011101110_1111101001_0000000001, + 40'b11111_11111_1010111100_1111101001_0000000001, + 40'b11111_11111_1010001010_1111101001_0000000001, + 40'b11111_11111_1001110001_1111101001_0000000001, + 40'b11111_11111_1000111111_1111101001_0000000001, + 40'b11111_11111_1000100110_1111101001_0000000001, + 40'b11111_11111_1000001101_1111101001_0000000001, + 40'b11111_11111_0111110100_1111101001_0000000001, + 40'b11111_11111_0111011011_1111101001_0000000001, + 40'b11111_11111_0111000010_1111101001_0000000001, + 40'b11111_11111_0110101001_1111101001_0000000001, + 40'b11111_11111_0110010000_1111101001_0000000001, + 40'b11111_11111_0110010000_1111101001_0000000001, + 40'b11111_11111_0101110111_1111101001_0000000001, + 40'b11111_11111_0101011110_1111101001_0000000001, + 40'b11111_11111_0101011110_1111101001_0000000001, + 40'b11111_11111_0101000101_1111101001_0000000001, + 40'b11111_11111_0101000101_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001 + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + mmcm_pll_lock_lookup = lookup[ ((64-divide)*40) +: 40]; + `ifdef DEBUG + $display("lock_lookup: %b", mmcm_pll_lock_lookup); + `endif + end +endfunction + +// This function takes the divide value and the bandwidth setting of the PLL +// and outputs the digital filter settings necessary. +function [9:0] mmcm_pll_filter_lookup + ( + input [6:0] divide, // Max divide is 64 + input [8*9:0] BANDWIDTH + ); + + reg [639:0] lookup_low; + reg [639:0] lookup_high; + + reg [9:0] lookup_entry; + + begin + lookup_low = { + // CP_RES_LFHF + 10'b0010_1111_00, + 10'b0010_1111_00, + 10'b0010_0111_00, + 10'b0010_1101_00, + 10'b0010_0101_00, + 10'b0010_0101_00, + 10'b0010_1001_00, + 10'b0010_1110_00, + 10'b0010_1110_00, + 10'b0010_0001_00, + 10'b0010_0001_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_1010_00, + 10'b0010_1010_00, + 10'b0010_1010_00, + 10'b0010_1010_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0011_1100_00, + 10'b0011_1100_00, + 10'b0011_1100_00, + 10'b0011_1100_00, + 10'b0011_1100_00, + 10'b0011_1100_00, + 10'b0011_1100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00 + }; + + lookup_high = { + // CP_RES_LFHF + 10'b0011_0111_00, + 10'b0011_0111_00, + 10'b0101_1111_00, + 10'b0111_1111_00, + 10'b0111_1011_00, + 10'b1101_0111_00, + 10'b1110_1011_00, + 10'b1110_1101_00, + 10'b1111_1101_00, + 10'b1111_0111_00, + 10'b1111_1011_00, + 10'b1111_1101_00, + 10'b1111_0011_00, + 10'b1110_0101_00, + 10'b1111_0101_00, + 10'b1111_0101_00, + 10'b1111_0101_00, + 10'b1111_0101_00, + 10'b0111_0110_00, + 10'b0111_0110_00, + 10'b0111_0110_00, + 10'b0111_0110_00, + 10'b0101_1100_00, + 10'b0101_1100_00, + 10'b0101_1100_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b0100_0010_00, + 10'b0100_0010_00, + 10'b0100_0010_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0011_0100_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00 + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + if(BANDWIDTH == "LOW") begin + // Low Bandwidth + mmcm_pll_filter_lookup = lookup_low[ ((64-divide)*10) +: 10]; + end else begin + // High or optimized bandwidth + mmcm_pll_filter_lookup = lookup_high[ ((64-divide)*10) +: 10]; + end + + `ifdef DEBUG + $display("filter_lookup: %b", mmcm_pll_filter_lookup); + `endif + end +endfunction + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +function [37:0] mmcm_pll_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle // Multiplied by 100,000 + ); + + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_pll_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); +`endif + + // w_edge[13], no_count[12], high_time[11:6], low_time[5:0] + div_calc = mmcm_pll_divider(divide, duty_cycle); + // mx[10:9], pm[8:6], dt[5:0] + phase_calc = mmcm_pll_phase(divide, phase); + + // Return value is the upper and lower address of counter + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + +`ifdef DEBUG + $display("div:%d dc:%d phase:%d ht:%d lt:%d ed:%d nc:%d mx:%d dt:%d pm:%d", + divide, duty_cycle, phase, div_calc[11:6], div_calc[5:0], + div_calc[13], div_calc[12], + phase_calc[16:15], phase_calc[5:0], phase_calc[14:12]); +`endif + + mmcm_pll_count_calc = + { + // Upper Address + 6'h00, phase_calc[10:9], div_calc[13:12], phase_calc[5:0], + // Lower Address + phase_calc[8:6], 1'b0, div_calc[11:0] + }; + end +endfunction diff --git a/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_us_mmcm.vh b/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_us_mmcm.vh new file mode 100755 index 0000000..154c81f --- /dev/null +++ b/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_us_mmcm.vh @@ -0,0 +1,680 @@ +// (c) Copyright 2009-2010, 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// This file contains confidential and proprietary information +// of AMD and is protected under U.S. and international copyright +// and other intellectual property laws. +// +// DISCLAIMER +// This disclaimer is not a license and does not grant any +// rights to the materials distributed herewith. Except as +// otherwise provided in a valid license issued to you by +// AMD, and to the maximum extent permitted by applicable +// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +// WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES +// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +// (2) AMD shall not be liable (whether in contract or tort, +// including negligence, or under any other theory of +// liability) for any loss or damage of any kind or nature +// related to, arising under or in connection with these +// materials, including for any direct, or any indirect, +// special, incidental, or consequential loss or damage +// (including loss of data, profits, goodwill, or any type of +// loss or damage suffered as a result of any action brought +// by a third party) even if such damage or loss was +// reasonably foreseeable or AMD had been advised of the +// possibility of the same. +// +// CRITICAL APPLICATIONS +// AMD products are not designed or intended to be fail- +// safe, or for use in any application requiring fail-safe +// performance, such as life-support or safety devices or +// systems, Class III medical devices, nuclear facilities, +// applications related to the deployment of airbags, or any +// other applications that could lead to death, personal +// injury, or severe property or environmental damage +// (individually and collectively, "Critical +// Applications"). Customer assumes the sole risk and +// liability of any use of AMD products in Critical +// Applications, subject only to applicable laws and +// regulations governing limitations on product liability. +// +// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +// PART OF THIS FILE AT ALL TIMES. +//////////////////////////////////////////////////////////// +// +/////////////////////////////////////////////////////////////////////////////// + +// These are user functions that should not be modified. Changes to the defines +// or code within the functions may alter the accuracy of the calculations. + +// Define debug to provide extra messages durring elaboration +//`define DEBUG 1 + +// FRAC_PRECISION describes the width of the fractional portion of the fixed +// point numbers. These should not be modified, they are for development +// only +`define FRAC_PRECISION 10 +// FIXED_WIDTH describes the total size for fixed point calculations(int+frac). +// Warning: L.50 and below will not calculate properly with FIXED_WIDTHs +// greater than 32 +`define FIXED_WIDTH 32 + +// This function takes a fixed point number and rounds it to the nearest +// fractional precision bit. +function [`FIXED_WIDTH:1] round_frac + ( + // Input is (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point number + input [`FIXED_WIDTH:1] decimal, + + // This describes the precision of the fraction, for example a value + // of 1 would modify the fractional so that instead of being a .16 + // fractional, it would be a .1 (rounded to the nearest 0.5 in turn) + input [`FIXED_WIDTH:1] precision + ); + + begin + + `ifdef DEBUG + $display("round_frac - decimal: %h, precision: %h", decimal, precision); + `endif + // If the fractional precision bit is high then round up + if( decimal[(`FRAC_PRECISION-precision)] == 1'b1) begin + round_frac = decimal + (1'b1 << (`FRAC_PRECISION-precision)); + end else begin + round_frac = decimal; + end + `ifdef DEBUG + $display("round_frac: %h", round_frac); + `endif + end +endfunction + +// This function calculates high_time, low_time, w_edge, and no_count +// of a non-fractional counter based on the divide and duty cycle +// +// NOTE: high_time and low_time are returned as integers between 0 and 63 +// inclusive. 64 should equal 6'b000000 (in other words it is okay to +// ignore the overflow) +function [13:0] mmcm_pll_divider + ( + input [7:0] divide, // Max divide is 128 + input [31:0] duty_cycle // Duty cycle is multiplied by 100,000 + ); + + reg [`FIXED_WIDTH:1] duty_cycle_fix; + + // High/Low time is initially calculated with a wider integer to prevent a + // calculation error when it overflows to 64. + reg [6:0] high_time; + reg [6:0] low_time; + reg w_edge; + reg no_count; + + reg [`FIXED_WIDTH:1] temp; + + begin + // Duty Cycle must be between 0 and 1,000 + if(duty_cycle <=0 || duty_cycle >= 100000) begin +`ifndef SYNTHESIS + $display("ERROR: duty_cycle: %d is invalid", duty_cycle); + `endif + $finish; + end + + // Convert to FIXED_WIDTH-FRAC_PRECISION.FRAC_PRECISION fixed point + duty_cycle_fix = (duty_cycle << `FRAC_PRECISION) / 100_000; + + `ifdef DEBUG + $display("duty_cycle_fix: %h", duty_cycle_fix); + `endif + + // If the divide is 1 nothing needs to be set except the no_count bit. + // Other values are dummies + if(divide == 7'h01) begin + high_time = 7'h01; + w_edge = 1'b0; + low_time = 7'h01; + no_count = 1'b1; + end else begin + temp = round_frac(duty_cycle_fix*divide, 1); + + // comes from above round_frac + high_time = temp[`FRAC_PRECISION+7:`FRAC_PRECISION+1]; + // If the duty cycle * divide rounded is .5 or greater then this bit + // is set. + w_edge = temp[`FRAC_PRECISION]; // comes from round_frac + + // If the high time comes out to 0, it needs to be set to at least 1 + // and w_edge set to 0 + if(high_time == 7'h00) begin + high_time = 7'h01; + w_edge = 1'b0; + end + + if(high_time == divide) begin + high_time = divide - 1; + w_edge = 1'b1; + end + + // Calculate low_time based on the divide setting and set no_count to + // 0 as it is only used when divide is 1. + low_time = divide - high_time; + no_count = 1'b0; + end + + // Set the return value. + mmcm_pll_divider = {w_edge,no_count,high_time[5:0],low_time[5:0]}; + end +endfunction + +// This function calculates mx, delay_time, and phase_mux +// of a non-fractional counter based on the divide and phase +// +// NOTE: The only valid value for the MX bits is 2'b00 to ensure the coarse mux +// is used. +function [10:0] mmcm_pll_phase + ( + // divide must be an integer (use fractional if not) + // assumed that divide already checked to be valid + input [7:0] divide, // Max divide is 128 + + // Phase is given in degrees (-360,000 to 360,000) + input signed [31:0] phase + ); + + reg [`FIXED_WIDTH:1] phase_in_cycles; + reg [`FIXED_WIDTH:1] phase_fixed; + reg [1:0] mx; + reg [5:0] delay_time; + reg [2:0] phase_mux; + + reg [`FIXED_WIDTH:1] temp; + + begin +`ifdef DEBUG + $display("mmcm_pll_phase-divide:%d,phase:%d", + divide, phase); +`endif + + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + // If phase is less than 0, convert it to a positive phase shift + // Convert to (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point + if(phase < 0) begin + phase_fixed = ( (phase + 360000) << `FRAC_PRECISION ) / 1000; + end else begin + phase_fixed = ( phase << `FRAC_PRECISION ) / 1000; + end + + // Put phase in terms of decimal number of vco clock cycles + phase_in_cycles = ( phase_fixed * divide ) / 360; + +`ifdef DEBUG + $display("phase_in_cycles: %h", phase_in_cycles); +`endif + + + temp = round_frac(phase_in_cycles, 3); + + // set mx to 2'b00 that the phase mux from the VCO is enabled + mx = 2'b00; + phase_mux = temp[`FRAC_PRECISION:`FRAC_PRECISION-2]; + delay_time = temp[`FRAC_PRECISION+6:`FRAC_PRECISION+1]; + + `ifdef DEBUG + $display("temp: %h", temp); + `endif + + // Setup the return value + mmcm_pll_phase={mx, phase_mux, delay_time}; + end +endfunction + +// This function takes the divide value and outputs the necessary lock values +function [39:0] mmcm_pll_lock_lookup + ( + input [6:0] divide // Max divide is 64 + ); + + reg [2559:0] lookup; + + begin + lookup = { + // This table is composed of: + // LockRefDly_LockFBDly_LockCnt_LockSatHigh_UnlockCnt + 40'b00110_00110_1111101000_1111101001_0000000001, + 40'b00110_00110_1111101000_1111101001_0000000001, + 40'b01000_01000_1111101000_1111101001_0000000001, + 40'b01011_01011_1111101000_1111101001_0000000001, + 40'b01110_01110_1111101000_1111101001_0000000001, + 40'b10001_10001_1111101000_1111101001_0000000001, + 40'b10011_10011_1111101000_1111101001_0000000001, + 40'b10110_10110_1111101000_1111101001_0000000001, + 40'b11001_11001_1111101000_1111101001_0000000001, + 40'b11100_11100_1111101000_1111101001_0000000001, + 40'b11111_11111_1110000100_1111101001_0000000001, + 40'b11111_11111_1100111001_1111101001_0000000001, + 40'b11111_11111_1011101110_1111101001_0000000001, + 40'b11111_11111_1010111100_1111101001_0000000001, + 40'b11111_11111_1010001010_1111101001_0000000001, + 40'b11111_11111_1001110001_1111101001_0000000001, + 40'b11111_11111_1000111111_1111101001_0000000001, + 40'b11111_11111_1000100110_1111101001_0000000001, + 40'b11111_11111_1000001101_1111101001_0000000001, + 40'b11111_11111_0111110100_1111101001_0000000001, + 40'b11111_11111_0111011011_1111101001_0000000001, + 40'b11111_11111_0111000010_1111101001_0000000001, + 40'b11111_11111_0110101001_1111101001_0000000001, + 40'b11111_11111_0110010000_1111101001_0000000001, + 40'b11111_11111_0110010000_1111101001_0000000001, + 40'b11111_11111_0101110111_1111101001_0000000001, + 40'b11111_11111_0101011110_1111101001_0000000001, + 40'b11111_11111_0101011110_1111101001_0000000001, + 40'b11111_11111_0101000101_1111101001_0000000001, + 40'b11111_11111_0101000101_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001 + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + mmcm_pll_lock_lookup = lookup[ ((64-divide)*40) +: 40]; + `ifdef DEBUG + $display("lock_lookup: %b", mmcm_pll_lock_lookup); + `endif + end +endfunction + +// This function takes the divide value and the bandwidth setting of the MMCM +// and outputs the digital filter settings necessary. +function [9:0] mmcm_pll_filter_lookup + ( + input [6:0] divide, // Max divide is 64 + input [8*9:0] BANDWIDTH + ); + + reg [639:0] lookup_low; + reg [639:0] lookup_high; + + reg [9:0] lookup_entry; + + begin + lookup_low = { + // CP_RES_LFHF + 10'b0010_1111_11, + 10'b0010_1111_11, + 10'b0010_1111_11, + 10'b0010_1111_11, + 10'b0010_1111_11, + 10'b0010_1111_11, + 10'b0010_0111_11, + 10'b0010_0111_11, + 10'b0010_0111_11, + 10'b0010_1101_11, + 10'b0010_1101_11, + 10'b0010_1101_11, + 10'b0010_0011_11, + 10'b0010_0101_11, + 10'b0010_0101_11, + 10'b0010_0101_11, + 10'b0010_1001_11, + 10'b0010_1001_11, + 10'b0010_1110_11, + 10'b0010_1110_11, + 10'b0010_1110_11, + 10'b0010_1110_11, + 10'b0010_1110_11, + 10'b0010_1110_11, + 10'b0010_0001_11, + 10'b0010_0001_11, + 10'b0010_0001_11, + 10'b0010_0001_11, + 10'b0010_0001_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_1010_11, + 10'b0010_1010_11, + 10'b0010_1010_11, + 10'b0010_1010_11, + 10'b0010_1010_11, + 10'b0010_1010_11, + 10'b0010_1010_11, + 10'b0010_1010_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11 + }; + + lookup_high = { + // CP_RES_LFHF + 10'b0010_1111_11, + 10'b0010_1111_11, + 10'b0010_1011_11, + 10'b0011_1111_11, + 10'b0100_1111_11, + 10'b0100_1111_11, + 10'b0101_1111_11, + 10'b0110_1111_11, + 10'b0111_1111_11, + 10'b0111_1111_11, + 10'b1100_1111_11, + 10'b1101_1111_11, + 10'b1110_1111_11, + 10'b1111_1111_11, + 10'b1111_1111_11, + 10'b1110_0111_11, + 10'b1110_1011_11, + 10'b1111_0111_11, + 10'b1111_1011_11, + 10'b1111_1011_11, + 10'b1110_1101_11, + 10'b1111_1101_11, + 10'b1111_1101_11, + 10'b1111_0011_11, + 10'b1111_0011_11, + 10'b1111_0011_11, + 10'b1110_0101_11, + 10'b1110_0101_11, + 10'b1110_0101_11, + 10'b1111_0101_11, + 10'b1111_0101_11, + 10'b1111_0101_11, + 10'b1111_1001_11, + 10'b1111_1001_11, + 10'b1111_1001_11, + 10'b1111_1001_11, + 10'b1111_1001_11, + 10'b1110_1110_11, + 10'b1110_1110_11, + 10'b1110_1110_11, + 10'b1110_1110_11, + 10'b1111_1110_11, + 10'b1111_1110_11, + 10'b1111_1110_11, + 10'b1111_1110_11, + 10'b1111_1110_11, + 10'b1111_1110_11, + 10'b1111_1110_11, + 10'b1110_0001_11, + 10'b1110_0001_11, + 10'b1110_0001_11, + 10'b1110_0001_11, + 10'b1110_0001_11, + 10'b1100_0110_11, + 10'b1100_0110_11, + 10'b1100_0110_11, + 10'b1100_0110_11, + 10'b1100_0110_11, + 10'b1100_0110_11, + 10'b1100_0110_11, + 10'b1100_1010_11, + 10'b1100_1010_11, + 10'b1100_1010_11, + 10'b1100_1010_11 + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + if(BANDWIDTH == "LOW") begin + // Low Bandwidth + mmcm_pll_filter_lookup = lookup_low[ ((64-divide)*10) +: 10]; + end else begin + // High or optimized bandwidth + mmcm_pll_filter_lookup = lookup_high[ ((64-divide)*10) +: 10]; + end + + `ifdef DEBUG + $display("filter_lookup: %b", mmcm_pll_filter_lookup); + `endif + end +endfunction + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +function [37:0] mmcm_pll_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle // Multiplied by 100,000 + ); + + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_pll_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + // w_edge[13], no_count[12], high_time[11:6], low_time[5:0] + div_calc = mmcm_pll_divider(divide, duty_cycle); + // mx[10:9], pm[8:6], dt[5:0] + phase_calc = mmcm_pll_phase(divide, phase); + + // Return value is the upper and lower address of counter + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + `ifdef DEBUG + $display("div:%d dc:%d phase:%d ht:%d lt:%d ed:%d nc:%d mx:%d dt:%d pm:%d", + divide, duty_cycle, phase, div_calc[11:6], div_calc[5:0], + div_calc[13], div_calc[12], + phase_calc[16:15], phase_calc[5:0], phase_calc[14:12]); + `endif + + mmcm_pll_count_calc = + { + // Upper Address + 6'h00, phase_calc[10:9], div_calc[13:12], phase_calc[5:0], + // Lower Address + phase_calc[8:6], 1'b0, div_calc[11:0] + }; + end +endfunction + + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +// for fractional multiply/divide functions. +// +// +function [37:0] mmcm_frac_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle, // Multiplied by 1,000 + input [9:0] frac // Multiplied by 1000 + ); + + //Required for fractional divide calculations + reg [7:0] lt_frac; + reg [7:0] ht_frac; + + reg /*[7:0]*/ wf_fall_frac; + reg /*[7:0]*/ wf_rise_frac; + + reg [31:0] a; + reg [7:0] pm_rise_frac_filtered ; + reg [7:0] pm_fall_frac_filtered ; + reg [7:0] clkout0_divide_int; + reg [2:0] clkout0_divide_frac; + reg [7:0] even_part_high; + reg [7:0] even_part_low; + + reg [7:0] odd; + reg [7:0] odd_and_frac; + + reg [7:0] pm_fall; + reg [7:0] pm_rise; + reg [7:0] dt; + reg [7:0] dt_int; + reg [63:0] dt_calc; + + reg [7:0] pm_rise_frac; + reg [7:0] pm_fall_frac; + + reg [31:0] a_per_in_octets; + reg [31:0] a_phase_in_cycles; + + parameter precision = 0.125; + + reg [31:0] phase_fixed; // changed to 31:0 from 32:1 jt 5/2/11 + reg [31: 0] phase_pos; + reg [31: 0] phase_vco; + reg [31:0] temp;// changed to 31:0 from 32:1 jt 5/2/11 + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_frac_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + //convert phase to fixed + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + + // Return value is + // Transfer data + // RESERVED [37:36] + // FRAC_TIME [35:33] + // FRAC_WF_FALL [32] + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + + + clkout0_divide_frac = frac / 125; + clkout0_divide_int = divide; + + even_part_high = clkout0_divide_int >> 1;//$rtoi(clkout0_divide_int / 2); + even_part_low = even_part_high; + + odd = clkout0_divide_int - even_part_high - even_part_low; + odd_and_frac = (8*odd) + clkout0_divide_frac; + + lt_frac = even_part_high - (odd_and_frac <= 9);//IF(odd_and_frac>9,even_part_high, even_part_high - 1) + ht_frac = even_part_low - (odd_and_frac <= 8);//IF(odd_and_frac>8,even_part_low, even_part_low- 1) + + pm_fall = {odd[6:0],2'b00} + {6'h00, clkout0_divide_frac[2:1]}; // using >> instead of clkout0_divide_frac / 2 + pm_rise = 0; //0 + + wf_fall_frac = ((odd_and_frac >=2) && (odd_and_frac <=9)) || ((clkout0_divide_frac == 1) && (clkout0_divide_int == 2));//CRS610807 + wf_rise_frac = (odd_and_frac >=1) && (odd_and_frac <=8);//IF(odd_and_frac>=1,IF(odd_and_frac <= 8,1,0),0) + + + + //Calculate phase in fractional cycles + a_per_in_octets = (8 * divide) + (frac / 125) ; + a_phase_in_cycles = (phase+10) * a_per_in_octets / 360000 ;//Adding 1 due to rounding errors + pm_rise_frac = (a_phase_in_cycles[7:0] ==8'h00)?8'h00:a_phase_in_cycles[7:0] - {a_phase_in_cycles[7:3],3'b000}; + + dt_calc = ((phase+10) * a_per_in_octets / 8 )/360000 ;//TRUNC(phase* divide / 360); //or_simply (a_per_in_octets / 8) + dt = dt_calc[7:0]; + + pm_rise_frac_filtered = (pm_rise_frac >=8) ? (pm_rise_frac ) - 8: pm_rise_frac ; //((phase_fixed * (divide + frac / 1000)) / 360) - {pm_rise_frac[7:3],3'b000};//$rtoi(clkout0_phase * clkout0_divide / 45);//a; + + dt_int = dt + (& pm_rise_frac[7:4]); //IF(pm_rise_overwriting>7,dt+1,dt) + pm_fall_frac = pm_fall + pm_rise_frac; + pm_fall_frac_filtered = pm_fall + pm_rise_frac - {pm_fall_frac[7:3], 3'b000}; + + div_calc = mmcm_pll_divider(divide, duty_cycle); //Use to determine edge[7], no count[6] + phase_calc = mmcm_pll_phase(divide, phase);// returns{mx[1:0], phase_mux[2:0], delay_time[5:0]} + + mmcm_frac_count_calc[37:0] = + { 2'b00, pm_fall_frac_filtered[2:0], wf_fall_frac, + 1'b0, clkout0_divide_frac[2:0], 1'b1, wf_rise_frac, phase_calc[10:9], div_calc[13:12], dt[5:0], + pm_rise_frac_filtered[2], pm_rise_frac_filtered[1], pm_rise_frac_filtered[0], 1'b0, ht_frac[5:0], lt_frac[5:0] + } ; + + `ifdef DEBUG + $display("-%d.%d p%d>> :DADDR_9_15 frac30to28.frac_en.wf_r_frac.dt:%b%d%d_%b:DADDR_7_13 pm_f_frac_filtered_29to27.wf_f_frac_26:%b%d:DADDR_8_14.pm_r_frac_filt_15to13.ht_frac.lt_frac:%b%b%b:", divide, frac, phase, clkout0_divide_frac, 1, wf_rise_frac, dt, pm_fall_frac_filtered, wf_fall_frac, pm_rise_frac_filtered, ht_frac, lt_frac); + `endif + + end +endfunction + diff --git a/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_us_pll.vh b/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_us_pll.vh new file mode 100755 index 0000000..ff369d1 --- /dev/null +++ b/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_us_pll.vh @@ -0,0 +1,555 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Company: AMD +// Engineer: Jim Tatsukawa +// Date: 6/15/2015 +// Design Name: PLLE3 DRP +// Module Name: plle3_drp_func.h +// Version: 1.10 +// Target Devices: UltraScale Architecture +// Tool versions: 2015.1 +// Description: This header provides the functions necessary to +// calculate the DRP register values for the V6 PLL. +// +// Revision Notes: 8/11 - PLLE3 updated for PLLE3 file 4564419 +// Revision Notes: 6/15 - pll_filter_lookup fixed for max M of 19 +// PM_Rise bits have been removed for PLLE3 +// +// (c) Copyright 2009-2010, 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// This file contains confidential and proprietary information +// of AMD and is protected under U.S. and international copyright +// and other intellectual property laws. +// +// DISCLAIMER +// This disclaimer is not a license and does not grant any +// rights to the materials distributed herewith. Except as +// otherwise provided in a valid license issued to you by +// AMD, and to the maximum extent permitted by applicable +// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +// WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES +// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +// (2) AMD shall not be liable (whether in contract or tort, +// including negligence, or under any other theory of +// liability) for any loss or damage of any kind or nature +// related to, arising under or in connection with these +// materials, including for any direct, or any indirect, +// special, incidental, or consequential loss or damage +// (including loss of data, profits, goodwill, or any type of +// loss or damage suffered as a result of any action brought +// by a third party) even if such damage or loss was +// reasonably foreseeable or AMD had been advised of the +// possibility of the same. +// +// CRITICAL APPLICATIONS +// AMD products are not designed or intended to be fail- +// safe, or for use in any application requiring fail-safe +// performance, such as life-support or safety devices or +// systems, Class III medical devices, nuclear facilities, +// applications related to the deployment of airbags, or any +// other applications that could lead to death, personal +// injury, or severe property or environmental damage +// (individually and collectively, "Critical +// Applications"). Customer assumes the sole risk and +// liability of any use of AMD products in Critical +// Applications, subject only to applicable laws and +// regulations governing limitations on product liability. +// +// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +// PART OF THIS FILE AT ALL TIMES. +//////////////////////////////////////////////////////////// +// +/////////////////////////////////////////////////////////////////////////////// + +// These are user functions that should not be modified. Changes to the defines +// or code within the functions may alter the accuracy of the calculations. + +// Define debug to provide extra messages durring elaboration +//`define DEBUG 1 + +// FRAC_PRECISION describes the width of the fractional portion of the fixed +// point numbers. These should not be modified, they are for development +// only +`define FRAC_PRECISION 10 +// FIXED_WIDTH describes the total size for fixed point calculations(int+frac). +// Warning: L.50 and below will not calculate properly with FIXED_WIDTHs +// greater than 32 +`define FIXED_WIDTH 32 + +// This function takes a fixed point number and rounds it to the nearest +// fractional precision bit. +function [`FIXED_WIDTH:1] round_frac + ( + // Input is (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point number + input [`FIXED_WIDTH:1] decimal, + + // This describes the precision of the fraction, for example a value + // of 1 would modify the fractional so that instead of being a .16 + // fractional, it would be a .1 (rounded to the nearest 0.5 in turn) + input [`FIXED_WIDTH:1] precision + ); + + begin + + `ifdef DEBUG + $display("round_frac - decimal: %h, precision: %h", decimal, precision); + `endif + // If the fractional precision bit is high then round up + if( decimal[(`FRAC_PRECISION-precision)] == 1'b1) begin + round_frac = decimal + (1'b1 << (`FRAC_PRECISION-precision)); + end else begin + round_frac = decimal; + end + `ifdef DEBUG + $display("round_frac: %h", round_frac); + `endif + end +endfunction + +// This function calculates high_time, low_time, w_edge, and no_count +// of a non-fractional counter based on the divide and duty cycle +// +// NOTE: high_time and low_time are returned as integers between 0 and 63 +// inclusive. 64 should equal 6'b000000 (in other words it is okay to +// ignore the overflow) +function [13:0] mmcm_pll_divider + ( + input [7:0] divide, // Max divide is 128 + input [31:0] duty_cycle // Duty cycle is multiplied by 100,000 + ); + + reg [`FIXED_WIDTH:1] duty_cycle_fix; + + // High/Low time is initially calculated with a wider integer to prevent a + // calculation error when it overflows to 64. + reg [6:0] high_time; + reg [6:0] low_time; + reg w_edge; + reg no_count; + + reg [`FIXED_WIDTH:1] temp; + + begin + // Duty Cycle must be between 0 and 1,000 + if(duty_cycle <=0 || duty_cycle >= 100000) begin +`ifndef SYNTHESIS + $display("ERROR: duty_cycle: %d is invalid", duty_cycle); + `endif + $finish; + end + + // Convert to FIXED_WIDTH-FRAC_PRECISION.FRAC_PRECISION fixed point + duty_cycle_fix = (duty_cycle << `FRAC_PRECISION) / 100_000; + + `ifdef DEBUG + $display("duty_cycle_fix: %h", duty_cycle_fix); + `endif + + // If the divide is 1 nothing needs to be set except the no_count bit. + // Other values are dummies + if(divide == 7'h01) begin + high_time = 7'h01; + w_edge = 1'b0; + low_time = 7'h01; + no_count = 1'b1; + end else begin + temp = round_frac(duty_cycle_fix*divide, 1); + + // comes from above round_frac + high_time = temp[`FRAC_PRECISION+7:`FRAC_PRECISION+1]; + // If the duty cycle * divide rounded is .5 or greater then this bit + // is set. + w_edge = temp[`FRAC_PRECISION]; // comes from round_frac + + // If the high time comes out to 0, it needs to be set to at least 1 + // and w_edge set to 0 + if(high_time == 7'h00) begin + high_time = 7'h01; + w_edge = 1'b0; + end + + if(high_time == divide) begin + high_time = divide - 1; + w_edge = 1'b1; + end + + // Calculate low_time based on the divide setting and set no_count to + // 0 as it is only used when divide is 1. + low_time = divide - high_time; + no_count = 1'b0; + end + + // Set the return value. + mmcm_pll_divider = {w_edge,no_count,high_time[5:0],low_time[5:0]}; + end +endfunction + +// This function calculates mx, delay_time, and phase_mux +// of a non-fractional counter based on the divide and phase +// +// NOTE: The only valid value for the MX bits is 2'b00 to ensure the coarse mux +// is used. +function [10:0] mmcm_pll_phase + ( + // divide must be an integer (use fractional if not) + // assumed that divide already checked to be valid + input [7:0] divide, // Max divide is 128 + + // Phase is given in degrees (-360,000 to 360,000) + input signed [31:0] phase + ); + + reg [`FIXED_WIDTH:1] phase_in_cycles; + reg [`FIXED_WIDTH:1] phase_fixed; + reg [1:0] mx; + reg [5:0] delay_time; + reg [2:0] phase_mux; + + reg [`FIXED_WIDTH:1] temp; + + begin +`ifdef DEBUG + $display("mmcm_pll_phase-divide:%d,phase:%d", + divide, phase); +`endif + + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + // If phase is less than 0, convert it to a positive phase shift + // Convert to (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point + if(phase < 0) begin + phase_fixed = ( (phase + 360000) << `FRAC_PRECISION ) / 1000; + end else begin + phase_fixed = ( phase << `FRAC_PRECISION ) / 1000; + end + + // Put phase in terms of decimal number of vco clock cycles + phase_in_cycles = ( phase_fixed * divide ) / 360; + +`ifdef DEBUG + $display("phase_in_cycles: %h", phase_in_cycles); +`endif + + + temp = round_frac(phase_in_cycles, 3); + + // set mx to 2'b00 that the phase mux from the VCO is enabled + mx = 2'b00; + phase_mux = temp[`FRAC_PRECISION:`FRAC_PRECISION-2]; + delay_time = temp[`FRAC_PRECISION+6:`FRAC_PRECISION+1]; + + `ifdef DEBUG + $display("temp: %h", temp); + `endif + + // Setup the return value + mmcm_pll_phase={mx, phase_mux, delay_time}; + end +endfunction + +// This function takes the divide value and outputs the necessary lock values +function [39:0] mmcm_pll_lock_lookup + ( + input [6:0] divide // Max divide is 64 + ); + + reg [759:0] lookup; + + begin + lookup = { + // This table is composed of: + // LockRefDly_LockFBDly_LockCnt_LockSatHigh_UnlockCnt + 40'b00110_00110_1111101000_1111101001_0000000001, //1 + 40'b00110_00110_1111101000_1111101001_0000000001, //2 + 40'b01000_01000_1111101000_1111101001_0000000001, //3 + 40'b01011_01011_1111101000_1111101001_0000000001, //4 + 40'b01110_01110_1111101000_1111101001_0000000001, //5 + 40'b10001_10001_1111101000_1111101001_0000000001, //6 + 40'b10011_10011_1111101000_1111101001_0000000001, //7 + 40'b10110_10110_1111101000_1111101001_0000000001, //8 + 40'b11001_11001_1111101000_1111101001_0000000001, //9 + 40'b11100_11100_1111101000_1111101001_0000000001, //10 + 40'b11111_11111_1110000100_1111101001_0000000001, //11 + 40'b11111_11111_1100111001_1111101001_0000000001, //12 + 40'b11111_11111_1011101110_1111101001_0000000001, //13 + 40'b11111_11111_1010111100_1111101001_0000000001, //14 + 40'b11111_11111_1010001010_1111101001_0000000001, //15 + 40'b11111_11111_1001110001_1111101001_0000000001, //16 + 40'b11111_11111_1000111111_1111101001_0000000001, //17 + 40'b11111_11111_1000100110_1111101001_0000000001, //18 + 40'b11111_11111_1000001101_1111101001_0000000001 //19 + + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + mmcm_pll_lock_lookup = lookup[ ((19-divide)*40) +: 40]; + `ifdef DEBUG + $display("lock_lookup: %b", mmcm_pll_lock_lookup); + `endif + end +endfunction + +// This function takes the divide value and the bandwidth setting of the PLL +// and outputs the digital filter settings necessary. Removing bandwidth setting for PLLE3. +function [9:0] mmcm_pll_filter_lookup + ( + input [6:0] divide // Max divide is 19 + ); + + reg [639:0] lookup; + reg [9:0] lookup_entry; + + begin + + lookup = { + // CP_RES_LFHF + 10'b0010_1111_01, //1 + 10'b0010_0011_11, //2 + 10'b0011_0011_11, //3 + 10'b0010_0001_11, //4 + 10'b0010_0110_11, //5 + 10'b0010_1010_11, //6 + 10'b0010_1010_11, //7 + 10'b0011_0110_11, //8 + 10'b0010_1100_11, //9 + 10'b0010_1100_11, //10 + 10'b0010_1100_11, //11 + 10'b0010_0010_11, //12 + 10'b0011_1100_11, //13 + 10'b0011_1100_11, //14 + 10'b0011_1100_11, //15 + 10'b0011_1100_11, //16 + 10'b0011_0010_11, //17 + 10'b0011_0010_11, //18 + 10'b0011_0010_11 //19 + }; + + mmcm_pll_filter_lookup = lookup [ ((19-divide)*10) +: 10]; + + `ifdef DEBUG + $display("filter_lookup: %b", mmcm_pll_filter_lookup); + `endif + end +endfunction + +// This function set the CLKOUTPHY divide settings to match +// the desired CLKOUTPHY_MODE setting. To create VCO_X2, then +// the CLKOUTPHY will be set to 2'b00 since the VCO is internally +// doubled and 2'b00 will represent divide by 1. Similarly "VCO" // will need to divide the doubled clock VCO clock frequency by // 2 therefore 2'b01 will match a divide by 2.And VCO_HALF will // need to divide the doubled VCO by 4, therefore 2'b10 +function [9:0] mmcm_pll_clkoutphy_calc + ( + input [8*9:0] CLKOUTPHY_MODE + ); + + if(CLKOUTPHY_MODE == "VCO_X2") begin + mmcm_pll_clkoutphy_calc= 2'b00; + end else if(CLKOUTPHY_MODE == "VCO") begin + mmcm_pll_clkoutphy_calc= 2'b01; + end else if(CLKOUTPHY_MODE == "CLKIN") begin + mmcm_pll_clkoutphy_calc= 2'b11; + end else begin // Assume "VCO_HALF" + mmcm_pll_clkoutphy_calc= 2'b10; + end + +endfunction + + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +function [37:0] mmcm_pll_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle // Multiplied by 100,000 + ); + + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_pll_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + // w_edge[13], no_count[12], high_time[11:6], low_time[5:0] + div_calc = mmcm_pll_divider(divide, duty_cycle); + // mx[10:9], pm[8:6], dt[5:0] + phase_calc = mmcm_pll_phase(divide, phase); + + // Return value is the upper and lower address of counter + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + `ifdef DEBUG + $display("div:%d dc:%d phase:%d ht:%d lt:%d ed:%d nc:%d mx:%d dt:%d pm:%d", + divide, duty_cycle, phase, div_calc[11:6], div_calc[5:0], + div_calc[13], div_calc[12], + phase_calc[16:15], phase_calc[5:0], 3'b000);//Removed PM_Rise bits + `endif + + mmcm_pll_count_calc = + { + // Upper Address + 6'h00, phase_calc[10:9], div_calc[13:12], phase_calc[5:0], + // Lower Address + phase_calc[8:6], 1'b0, div_calc[11:0] + }; + end +endfunction + + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +// for fractional multiply/divide functions. +// +// +function [37:0] mmcm_pll_frac_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle, // Multiplied by 1,000 + input [9:0] frac // Multiplied by 1000 + ); + + //Required for fractional divide calculations + reg [7:0] lt_frac; + reg [7:0] ht_frac; + + reg /*[7:0]*/ wf_fall_frac; + reg /*[7:0]*/ wf_rise_frac; + + reg [31:0] a; + reg [7:0] pm_rise_frac_filtered ; + reg [7:0] pm_fall_frac_filtered ; + reg [7:0] clkout0_divide_int; + reg [2:0] clkout0_divide_frac; + reg [7:0] even_part_high; + reg [7:0] even_part_low; + + reg [7:0] odd; + reg [7:0] odd_and_frac; + + reg [7:0] pm_fall; + reg [7:0] pm_rise; + reg [7:0] dt; + reg [7:0] dt_int; + reg [63:0] dt_calc; + + reg [7:0] pm_rise_frac; + reg [7:0] pm_fall_frac; + + reg [31:0] a_per_in_octets; + reg [31:0] a_phase_in_cycles; + + parameter precision = 0.125; + + reg [31:0] phase_fixed; // changed to 31:0 from 32:1 jt 5/2/11 + reg [31: 0] phase_pos; + reg [31: 0] phase_vco; + reg [31:0] temp;// changed to 31:0 from 32:1 jt 5/2/11 + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_pll_frac_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + //convert phase to fixed + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + + // Return value is + // Transfer data + // RESERVED [37:36] + // FRAC_TIME [35:33] + // FRAC_WF_FALL [32] + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + + + clkout0_divide_frac = frac / 125; + clkout0_divide_int = divide; + + even_part_high = clkout0_divide_int >> 1;//$rtoi(clkout0_divide_int / 2); + even_part_low = even_part_high; + + odd = clkout0_divide_int - even_part_high - even_part_low; + odd_and_frac = (8*odd) + clkout0_divide_frac; + + lt_frac = even_part_high - (odd_and_frac <= 9);//IF(odd_and_frac>9,even_part_high, even_part_high - 1) + ht_frac = even_part_low - (odd_and_frac <= 8);//IF(odd_and_frac>8,even_part_low, even_part_low- 1) + + pm_fall = {odd[6:0],2'b00} + {6'h00, clkout0_divide_frac[2:1]}; // using >> instead of clkout0_divide_frac / 2 + pm_rise = 0; //0 + + wf_fall_frac = (odd_and_frac >=2) && (odd_and_frac <=9);//IF(odd_and_frac>=2,IF(odd_and_frac <= 9,1,0),0) + wf_rise_frac = (odd_and_frac >=1) && (odd_and_frac <=8);//IF(odd_and_frac>=1,IF(odd_and_frac <= 8,1,0),0) + + + + //Calculate phase in fractional cycles + a_per_in_octets = (8 * divide) + (frac / 125) ; + a_phase_in_cycles = (phase+10) * a_per_in_octets / 360000 ;//Adding 1 due to rounding errors + pm_rise_frac = (a_phase_in_cycles[7:0] ==8'h00)?8'h00:a_phase_in_cycles[7:0] - {a_phase_in_cycles[7:3],3'b000}; + + dt_calc = ((phase+10) * a_per_in_octets / 8 )/360000 ;//TRUNC(phase* divide / 360); //or_simply (a_per_in_octets / 8) + dt = dt_calc[7:0]; + + pm_rise_frac_filtered = (pm_rise_frac >=8) ? (pm_rise_frac ) - 8: pm_rise_frac ; //((phase_fixed * (divide + frac / 1000)) / 360) - {pm_rise_frac[7:3],3'b000};//$rtoi(clkout0_phase * clkout0_divide / 45);//a; + + dt_int = dt + (& pm_rise_frac[7:4]); //IF(pm_rise_overwriting>7,dt+1,dt) + pm_fall_frac = pm_fall + pm_rise_frac; + pm_fall_frac_filtered = pm_fall + pm_rise_frac - {pm_fall_frac[7:3], 3'b000}; + + div_calc = mmcm_pll_divider(divide, duty_cycle); //Use to determine edge[7], no count[6] + phase_calc = mmcm_pll_phase(divide, phase);// returns{mx[1:0], phase_mux[2:0], delay_time[5:0]} + + mmcm_pll_frac_count_calc[37:0] = + { 2'b00, pm_fall_frac_filtered[2:0], wf_fall_frac, + 1'b0, clkout0_divide_frac[2:0], 1'b1, wf_rise_frac, phase_calc[10:9], div_calc[13:12], dt[5:0], + 3'b000, 1'b0, ht_frac[5:0], lt_frac[5:0] //Removed PM_Rise bits +// pm_rise_frac_filtered[2], pm_rise_frac_filtered[1], pm_rise_frac_filtered[0], 1'b0, ht_frac[5:0], lt_frac[5:0] + } ; + + `ifdef DEBUG + $display("-%d.%d p%d>> :DADDR_9_15 frac30to28.frac_en.wf_r_frac.dt:%b%d%d_%b:DADDR_7_13 pm_f_frac_filtered_29to27.wf_f_frac_26:%b%d:DADDR_8_14.pm_r_frac_filt_15to13.ht_frac.lt_frac:%b%b%b:", divide, frac, phase, clkout0_divide_frac, 1, wf_rise_frac, dt, pm_fall_frac_filtered, wf_fall_frac, 3'b000, ht_frac, lt_frac); + `endif + + end +endfunction + + diff --git a/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_us_plus_mmcm.vh b/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_us_plus_mmcm.vh new file mode 100755 index 0000000..fd26211 --- /dev/null +++ b/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_us_plus_mmcm.vh @@ -0,0 +1,886 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Company: AMD +// Engineer: Jim Tatsukawa. Updated by Ralf Krueger +// Date: 7/30/2014 +// Design Name: MMCME4 DRP +// Module Name: mmcme4_drp_func.h +// Version: 1.31 +// Target Devices: UltraScale Plus Architecture +// Tool versions: 2017.1 +// Description: This header provides the functions necessary to +// calculate the DRP register values for UltraScal+ MMCM. +// +// Revision Notes: 3/22 - Updating lookup_low/lookup_high (CR) +// 4/13 - Fractional divide function in mmcm_frac_count_calc function +// 2/28/17 - Updated for Ultrascale Plus +// +// (c) Copyright 2009-2017, 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// This file contains confidential and proprietary information +// of AMD and is protected under U.S. and international copyright +// and other intellectual property laws. +// +// DISCLAIMER +// This disclaimer is not a license and does not grant any +// rights to the materials distributed herewith. Except as +// otherwise provided in a valid license issued to you by +// AMD, and to the maximum extent permitted by applicable +// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +// WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES +// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +// (2) AMD shall not be liable (whether in contract or tort, +// including negligence, or under any other theory of +// liability) for any loss or damage of any kind or nature +// related to, arising under or in connection with these +// materials, including for any direct, or any indirect, +// special, incidental, or consequential loss or damage +// (including loss of data, profits, goodwill, or any type of +// loss or damage suffered as a result of any action brought +// by a third party) even if such damage or loss was +// reasonably foreseeable or AMD had been advised of the +// possibility of the same. +// +// CRITICAL APPLICATIONS +// AMD products are not designed or intended to be fail- +// safe, or for use in any application requiring fail-safe +// performance, such as life-support or safety devices or +// systems, Class III medical devices, nuclear facilities, +// applications related to the deployment of airbags, or any +// other applications that could lead to death, personal +// injury, or severe property or environmental damage +// (individually and collectively, "Critical +// Applications"). Customer assumes the sole risk and +// liability of any use of AMD products in Critical +// Applications, subject only to applicable laws and +// regulations governing limitations on product liability. +// +// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +// PART OF THIS FILE AT ALL TIMES. +//////////////////////////////////////////////////////////// +// +/////////////////////////////////////////////////////////////////////////////// + +// These are user functions that should not be modified. Changes to the defines +// or code within the functions may alter the accuracy of the calculations. + +// Define debug to provide extra messages during elaboration +//`define DEBUG 1 + +// FRAC_PRECISION describes the width of the fractional portion of the fixed +// point numbers. These should not be modified, they are for development only +`define FRAC_PRECISION 10 +// FIXED_WIDTH describes the total size for fixed point calculations(int+frac). +// Warning: L.50 and below will not calculate properly with FIXED_WIDTHs +// greater than 32 +`define FIXED_WIDTH 32 + +// This function takes a fixed point number and rounds it to the nearest +// fractional precision bit. +function [`FIXED_WIDTH:1] round_frac + ( + // Input is (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point number + input [`FIXED_WIDTH:1] decimal, + + // This describes the precision of the fraction, for example a value + // of 1 would modify the fractional so that instead of being a .16 + // fractional, it would be a .1 (rounded to the nearest 0.5 in turn) + input [`FIXED_WIDTH:1] precision + ); + + begin + + `ifdef DEBUG + $display("round_frac - decimal: %h, precision: %h", decimal, precision); + `endif + // If the fractional precision bit is high then round up + if( decimal[(`FRAC_PRECISION-precision)] == 1'b1) begin + round_frac = decimal + (1'b1 << (`FRAC_PRECISION-precision)); + end else begin + round_frac = decimal; + end + `ifdef DEBUG + $display("round_frac: %h", round_frac); + `endif + end +endfunction + +// This function calculates high_time, low_time, w_edge, and no_count +// of a non-fractional counter based on the divide and duty cycle +// +// NOTE: high_time and low_time are returned as integers between 0 and 63 +// inclusive. 64 should equal 6'b000000 (in other words it is okay to +// ignore the overflow) +function [13:0] mmcm_pll_divider + ( + input [7:0] divide, // Max divide is 128 + input [31:0] duty_cycle // Duty cycle is multiplied by 100,000 + ); + + reg [`FIXED_WIDTH:1] duty_cycle_fix; + + // High/Low time is initially calculated with a wider integer to prevent a + // calculation error when it overflows to 64. + reg [6:0] high_time; + reg [6:0] low_time; + reg w_edge; + reg no_count; + + reg [`FIXED_WIDTH:1] temp; + + begin + // Duty Cycle must be between 0 and 1,000 + if(duty_cycle <=0 || duty_cycle >= 100000) begin +`ifndef SYNTHESIS + $display("ERROR: duty_cycle: %d is invalid", duty_cycle); + `endif + $finish; + end + + // Convert to FIXED_WIDTH-FRAC_PRECISION.FRAC_PRECISION fixed point + duty_cycle_fix = (duty_cycle << `FRAC_PRECISION) / 100_000; + + `ifdef DEBUG + $display("duty_cycle_fix: %h", duty_cycle_fix); + `endif + + // If the divide is 1 nothing needs to be set except the no_count bit. + // Other values are dummies + if(divide == 7'h01) begin + high_time = 7'h01; + w_edge = 1'b0; + low_time = 7'h01; + no_count = 1'b1; + end else begin + temp = round_frac(duty_cycle_fix*divide, 1); + + // comes from above round_frac + high_time = temp[`FRAC_PRECISION+7:`FRAC_PRECISION+1]; + // If the duty cycle * divide rounded is .5 or greater then this bit + // is set. + w_edge = temp[`FRAC_PRECISION]; // comes from round_frac + + // If the high time comes out to 0, it needs to be set to at least 1 + // and w_edge set to 0 + if(high_time == 7'h00) begin + high_time = 7'h01; + w_edge = 1'b0; + end + + if(high_time == divide) begin + high_time = divide - 1; + w_edge = 1'b1; + end + + // Calculate low_time based on the divide setting and set no_count to + // 0 as it is only used when divide is 1. + low_time = divide - high_time; + no_count = 1'b0; + end + + // Set the return value. + mmcm_pll_divider = {w_edge,no_count,high_time[5:0],low_time[5:0]}; + end +endfunction + +// This function calculates mx, delay_time, and phase_mux +// of a non-fractional counter based on the divide and phase +// +// NOTE: The only valid value for the MX bits is 2'b00 to ensure the coarse mux +// is used. +function [10:0] mmcm_pll_phase + ( + // divide must be an integer (use fractional if not) + // assumed that divide already checked to be valid + input [7:0] divide, // Max divide is 128 + + // Phase is given in degrees (-360,000 to 360,000) + input signed [31:0] phase + ); + + reg [`FIXED_WIDTH:1] phase_in_cycles; + reg [`FIXED_WIDTH:1] phase_fixed; + reg [1:0] mx; + reg [5:0] delay_time; + reg [2:0] phase_mux; + + reg [`FIXED_WIDTH:1] temp; + + begin +`ifdef DEBUG + $display("mmcm_phase-divide:%d,phase:%d", divide, phase); +`endif + + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + // If phase is less than 0, convert it to a positive phase shift + // Convert to (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point + if(phase < 0) begin + phase_fixed = ( (phase + 360000) << `FRAC_PRECISION ) / 1000; + end else begin + phase_fixed = ( phase << `FRAC_PRECISION ) / 1000; + end + + // Put phase in terms of decimal number of vco clock cycles + phase_in_cycles = ( phase_fixed * divide ) / 360; + +`ifdef DEBUG + $display("phase_in_cycles: %h", phase_in_cycles); +`endif + + temp = round_frac(phase_in_cycles, 3); + + // set mx to 2'b00 that the phase mux from the VCO is enabled + mx = 2'b00; + phase_mux = temp[`FRAC_PRECISION:`FRAC_PRECISION-2]; + delay_time = temp[`FRAC_PRECISION+6:`FRAC_PRECISION+1]; + + `ifdef DEBUG + $display("temp: %h", temp); + `endif + + // Setup the return value + mmcm_pll_phase={mx, phase_mux, delay_time}; + end +endfunction + +// This function takes the divide value and outputs the necessary lock values +function [39:0] mmcm_pll_lock_lookup + ( + input [7:0] divide // Max M divide is 128 in UltrascalePlus + ); + + reg [5119:0] lookup; + + begin + lookup = { + // This table is composed of: + // LockRefDly_LockFBDly_LockCnt_LockSatHigh_UnlockCnt + 40'b00110_00110_1111101000_1111101001_0000000001, // M=1 (not allowed) + 40'b00110_00110_1111101000_1111101001_0000000001, // M=2 + 40'b01000_01000_1111101000_1111101001_0000000001, // M=3 + 40'b01011_01011_1111101000_1111101001_0000000001, // M=4 + 40'b01110_01110_1111101000_1111101001_0000000001, // M=5 + 40'b10001_10001_1111101000_1111101001_0000000001, // M=6 + 40'b10011_10011_1111101000_1111101001_0000000001, // M=7 + 40'b10110_10110_1111101000_1111101001_0000000001, + 40'b11001_11001_1111101000_1111101001_0000000001, + 40'b11100_11100_1111101000_1111101001_0000000001, + 40'b11111_11111_1110000100_1111101001_0000000001, + 40'b11111_11111_1100111001_1111101001_0000000001, + 40'b11111_11111_1011101110_1111101001_0000000001, + 40'b11111_11111_1010111100_1111101001_0000000001, + 40'b11111_11111_1010001010_1111101001_0000000001, + 40'b11111_11111_1001110001_1111101001_0000000001, + 40'b11111_11111_1000111111_1111101001_0000000001, + 40'b11111_11111_1000100110_1111101001_0000000001, + 40'b11111_11111_1000001101_1111101001_0000000001, + 40'b11111_11111_0111110100_1111101001_0000000001, + 40'b11111_11111_0111011011_1111101001_0000000001, + 40'b11111_11111_0111000010_1111101001_0000000001, + 40'b11111_11111_0110101001_1111101001_0000000001, + 40'b11111_11111_0110010000_1111101001_0000000001, + 40'b11111_11111_0110010000_1111101001_0000000001, + 40'b11111_11111_0101110111_1111101001_0000000001, + 40'b11111_11111_0101011110_1111101001_0000000001, + 40'b11111_11111_0101011110_1111101001_0000000001, + 40'b11111_11111_0101000101_1111101001_0000000001, + 40'b11111_11111_0101000101_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, // M=127 + 40'b11111_11111_0011111010_1111101001_0000000001 // M=128 + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + mmcm_pll_lock_lookup = lookup[ ((128-divide)*40) +: 40]; + `ifdef DEBUG + $display("lock_lookup: %b", mmcm_pll_lock_lookup); + `endif + end +endfunction + +// This function takes the divide value and the bandwidth setting of the MMCM +// and outputs the digital filter settings necessary. +function [9:0] mmcm_pll_filter_lookup + ( + input [7:0] divide, // input [7:0] divide // Max M divide is 128 in UltraScalePlus + input [8*9:0] BANDWIDTH + ); + + reg [1279:0] lookup_low; + reg [1279:0] lookup_high; + + reg [9:0] lookup_entry; + + begin + lookup_low = { + // CP_RES_LFHF + 10'b0011_1111_11, // M=1 - not legal + 10'b0011_1111_11, // M=2 + 10'b0011_1101_11, // M=3 + 10'b0011_0101_11, // M=4 + 10'b0011_1001_11, // M=5 + 10'b0011_1110_11, // M=6 + 10'b0011_1110_11, // M=7 + 10'b0011_0001_11, + 10'b0011_0110_11, + 10'b0011_0110_11, + 10'b0011_0110_11, + 10'b0011_1010_11, + 10'b0011_1010_11, + 10'b0011_1010_11, + 10'b0100_0110_11, + 10'b0011_1100_11, + 10'b1110_0110_11, + 10'b1111_0110_11, + 10'b1110_1010_11, + 10'b1110_1010_11, + 10'b1111_1010_11, + 10'b1111_1010_11, + 10'b1111_1010_11, + 10'b1111_1010_11, + 10'b1111_1010_11, + 10'b1101_1100_11, + 10'b1101_1100_11, + 10'b1101_1100_11, + 10'b1110_1100_11, + 10'b1110_1100_11, + 10'b1110_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1110_0010_11, + 10'b1110_0010_11, + 10'b1110_0010_11, + 10'b1110_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, // M=127 + 10'b1101_1000_11 // M=128 +}; + + lookup_high = { + // CP_RES_LFHF + 10'b0111_1111_11, // M=1 - not legal + 10'b0111_1111_11, // M=2 + 10'b1110_1111_11, // M=3 + 10'b1111_1111_11, // M=4 + 10'b1111_1011_11, // M=5 + 10'b1111_1101_11, // M=6 + 10'b1111_0011_11, // M=7 + 10'b1110_0101_11, + 10'b1111_1001_11, + 10'b1111_1001_11, + 10'b1110_1110_11, + 10'b1111_1110_11, + 10'b1111_0001_11, + 10'b1111_0001_11, + 10'b1111_0001_11, + 10'b1110_0110_11, + 10'b1110_0110_11, + 10'b1111_0110_11, + 10'b1110_1010_11, + 10'b1110_1010_11, + 10'b1111_1010_11, + 10'b1111_1010_11, + 10'b1111_1010_11, + 10'b1111_1010_11, + 10'b1111_1010_11, + 10'b1101_1100_11, + 10'b1101_1100_11, + 10'b1101_1100_11, + 10'b1110_1100_11, + 10'b1110_1100_11, + 10'b1110_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1110_0010_11, + 10'b1110_0010_11, + 10'b1110_0010_11, + 10'b1110_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11 // M=128 +}; + + // Set lookup_entry with the explicit bits from lookup with a part select + if(BANDWIDTH == "LOW") begin + // Low Bandwidth + mmcm_pll_filter_lookup = lookup_low[ ((128-divide)*10) +: 10]; + end else begin + // High or optimized bandwidth + mmcm_pll_filter_lookup = lookup_high[ ((128-divide)*10) +: 10]; + end + + `ifdef DEBUG + $display("filter_lookup: %b", mmcm_pll_filter_lookup); + `endif + end +endfunction + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +function [37:0] mmcm_pll_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle // Multiplied by 100,000 + ); + + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_pll_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + // w_edge[13], no_count[12], high_time[11:6], low_time[5:0] + div_calc = mmcm_pll_divider(divide, duty_cycle); + // mx[10:9], pm[8:6], dt[5:0] + phase_calc = mmcm_pll_phase(divide, phase); + + // Return value is the upper and lower address of counter + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + `ifdef DEBUG + $display("div:%d dc:%d phase:%d ht:%d lt:%d ed:%d nc:%d mx:%d dt:%d pm:%d", + divide, duty_cycle, phase, div_calc[11:6], div_calc[5:0], + div_calc[13], div_calc[12], + phase_calc[16:15], phase_calc[5:0], phase_calc[14:12]); + `endif + + mmcm_pll_count_calc = + { + // Upper Address + 6'h00, phase_calc[10:9], div_calc[13:12], phase_calc[5:0], + // Lower Address + phase_calc[8:6], 1'b0, div_calc[11:0] + }; + end +endfunction + + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +// for fractional multiply/divide functions. +// +// +function [37:0] mmcm_frac_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle, // Multiplied by 100,000. Not programmable in fractional + input [9:0] frac // Multiplied by 1000 + ); + + //Required for fractional divide calculations + reg [7:0] lt_frac; + reg [7:0] ht_frac; + + reg /*[7:0]*/ wf_fall_frac; + reg /*[7:0]*/ wf_rise_frac; + + reg [31:0] a; + reg [7:0] pm_rise_frac_filtered ; + reg [7:0] pm_fall_frac_filtered ; + reg [7:0] clkout0_divide_int; + reg [2:0] clkout0_divide_frac; + reg [7:0] even_part_high; + reg [7:0] even_part_low; + + reg [7:0] odd; + reg [7:0] odd_and_frac; + + reg [7:0] pm_fall; + reg [7:0] pm_rise; + reg [7:0] dt; + reg [7:0] dt_int; + reg [63:0] dt_calc; + + reg [7:0] pm_rise_frac; + reg [7:0] pm_fall_frac; + + reg [31:0] a_per_in_octets; + reg [31:0] a_phase_in_cycles; + + parameter precision = 0.125; + + reg [31:0] phase_fixed; // changed to 31:0 from 32:1 jt 5/2/11 + reg [31: 0] phase_pos; + reg [31: 0] phase_vco; + reg [31:0] temp;// changed to 31:0 from 32:1 jt 5/2/11 + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_frac_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + //convert phase to fixed + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + + // Return value is + // Transfer data + // RESERVED [37:36] + // FRAC_TIME [35:33] + // FRAC_WF_FALL [32] + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + + + clkout0_divide_frac = frac / 125; + clkout0_divide_int = divide; + + even_part_high = clkout0_divide_int >> 1;//$rtoi(clkout0_divide_int / 2); + even_part_low = even_part_high; + + odd = clkout0_divide_int - even_part_high - even_part_low; + odd_and_frac = (8*odd) + clkout0_divide_frac; + + lt_frac = even_part_high - (odd_and_frac <= 9);//IF(odd_and_frac>9,even_part_high, even_part_high - 1) + ht_frac = even_part_low - (odd_and_frac <= 8);//IF(odd_and_frac>8,even_part_low, even_part_low- 1) + + pm_fall = {odd[6:0],2'b00} + {6'h00, clkout0_divide_frac[2:1]}; // using >> instead of clkout0_divide_frac / 2 + pm_rise = 0; //0 + + wf_fall_frac = ((odd_and_frac >=2) && (odd_and_frac <=9)) || (clkout0_divide_int == 2 && clkout0_divide_frac == 1); //IF(odd_and_frac>=2,IF(odd_and_frac <= 9,1,0),0) + wf_rise_frac = (odd_and_frac >=1) && (odd_and_frac <=8); //IF(odd_and_frac>=1,IF(odd_and_frac <= 8,1,0),0) + + + + //Calculate phase in fractional cycles + a_per_in_octets = (8 * divide) + (frac / 125) ; + a_phase_in_cycles = (phase+10) * a_per_in_octets / 360000 ;//Adding 1 due to rounding errors + pm_rise_frac = (a_phase_in_cycles[7:0] ==8'h00)?8'h00:a_phase_in_cycles[7:0] - {a_phase_in_cycles[7:3],3'b000}; + + dt_calc = ((phase+10) * a_per_in_octets / 8 )/360000 ;//TRUNC(phase* divide / 360); //or_simply (a_per_in_octets / 8) + dt = dt_calc[7:0]; + + pm_rise_frac_filtered = (pm_rise_frac >=8) ? (pm_rise_frac ) - 8: pm_rise_frac ; //((phase_fixed * (divide + frac / 1000)) / 360) - {pm_rise_frac[7:3],3'b000};//$rtoi(clkout0_phase * clkout0_divide / 45);//a; + + dt_int = dt + (& pm_rise_frac[7:4]); //IF(pm_rise_overwriting>7,dt+1,dt) + pm_fall_frac = pm_fall + pm_rise_frac; + pm_fall_frac_filtered = pm_fall + pm_rise_frac - {pm_fall_frac[7:3], 3'b000}; + + div_calc = mmcm_pll_divider(divide, duty_cycle); //Use to determine edge[7], no count[6] + phase_calc = mmcm_pll_phase(divide, phase);// returns{mx[1:0], phase_mux[2:0], delay_time[5:0]} + + mmcm_frac_count_calc[37:0] = + { 2'b00, pm_fall_frac_filtered[2:0], wf_fall_frac, + 1'b0, clkout0_divide_frac[2:0], 1'b1, wf_rise_frac, phase_calc[10:9], 2'b00, dt[5:0], + pm_rise_frac_filtered[2], pm_rise_frac_filtered[1], pm_rise_frac_filtered[0], 1'b0, ht_frac[5:0], lt_frac[5:0] + } ; + + `ifdef DEBUG + $display("-%d.%d p%d>> :DADDR_9_15 frac30to28.frac_en.wf_r_frac.dt:%b%d%d_%b:DADDR_7_13 pm_f_frac_filtered_29to27.wf_f_frac_26:%b%d:DADDR_8_14.pm_r_frac_filt_15to13.ht_frac.lt_frac:%b%b%b:", divide, frac, phase, clkout0_divide_frac, 1, wf_rise_frac, dt, pm_fall_frac_filtered, wf_fall_frac, pm_rise_frac_filtered, ht_frac, lt_frac); + `endif + + end +endfunction + diff --git a/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_us_plus_pll.vh b/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_us_plus_pll.vh new file mode 100755 index 0000000..0899943 --- /dev/null +++ b/proj/AudioProc.ip_user_files/ipstatic/mmcm_pll_drp_func_us_plus_pll.vh @@ -0,0 +1,561 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Company: AMD +// Engineer: Jim Tatsukawa, Ralf Krueger, updated for Ultrascale+ +// Date: 6/15/2015 +// Design Name: PLLE4 DRP +// Module Name: plle4_drp_func.h +// Version: 2.0 +// Target Devices: UltraScale+ Architecture +// Tool versions: 2017.1 +// Description: This header provides the functions necessary to +// calculate the DRP register values for the V6 PLL. +// +// Revision Notes: 8/11 - PLLE3 updated for PLLE3 file 4564419 +// Revision Notes: 6/15 - pll_filter_lookup fixed for max M of 19 +// M_Rise bits have been removed for PLLE3 +// Revision Notes: 2/28/17 - pll_filter_lookup and CPRES updated for +// Ultrascale+ and for max M of 21 +// +// (c) Copyright 2009-2017, 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// This file contains confidential and proprietary information +// of AMD and is protected under U.S. and international copyright +// and other intellectual property laws. +// +// DISCLAIMER +// This disclaimer is not a license and does not grant any +// rights to the materials distributed herewith. Except as +// otherwise provided in a valid license issued to you by +// AMD, and to the maximum extent permitted by applicable +// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +// WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES +// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +// (2) AMD shall not be liable (whether in contract or tort, +// including negligence, or under any other theory of +// liability) for any loss or damage of any kind or nature +// related to, arising under or in connection with these +// materials, including for any direct, or any indirect, +// special, incidental, or consequential loss or damage +// (including loss of data, profits, goodwill, or any type of +// loss or damage suffered as a result of any action brought +// by a third party) even if such damage or loss was +// reasonably foreseeable or AMD had been advised of the +// possibility of the same. +// +// CRITICAL APPLICATIONS +// AMD products are not designed or intended to be fail- +// safe, or for use in any application requiring fail-safe +// performance, such as life-support or safety devices or +// systems, Class III medical devices, nuclear facilities, +// applications related to the deployment of airbags, or any +// other applications that could lead to death, personal +// injury, or severe property or environmental damage +// (individually and collectively, "Critical +// Applications"). Customer assumes the sole risk and +// liability of any use of AMD products in Critical +// Applications, subject only to applicable laws and +// regulations governing limitations on product liability. +// +// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +// PART OF THIS FILE AT ALL TIMES. +//////////////////////////////////////////////////////////// +// +/////////////////////////////////////////////////////////////////////////////// + +// These are user functions that should not be modified. Changes to the defines +// or code within the functions may alter the accuracy of the calculations. + +// Define debug to provide extra messages durring elaboration +//`define DEBUG 1 + +// FRAC_PRECISION describes the width of the fractional portion of the fixed +// point numbers. These should not be modified, they are for development +// only +`define FRAC_PRECISION 10 +// FIXED_WIDTH describes the total size for fixed point calculations(int+frac). +// Warning: L.50 and below will not calculate properly with FIXED_WIDTHs +// greater than 32 +`define FIXED_WIDTH 32 + +// This function takes a fixed point number and rounds it to the nearest +// fractional precision bit. +function [`FIXED_WIDTH:1] round_frac + ( + // Input is (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point number + input [`FIXED_WIDTH:1] decimal, + + // This describes the precision of the fraction, for example a value + // of 1 would modify the fractional so that instead of being a .16 + // fractional, it would be a .1 (rounded to the nearest 0.5 in turn) + input [`FIXED_WIDTH:1] precision + ); + + begin + + `ifdef DEBUG + $display("round_frac - decimal: %h, precision: %h", decimal, precision); + `endif + // If the fractional precision bit is high then round up + if( decimal[(`FRAC_PRECISION-precision)] == 1'b1) begin + round_frac = decimal + (1'b1 << (`FRAC_PRECISION-precision)); + end else begin + round_frac = decimal; + end + `ifdef DEBUG + $display("round_frac: %h", round_frac); + `endif + end +endfunction + +// This function calculates high_time, low_time, w_edge, and no_count +// of a non-fractional counter based on the divide and duty cycle +// +// NOTE: high_time and low_time are returned as integers between 0 and 63 +// inclusive. 64 should equal 6'b000000 (in other words it is okay to +// ignore the overflow) +function [13:0] mmcm_pll_divider + ( + input [7:0] divide, // Max divide is 128 + input [31:0] duty_cycle // Duty cycle is multiplied by 100,000 + ); + + reg [`FIXED_WIDTH:1] duty_cycle_fix; + + // High/Low time is initially calculated with a wider integer to prevent a + // calculation error when it overflows to 64. + reg [6:0] high_time; + reg [6:0] low_time; + reg w_edge; + reg no_count; + + reg [`FIXED_WIDTH:1] temp; + + begin + // Duty Cycle must be between 0 and 1,000 + if(duty_cycle <=0 || duty_cycle >= 100000) begin +`ifndef SYNTHESIS + $display("ERROR: duty_cycle: %d is invalid", duty_cycle); + `endif + $finish; + end + + // Convert to FIXED_WIDTH-FRAC_PRECISION.FRAC_PRECISION fixed point + duty_cycle_fix = (duty_cycle << `FRAC_PRECISION) / 100_000; + + `ifdef DEBUG + $display("duty_cycle_fix: %h", duty_cycle_fix); + `endif + + // If the divide is 1 nothing needs to be set except the no_count bit. + // Other values are dummies + if(divide == 7'h01) begin + high_time = 7'h01; + w_edge = 1'b0; + low_time = 7'h01; + no_count = 1'b1; + end else begin + temp = round_frac(duty_cycle_fix*divide, 1); + + // comes from above round_frac + high_time = temp[`FRAC_PRECISION+7:`FRAC_PRECISION+1]; + // If the duty cycle * divide rounded is .5 or greater then this bit + // is set. + w_edge = temp[`FRAC_PRECISION]; // comes from round_frac + + // If the high time comes out to 0, it needs to be set to at least 1 + // and w_edge set to 0 + if(high_time == 7'h00) begin + high_time = 7'h01; + w_edge = 1'b0; + end + + if(high_time == divide) begin + high_time = divide - 1; + w_edge = 1'b1; + end + + // Calculate low_time based on the divide setting and set no_count to + // 0 as it is only used when divide is 1. + low_time = divide - high_time; + no_count = 1'b0; + end + + // Set the return value. + mmcm_pll_divider = {w_edge,no_count,high_time[5:0],low_time[5:0]}; + end +endfunction + +// This function calculates mx, delay_time, and phase_mux +// of a non-fractional counter based on the divide and phase +// +// NOTE: The only valid value for the MX bits is 2'b00 to ensure the coarse mux +// is used. +function [10:0] mmcm_pll_phase + ( + // divide must be an integer (use fractional if not) + // assumed that divide already checked to be valid + input [7:0] divide, // Max divide is 128 + + // Phase is given in degrees (-360,000 to 360,000) + input signed [31:0] phase + ); + + reg [`FIXED_WIDTH:1] phase_in_cycles; + reg [`FIXED_WIDTH:1] phase_fixed; + reg [1:0] mx; + reg [5:0] delay_time; + reg [2:0] phase_mux; + + reg [`FIXED_WIDTH:1] temp; + + begin +`ifdef DEBUG + $display("pll_phase-divide:%d,phase:%d", + divide, phase); +`endif + + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); +`endif + $finish; + end + + // If phase is less than 0, convert it to a positive phase shift + // Convert to (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point + if(phase < 0) begin + phase_fixed = ( (phase + 360000) << `FRAC_PRECISION ) / 1000; + end else begin + phase_fixed = ( phase << `FRAC_PRECISION ) / 1000; + end + + // Put phase in terms of decimal number of vco clock cycles + phase_in_cycles = ( phase_fixed * divide ) / 360; + +`ifdef DEBUG + $display("phase_in_cycles: %h", phase_in_cycles); +`endif + + + temp = round_frac(phase_in_cycles, 3); + + // set mx to 2'b00 that the phase mux from the VCO is enabled + mx = 2'b00; + phase_mux = temp[`FRAC_PRECISION:`FRAC_PRECISION-2]; + delay_time = temp[`FRAC_PRECISION+6:`FRAC_PRECISION+1]; + + `ifdef DEBUG + $display("temp: %h", temp); + `endif + + // Setup the return value + mmcm_pll_phase={mx, phase_mux, delay_time}; + end +endfunction + +// This function takes the divide value and outputs the necessary lock values +function [39:0] mmcm_pll_lock_lookup + ( + input [6:0] divide // Max divide is 21 + ); + + reg [839:0] lookup; + + begin + lookup = { + // This table is composed of: + // LockRefDly_LockFBDly_LockCnt_LockSatHigh_UnlockCnt + 40'b00110_00110_1111101000_1111101001_0000000001, //1 illegal in Ultrascale+ + 40'b00110_00110_1111101000_1111101001_0000000001, //2 + 40'b01000_01000_1111101000_1111101001_0000000001, //3 + 40'b01011_01011_1111101000_1111101001_0000000001, //4 + 40'b01110_01110_1111101000_1111101001_0000000001, //5 + 40'b10001_10001_1111101000_1111101001_0000000001, //6 + 40'b10011_10011_1111101000_1111101001_0000000001, //7 + 40'b10110_10110_1111101000_1111101001_0000000001, //8 + 40'b11001_11001_1111101000_1111101001_0000000001, //9 + 40'b11100_11100_1111101000_1111101001_0000000001, //10 + 40'b11111_11111_1110000100_1111101001_0000000001, //11 + 40'b11111_11111_1100111001_1111101001_0000000001, //12 + 40'b11111_11111_1011101110_1111101001_0000000001, //13 + 40'b11111_11111_1010111100_1111101001_0000000001, //14 + 40'b11111_11111_1010001010_1111101001_0000000001, //15 + 40'b11111_11111_1001110001_1111101001_0000000001, //16 + 40'b11111_11111_1000111111_1111101001_0000000001, //17 + 40'b11111_11111_1000100110_1111101001_0000000001, //18 + 40'b11111_11111_1000001101_1111101001_0000000001, //19 + 40'b11111_11111_0111110100_1111101001_0000000001, //20 + 40'b11111_11111_0111011011_1111101001_0000000001 //21 + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + mmcm_pll_lock_lookup = lookup[ ((21-divide)*40) +: 40]; + `ifdef DEBUG + $display("lock_lookup: %b", pll_lock_lookup); + `endif + end +endfunction + +// This function takes the divide value and the bandwidth setting of the PLL +// and outputs the digital filter settings necessary. Removing bandwidth setting for PLLE3. +function [9:0] mmcm_pll_filter_lookup + ( + input [6:0] divide // Max divide is 21 + ); + + reg [209:0] lookup; + reg [9:0] lookup_entry; + + begin + + lookup = { + // CP_RES_LFHF + 10'b0011_0111_11, //1 not legal in Ultrascale+ + 10'b0011_0111_11, //2 + 10'b0011_0011_11, //3 + 10'b0011_1001_11, //4 + 10'b0011_0001_11, //5 + 10'b0100_1110_11, //6 + 10'b0011_0110_11, //7 + 10'b0011_1010_11, //8 + 10'b0111_1001_11, //9 + 10'b0111_1001_11, //10 + 10'b0101_0110_11, //11 + 10'b1100_0101_11, //12 + 10'b0101_1010_11, //13 + 10'b0110_0110_11, //14 + 10'b0110_1010_11, //15 + 10'b0111_0110_11, //16 + 10'b1111_0101_11, //17 + 10'b1100_0110_11, //18 + 10'b1110_0001_11, //19 + 10'b1101_0110_11, //20 + 10'b1111_0001_11 //21 + }; + + mmcm_pll_filter_lookup = lookup [ ((21-divide)*10) +: 10]; + + `ifdef DEBUG + $display("filter_lookup: %b", pll_filter_lookup); + `endif + end +endfunction + +// This function set the CLKOUTPHY divide settings to match +// the desired CLKOUTPHY_MODE setting. To create VCO_X2, then +// the CLKOUTPHY will be set to 2'b00 since the VCO is internally +// doubled and 2'b00 will represent divide by 1. Similarly "VCO" +// will need to divide the doubled clock VCO clock frequency by +// 2 therefore 2'b01 will match a divide by 2.And VCO_HALF will +// need to divide the doubled VCO by 4, therefore 2'b10 +function [9:0] mmcm_pll_clkoutphy_calc + ( + input [8*9:0] CLKOUTPHY_MODE + ); + + if(CLKOUTPHY_MODE == "VCO_X2") begin + mmcm_pll_clkoutphy_calc= 2'b00; + end else if(CLKOUTPHY_MODE == "VCO") begin + mmcm_pll_clkoutphy_calc= 2'b01; + end else if(CLKOUTPHY_MODE == "CLKIN") begin + mmcm_pll_clkoutphy_calc= 2'b11; + end else begin // Assume "VCO_HALF" + mmcm_pll_clkoutphy_calc= 2'b10; + end + +endfunction + + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +function [37:0] mmcm_pll_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle // Multiplied by 100,000 + ); + + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("pll_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + // w_edge[13], no_count[12], high_time[11:6], low_time[5:0] + div_calc = mmcm_pll_divider(divide, duty_cycle); + // mx[10:9], pm[8:6], dt[5:0] + phase_calc = mmcm_pll_phase(divide, phase); + + // Return value is the upper and lower address of counter + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + `ifdef DEBUG + $display("div:%d dc:%d phase:%d ht:%d lt:%d ed:%d nc:%d mx:%d dt:%d pm:%d", + divide, duty_cycle, phase, div_calc[11:6], div_calc[5:0], + div_calc[13], div_calc[12], + phase_calc[16:15], phase_calc[5:0], 3'b000); //Removed PM_Rise bits + `endif + + mmcm_pll_count_calc = + { + // Upper Address + 6'h00, phase_calc[10:9], div_calc[13:12], phase_calc[5:0], + // Lower Address + phase_calc[8:6], 1'b0, div_calc[11:0] + }; + end +endfunction + + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +// for fractional multiply/divide functions. +// +// +function [37:0] mmcm_pll_frac_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle, // Multiplied by 1,000 + input [9:0] frac // Multiplied by 1000 + ); + + //Required for fractional divide calculations + reg [7:0] lt_frac; + reg [7:0] ht_frac; + + reg /*[7:0]*/ wf_fall_frac; + reg /*[7:0]*/ wf_rise_frac; + + reg [31:0] a; + reg [7:0] pm_rise_frac_filtered ; + reg [7:0] pm_fall_frac_filtered ; + reg [7:0] clkout0_divide_int; + reg [2:0] clkout0_divide_frac; + reg [7:0] even_part_high; + reg [7:0] even_part_low; + + reg [7:0] odd; + reg [7:0] odd_and_frac; + + reg [7:0] pm_fall; + reg [7:0] pm_rise; + reg [7:0] dt; + reg [7:0] dt_int; + reg [63:0] dt_calc; + + reg [7:0] pm_rise_frac; + reg [7:0] pm_fall_frac; + + reg [31:0] a_per_in_octets; + reg [31:0] a_phase_in_cycles; + + parameter precision = 0.125; + + reg [31:0] phase_fixed; // changed to 31:0 from 32:1 jt 5/2/11 + reg [31: 0] phase_pos; + reg [31: 0] phase_vco; + reg [31:0] temp;// changed to 31:0 from 32:1 jt 5/2/11 + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("pll_frac_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + //convert phase to fixed + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + + // Return value is + // Transfer data + // RESERVED [37:36] + // FRAC_TIME [35:33] + // FRAC_WF_FALL [32] + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + + + clkout0_divide_frac = frac / 125; + clkout0_divide_int = divide; + + even_part_high = clkout0_divide_int >> 1;//$rtoi(clkout0_divide_int / 2); + even_part_low = even_part_high; + + odd = clkout0_divide_int - even_part_high - even_part_low; + odd_and_frac = (8*odd) + clkout0_divide_frac; + + lt_frac = even_part_high - (odd_and_frac <= 9);//IF(odd_and_frac>9,even_part_high, even_part_high - 1) + ht_frac = even_part_low - (odd_and_frac <= 8);//IF(odd_and_frac>8,even_part_low, even_part_low- 1) + + pm_fall = {odd[6:0],2'b00} + {6'h00, clkout0_divide_frac[2:1]}; // using >> instead of clkout0_divide_frac / 2 + pm_rise = 0; //0 + + wf_fall_frac = (odd_and_frac >=2) && (odd_and_frac <=9);//IF(odd_and_frac>=2,IF(odd_and_frac <= 9,1,0),0) + wf_rise_frac = (odd_and_frac >=1) && (odd_and_frac <=8);//IF(odd_and_frac>=1,IF(odd_and_frac <= 8,1,0),0) + + + + //Calculate phase in fractional cycles + a_per_in_octets = (8 * divide) + (frac / 125) ; + a_phase_in_cycles = (phase+10) * a_per_in_octets / 360000 ;//Adding 1 due to rounding errors + pm_rise_frac = (a_phase_in_cycles[7:0] ==8'h00)?8'h00:a_phase_in_cycles[7:0] - {a_phase_in_cycles[7:3],3'b000}; + + dt_calc = ((phase+10) * a_per_in_octets / 8 )/360000 ;//TRUNC(phase* divide / 360); //or_simply (a_per_in_octets / 8) + dt = dt_calc[7:0]; + + pm_rise_frac_filtered = (pm_rise_frac >=8) ? (pm_rise_frac ) - 8: pm_rise_frac ; //((phase_fixed * (divide + frac / 1000)) / 360) - {pm_rise_frac[7:3],3'b000};//$rtoi(clkout0_phase * clkout0_divide / 45);//a; + + dt_int = dt + (& pm_rise_frac[7:4]); //IF(pm_rise_overwriting>7,dt+1,dt) + pm_fall_frac = pm_fall + pm_rise_frac; + pm_fall_frac_filtered = pm_fall + pm_rise_frac - {pm_fall_frac[7:3], 3'b000}; + + div_calc = mmcm_pll_divider(divide, duty_cycle); //Use to determine edge[7], no count[6] + phase_calc = mmcm_pll_phase(divide, phase);// returns{mx[1:0], phase_mux[2:0], delay_time[5:0]} + + mmcm_pll_frac_count_calc[37:0] = + { 2'b00, pm_fall_frac_filtered[2:0], wf_fall_frac, + 1'b0, clkout0_divide_frac[2:0], 1'b1, wf_rise_frac, phase_calc[10:9], div_calc[13:12], dt[5:0], + 3'b000, 1'b0, ht_frac[5:0], lt_frac[5:0] //Removed PM_Rise bits + } ; + + `ifdef DEBUG + $display("-%d.%d p%d>> :DADDR_9_15 frac30to28.frac_en.wf_r_frac.dt:%b%d%d_%b:DADDR_7_13 pm_f_frac_filtered_29to27.wf_f_frac_26:%b%d:DADDR_8_14.pm_r_frac_filt_15to13.ht_frac.lt_frac:%b%b%b:", divide, frac, phase, clkout0_divide_frac, 1, wf_rise_frac, dt, pm_fall_frac_filtered, wf_fall_frac, 3'b000, ht_frac, lt_frac); + `endif + + end +endfunction + diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/README.txt b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/README.txt new file mode 100644 index 0000000..9e170f5 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/README.txt @@ -0,0 +1,50 @@ +################################################################################ +# Vivado (TM) v2024.1 (64-bit) +# +# README.txt: Please read the sections below to understand the steps required to +# run the exported script and how to fetch design source file details +# from the file_info.txt file. +# +# Generated by export_simulation on Wed Feb 26 12:12:47 CET 2025 +# +################################################################################ + +1. Steps to run the generated simulation script + +From the shell prompt in the current directory, issue the following command:- + +./clk_wiz_0.sh + +This command will launch the 'compile', 'elaborate' and 'simulate' functions +implemented in the script file for the 3-step flow. These functions are called +from the main 'run' function in the script file. + +The 'run' function first calls the 'check_args' function, the purpose of which +is to verify the generated script arguments and print error if incorrect switch +is specified. The 'run' function then calls the 'setup' function, the purpose of +which is to specify custom or initialization commands. The function also executes +following sub-functions:- +'reset_run' if -reset_run switch is specified. +'reset_log' if -reset_log switch is specified. + +The purpose of 'reset_run' function' is to delete the simulator generated design +data from the previous run and the purpose of 'reset_log' function' is to delete +the simulator generated log files. + +The 'run' function then calls the 'init_lib' function, the purpose of which is to +create design library mappings and directories. This function is called before the +'compile' step. By default, if '-step' switch is specified with the script then the +script will execute that specfic step, else it will execute all steps applicable +for the target simulator. + +For more information on the script, please type './clk_wiz_0.sh -help' + +2. Design source file information + +export_simulation generates a 'file_info.txt' file that contains design file information +based on the compile order when export_simulation was executed from Vivado. The file +contains information about the file name, type, library it is compiled into, whether +it is part of the IP, associated library, file path information in a comma separated +format. This file can be parsed to extract the required information for generating a +custom script or can be read from verification test infra. + diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/clk_wiz_0.sh b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/clk_wiz_0.sh new file mode 100755 index 0000000..c0a8e7b --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/clk_wiz_0.sh @@ -0,0 +1,258 @@ +#!/usr/bin/env bash +#********************************************************************************************************** +# Vivado (TM) v2024.1 (64-bit) +# +# Script generated by Vivado on Wed Feb 26 12:12:47 CET 2025 +# SW Build 5076996 on Wed May 22 18:36:09 MDT 2024 +# +# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. +# Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. +# +# Filename : clk_wiz_0.sh +# Simulator : Aldec Active-HDL Simulator +# Description : Simulation script generated by export_simulation Tcl command +# Purpose : Run 'compile', 'elaborate', 'simulate' steps for compiling, elaborating and simulating the +# design. The script will copy the library mapping file from the compiled library directory, +# create design library directories and library mappings in the mapping file. +# +# Usage : clk_wiz_0.sh +# clk_wiz_0.sh [-lib_map_path] [-step] [-keep_index] [-noclean_files]* +# clk_wiz_0.sh [-reset_run] +# clk_wiz_0.sh [-reset_log] +# clk_wiz_0.sh [-help] +# +# * The -noclean_files switch is deprecated and will not peform any function (by default, the +# simulator generated files will not be removed unless -reset_run switch is used) +# +# Prerequisite : Before running export_simulation, you must first compile the AMD simulation library +# using the 'compile_simlib' Tcl command (for more information, run 'compile_simlib -help' +# command in the Vivado Tcl shell). After compiling the library, specify the -lib_map_path +# switch with the directory path where the library is created while generating the script +# with export_simulation. +# +# Alternatively, you can set the library path by setting the following project property:- +# +# set_property compxlib.<simulator>_compiled_library_dir <path> [current_project] +# +# You can also point to the simulation library by either setting the 'lib_map_path' global +# variable in this script or specify it with the '-lib_map_path' switch while executing this +# script (type 'clk_wiz_0.sh -help' for more information). +# +# Note: For pure RTL based designs, the -lib_map_path switch can be specified later with the +# generated script, but if design is targetted for system simulation containing SystemC/C++/C +# sources, then the library path MUST be specified upfront when calling export_simulation. +# +# For more information, refer 'Vivado Design Suite User Guide:Logic simulation (UG900)' +# +#********************************************************************************************************** + +# script info +echo -e "clk_wiz_0.sh - Script generated by export_simulation (Vivado v2024.1 (64-bit)-id)\n" + +# main steps +run() +{ + check_args $* + setup + if [[ ($b_step == 1) ]]; then + case $step in + "compile" ) + init_lib + compile + ;; + "simulate" ) + simulate + ;; + * ) + echo -e "ERROR: Invalid or missing step '$step' (type \"./clk_wiz_0.sh -help\" for more information)\n" + exit 1 + esac + else + init_lib + compile + simulate + fi +} + +# RUN_STEP: <compile> +compile() +{ + runvsimsa -do "do {compile.do}" 2>&1 | tee -a compile.log +} + +# RUN_STEP: <simulate> +simulate() +{ + runvsimsa -l simulate.log -do "do {simulate.do}" +} + +# STEP: setup +setup() +{ + # delete previous files for a clean rerun + if [[ ($b_reset_run == 1) ]]; then + reset_run + echo -e "INFO: Simulation run files deleted.\n" + exit 0 + fi + + # delete previous log files + if [[ ($b_reset_log == 1) ]]; then + reset_log + echo -e "INFO: Simulation run log files deleted.\n" + exit 0 + fi + + # add any setup/initialization commands here:- + + # <user specific commands> + +} + +# simulator index file/library directory processing +init_lib() +{ + if [[ ($b_keep_index == 1) ]]; then + # keep previous design library mappings + true + else + # map simulator index file + map_setup_file + fi +} + +# map library.cfg file +map_setup_file() +{ + file="library.cfg" + if [[ ($lib_map_path != "") ]]; then + src_file="$lib_map_path/$file" + if [[ -e $src_file ]]; then + vmap -link $lib_map_path + fi + fi +} + +# delete generated data from the previous run +reset_run() +{ + files_to_remove=(compile.log elaboration.log simulate.log dataset.asdb work activehdl) + for (( i=0; i<${#files_to_remove[*]}; i++ )); do + file="${files_to_remove[i]}" + if [[ -e $file ]]; then + rm -rf $file + fi + done +} + +# delete generated log files from the previous run +reset_log() +{ + files_to_remove=(compile.log elaboration.log simulate.log dataset.asdb) + for (( i=0; i<${#files_to_remove[*]}; i++ )); do + file="${files_to_remove[i]}" + if [[ -e $file ]]; then + rm -rf $file + fi + done +} + +# check switch argument value +check_arg_value() +{ + if [[ ($1 == "-step") && (($2 != "compile") && ($2 != "simulate")) ]];then + echo -e "ERROR: Invalid or missing step '$2' (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + if [[ ($1 == "-lib_map_path") && ($2 == "") ]];then + echo -e "ERROR: Simulation library directory path not specified (type \"./clk_wiz_0.sh -help\" for more information)\n" + exit 1 + fi +} + +# check command line arguments +check_args() +{ + arg_count=$# + if [[ ("$#" == 1) && (("$1" == "-help") || ("$1" == "-h")) ]]; then + usage + fi + while [[ "$#" -gt 0 ]]; do + case $1 in + -step) check_arg_value $1 $2;step=$2; b_step=1; shift;; + -lib_map_path) check_arg_value $1 $2;lib_map_path=$2; b_lib_map_path=1; shift;; + -gen_bypass) b_gen_bypass=1 ;; + -reset_run) b_reset_run=1 ;; + -reset_log) b_reset_log=1 ;; + -keep_index) b_keep_index=1 ;; + -noclean_files) b_noclean_files=1 ;; + -help|-h) ;; + *) echo -e "ERROR: Invalid option specified '$1' (type "./top.sh -help" for more information)\n"; exit 1 ;; + esac + shift + done + + # -reset_run is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_reset_run == 1) ]]; then + echo -e "ERROR: -reset_run switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -reset_log is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_reset_log == 1) ]]; then + echo -e "ERROR: -reset_log switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -keep_index is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_keep_index == 1) ]]; then + echo -e "ERROR: -keep_index switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -noclean_files is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_noclean_files == 1) ]]; then + echo -e "ERROR: -noclean_files switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi +} + +# script usage +usage() +{ + msg="Usage: clk_wiz_0.sh [-help]\n\ +Usage: clk_wiz_0.sh [-step]\n\ +Usage: clk_wiz_0.sh [-lib_map_path]\n\ +Usage: clk_wiz_0.sh [-reset_run]\n\ +Usage: clk_wiz_0.sh [-reset_log]\n\ +Usage: clk_wiz_0.sh [-keep_index]\n\ +Usage: clk_wiz_0.sh [-noclean_files]\n\n\ +[-help] -- Print help information for this script\n\n\ +[-step <name>] -- Execute specified step (compile, simulate)\n\n\ +[-lib_map_path <path>] -- Compiled simulation library directory path. The simulation library is compiled\n\ +using the compile_simlib tcl command. Please see 'compile_simlib -help' for more information.\n\n\ +[-reset_run] -- Delete simulator generated data files from the previous run and recreate simulator setup\n\ +file/library mappings for a clean run. This switch will not execute steps defined in the script.\n\n\ +NOTE: To keep simulator index file settings from the previous run, use the -keep_index switch\n\ +NOTE: To regenerate simulator index file but keep the simulator generated files, use the -noclean_files switch\n\n\ +[-reset_log] -- Delete simulator generated log files from the previous run\n\n\ +[-keep_index] -- Keep simulator index file settings from the previous run\n\n\ +[-noclean_files] -- Reset previous run, but do not remove simulator generated files from the previous run\n" + echo -e $msg + exit 0 +} + +# initialize globals +step="" +lib_map_path="" +b_step=0 +b_lib_map_path=0 +b_gen_bypass=0 +b_reset_run=0 +b_reset_log=0 +b_keep_index=0 +b_noclean_files=0 + +# launch script +run $* diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/clk_wiz_0.udo b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/clk_wiz_0.udo new file mode 100644 index 0000000..e69de29 diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/compile.do b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/compile.do new file mode 100644 index 0000000..20dd108 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/compile.do @@ -0,0 +1,18 @@ +transcript off +onbreak {quit -force} +onerror {quit -force} +transcript on + +vlib work +vlib activehdl/xil_defaultlib + +vmap xil_defaultlib activehdl/xil_defaultlib + +vlog -work xil_defaultlib -v2k5 "+incdir+../../../ipstatic" -l xil_defaultlib \ +"../../../../../src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v" \ +"../../../../../src/ip/clk_wiz_0/clk_wiz_0.v" \ + + +vlog -work xil_defaultlib \ +"glbl.v" + diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/file_info.txt b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/file_info.txt new file mode 100644 index 0000000..a75fafc --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/file_info.txt @@ -0,0 +1,3 @@ +clk_wiz_0_clk_wiz.v,verilog,xil_defaultlib,../../../../../src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v,incdir="../../../ipstatic"incdir="../../../ipstatic" +clk_wiz_0.v,verilog,xil_defaultlib,../../../../../src/ip/clk_wiz_0/clk_wiz_0.v,incdir="../../../ipstatic"incdir="../../../ipstatic" +glbl.v,Verilog,xil_defaultlib,glbl.v diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/glbl.v b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/glbl.v new file mode 100755 index 0000000..ed3b249 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/glbl.v @@ -0,0 +1,84 @@ +// $Header: /devl/xcs/repo/env/Databases/CAEInterfaces/verunilibs/data/glbl.v,v 1.14 2010/10/28 20:44:00 fphillip Exp $ +`ifndef GLBL +`define GLBL +`timescale 1 ps / 1 ps + +module glbl (); + + parameter ROC_WIDTH = 100000; + parameter TOC_WIDTH = 0; + parameter GRES_WIDTH = 10000; + parameter GRES_START = 10000; + +//-------- STARTUP Globals -------------- + wire GSR; + wire GTS; + wire GWE; + wire PRLD; + wire GRESTORE; + tri1 p_up_tmp; + tri (weak1, strong0) PLL_LOCKG = p_up_tmp; + + wire PROGB_GLBL; + wire CCLKO_GLBL; + wire FCSBO_GLBL; + wire [3:0] DO_GLBL; + wire [3:0] DI_GLBL; + + reg GSR_int; + reg GTS_int; + reg PRLD_int; + reg GRESTORE_int; + +//-------- JTAG Globals -------------- + wire JTAG_TDO_GLBL; + wire JTAG_TCK_GLBL; + wire JTAG_TDI_GLBL; + wire JTAG_TMS_GLBL; + wire JTAG_TRST_GLBL; + + reg JTAG_CAPTURE_GLBL; + reg JTAG_RESET_GLBL; + reg JTAG_SHIFT_GLBL; + reg JTAG_UPDATE_GLBL; + reg JTAG_RUNTEST_GLBL; + + reg JTAG_SEL1_GLBL = 0; + reg JTAG_SEL2_GLBL = 0 ; + reg JTAG_SEL3_GLBL = 0; + reg JTAG_SEL4_GLBL = 0; + + reg JTAG_USER_TDO1_GLBL = 1'bz; + reg JTAG_USER_TDO2_GLBL = 1'bz; + reg JTAG_USER_TDO3_GLBL = 1'bz; + reg JTAG_USER_TDO4_GLBL = 1'bz; + + assign (strong1, weak0) GSR = GSR_int; + assign (strong1, weak0) GTS = GTS_int; + assign (weak1, weak0) PRLD = PRLD_int; + assign (strong1, weak0) GRESTORE = GRESTORE_int; + + initial begin + GSR_int = 1'b1; + PRLD_int = 1'b1; + #(ROC_WIDTH) + GSR_int = 1'b0; + PRLD_int = 1'b0; + end + + initial begin + GTS_int = 1'b1; + #(TOC_WIDTH) + GTS_int = 1'b0; + end + + initial begin + GRESTORE_int = 1'b0; + #(GRES_START); + GRESTORE_int = 1'b1; + #(GRES_WIDTH); + GRESTORE_int = 1'b0; + end + +endmodule +`endif diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/simulate.do b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/simulate.do new file mode 100644 index 0000000..f4d078c --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/activehdl/simulate.do @@ -0,0 +1,14 @@ +transcript off +onbreak {quit -force} +onerror {quit -force} +transcript on + +asim +access +r +m+clk_wiz_0 -L xil_defaultlib -L unisims_ver -L unimacro_ver -L secureip -O2 xil_defaultlib.clk_wiz_0 xil_defaultlib.glbl + +do {clk_wiz_0.udo} + +run + +endsim + +quit -force diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/README.txt b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/README.txt new file mode 100644 index 0000000..9e170f5 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/README.txt @@ -0,0 +1,50 @@ +################################################################################ +# Vivado (TM) v2024.1 (64-bit) +# +# README.txt: Please read the sections below to understand the steps required to +# run the exported script and how to fetch design source file details +# from the file_info.txt file. +# +# Generated by export_simulation on Wed Feb 26 12:12:47 CET 2025 +# +################################################################################ + +1. Steps to run the generated simulation script + +From the shell prompt in the current directory, issue the following command:- + +./clk_wiz_0.sh + +This command will launch the 'compile', 'elaborate' and 'simulate' functions +implemented in the script file for the 3-step flow. These functions are called +from the main 'run' function in the script file. + +The 'run' function first calls the 'check_args' function, the purpose of which +is to verify the generated script arguments and print error if incorrect switch +is specified. The 'run' function then calls the 'setup' function, the purpose of +which is to specify custom or initialization commands. The function also executes +following sub-functions:- +'reset_run' if -reset_run switch is specified. +'reset_log' if -reset_log switch is specified. + +The purpose of 'reset_run' function' is to delete the simulator generated design +data from the previous run and the purpose of 'reset_log' function' is to delete +the simulator generated log files. + +The 'run' function then calls the 'init_lib' function, the purpose of which is to +create design library mappings and directories. This function is called before the +'compile' step. By default, if '-step' switch is specified with the script then the +script will execute that specfic step, else it will execute all steps applicable +for the target simulator. + +For more information on the script, please type './clk_wiz_0.sh -help' + +2. Design source file information + +export_simulation generates a 'file_info.txt' file that contains design file information +based on the compile order when export_simulation was executed from Vivado. The file +contains information about the file name, type, library it is compiled into, whether +it is part of the IP, associated library, file path information in a comma separated +format. This file can be parsed to extract the required information for generating a +custom script or can be read from verification test infra. + diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/clk_wiz_0.sh b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/clk_wiz_0.sh new file mode 100755 index 0000000..08cb026 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/clk_wiz_0.sh @@ -0,0 +1,287 @@ +#!/usr/bin/env bash +#********************************************************************************************************** +# Vivado (TM) v2024.1 (64-bit) +# +# Script generated by Vivado on Wed Feb 26 12:12:47 CET 2025 +# SW Build 5076996 on Wed May 22 18:36:09 MDT 2024 +# +# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. +# Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. +# +# Filename : clk_wiz_0.sh +# Simulator : Siemens ModelSim Simulator +# Description : Simulation script generated by export_simulation Tcl command +# Purpose : Run 'compile', 'elaborate', 'simulate' steps for compiling, elaborating and simulating the +# design. The script will copy the library mapping file from the compiled library directory, +# create design library directories and library mappings in the mapping file. +# +# Usage : clk_wiz_0.sh +# clk_wiz_0.sh [-lib_map_path] [-step] [-keep_index] [-noclean_files]* +# clk_wiz_0.sh [-reset_run] +# clk_wiz_0.sh [-reset_log] +# clk_wiz_0.sh [-help] +# +# * The -noclean_files switch is deprecated and will not peform any function (by default, the +# simulator generated files will not be removed unless -reset_run switch is used) +# +# Prerequisite : Before running export_simulation, you must first compile the AMD simulation library +# using the 'compile_simlib' Tcl command (for more information, run 'compile_simlib -help' +# command in the Vivado Tcl shell). After compiling the library, specify the -lib_map_path +# switch with the directory path where the library is created while generating the script +# with export_simulation. +# +# Alternatively, you can set the library path by setting the following project property:- +# +# set_property compxlib.<simulator>_compiled_library_dir <path> [current_project] +# +# You can also point to the simulation library by either setting the 'lib_map_path' global +# variable in this script or specify it with the '-lib_map_path' switch while executing this +# script (type 'clk_wiz_0.sh -help' for more information). +# +# Note: For pure RTL based designs, the -lib_map_path switch can be specified later with the +# generated script, but if design is targetted for system simulation containing SystemC/C++/C +# sources, then the library path MUST be specified upfront when calling export_simulation. +# +# For more information, refer 'Vivado Design Suite User Guide:Logic simulation (UG900)' +# +#********************************************************************************************************** + +# catch pipeline exit status +set -Eeuo pipefail + +# script info +echo -e "clk_wiz_0.sh - Script generated by export_simulation (Vivado v2024.1 (64-bit)-id)\n" + +# main steps +run() +{ + check_args $* + setup + if [[ ($b_step == 1) ]]; then + case $step in + "compile" ) + init_lib + compile + ;; + "simulate" ) + simulate + ;; + * ) + echo -e "ERROR: Invalid or missing step '$step' (type \"./clk_wiz_0.sh -help\" for more information)\n" + exit 1 + esac + else + init_lib + compile + simulate + fi +} + +# RUN_STEP: <compile> +compile() +{ + source compile.do 2>&1 | tee -a compile.log +} + +# RUN_STEP: <simulate> +simulate() +{ + vsim -c -do "do {simulate.do}" -l simulate.log +} + +# STEP: setup +setup() +{ + # delete previous files for a clean rerun + if [[ ($b_reset_run == 1) ]]; then + reset_run + echo -e "INFO: Simulation run files deleted.\n" + exit 0 + fi + + # delete previous log files + if [[ ($b_reset_log == 1) ]]; then + reset_log + echo -e "INFO: Simulation run log files deleted.\n" + exit 0 + fi + + # add any setup/initialization commands here:- + + # <user specific commands> + +} + +# simulator index file/library directory processing +init_lib() +{ + if [[ ($b_keep_index == 1) ]]; then + # keep previous simulator index file + true + else + # copy simulator index file to current directory + copy_setup_file + fi + + if [[ ($lib_map_path != "") ]]; then + ref_lib_dir=$lib_map_path + fi + + if [[ ($b_keep_index == 1) ]]; then + # do not recreate design library directories + true + else + # create design library directories + create_lib_dir + fi +} + +# copy modelsim.ini file +copy_setup_file() +{ + file="modelsim.ini" + if [[ ($lib_map_path != "") && !(-e $lib_map_path) ]]; then + echo -e "ERROR: Compiled simulation library directory path not specified or does not exist (type "./top.sh -help" for more information)\n" + fi + + if [[ ($lib_map_path != "") ]]; then + src_file="$lib_map_path/$file" + if [[ -e $src_file ]]; then + cp $src_file . + fi + fi +} + +# create design library directory +create_lib_dir() +{ + lib_dir="modelsim_lib" + if [[ -e $lib_dir ]]; then + rm -rf $lib_dir + fi + mkdir $lib_dir +} + +# delete generated data from the previous run +reset_run() +{ + files_to_remove=(compile.log elaborate.log simulate.log vsim.wlf modelsim_lib) + for (( i=0; i<${#files_to_remove[*]}; i++ )); do + file="${files_to_remove[i]}" + if [[ -e $file ]]; then + rm -rf $file + fi + done +} + +# delete generated log files from the previous run +reset_log() +{ + files_to_remove=(compile.log elaborate.log simulate.log) + for (( i=0; i<${#files_to_remove[*]}; i++ )); do + file="${files_to_remove[i]}" + if [[ -e $file ]]; then + rm -rf $file + fi + done +} + +# check switch argument value +check_arg_value() +{ + if [[ ($1 == "-step") && (($2 != "compile") && ($2 != "simulate")) ]];then + echo -e "ERROR: Invalid or missing step '$2' (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + if [[ ($1 == "-lib_map_path") && ($2 == "") ]];then + echo -e "ERROR: Simulation library directory path not specified (type \"./clk_wiz_0.sh -help\" for more information)\n" + exit 1 + fi +} + +# check command line arguments +check_args() +{ + arg_count=$# + if [[ ("$#" == 1) && (("$1" == "-help") || ("$1" == "-h")) ]]; then + usage + fi + while [[ "$#" -gt 0 ]]; do + case $1 in + -step) check_arg_value $1 $2;step=$2; b_step=1; shift;; + -lib_map_path) check_arg_value $1 $2;lib_map_path=$2; b_lib_map_path=1; shift;; + -gen_bypass) b_gen_bypass=1 ;; + -reset_run) b_reset_run=1 ;; + -reset_log) b_reset_log=1 ;; + -keep_index) b_keep_index=1 ;; + -noclean_files) b_noclean_files=1 ;; + -help|-h) ;; + *) echo -e "ERROR: Invalid option specified '$1' (type "./top.sh -help" for more information)\n"; exit 1 ;; + esac + shift + done + + # -reset_run is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_reset_run == 1) ]]; then + echo -e "ERROR: -reset_run switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -reset_log is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_reset_log == 1) ]]; then + echo -e "ERROR: -reset_log switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -keep_index is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_keep_index == 1) ]]; then + echo -e "ERROR: -keep_index switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -noclean_files is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_noclean_files == 1) ]]; then + echo -e "ERROR: -noclean_files switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi +} + +# script usage +usage() +{ + msg="Usage: clk_wiz_0.sh [-help]\n\ +Usage: clk_wiz_0.sh [-step]\n\ +Usage: clk_wiz_0.sh [-lib_map_path]\n\ +Usage: clk_wiz_0.sh [-reset_run]\n\ +Usage: clk_wiz_0.sh [-reset_log]\n\ +Usage: clk_wiz_0.sh [-keep_index]\n\ +Usage: clk_wiz_0.sh [-noclean_files]\n\n\ +[-help] -- Print help information for this script\n\n\ +[-step <name>] -- Execute specified step (compile, simulate)\n\n\ +[-lib_map_path <path>] -- Compiled simulation library directory path. The simulation library is compiled\n\ +using the compile_simlib tcl command. Please see 'compile_simlib -help' for more information.\n\n\ +[-reset_run] -- Delete simulator generated data files from the previous run and recreate simulator setup\n\ +file/library mappings for a clean run. This switch will not execute steps defined in the script.\n\n\ +NOTE: To keep simulator index file settings from the previous run, use the -keep_index switch\n\ +NOTE: To regenerate simulator index file but keep the simulator generated files, use the -noclean_files switch\n\n\ +[-reset_log] -- Delete simulator generated log files from the previous run\n\n\ +[-keep_index] -- Keep simulator index file settings from the previous run\n\n\ +[-noclean_files] -- Reset previous run, but do not remove simulator generated files from the previous run\n" + echo -e $msg + exit 0 +} + +# initialize globals +step="" +lib_map_path="" +b_step=0 +b_lib_map_path=0 +b_gen_bypass=0 +b_reset_run=0 +b_reset_log=0 +b_keep_index=0 +b_noclean_files=0 + +# launch script +run $* diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/clk_wiz_0.udo b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/clk_wiz_0.udo new file mode 100644 index 0000000..e69de29 diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/compile.do b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/compile.do new file mode 100644 index 0000000..59e8d23 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/compile.do @@ -0,0 +1,15 @@ +vlib modelsim_lib/work +vlib modelsim_lib/msim + +vlib modelsim_lib/msim/xil_defaultlib + +vmap xil_defaultlib modelsim_lib/msim/xil_defaultlib + +vlog -work xil_defaultlib -64 -incr -mfcu "+incdir+../../../ipstatic" \ +"../../../../../src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v" \ +"../../../../../src/ip/clk_wiz_0/clk_wiz_0.v" \ + + +vlog -work xil_defaultlib \ +"glbl.v" + diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/file_info.txt b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/file_info.txt new file mode 100644 index 0000000..a75fafc --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/file_info.txt @@ -0,0 +1,3 @@ +clk_wiz_0_clk_wiz.v,verilog,xil_defaultlib,../../../../../src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v,incdir="../../../ipstatic"incdir="../../../ipstatic" +clk_wiz_0.v,verilog,xil_defaultlib,../../../../../src/ip/clk_wiz_0/clk_wiz_0.v,incdir="../../../ipstatic"incdir="../../../ipstatic" +glbl.v,Verilog,xil_defaultlib,glbl.v diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/glbl.v b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/glbl.v new file mode 100755 index 0000000..ed3b249 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/glbl.v @@ -0,0 +1,84 @@ +// $Header: /devl/xcs/repo/env/Databases/CAEInterfaces/verunilibs/data/glbl.v,v 1.14 2010/10/28 20:44:00 fphillip Exp $ +`ifndef GLBL +`define GLBL +`timescale 1 ps / 1 ps + +module glbl (); + + parameter ROC_WIDTH = 100000; + parameter TOC_WIDTH = 0; + parameter GRES_WIDTH = 10000; + parameter GRES_START = 10000; + +//-------- STARTUP Globals -------------- + wire GSR; + wire GTS; + wire GWE; + wire PRLD; + wire GRESTORE; + tri1 p_up_tmp; + tri (weak1, strong0) PLL_LOCKG = p_up_tmp; + + wire PROGB_GLBL; + wire CCLKO_GLBL; + wire FCSBO_GLBL; + wire [3:0] DO_GLBL; + wire [3:0] DI_GLBL; + + reg GSR_int; + reg GTS_int; + reg PRLD_int; + reg GRESTORE_int; + +//-------- JTAG Globals -------------- + wire JTAG_TDO_GLBL; + wire JTAG_TCK_GLBL; + wire JTAG_TDI_GLBL; + wire JTAG_TMS_GLBL; + wire JTAG_TRST_GLBL; + + reg JTAG_CAPTURE_GLBL; + reg JTAG_RESET_GLBL; + reg JTAG_SHIFT_GLBL; + reg JTAG_UPDATE_GLBL; + reg JTAG_RUNTEST_GLBL; + + reg JTAG_SEL1_GLBL = 0; + reg JTAG_SEL2_GLBL = 0 ; + reg JTAG_SEL3_GLBL = 0; + reg JTAG_SEL4_GLBL = 0; + + reg JTAG_USER_TDO1_GLBL = 1'bz; + reg JTAG_USER_TDO2_GLBL = 1'bz; + reg JTAG_USER_TDO3_GLBL = 1'bz; + reg JTAG_USER_TDO4_GLBL = 1'bz; + + assign (strong1, weak0) GSR = GSR_int; + assign (strong1, weak0) GTS = GTS_int; + assign (weak1, weak0) PRLD = PRLD_int; + assign (strong1, weak0) GRESTORE = GRESTORE_int; + + initial begin + GSR_int = 1'b1; + PRLD_int = 1'b1; + #(ROC_WIDTH) + GSR_int = 1'b0; + PRLD_int = 1'b0; + end + + initial begin + GTS_int = 1'b1; + #(TOC_WIDTH) + GTS_int = 1'b0; + end + + initial begin + GRESTORE_int = 1'b0; + #(GRES_START); + GRESTORE_int = 1'b1; + #(GRES_WIDTH); + GRESTORE_int = 1'b0; + end + +endmodule +`endif diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/simulate.do b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/simulate.do new file mode 100644 index 0000000..d25b53f --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/simulate.do @@ -0,0 +1,19 @@ +onbreak {quit -f} +onerror {quit -f} + +vsim -voptargs="+acc" -L xil_defaultlib -L unisims_ver -L unimacro_ver -L secureip -lib xil_defaultlib xil_defaultlib.clk_wiz_0 xil_defaultlib.glbl + +set NumericStdNoWarnings 1 +set StdArithNoWarnings 1 + +do {wave.do} + +view wave +view structure +view signals + +do {clk_wiz_0.udo} + +run 1000ns + +quit -force diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/wave.do b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/wave.do new file mode 100644 index 0000000..70157b0 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/modelsim/wave.do @@ -0,0 +1,2 @@ +add wave * +add wave /glbl/GSR diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/README.txt b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/README.txt new file mode 100644 index 0000000..9e170f5 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/README.txt @@ -0,0 +1,50 @@ +################################################################################ +# Vivado (TM) v2024.1 (64-bit) +# +# README.txt: Please read the sections below to understand the steps required to +# run the exported script and how to fetch design source file details +# from the file_info.txt file. +# +# Generated by export_simulation on Wed Feb 26 12:12:47 CET 2025 +# +################################################################################ + +1. Steps to run the generated simulation script + +From the shell prompt in the current directory, issue the following command:- + +./clk_wiz_0.sh + +This command will launch the 'compile', 'elaborate' and 'simulate' functions +implemented in the script file for the 3-step flow. These functions are called +from the main 'run' function in the script file. + +The 'run' function first calls the 'check_args' function, the purpose of which +is to verify the generated script arguments and print error if incorrect switch +is specified. The 'run' function then calls the 'setup' function, the purpose of +which is to specify custom or initialization commands. The function also executes +following sub-functions:- +'reset_run' if -reset_run switch is specified. +'reset_log' if -reset_log switch is specified. + +The purpose of 'reset_run' function' is to delete the simulator generated design +data from the previous run and the purpose of 'reset_log' function' is to delete +the simulator generated log files. + +The 'run' function then calls the 'init_lib' function, the purpose of which is to +create design library mappings and directories. This function is called before the +'compile' step. By default, if '-step' switch is specified with the script then the +script will execute that specfic step, else it will execute all steps applicable +for the target simulator. + +For more information on the script, please type './clk_wiz_0.sh -help' + +2. Design source file information + +export_simulation generates a 'file_info.txt' file that contains design file information +based on the compile order when export_simulation was executed from Vivado. The file +contains information about the file name, type, library it is compiled into, whether +it is part of the IP, associated library, file path information in a comma separated +format. This file can be parsed to extract the required information for generating a +custom script or can be read from verification test infra. + diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/clk_wiz_0.sh b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/clk_wiz_0.sh new file mode 100755 index 0000000..cc5e856 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/clk_wiz_0.sh @@ -0,0 +1,297 @@ +#!/usr/bin/env bash +#********************************************************************************************************** +# Vivado (TM) v2024.1 (64-bit) +# +# Script generated by Vivado on Wed Feb 26 12:12:47 CET 2025 +# SW Build 5076996 on Wed May 22 18:36:09 MDT 2024 +# +# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. +# Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. +# +# Filename : clk_wiz_0.sh +# Simulator : Siemens Questa Advanced Simulator +# Description : Simulation script generated by export_simulation Tcl command +# Purpose : Run 'compile', 'elaborate', 'simulate' steps for compiling, elaborating and simulating the +# design. The script will copy the library mapping file from the compiled library directory, +# create design library directories and library mappings in the mapping file. +# +# Usage : clk_wiz_0.sh +# clk_wiz_0.sh [-lib_map_path] [-step] [-keep_index] [-noclean_files]* +# clk_wiz_0.sh [-reset_run] +# clk_wiz_0.sh [-reset_log] +# clk_wiz_0.sh [-help] +# +# * The -noclean_files switch is deprecated and will not peform any function (by default, the +# simulator generated files will not be removed unless -reset_run switch is used) +# +# Prerequisite : Before running export_simulation, you must first compile the AMD simulation library +# using the 'compile_simlib' Tcl command (for more information, run 'compile_simlib -help' +# command in the Vivado Tcl shell). After compiling the library, specify the -lib_map_path +# switch with the directory path where the library is created while generating the script +# with export_simulation. +# +# Alternatively, you can set the library path by setting the following project property:- +# +# set_property compxlib.<simulator>_compiled_library_dir <path> [current_project] +# +# You can also point to the simulation library by either setting the 'lib_map_path' global +# variable in this script or specify it with the '-lib_map_path' switch while executing this +# script (type 'clk_wiz_0.sh -help' for more information). +# +# Note: For pure RTL based designs, the -lib_map_path switch can be specified later with the +# generated script, but if design is targetted for system simulation containing SystemC/C++/C +# sources, then the library path MUST be specified upfront when calling export_simulation. +# +# For more information, refer 'Vivado Design Suite User Guide:Logic simulation (UG900)' +# +#********************************************************************************************************** + +# catch pipeline exit status +set -Eeuo pipefail + +# script info +echo -e "clk_wiz_0.sh - Script generated by export_simulation (Vivado v2024.1 (64-bit)-id)\n" + +# main steps +run() +{ + check_args $* + setup + if [[ ($b_step == 1) ]]; then + case $step in + "compile" ) + init_lib + compile + ;; + "elaborate" ) + elaborate + ;; + "simulate" ) + simulate + ;; + * ) + echo -e "ERROR: Invalid or missing step '$step' (type \"./clk_wiz_0.sh -help\" for more information)\n" + exit 1 + esac + else + init_lib + compile + elaborate + simulate + fi +} + +# RUN_STEP: <compile> +compile() +{ + source compile.do 2>&1 | tee -a compile.log +} + +# RUN_STEP: <elaborate> +elaborate() +{ + source elaborate.do 2>&1 | tee elaborate.log +} + +# RUN_STEP: <simulate> +simulate() +{ + vsim -64 -c -do "do {simulate.do}" -l simulate.log +} + +# STEP: setup +setup() +{ + # delete previous files for a clean rerun + if [[ ($b_reset_run == 1) ]]; then + reset_run + echo -e "INFO: Simulation run files deleted.\n" + exit 0 + fi + + # delete previous log files + if [[ ($b_reset_log == 1) ]]; then + reset_log + echo -e "INFO: Simulation run log files deleted.\n" + exit 0 + fi + + # add any setup/initialization commands here:- + + # <user specific commands> + +} + +# simulator index file/library directory processing +init_lib() +{ + if [[ ($b_keep_index == 1) ]]; then + # keep previous simulator index file + true + else + # copy simulator index file to current directory + copy_setup_file + fi + + if [[ ($lib_map_path != "") ]]; then + ref_lib_dir=$lib_map_path + fi + + if [[ ($b_keep_index == 1) ]]; then + # do not recreate design library directories + true + else + # create design library directories + create_lib_dir + fi +} + +# copy modelsim.ini file +copy_setup_file() +{ + file="modelsim.ini" + if [[ ($lib_map_path != "") && !(-e $lib_map_path) ]]; then + echo -e "ERROR: Compiled simulation library directory path not specified or does not exist (type "./top.sh -help" for more information)\n" + fi + + if [[ ($lib_map_path != "") ]]; then + src_file="$lib_map_path/$file" + if [[ -e $src_file ]]; then + cp $src_file . + fi + fi +} + +# create design library directory +create_lib_dir() +{ + lib_dir="questa_lib" + if [[ -e $lib_dir ]]; then + rm -rf $lib_dir + fi + mkdir $lib_dir +} + +# delete generated data from the previous run +reset_run() +{ + files_to_remove=(compile.log elaborate.log simulate.log vsim.wlf questa_lib) + for (( i=0; i<${#files_to_remove[*]}; i++ )); do + file="${files_to_remove[i]}" + if [[ -e $file ]]; then + rm -rf $file + fi + done +} + +# delete generated log files from the previous run +reset_log() +{ + files_to_remove=(compile.log elaborate.log simulate.log) + for (( i=0; i<${#files_to_remove[*]}; i++ )); do + file="${files_to_remove[i]}" + if [[ -e $file ]]; then + rm -rf $file + fi + done +} + +# check switch argument value +check_arg_value() +{ + if [[ ($1 == "-step") && (($2 != "compile") && ($2 != "elaborate") && ($2 != "simulate")) ]];then + echo -e "ERROR: Invalid or missing step '$2' (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + if [[ ($1 == "-lib_map_path") && ($2 == "") ]];then + echo -e "ERROR: Simulation library directory path not specified (type \"./clk_wiz_0.sh -help\" for more information)\n" + exit 1 + fi +} + +# check command line arguments +check_args() +{ + arg_count=$# + if [[ ("$#" == 1) && (("$1" == "-help") || ("$1" == "-h")) ]]; then + usage + fi + while [[ "$#" -gt 0 ]]; do + case $1 in + -step) check_arg_value $1 $2;step=$2; b_step=1; shift;; + -lib_map_path) check_arg_value $1 $2;lib_map_path=$2; b_lib_map_path=1; shift;; + -gen_bypass) b_gen_bypass=1 ;; + -reset_run) b_reset_run=1 ;; + -reset_log) b_reset_log=1 ;; + -keep_index) b_keep_index=1 ;; + -noclean_files) b_noclean_files=1 ;; + -help|-h) ;; + *) echo -e "ERROR: Invalid option specified '$1' (type "./top.sh -help" for more information)\n"; exit 1 ;; + esac + shift + done + + # -reset_run is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_reset_run == 1) ]]; then + echo -e "ERROR: -reset_run switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -reset_log is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_reset_log == 1) ]]; then + echo -e "ERROR: -reset_log switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -keep_index is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_keep_index == 1) ]]; then + echo -e "ERROR: -keep_index switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -noclean_files is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_noclean_files == 1) ]]; then + echo -e "ERROR: -noclean_files switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi +} + +# script usage +usage() +{ + msg="Usage: clk_wiz_0.sh [-help]\n\ +Usage: clk_wiz_0.sh [-step]\n\ +Usage: clk_wiz_0.sh [-lib_map_path]\n\ +Usage: clk_wiz_0.sh [-reset_run]\n\ +Usage: clk_wiz_0.sh [-reset_log]\n\ +Usage: clk_wiz_0.sh [-keep_index]\n\ +Usage: clk_wiz_0.sh [-noclean_files]\n\n\ +[-help] -- Print help information for this script\n\n\ +[-step <name>] -- Execute specified step (compile, elaborate, simulate)\n\n\ +[-lib_map_path <path>] -- Compiled simulation library directory path. The simulation library is compiled\n\ +using the compile_simlib tcl command. Please see 'compile_simlib -help' for more information.\n\n\ +[-reset_run] -- Delete simulator generated data files from the previous run and recreate simulator setup\n\ +file/library mappings for a clean run. This switch will not execute steps defined in the script.\n\n\ +NOTE: To keep simulator index file settings from the previous run, use the -keep_index switch\n\ +NOTE: To regenerate simulator index file but keep the simulator generated files, use the -noclean_files switch\n\n\ +[-reset_log] -- Delete simulator generated log files from the previous run\n\n\ +[-keep_index] -- Keep simulator index file settings from the previous run\n\n\ +[-noclean_files] -- Reset previous run, but do not remove simulator generated files from the previous run\n" + echo -e $msg + exit 0 +} + +# initialize globals +step="" +lib_map_path="" +b_step=0 +b_lib_map_path=0 +b_gen_bypass=0 +b_reset_run=0 +b_reset_log=0 +b_keep_index=0 +b_noclean_files=0 + +# launch script +run $* diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/clk_wiz_0.udo b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/clk_wiz_0.udo new file mode 100644 index 0000000..e69de29 diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/compile.do b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/compile.do new file mode 100644 index 0000000..79ee207 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/compile.do @@ -0,0 +1,15 @@ +vlib questa_lib/work +vlib questa_lib/msim + +vlib questa_lib/msim/xil_defaultlib + +vmap xil_defaultlib questa_lib/msim/xil_defaultlib + +vlog -work xil_defaultlib -64 -incr -mfcu "+incdir+../../../ipstatic" \ +"../../../../../src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v" \ +"../../../../../src/ip/clk_wiz_0/clk_wiz_0.v" \ + + +vlog -work xil_defaultlib \ +"glbl.v" + diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/elaborate.do b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/elaborate.do new file mode 100644 index 0000000..c30c9f4 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/elaborate.do @@ -0,0 +1 @@ +vopt -64 -l elaborate.log +acc=npr -suppress 10016 -L xil_defaultlib -L unisims_ver -L unimacro_ver -L secureip -work xil_defaultlib xil_defaultlib.clk_wiz_0 xil_defaultlib.glbl -o clk_wiz_0_opt diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/file_info.txt b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/file_info.txt new file mode 100644 index 0000000..a75fafc --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/file_info.txt @@ -0,0 +1,3 @@ +clk_wiz_0_clk_wiz.v,verilog,xil_defaultlib,../../../../../src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v,incdir="../../../ipstatic"incdir="../../../ipstatic" +clk_wiz_0.v,verilog,xil_defaultlib,../../../../../src/ip/clk_wiz_0/clk_wiz_0.v,incdir="../../../ipstatic"incdir="../../../ipstatic" +glbl.v,Verilog,xil_defaultlib,glbl.v diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/glbl.v b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/glbl.v new file mode 100755 index 0000000..ed3b249 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/glbl.v @@ -0,0 +1,84 @@ +// $Header: /devl/xcs/repo/env/Databases/CAEInterfaces/verunilibs/data/glbl.v,v 1.14 2010/10/28 20:44:00 fphillip Exp $ +`ifndef GLBL +`define GLBL +`timescale 1 ps / 1 ps + +module glbl (); + + parameter ROC_WIDTH = 100000; + parameter TOC_WIDTH = 0; + parameter GRES_WIDTH = 10000; + parameter GRES_START = 10000; + +//-------- STARTUP Globals -------------- + wire GSR; + wire GTS; + wire GWE; + wire PRLD; + wire GRESTORE; + tri1 p_up_tmp; + tri (weak1, strong0) PLL_LOCKG = p_up_tmp; + + wire PROGB_GLBL; + wire CCLKO_GLBL; + wire FCSBO_GLBL; + wire [3:0] DO_GLBL; + wire [3:0] DI_GLBL; + + reg GSR_int; + reg GTS_int; + reg PRLD_int; + reg GRESTORE_int; + +//-------- JTAG Globals -------------- + wire JTAG_TDO_GLBL; + wire JTAG_TCK_GLBL; + wire JTAG_TDI_GLBL; + wire JTAG_TMS_GLBL; + wire JTAG_TRST_GLBL; + + reg JTAG_CAPTURE_GLBL; + reg JTAG_RESET_GLBL; + reg JTAG_SHIFT_GLBL; + reg JTAG_UPDATE_GLBL; + reg JTAG_RUNTEST_GLBL; + + reg JTAG_SEL1_GLBL = 0; + reg JTAG_SEL2_GLBL = 0 ; + reg JTAG_SEL3_GLBL = 0; + reg JTAG_SEL4_GLBL = 0; + + reg JTAG_USER_TDO1_GLBL = 1'bz; + reg JTAG_USER_TDO2_GLBL = 1'bz; + reg JTAG_USER_TDO3_GLBL = 1'bz; + reg JTAG_USER_TDO4_GLBL = 1'bz; + + assign (strong1, weak0) GSR = GSR_int; + assign (strong1, weak0) GTS = GTS_int; + assign (weak1, weak0) PRLD = PRLD_int; + assign (strong1, weak0) GRESTORE = GRESTORE_int; + + initial begin + GSR_int = 1'b1; + PRLD_int = 1'b1; + #(ROC_WIDTH) + GSR_int = 1'b0; + PRLD_int = 1'b0; + end + + initial begin + GTS_int = 1'b1; + #(TOC_WIDTH) + GTS_int = 1'b0; + end + + initial begin + GRESTORE_int = 1'b0; + #(GRES_START); + GRESTORE_int = 1'b1; + #(GRES_WIDTH); + GRESTORE_int = 1'b0; + end + +endmodule +`endif diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/simulate.do b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/simulate.do new file mode 100644 index 0000000..81ab20f --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/simulate.do @@ -0,0 +1,19 @@ +onbreak {quit -f} +onerror {quit -f} + +vsim -lib xil_defaultlib clk_wiz_0_opt + +set NumericStdNoWarnings 1 +set StdArithNoWarnings 1 + +do {wave.do} + +view wave +view structure +view signals + +do {clk_wiz_0.udo} + +run 1000ns + +quit -force diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/wave.do b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/wave.do new file mode 100644 index 0000000..70157b0 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/questa/wave.do @@ -0,0 +1,2 @@ +add wave * +add wave /glbl/GSR diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/README.txt b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/README.txt new file mode 100644 index 0000000..9e170f5 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/README.txt @@ -0,0 +1,50 @@ +################################################################################ +# Vivado (TM) v2024.1 (64-bit) +# +# README.txt: Please read the sections below to understand the steps required to +# run the exported script and how to fetch design source file details +# from the file_info.txt file. +# +# Generated by export_simulation on Wed Feb 26 12:12:47 CET 2025 +# +################################################################################ + +1. Steps to run the generated simulation script + +From the shell prompt in the current directory, issue the following command:- + +./clk_wiz_0.sh + +This command will launch the 'compile', 'elaborate' and 'simulate' functions +implemented in the script file for the 3-step flow. These functions are called +from the main 'run' function in the script file. + +The 'run' function first calls the 'check_args' function, the purpose of which +is to verify the generated script arguments and print error if incorrect switch +is specified. The 'run' function then calls the 'setup' function, the purpose of +which is to specify custom or initialization commands. The function also executes +following sub-functions:- +'reset_run' if -reset_run switch is specified. +'reset_log' if -reset_log switch is specified. + +The purpose of 'reset_run' function' is to delete the simulator generated design +data from the previous run and the purpose of 'reset_log' function' is to delete +the simulator generated log files. + +The 'run' function then calls the 'init_lib' function, the purpose of which is to +create design library mappings and directories. This function is called before the +'compile' step. By default, if '-step' switch is specified with the script then the +script will execute that specfic step, else it will execute all steps applicable +for the target simulator. + +For more information on the script, please type './clk_wiz_0.sh -help' + +2. Design source file information + +export_simulation generates a 'file_info.txt' file that contains design file information +based on the compile order when export_simulation was executed from Vivado. The file +contains information about the file name, type, library it is compiled into, whether +it is part of the IP, associated library, file path information in a comma separated +format. This file can be parsed to extract the required information for generating a +custom script or can be read from verification test infra. + diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/clk_wiz_0.sh b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/clk_wiz_0.sh new file mode 100755 index 0000000..b0e1770 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/clk_wiz_0.sh @@ -0,0 +1,264 @@ +#!/usr/bin/env bash +#********************************************************************************************************** +# Vivado (TM) v2024.1 (64-bit) +# +# Script generated by Vivado on Wed Feb 26 12:12:47 CET 2025 +# SW Build 5076996 on Wed May 22 18:36:09 MDT 2024 +# +# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. +# Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. +# +# Filename : clk_wiz_0.sh +# Simulator : Aldec Riviera-PRO Simulator +# Description : Simulation script generated by export_simulation Tcl command +# Purpose : Run 'compile', 'elaborate', 'simulate' steps for compiling, elaborating and simulating the +# design. The script will copy the library mapping file from the compiled library directory, +# create design library directories and library mappings in the mapping file. +# +# Usage : clk_wiz_0.sh +# clk_wiz_0.sh [-lib_map_path] [-step] [-keep_index] [-noclean_files]* +# clk_wiz_0.sh [-reset_run] +# clk_wiz_0.sh [-reset_log] +# clk_wiz_0.sh [-help] +# +# * The -noclean_files switch is deprecated and will not peform any function (by default, the +# simulator generated files will not be removed unless -reset_run switch is used) +# +# Prerequisite : Before running export_simulation, you must first compile the AMD simulation library +# using the 'compile_simlib' Tcl command (for more information, run 'compile_simlib -help' +# command in the Vivado Tcl shell). After compiling the library, specify the -lib_map_path +# switch with the directory path where the library is created while generating the script +# with export_simulation. +# +# Alternatively, you can set the library path by setting the following project property:- +# +# set_property compxlib.<simulator>_compiled_library_dir <path> [current_project] +# +# You can also point to the simulation library by either setting the 'lib_map_path' global +# variable in this script or specify it with the '-lib_map_path' switch while executing this +# script (type 'clk_wiz_0.sh -help' for more information). +# +# Note: For pure RTL based designs, the -lib_map_path switch can be specified later with the +# generated script, but if design is targetted for system simulation containing SystemC/C++/C +# sources, then the library path MUST be specified upfront when calling export_simulation. +# +# For more information, refer 'Vivado Design Suite User Guide:Logic simulation (UG900)' +# +#********************************************************************************************************** + +# catch pipeline exit status +set -Eeuo pipefail + +# script info +echo -e "clk_wiz_0.sh - Script generated by export_simulation (Vivado v2024.1 (64-bit)-id)\n" + +# main steps +run() +{ + check_args $* + setup + if [[ ($b_step == 1) ]]; then + case $step in + "compile" ) + init_lib + compile + ;; + "simulate" ) + simulate + ;; + * ) + echo -e "ERROR: Invalid or missing step '$step' (type \"./clk_wiz_0.sh -help\" for more information)\n" + exit 1 + esac + else + init_lib + compile + simulate + fi +} + +# RUN_STEP: <compile> +compile() +{ + runvsimsa -do "do {compile.do}" 2>&1 | tee -a compile.log +} + +# RUN_STEP: <simulate> +simulate() +{ + runvsimsa -l simulate.log -do "do {simulate.do}" +} + +# STEP: setup +setup() +{ + # delete previous files for a clean rerun + if [[ ($b_reset_run == 1) ]]; then + reset_run + echo -e "INFO: Simulation run files deleted.\n" + exit 0 + fi + + # delete previous log files + if [[ ($b_reset_log == 1) ]]; then + reset_log + echo -e "INFO: Simulation run log files deleted.\n" + exit 0 + fi + + # add any setup/initialization commands here:- + + # <user specific commands> + +} + +# simulator index file/library directory processing +init_lib() +{ + if [[ ($b_keep_index == 1) ]]; then + # keep previous design library mappings + true + else + # map simulator index file + map_setup_file + fi +} + +# map library.cfg file +map_setup_file() +{ + file="library.cfg" + if [[ ($lib_map_path != "") && !(-e $lib_map_path) ]]; then + echo -e "ERROR: Compiled simulation library directory path not specified or does not exist (type "./top.sh -help" for more information)\n" + fi + if [[ ($lib_map_path != "") ]]; then + src_file="$lib_map_path/$file" + if [[ -e $src_file ]]; then + vmap -link $lib_map_path + fi + fi +} + +# delete generated data from the previous run +reset_run() +{ + files_to_remove=(compile.log elaboration.log simulate.log dataset.asdb work riviera) + for (( i=0; i<${#files_to_remove[*]}; i++ )); do + file="${files_to_remove[i]}" + if [[ -e $file ]]; then + rm -rf $file + fi + done +} + +# delete generated log files from the previous run +reset_log() +{ + files_to_remove=(compile.log elaboration.log simulate.log dataset.asdb) + for (( i=0; i<${#files_to_remove[*]}; i++ )); do + file="${files_to_remove[i]}" + if [[ -e $file ]]; then + rm -rf $file + fi + done +} + +# check switch argument value +check_arg_value() +{ + if [[ ($1 == "-step") && (($2 != "compile") && ($2 != "simulate")) ]];then + echo -e "ERROR: Invalid or missing step '$2' (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + if [[ ($1 == "-lib_map_path") && ($2 == "") ]];then + echo -e "ERROR: Simulation library directory path not specified (type \"./clk_wiz_0.sh -help\" for more information)\n" + exit 1 + fi +} + +# check command line arguments +check_args() +{ + arg_count=$# + if [[ ("$#" == 1) && (("$1" == "-help") || ("$1" == "-h")) ]]; then + usage + fi + while [[ "$#" -gt 0 ]]; do + case $1 in + -step) check_arg_value $1 $2;step=$2; b_step=1; shift;; + -lib_map_path) check_arg_value $1 $2;lib_map_path=$2; b_lib_map_path=1; shift;; + -gen_bypass) b_gen_bypass=1 ;; + -reset_run) b_reset_run=1 ;; + -reset_log) b_reset_log=1 ;; + -keep_index) b_keep_index=1 ;; + -noclean_files) b_noclean_files=1 ;; + -help|-h) ;; + *) echo -e "ERROR: Invalid option specified '$1' (type "./top.sh -help" for more information)\n"; exit 1 ;; + esac + shift + done + + # -reset_run is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_reset_run == 1) ]]; then + echo -e "ERROR: -reset_run switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -reset_log is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_reset_log == 1) ]]; then + echo -e "ERROR: -reset_log switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -keep_index is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_keep_index == 1) ]]; then + echo -e "ERROR: -keep_index switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -noclean_files is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_noclean_files == 1) ]]; then + echo -e "ERROR: -noclean_files switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi +} + +# script usage +usage() +{ + msg="Usage: clk_wiz_0.sh [-help]\n\ +Usage: clk_wiz_0.sh [-step]\n\ +Usage: clk_wiz_0.sh [-lib_map_path]\n\ +Usage: clk_wiz_0.sh [-reset_run]\n\ +Usage: clk_wiz_0.sh [-reset_log]\n\ +Usage: clk_wiz_0.sh [-keep_index]\n\ +Usage: clk_wiz_0.sh [-noclean_files]\n\n\ +[-help] -- Print help information for this script\n\n\ +[-step <name>] -- Execute specified step (compile, simulate)\n\n\ +[-lib_map_path <path>] -- Compiled simulation library directory path. The simulation library is compiled\n\ +using the compile_simlib tcl command. Please see 'compile_simlib -help' for more information.\n\n\ +[-reset_run] -- Delete simulator generated data files from the previous run and recreate simulator setup\n\ +file/library mappings for a clean run. This switch will not execute steps defined in the script.\n\n\ +NOTE: To keep simulator index file settings from the previous run, use the -keep_index switch\n\ +NOTE: To regenerate simulator index file but keep the simulator generated files, use the -noclean_files switch\n\n\ +[-reset_log] -- Delete simulator generated log files from the previous run\n\n\ +[-keep_index] -- Keep simulator index file settings from the previous run\n\n\ +[-noclean_files] -- Reset previous run, but do not remove simulator generated files from the previous run\n" + echo -e $msg + exit 0 +} + +# initialize globals +step="" +lib_map_path="" +b_step=0 +b_lib_map_path=0 +b_gen_bypass=0 +b_reset_run=0 +b_reset_log=0 +b_keep_index=0 +b_noclean_files=0 + +# launch script +run $* diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/clk_wiz_0.udo b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/clk_wiz_0.udo new file mode 100644 index 0000000..e69de29 diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/compile.do b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/compile.do new file mode 100644 index 0000000..25d9ce9 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/compile.do @@ -0,0 +1,18 @@ +transcript off +onbreak {quit -force} +onerror {quit -force} +transcript on + +vlib work +vlib riviera/xil_defaultlib + +vmap xil_defaultlib riviera/xil_defaultlib + +vlog -work xil_defaultlib -incr -v2k5 "+incdir+../../../ipstatic" -l xil_defaultlib \ +"../../../../../src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v" \ +"../../../../../src/ip/clk_wiz_0/clk_wiz_0.v" \ + + +vlog -work xil_defaultlib \ +"glbl.v" + diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/file_info.txt b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/file_info.txt new file mode 100644 index 0000000..a75fafc --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/file_info.txt @@ -0,0 +1,3 @@ +clk_wiz_0_clk_wiz.v,verilog,xil_defaultlib,../../../../../src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v,incdir="../../../ipstatic"incdir="../../../ipstatic" +clk_wiz_0.v,verilog,xil_defaultlib,../../../../../src/ip/clk_wiz_0/clk_wiz_0.v,incdir="../../../ipstatic"incdir="../../../ipstatic" +glbl.v,Verilog,xil_defaultlib,glbl.v diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/glbl.v b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/glbl.v new file mode 100755 index 0000000..ed3b249 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/glbl.v @@ -0,0 +1,84 @@ +// $Header: /devl/xcs/repo/env/Databases/CAEInterfaces/verunilibs/data/glbl.v,v 1.14 2010/10/28 20:44:00 fphillip Exp $ +`ifndef GLBL +`define GLBL +`timescale 1 ps / 1 ps + +module glbl (); + + parameter ROC_WIDTH = 100000; + parameter TOC_WIDTH = 0; + parameter GRES_WIDTH = 10000; + parameter GRES_START = 10000; + +//-------- STARTUP Globals -------------- + wire GSR; + wire GTS; + wire GWE; + wire PRLD; + wire GRESTORE; + tri1 p_up_tmp; + tri (weak1, strong0) PLL_LOCKG = p_up_tmp; + + wire PROGB_GLBL; + wire CCLKO_GLBL; + wire FCSBO_GLBL; + wire [3:0] DO_GLBL; + wire [3:0] DI_GLBL; + + reg GSR_int; + reg GTS_int; + reg PRLD_int; + reg GRESTORE_int; + +//-------- JTAG Globals -------------- + wire JTAG_TDO_GLBL; + wire JTAG_TCK_GLBL; + wire JTAG_TDI_GLBL; + wire JTAG_TMS_GLBL; + wire JTAG_TRST_GLBL; + + reg JTAG_CAPTURE_GLBL; + reg JTAG_RESET_GLBL; + reg JTAG_SHIFT_GLBL; + reg JTAG_UPDATE_GLBL; + reg JTAG_RUNTEST_GLBL; + + reg JTAG_SEL1_GLBL = 0; + reg JTAG_SEL2_GLBL = 0 ; + reg JTAG_SEL3_GLBL = 0; + reg JTAG_SEL4_GLBL = 0; + + reg JTAG_USER_TDO1_GLBL = 1'bz; + reg JTAG_USER_TDO2_GLBL = 1'bz; + reg JTAG_USER_TDO3_GLBL = 1'bz; + reg JTAG_USER_TDO4_GLBL = 1'bz; + + assign (strong1, weak0) GSR = GSR_int; + assign (strong1, weak0) GTS = GTS_int; + assign (weak1, weak0) PRLD = PRLD_int; + assign (strong1, weak0) GRESTORE = GRESTORE_int; + + initial begin + GSR_int = 1'b1; + PRLD_int = 1'b1; + #(ROC_WIDTH) + GSR_int = 1'b0; + PRLD_int = 1'b0; + end + + initial begin + GTS_int = 1'b1; + #(TOC_WIDTH) + GTS_int = 1'b0; + end + + initial begin + GRESTORE_int = 1'b0; + #(GRES_START); + GRESTORE_int = 1'b1; + #(GRES_WIDTH); + GRESTORE_int = 1'b0; + end + +endmodule +`endif diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/simulate.do b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/simulate.do new file mode 100644 index 0000000..5dfa2cc --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/riviera/simulate.do @@ -0,0 +1,14 @@ +transcript off +onbreak {quit -force} +onerror {quit -force} +transcript on + +asim +access +r +m+clk_wiz_0 -L xil_defaultlib -L unisims_ver -L unimacro_ver -L secureip -O5 xil_defaultlib.clk_wiz_0 xil_defaultlib.glbl + +do {clk_wiz_0.udo} + +run 1000ns + +endsim + +quit -force diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/README.txt b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/README.txt new file mode 100644 index 0000000..9e170f5 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/README.txt @@ -0,0 +1,50 @@ +################################################################################ +# Vivado (TM) v2024.1 (64-bit) +# +# README.txt: Please read the sections below to understand the steps required to +# run the exported script and how to fetch design source file details +# from the file_info.txt file. +# +# Generated by export_simulation on Wed Feb 26 12:12:47 CET 2025 +# +################################################################################ + +1. Steps to run the generated simulation script + +From the shell prompt in the current directory, issue the following command:- + +./clk_wiz_0.sh + +This command will launch the 'compile', 'elaborate' and 'simulate' functions +implemented in the script file for the 3-step flow. These functions are called +from the main 'run' function in the script file. + +The 'run' function first calls the 'check_args' function, the purpose of which +is to verify the generated script arguments and print error if incorrect switch +is specified. The 'run' function then calls the 'setup' function, the purpose of +which is to specify custom or initialization commands. The function also executes +following sub-functions:- +'reset_run' if -reset_run switch is specified. +'reset_log' if -reset_log switch is specified. + +The purpose of 'reset_run' function' is to delete the simulator generated design +data from the previous run and the purpose of 'reset_log' function' is to delete +the simulator generated log files. + +The 'run' function then calls the 'init_lib' function, the purpose of which is to +create design library mappings and directories. This function is called before the +'compile' step. By default, if '-step' switch is specified with the script then the +script will execute that specfic step, else it will execute all steps applicable +for the target simulator. + +For more information on the script, please type './clk_wiz_0.sh -help' + +2. Design source file information + +export_simulation generates a 'file_info.txt' file that contains design file information +based on the compile order when export_simulation was executed from Vivado. The file +contains information about the file name, type, library it is compiled into, whether +it is part of the IP, associated library, file path information in a comma separated +format. This file can be parsed to extract the required information for generating a +custom script or can be read from verification test infra. + diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/clk_wiz_0.sh b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/clk_wiz_0.sh new file mode 100755 index 0000000..b578bb1 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/clk_wiz_0.sh @@ -0,0 +1,337 @@ +#!/usr/bin/env bash +#********************************************************************************************************** +# Vivado (TM) v2024.1 (64-bit) +# +# Script generated by Vivado on Wed Feb 26 12:12:47 CET 2025 +# SW Build 5076996 on Wed May 22 18:36:09 MDT 2024 +# +# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. +# Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. +# +# Filename : clk_wiz_0.sh +# Simulator : Synopsys Verilog Compiler Simulator +# Description : Simulation script generated by export_simulation Tcl command +# Purpose : Run 'compile', 'elaborate', 'simulate' steps for compiling, elaborating and simulating the +# design. The script will copy the library mapping file from the compiled library directory, +# create design library directories and library mappings in the mapping file. +# +# Usage : clk_wiz_0.sh +# clk_wiz_0.sh [-lib_map_path] [-step] [-keep_index] [-noclean_files]* +# clk_wiz_0.sh [-reset_run] +# clk_wiz_0.sh [-reset_log] +# clk_wiz_0.sh [-help] +# +# * The -noclean_files switch is deprecated and will not peform any function (by default, the +# simulator generated files will not be removed unless -reset_run switch is used) +# +# Prerequisite : Before running export_simulation, you must first compile the AMD simulation library +# using the 'compile_simlib' Tcl command (for more information, run 'compile_simlib -help' +# command in the Vivado Tcl shell). After compiling the library, specify the -lib_map_path +# switch with the directory path where the library is created while generating the script +# with export_simulation. +# +# Alternatively, you can set the library path by setting the following project property:- +# +# set_property compxlib.<simulator>_compiled_library_dir <path> [current_project] +# +# You can also point to the simulation library by either setting the 'lib_map_path' global +# variable in this script or specify it with the '-lib_map_path' switch while executing this +# script (type 'clk_wiz_0.sh -help' for more information). +# +# Note: For pure RTL based designs, the -lib_map_path switch can be specified later with the +# generated script, but if design is targetted for system simulation containing SystemC/C++/C +# sources, then the library path MUST be specified upfront when calling export_simulation. +# +# For more information, refer 'Vivado Design Suite User Guide:Logic simulation (UG900)' +# +#********************************************************************************************************** + +# catch pipeline exit status +set -Eeuo pipefail + +# set vhdlan compile options +vhdlan_opts="-full64 -l .tmp_log" + +# set vlogan compile options +vlogan_opts="-full64 -l .tmp_log" + +# set vcs elaboration options +vcs_elab_opts="-full64 -debug_acc+pp+dmptf -t ps -licqueue -l elaborate.log" + +# set vcs simulation options +vcs_sim_opts="-ucli -licqueue -l simulate.log " + +# set design libraries +design_libs=(xil_defaultlib) + +# simulation root library directory +sim_lib_dir="vcs_lib" + +# script info +echo -e "clk_wiz_0.sh - Script generated by export_simulation (Vivado v2024.1 (64-bit)-id)\n" + +# main steps +run() +{ + check_args $* + setup + if [[ ($b_step == 1) ]]; then + case $step in + "compile" ) + init_lib + compile + ;; + "elaborate" ) + elaborate + ;; + "simulate" ) + simulate + ;; + * ) + echo -e "ERROR: Invalid or missing step '$step' (type \"./clk_wiz_0.sh -help\" for more information)\n" + exit 1 + esac + else + init_lib + compile + elaborate + simulate + fi +} + +# RUN_STEP: <compile> +compile() +{ + vlogan -work xil_defaultlib $vlogan_opts +v2k +incdir+"../../../ipstatic" \ + "../../../../../src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v" \ + "../../../../../src/ip/clk_wiz_0/clk_wiz_0.v" \ + 2>&1 | tee compile.log; cat .tmp_log > vlogan.log 2>/dev/null + + vlogan -work xil_defaultlib $vlogan_opts +v2k \ + glbl.v \ + 2>&1 | tee -a compile.log; cat .tmp_log >> vlogan.log 2>/dev/null +} + +# RUN_STEP: <elaborate> +elaborate() +{ + vcs $vcs_elab_opts xil_defaultlib.clk_wiz_0 xil_defaultlib.glbl -o clk_wiz_0_simv +} + +# RUN_STEP: <simulate> +simulate() +{ + ./clk_wiz_0_simv $vcs_sim_opts -do simulate.do +} + +# STEP: setup +setup() +{ + # delete previous files for a clean rerun + if [[ ($b_reset_run == 1) ]]; then + reset_run + echo -e "INFO: Simulation run files deleted.\n" + exit 0 + fi + + # delete previous log files + if [[ ($b_reset_log == 1) ]]; then + reset_log + echo -e "INFO: Simulation run log files deleted.\n" + exit 0 + fi + + # add any setup/initialization commands here:- + + # <user specific commands> + +} + +# simulator index file/library directory processing +init_lib() +{ + if [[ ($b_keep_index == 1) ]]; then + # keep previous design library mappings + true + else + # define design library mappings + create_lib_mappings + fi + + if [[ ($b_keep_index == 1) ]]; then + # do not recreate design library directories + true + else + # create design library directories + create_lib_dir + fi +} + +# define design library mappings +create_lib_mappings() +{ + file="synopsys_sim.setup" + if [[ -e $file ]]; then + if [[ ($lib_map_path == "") ]]; then + return + else + rm -rf $file + fi + fi + + touch $file + + if [[ ($lib_map_path != "") && !(-e $lib_map_path) ]]; then + echo -e "ERROR: Compiled simulation library directory path not specified or does not exist (type "./top.sh -help" for more information)\n" + fi + + for (( i=0; i<${#design_libs[*]}; i++ )); do + lib="${design_libs[i]}" + mapping="$lib:$sim_lib_dir/$lib" + echo $mapping >> $file + done + + if [[ ($lib_map_path != "") ]]; then + incl_ref="OTHERS=$lib_map_path/synopsys_sim.setup" + echo $incl_ref >> $file + fi +} + +# create design library directory +create_lib_dir() +{ + if [[ -e $sim_lib_dir ]]; then + rm -rf $sim_lib_dir + fi + for (( i=0; i<${#design_libs[*]}; i++ )); do + lib="${design_libs[i]}" + lib_dir="$sim_lib_dir/$lib" + if [[ ! -e $lib_dir ]]; then + mkdir -p $lib_dir + fi + done +} + +# delete generated data from the previous run +reset_run() +{ + files_to_remove=(ucli.key clk_wiz_0_simv vlogan.log vhdlan.log compile.log elaborate.log simulate.log .tmp_log .vlogansetup.env .vlogansetup.args .vcs_lib_lock scirocco_command.log lib_sc.so 64 AN.DB csrc clk_wiz_0_simv.daidir vcs_lib c.obj) + for (( i=0; i<${#files_to_remove[*]}; i++ )); do + file="${files_to_remove[i]}" + if [[ -e $file ]]; then + rm -rf $file + fi + done +} + +# delete generated log files from the previous run +reset_log() +{ + files_to_remove=(vlogan.log vhdlan.log compile.log elaborate.log simulate.log .tmp_log) + for (( i=0; i<${#files_to_remove[*]}; i++ )); do + file="${files_to_remove[i]}" + if [[ -e $file ]]; then + rm -rf $file + fi + done +} + +# check switch argument value +check_arg_value() +{ + if [[ ($1 == "-step") && (($2 != "compile") && ($2 != "elaborate") && ($2 != "simulate")) ]];then + echo -e "ERROR: Invalid or missing step '$2' (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + if [[ ($1 == "-lib_map_path") && ($2 == "") ]];then + echo -e "ERROR: Simulation library directory path not specified (type \"./clk_wiz_0.sh -help\" for more information)\n" + exit 1 + fi +} + +# check command line arguments +check_args() +{ + arg_count=$# + if [[ ("$#" == 1) && (("$1" == "-help") || ("$1" == "-h")) ]]; then + usage + fi + while [[ "$#" -gt 0 ]]; do + case $1 in + -step) check_arg_value $1 $2;step=$2; b_step=1; shift;; + -lib_map_path) check_arg_value $1 $2;lib_map_path=$2; b_lib_map_path=1; shift;; + -gen_bypass) b_gen_bypass=1 ;; + -reset_run) b_reset_run=1 ;; + -reset_log) b_reset_log=1 ;; + -keep_index) b_keep_index=1 ;; + -noclean_files) b_noclean_files=1 ;; + -help|-h) ;; + *) echo -e "ERROR: Invalid option specified '$1' (type "./top.sh -help" for more information)\n"; exit 1 ;; + esac + shift + done + + # -reset_run is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_reset_run == 1) ]]; then + echo -e "ERROR: -reset_run switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -reset_log is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_reset_log == 1) ]]; then + echo -e "ERROR: -reset_log switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -keep_index is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_keep_index == 1) ]]; then + echo -e "ERROR: -keep_index switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -noclean_files is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_noclean_files == 1) ]]; then + echo -e "ERROR: -noclean_files switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi +} + +# script usage +usage() +{ + msg="Usage: clk_wiz_0.sh [-help]\n\ +Usage: clk_wiz_0.sh [-step]\n\ +Usage: clk_wiz_0.sh [-lib_map_path]\n\ +Usage: clk_wiz_0.sh [-reset_run]\n\ +Usage: clk_wiz_0.sh [-reset_log]\n\ +Usage: clk_wiz_0.sh [-keep_index]\n\ +Usage: clk_wiz_0.sh [-noclean_files]\n\n\ +[-help] -- Print help information for this script\n\n\ +[-step <name>] -- Execute specified step (compile, elaborate, simulate)\n\n\ +[-lib_map_path <path>] -- Compiled simulation library directory path. The simulation library is compiled\n\ +using the compile_simlib tcl command. Please see 'compile_simlib -help' for more information.\n\n\ +[-reset_run] -- Delete simulator generated data files from the previous run and recreate simulator setup\n\ +file/library mappings for a clean run. This switch will not execute steps defined in the script.\n\n\ +NOTE: To keep simulator index file settings from the previous run, use the -keep_index switch\n\ +NOTE: To regenerate simulator index file but keep the simulator generated files, use the -noclean_files switch\n\n\ +[-reset_log] -- Delete simulator generated log files from the previous run\n\n\ +[-keep_index] -- Keep simulator index file settings from the previous run\n\n\ +[-noclean_files] -- Reset previous run, but do not remove simulator generated files from the previous run\n" + echo -e $msg + exit 0 +} + +# initialize globals +step="" +lib_map_path="" +b_step=0 +b_lib_map_path=0 +b_gen_bypass=0 +b_reset_run=0 +b_reset_log=0 +b_keep_index=0 +b_noclean_files=0 + +# launch script +run $* diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/file_info.txt b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/file_info.txt new file mode 100644 index 0000000..a75fafc --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/file_info.txt @@ -0,0 +1,3 @@ +clk_wiz_0_clk_wiz.v,verilog,xil_defaultlib,../../../../../src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v,incdir="../../../ipstatic"incdir="../../../ipstatic" +clk_wiz_0.v,verilog,xil_defaultlib,../../../../../src/ip/clk_wiz_0/clk_wiz_0.v,incdir="../../../ipstatic"incdir="../../../ipstatic" +glbl.v,Verilog,xil_defaultlib,glbl.v diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/glbl.v b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/glbl.v new file mode 100755 index 0000000..ed3b249 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/glbl.v @@ -0,0 +1,84 @@ +// $Header: /devl/xcs/repo/env/Databases/CAEInterfaces/verunilibs/data/glbl.v,v 1.14 2010/10/28 20:44:00 fphillip Exp $ +`ifndef GLBL +`define GLBL +`timescale 1 ps / 1 ps + +module glbl (); + + parameter ROC_WIDTH = 100000; + parameter TOC_WIDTH = 0; + parameter GRES_WIDTH = 10000; + parameter GRES_START = 10000; + +//-------- STARTUP Globals -------------- + wire GSR; + wire GTS; + wire GWE; + wire PRLD; + wire GRESTORE; + tri1 p_up_tmp; + tri (weak1, strong0) PLL_LOCKG = p_up_tmp; + + wire PROGB_GLBL; + wire CCLKO_GLBL; + wire FCSBO_GLBL; + wire [3:0] DO_GLBL; + wire [3:0] DI_GLBL; + + reg GSR_int; + reg GTS_int; + reg PRLD_int; + reg GRESTORE_int; + +//-------- JTAG Globals -------------- + wire JTAG_TDO_GLBL; + wire JTAG_TCK_GLBL; + wire JTAG_TDI_GLBL; + wire JTAG_TMS_GLBL; + wire JTAG_TRST_GLBL; + + reg JTAG_CAPTURE_GLBL; + reg JTAG_RESET_GLBL; + reg JTAG_SHIFT_GLBL; + reg JTAG_UPDATE_GLBL; + reg JTAG_RUNTEST_GLBL; + + reg JTAG_SEL1_GLBL = 0; + reg JTAG_SEL2_GLBL = 0 ; + reg JTAG_SEL3_GLBL = 0; + reg JTAG_SEL4_GLBL = 0; + + reg JTAG_USER_TDO1_GLBL = 1'bz; + reg JTAG_USER_TDO2_GLBL = 1'bz; + reg JTAG_USER_TDO3_GLBL = 1'bz; + reg JTAG_USER_TDO4_GLBL = 1'bz; + + assign (strong1, weak0) GSR = GSR_int; + assign (strong1, weak0) GTS = GTS_int; + assign (weak1, weak0) PRLD = PRLD_int; + assign (strong1, weak0) GRESTORE = GRESTORE_int; + + initial begin + GSR_int = 1'b1; + PRLD_int = 1'b1; + #(ROC_WIDTH) + GSR_int = 1'b0; + PRLD_int = 1'b0; + end + + initial begin + GTS_int = 1'b1; + #(TOC_WIDTH) + GTS_int = 1'b0; + end + + initial begin + GRESTORE_int = 1'b0; + #(GRES_START); + GRESTORE_int = 1'b1; + #(GRES_WIDTH); + GRESTORE_int = 1'b0; + end + +endmodule +`endif diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/simulate.do b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/simulate.do new file mode 100644 index 0000000..b77c6f1 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/vcs/simulate.do @@ -0,0 +1,2 @@ +run 1000ns +quit diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/README.txt b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/README.txt new file mode 100644 index 0000000..9e170f5 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/README.txt @@ -0,0 +1,50 @@ +################################################################################ +# Vivado (TM) v2024.1 (64-bit) +# +# README.txt: Please read the sections below to understand the steps required to +# run the exported script and how to fetch design source file details +# from the file_info.txt file. +# +# Generated by export_simulation on Wed Feb 26 12:12:47 CET 2025 +# +################################################################################ + +1. Steps to run the generated simulation script + +From the shell prompt in the current directory, issue the following command:- + +./clk_wiz_0.sh + +This command will launch the 'compile', 'elaborate' and 'simulate' functions +implemented in the script file for the 3-step flow. These functions are called +from the main 'run' function in the script file. + +The 'run' function first calls the 'check_args' function, the purpose of which +is to verify the generated script arguments and print error if incorrect switch +is specified. The 'run' function then calls the 'setup' function, the purpose of +which is to specify custom or initialization commands. The function also executes +following sub-functions:- +'reset_run' if -reset_run switch is specified. +'reset_log' if -reset_log switch is specified. + +The purpose of 'reset_run' function' is to delete the simulator generated design +data from the previous run and the purpose of 'reset_log' function' is to delete +the simulator generated log files. + +The 'run' function then calls the 'init_lib' function, the purpose of which is to +create design library mappings and directories. This function is called before the +'compile' step. By default, if '-step' switch is specified with the script then the +script will execute that specfic step, else it will execute all steps applicable +for the target simulator. + +For more information on the script, please type './clk_wiz_0.sh -help' + +2. Design source file information + +export_simulation generates a 'file_info.txt' file that contains design file information +based on the compile order when export_simulation was executed from Vivado. The file +contains information about the file name, type, library it is compiled into, whether +it is part of the IP, associated library, file path information in a comma separated +format. This file can be parsed to extract the required information for generating a +custom script or can be read from verification test infra. + diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/clk_wiz_0.sh b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/clk_wiz_0.sh new file mode 100755 index 0000000..028351f --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/clk_wiz_0.sh @@ -0,0 +1,343 @@ +#!/usr/bin/env bash +#********************************************************************************************************** +# Vivado (TM) v2024.1 (64-bit) +# +# Script generated by Vivado on Wed Feb 26 12:12:47 CET 2025 +# SW Build 5076996 on Wed May 22 18:36:09 MDT 2024 +# +# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. +# Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. +# +# Filename : clk_wiz_0.sh +# Simulator : Cadence Xcelium Parallel Simulator +# Description : Simulation script generated by export_simulation Tcl command +# Purpose : Run 'compile', 'elaborate', 'simulate' steps for compiling, elaborating and simulating the +# design. The script will copy the library mapping file from the compiled library directory, +# create design library directories and library mappings in the mapping file. +# +# Usage : clk_wiz_0.sh +# clk_wiz_0.sh [-lib_map_path] [-step] [-keep_index] [-noclean_files]* +# clk_wiz_0.sh [-reset_run] +# clk_wiz_0.sh [-reset_log] +# clk_wiz_0.sh [-help] +# +# * The -noclean_files switch is deprecated and will not peform any function (by default, the +# simulator generated files will not be removed unless -reset_run switch is used) +# +# Prerequisite : Before running export_simulation, you must first compile the AMD simulation library +# using the 'compile_simlib' Tcl command (for more information, run 'compile_simlib -help' +# command in the Vivado Tcl shell). After compiling the library, specify the -lib_map_path +# switch with the directory path where the library is created while generating the script +# with export_simulation. +# +# Alternatively, you can set the library path by setting the following project property:- +# +# set_property compxlib.<simulator>_compiled_library_dir <path> [current_project] +# +# You can also point to the simulation library by either setting the 'lib_map_path' global +# variable in this script or specify it with the '-lib_map_path' switch while executing this +# script (type 'clk_wiz_0.sh -help' for more information). +# +# Note: For pure RTL based designs, the -lib_map_path switch can be specified later with the +# generated script, but if design is targetted for system simulation containing SystemC/C++/C +# sources, then the library path MUST be specified upfront when calling export_simulation. +# +# For more information, refer 'Vivado Design Suite User Guide:Logic simulation (UG900)' +# +#********************************************************************************************************** + +# catch pipeline exit status +set -Eeuo pipefail + +# set xmvhdl compile options +xmvhdl_opts="-64bit -messages -relax -logfile .tmp_log -update" + +# set xmvlog compile options +xmvlog_opts="-64bit -messages -logfile .tmp_log -update" + +# set xmelab elaboration options +xmelab_opts="-64bit -relax -access +rwc -namemap_mixgen -messages -logfile elaborate.log" + +# set xmsim simulation options +xmsim_opts="-64bit -logfile simulate.log" + +# set design libraries for elaboration +design_libs_elab="-libname xil_defaultlib -libname unisims_ver -libname unimacro_ver -libname secureip" + +# set design libraries +design_libs=(simprims_ver xil_defaultlib) + +# simulation root library directory +sim_lib_dir="xcelium_lib" + +# script info +echo -e "clk_wiz_0.sh - Script generated by export_simulation (Vivado v2024.1 (64-bit)-id)\n" + +# main steps +run() +{ + check_args $* + setup + if [[ ($b_step == 1) ]]; then + case $step in + "compile" ) + init_lib + compile + ;; + "elaborate" ) + elaborate + ;; + "simulate" ) + simulate + ;; + * ) + echo -e "ERROR: Invalid or missing step '$step' (type \"./clk_wiz_0.sh -help\" for more information)\n" + exit 1 + esac + else + init_lib + compile + elaborate + simulate + fi +} + +# RUN_STEP: <compile> +compile() +{ + xmvlog -work xil_defaultlib $xmvlog_opts +incdir+"../../../ipstatic" \ + "../../../../../src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v" \ + "../../../../../src/ip/clk_wiz_0/clk_wiz_0.v" \ + 2>&1 | tee compile.log; cat .tmp_log > xmvlog.log 2>/dev/null + + xmvlog -work xil_defaultlib $xmvlog_opts \ + glbl.v \ + 2>&1 | tee -a compile.log; cat .tmp_log >> xmvlog.log 2>/dev/null +} + +# RUN_STEP: <elaborate> +elaborate() +{ + xmelab $xmelab_opts $design_libs_elab xil_defaultlib.clk_wiz_0 xil_defaultlib.glbl +} + +# RUN_STEP: <simulate> +simulate() +{ + xmsim $xmsim_opts xil_defaultlib.clk_wiz_0 -input simulate.do +} + +# STEP: setup +setup() +{ + # delete previous files for a clean rerun + if [[ ($b_reset_run == 1) ]]; then + reset_run + echo -e "INFO: Simulation run files deleted.\n" + exit 0 + fi + + # delete previous log files + if [[ ($b_reset_log == 1) ]]; then + reset_log + echo -e "INFO: Simulation run log files deleted.\n" + exit 0 + fi + + # add any setup/initialization commands here:- + + # <user specific commands> + +} + +# simulator index file/library directory processing +init_lib() +{ + if [[ ($b_keep_index == 1) ]]; then + # keep previous design library mappings + true + else + # define design library mappings + create_lib_mappings + fi + + if [[ ($b_keep_index == 1) ]]; then + # do not recreate design library directories + true + else + # create design library directories + create_lib_dir + fi +} + +# define design library mappings +create_lib_mappings() +{ + file="hdl.var" + touch $file + + file="cds.lib" + if [[ -e $file ]]; then + if [[ ($lib_map_path == "") ]]; then + return + else + rm -rf $file + fi + fi + + touch $file + + if [[ ($lib_map_path != "") && !(-e $lib_map_path) ]]; then + echo -e "ERROR: Compiled simulation library directory path not specified or does not exist (type "./top.sh -help" for more information)\n" + fi + + if [[ ($lib_map_path != "") ]]; then + incl_ref="INCLUDE $lib_map_path/cds.lib" + echo $incl_ref >> $file + fi + + for (( i=0; i<${#design_libs[*]}; i++ )); do + lib="${design_libs[i]}" + mapping="DEFINE $lib $sim_lib_dir/$lib" + echo $mapping >> $file + done +} + +# create design library directory +create_lib_dir() +{ + if [[ -e $sim_lib_dir ]]; then + rm -rf $sim_lib_dir + fi + for (( i=0; i<${#design_libs[*]}; i++ )); do + lib="${design_libs[i]}" + lib_dir="$sim_lib_dir/$lib" + if [[ ! -e $lib_dir ]]; then + mkdir -p $lib_dir + fi + done +} + +# delete generated data from the previous run +reset_run() +{ + files_to_remove=(xmvlog.log xmvhdl.log xmsc.log compile.log elaborate.log simulate.log diag_report.log xsc_report.log clk_wiz_0_sc.so .tmp_log xcelium_lib waves.shm c.obj) + for (( i=0; i<${#files_to_remove[*]}; i++ )); do + file="${files_to_remove[i]}" + if [[ -e $file ]]; then + rm -rf $file + fi + done +} + +# delete generated log files from the previous run +reset_log() +{ + files_to_remove=(xmvlog.log xmvhdl.log xmsc.log compile.log elaborate.log simulate.log diag_report.log xsc_report.log .tmp_log) + for (( i=0; i<${#files_to_remove[*]}; i++ )); do + file="${files_to_remove[i]}" + if [[ -e $file ]]; then + rm -rf $file + fi + done +} + +# check switch argument value +check_arg_value() +{ + if [[ ($1 == "-step") && (($2 != "compile") && ($2 != "elaborate") && ($2 != "simulate")) ]];then + echo -e "ERROR: Invalid or missing step '$2' (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + if [[ ($1 == "-lib_map_path") && ($2 == "") ]];then + echo -e "ERROR: Simulation library directory path not specified (type \"./clk_wiz_0.sh -help\" for more information)\n" + exit 1 + fi +} + +# check command line arguments +check_args() +{ + arg_count=$# + if [[ ("$#" == 1) && (("$1" == "-help") || ("$1" == "-h")) ]]; then + usage + fi + while [[ "$#" -gt 0 ]]; do + case $1 in + -step) check_arg_value $1 $2;step=$2; b_step=1; shift;; + -lib_map_path) check_arg_value $1 $2;lib_map_path=$2; b_lib_map_path=1; shift;; + -gen_bypass) b_gen_bypass=1 ;; + -reset_run) b_reset_run=1 ;; + -reset_log) b_reset_log=1 ;; + -keep_index) b_keep_index=1 ;; + -noclean_files) b_noclean_files=1 ;; + -help|-h) ;; + *) echo -e "ERROR: Invalid option specified '$1' (type "./top.sh -help" for more information)\n"; exit 1 ;; + esac + shift + done + + # -reset_run is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_reset_run == 1) ]]; then + echo -e "ERROR: -reset_run switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -reset_log is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_reset_log == 1) ]]; then + echo -e "ERROR: -reset_log switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -keep_index is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_keep_index == 1) ]]; then + echo -e "ERROR: -keep_index switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -noclean_files is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_noclean_files == 1) ]]; then + echo -e "ERROR: -noclean_files switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi +} + +# script usage +usage() +{ + msg="Usage: clk_wiz_0.sh [-help]\n\ +Usage: clk_wiz_0.sh [-step]\n\ +Usage: clk_wiz_0.sh [-lib_map_path]\n\ +Usage: clk_wiz_0.sh [-reset_run]\n\ +Usage: clk_wiz_0.sh [-reset_log]\n\ +Usage: clk_wiz_0.sh [-keep_index]\n\ +Usage: clk_wiz_0.sh [-noclean_files]\n\n\ +[-help] -- Print help information for this script\n\n\ +[-step <name>] -- Execute specified step (simulate)\n\n\ +[-lib_map_path <path>] -- Compiled simulation library directory path. The simulation library is compiled\n\ +using the compile_simlib tcl command. Please see 'compile_simlib -help' for more information.\n\n\ +[-reset_run] -- Delete simulator generated data files from the previous run and recreate simulator setup\n\ +file/library mappings for a clean run. This switch will not execute steps defined in the script.\n\n\ +NOTE: To keep simulator index file settings from the previous run, use the -keep_index switch\n\ +NOTE: To regenerate simulator index file but keep the simulator generated files, use the -noclean_files switch\n\n\ +[-reset_log] -- Delete simulator generated log files from the previous run\n\n\ +[-keep_index] -- Keep simulator index file settings from the previous run\n\n\ +[-noclean_files] -- Reset previous run, but do not remove simulator generated files from the previous run\n" + echo -e $msg + exit 0 +} + +# initialize globals +step="" +lib_map_path="" +b_step=0 +b_lib_map_path=0 +b_gen_bypass=0 +b_reset_run=0 +b_reset_log=0 +b_keep_index=0 +b_noclean_files=0 + +# launch script +run $* diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/file_info.txt b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/file_info.txt new file mode 100644 index 0000000..a75fafc --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/file_info.txt @@ -0,0 +1,3 @@ +clk_wiz_0_clk_wiz.v,verilog,xil_defaultlib,../../../../../src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v,incdir="../../../ipstatic"incdir="../../../ipstatic" +clk_wiz_0.v,verilog,xil_defaultlib,../../../../../src/ip/clk_wiz_0/clk_wiz_0.v,incdir="../../../ipstatic"incdir="../../../ipstatic" +glbl.v,Verilog,xil_defaultlib,glbl.v diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/glbl.v b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/glbl.v new file mode 100755 index 0000000..ed3b249 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/glbl.v @@ -0,0 +1,84 @@ +// $Header: /devl/xcs/repo/env/Databases/CAEInterfaces/verunilibs/data/glbl.v,v 1.14 2010/10/28 20:44:00 fphillip Exp $ +`ifndef GLBL +`define GLBL +`timescale 1 ps / 1 ps + +module glbl (); + + parameter ROC_WIDTH = 100000; + parameter TOC_WIDTH = 0; + parameter GRES_WIDTH = 10000; + parameter GRES_START = 10000; + +//-------- STARTUP Globals -------------- + wire GSR; + wire GTS; + wire GWE; + wire PRLD; + wire GRESTORE; + tri1 p_up_tmp; + tri (weak1, strong0) PLL_LOCKG = p_up_tmp; + + wire PROGB_GLBL; + wire CCLKO_GLBL; + wire FCSBO_GLBL; + wire [3:0] DO_GLBL; + wire [3:0] DI_GLBL; + + reg GSR_int; + reg GTS_int; + reg PRLD_int; + reg GRESTORE_int; + +//-------- JTAG Globals -------------- + wire JTAG_TDO_GLBL; + wire JTAG_TCK_GLBL; + wire JTAG_TDI_GLBL; + wire JTAG_TMS_GLBL; + wire JTAG_TRST_GLBL; + + reg JTAG_CAPTURE_GLBL; + reg JTAG_RESET_GLBL; + reg JTAG_SHIFT_GLBL; + reg JTAG_UPDATE_GLBL; + reg JTAG_RUNTEST_GLBL; + + reg JTAG_SEL1_GLBL = 0; + reg JTAG_SEL2_GLBL = 0 ; + reg JTAG_SEL3_GLBL = 0; + reg JTAG_SEL4_GLBL = 0; + + reg JTAG_USER_TDO1_GLBL = 1'bz; + reg JTAG_USER_TDO2_GLBL = 1'bz; + reg JTAG_USER_TDO3_GLBL = 1'bz; + reg JTAG_USER_TDO4_GLBL = 1'bz; + + assign (strong1, weak0) GSR = GSR_int; + assign (strong1, weak0) GTS = GTS_int; + assign (weak1, weak0) PRLD = PRLD_int; + assign (strong1, weak0) GRESTORE = GRESTORE_int; + + initial begin + GSR_int = 1'b1; + PRLD_int = 1'b1; + #(ROC_WIDTH) + GSR_int = 1'b0; + PRLD_int = 1'b0; + end + + initial begin + GTS_int = 1'b1; + #(TOC_WIDTH) + GTS_int = 1'b0; + end + + initial begin + GRESTORE_int = 1'b0; + #(GRES_START); + GRESTORE_int = 1'b1; + #(GRES_WIDTH); + GRESTORE_int = 1'b0; + end + +endmodule +`endif diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/hdl.var b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/hdl.var new file mode 100644 index 0000000..e69de29 diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/simulate.do b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/simulate.do new file mode 100644 index 0000000..baf3d48 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xcelium/simulate.do @@ -0,0 +1,7 @@ +set pack_assert_off {numeric_std std_logic_arith} + +database -open waves -into waves.shm -default +catch {probe -create -shm -all -variables -depth 1} msg + +run 1000ns +exit diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/README.txt b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/README.txt new file mode 100644 index 0000000..9e170f5 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/README.txt @@ -0,0 +1,50 @@ +################################################################################ +# Vivado (TM) v2024.1 (64-bit) +# +# README.txt: Please read the sections below to understand the steps required to +# run the exported script and how to fetch design source file details +# from the file_info.txt file. +# +# Generated by export_simulation on Wed Feb 26 12:12:47 CET 2025 +# +################################################################################ + +1. Steps to run the generated simulation script + +From the shell prompt in the current directory, issue the following command:- + +./clk_wiz_0.sh + +This command will launch the 'compile', 'elaborate' and 'simulate' functions +implemented in the script file for the 3-step flow. These functions are called +from the main 'run' function in the script file. + +The 'run' function first calls the 'check_args' function, the purpose of which +is to verify the generated script arguments and print error if incorrect switch +is specified. The 'run' function then calls the 'setup' function, the purpose of +which is to specify custom or initialization commands. The function also executes +following sub-functions:- +'reset_run' if -reset_run switch is specified. +'reset_log' if -reset_log switch is specified. + +The purpose of 'reset_run' function' is to delete the simulator generated design +data from the previous run and the purpose of 'reset_log' function' is to delete +the simulator generated log files. + +The 'run' function then calls the 'init_lib' function, the purpose of which is to +create design library mappings and directories. This function is called before the +'compile' step. By default, if '-step' switch is specified with the script then the +script will execute that specfic step, else it will execute all steps applicable +for the target simulator. + +For more information on the script, please type './clk_wiz_0.sh -help' + +2. Design source file information + +export_simulation generates a 'file_info.txt' file that contains design file information +based on the compile order when export_simulation was executed from Vivado. The file +contains information about the file name, type, library it is compiled into, whether +it is part of the IP, associated library, file path information in a comma separated +format. This file can be parsed to extract the required information for generating a +custom script or can be read from verification test infra. + diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/clk_wiz_0.sh b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/clk_wiz_0.sh new file mode 100755 index 0000000..10fec31 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/clk_wiz_0.sh @@ -0,0 +1,330 @@ +#!/usr/bin/env bash +#********************************************************************************************************** +# Vivado (TM) v2024.1 (64-bit) +# +# Script generated by Vivado on Wed Feb 26 12:12:47 CET 2025 +# SW Build 5076996 on Wed May 22 18:36:09 MDT 2024 +# +# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. +# Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. +# +# Filename : clk_wiz_0.sh +# Simulator : AMD Vivado Simulator +# Description : Simulation script generated by export_simulation Tcl command +# Purpose : Run 'compile', 'elaborate', 'simulate' steps for compiling, elaborating and simulating the +# design. The script will copy the library mapping file from the compiled library directory, +# create design library directories and library mappings in the mapping file. +# +# Usage : clk_wiz_0.sh +# clk_wiz_0.sh [-lib_map_path] [-step] [-keep_index] [-noclean_files]* +# clk_wiz_0.sh [-reset_run] +# clk_wiz_0.sh [-reset_log] +# clk_wiz_0.sh [-help] +# +# * The -noclean_files switch is deprecated and will not peform any function (by default, the +# simulator generated files will not be removed unless -reset_run switch is used) +# +#********************************************************************************************************** + +# catch pipeline exit status +set -Eeuo pipefail + +# set xvlog options +xvlog_opts="--incr --relax " + +# script info +echo -e "clk_wiz_0.sh - Script generated by export_simulation (Vivado v2024.1 (64-bit)-id)\n" + +# main steps +run() +{ + check_args $* + setup + if [[ ($b_step == 1) ]]; then + case $step in + "compile" ) + init_lib + compile + ;; + "elaborate" ) + elaborate + ;; + "simulate" ) + simulate + ;; + * ) + echo -e "ERROR: Invalid or missing step '$step' (type \"./clk_wiz_0.sh -help\" for more information)\n" + exit 1 + esac + else + init_lib + compile + elaborate + simulate + fi +} + +# RUN_STEP: <compile> +compile() +{ + xvlog $xvlog_opts -prj vlog.prj 2>&1 | tee compile.log +} + +# RUN_STEP: <elaborate> +elaborate() +{ + xelab --incr --debug typical --relax --mt 8 -L xil_defaultlib -L unisims_ver -L unimacro_ver -L secureip -L xpm --snapshot clk_wiz_0 xil_defaultlib.clk_wiz_0 xil_defaultlib.glbl -log elaborate.log +} + +# RUN_STEP: <simulate> +simulate() +{ + xsim clk_wiz_0 -key {Behavioral:sim_1:Functional:clk_wiz_0} -tclbatch cmd.tcl -log simulate.log +} + +# STEP: setup +setup() +{ + # delete previous files for a clean rerun + if [[ ($b_reset_run == 1) ]]; then + reset_run + echo -e "INFO: Simulation run files deleted.\n" + exit 0 + fi + + # delete previous log files + if [[ ($b_reset_log == 1) ]]; then + reset_log + echo -e "INFO: Simulation run log files deleted.\n" + exit 0 + fi + + # add any setup/initialization commands here:- + + # <user specific commands> + +} + +# simulator index file/library directory processing +init_lib() +{ + if [[ ($b_keep_index == 1) ]]; then + # keep previous simulator index file + true + else + # copy simulator index file to current directory + copy_setup_file + fi + + if [[ ($lib_map_path != "") ]]; then + ref_lib_dir=$lib_map_path + fi +} + +# copy xsim.ini file +copy_setup_file() +{ + file="xsim.ini" + + if [[ ($lib_map_path == "") ]]; then + lib_map_path="/opt/img/Vivado2024.1/Vivado/2024.1/data/xsim" + fi + + if [[ ($lib_map_path != "") ]]; then + src_file="$lib_map_path/$file" + if [[ -e $src_file ]]; then + cp $src_file . + fi + + # map local design libraries to xsim.ini + map_local_libs + fi +} + +# map local design libraries +map_local_libs() +{ + updated_mappings=() + local_mappings=() + + # local design libraries + local_libs=(xil_defaultlib) + + if [[ 0 == ${#local_libs[@]} ]]; then + return + fi + + file="xsim.ini" + file_backup="xsim.ini.bak" + + if [[ -e $file ]]; then + rm -f $file_backup + + # create a backup copy of the xsim.ini file + cp $file $file_backup + + # read libraries from backup file and search in local library collection + while read -r line + do + IN=$line + + # split mapping entry with '=' delimiter to fetch library name and mapping + read lib_name mapping <<<$(IFS="="; echo $IN) + + # if local library found, then construct the local mapping and add to local mapping collection + if `echo ${local_libs[@]} | grep -wq $lib_name` ; then + line="$lib_name=xsim.dir/$lib_name" + local_mappings+=("$lib_name") + fi + + # add to updated library mapping collection + updated_mappings+=("$line") + done < "$file_backup" + + # append local libraries not found originally from xsim.ini + for (( i=0; i<${#local_libs[*]}; i++ )); do + lib_name="${local_libs[i]}" + if `echo ${local_mappings[@]} | grep -wvq $lib_name` ; then + line="$lib_name=xsim.dir/$lib_name" + updated_mappings+=("$line") + fi + done + + # write updated mappings in xsim.ini + rm -f $file + for (( i=0; i<${#updated_mappings[*]}; i++ )); do + lib_name="${updated_mappings[i]}" + echo $lib_name >> $file + done + else + for (( i=0; i<${#local_libs[*]}; i++ )); do + lib_name="${local_libs[i]}" + mapping="$lib_name=xsim.dir/$lib_name" + echo $mapping >> $file + done + fi +} + +# delete generated data from the previous run +reset_run() +{ + files_to_remove=(xelab.pb xsim.jou xvhdl.log xvlog.log compile.log elaborate.log simulate.log xelab.log xsim.log run.log xvhdl.pb xvlog.pb clk_wiz_0.wdb xsim.dir libdpi.so) + for (( i=0; i<${#files_to_remove[*]}; i++ )); do + file="${files_to_remove[i]}" + if [[ -e $file ]]; then + rm -rf $file + fi + done +} + +# delete generated log files from the previous run +reset_log() +{ + files_to_remove=(xvhdl.log xvlog.log compile.log elaborate.log simulate.log xelab.log xsim.log run.log) + for (( i=0; i<${#files_to_remove[*]}; i++ )); do + file="${files_to_remove[i]}" + if [[ -e $file ]]; then + rm -rf $file + fi + done +} + +# check switch argument value +check_arg_value() +{ + if [[ ($1 == "-step") && (($2 != "compile") && ($2 != "elaborate") && ($2 != "simulate")) ]];then + echo -e "ERROR: Invalid or missing step '$2' (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + if [[ ($1 == "-lib_map_path") && ($2 == "") ]];then + echo -e "ERROR: Simulation library directory path not specified (type \"./clk_wiz_0.sh -help\" for more information)\n" + exit 1 + fi +} + +# check command line arguments +check_args() +{ + arg_count=$# + if [[ ("$#" == 1) && (("$1" == "-help") || ("$1" == "-h")) ]]; then + usage + fi + while [[ "$#" -gt 0 ]]; do + case $1 in + -step) check_arg_value $1 $2;step=$2; b_step=1; shift;; + -lib_map_path) check_arg_value $1 $2;lib_map_path=$2; b_lib_map_path=1; shift;; + -gen_bypass) b_gen_bypass=1 ;; + -reset_run) b_reset_run=1 ;; + -reset_log) b_reset_log=1 ;; + -keep_index) b_keep_index=1 ;; + -noclean_files) b_noclean_files=1 ;; + -help|-h) ;; + *) echo -e "ERROR: Invalid option specified '$1' (type "./top.sh -help" for more information)\n"; exit 1 ;; + esac + shift + done + + # -reset_run is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_reset_run == 1) ]]; then + echo -e "ERROR: -reset_run switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -reset_log is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_reset_log == 1) ]]; then + echo -e "ERROR: -reset_log switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -keep_index is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_keep_index == 1) ]]; then + echo -e "ERROR: -keep_index switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi + + # -noclean_files is not applicable with other switches + if [[ ("$arg_count" -gt 1) && ($b_noclean_files == 1) ]]; then + echo -e "ERROR: -noclean_files switch is not applicable with other switches (type \"./top.sh -help\" for more information)\n" + exit 1 + fi +} + +# script usage +usage() +{ + msg="Usage: clk_wiz_0.sh [-help]\n\ +Usage: clk_wiz_0.sh [-step]\n\ +Usage: clk_wiz_0.sh [-lib_map_path]\n\ +Usage: clk_wiz_0.sh [-reset_run]\n\ +Usage: clk_wiz_0.sh [-reset_log]\n\ +Usage: clk_wiz_0.sh [-keep_index]\n\ +Usage: clk_wiz_0.sh [-noclean_files]\n\n\ +[-help] -- Print help information for this script\n\n\ +[-step <name>] -- Execute specified step (compile, elaborate, simulate)\n\n\ +[-lib_map_path <path>] -- Compiled simulation library directory path. The simulation library is compiled\n\ +using the compile_simlib tcl command. Please see 'compile_simlib -help' for more information.\n\n\ +[-reset_run] -- Delete simulator generated data files from the previous run and recreate simulator setup\n\ +file/library mappings for a clean run. This switch will not execute steps defined in the script.\n\n\ +NOTE: To keep simulator index file settings from the previous run, use the -keep_index switch\n\ +NOTE: To regenerate simulator index file but keep the simulator generated files, use the -noclean_files switch\n\n\ +[-reset_log] -- Delete simulator generated log files from the previous run\n\n\ +[-keep_index] -- Keep simulator index file settings from the previous run\n\n\ +[-noclean_files] -- Reset previous run, but do not remove simulator generated files from the previous run\n" + echo -e $msg + exit 0 +} + +# initialize globals +step="" +lib_map_path="" +b_step=0 +b_lib_map_path=0 +b_gen_bypass=0 +b_reset_run=0 +b_reset_log=0 +b_keep_index=0 +b_noclean_files=0 + +# launch script +run $* diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/cmd.tcl b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/cmd.tcl new file mode 100644 index 0000000..6ac0dc8 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/cmd.tcl @@ -0,0 +1,12 @@ +set curr_wave [current_wave_config] +if { [string length $curr_wave] == 0 } { + if { [llength [get_objects]] > 0} { + add_wave / + set_property needs_save false [current_wave_config] + } else { + send_msg_id Add_Wave-1 WARNING "No top level signals found. Simulator will start without a wave window. If you want to open a wave window go to 'File->New Waveform Configuration' or type 'create_wave_config' in the TCL console." + } +} + +run 1000ns +quit diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/file_info.txt b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/file_info.txt new file mode 100644 index 0000000..a75fafc --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/file_info.txt @@ -0,0 +1,3 @@ +clk_wiz_0_clk_wiz.v,verilog,xil_defaultlib,../../../../../src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v,incdir="../../../ipstatic"incdir="../../../ipstatic" +clk_wiz_0.v,verilog,xil_defaultlib,../../../../../src/ip/clk_wiz_0/clk_wiz_0.v,incdir="../../../ipstatic"incdir="../../../ipstatic" +glbl.v,Verilog,xil_defaultlib,glbl.v diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/glbl.v b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/glbl.v new file mode 100755 index 0000000..ed3b249 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/glbl.v @@ -0,0 +1,84 @@ +// $Header: /devl/xcs/repo/env/Databases/CAEInterfaces/verunilibs/data/glbl.v,v 1.14 2010/10/28 20:44:00 fphillip Exp $ +`ifndef GLBL +`define GLBL +`timescale 1 ps / 1 ps + +module glbl (); + + parameter ROC_WIDTH = 100000; + parameter TOC_WIDTH = 0; + parameter GRES_WIDTH = 10000; + parameter GRES_START = 10000; + +//-------- STARTUP Globals -------------- + wire GSR; + wire GTS; + wire GWE; + wire PRLD; + wire GRESTORE; + tri1 p_up_tmp; + tri (weak1, strong0) PLL_LOCKG = p_up_tmp; + + wire PROGB_GLBL; + wire CCLKO_GLBL; + wire FCSBO_GLBL; + wire [3:0] DO_GLBL; + wire [3:0] DI_GLBL; + + reg GSR_int; + reg GTS_int; + reg PRLD_int; + reg GRESTORE_int; + +//-------- JTAG Globals -------------- + wire JTAG_TDO_GLBL; + wire JTAG_TCK_GLBL; + wire JTAG_TDI_GLBL; + wire JTAG_TMS_GLBL; + wire JTAG_TRST_GLBL; + + reg JTAG_CAPTURE_GLBL; + reg JTAG_RESET_GLBL; + reg JTAG_SHIFT_GLBL; + reg JTAG_UPDATE_GLBL; + reg JTAG_RUNTEST_GLBL; + + reg JTAG_SEL1_GLBL = 0; + reg JTAG_SEL2_GLBL = 0 ; + reg JTAG_SEL3_GLBL = 0; + reg JTAG_SEL4_GLBL = 0; + + reg JTAG_USER_TDO1_GLBL = 1'bz; + reg JTAG_USER_TDO2_GLBL = 1'bz; + reg JTAG_USER_TDO3_GLBL = 1'bz; + reg JTAG_USER_TDO4_GLBL = 1'bz; + + assign (strong1, weak0) GSR = GSR_int; + assign (strong1, weak0) GTS = GTS_int; + assign (weak1, weak0) PRLD = PRLD_int; + assign (strong1, weak0) GRESTORE = GRESTORE_int; + + initial begin + GSR_int = 1'b1; + PRLD_int = 1'b1; + #(ROC_WIDTH) + GSR_int = 1'b0; + PRLD_int = 1'b0; + end + + initial begin + GTS_int = 1'b1; + #(TOC_WIDTH) + GTS_int = 1'b0; + end + + initial begin + GRESTORE_int = 1'b0; + #(GRES_START); + GRESTORE_int = 1'b1; + #(GRES_WIDTH); + GRESTORE_int = 1'b0; + end + +endmodule +`endif diff --git a/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/vlog.prj b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/vlog.prj new file mode 100644 index 0000000..52f6000 --- /dev/null +++ b/proj/AudioProc.ip_user_files/sim_scripts/clk_wiz_0/xsim/vlog.prj @@ -0,0 +1,8 @@ +verilog xil_defaultlib --include "../../../ipstatic" \ +"../../../../../src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v" \ +"../../../../../src/ip/clk_wiz_0/clk_wiz_0.v" \ + +verilog xil_defaultlib "glbl.v" + +# Do not sort compile order +nosort diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/compile.log b/proj/AudioProc.sim/sim_1/behav/xsim/compile.log new file mode 100644 index 0000000..8969597 --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/compile.log @@ -0,0 +1,6 @@ +INFO: [VRFC 10-163] Analyzing VHDL file "/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/controlUnit.vhd" into library xil_defaultlib +INFO: [VRFC 10-3107] analyzing entity 'controlUnit' +INFO: [VRFC 10-163] Analyzing VHDL file "/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/firUnit.vhd" into library xil_defaultlib +INFO: [VRFC 10-3107] analyzing entity 'firUnit' +INFO: [VRFC 10-163] Analyzing VHDL file "/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/tb_firUnit.vhd" into library xil_defaultlib +INFO: [VRFC 10-3107] analyzing entity 'tb_firUnit' diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/compile.sh b/proj/AudioProc.sim/sim_1/behav/xsim/compile.sh new file mode 100755 index 0000000..27476f9 --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/compile.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +# **************************************************************************** +# Vivado (TM) v2024.1 (64-bit) +# +# Filename : compile.sh +# Simulator : AMD Vivado Simulator +# Description : Script for compiling the simulation design source files +# +# Generated by Vivado on Wed Feb 26 12:23:43 CET 2025 +# SW Build 5076996 on Wed May 22 18:36:09 MDT 2024 +# +# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. +# Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. +# +# usage: compile.sh +# +# **************************************************************************** +set -Eeuo pipefail +# compile Verilog/System Verilog design sources +echo "xvlog --incr --relax -prj tb_firUnit_vlog.prj" +xvlog --incr --relax -prj tb_firUnit_vlog.prj 2>&1 | tee compile.log + +# compile VHDL design sources +echo "xvhdl --incr --relax -prj tb_firUnit_vhdl.prj" +xvhdl --incr --relax -prj tb_firUnit_vhdl.prj 2>&1 | tee -a compile.log + +echo "Waiting for jobs to finish..." +echo "No pending jobs, compilation finished." diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/elaborate.log b/proj/AudioProc.sim/sim_1/behav/xsim/elaborate.log new file mode 100644 index 0000000..690fd0d --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/elaborate.log @@ -0,0 +1,49 @@ +Vivado Simulator v2024.1 +Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. +Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. +Running: /opt/img/Vivado2024.1/Vivado/2024.1/bin/unwrapped/lnx64.o/xelab --incr --debug typical --relax --mt 8 -L xil_defaultlib -L unisims_ver -L unimacro_ver -L secureip -L xpm --snapshot tb_firUnit_behav xil_defaultlib.tb_firUnit xil_defaultlib.glbl -log elaborate.log +Using 8 slave threads. +Starting static elaboration +Pass Through NonSizing Optimizer +WARNING: [VRFC 10-3091] actual bit length 3 differs from formal bit length 4 for port 'CO' [/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/processingUnitIP.v:1322] +WARNING: [VRFC 10-3091] actual bit length 2 differs from formal bit length 4 for port 'O' [/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/processingUnitIP.v:1325] +WARNING: [VRFC 10-3091] actual bit length 2 differs from formal bit length 4 for port 'CO' [/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/processingUnitIP.v:1329] +WARNING: [VRFC 10-3091] actual bit length 3 differs from formal bit length 4 for port 'O' [/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/processingUnitIP.v:1332] +WARNING: [VRFC 10-3091] actual bit length 3 differs from formal bit length 4 for port 'CO' [/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/processingUnitIP.v:1386] +WARNING: [VRFC 10-3091] actual bit length 2 differs from formal bit length 4 for port 'CO' [/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/processingUnitIP.v:1403] +WARNING: [VRFC 10-3091] actual bit length 3 differs from formal bit length 4 for port 'O' [/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/processingUnitIP.v:1406] +WARNING: [VRFC 10-3091] actual bit length 2 differs from formal bit length 4 for port 'CO' [/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/processingUnitIP.v:3161] +WARNING: [VRFC 10-3091] actual bit length 3 differs from formal bit length 4 for port 'O' [/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/processingUnitIP.v:3164] +Completed static elaboration +Starting simulation data flow analysis +Completed simulation data flow analysis +Time Resolution for simulation is 1ps +Compiling package std.standard +Compiling package std.textio +Compiling package ieee.std_logic_1164 +Compiling package ieee.numeric_std +Compiling package vl.vl_types +Compiling module xil_defaultlib.glbl +Compiling architecture archi_operativeunit of entity xil_defaultlib.controlUnit [controlunit_default] +Compiling module unisims_ver.GND +Compiling module unisims_ver.BUFG +Compiling module unisims_ver.IBUF +Compiling module unisims_ver.OBUF +Compiling module unisims_ver.x_lut3_mux8 +Compiling module unisims_ver.LUT3 +Compiling module unisims_ver.x_lut2_mux4 +Compiling module unisims_ver.LUT2 +Compiling module unisims_ver.LUT4 +Compiling module unisims_ver.LUT5 +Compiling module unisims_ver.LUT6 +Compiling module unisims_ver.FDCE_default +Compiling module unisims_ver.CARRY4 +Compiling module unisims_ver.MUXF8 +Compiling module unisims_ver.MUXF7 +Compiling module unisims_ver.x_lut1_mux2 +Compiling module unisims_ver.LUT1(INIT=2'b01) +Compiling module unisims_ver.VCC +Compiling module xil_defaultlib.operativeUnit +Compiling architecture archi_firunit of entity xil_defaultlib.firUnit [firunit_default] +Compiling architecture archi_tb_firunit of entity xil_defaultlib.tb_firunit +Built simulation snapshot tb_firUnit_behav diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/elaborate.sh b/proj/AudioProc.sim/sim_1/behav/xsim/elaborate.sh new file mode 100755 index 0000000..45f7c8b --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/elaborate.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +# **************************************************************************** +# Vivado (TM) v2024.1 (64-bit) +# +# Filename : elaborate.sh +# Simulator : AMD Vivado Simulator +# Description : Script for elaborating the compiled design +# +# Generated by Vivado on Wed Feb 26 12:23:47 CET 2025 +# SW Build 5076996 on Wed May 22 18:36:09 MDT 2024 +# +# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. +# Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. +# +# usage: elaborate.sh +# +# **************************************************************************** +set -Eeuo pipefail +# elaborate design +echo "xelab --incr --debug typical --relax --mt 8 -L xil_defaultlib -L unisims_ver -L unimacro_ver -L secureip -L xpm --snapshot tb_firUnit_behav xil_defaultlib.tb_firUnit xil_defaultlib.glbl -log elaborate.log" +xelab --incr --debug typical --relax --mt 8 -L xil_defaultlib -L unisims_ver -L unimacro_ver -L secureip -L xpm --snapshot tb_firUnit_behav xil_defaultlib.tb_firUnit xil_defaultlib.glbl -log elaborate.log + diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/glbl.v b/proj/AudioProc.sim/sim_1/behav/xsim/glbl.v new file mode 100755 index 0000000..ed3b249 --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/glbl.v @@ -0,0 +1,84 @@ +// $Header: /devl/xcs/repo/env/Databases/CAEInterfaces/verunilibs/data/glbl.v,v 1.14 2010/10/28 20:44:00 fphillip Exp $ +`ifndef GLBL +`define GLBL +`timescale 1 ps / 1 ps + +module glbl (); + + parameter ROC_WIDTH = 100000; + parameter TOC_WIDTH = 0; + parameter GRES_WIDTH = 10000; + parameter GRES_START = 10000; + +//-------- STARTUP Globals -------------- + wire GSR; + wire GTS; + wire GWE; + wire PRLD; + wire GRESTORE; + tri1 p_up_tmp; + tri (weak1, strong0) PLL_LOCKG = p_up_tmp; + + wire PROGB_GLBL; + wire CCLKO_GLBL; + wire FCSBO_GLBL; + wire [3:0] DO_GLBL; + wire [3:0] DI_GLBL; + + reg GSR_int; + reg GTS_int; + reg PRLD_int; + reg GRESTORE_int; + +//-------- JTAG Globals -------------- + wire JTAG_TDO_GLBL; + wire JTAG_TCK_GLBL; + wire JTAG_TDI_GLBL; + wire JTAG_TMS_GLBL; + wire JTAG_TRST_GLBL; + + reg JTAG_CAPTURE_GLBL; + reg JTAG_RESET_GLBL; + reg JTAG_SHIFT_GLBL; + reg JTAG_UPDATE_GLBL; + reg JTAG_RUNTEST_GLBL; + + reg JTAG_SEL1_GLBL = 0; + reg JTAG_SEL2_GLBL = 0 ; + reg JTAG_SEL3_GLBL = 0; + reg JTAG_SEL4_GLBL = 0; + + reg JTAG_USER_TDO1_GLBL = 1'bz; + reg JTAG_USER_TDO2_GLBL = 1'bz; + reg JTAG_USER_TDO3_GLBL = 1'bz; + reg JTAG_USER_TDO4_GLBL = 1'bz; + + assign (strong1, weak0) GSR = GSR_int; + assign (strong1, weak0) GTS = GTS_int; + assign (weak1, weak0) PRLD = PRLD_int; + assign (strong1, weak0) GRESTORE = GRESTORE_int; + + initial begin + GSR_int = 1'b1; + PRLD_int = 1'b1; + #(ROC_WIDTH) + GSR_int = 1'b0; + PRLD_int = 1'b0; + end + + initial begin + GTS_int = 1'b1; + #(TOC_WIDTH) + GTS_int = 1'b0; + end + + initial begin + GRESTORE_int = 1'b0; + #(GRES_START); + GRESTORE_int = 1'b1; + #(GRES_WIDTH); + GRESTORE_int = 1'b0; + end + +endmodule +`endif diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/simulate.log b/proj/AudioProc.sim/sim_1/behav/xsim/simulate.log new file mode 100644 index 0000000..3a14ee6 --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/simulate.log @@ -0,0 +1 @@ +Time resolution is 1 ps diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/simulate.sh b/proj/AudioProc.sim/sim_1/behav/xsim/simulate.sh new file mode 100755 index 0000000..6c50e68 --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/simulate.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +# **************************************************************************** +# Vivado (TM) v2024.1 (64-bit) +# +# Filename : simulate.sh +# Simulator : AMD Vivado Simulator +# Description : Script for simulating the design by launching the simulator +# +# Generated by Vivado on Wed Feb 26 12:23:52 CET 2025 +# SW Build 5076996 on Wed May 22 18:36:09 MDT 2024 +# +# Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. +# Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. +# +# usage: simulate.sh +# +# **************************************************************************** +set -Eeuo pipefail +# simulate design +echo "xsim tb_firUnit_behav -key {Behavioral:sim_1:Functional:tb_firUnit} -tclbatch tb_firUnit.tcl -view /homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/proj/tb_firUnit_behav.wcfg -log simulate.log" +xsim tb_firUnit_behav -key {Behavioral:sim_1:Functional:tb_firUnit} -tclbatch tb_firUnit.tcl -view /homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/proj/tb_firUnit_behav.wcfg -log simulate.log + diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/tb_firUnit.tcl b/proj/AudioProc.sim/sim_1/behav/xsim/tb_firUnit.tcl new file mode 100644 index 0000000..1094e45 --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/tb_firUnit.tcl @@ -0,0 +1,11 @@ +set curr_wave [current_wave_config] +if { [string length $curr_wave] == 0 } { + if { [llength [get_objects]] > 0} { + add_wave / + set_property needs_save false [current_wave_config] + } else { + send_msg_id Add_Wave-1 WARNING "No top level signals found. Simulator will start without a wave window. If you want to open a wave window go to 'File->New Waveform Configuration' or type 'create_wave_config' in the TCL console." + } +} + +run 1000ns diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/tb_firUnit_behav.wdb b/proj/AudioProc.sim/sim_1/behav/xsim/tb_firUnit_behav.wdb new file mode 100644 index 0000000000000000000000000000000000000000..43c0761443e318472d3138078770c8732150fd82 GIT binary patch literal 94714 zcma#Z%*o8FPzZMnb5(G03~_XF40cs8Fl2y=2WRG%<|LNn7coGA1C&1bb6>i(ufGeF z%a9=oVF^k==*EW-nq1O=fq?;r@tMJlLvkb3{=#Pv1s~r-=z$^)Uk{YcqxO!5z-S1J zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S2I3V{Q!6d6HsFPRw_ zx|tXl7&t&Y28I~{B4EY|Fo_^opv>2yU~LQx8Vn363=9n6E>3!`WvO{3P<a>yRmGqH z9Y6JeN<hb7J%clI6+$8dTov3reOwg`3=A0<+)w=6m(Iz+z+lM4z@Wvzz`)GFuplQt zJu{hs6{;I#D##@U42BF*3=v>aWd;V2{DR`-#GJ&U_{_W#5SM|GfuZ65|Nr$MErtvX z3<3-c3qXPl%nS>_`alve3>IKuVEFg{|NpuF|NpmuYRJqhNli~J0vm`;pFC9Kf2ck$ zsH=lRT;hHF-94QdKtT(_pz&Og-_%3Z8Pp@x8PpBb8PpBc8PucH8Pvno8Pt8$8Pq-0 z8Ps*v!LIa1GAWcYqZFV4<mVU?8sz8$b`r?lu+VXYdKT{J_%K)J5dR>sLPmxKVBdp6 zij9E*>^6{Q5Qc?TEYz(b@x>*HC8=P2AU}g*4TQrTJwxJy9eo3QTp5Bx{DWK>0)qUV zU4w%?{oLby{QUzM{6j+mLPHq93SIqNV2VMOYJhBFU|<M>(xp&(8I-;Ur8Pi`85kIf zq4Z=ZeFaKG6JAhAh$mDBgn~*l%z!4;N|4JL7+@0x;DqYp<gQ>~V8#GSpkMy~|G$HQ zfnfy;1H*(e28J0N3=9)I85jb5G4TyQ28IRM3=A8JA$Ud!14Bb814Bg_1j{fmFo19s zBLf2n!~6<y8H8+SWMDWh!@$4=&7iUj3=AM_2ayH`HX|bg0|>*S2b3H^(jc#Z{0HNM z#6TDnDIgkzL2OXs1hGNtLGA(RQ3MG<F(~1JtOq3kUIqpR5DikRhLj*cd_e{V1|0?l zu$%lKiGslmNe#$2kXt|)q~4f;fdQ1A{qd+Vfuvq=W(T<oWCjR>%m87KIp$C|CE_v1 zih+TFoq>TN3+g_Q86XTY1B5~TvW1p|Wq8!MGB7ZJ!lMa~8c^otVqjqC!=pxzfq{XW zfq`Kb9yOq1h=+lJVKp8#mJAFGAh++qqXy)6J_ZJcvv|~4GcYjlGcYiK@)IabL16>J zps)d9kR70^L4bjQ0W{|XOEaLb5N2Rt0J#Ii4rE|p0Hp(2MsNWRG6IZ2W`NQHNKHHg z1A`C)0|O}DL2AJY7#J8pYCsqicA$6%nQP4mF%O#>P<(;h<bp>HC{2K}wl5wvNem1O zVhjunVR+OeGcYiSGcYj3<52^u5JB^VnRwKsGB7YmLdz*!eotdyV31;9V5r4oPC5ev zgEUf@fx-$DMh3H&d<D_S7?j6B@dgTeP~HW_GboNh)fb2c<#|wk2ZcRIA1GfRn7QOD zD9%CZVKivs5|k!E=77W!W-a*&Vyi>*1jx-GGe8(54>Aj87bvfT#6e;p8iZkLHq2V` z732<3oP)&isR8A6LTW(i9bFA5?}N+**#)u}ly(TI0p)c<YCw6NkQz{4C!_`xu7uQp z@)#jC#P}VQ*9n;e%2zNoe?jrf2r2hKVOKD3$yZPw)n;H|0MVd$*JXs{Ur-pEFfuTJ z(j%zs0;M|`4KfdeL1uu|f!HAZgyJ2f23vf=%mKwINDU~jgUp1P4Pv9K0p)d&I6gI? zyiQ0BD6bPz1Ip`!)PV9jAvK`94pReiHwc6B3#gF{suMwVC`b&X22{?2@;ig_4?|Gi z1c`&xg5nCFT2OfmQwyrYLG?W-&w%uR#Np;D{xSfS6(BK?xw_Cg7nd7MK?<Su4k#ZW zn+q}<Zm!fX19v2~`UK34gQ^9^FUSm#Sx_NxJp!tqz~QjC`3We_L2@9qpz;WxT2Oqz z)PmA3PPK}KhM=|tOf9G^$EkL4^OJm#LTFtL3Tu37E0ENJ@)5dPP+AB3?d(H?MkKYM zJd3UtRDOfi*2EfiBdG<|cj#*2VOAY$I1NcHsNTb=wmsHxA(C29{fATS>sZ4zNNPd# zASm5{(h*1xh=#kN|Bk^HB(<P223ajg9SDQ{=Dvaf)cye}2gNa{J_DHt;)5_KUw~+^ z+QrRJj(|AOxB#`K@u@w7q*e}^CZR&$bOvI>%)JWYK+Of!t@zA+grrspi@9*W%~<mF z1Cm-$cNg7UxLSu;!+%I>Rq&Y`5^u-@H3$@Ds`%7yzHcCfq!!dZfO5gMfx;K=2Cf7{ zO{gTuTu`3|%7v>1F~DJFnP3QN-+}lbwVGJm0Fnc%ow4MrH`E}IT3Fc!k_Tas8$dKn zZ8VZvSlI`X2Vr!zIY??jWgnCaQi>YKGnRa<gGz$j04mR*Tuil#o1gSTB|&Oo<r!EZ zwA}_`gWbEh`N<q4wV-wulnYXV>W0P5PgX-ELFR(SHlSRrYIi{;L25y5Fen$R+H+7z zkXlfk4CP`~`v@utQVS~Mp<JwLzd<EIYR&M)@#5wuTuhK&EJ!V=t^kc*fXW4s5up4J zqQPOduK9@wl3Gw*hpZN)2CjB(^AkBFwV?77SuLoHL{_Vbq!!diLsko`6G7%PtZjZ` z0&*OveFW{7gUkWB6BH1jbOx`Rlz$l7AgP6wCAieOAgKkFC7`f?*$raD%~k(p5QL-_ z<W_ucNJUZ$s>eZQ!OR7PA;?^?67^pOWnc!R-3Ke9(A^7GqWr_K2h4z|1=Zu&+yD+U z<sXLgkko<(2Jxv~jieSda)VFpE+n;}p*VbMPa>%Wwc+upy@I6H2bzA-!vW^E`$%ei z38;mo9Z-6N)kEm!g4_ja%fZqPNG+kX14|DewV<>EG6R>nFQD!PsU?(lej=#_r5$YM zf|V%$Fk}T)2+;lkp|m56q!w1cp}QAmt|F3JSp9}etu~TcSp9}ettpaPSp9}etu2yT zP~R6{I0Pf9h1CI|JcnF9z|u}Kl3G|DfJ<#5R4u4)g{|HMNrTO8U2RYU;xI5UfYf5E zH$l>1wW@svurvu$3rmwAw}LRJJOil(`Ili=uR%MA12q?0y$O;Ao6Eq!Fa^Ycs)h9# zKxTq4%v`YA)x8GGkkrD`4oDpc!_<P^u)Nn`3zAw`_=41dFib7jTm}Y)<49^@=@+C9 zgkfsI<}T_rxQe6}TOA9MhMD^U#DV$^mVQBIf-s7?vw96aA*sbyAA_V}=ECX#P+WlW zF(@s7@&U+=p!^C_3t}@YZhpcDO{^fbp!yhDEvOCysRf(6xcP|)l3G}v2e}o5QQRBZ zYoLIn7Buz(whyEb+J=Ff3!1n=QVYwQP^I8D3`i|le{ipXHIiD;xCU4psu<=5uzML8 z7`%|w!tyaxDXO_%y#_%@YC+>1_{@cssh}`}m8n?Gb?G&TM=}>Q7J<*)93-`%aeCyq z0NDi!2e983H$TZkQVS|ekkx|PKp?fCI0waX5t3Tah6QA`pn4mm7G`cWl3G}KhVD18 zxq7_@JxFSupmi3yTClkc3=E5q)H*}Qj6vpr!UNQ|Ms~vnB(<O&6(BQUYC(N#WVHv7 z)Ply{K;~g}!;@78myy(h#*}fYmA+!|3`s4lU4qrz@^*utNNQp260B-3wi)n%JOj=1 zuyzSnwKLld<dM|E+9g=kCbt_HA*qG6OR%cVZ8va5QVVOBU{!mi%^(6vEv#LFRqeGl zgKQ+Vpm`je;cMD%P=}-zG@g%Bt#!M>L?pEV_|jQuyTKA9wV*i#oaR32HQ0`%7Bo+Y zQ>{+B!6_uQ!T8*8zt`X{lG+e_Y8l!MJ|L+L#iv%Z-GCX?;ee){Fnns?w;6~bsSU@c z_G_DgCX!mv<T%c7_|;}$gQPYRpSe%k4E&MQM&VQYvdtg~No_PfwIY26rATUH@TvXr z(4YfJEoj0Sr{CDi4QC^%1&tHpR$FGc4oNL&UJ9q$|HXy}k<=#ObMK=<!z)N?LF3Xm z&AnV;_#8<sXsi;aTHQ3mUr1^}<J36SK20{{1$FG8=?pYpjZ>}r3I+uvwV-ipoN715 z7#bs~1&x>DRQoB)&<#l~XdD}-+R|GFkw|JY@P+TuTLw8uYBTYvb-HX&kE9kfW{cAe z%PtyBLQ<QJ&)mO{43;9P&B3R3$|HmANNRKOsZDxha1u#v9zM0}9va+6QVSYm#_6}X zhX!wv)E3|~*Z-jbY(WsHy;6uz?T-fr!k~r-G@XHVRN{2Qjt2&6NNS7mnJfFiz!FI< zXn_$<b9di2@Ig`wS|fr}ZRLG~cqFx;xqh5#7491pA*n6L=iWQ_3|f)Yg2wQ1n#*|4 z0JLrdRR4m)w-TSZvUd$uBbi%;Pp!ipgMCP9tMRGba@*h{lG+-4YBO&eJV8=hi%+dy zz2SExwRQN^^41%2fd-wRX{R2aTK_sj86>q0_|&@B8R{dc1<jG*jEgh1hE7OoLF+nj zs?Df13`J7gjL!`dYYa1x)VAPL+gM{*jij~}pW5lwhJ8qC+wiHauQptWq_!QO+Qe$Z zEl6rR@Tm=~Haw1`wiBP){3^p+NNT(Asr9Qee2b(OG+%`?F3hV8!IRI>w9|vn+#i*O z!k`W_RBbOlwQnj7)sWPJ*6`qT!;MNqOC+`Z_{=?0Y3PHbb^<=N^C}JFkkn4Zr?#)s zumDNzBz$U%Dh->E)K12y)~?cU3X<9>_|z&^8m>lCI~AW=(MrQZNNPdzj5x#hRfXYA zB(>A=nR~3l@B@<C8TiyLtT1E;4T?b1!%Tc?t11lTkko?KYvFWnewv{vlG@q$%&jOl z^g&WP2cKHKa>HaKwR7>QJzi#5g`{>KKD7;Hh7*z0&c~-Vw#;w^l3LIrTAbm)Q)aji zNiAr87^m8YrG{6K)Gos32Io@4S4e6X<5R0wY6u?igvRj_d}`;H7>a=^VyN1s_|!I* z80sLY1+7EH={J`WLnkD)%ki1pQ*0Q4q;>^9wf4n^c}Qwk;#2#f$gl-T?J9g~Hy0Vs zLQ)G_cZkz(Jw=8akko?a^>M1bU1)d=N$pyEZkSqVcn3-CI(%xa3JpIYsa=mx?f(Kp z4$y!aG>$jmQ@g3aP!37$Mto{z3k*$>)NaD3c4oez50cu=_|$sm8zv*E1+9g^8NR>s z46BgTZpCMAPoCjKB(>Y{srAk?T!Ex^J3h7Md4~Iu)PmMX<8&`up5ZklwL9^dyCu`` zEt1+@_|#@+8nS=}LZNZI8=u;sOhaiTwV?GQINd9hX=sF`b}v42S7sP`AgSGlPpw;q zVH}d${rJ?HWf+zssXc&C?bLL`9wfB~@u}@fH(ZRQ_7Fa`KIw+LkklT=r`9#y@FJ30 z(3%^Z;j5Ew_yS4oQGDhGr5XN5QhN-a+WHhjG0>niG(8;0r}j^>p$?K-&;}Ts?qy6i zbV5>l5}&zBNrn+fYER))`#r%h4@vE5d}`(54O@`Zg4QYFbnmn{!&yjbLF>SAs_lw1 z+<>I^96mRkh&DWir1m^MwU5;e9wDi{fKTo52L}I;)Lz7=cJTuPDbQpBG>$LfQ`_~x zzzj+4WqfMu9~cB7sl5W-s{ot70Il~!p1;UIQVUuK2I>OC)PmOgA*-!JQhN=$=K!V_ zwB8R{?QA5q*U{91*83r=-HD|32AW#X8hB*2*OAoTL{ke|8;Gp-E0Wq<Xlg-g1CiAV zg8~K`7q`*Wg4PBit2IPYdk0M|Xl)>}T7M+9chS^>)&?T0%|TKN+RuO-7oaus$Z9*0 z)ZRxk7qpHLS?w|;wGYtLg67JR)gDGt3p%q4*$tq%Mr5@Qkko?K1tO~j&HEy&{fngb zF`64dbGgWBr9cS}8W&H{)Pm-}k=2?bseOv37BmNstTqHmE$AFFoMj37eS=ISwa@Y8 zw?Fp`>X6jFz^C^4J%h<eYG2}0d-|Ti3M93!@TuK?&tNZ-TF}{MIQ=&Np1~y~wQum5 zJNcf$b0oEI@u_XUXYdC}?K^yG^X?f4fC>y~9E0}d;B;@|Jp)xFwV*YnIMuq|Gq6HZ z`w^cTtnL~3BdPs_Pp$4fgA^pSpYf>`xMxs_r1lFwwLk9~^dYGQZGge)w-<K}79*+s zhR@tHcMWzRsr`;m?V-B{XOYzYz^8WIU4utRYJcKWJMXT+cO<pH@Tu*)YrqYv6rkzh zH$JsRcMTMf)c(PzHtDW`DUw>yeh{4DYkSwg3rQ_#Ju*(UdUp-tk<|Xj=LWI61|>*p zK|4`#n*0BbK?jmr(B4R#YVY4Mn2V&A3AC3IG%ydvC~Hv;-7(mNq?Q?<+D&&1jw7jM z!KZfC9fLbaYFY8AZM$Re5lJl@KDFg{4A?*wKQukC<5Qb<$3PlMEeAfep?3@nkkoSG zQ)_d_z!ga?7e2KbcMPJC)N<ofD{#jk4@oU(Ej!LQ{(0M=8A&ZKK69VlHkgj2mJgrW zi?<C{BdO)br*_9}gZ)Tq1@Niuzin_CNv$A0wYj$qULdIz!lyR!w!vQ{wZiz+`rS4V z0yPAoX-5Q~THD(O>PTuu@u^k6ZD50>Rt%q7mwLkhB(>uB)SA~DrXZ=6z^7KW-mn5m ztt39Rzv>Kokko?qLEubhPwEU8AgPtcXYQ#w!!1Z^W$>xpS7&$vNiAq^ElxKqtuwrX zq*e}}xwGmFKOm`<$EUWk&X5Jv*oUSE1$=7b>kK83)Pjzh!0BF_Izt^KwMzKRHLNpq zKvJuWPpv|oVF;316?|%W>I^fG)T-iB`@Pn%21%_NBV^w+tp5gD|B2jIZbwq9j?df! zwT26j)Pl}4z!_$%Y7KWHsRiw~!Krq3t>GmkwOaVx&`@jm8cD4-KD8;ehAf~C9W*`Y z;8W{VYbcAP7PMCsr+bZS4b70$>ftk2uGY{WNv%FUwG6d}8Axgk@Tq-YW7vqK))1fC z`!$BMkklICQ+v6_a5IuxV|;3l)fk>ZQVZHsi!;nN*BCxQQfrFO+=VrUe~{Fg;Zs{# zV<-aZh(qJp9G}|68bci<wHEl)2G$t5AgQ&)r`DpzFa}Aj6+X49HHIZfYC(I;aE6(9 zjbRUxS{r=k{-`!wilo*SpW3I@hWn7z+Tl~Xr`qs3l3IIwY8O-+en3*|fKP3EwIL^H zPy`xpj`-AORvRiIsdd7q*0<Ww8cD4)KDD;hh9O95L1#4Jj0?kR!(1e_uK3JVuQqH$ zQtO6KtxUDyd?dB*_|$S%8}2|->w!=0mny@HNNPRtseMvq_!3F27e2LDstg%H160s> z1MPRj8D<Bn3?-4&`rtEnO_iY`l3LJN7&y)Ct}^sQQtOA$+>$E8L?pHT_|(Q#8CD{x z4Zx??xyo=NlG;FgYW1rOS0bqm!lzcU%J3kP+F*QYIjRhABB>3*r}jXl;YTF3pfj>? zhHrbNAtz{H5gNy!Ge>Z$&95|6L{b}$&keqnhL%WbBk-v;t27KmQX9z#IsXgRh5_x} zKyJfCAgPUFgq+y}Qw!RU0atsg!mt)eEocueXh}UxEodJCT<zlKCkv6(#-N!C+6w_! z+gV`<UAhSEl|#;&0F9I45(nvpD~9e>0l5X2IB1*|T|H<#m0IGs+(|8Q=#&`vj3bag zK;stp!UvbVFmpg=fH24$&{Pa4>_B`N28n}~yyFT_T;`98|Nl=;yihCLaK$e!^Kr#5 zsp9b^`2`FmN%3i!MWK0_B@Bs0$r+jPNCN3ONjVHq*?2=33#tw(&XALtml_{$Y6xQ( z!5F46h6RIXUS>&VVvd<%yaAkT8E*(<o14ZP!Pq8d@x}~(sU<<F>50X~ndy0^X7Q$| z0_O2%r~(%8=BNUe@fIioMh5Yg49WR<B}Mr;Ag{(7BJ-dg$}dPQN-W7NO9iQ5K;gw3 zqVl0WGlO~B(i|#cX#rzcLK%hz25=TkxuF3pkPHos85n|{<CAmple0mLqSWHl5)dOZ zub{LfI5D>%Cl!qwmY9>70uoEh%qdANN=-qiLKT51bPo<<a1RM)a1RF^^5^5i;2z`( zIr6U{zO*2|B)5Pez{e-v$KTo89drtyyHmWokCP9Bv$K!4KZNP#9P9*Ty1-~ph?IM9 z5cqsY_mE&P9T4Q>0%pK$0du@U9NptXV0s}uXK#oJ5S|OvJP6M>7+EeTI0T97>=+Od z8sv&3666}}imW2o!_y6!9~$7|7=of9)Gx#p#n50^A44P)gI#@$P`SpaToWX2Xs~M# z$aBaBz{HSEfr%j-1rvjs7v%38AMWWA;=vFCXMq9|DhOr<hd2g>FnB_fjAuL~#dyXe zCm0kSBpLX}qb3dpbODI6VCVRPqWt94;^NG_beH@*aN^6!PfQ8U$V`JK%*+zUl$4^> z;$l!D%*;zJLg8kX1efN5WWc%*%t!`Lbff*_!D_%J`^RVIAq)ob5axn-5M!Y_N^=<? ztVjm`csG=60QE*td;ut6@=Aii=U)Z~#ix~)lommFF*eEhdBr6Lb_xtorlFkzEJ))$ zokHDEIPp%QZte`AFhw{Cg$L7u>;sSjxPOopfI<f%8C;r+kSKuVc9;+%Xgm?Ygd$m* z%K()^7zEM<3TZG6Qw<7<5(vkK!9N}pXp!;$AaD9(MhR;4LzD$O$NQG%lmw*~m*#*I zL2hYIi9e{k%u6w1hzSmgkBl~njn9lXG>p%SH&8$kGQt!x#uPHa6f(sWGQ$)y#}u-_ z6tct+GBUsv!gRe6rt6I`U2lZxdLvBN8)3TM2-B%Xm`*jubgD6?yNog2WsK=AV@!7$ zW4g;2GgOT+oobBfR1-|6nqY>i38w2!FkNqg>3S1P*PCFv-UQS2CYY`_!F0VTrt3{H zU61JoOebKv0L203n3)A4gc2|iA(ViD2%)$DB81`uh!Bb!AVOFiff5Q}Rj4@wB7_nO z5Ft#bqNaI>Dol47VY&-78-O)p`WiLSfEA%88i)`|qJaou1{Z3gfvCcC7HXn_sKN{` z)I<YTg_>v}LYTp2is?sFOxK%Yy51BsP)#vikEst+8>TK~|HT)jrbEkh<cxtPYzQsx z(S(h#3manyqofCfAz)!lv%$icW`l)sm~DdHN>l8@X4r+zF@=%p4<u*D=fz`jb$nht z7DvbD#bde|IaMIc1&Lys3lhaN7bJ?^TueVBCpd&{AW=-)K%$tofkZKF!=8>nqL}7_ zL@~_;iK3Vb&PRqADG?!zVlqM)#b|^u4zp2G3qmzY$RUJLQVT*DCAC0=LBWK@fgoWl zE&&N+F&iX|X*Q^6!Sp0Z6w_psRsuM}!OlZzDIf_W7a~Z)$R!DqFmm;RBn*m4Sfdaj zjM7v<5=O3Skc83m71-IJ@WAvrNEFlOAje^<1&Lx;iy7k}wV06t5{1S|QEFlev@;ZK z0IuQ@WdyREAs#s+JaWc_<Unz5pui9u6pv&bC=lc04Zw}^Vo+x*C^bE^xFoeG+8`EE zs-cL2l!IIkYsX_s8XCmL<B>JQD{F*T))=p>30_%Kyt4Qt@wy4GlkmC-uY=6+ImjHJ zqy;`nOC-tCTu?k_#v_-R#c)ATEdkAy2tiQR!4O0$1Q05biU5QlQhNd+2+ANBW+Igd z2$hK30vAJWj3NY)$_RuYH1UJFqX<E4zC`Y>Ayi`XC32Syp%R-fjj=fixt9jlj$8sG z1hIG>xw8XTh}?2T2x4;)a_beL5?i=qi*)2xEnGKpyA~mcE!>gYwg{D2Ey5P=$Squi zc5J>h#g@8EvH234J!VL)3AjDjQZ_cLvDu7fu_3rLM++c`AX>tN2%-fLL=es45J5CY zf=6G_>;a3RSpybBvjr@MW(imfn;mEY0ak|=5MVL1fUp47TxjkCi=nv>EQaPjuo#;A zz+!0b1B;=#4=je}KCl?neZfKT#ihBRDi2aULfFt^6E#bN6d_4K+j3CdND|OC2BrkG znSm(*ZE|8tK${?#63|u%rUbMhf+~R;?nwRsNnrH{NCK-rKoVH}0g}Mx50E&b@JHAU z631pWNF1BZAaQIKgT!&!i!Jy->am3$NE}<>A&-QigevlQ7^(y`X+i5DgqM*UyeK-5 zN61hmK(4|TddLGGs5(&d4%l)?fdNX)XaS3mKnq!f1X>UxB+$YTA%PZ%;KBf8H<~x# z;%JEgE{^6_xHy_q;o@kC04|Q^1GqSv2jJpp?gtkZSlka6M{_@19L@c3aWwbC#nIdk z7e{kHTpZ2)aB*`5hJtv5_{=<p7(buzc+l89I2AxVXb|roAL{4q@8{?09OCMtfK8Dx zel_5Zm!V0#Gnz>Z`WgATsm1zPM#j0Rd8z68zOF9L{(kx;1-hWAr=nEd)RNMa%*4DB zUAU6sqGbJylpKA;q_bXGMhb&|K~a8|ennDgW==}6zNMw5rJg~&r(a0Cfr)`>yn%&@ zfqrIQaY<rMPO*MsPELG5PGU(~eo=0*epqH%VoE+#i+)OCNuquk$O4c>#U&~6Mg|5J z`o$%Qc`1oSDfF<bB(<U>GoOYwWu~U4!n~Cd55Al)-q6s@1Y~6njY1Naow`Z+DV6lG zIIlD}wJ0+=zPJP&jkNbEl7-0LBtOkV7f^tLi;}E^w5$PQ6eRB?=Vzo8mn5d88S0lL z7UZW?mg+|oXXZvE=LaX|r6lE7=!3FEYDI~DMR8_sS!z*cT4pjhuf!K5CTAz6rxxqy zW>%!8#OEaDrN@`$lvEa^LM$NP%ZRx}&>9QR0KGDDd=B=YV`)leen3%vvR-j!u6}W5 zZoHv>QffwG8Q4GiprtDy)4^(sQZgY$fwNDszNvw^iK&?ZL;&RPocwffSd`{v7H8%b z>%058kf{?iPfVs((4;e&T0s-JWNP&Z4KXHPs}cEHO~}`3O1@SzGPSz7IJ=Um)!8v9 zD3V;?`i4fhS&(TlNUu4WdVNAe49V0Q=IpEoI=>OLCK0qA5gCKTKp1r1G6;jtxdCC& zz9kTz!pOh?!n{lj3?N*`#J~W;UziveK-ij@fdPcum>C#A_&GBJ0|=Y4Fff4dWEKVn z5I)PozyQJ=tPBhw?99r*0K%YikwJJTD+2=ve_>@{0AYPL1_lt$Vq;(c;iYU03?Te~ zje!A#W!V`RKp1ouDhN+yXJ7!~3+xOGAPn*&$X_rT#0IU+gz-tGL3%;kL16koOL9T$ z6G3Z$LCe-*;`F9LXXAtJpaGpZ54zJ1bZ-oZ4Z0@}bY8qY0|Nu-ta8v9<e>AyL1%D- z&cFtpZ4Eky8gyPW=)7dmImn<hi$P}wgU;avov#ZzHy3msF6f+F(D}8Xb7{3$85nd~ z85j&%85puy85pWr85ltE7s<oG5W~a30NQd3y6*>c#{lSV2GE@VFgJqE+XuN1<~ERf ztr-{?Kxe;$+zC3X9dyes$i1NR%0cIlgU%O+xfgWCHptDOGqFMO3B$;1EDNA}z$>6M z@|tm&dTjIpki$Xu)k0}>edv6c87rXsL^nWbbakLL-7vMt^akjD!W~c=T_3WakoE0= z?mIgGrP1|)(kZff82bY#kuoqa{D9Kv`ao-xVQP_S0qBBP2`G*3ALud5$XdW`P#y#^ zZs5=d6$U9m!5yGX#lXNY0ZOCW2Ng!q1LAl<&%+FW(&+l2!XTw6m;-tiq5zae*9R3w z(F5X~fJ$6|(&+l2$M1oZqTmjw!~`gft`B-l8;Twf#{nwg0j1IPL680dDMi6Qpz6Vw z-$L&fL{@;l&KV}R0czk5D2;9(XstU;Ei#<}HLw6mqw9knk%O!S%vOLJr~#$X^+Atw z0jotO7OaKjloe1KT_5y_5M(W2cEmb}z62<Zt`Ay#fYl-s0_!3AB%n09K4|fQtOd+I z0abqiN~7z879U`>$ixk3cszj8==z|=2eKA0djd3|XFzFmebC|qtQMK@fCh8`lt$MF zssoYL!`aY)=77@Z`k-6#;L2f)9Z>ZLpftKZXmJHo4yPM7K;oeTN~7z8ZZm?bhcPTR zLi9O6X>@&{dL5<~nf?G({{u>+>jRx@gsdLMUa<*c-v%g+t`Bs^5lk&Iov<0AF9S-W z>qFmf1Jf%3z34{)N~7xo?bU&)MW!!6)!%^9==wnCAR()Vu{*Xx+&KYCqw52mi3C%N zOgn6Y=<|Tm==wnW!;#g)*gv4^8MZ_8qw52;$6#ua=?zfzJD@bWKG6OwWc4t1#tw)* z1yCAYA84-@Of534uoI$B14^Uo1MS;FRu5xGEI_T{koAGspnD==YLV##0{TFAUm>f9 zu`>wh1KooKQ;SR&5YPv@OA=W<jE&wtgM<=HmVp6uKNf<AV4=6q(Di}t%0j3{u+ZCQ z==wlyRfK8;3%z}Yt`F3{MW{xw(A#I|`ao@BglYr}y?utR57drEs7A1EKnuDDP#RsI z5ke^n>jAW&djX}<^?};#C>o%g6VQV00+dGA2kMJJm7-7^patCyD2=WU)HguU0Oibp z7IX`sG`c=ee*&r$g=&BnbRAF{T_32AgrWh;$$%Dg1yCAYAE@sFRf<BPr)y~S30DK^ zi@`Za4D@u3t`F2lLQ)QAqNh)EeV~37Trm;@J-wjovq4ge%tTKw==wl+eIcudvC-2D zx;{|f52hBGMo%y3`au0fWc4sMdU`?E2kK+O)FRX9=>=UMs9%b#9>zvbFX;L}eOZ`V zWEwrcqw53p*OAr3*a6TAH3CYb>jT{%22+bnTR<yR2PloM4>UG_tRBWzfL5p)P#W4y zgGn=h`sr{E65|F`{R1eCt`F3=M^X-Fo_Gf78D4<W$ofEiR?v6=Trm=30<;330i}`k zfs}#9JwP-%_JCI40Z<xUA81SrT@Q$F@EYPy3n-1O59ChJon#<&82xH!#m@nyk@bPp zgT^{QG&&A=1+gyzN+at7*#{cW0qH^S|L=g>a{x*s>jS9=jj4cWbS&@&VxI(*M%D+i z4>S$~(u3arFMu{sDxfs7K9G9!u^W&W2v2wcv2O;HM%D+i4|KN~NFAsR1fpSB1KO}L zfYQkNKx#nuoPlU`T<{WNUj>v#)(5f=bmtjJ4|@6k0BX+*D2=QSq#iV$2BOjN2WU9{ zfYQkNK=y&|LIdf6xC+FA;2F>c*a9extPi9DbT1l+M#mSRml)lE(#ZNi_JPLyKzdMH zn+yyA(1u$Clt$JEQV$v@1kvbt#dC<uH$Z7*eIWZlcc+2$fY=}!hB=@OJ^?6=tPi9H zG$sk6(eVMO`V&wZT_5O9HFP~7{(|=qcdmfa$ofET1KqC%QU@K@0WrZ?0@_eifYQkN zKng(PrXU&}Z+Hi>ZwHh{)(5f=bnhBS5Bm620JOmu0i}`kfz*TUU<1+Um;>726M)j_ z`at)wq3Z$h6QB*g3@DAR4>TqWQiqNupbb6+D2=WUG>(j}2gJVsReu9Yqw52WJ%iMt z;|^#;aRQV^*9RJ}M%M%4J3t$X9#9%xA83plqz)bbfU0MJHW<<MfyTwr^?>*rpz3!( zX>@&{v2>6+besWgU=~1WbbX-v-q7`c_zKVlrUsNo*9W@$4Wteo-+-!r0Hx9Of$o7r z*8}2DfHq8LKxuS+pgZ9}>d>(Vv|$<mrP1|)?uSFy1Li{;rW{ZjT_5PKIIuc2Vh2?H z0Vs{G4|H!Fniep(0NS9ffYRvtKzGQ26`~Ou&<3pmlt$MFx=#*G3z+)=s{RF(M%M?r zTMn!cjhF##2rq!r==wnS%%N!ka|56a;Rq;=t`BtQ99SV5!2xXu3qWafeW3g2(6oTL z2cYUtKxuS+pu6b63ekuPXal+dN~7z8&1<4*V=#a=pe>*@x<1eyb?ACP{1;I5AD}e4 zKG1!2Aa&??0kq-00!pLn1KnMRt_Q@AfHu4npftKZ&^>k_b?8_C+VGZu(&+j?ciN%r z0r5{j)n9<p==wnS+kw=f;|6Ghy#q?4>jT|&hpq?2w}3X-9iTM2KG3~)Aa&^Y162JF zD2=WUbO#=~9uR*8w4uKNN~7xo-G>KKhmI4V4gCx#jjj)LHy*kk5MKh?&{u%c==wnS z<bl+o;|oyrH=s1SKG2<c=z2i>4rm8q0+dGA2f9BGqz)ZBKsyK?P#Rqy=q^2UJs|!M zsCouyM*&?Q=w3aLI&{1Ns(uHQM%M?rV-H;qh@S!NSQJ2MbbX-v_CV^;u>!PXp#i1Q z^?~l*L)Qc1-+-!r0Hx9Of$rf0sYAyTpdFGKP#Rqy=uSR#Js`dZv_ldArP1|)?&kxk z!@$rE2?vx$*9W?*4?_<F1H%re`U6lJT_5P)K5Y65pdFbCD2=WUbcY`{eHze?i~*EJ z*9W@K51YORQ1vgMG`c>}-G12g&46}*7C>oqeV}{(u;~kcc7P(FG`c>}oqyQ$aX>pj z0#F)VAL#x+Z2AsB)t`XU==wl+0b<iv0qr<7KxuS+pnCza=`(<KoGhR;x<1eyf!OrD zfU5rhrP1|)?hC}GZvnK!wE{|`>jT{#h)rJvw8NDErP1|)?h(YMPXOBCl7Q0a`apLI zV$*j5s{R6$M%M?rUl5zV253jE14^Uo1Kl-<O`ip{qvimm(e;7u9mJ;Z162JFD2=WU zbO#|eeJh|HybVwqT_5N^LTvgHpdGvnD2=WUbT=V3eG<?Po&uCc*9W?%5SzXWQ1v&U zG`c>}orT!+bwE3Y6QDG@KG6Mz*z`F-JBA)m8eJdgE<<eken8bTKs$)&`j%nS#K6F? z0jhonlt$MFy5kU=)(mKevH(h>>jT|)h)tgYv_q)@rP1|)?mon(?*>%;11OEI4|ESA zHhmMI9nl$38eJdgPDE__JfI!X04R;F4|G2wHhm1xjwlC|M%M?rD-oN%9Z>ZLpftKZ z(7lP+^c6rmuoX}mT_5NUMQr*spdDBPD2=WUbe|$NeGj1OUqESeeW1G)vFUpO?f8Cx z(&+j?_bg)5_W|1R{Q;%X^?~kO#HQ~Dtm6yq$fD~5-M@%U9|N=l%K@d)^?~kU#HNn} z+JO~-(&+j?YgMu76M%MLC7?9AKF}SF*z`$2JFp5+8eJdgzD8{N6rdeg4JeJS4|I1U zHhmh<4y*x`M%M?r#}S)8184`<0!pLn1KsI}O`ip{1M2{#(e;7ucf_X80osA}fYRvt zKzBW2)8_&0zy?5RbbX+EAF=5RfOcRbpftKZ&>fK2^hH2BunABaT_5N^NNoBNpdHu@ zD2=WUbT=e6eHqXWYyp%;*9W>M5}UpPXa}|eN~7xo-5H5ZUj?)S+W@7}^?~k>#HOzS z+JWtW(&+j?cS&N?*8%OoPJq(r`at(eV$(MP+JT(`rP1|)?wG`;Zw9mjy8ud~>jT|4 ziA~=EXa{x$lt$MFx_c6vz7^08>;@=}t`Bq%B{qE<pdHv9P#Rqy=uS#(`gTA&um_+t zx<1hTl-TqgfOcR{KxuS+pt~xu={o`Kz+QmT==wnSR$|k40osAR0j1IPf$p%xrtb!{ z1N#6<qw53RXNgVU184{K1(ZhD2fEu5o4yy&4(tagjjj)L&m}f}AD|uBA5a=yAL!0Y zZ2Eq{I<U|VDY`z;{g>GEF+e+_98elvALuSjZ2CB$9Z>-&jjj)LFD5p92cYUtKxuS+ zpgS_L>8pTtU>l$`x<1f-nb`ChKs&G&P#Rqy=<ZBx`d&cQe}K~H`at(+V$-((+VNch zrP1|)?$pGlF9O=}O@Pwq`at(<V$&x8?f6PSX>@&{yEd`uI{{UH0ZOCm1KqocO<x1F z!`uO-(e;7u;KZiS0@`7AfYRvtK=*NC)As?Y{s)vs*9W?r6Pvyj(2n*7D2=WUbWbNX zeF@Nxb_SG2*9W?@6PrE>Xh&NCN~7xo-QS5#-vy}p8&DcuALuSmZ2CH&9rOuM8eJdg zUQcZL9H1R^4=9bU4|K;THhn*!>KULNb##58`#!Ph+W=L+14^Uo1Ks_JO<xAIV_yKJ z(e;7u0mY_I0ot+GfYRvtKzD*-({}@^{sELm*9W>E6q~*Y&;fxNP#Rqy=&n#~`aGZm z0s&AOT_5P)P;B}bpaTLNP#Rqy=nheA`gTCoAAr*6`at)IV$)Xu9Z0Bv(&+j?cZ*`v zmjN9RD1g%F`at)LV$-Jp9T3of(&+j?caCDy7Xj^{CqQX*eW3eCvFV!t?J&=P(&+j? zcadV#cLLghy#S@r^?~js#iow|+A-vS(&+j?ca&n&X94Y~IY4Q2eW3eFvFR&-cAP4p zG`c>}-KE&{t$=o9Hb7}~eV}_xvFUpN?O42k(&+j?cba0;Cjo7+D?n*<eW3eIvFQtd zHlQP*G`c>}U8mUebwC@m6QDG@KG40V*z_HMHZV^>X>@&{J5aId`vGh4K^t)B`at)g zV$){;ZAe)_X>@&{yHT;}%YZg)3ZOK)KF~d>*z_%cHZ)d1X>@&{J5#agi-0yX5}-7? zKG6NC*z^fN8yXT&8eJdgE>&#$PC(UPfYRvtK=-O*)7JoPpmacKbbX*ZR<Y@`fHqJZ zpftKZ(0!}e^nHM;{{f}Z^?~kQ#inlsv|+OWN~7xo-NTAaUjnpYlL4jC^?~kW#imaJ z+OSc8(&+j?_p@TtcLA#Y29!qE2fC{jo4yWcgJ=SjM%M?rw-uW{2WW%H14^Uo1Kr_@ zP2UfwdIo622wflOK38n|HbB+yfYRvtKzF-h)0Y8lNEJY7bbX+EUa{#@fHtHwpftKZ z(4DW?^xc4}e*mS?^?~kx#inlpv;j5)N~7xo-35zHp9i!7767Hu^?~k%#iow|+5qE# z(&+j?cf?}Tw*#vF0F*}82f8m7o4x{Q!>s~Jqw53R9g9t$2DIU30Hx9Of$ovTrtbk% z{R=3Kt`BslEH-^JpbfqSP#Rqy=zdvj`U0R0z6dCdt`BtAEH-@{&<39Xlt$MFx_1_v zz5`J8C!jRCKF}Ss*z{FE8;T838eJdgOb2ZG44@4~3n-1QPZ6|O6^q6fQ1u_6G`c>} zJ+)Z0F)V;KFjqinbbX*ZYq9BzfHp7_pftKZ(EYX8^a(&4m=aJLT_5N!TWtDHK-FJ> z(&+j?_u699*8pvpc0g%#eV{vTvFWpbHcTC$G`c>}eYe>3eSoU}0j1IPf$qM=rf&tb zLAwD;qw53RgNsdH0<=M!0j1IPf$qe`rcVOepjCj<==wnS<6_fy0jmB6lt$MFx+@o( zz7A+ZcmkA0*9W>c7n?o@XhYZoN~7xo-Jy$3-w&vI255sAT_5N^U2OU`K-KSn(&+j? zck5!)mjP`+7eHxreV}`GvFTHQHlQ`2G`c>}ox9ld-GHip0Hx9Of$rbMrf&kY;XMON zqw53R#fwd!2ejcG0Hx9Of$rtSrjG&I@aBNh==wl+^kUPu1FHT2lt$MFx~~_Tz5-~2 zy#h+3>jT~0i%p*fw83rwrP1|)?(xN@?*UZ(3n-1Q4|Jz5HhnXo4gCdB8eJdgeqU_* z0-z232q=xN4|LZrHhmn>hQ0ulM%M?r_ZOSK15ouRpftKZ&>g_o^i@DR2n|pgT_5N^ zU~KvfpdADYD2=WUbT=?IeJ`NuKR{`8eV}`SvFTd??O3dU(&+j?cLrnA#{q3X3qWaf zeW3e;vFQ_lHlQV-G`c>}UBcM(NkALW3Q!tdALw3TZ2A<S4QLH0jjj)L$1pa18qfx` z0hC792fA+<n?3_*1KI*gqw53RJ&aAC1+)R}0Hx9Of$ky3rq2P|fcAjW==wl+5@XZn z0c}7BKxuS+p!<oj=?j21pd+9(x<1fd#n|*kKpW5rP#Rqy=-y&%`VycG=nN>0t`BsF zF*bb}&<1n?lt$MFy3ZJ!z5-|ix&lh0>jT|wj7?t!v;o}!rP1|)?m5P$uL0VC?ts$h z`apLcW7F3GZ9q?e(&+j?_a9@^Hv!s!o&lxN^?~j}#-?uuv;n;UN~7xo-HVJ(-vVd@ zdIgk5*9W>I8JoTp&<6AdD2=WUbYC(yeH)++=p9fRT_5P~WNi8}pbh8(D2=WUbdNGN zeG1S9v<8$$*9W>&8JoTvQ1uU>G`c>}{mR(%O@KDMXFzFmeX%(DM;_3IcL0<|*B6IF z9|N@E%>kv+^~K}Rw*#vF0F*}8mw-cG0kpwh0j1IPCF0Ph0d24wKxuS+NjUU9fU181 zrP1{z<Ipz)+R$GBrP1}J;LsNUZRkfpX>@(5IP`Hq8~OrJ8eLx+4t)a9hQ0)pM%R~) zL!Sh+p|1d?(e-8E(5C=x=xab}bbXmP^l3mF`UX%MU0)UseFo5mz6F#<*O!e$p9Qp` z?*OII_2uBu=KyW!dq8P)eYrUFc|aTb0Z<xUUmgy90nmni1e8YCmybhV1hk=_0Hx9O z72wd90Bz`JKxuS+g*fzOKpXl6P#Rrd5e|I?(1v~mlt$NAj6+`qw4vVsrP1}3;Lz6q zZRmGEX>@(1IP`Tu8~PKVG`hYr9Qquf4Sf$Njjpd8hdvKzLq7mYqwA}{p)Ua1(2s!9 z==v&g=!?kA$;_)zaB+g}tAo`&Fy)TW1J@j&^KLNtjnMHg*f>J~bOK--wEfEotxqMP z`GpA@?!Tc8MQvOS2bcw;^k@hS;SliWU|>+<U|>k&U|_J}U|?Y7U|;|p_3@OQf#Cx? z149wyScW0&!=dGL(D@e4&^6g0m(Ru3U<OH!;?WQo;UVw@{a~dL9v%bjeNcN0x%^Us zj-P*mj#u$P`<2h31F06cIx++8kx~0cLx2t;pvS?$AkM+Sz|FzHAi}}Ga0ufdJUTdH z)CzbAfP%jXsr}W6YoH9SW0Wx(0wXsBwvYA?2UX<5+FuonskeA{%u1C#Uijzlvy^j| zX3LY`xkjx{)K>O()pb6dVkMqxwq@mvSt)5Zq9)CJn4Pk0#>_2#osn+)OwJh1Ik(Y7 z`Ls)P_ov=7Vwq|)CAUr6X#2eG&ikLmvAfUhwEJym{=L}#J0o9vz=_>Q&ClNccGjrp z@C)z8g%|i1ueUQ*V_UE@SVN@lE5rZYzxw7S|9SRrv6-U5fn66FqTeUI-k-a@x@m(M zM>+e$bqZ@Z56yMFVf8+@y!zFTySpk6G|q14&y%y;QTgM+vxm(v&VoI&%>}nV>Cp*s z_^QCF*8k<eTFqqdtqy-vSk=O`7DR?6Wce_@y~=gw&gzDDZmiele>mXFvon2*Lwz?B z_vJmj5B%g0vvTREiVDOnI&jL9t7Bb2!rLJJJ7(Vw?!WzG)d9ucXweBV>knLGV_ou_ z>rGCWL)ohD!cX5#+xwI2#QXIJ4kodR_y;7s$YGtLAC|CWRl}>ZTs>=p9sUZks+nmn z__>KGIM}UUYVqvo6pMoN?y@u5G6tW`SWEf?65cs;y_moBz@b(yiMYiFE`1jjh+BQY z%boG!a?yz2+nF9scJI$vJiA`6x01`_-Rc9^9&&leFF$Z@CfA8+A~$y5V%~njZbzlU z|Gftkn@zbi{zWw|TrLvuZ#t9mWVim;x994vDi)FO)>!aQk5z4&=7P#Lrr_t=3u>n_ z8Q%|e*uL_>o%JFY>Vq0v>$MUr3ctMBcK77QEz8;SCO&*{)pg!;(SMg^_eNLDKM*k0 zSyaF_ta0lerbo{;Hxw>qnq;oAp|qXp62HcV&pVhl{SQdUKlEZ{;qFieyHy7cDzS>( zUwPnyA(uwIOXI|1(SX03n3AtoKM=dmUjOm6J(tX+4DAI!S1<*i*IvN;{%W`Ml$o|7 z7w$$k?kv|>Fh4NiVF)YF`M`vi-dr5<%MYC57ZunW-?;U@w!*(TOwtQIt28GYi`<BM z(Fh99*NwlF)_*Af@q>HUmxGN9t-M7i{N2D*tt~p?{~{*#WG)Re5s6*?j8E@t8hl#A zwCaCwLe8&qyL7%@*EA?xz%<KS#Nv4d|DDw?%Zj2F>~(6KsjsnMw^!p%`HBbY+W7xn zeX*WjCg{gnrnXwvY5!I?6r^mLW2e17)Zq&Q>$ScRhd(Z?X6M2jJ_)gITgByZf6;++ zR;(%Yix1pWV}0^}@qvR=VxK$-sOe>L{$2S%Op@=9tKM?vc9&_|3x0939@7hQ_?yk; zb7x7zvnbYOa$yd?Gg;HxxL)|pQ%XO5CywjI`_%^yRf`zd_%)vH|9;@F+mTDhw>tb_ zVh!83sv#q`aqDiIg4OSu_rLns&eU!)FUaAOD(g12w_3~lzr?VX32~j+7u~owmFq;k zPh<0E(SSc)OwQ(73u=}#Df4SBxD}l6#+CI-`7AB<<41B>O}+;vyfWawqjb1&|B1KB z%<U<5s~X-_a-9hkxv<}{v30&i!jA?fZ+{JiKTS;9)^1O71m`Y2a7$WLz+ZDiVGq-! z<=O=~GIy@EF@N7}8~yy1qDTC~1LwYSo%k2gxOW@-JEI>D;@kctH#)PO*IsZUbCVp; z*${`Hyj(ppiyB`27Ll;_W&FB`NqD;Ug37r}!P~VL)b3|8t`BhdZpr$rY=)kC`#&C5 zu}54Ia%&D;s<tiY=3)P*)b7tI6ZCTn)1v8`8@~Cn9?1_*cx=b2vYRW%c6GxSZLT*y z-|xNtm_Dm^FH<$UmO}j&CU#3!5&NYFjvqUin`=>!A8lyzZ{B44{!ivi$u42q3w{N& z9y6<Ypx4a*Z^767Y<!+Mfeyw-&fA!SxkWD6IW*2(EONm%uyLoq)`I#@Chqv~hQ^1w zQ5PImE@kCuG0$*hp1MDSk@@1;s0$9c*YBosCMwv)b4z8sS<cF%BA)HYy!L6_!)?qm zKW-m%*d-uw#o@V<Zh}JfS}~IgyFIxjPTXJ2%F82njft(R{#p~8lYTZM^V8UG6TCf{ zC(aNv2&i2xW+Gti#4WKxemyI%%DGESY_r5O9GQ#tzHoi-@nL_L*u65lghwLd`ql-F zXYNKFaQLpMo1ySseSJanY`#Bha~J#%N(f+Xotu8@Xj|jM7~PBoU&M416l!*enFO57 zVr0H(ymdk2t>;@C8h>1ky5R8GO*cVdryI9ahV2Sgo+bZRu=19~U14I|^l(LtrPPbF z*O=Ho<zH)JV{6Z3WIoED<;c9yc+a8S7>f_)>l!~jXKI$}h*`?Y6S99XEANq6Q3o9U zPLI0a@W@j)VZqNPF_Q_iEWGtpdA6iyIx^2R&tzo2J4MW7!tVw#gA4Yt+)^4fVcZfD zaSK^_b@pG<zLRVuv%`FMO@Y2@Z9zR_>dV_z`UV2~oVle|{Bh!z=&)PI%6o+^?xC5z z?2p;^9cm8E+a#N@z%ZCw!b9&;6I)b!1|##!@7a#bb1!dcXnd2tWkKV;r%?wS_AO)O z<;lCw#MWhhy@}1KKZ}w1>Hcg-X2CPlwAq=j-rc&O@y0!n)89s2a8O#z%46bxv576{ zc}45(9R&~aW0>EbW@?r?QRB@m@#5YxR^BId%UF57?2fwN@Gw8>z=02<x)}?$+?LsU zgY6La)&-5H9HS06l&lmp39ydjmgrc2rHM@{RX0Jwav3XcPp|m9R%4kR?3vrbUP~BE z*cZ+%^&$rp-sdwMnfL0(J=|s{`y=|cL*1>Ioi|JjA{Manh)j;U;E>TNW)NWK$t~5f z<^mJjs_9vd%o{^NZVuDUP}ms9Es>FTp@}W1RySe6-bik#6Fy(<!k)!PGvECgb-^L8 zUN>RE{s?X<jX4Wgd3d;^E;zhQT3;Y7&i7}svA{YuHq(HeAg8Xo+{BjEpTWrd?s9G3 zvU|%Tw*B+@EC2L**MSPg)Eo6%E|<z4|G0j=_`!}9scFH2?2C8==X4mkBxW5svnf?j z`D9p{pK{d9ojo~O&x|e$2A<YPck$aiCvuBG%CehE^=FKt*$lffmOlGqYjpWZwf+6# zxa#}%?`)qJ&YS=K=JUTlbH2}$zHNK4`m6R%lU?7_+2)B$Z?v(^pZ{O`b@iVUj6#q3 zZ$?`u7_Vx$lEb=9TvMTV8PjfUkqNtf8vmMdY1~<IAXmBI`HYFv-{oFoTDpzt@NSWS zO2@{Fh5vG1Eq0fCbs$%MYiHfVhL4e489E^gq<2I&UHi09DK^9*eJj&ubFBs20~>#` zix}KkdEiko7f0{hCwqTAjgvSnEF#dUy`id$Dal(T!akm{(_7?5%+qFRBbgo78?XFY zsQR{z$>_W0hTYDLJJUsO$lFGibsuWv`jV!#pkxx$;cn4@lbQy*f*7}Ei%P^VZ#c%r zs<vHg!PeNum&-*iNS3b1>ATs%pLc?h#rd7DeAJ})1q}x!xpeA67#DVnM*LgFq-3tK z;a4#0ktnV;|05YY)kSX{5xJ=w^jmv_tuNzDVbL4D+6vzVS-<HAIXu+n`m*l(L0(C| zCdKJ>Mq5;B)-!3<2PJ&rWWBQIaLV?c_sbiOg|MnU*IZD#i|Mj_n8R}?*0lX=8tz50 zK6}k2acAv;)bBqY*ewbCvsjG7cG-bX|3w6DelNIN_tilD&Xt!6GpcglU6}OCT4cfr ztqqlpOhMsV8*1k=8QF&=eAi=r@^8U`I)BF2|5_Kg{iohtRI-BUaIr{0<!+|M>6#0^ zd9of`AK<Wf(Sawrb~_XgI~qK>Hf^Em%lq03Hb*z!{I9XV+)izGYTYCzw#}juKAH+! zd>WtnYbX@$WLkYcz~N0A>os$2g^v@MuJ;{yW~f}RWpTrVDdXKGRS#Z~8*=8p+xpKa za=khC>7cAL!$HF*_sq5|*&o8#+OK_KcL?Ls_1Xq8!46OPSl#499Nw<y>akznaO{S1 z%61>QH4R}gjW4%rE!gbRc(Y$~L3t<B=lI|Q3458k_kVx{X8Sw&sGxUR3ZK?6txjHc zI#1Brqw(uZE{{2D4m?X@U2-lsp?WEkQ7UWMbxnou#jM}9Yc2R7&YCCPsQYf6b;11C zjt}+f8OnE*H-Fz^C$jXqj3#r^4+hqdzK{fym(A8I7@C?_?M=_{{1d}!q8FC%Ns4t# zUO>XHbgma$L}uJw)^Kk!*O}tBH)73yMI&sS7#IHJ(%B!)II&nHLRUkfY%A02>)Hy1 zyP0Nx|Mj4ahyCD$;C?>cO#6imXY7nqx4(I}ydlP?@oy!U#vbp+dpEf>YTX(it`-US z*~heayXJzjex}E=tR`~74_c1b7QAP(DA><6p(b+rg01fZt@^(_<a%)?G~wG^yB*0K z3Knf~Wf`9TE^|r5tUT~&yQsjf(8j0nS_+>!m{$J}ad@N3dhKxGO<kd2ksEUsH(bf& z%9+2k;mmT88+)A?cjjwusPAUt@@1{!{|#}c_kW2fp}IiEsn_Locc+$YV#+$MWl*<@ zN$Rx7j5FE`N_R3{z8~W7JdHK&eTc(*Mb>Bk*EJk;XgvMx$Afic4DXudj$S`I>8-Lz zXu?kkRu?hN4ZrH-?-;TO$T;U5y)fz5QZA1*feD+JHC$0+-6kL6@GPI}jotc&JK6mc z?{2E!z{KUQeIa^9Ly%kJ!>3#;Y8)FcUgcWx*P-!aFIUE$^#`8#$={jqP(h;T_05H< zFE8ZW)U{&QG^n1!RHd$M@ZXM==Ui~Y$Io0GYl9Mg{^sg15sCP_mWk&`S%xF?*X3Iq z8jrk4PL(s+P`0FCzx0a(dmAs<ILuE}G<D{d%240h(0HbL>w?C2JL?{<W0qyPe$e4v zu`|Evh5c^a5*juB+)^LRG8mbc-p_Dke)u-(fWy-Dth_Gnvg+-;%v-l-I5K~H8Fj!R zd7qfc1RG~=iHy06S$UV(uV&>bS$D08ZBwXj!h-VMVkQ&*Zxu5zs0iVf()f2<|IX3Y z<_C|YI1>A0RC%Y|U&G4dvMke)`Ks`ihQ^2}ZmAXX*Rt}cfa=m&;hBugE8k~1GQYjO zrJ?c6`Yj6@^W3>5PS~zv<^2+Wjfssb-|NLqsT*cNJI<$61ebQUUiuhy!Qn@VZo-03 zpcYBh!uTDteb^8BngwX{+Fo&}Su196VMi#pl*hfbtUO!fE;g}U`hSUu%}PJhk@=?i zxv8658}EteW+=?Rz{JM3Jkt@>+F)c}$h~Dj<EQCc8X8ZOMqP0D>K=8#;f<bd#)5wv z#0)09$aG{rEB^OTY>Wkm-nzys(tXnxFKPUiqMM*lJV(srf^8_b#EDu5ZmAcb2G1e! ztqT~}FJk4HQn!MYw`F?<BlFbznU2gCLCvV#elZgPd3%39J~pX9-He1oD*Frm>$?<f z)7y9<Y6&avlJi%X*sQd-ENFa_TK6!|NS4L?rbGVO3(mYx@-H#5vCZDHpfM?$TY}^5 zr6#sh`WcMO6ART(+`Qyax=74GVD?g0-Yeo+jLe-&qb@iU?-Vnbpalxtt5F9Wp1J8} zEZ7|g3fu*(ykE+*7@1q2Z&|>Y|E9Cr{~Xk7mssjMwKEiCt~0S|EzfXdzNi{?z~OC; zZiYf#r<lQoh^4H&D%Z0anb)?7nM~N{&n@xd&4nhmP3JQhnfG4&{M9!@p?-mwfx(Q0 zth^%rmzda`y0<Q9Eb`-)=vZ^5iEY*OU#+`$lss6c%5&rzD7I>w#SA9gSjEa~vOSxT zdFApg3mU(zU@e+rFrhQUk@+qt?d3I!nQZv(%2Qj-`eftNGZl=nvvSwSluEiU*S)Yk zliO?I6h__Fpi^F&twE_?-3uIJj%K;=bW5ydc`GEK+@+Va<q@}clc?*NMI9O!`#L-p zO=bPatYq<xxuYXbiHk!`xhcZ_is0V8#_At!W`B8ix48cIna}p0cYojJIeAItliB9J z^`Gua>dvUzRkB}Yrt#N3EB<a?`d4UA?M#vLX8BFVNqaJ$m9X5~<29*h?$0%47oOC7 zu8oSzHNL<7=~uqbD@&Klzf^v<IeOk(!~50S_V%CKl*asR&g};(_LpnoPVb&R<9vSQ zd+leLr+<H+p`Y>df#&B{UHNnQe&_6}|GuyFDVu3-;<@VXvmfg>9}_8_by?lBs;zRf z>!g(Evmfu@%mZ0lv)uCEZvPpN_nYtb+`#|u_wkvJ>pzqg|KVqU_Cvn*w9Nmb&d+|x z?@#FaU*x&ju=<hx>=}>u8?UzHto-wQ^_h?N@8<OVzvq7T<Ng0_mjBrI8|3><Ryn+X z=HvR3gyd<qvqL6{ET8eX{*PSopXu|>kN<zdSNtcuf9B);bth&1zwCPE^``Uxz4)^q z@892lv%%&cyZY?M^*{8A|Mc4>_x)dFaQy!d!QwyDtIvG2kGv+4=>I1?eU^FHq$T@~ z$ozlF`|Rx1W&7&io94&){;jFLCG)@XR?RWHAMe+h9{>L${@D+GzU+G^W&ZS^H#lCu z^Qz4M$#0+iSYI~l@&39)GXG!BNlX5AuzuSung4T(&wQL8pV{~S-P&hA-v2!%^Z#%C zjK}o_C;naLy1Ci%?3M5D)jmJF8*KkSU3P)Zzty47eylg2{n&o*A({U-&p!L{-X@{% z{~ycZKjq^4eX1YrpFaEX{{L~sfB5$$^!<OxfA*vOuep~0y8q95T)*eh(_6y-pUyt> zalUN9f=@r*uQ5MfU)N~)Z+H0Y$NRt67XSHPpWOHV;Qq58?QN1aemnC21@E&T`g*3v z|Nmes{xkjitjG1AwpjjK{YBwz^Z%-~mj5n)KJ)Ru^`C^Z2kZZrKKmj6<?KiMKa(u~ zx!ao_um7lC{HOo9&PBT)`r)%5*BA9!{#&hm_GA40tiJzSOpe!oTV(mq+MEC4ydUTN zjgQxVS1SI~-xs^e@`wJttiJyrMW6l9&o?{%{|RI9pYZcDAMcN=S@G>){jP&D|8I&F z|0!Q*c)Y$2lz{qYKi)q*<re$@zl+a)w6EA~`LA8x?D+qbzlpQ@|G#1?{&PJX6kc~_ z{@+~u?8o~n&wiYrF2An!!+qP+GXMAT&w9N7e`xU^{<^fj{}1EOe6)}H!1cEI|09>; zKmF&8kJtayEdG<ezJBR5|NS$5UD$a;=Ks&H&wjkWm)rOM-u$y4@6X?@bMyCu_nbfE zW%B#}KeRsc(f(J9<-hLy*^ldEW<B0tb5Z91<fZNz{(r)k&wRXp-wB!jFH4{Oc)vGy zC&bAAGk*4b<8IEMbw20khw0BYN7?<_ZTYXexo?i2%m2rq7}!4JaeYy*<-gU|XFtZ< z=k@(BITm<}{r^p`;y>l*%#PRB?X>*2+kEEZ`Y-Q9cjc|t)wIj*`~UInvmg5MrpNy; zF}uHfufx_q8L{Q}r(I8<`TqK+FGj_G(#>Z*-d{Z5^55t5Gav8A?g;w*V1M}}%YVOZ zi~sQ3<@Wu5`2EaB`<*`|Vz=Ao1;ys~{r{C${AaoUtjG4Vw|jm5ct0|^@Bg2e;y>l< zjgHs9w|-W9i}_1^uHE*h&Goa+XaD?gA$hC%Klk;Zlu%dvr++;tER&1>q|3j5vFnX| z<?gggJC9br^ZvKM^5==2@pqrkeO~vKuWsr$MS085%Fq9O^ZzRI?)`(>XHS%$@8fSj zSA5^y-bfuJm;V36$M`?@KEFI)ajfu@vt3bD=(>`+y6T4~Z$5jXoL=`N(|Y-?JH=vK z_Ut=3r{)Rw?V76npTBJWzVqs3&N}~z{d0a!++6?UZR+HI{5JFL`0KL$?23L_{^|ex zrLyG7$6NDjo}B5Q^G_uIi_9;ZeP`y>Jo&PD&&A4LHapMH0ZaW=K3@N|=lSL5RS%_p zD#}~_^|@~8KY#P*vnSop{W<Z{KYjM|3(srXEq|VPnf^WTx%k#5w|G0p=c;hG_t?(2 z>z{9;E^ql)=lR;J^S)GWItDTNU&!++zS?!`K_30<lV3c~E`9eIu(3Doi~f|CRom5` z+bsOF7v!euU7x?~{LWbXX`-=x(XY$@7d^l5{Gk7tlkR@@?e!(|?ELdAJ&`Q6eev_l z&boUb?-<8!@~gh|JZG`x&l5A{E&slZd13j*a{o1u+~(@(AY<7f#(wLU`TuvO`f2`J zIhkZ|Fx7N_{!;lx5F-66xaMy0i_bsmia$-fe122WJiGMrHPhL_E&^$td)#Ke-E;k! zll$k?mGxI`{kG)%-gPib>rWKF`1~OI*%RgE^AFFr_Mh*5e%54Y<owVV+v`^M;&a7Z za41&p`~0PH(^*&;S=+SRUFV+-GId$?oaN{DR{KpvSo(K4C{~|6-=+8S#LMR&Sf0Q9 z{9-O7VSHKsW6ARi&p+mZEq$u@{N?AA?GX3;cJKSIbz5Qnmz{QZLE&J0_mxfUxosdz zeonkR|D50Xh39_?gZ16Lx%}0hFO^>=Aap)rJ-__?V^!&`{GdqR2~I5+V9vb`iqiLx zC{;gq`FYMYwYk&bDJgyG^ULY~&ddG32TBi5tp5N1V_!A-+}aAp)a$%^f<fa6KmTg2 zITPVxGQVi%sS|5brzi)pFXC~Wp<y6W`0%pEX3>S0&xEC&Ii8lLrzACV>zNX}t1c4+ zT~8aOFY`M(Cv}@i(zKhWmg{}L^MB|1_jT2Gx%Ka@KmY$u@xTB7Ex%ugE+|R(vH4}g z!~J4P0xx<a`Wg@9Id}cJ8TX{2v0EfyPgLW=uUs1Ummcs4X1uB{Dsg*dgO$)>^_TPA zlNPaWHB?T2bwIS^-DA<KwoHu=E+jM@jz4>H-tGx2l|?W3X&MwSW7;LIVNkx5>DOzK zh#k(12Xnb}Y}Yk>;A0JAy3D-W?%fr^xeE^5Qei!^Tyuk=KjX=#Tsdol9DWtCmR+lQ zpmv}A|B+2w8x{Ai<vL-%?7#tTE{%Qb4qW&lS@rX2v#7+(RSmCVSdSTTtymwDkhGO) zR<_8DU7?I`b-B*iENaLLZ`>I!dO^OtCq{<*{l^2oMlwBqpH$X=D7V-vD`%7RAYkcZ zQGvK+2TrAn2<-J~+`5VB(RPgu8zUJ{wu|1V@?(7YUvtCe>pnACQ|_-la8HEw$z-lO zc1*L6SM{^8P0MP0v|LnTR|w<Nd@X~b&Fp!mH6Owk@5)T@c%#UAWqxSFqV)~W<{dxv z)VQ>P=~lb8LGc`>UEU%yeotZg#mXwSZ(&11XyejqQGvRE#;Nw23cofnW#?P@>G6I1 zD|(}&@`0KppPPDRSNIOy^RfJ27ruXTrqOw;n6|=SPu4QMK!<Oyx!&Ae((uQYi^pa` zLy~*r!s#Lba@O8yjT37{18Vm(B^!$b#IHE;SFG~EHXE5c=4DUhJl0%L%!pfaAjFgL zt+eQjpEKF>Dr-JWUtazHz=S*Uq8I7|8(VEB8Od|JTYKQrZxI1MjSWSUm=-<P*ibf+ z>CttK4IASaPwp1Ik)@@uH@0!^T&@#E+hSy@g+(XSuV-R*hq-xI_>b=gF8FSEy}IJj zfrU=#nhWNHCp^(&4cWi?z>T?FEAoRA9&xgolxrAlz5UUMJHtO9L2XsTI}_Gt&$Jip zk7@Ki|KY%0W}P|fS)0N&Hhhs~ZOIQ$cq%Tp<LZZl@x2+<2_A1*S&!TgNJ#!8Gq?YV zB3F)YsKYN7)-ofm6Lo%#d#`exsE=-Jye$&&XD5?$zt)03=B#dU!49S-;d*@=n?(Zb zof<nW<#u?sHDC0c_g*ybG{5cVcDY|E#WxQu44NP6@Y{$rZQs&{ce-3>Ohqo#M>MwX z*HZY=#pIoD>zKy)kXbb1=LV)ln?)m{S2a}lHD<dXuzmV4;qr}%$Lk&k$u>RV<;uCc zrr}F1*BhHBjnQ)Qf1aNFmzv<QetpBA=w~Nu3<LrlK00&poDFjLDZ=V@F4*C#H&;*W z`i82|#?D@@47(KvuFMy`P#4)a)BODOZs+oP)@ODr8vgmPid}-bI_{O|JGmQQA8mdu zY*YRqV5z>ALd{$zZTkR+l4hoCehr0xJxtR2nhKIWCv`S#UC(q$J|H2zjcHT2$c^ZQ z4S&Q%cGR-mu|05LYt(`twXAKgxHSH|HBMY^Td?|J^M0wT^?W>?y_SJ`@?ZCg&am)d zJlnz)tggMFwvWkpez?PTDb{EEmN)#n%cb)tit*rbk%(8C3VVJt?X(EHx3b~ILasHk zOB;SLv6`Lx1kH0?>kFdmUUb_3@r<)5SaB_s%OhOm#?D~IoAH_(zPB)a`X7+Mpng(k z!4E#xHZ|=9e+*gOg1A=9TX^6GE7ywng$IsUv6|$EC%l@@m9brP#?RgCd7o-OsPF%M z?7)OOxBai3elNf1z#(^0fjP?$Tskf)5V!PzS0LlXtz2vFE^GJ^#%d-P>hP(Obz5Ap z!>?TKr;jog6i*N{n9!T;$h_Aw>VU()65R}i4VSd<oI2RJzld$u^J?ciwOd|a&3qw! zbUoi61LlRMQ3o7;sz+ULNa+?c2>9D9W+L!9i;?+j_?88YM|QYwI%06aCV*SYqt=C6 zBIEqECN`txprQOZprQOOF@p>H9l50<qP}r`mshhW*zZ+auzs>#PRaY}t@5w^8yg>_ zfhHlUbrTf+%n>sQ__;oO$LuD)KeG=xl&n9xNj77F*hMC`N5NYbG#=B@O;D&@C1!HL z%AZ@pqdt;b>P5_YR-TmlC9J$(%(57ne@+uK5vT~`meBa;&Mn39cILFH&5fUSZ&}cI z;$hSQhp!R384BB6xFuH1U(L#^!WH+>Oi$*A^mT{NyBeFNJpKl7OJw9<Xks(kf0>DG z*ZB-b=AHG~jLd%@2t|5HX@I71Sdu}5;}W_F3VR~BrB>8{<{jb|vGQJ7ca@3lk$I*g zbGAFzcb{d<-+kN`uRFeB!XMDgPE{1QgvWnxZmAbNmZ=rFcdspDuFsY}@$NBiAuI0} zzROH(pDu4*(0IT}H(|kyt4(Z9;-G1t^_h;$6Q#E{G`{i&O+owx4d-j>W+;4IBxZ2o z&fk!|zPw8gMICVX9iW?`P`pLV;6m&IR^BJ)t}(Iw63=pEZe6_>G!s*B`;t?^-vf@k zQ{G)-Vmsuko3Y^25-|gTyDM3FuWSgJCdBqgc<X}3W1vxy$|YhZ7rZhVnO}mYfzGi; z9dP*OrJJ!}yB}z3Y9T9cj=bib*(S0(%roWhINxfozB_x1^rl3Ccakl;nh%)S8cJw@ zW?@>&G8mbk9?0C3n4w^FQ2WkbC-#4TlNMNIK3Kq(1e$#LWdoX)h~bvVSa+$3Eogc+ zBlFv>Q5PJREo0>=*`DRdyz}^$hQ@!NL31djx(Nyvbu;z0HC{Rxb-<xwm6%Du%+;(s zF2<lKwxwbQ0`Y5Ec}=dtr(;e=v-4#w*y_qH;bFgsmA7OU$QPly84Jwcl|*{+{LlW< z|DTzAwZT!)tVQh&a4X~R^JD|%q?tE;I(|;@Jsag>WSp(}^2(-EF=Y<*E}lv$4I`0E z*C!^Mr~03Mmy`BPY17Qe$?P*{ZuLoaxoLFfr-1J1IZL;gY<_ZQe{t;m+V}PkcEw%) zU0(KI?%d7Be@8a&39mESy!=P~;m^MoPh0-H_vija1uNt&7nsK~E)5oyn76v&R1vG& zb?pUVfeAH>nWS!uSgd?`cw6D({VSVyw<oS{e&V;6Eo!&uj5<fgxturmW()h+S8w3| zy7AxfOO4tWW}BI)%nv${u#Ktvw1_~|@&lhrxjJ$J5=vJyC0UC^)CVzkHZskAeEwV9 zPtIqPW-U7KErd12FDRjW8dH(C$PIn11qHoKduQ?IO?;^E<EYo{_O_Po+6zAIU|L)) z5^%eG-kE71PjY1(5uGt-VZ${a)@9<F3pR%}-dwM-puC&ubGc^1hX$tSHZPj3|1j=2 zEZ<=LhcTzD+<D__an~1?tkaIqRpxFv;mEaS-(B|Yfs8EDqSlES9)BNmdFX^B6!$U( zrLu0z4|8~Soa@cK^$mCAMQ_xHF}8-!)!w|cd;ybJesF@t%7#<NMI>SuG~7DM)f2z8 z;g~O%&%Kw;(J2-jVmq%&Nlm)9wBejF*O{VyXT<h0i_EYOVr+ga8u4cZlhbF>2t5sj zqNR{Y0zTGj^~)NL9OjadWG(;kFrnM}_1Wd696`zFCcoUgcR!PnA!}Lx=YzS<3<u4g z*cq8DvG-?e?G||vyRhNXby10Zv5ZsaYZ=@M1Wys{U(;}`j=SX7$-|--til>!@@p@c z9GdXWiS>(KaKgWAE{QwK4m|R&0ZmjNRBD%#k_!6Q&7`ESxk2jO$s9pzpT@5*xjg19 zJMb)qbxD}UhP`o&GuLZv*d55Ya~acbYteuoo0-aco2ow@ZnXa6_;B7I$A|CQ78Jy@ zGUiB`|I&N9cZGcSrEKw2LPj+mOj_^5626GY-w9(A$VtsTcVR+B9Aj@OmrvaKhHGrB z%if1Mq_;C|t`Bm^UvS`0_POadlMGxNkCtmHlx$);JwL=DWhK+<`GF2^qFAqGb9v+h zCKT@mCx?h9SA?CNZ&iy-sQjulQ+M}d(FxVdnSL9K1f0;g5WS}1(sEIWeNl{4^R*3j zc`|Ng7nP{@VeEY_V)3$4{?1>ahTXPI1?9|>79QOsmm$04z!z(g3zm+JH~oJ+_@>&B z5MRaJ-u6U4^uU5O2Oez~5y;Zm@W-3gMJ_bqt2|dnZ>-Yh)V~g_Dt%!I#w#1H%;d_^ z4{&%U#9FpK$l={=t~d8rHXPCyd13nqni8(aO9|aeUwKAss=1ay)fA?z_rVE&cvwxI zX&dZ}VqB{&I%A#Ig5q|j&Gz9A?-L=@1v65OEYCIazgu&-@wb-4M_wzIg~}okb?cdw zGFijUe}p83BVoL}E8`b79O>oCxwo$2N-bATxyXc{vzd15Yb$*JwMQ@De*vq=y~Pgi zOIW9z3rnb2%A}>r>gFyI@OvNA<L_DvK2Bho?Ee$A{G-V=Z?B1o%HLg2jiO8Vf)mUZ zHr&hPIx~N1!$B@qG5hrm7kIgJ>irofR*OXZ?PW@`WxW<3;*j)+Yo?65+rho;2OF(l zJ3f^A!nou5Jcf5g?;X!Ne+iyo<<|H%SY*P_DNMU7<?ozh6?hZ#uGrc6*LCd$A7WXn zZi@u`+RAizw`jo6?M#b>^(Lsg=&m~O!-UnuFD#*G8&j0G=!}1Bn5?dA8T^)I{jyEN z;C|SF2b`>8|DQsF*3#sk(@fpd`C$$ztC&{HhdAU+V|v{!IzdD0g2U%5-2{cw)nX<W z?k!>ENvT`P%3C6TnTf6Fe6}O=-wR%m!4euimzvnhdd1$c^77s3^<jS(t;0~Re7O7d z@(7K&puzU^EJo(3pSLb(d=a(3VEF{Trr?YP-<~e)mg=~_h?U1gD(Zs6Cq~_b1z%T) znN0Y%T+HBtWc5TDcBvElJh>%a$gXAOePR!qyFPcNiLJ|0H$h>G8@H53y(hOs$DK8- zydm{VSb2`TyWYh13N(M+nZ9*F<1@R}-`>r!-ccYR6T`f+!~Te<$pt$vZiy3n;<=?> z%v;FH^W@y+CbnOzw>C6_rv~1u=_V}r;;fsYaOV;en^ygWCbmWAGZ>joMZTz+2-rJt zOJv9_Waag-x}<+6csAc1XDPlruf-=Ff9<Nf<x<oIhhH(e2@5uRaZ8=3JE(srayfJP zq{Ic~k1x3LKB)(}{oUmzwyyoxnb@5CvmKdJ^S8dS<8k?Ry@_pA{#7Qnq~n>6%wI2q z=8bH0GZyR&;+F7;UB}A1#eGXdqfaci)QfwoS$Uq+EobHZGXD}28`uA<O>BGq>RoH! z(){3ol*Znp@{hQrIOJEe@`TteVdZt%44NTe0?iQ21Wmm-a!YyKTgJ+><sE41W&c$s zHY;1*429qFx(N%+KML*i%~YsgA!cA;;l?dB!}zZL9pxE(ce;xi-o+o#n72xNtH7+) zth`e|HTlG^Q5PJxJ`z9Ze5=v=q=CR~i;_U*uenhN9FmrcnOwNDmX&8o+=V8#Tf)~) zygTghEI~J8fweEU#EGR_7Bv3L(M?#e!G~Mw!?jFC=B2N<ENJ||rkk)}Qz*Ao$GZzm zY+3$Uj?5n$#SAV;)USLa!>h9VM=LZE*RFIHH=SSyN)cx+HL-2--qO$*7sxGjB7QL| z4^Q6JCbq8GTN@fLl<8(H__IUIK;Y(LR^E{BvD(p`%o|TeU2w2n$I7FUmf^^(ytwuE zdp?VT{7WSd<Q`|7yV4!yp?j&Rdb!n?<Nq0+POSE*V2r(<eMY8KwBh5@@23ld1x&f4 zHqLs%p`@nNH%)6w&@u%PFHPlKL9dCLO9Qep#kE#+6bkBlG{uTsRG8}O=^_{@w3cI$ zw1dF!Mp11qB`bwV98Jkvbv~=uEth|B`uyXY|LxxYblUgu#I+yik6Aw6zwO<%tf#%P z21~Eb+UA|U&+4MqzQQLz)NL~N>^Z-$`tjWKH`ONh?v}s%q5kd7%^w-N_dX2UdU@aL z&d2s&-|+YTPdndoY;x<j&fe|UZ>pQl%iHLmXLCF4{?z0@>h-tmwth@n&);AF$aejf z>Zkrc<9>e$-+9&Yu-)R1@6z9VdH?n8m-qHr%l|(}wf@__xlgKI=>3xV-<s8*=Y-9Y zSzGxlz5S-T$^Z76m9<Hak3KE?HGTUHb@R`2+uwY7zb|2V{riT>D)qm=-EY3Mw>a<j z|KaqvU*zwmF0bEu*zbSUE5j=OzmuKce9@n`-CQ#2>Fej&{C}<8Z@s*4d))8;J@GeR z-v7Vg_y6DtyQP&E3Lb5&;{WTOzuiCk*=pgpU)G!7csc)0#`5~#b=H3`r@#Gj{#*2d z@=NyT-+X!h_xe4X{a5Q>7v6IIf6&SLZ~N;vU*vN)UfzEzZF&9QEpz{!ytnh7^Z#!T z%YH3C{pRv){b{k8%j@fA*QOcA|G75LB<|mBzyIfEi@%!t<-J_?^8Xr^ai7or3M-v4 z_utnb>%Wt=-+al>-+I};_J-g8H?G!yKQsGZuzndYle@e=^481yKfC7syF35J%lp3< z&;9o|Q~qN03ww(r``m>~cHG#P{`jr=oE5gb+b``b`<1@>&6o4*H(uWVW8&O@Pv5`& z^4`bF^Zmm5@3LjTzWZ&uyuZG4?!RW~w_oJ%<uCvLBGUTr>c3(y=YCmlZ2fog<~LvT z@0D%(c45EGJ-`3wj+Xr@uP*!by)JKg{r~l4zxcn|xxQcc|3iWGU-#2*zN}xj<?{Z0 zXZ`*^F|_`Bd+XePFCDwT`u$4he)Hx0^;<9RSD#;b%lZGmmu0{B*KN35zvHUk|BHvq zeueAbdKoXj!{z<LdZY7x|G#Bf|Gk|3_RINq+b-MJU-J8(^eeN9|L^JYn=kKMUiJI` zF174e|1-U-b-%(_zxlF${l?4oJ1_hF|0Z1aYx!jV>(4LQd%yj1Ui{|E_?#`5_y1Wo z_ut(3TQBeb-97i;-s@tZq$0oJa(%(Hx&IEIzy0#Q-NVJV{QsBio%`=5Z`rTs-*3H) z|8v&w|0mP*7sW5{SI(dN@9xvGU*GMrm)HNVF8jqVxA}5?#O;^%Rv9zzdH&C8ocr%< zl=a`quit*r?|OR6{@?W2{~GpNYyK$z-|P1OT>0BC@Bbb1`+sl$n=kM87q))8TyFqM zq*>N~-LKzz8Gko-dHvrdbN`*}G5#v|Ydine%l5HJ%j>t@^!xuO&H8Wk^E#jT)*v%q z)L+~e{n?)9-4_3hnjbB-NskwwOz*9K^xfmX*4E4W<5HH_Z#wDs|C?{wujTwVUe32o zUtYiO|II4(zuo+|UdGSMU0%ODdwKnL_Of67*VbQoZgw;3DsS1Z>)&s^oF7v5Yx{Rg z_uuNK@)P6|=ijN=cF1n&$3I%XuN>=sfBR+pzjJ>7&((vnTk6#c<#MP0_X^8?eb?V| zxxQfU+<%AX-+Fof-<O@g?mWxhdMWztm-BKPFWc9j^!xwFSN?k4uj$8cyu5FD-|zps z@V8&y^S-$}OaH?E$+cCFn<byWv^AEJm&;oIKcjQ*zpH81e_zjjd&d3w_enM{D(m!* zPWRe7`R9u_{eJB)&R)-*YX7aSZvR~S8#DXQz29q{y7k`4_j|wlS%1EGQ+}@X%lU6? z@0?7SJoo2|JLf;BoiDau%>L$#dwPAzJ^8u+t`^@rFMI9x{PlTf+@IS`wwyQrW=%o$ z(zzhh&;4BzUVZ-E*?({NtUq7;p7HGSaoh8@-}mivyFVQ)|9i2y{Owo&5B=Wx+%YxX z&g#46o##w@Cs)hKCZ^k2{a##bf0gU~!+Eb)zX2P5+xEQe_U*T4_MiLrVvoJm-^+9F zowrTje0`Pl=Zibf+kChA9ut!S)%f)Kp7!c@f6kn%DS5Z~xA^(u^NXYPuY6Ah8T<L) zi!bZtKGwb4S$7g7Z#=Vf;=Pl$+n+;>zT>~^SoMzQZ>+3A#{Q8zUwr=P{I_r)KRr|W z>acD3y<CukZ`z*ye5d&R<g#arH``l%zx==Nd%^i;_O~GSw*UWP^Zm}g*GZ)bFkAi0 zE9}3|@r_-7KGn|Z`%L*amG5?196eW4^3DBu-6@dXx%oF|_MfXQtAASgZs&J?NF023 zUta&ebbf&UyGn!OAQu<!xb*qX=NDNJ>EA2geUN*%v+fQ^%6R4u$NST(_1<kZmY@6g zVr6~Fuj%J2?7!c+`CVvl`_C75(!c+m_k3P;`Ymuc-tqrmeDAO=f8KUu`MJMk^1j=A zx4D%G4n%M;rR9hCzuS2Z?4ik}^PbPU9Sw>6cj|Ya+1@Gswgr?f()V3gtBrrR^ZN=& z#Q$D=dH?@S-;2*TN6LaNeO|Ed`OfDTrC<(T_gU`U&V69N7+0S9e5crYX9zq|T(-A8 z^Lyv>oRwgs>vlfh`TUU>RHvr=C%Jb!KR1D;zBin{GPzpr?FP74!-LIV7w>%jD*+sL zDI1^feEw}IG;$`_-3CSL^|EJ+i|7CRJn#9upMU=U|6Tv?n8T+E#?&jdHzudb9{V`^ zb4bKY%ifIEXGWWU?mLs?c17v*%$c8c(`V^jl1SX9Q!4e)W#YmPVHdSeMxddGjuR_8 zjN_xyEH~!}zC5#Osi5-NX{l50#C$KD^F6=b=KRN+zW1f}yX&rRO-(!VDX#kI^&{nf z&K>-0WWCnoy!7Y#)beTamJWFfnSQUX&FH(k^N8byB?aLbCqD$TPWi?4B`(Mz_0Ci4 zdrPV{77L38So<`7)a1&Tv+Tf=64otgS_ZM94(U^wHkWHH_};<v*<UkZgKy)}*wdRV zdy=?x<R5|8Ggc~0;?rF@Z&AYy6V_|`!464{OtZIZDQt~veA~xlG+Xq>-Bk@T>p#R* z@7#Xw9}BApU(kbsO-x?ungyTzcI3~g=YIGgj{RQcE|#g2m==E)4TxTO;D;4xMb?9F zO~(!|R6Xg-m602mP<19}CcD*R(HXuP3(P$me+r8l%vg2c(NQjmv%v|KJDHTSMI&kh z7&p#idabXaurapr?A~=(?k?jCNcf!rU6S>z<-(-AIL4jpH8<FYGqy&HSnP3TTq>`9 zp*o0h>V6G_U#pn1F0KZxcwFCb?6>F)n>fa`n?-kgx3t@_TkgQIx#hMD<v*Ek2<W{l zl<)u2`YZmz%*6-ZoaK6Pcin-S+wA2<j4bNr6-rx{{77f*i3?2l*;|~_((z{bfmgpp z1g!lUzit+pprN&)aw$`gx5$lszKk<_x!%~VYq&FC<c7TFf)8!0Q;TKZt!}tfE&4+C zH7IadoY&Q;ZBeOeWXcNHFxVHt*xSZ5Sz6>ml~3c#bkPfyk&QR6pPzbn(e{3(&+h{d zJdj`&E9R0o8}K0V`R@mIas?0U<TT>fc?(1?Iq+(`sKD;%#;@~#Kj>3zcpxEkzGa$8 ze2{}y(8S6Owt<W@4~yQIyQtyLa?u;}*EJk67qM8Qwcv{`Yn3i*NZqmnFD`Sf_#4~! zapUKd;*33^jVGN&FL-Gi)UM*sJ5eCOv(s32i^}g()-Pfj2LF9od9G=1_z}$7W2U{q zCd46SdUne8HTzr{H#Un#{GY%iq^`Z8avoFAbgd1x@r*NfG3|aWGU0b8)9=|e1<rg5 z5=9U57pfjMynZS#uxc~YUS`pNp9`24N3veATYun(Dpy9#;sZ~(Shrl$GWa`z$;y^B z?f<HVdu6Q8?wiDyTU$6Z9_80aC~0CkJ^wRgA*Q<?m+s0i5rODs2Y!7QolxP>cvf9> zLRDPj+i=kdH$Pk5)ZP7CTVZ-o!v6|Zk#m6$J~**XSr@iodkEvy_nHP(`<b%#2PM=z zXqGNwI5<K2KcBAWyNwQI-Ph{4eB_rloGauyQy0d#cM;R)aLt4bE{#XuYb9(6ge-BK z!?gN;kVDS**Qv#8j*CvP2x>f=EIPp|xbZD_O@VV;bHa(4Hy5hjJ<4^W*1hpBFPBD% zs6|Z}<I;Mq3%A#5?RI_oma9i@VZ*KCA`<q_jJ=;lXXt1z*y_>v(v<7PowWzv=!;ya zc5D1u|KmZMjDx`w$0uwzb-Syz6H0b4ot6)Ecv8X|wtq##4IS2N`2h||TbX9-vM!Me zP57P3ni3b1Q2xg0rc6<OaKirpRuQ{J2Oh5E(hwDSarO%&+``xK>vpaSa(L^`)nmV? z;n;i88F!X7T+{1L+3s^(<bq{H<4u0;1?8KVKF0?fco4)Ywm$g4iggD*@rw$))Y$OL zn)S#wtqpzB<vHhgEgKR}baK``Y&gp-I$_qD17%^1GmAwt7F2hN8BEw6#x3<?{RJjA zF8d2jY;F9YKHmK-N9KECx(N#&>0Z-LRj`WVmRPYjnp>&^v=B{d{-q|iNx@qi8n3xV zU2v$H7r(=rjs2Zh<O>~c+ba&+R<iPZk-N~u_G$k`CN?(Eh{MtUS&Yn!ZSyZ3HVdem zE@mKL30k^X7sM^m@pS8g#$Vx}E;MN4!_E+H36HxAS$Vg-zs|&FwEtQY+b(9^1cmSN zx)}@h9~b&tR3Z=)!`xc_%R9!A`S9W`4UL!7w=7_M59*?R64lL6uyW^?SaEgBg2o@9 zC76%xbTbrwwul*AsPf~M^4PzKm8Ya^{mb?X4&P*>4miB`0IgmGxiUS=k@+ZSXUF23 zQ5PJ3s_p04S17w9o0ECsZ6|)yfW6_|5*?t0lvn<*VC7M91FZ<$KKrRgqQchoVkQ^t zoVX=U)WpEXDE5KoK2Ap+aCqpZn~|^sv^@0gVpiUY{!B*ZsrI0yfYY}&G~RkW?bOMO z4mI-o3&f}MHFak%n8;&$#o?2LZo-1nU1BB^K;s=HX`r>1tx*RY^0$haOxW+uEg@mE zij`O7chrFcFI;sq7TCNKv-Fba@Bys}1nv0Ps2O#^;jf8qf`VZzw^YWtD@<%bppo{y zr(laoPu!8LTG9AUIqHDJJ55ly`f^KXyxHZ`H;JvyP&Z*gNr#xpgQZ&=8c%_YDw!o_ z5U|^aTdG6<0u!4QXeQv~*Qf&yt3k_G&9fPq=dO*q;4tm<(<ccF%pJL<PRKtIfA{E; zV?iM=k6OE2)`E&jVg?3Q;oMRh;5DH&x)}?0fnt8`<tDaQ{Mn4moxY&p>=rYaAhp@4 zZxY+B$6Fg3eVn+ZUie*NVk=V5a%BFy5)_(Ax)});{@fB8y4Rc7_H3<tsHZ2xB7WWB z>A?%mye`$C!4p>9426BM+!7gYwg&N6ACF%s|DSpLf&CKTv4J%*rIHOF-|oHi(siSJ z!$u{w1*I;+E&|6jl0;8vDJ^ny7hEk^IMGSOGxkZ?f-THTV{S1;uUabN&F<~38M2&J z&~u8bpf5w@M1F;^FrmOTC){l2oSFP%kNU#t^7`-poiDzpFY-I~g4F-0KL<bFH}lQd z+I39KH+So@{+HSR_k6qh^8)MR{g2m6|BqgM_3y6Q`NvLczcrS6e>c@%YCYSxnZ4I1 z>&g5Vo^QSS<G-5UZ;o9Sf5W?d(@ycs^Eb9z{hRt6G*TdbOWib1XS09ap3PV7mVSKq z_}j)ckK>=N{+8MMoo`>oAOD*DU)I~@EwBHZYyJ1P`K_1sJMR1ae<)}D*S&b!3)?UL zeOoT?uQ+<ICVK5T$LSgTe|I0hsc!b)apwuUl^^eAS^r&q_nYR~n!ju2{`>nRXm9(! z=EHBk$k*NT`+u>u?3eoNH(&haH(s{CoxQx??!D38$^YK6mi_v^O#f=l<b|PoPy7A< zWnA{_`}xh6>o*+q`~T3n>{ox>7XMtiDR1g`-t+wbCFA#(G&}3Fe*bG)=l**uTlP!5 ze#_<k#+5VgIsboW{pO3led_Z63Ga&DX3o1W^{nhyzu2vp^L4ggw!fRUy#8Cu+<%p; zuT;OdZ+FD+|0ChDU*-Ffm)CDkUta&S_;-(*%lq};mVA8mHT=cgFYEiaT;5;bHTU1k z==E3TrPXR%-}C$bN5}f_?d&&S^xtj0y#I5$_21pb;V*2z=-*FXUjLrE>{qz>&6n}{ zn=bGF-!b=J^WL&w{Lf>TmS3vha=>mi=d3x2^Y2!Cd^h#h<$~3pBd!1LzQ6tQ{yj(i z{>R<-`~OP5?AP_*@oT?d*k8Y8?!V^CZ@$Qb`s-T``~82SY5n)I=Jgl0U(Op@|NT7q z&6j-rZI}0dZ_M60|KHW{w_nyzzy0$5{j}x(A8=a#ZD0HP%g!(IvPsM9i<;*Cdudtr zD;?Ccm)~%C|KB}x{~eVMdpY;Z`#tCV{=b|4_KUv$=F9a3f3n^#|NlY9`mcNTn=k(F zHea@{J?Hm7=bBWl-rvuM-+sv#FZ(4fe*5M9ooD_2zsrC7MgM>9^7{8@ufLxAWxZY2 z^7`7gx&QuVzy0EGU*7!fvc2_vzyCFh=l*-!{`QOhzs%+J&l{w_?)>t;?uOt0Pts+- zzOUPKdH=54e*b@ITL1kWTvf&Ymwo2ke}^Z(`692o?XrDj{_^^dTetp-`Bm;^{dafy zt(Wot4*LDS*D`y{{C`((zxlG>f5YYd^?h^yHE%8Z#Sa=>__Am2zmxl3fARaZ-2LXu z`E#?D*YCUH_y3!i_226B{|=xY{l@rJuit)I|9<o3{r~68{ns36FLV1^*2n+LzsSqw zE&sn_!)5!(q~-OyZu<Ry6KMVS^Ypi0^5u8Ly<bxQ(a`#@_5Dqk_gBxI`!6+j`Tqxh zW`EuJxL)#i>W+(c3xA3)ZhtE*?H{+vKg-6~yyw5>xAT1)FWcMS_51(L%ldD3^_ws6 z|D5#u|L#ik7r9^4-*36R|9htO-_`GLzKmbL{qp|*-qwFFYn#2Y_1zY>?XKVdKc3cq zZwu#NmHQ>0zuiC2Zoy~I-&2n5zQ6VI{yit{*3NwY_mJQJtc>OLd*Ane@%#0?f79jq zf>m?>9bQ`YtAE>#m-B7Xme&^^R@=M$=eDT1^KZVq|F?VYzo&0*Z)yLx7c|^bd(rQI zRp;D)f6s!3SGM}+?`wQ`y6jg!-<>t(M)I}u)BKCpJpZ|K3A8KtM`m;Ay~F1X?}NJH z_V>RT&wKv-_U^5hzMls7Pyb$=ZL{{(^?T>%UeO2jQU89qeEX~4yYzw{NS|*num5+s zcez_GfqJ0^H(yr1GpM}<>DvCi_;SAQ?~T6-&i`Bp?tQ(TY-_*x=YvJr;Erao{oL7m z)6+KZ|E+EP`C_{1=co5=&)f2E%MWCK2I^M7@4r`*ll^1K_u})5JIh}bgF47+pKZ_E zE?0+jV$0TjFF5}b(qsSDJn#9u?)@M)LdFTK^Y5&hcc=LKU$EUz!)?yne%Ax_cmH18 zIsX+OXoTT7c!c5i|F1UR=iJ-xD?6hfI>xZs_TG8h=f&@?JU5b``#VSeVdcA>KPEwZ z{I^8!qujfl(IA^@r|ti2^Zm~6euxyP16*~w?CX<xuam)j=ilj7^Qz_6Yy$UGcg}yP z_x|BL_w%3;ms+)xvA^neK7V8m>8HN$_xpct|DO5P@AhT3-#ZK%zxdPfeCP9f=8!Rn zcguI(s^0OuYB{(I{6F)2@%iS=^4GuNLmTpPum0Zo{2~S11%6_4zWDr0HfZnpq}(UD zcb4@RK~c1M?|s`>CvCs8A*{{1<X5ZrJ?1<pY<|C)|Dy6;Wx+a#hyL<hujK!3Q*{BP z)wuHD=R3t#-_>6ofF_NX^Phski5u+K+ox^L+loiSocnpl_k#0x!@*Lgo9kE2yYo2# z5lr<K%db5zI=@&M90QYsZO+>+pAL`K-JocF57v5neZ{<LJ-%B@`QSq_b033(Ne>jL zzjeZ^=T*OZyA2w^uOdOwnzH?uf&ARxZ{(j<zO%dwNo}BEjq}g$t}ZV+|C0$EMrFr8 z-zhHaom=_s@BjDznI+aQXsuvOy;S|>R;ldq!f#cxFMeuDbDMcGM>5rH&*n2rwu+tB zG4kHymev{R<}JKgWUHx;@ug`qmQ@_LRF7*f_Pe5Eq(37vW!jCPi#mq66H})he*b-r z`uqFxw=MfW|Eb}B|NZ&pJAax^oUZ?PWzE<B&qX^;;x|rmRWkm!e%h@(A=U-oVwzIF zDXxfCh<GQ_^vjzg%wqb2hg?ll^VBo`C>+%C7ZRzRn6Nb>`R{^<Iv;PcWWTX%yw<k9 zN8X`AW#{)R6R#~~St>5LX7h{%Z!B3}>#A$qSG@6nv8l^nAm<B{<5OR~o;`oW|CDs+ zcn6e*Hysrd3bCJ&&?)42Hkfmo)$9e|jG9uf`6xteV&bS<x$C>X>`7a<fO?+|hup*y zqj<L~Mr5Wp9pmN*vz)Nt#YL9YbA1A8G!IJoHceX1d2Lt!f-g}`rPl<f%&jzR+kEdD z%hPg|8wvkdnpE2b^mfjeZ)IfFwcwK{OZObtfUibPN5cd|_O~Z=x^rgP`ELmMBIL9B zTNumfGm0y$`xAEh3tq9Gl+c<lWU@wZO$n#t<EbpG{}eGDoFwY7<H-x<VE3$gb&Y)w zm(I8*m9L_)llfqjWYeYJf@_Ld9B&G9T(fRo@W+)!`i?`uM{yQuTc3bRmklS_rYBm2 z-gnq=;~UG>`|cZ#>=WjgCgZf@$+PFn`j+&muc);;XvEvJ>$;%M_u{5s{DNyfm^ZZ< z>mA<`R%Pq>SmmJBdsU5D$`NljvmEVLj(BX%qIzCE;<Z%MrE;M)m*+cdNMRMwv;6(# z%EWu#EKlRFKl#!8mP2b_d&1&c4z2pOgo(+VtHL<Ntos-Iy2|2x$1&iuIg7WgYrt>U zrc|@tOovxm&raBB;`nzjXV{M~kWj1Kk@3po<!zSU^NJBqwVD=f7hLl#yXld0lj%R- zfTGK(Gp<G57MgOeH(_ooODex&#Cn&2f6*+`b9@6ndNuW46A1YydQhp~9~`06WBy*h zGV#W-@T91#!YtlzoB}>Ovv|w81pLluO7&A*v3p9wPHm1?>(wF_x?d>JJ?QmcCBvrJ zvTgIJXpXLTE*oyKb9Tu)Y&a&aE}&!CQgHI*sVft&MY1f_SC2>+b-Y>4d98ZNf<N{g zW*u>@nV~ht2i=M}wCWoYCjRAIRo9rXQJ8bp|AvH4Z_cc3oYQvAUhqws<+P1?W5P); zg_xr9!=f{;73C|f*w1{B>%Dr$4*7##u1&|(1=f73ZCWHQyrxXq@#AieYd@GBPo{HT zyY(Q8XL-q-gt>1yPrY;9aBm;WQ+xjn2R}k1^wIZaeLYevQ`f6UEb$Kb`kkfQ);S<n z*C)GEmosZ$bHYkn&aCGg(=6vKcvr}Bx_0`4e?M8YW4teX@N1e{=YHWwW>cur^)>Q( z5u2Derpw$-3Svpvx?Nc0ese-^zt9w$o`ki@oL=+YHk_+uNsVTCeb+JI-*y&h8`pr3 z`&p!O%XHs`J>4#-V>EriD|ZetZGn*gS_g%^)j+|PusrKu#Ve02R>!xuIi^)kSnzH_ z!p{E!SMGnY^2u)9E@X12H(@Eiu!&tu!qoKwBC$RjqUJ96QPgCbr>gOj;b2t1@RYj7 zgt@)zpL_Eu#1xfXTf%XmYPZ0Y^FlcV0**)Zg>y={9G}Vy>TK#+@Jg4Z`>ub$-}5Zq zJ)BwlzOlunW=S{QvKG|Y+_2ysBg^U9P6hVAT-?P0KOQdOxL?I^@Y>Uail0~9WvAq& zDY8GVj-1haYJS8C#}ZlY;(+S2y*GBr9NC_h$S0*KRy1MG`9m^WzNIU&zg!$KqxoE? z&J%@dHSXdIyQj3uJjqW=<YOz}JfZnfL#w5P?Qti*Q|se8XB)FmT&w2#p+MB(M}cg} zecP{r>>Dd}o-Fw1DfUdEP=(tvqprEt(&K8x3CG__V$T#dPimDZd7qTXS5%*($o@Ay zaz^u^)wgzdSxOv>oY8z~cf^T<75ZY&7JT9qD-y76YPDQZJGWKl$oYgsJ}Gg(t_KgJ z7#<!jov<hI)ndM=Sh1oBbu(HmU)UUW;@eavyzY|Bmu)GE>_5vl8L&6oMxJo|_*m!6 z!50N$MFD!74cI4Mjy&P`l}YTGLYXYL<%<73t(G1(N1XU()u$%%1sR7ueD-9)URLhn z37#OEv>HA<w0iN*@M|FZ&i;)Pn*Sy0oN;`Zt@9+ILW;XM;1?&irNs7#8O^8sBTqPP zIe$pz%D+QSe2?@u8nE}C&3~3^?U8r<kj$26n<g}WvC}!@xcq<<-=^am4A}Ro>O4`X z*W)fWh%nS_YR_hD;lJ+q@!QIND+${ZPJE~QHyN-`6puXNXu3@*Jd-bJbL0uf+H$dH z3LDM2Ei>d!9g<lhwsAu9H&A#M^Ko0g&`VF`E0Pr}x=`QHYN=s!(21{2e}e)0Qs2CT zXHOoi5aTWmxLF#+!XFN{spR1mciAg^X^QM0g}93^SWIn|Q8}NM$QN}w;)G)rFL&{U zo%35|Qsk2p`Kpq|iYDC8;9Yk~hG$!%BKy&~ku#bvGKm!h*iC4)?2tL@#J5U)vjO|Y zr8-X*+)GL16I!kA`k_D<6ml8&%)bV*uiUEhWWnCPR?8D-_K1dSvfo`BIivYbpU#s7 z_VZgUHJ(JCIQT(B?Ad}6A#O{F`6my_gy<zJvR@3<Ipg?NPOM0veoCulhRt~=zDXDP z^3KU@*_Ncp{?bzCjAQz}B^+|=m^kF${gOBQdj3B{WF~hcxT3#tt5ouM;kTXH6H_<Y zEKE(hx#*0Fv2uS(+6>*ywXHKdm#55hJuQ_c6{#j?w8>}9))UT2Gm}oM7&||g$&>rA zp|jX(TI3d=z|$v8PG5Xq9-IH}dH>s8ap!;k-aYU4zdCF75+(hAM}n<$f7!41Sn|1E zJ5t5yas8?{f6gt7XG_@2%JS4-^~M6XfR8~<z3Y@$?CDCF_?0DezEVWaGvA5g^-cCZ zU*B>}yD@b^T3f=(N|vqt>JiUGnsz-G)G0S~{F}`gwj-Bm?aaw@+XVi-JX{*=?xoyx ztju`X)>GS9T+0<Ba_yTQ6?0y*=v(mQBun;O?|@y78_oqaZPMnr7VRDIuds<XP3Lfd zR-W&Mz)1@}*|Bs#Q4`RKWNh(XCudx$vaMsmubV91I*KbQc@GAi=FIxeIjyp1!8>l2 z)47%0$KRh<i%8UOYAfalv+7##(UWC$2xpg`TEyF|rbnkau0<F(CY)4k@%GD`V|A%& z-hwY{p3b;tWi33#S9nc1hvQFWPO}J)fRD3Tq+?wIeu}en-*E}}YS(nMjpgcp-wj8^ zwkKJb#`|x$GLK~|zgonz4o(*DFouVdb}wD2yfa_m%Kixnt@DLV_DoDzTFoJ4@3rC7 zevYoZeN305bR7d~_?t}c`3HO|XxeJ$9q_B9sZ>uvqnh<#mASx__kuYePC%;Hoj=a6 zR9<{`*Nm{I*9CPpSvy|+E~rx`;rR8ufKH&|il4DfOZC)O)Y=|2Di^wP*I~mQdyZG` z`G*U_Ds&wW-{lCa(sz9PlVx>H6%({wk{Rrtbzf1VPV%5sZquag!fUq9Tkz#F%j+{S zotabb&P&)E%Xw;ldqQ(1i)c5C^jxQapSM}MW1IrMUT5iEtFq#sz(FB@KZS@Qj)#+G z>qoX`>WZqb*voy;=(q5dx!xP@Ea!MN-)F<2?Hp2O9AUpi9UqIbthVt8_`=zAwZytD zxJJ6k^qx;ZQGC<ZB9^87suAfIS(;R}8wyU|EMC_4Wtza0|EdSsPIGG6Ic&I?%raHE zJRzz($2H)qFH84Z-+;f)EZ#D{0iU~Byyv<GR2v>N(rwyxnq%7T`3wHJHHrR%#;4r5 zU6UVAzvpqm!gs?dcFry_j<DZMjvtLVul-<jJh__V+OEz8U$UA?+gMWPD@Wva?>3n8 zDPQ46f`3z&yuyta98IU@t4BQPfkx-*uPc=|YICmoKQE!PnltNPXTr*K&aC`<hqp|- z*}34I9Lwoc&R6n&8xB3^kecVW;nH_bsd&c?r`~gP-SgdWOP;f<pYvM9(Yv$TxWP@i zCw-HZ7_#5`1^iNID&<qws8%{yCEE1qzVeL+MNM7%Rd2lTYdTf05b;E^X_fx|_HfDD zjSH%}5;~bVv+8;hRtj@u&3D^y=BF^nv^5M(b5~X0yfX1lKF6#3ej5%oEO>aCMSJg? zIG@!Yzp<>|)4SjWBg^XADGPouHJR>n3fSbf;hHMT()G#_>8g%5+c~dQPg?ND`~Bep zvkreqly>LOwKBRjf59hr4l&Dl3tml!GzR@SrtO%vAZ>cW%2JlC^A#eFg(XLoZdZ(W zr_1v7yK2P4!z{f0su3%FF8q*b3azt&wwOv@UYU4nEz8mCLTf&nH%&6WmJpSl>l$F? zx#8SBmQ;S#i1!&ypW>BnJkV+CvR9hX9N66|GbKMUkx!{stSI2GHg~Z=bz`f{mH1lw z@>dFm)j=%f*^DjauNVA$x3b^L<7}cL`&%aN;t7_WtuiI&Qxf@#>_K(#>WCT5htBFe zN!T%~)l%bcYpYDp{NzMFt&Mi;g7_9$Z#H1xTE1~Y^AAOxGmeiZ>pW4|Iib}uW9~sG zzDwd84cO;ugNl4`{hwkTEMIzI_w-hoC;!hJlHr+`s>psc+_qu03H#!?5homf&eb{N z_#^@3SQhSL0qu<wntxr7oY8!wRp-fqpT=U(6iSu3Ei>+)JtUJNm#WBq*O0q-LiN+A zJ9A{dl&2)}alM}*a`5n0hC}VI6Dlr%S~Yg(ocNBZZ!%z?x_;w?<`=9wXB^j_bmDtt zzQKUKcXz}I$4`P{&lY^;;kNY1|E93+l1xcif+G9P?VAnQ_cBMGaI`yrNQTERL6QCF z`b`Gxi$6!6aQwL(<j7y1f;KU%0(LR%SFM-Xy;9f)3fTYW4#}u2dR;KJ=t2!IckzT< zy{$4^_!AQOj6fR88M%umSWj)0`H~H4C<KWW8SLq6wbWRfq{#lb9n|s))_I~}^;z-G z9Lp8C$DQ~d?cQX--g^dAkAZDESqTb0t9h+5OZ*cP`K+FAoY4H{sLmP3_fcX+6ZZGE zT1u=*R%Aaa$X#r(sl9M&QNX=vt(F~c4mt6y`n}PBedA7@CkyIixQi!P%xsl0IS*>o z@QM{(h&y#iCMC?L>%l`vlV;uAUn`pLJO<Ul$+qh*$%t%AQ)EA^!d)D2tG!jGhd(uu zPwV)G3C%B*#GWlEGvl`G&`(U{le)fPLi3X%v1bdef|`iOK}|$%ohJ&rpEi`gUSK}E zRp!ZeP#dur)Eor205s%GzXq}|o*Z$)ap$Q+GA?49Cp5phs&mFMN0Qre#rniVJ|XGI z6ONxN#hxjcW;;JQI=^5!-z`vrn`y#r`9ki{A(<zApcLAwbLQYO$7TP1>VN$iB@7za zkKAzWi{$Z-1q_x2haB|-F1~0DTWM;X6>B|t*K5|^9cQ=btvtQuny!`JT5jK1H}AP- z>oSgK-C4EOs_j+8?ZQsxMNJ+8;w}?27z2;6xg43=As7GezGVIRoevHiZ-4%GzW({% zlUpR?-e;d;+?&tO_j%8eo0YRG<Ni<RyJ7Nhsej(AqwZGcr>*4wyY*i9J^Rhy=l%?w zeM7q}`2RcOeZRHp?LZ<I_u5y+eP#b@c<%M@E9`U3KVPYR{?_X2#&f$l&wr^q{+!S1 zJAaV;a~nxR?`N{rFW0?t)~t@dY51!4+-L8r?biD5!j{)ty3hT0RjTyY^~dwy=0178 zs9t#G<^6xBTK(N^zxwk1`jEN*4knfUYQI<fN$!`s@YR>{{$b1OHy-`G>3HhrQ-80# zjGw#a-t&J>wxP8<KBw)n`g^<emGa%1?T&N*{p;IYExfJXz;o`uhd*C^>CX#YUT@<( z_ut9iufF&nKR5CF1^e6HbN~J9eDx)NTfO7A9XxT>GpzpZ4w?J!-`Q7R_~!*Juip_f z_us`AJ3q}kd#Cx)-K#tQKM{ZRH_vXbPwke^Z{%NnIiFqnOML!{%lq#<bFEbWySn+x z%lP>V{r)S=QLnyZy!S&y=`Z)-D=+2mFZTQYgthe7a`}~)?Qd_I_WgqW|CLsMyW>}1 z-v6iD>hEgzt1sjA!{iGTrSkXfIbMFxFJyVWdF0%G|6E^v@vr+d=}r0Ty<bF1f2G$4 zEwBHlU;0aY{p!p6-&}ba|8|GNJ?H;bldS&E{(SZ2{d=qY{^zw>{rx-j)faxYc#utZ zqUZh#Tx9p6=~(#6{^B^9e_e0N-%NeJ;`07ok#qlj4Sw|{f7<HH`(^*Gs?qzq`|j13 z@8y^K{eMtY`m6o>>dW@C*8Bah*lYE7a&G+O@=Nx%5p)0DocZd@`TT(8^~G<TZu<W( z>$3X0yZXw@_vb^G*KY`$`|n}c`qR%Z+24wv`|o4st1tdVrN5T{4_jXUZJO2J&xzen zY`^H&t?>K*$)ogFxcJJ;`}aA|{daI>{)y+8?Dx3M{de*3t1tcHD=*vsjGFuJCI7uC z=a<%hGcNu0Tztjl{Xb?~{XISN)tB{Qt1j=Ci_v+%uzvG)tG~Bh=Ki}I`s&Mf`Jm<X zMem|N?fl}OAGo|eY~^M9`tZ5`j?PfsH2>dIxmRD-_XRJnuia_&clPhAFYliVUtYgG zZtlOj3n#2!%F8VB`~N|w^q0H&s>}9uF?0VNeSd%2`K9$g%S(TS7hioDzdm$%{pPFI zo96#}`|s74_kO|4_t&qr`rCZ`%1e2@z~%K<zS~#w|9u>L<>h>trGEdvB$fV3FJE=p zzCLd5zq6*^Pi^<w^ZdPJx5n>(-bAave|ukj;V+9a+j92vkN;}F+BaJLUCe#;rTqP6 ze*d3Hf|ARM%l6XSW9~WsuaPhPCB8pod41(ptG}z;ue^-kzsm3bgZ1xERaezZ{8Fun zs-5wh|035{yXPMdblrRZ!sq{!<FCH>_lGa9FKe~>`?-GA<^2_&bN@YE{_4y6rteSY zep$~SxV*l2n$_Ri(pO*Jw_WE~U%%4o@8s(H)4%VS6ZdP8)!)tiS6|N0-y8Jp!hQ>f z+Lqr9pUht=&keu6>hk_NpV}$2^QW!2y#MWQPy);oFa7n~ef4Gg9WHbKJ&b+zr9W-; zW&60be*Yg$4E^NyJ-PC!^s6uH%~oCBfA6L9P3Qk=Vaw~Q7h3(@eH)Z;f|l2B@S0os zx@KKzUEJ%x@9bM<|BtWJ`zO1&_Ug>-cE{d!`d_O2S3B8$m2v*uzt?uQZ@FT7$NAeV ztIyYVPX41k_qpG!<<Tz>>?!>g{rvB>Sh@AF3xDt2o|mw-M(^{rozC_CbD#4y3tySJ z{aoGaJN^|*-#yG*%nst#9^)>VSM6sPoPN*h_u9{OufO<jk5;zb`TR{l>9e)P^MBs7 zvVUN=V~6M5%GYnUpZhz-|HZtGdG%XE=2pIL&f6#Vb>g2rcZv=CA=1Cs?(YA3sC3u- z>OQqKQ@<PJ&;8xQf2H!BrDZHc!QUm<U&_6+{M`?7`1w5-E8p#u__y)To-@(u`%CZT z&;9qbzr_A~jO^NTdrIGJ-skds=ksTJrO(!GzHjyY^0{lacZ#=1&8>WWXSsdd+%He& zO*X#@_R^mFR(~(&m)L)w^Y%~Yp7zSuchc)x&J~|Onh%k`<6pV^-NSjSBVV0~es1?V z)atyg`Rw)6=T8TF>i62q`|pN-FFt?Q6D<FCrPX;`_RBD>I|9BJoWIBh4vvp}^S%7v z?W}<N_wxQP_LI*)owwQ+q`dZ;`U{)ycVbqa1II+&E%p-r?{{<q((hS)e_6lo^PS=i zf1h7!gxP9u<MX}veBdgOXN~7A`+TSP(-N!C*KX#|{p~p&6i%=IJN*I$;+gWxmG5>& zE{7QV_u9+*em{clowO}y2c?JKU(R2sd}p~M4jRTS|F7EKDgLqz9L5z#!asd3I)8HA zD|i^cG~6}6`kY=U$W=4%ul;<d*w7uSbxL*#|M!^Q`wDkwY(H0fZQ{A&^NrU}%7G)` z{dT|q1&iK2pSSoVIG7&ae`)i5jtIoucj~oa-wV#)YzIqy*4;O4-ksu&^C7<Z9=*K2 za?`u#^H#3}OTT^ziU4j<h=G#hZpZHh=kM}KFO~j$ZKr?zq;tjRPu|E+;s1Q?rvLT# z_5a0Y@8F24U`)LQAK|~Qboq$R;-{=<dvqpWjhZsE;`kYr=wn9RXL#06j7;)YH9o52 zn#;SnM`!X=)l)tu(NkuoWIxnB=`*vqtGwjg#>z;`KXvCTKiz|l@SlJG_g_ufxAR=- zI{kaTtlsu?oAkdk+CrLpa#Xur(*DGo?kNyrO<1bUDOJu9wlkS&?M(f8<%S2+U3|;? zuFO-`*!S|UbltKC9j4oqH7utmto_U3CGWMtuXDkhmn^S!l{D%t53+f4Xx($$aM7#j zR5qvB%@o$QU{l8pH)NV#{T9+Ggmi6le9k^z*0;n@dBxrd2{Vtfl;$f$taA^jXFbT3 z%^{Wdg<;v&OV?O>(}mY;GIzZAlV!E6bHE;_4aZnnRP~i3URO0;I?Zt{(hl0!DEoS4 zVqA&pvd}v3Cf+i&6+6@qy0Hs~*mWgL4CYuh&way<r7Tx(vv}*MuBenh7_^!r>wJyC z;m9;G$GdYmrrn;q;Ga#CXcu&F_F>aX<)y`(Qt?iZZk*GGTlJh>_O2U_Y0Dkj;&qJk zS{1wF%ex%cEISsw5oCEi*CpUzHH)+fht|Jo35#cQYW;6dn5eEU02!yq>d4gH#_ITW zyRgniZO5}R2ZP#$uh>mYn7NtrRh-X;JD|>+%Z5YyIi>8}HUvFM<XQgl8Km>32kE>e zvSinkG98@c%rSkAP4+8~*X}G!qgh_x@d)^)*Ys6RQRBbTLAKephdy@atKQJ?4fv_d z(k;TVs;)I*qcP{I{}U2AS95^7t=61b{G8J&>!4!+@0Rr^MV;Q;y5L_-lc=4~g%1Hu zQ}_8?_)*dn`ijMMy+Xv>ewL&8>Jg6}n<l;HxOVG_A<yzJ+gM(oQPh~N8u4BL(s|p$ z$>PnY7*q6-J=oo?n^Wt5W5UE}&Q*2}8*a>4@GD#H_?Brm+7>+9%{lE>`+{#ZO{smV zE20%6-u-6zs;?aJ@H-3dbip+x_KuIQvaH_otCROID|irPakOt2!<uPI8vDc#O3hc% zs5ChkwOn9|-TZ{P-khi6+&A0{YWl?7#2Y3UQge0ko>Lcfnohk}ib&yaS~XuG;*Ces ztNRKOi_Aa+JS^6spVNcggRTo*+1Hvdvzqgjo$H1>+U_&L{#qR5dashPL;9eXyn03r z%R#Mpb&V>%gIV^f8g;w}rDB^VeHU2sRmCy0n(J_6dN*`LV6(NK?8~=a0soR&q-Fd9 zHu`M1c#~ynz0-yhS6M>;du_OJm*uLwdPLH(%QM2xUKiGxssbJ&VHdh$+mo<!z2Fu5 z?u1r(XqUTv?MmgP`vpw)btg=9=j>Xi9`UwxwMAVGJ7j!_p=m1@%Tj-Zi03{{o5Tgz zl#4q4v=`1PP<K4q&S_RPZ$Z%;NuKnHZ(*rzU;ZnPocg9$^A#f=RW!}IuNLvjsp(d@ zfX-#b71h=Ui}(ev#Jg`elpUTN#k*ZK;^khJ-pwqlYi2FT=uFs}FDMf4vf-FMZ2m+w z*ga~y(3CjO4d-SocysK0Qq=2Q=YW5<EYfeB13m_`NXvQ${G83wt)sHymP*7Mwx(DA zRU(pD9nYq7PP>)C+ZJ4{-ISUJo!q%|H~W=`o`1mqj3!Y()r<<egI@a;GHPTGYW-I@ z;aFk`8o_UCl{vCFS?7d|$-Og9e3L+Zr?s{bCmeqzh&@|Stio-1V&0iUGGDTEo+$h; z7JHUZ@OBA@To0>&odo;Q{r<IA4!(#JD+;Ka)oR&sCZ>D!l;&5nBW5(;@Y8v+U>>M{ z_BrB&<L7RjGmcq|+?E;h4<C|A(MwchzndK~qxsJLh!c+g<;0#XFi28lcaCnKZOp#Z zeA9&Hk9|649G^N*R;t*+rBJhjZxOq1?G?wjpw40)XvF!49=D~3S;UOyYgcuiDAXE* zMx1B2%B0LsNaU+Bo_9F(l;b~Moihg&PCD^*$)_apxv_7W(ERCn<c#JMojOkz{E`KY z;2VNQ@MpDJdfYLA52A0j2MswNk2v92ZOdIe;pU&pxNXhv_;k)VzGK#TvY?&;G&3T@ zZ7DJDz#*9_t8|_u)Ch7H2mBP}w(Pif0yKhu)QRs=KWOkkJmQ37(Pr_2;%5uC+HzZZ zERUSgeC{9IPn+h?{k5X`-bc_#J{xzj!Hx;7G9v3iZj}`)3fR}&YT3a9nryHXd#14M zW%mv*%N6;@56P&2W&@tp>6~$V6(Cl0L2si0`%KWJM7bb$@r2!TT4laW-(bMrdK=z{ zmRL9E*NWy#QDQ{~_bNc0^$;P@AVPbq<%+kbo%kNLgWUQUG|*up_H4n{39T|q#5WtT z&y|ii;kfPiA(<~>8zwaWkrI2Bu;F6ce>P#x`|Zt-uIZdPm|@0ksqy~oAsLrv{*aLY z_Tm8Bv{#Gyl0?Od0`@nwT6)ABbK;wIeX{}k%2d!O{+w3J6Km2G+3&vSk<|aI%VU<t zR}{TzLi4|KI%gac{l$t5Y-Y4tYRDc1jmc~_V4n&~Jzs*vo-Mcrnrv7K8b8_x8du>~ z*uiG$v2NC{70uUt9%?;Ru<dTOeDUUp6W^xYppltMohJ(MDT#b++z}@nKgNhXODN&w zw!HD-{P`>S|Cx<*5*NX)a{%2017e$k2nGfQ80`Y(!|0DtK8&tle0wYZ$Lp^$$3M=! z{(DZ;^5FE+S6lq%p6d%)z2xXb&Et_O%2!n+Jtr%BCtaE^>p3~Y{gg`7DZ`0kCuROd zsysds>FHK<E#CW*jAfaMn&8}@b?aa6{9e2L+|I&trMBljfBrl7`|r;?D^Hncx;@#y zf0MVE?RWPSepjWZ|07Q-O?>|El2W<fB8HIKj)aZ9ELYQSEql-At|O?vVyFJWpwk># z^1d6+cnW9a8vbn8Y<RGI#qOk69`BTze(^Sm<|$<Cn3k}VokJ>LA;Q(zaP6YcoME?T zFZdDEWLm_cI$d~8shHzSZq93wt^sAH2dlOVPubs}(5w!gtSmTr^n{L2_ToyGso#|% zo+LD_au?DmQ*!)j%rPy(GvKpV)6yuGt=9!~Huo)fSJm|NpKn0@Ze5GqME<6>%%-Vv z{uh3*G=<t(KwA-CnpP@r)fW)iKQEzIUTDgm=?QBU9bcw%T${ODby;XxdDB-u6^;K^ zO}u^TD}FFG^`28-5u+aQ#HwkPy+Xtrxu#e9)gvCggjR^fvo)4&y^_>)%bR1`NuevY zeF;0i3tzGCPiQ?aY_exs!qWG`Chr8-e6ns@l-zW6+dZzsn)^Budc_67)3@6Nrr1qQ zn0pE~Jnp@`@5?$xjsLbyyzkUj{D^Mqou{;7&($2C?1`-`p}{QOvR(my&$4*WaSHgX z%;FvE6!1H%DK$@VMYZ_BBIc%F{z7XuJiP`RgnroMDcCSI&f~%lfu_)VE&*Rsny%XU z1nhC!a4ej|>z>bsYjata%Bw}BD?8qdEUuWk*TV6qxIoT^o&}GjInAs(7kp~x5ZhS+ zZb)nh4&854s#2!x_*L(q5WmosKgI`xw(%|tt+qR8^jqLctk;G+(j2e!)gu=AT=?MB zG<BcLg$mPyTK0+>RrUw7>XkI?lB0Rjdu5?9dh*GYiPsLYEbUi{c<$1)DP3sI_DKu= zh;y1{2!{MIJm~hCL+k&<go){#tMcrpKR*6VWyL?ECe=QL6_E-NuS%M3i3{iyAB6_n z-Pg<ep47Pn{EurA{pWDugJjdxBtxIoAK$U8-ZN#vi-#<$_s(7LBa<b&X3l~qPg$~K z-2-+xZ#ZYmk}9tr@jkQZ)9t+WhdCQS9(CrJ9#eDj%EZ8F3qIZE5YrS4`73cSX}Vy@ zf2)H++Xb)uVLcesFL*^xSjRZM+Gq7UrKYEGJ^}v?nndq;UHA~vG}X@Q!jGV)&{^P- z`$MYk`E#v;ep@<zbmzSGL)!7=&CdpFw~7f(v1>?}>&$uT8Rs?Y)&+ldvPj1`1$@kA zk-qB`@H3sI+r}y2>w1=M*YX1etKK_pIPwqLW__l;yl+XL>WW&UgGSE<uB;W*`5xNz z%UpQPhv23*e&ID=#G8(7E<3U%?B>h`FX~uUr*d@3J8w9)o6~Ea?}lqfS(dI>ig<nu z*1#$Ek$q|F5m4u{q4DhTEn4qfHe9r0nHul7;lxFj(EF|%Zg4fdny(bG$T8rvHH-IJ z)fKh&2aTjTUY)zac{no9z3G={lV}{MZLZkjEhlGMy5x&r)3J1+HJ?127Omz8`)%g< z@iynR7s69&niAHgb9$ZcF8*_F9!n~}Qp9_Xrcdt`ZagSy>I!Y@U8k_(k8YDIbj8o~ zn7?1IOuSLm^y<ITjOHU{*2y)N8FuqqEj^Y-o^bqKAofh5n2Fo+#k^yOWS-a^bmIFp zeX{|3YyPGQ&57-x$$+j_nI8G{L_V$mDT?eDcXETO!*4cXMFRGqIe<N7K`iSpFmc2$ zY<}_)G<L1EaYFN#pE_q8pBsr4P58?OT0GF(D)XfN<RKXzInda3{RRW}#g@AtXgysp zCn1qf$vfhN<5yFiGmdX8#EJsy<w1kj{jD-4_Qwy&ELoST$o@7uaz?XHK7982`^A<0 zRww?>ZI$_w{=RFq3480^h!Y1tFo-={@Fh#E$lx5P;`zR5LUTqdXz{?bR+%H9k!Gp; zsfz3;cSp`>zNW16MB%RpckzWzy(4E&I+lftJzKEdp4;-o{;pO_2^nj6YvQAAuzab3 zReP(<6#K)6WL(yzDY9QR<1QB1-Q6m4rT*|C8I^e{itJ}~%MORmYQDlGR&?QBf2-vQ znL|!|yFe5DJC(RCU(7#yNJhl&tP@{b_(lWvrL!YW9Q?rtTH$a3H1N;FA-}Hq#j%zB zRx8fNw5*=eTrsEBGULr@C%#FiK`o?<pcWFS(G+>miEoqmMg#V}Y}}S7?jJZL!*gxZ zgyu)gpt_uy+fqZj5wsZNr_PfFyUe+Z1)@(m@x21IJ~q|_vG899+w&|kSiW?^t_iI& zTR?7^c~$4hf@*6}%cH+l<_oC##WnFLXf4LM<U~HN>WvecKRSY%avq?y7!zA9SAZsc z9%)C;Xg)So=ZV72q(r``Y|x?sS?=Nsk@lKR?W@6aGnfC{-THI;8E?+L1OJPe|1+9i z@C~kDe0#HcLU^&n@sD?(Uo2Y|aP!5Y8v%Yny`r_pm3m)XnNn@~^qPp3uhNvCyQXMP zKPPfhM6~-zQIV(kE9<<eSu!h^iArgww)AN}HcH(mamcQCUd^AU^8f$V)xUYO?^(?~ z>(6ig{rfd_>dDi#p`ri2mwz{@6aC$I>eRoF$&oiNb=4oNuYa_D%APK^nOiUEH5`7{ zZfY0AFf*(1(e?rpnZ`F_a|-Tk(=^MGXUtVGSD5gdM}1CNUK_8uhlBLZT#hHja|+^W zS<L<vFy^uZ3!eDXBg}U`yOY=0%|ZI24$G!HTxv4>>sS=510AGK3UfS(+SbOoT)B@? z!93JKI<m`QU$XR!0=s3h3_l~8ZgGSuO?Y`tPEE$|6@$aFFbC<2RxF#ADf?K=E3;v^ zd6emv$2O%2yBBb&&9SRtV%RyA>DCE5cZK?!odys0Y%^x~S;};a<D1e1$(yWdGW#T$ zCae^{;PyoDMBjTZ;lA)vW`*6s4$_{JgQe$dG~AiXboBO=%U^9bJp9HbB7CmzRVS}~ ztb=sr-^?2y;vA$MLru-jEM~gJQU3K%+e!;&HJMU(h20(w(jWKTyRl&^oAk*@jwf-V z7u<fGj=WJ2YI@_uFXajK-VV~0M|a-%aF><uZZZec%wCI!8%pDIW=JvSx-1qrk$0T) z_}pKKhuxTNdE~h%d>8ezczaP^I<KR_Y}0PR6aPDe&t<bE9qt#p;AX(wc*b!~fklFW z*%=nbT$j%RC*<k`eJtdvI2mr9WV+=s&spL6yPz2bR=<iEii}ydOw@H&xc`)EMuA<T z2E)%vP+%%gcxlR`CgUf`=djGrLHeQ^%cffQ11*ndhBHox)mzZ}B$%a0JeF73?|D48 zL*CW~vrYK|C*m!I)aG38Wm4Gh=^%Zuj>Rb1{cy`+(d*0;G6gQUh15Ae7G|BWH`d|) z_K&k9q|5pp3?Du@vGGR1cdiWOyEc5%dHWm8HYMjDX`8RRpm)zhwVWTHW+xtU3}-R& z=gd$(lYg)+vryY?k+I;3eJTrje;jbhxxqJi!^AoL4(B*ClvTTVuZKRkV5{e-u%A(V z&h{PL(*JxIb6Kt{Ot{%5%xCR)u<fP#g5C@nrknZ&hdycsZ%ot|z2KH4c%rsl*suD2 zJ8yY!gW0Cvf+zlW37`Azd%R6veL-&mAJa^QM$Y!>XBiZV+Z)UlwQ{8N&*K#CTVKo3 z@P?V`mPeeULir(`83k33a~O(>S+-2v+vu?Gxw65-KYf-APsF)0lurnpm}4xiCgWGn z({M(JG1o<2d4jA3znaYXSO$l0zKppl@k$e<zghTL)GiZih*4Y6`=*-Z({)=;;d9e% zcpd&FGv>1FSDvu5RME$xCR>nU=3S;+9kXn2|8QYUc`tb3d)=QpS+h6%Oh;QLo1ITS zY^$-L_se7v>38Lfxhd+p$J*i*7WCG9_rCGrY+M^B`&EvVIDrdpKOPI^%-FU*N%>W? z!#7jL+#~fmhuhxnk&!;Bz*3aWx@DqSy{z=Qs0SBp+mt8VZxTLt+bZXW9n&q2V+s>) zHVX6Y-qXoz9N{2+(S>Ex{YNd2FW*1dCabuhH${tS=lsG$FDtV*K0L;ep**|QVcz{# z&gae7nJ3KGSkSvbtkGvRuff9)r@k|s@DaY?wnd`xO`)WZMV~p-gxUxP>62b8MR)BQ zIG0a0W1g^D^n%+qzQ#Q_nS{?R&t+BEAK@VFXv;K{`*q@>hi`HjQo=Yhly7x9eEZa& zaOmUY`3w_c^%wM}=riq{csudX%kKG16IP2~aC;_rqCdZZ^ZDvBh6(pI7xXT8^!b=N zmqPLMhJE>md3SF}{KhFF+^4nwK$|bi7Qy--s%CHWnQnQkDoZ|WtF@rF<ofj+1)}#4 zv}}II@kE?6L;3#n<ip{0-MtIg8qWkV=C<sAceL&07Jli#7Kd-SjJZdA_aAS2t61<t z&RO6@?h(%AYwHiStrooCX2#X{r)*Bay_XDTH7W~w6PTE0t}i^4=-<z49O58-F@<H5 z{lk{Wo9hp^$?7iXO<`l&*=+H!<beE*0%4Xd6VEy;)c<gtQDC=a&!2qFe*sU_xigek zI4fM9mvHD|X*=VDnVJiFGc1{IPM&?B<#F^ZrU`RFfnmzDGmg>6V(ulLhM2hxW}AFD zp8Pgz=X`G5&!DhB#zESVnQ3Nse+y?jcNEivNaY2+8T?E)S4SOedHh_P@kE~31-DJ| zjdyNbGk92X)R5tc6w8*0Q@3Z<EMoYyom=ET-<<WC?Y#Tl7tAQQu*lZzOfAzbj_oA} z+AI|o^saDr&$;0a3ehqfGo6#qHEwzAQVRI!*=;8E|Fd_zm$*jkf|ABdtk@Vo?DapW zUyCkW3992>eh&+kJofSTy=w0Cg)3Mr1vIi=smXK&Y@cN5Qe{#oc6eez!en8oS7w)v z==e`qahlQ8<no2)S<HURWeQgaYk56uu~@S3_yV8c+pmJ6P93`Xo&Uw%_mzd$KG$3; zjn#j*bzZo8%F*RJi#qCl<z7rbFS>2J;LrK<mF73^uW4P+!uy%y*!ov?(vdSaBw8Gt zn#?J*UO6Mm!Ju&NJsDqXftXSg$5*#GZ|!j~_<F3?;?^6-g17t}m(D6@yyI9VeQ)~W zN}YqE!JLogD`Zs6Px#Z9U1Z{;u%n30@ljHf+HHPmwZ3=!8#0X!hVEDK_^akP+mt=w z@D=v8tQ*dTG-YQumAn@=;g6G+UN(D!-hpS5Ea7)N1>UnQT9hbp@W*6!#l*upP1^EG z9&gMgM130*9!0)ZPP{DBw0fS3$KHDaAzOZ$9lY{9x1%NZoyv}Hu1zI}&7536?_;@q z_Lc<aY<Z;}Nt%v-w#{C!C{gC%kJq+BW;!Z6jD%I*8HtGc9vAf4lPw`+w%4WLs@7~p z#jkZNxpf`}Uk^twNSeKr<$7JBx5^S}_X{<A2TQp3w{@MJ`JhYj@I--n8^^;(SsusB zHFojt-Nv+|sJQ8fCW~*luusf3UbCE6@(k;4^(mCPUU-()w9@_tpY%3KBcTVkVmU9x z`dp~tKUlJNUnlQubM+mM7@B@$b4WcC?vdXh?0(pzN&C34$~~tGUvv&0;dLuCnaUDA z*I~l1xF)lD<r!7ov6i=F917m{b6h&Bo>4bDVb{dn#U}mgJCdXv{}i+Ep5{FE-fY(5 zM4^LIjX8y;3z)3krf%jVv)TN>vdf(7e(^fKD(AShW;ef?PwkO9hTA^MJHCZAm7M0B zWqwm$df99fwuH|<P1^6&JKk3-Xi2#V^w=ls2$`Kx+wsY;=}05{!bO?tO`Vtd9S<$r z$r5hsKcVWfbKu1^|E87twlbWz@AwzIea-UHt;gB*^Ffx&XXW}^&h`t&eAILNbIyIi zqC};GKW_Iq9cpuB34e9b!{bi(f|nvqo%}8#IaSRMR$WzBQv9mOl3V9w@b&TW1xd5Z zIoJKYw9&)EeBy$iHBB$YWc$0$RxuqAb>@8JubQ!AQbJ9+l37l~W0eN&?P?x2vlqN% zYwCROd#ug3*^h0<t7w*$`U)AB1$=Ua%yNvUJh-)&^HQwmg+CkzOR{|)X55?gpzAQl zqkNT&imrq|4~#9O+yrAPc^n_T=a?0zIOE6El`_7+1!AUh1pRMZaMqq<*}Z2ueP-=~ zF~5VGO8f;)>OBnZt|+#c)vvhYkyF!;{X!-pqGmn!%cTyqUFKM~r%U1Ed=}sMIeoms z{PyArm(O#o`=#sns-NRljs>&yGP`dz4Y_(MJHCBqdD+DsaB+|7!II^%9W7_W1!FD> z9a�s3o;cU84S+s>h82;e%8Cg;nxQghhRK3;XPOVWg6?YxaXx;haJBUyDMvSWZZI z6@T98keTkmt@(mWZvW#7F_HH)xa+&$>Cm&~oa=tfQ21vZzHre)m8Os1V|rV7*9*qn zd@iM;Qa63U%i}D<|4pPtXa938xO(fllH%7umfSi=gRjP>THAikcyLSqyra{u$sDuv zm1n%$Djl$K=lNcSa31vz`^gI)S~Y#lzu&?ueQl@YgHy5`Lg!U8cFj$Aq`p1r@Uq_L zOfg&89bcX1ymdx-M%7j84T-ZKvRv;|^(dEh{LIw!@>-_Fta61NNlcD^WLbE-IgjNR znY$m(Xwp^}R<ZNA@I~$5k@feFUn~(g7#hqOWbb(4S#8tG@;S#ZrZFAdYRqv-S1n^3 zf70QS#qw-7Y-T>_ie&j%ub%PZJBL}1{f~YI>2pduiufEK)pN|cmc21CX%7E}mo`nS z->G=Km2-8SoyZbA|Br>xwwbO4Z=G3Q{?c`DEmoNEZjJiH4V8QcMY%a2U61eRYK!GK zHvhkfkl7vAf~VdrowNV4iu(Q*^x5-BQYEKq#)DN$SypbZ6%)-pCg@Z9_p`^1G{u8k zXDZy)>khbBBXh8%T-WW;v*{e`UVK#&dh}gAV}_H#zlqZWHzrCRoccH3(dp55j#*kw zo%MC1qO<K3c4VE%_VB2+ah%=FxvZ{|Q)}DHuT}@P&K6!W+v!4$>A{lIRyjBB{P%6p zb`v`Cf6ju3Voe|A^^UgjO6xH1*rejIr)9y*xTem%_YbxCMhnE0GC01<=D2l6eMZ#* zYnfa(p&09V3U_r`&Yl<Y*?zEE=B(;L(a9W--YaKBI2qKPK6BBa?ZK(boI>)d8CC5G zkId~JWmq*mSe41La=voL<~a$k?%F-fFz$SCYbMLfX#ytex5-E^lV1F5Wz9b;z4?9x zM{}Bf)C-&NnA|Y<=fS=q(dyvTVosq{(GZhdFN2Rq?s?oO(L5OXU3kg6=mm?;ax|?x z|Dw4iH%&O^w}j)a#?^}!RjN0=T=w1d(6gN^;W|nk-&ZeQl&IhIar)ZM7G8dVn4fHp zkHY>2TrA-@cqIF`a^mI3Ea7{-CsaLWT#;csG2zwiYfgvEx;fTe-8ykXo_^D_V2)+g z39%tLb<GdDOxcta{{=L)ZRR|tFVWJ)`(7}{GQ&VfXuto362^l^#ILy@RoncC_t&ZY zGgh|=EwP)rKs$cd`ZY7o|J!2QKacxM%!21kw&E{#I-F;%()&=q_dq=(pLis51>@UE zu^pnNGHw04UhmqyIcoLJw8?q#CC06;u@RGN9XL&|w6?YuPn;NN=qVqP!0g5*=`-aE z<I#wSfRy$(PF@AOICOmY0-ee(Y98EGth8GzaY@<rO1*pEcbzVF5S#b;$0vLHc_okT zpL_FsnX>r#zjsa6U-pdt_T!LW`bD0(f6adv)=ew3x@nqj{vloMncYvdr$5d;-yScb zzheJ_r%#Wc`Z#y<`<fMh7yaJ*j%WLxU(uHPKF=&ZQ(Lv#s@Q(wed|k~{;dV8*)#X0 z#q)oq%YH9@Tb~gZ-uJ#{&DZAUSN+><Y!=GgxBPvsxlCPZuKM?x8I^n7Ecbmrx^{j} zNWJIj(^EgE%7f%9_kS+icX@B*_m?}XA}se6|9Z1`m7VQ(`|!T^b84S|3I4yx`pX?2 z-3h-RST8@X5Hx?@VP3GsbG}<Y|98>s?(*jq{Y5p;zs!^gn?LWe{nW?S>Gv)Frkrkn zGVjZr`wL|5Th@y4ukt_t_jEhV!s2)F_gDV@a>r&ZNS1B))#cAWOem^({>FOw{1;2! zT`0EM8St+8{T#c=TVGu+uG$Zldj9v^&iZeY-d!&Kw-RJu<ewFGw$ppTa?9txQ&leV zuUeM}a<yHx{|f)}54U!wKs{LePJZbw|MMUDp8h!Z()i|TJKN><8pq4e?JNFu^4~?- zs&nD}r)odUy_{Y+``4EkyJg^TtK47w?tZQF_m?}ZR)C!O&2NSO`M(zpcQWrQ{x<ir z|6aH97dvl)rPyv?UH<&bw8Bbtkkse8=XdO@UB17xtoH?lr_R2B`SVW4Lj$Iyop~p- zZTLix7jE8OU}yV%yC&Ev_ukL>eZ9J5{=C_TPko$wIlaKEwu*1L+7r7U=Wdq!*<ZA} zyYP8MH%Qw|kyn?CE3YRZtlR&)=iTMvt<fOs-pB^cpZ8lGYTcE|-cR_x+*uRa_kNCD z^VwIIi+2QD!d-c5`R^|>^1&dv$;P0derZ`G4~d62e0LW<|KkY?vCS3HwN>wyKR;y+ zN|fMu|H^lF`SY~(AlFFBgwCIL_%b9-)Gd1Hxs%!U`0J^Ut(TuqS^ewFoP8_d!8t#4 zm;d>n`C#uEZVP$maQ<m1RNt=eulQ`kZ-cenYkzgQ_{R&QN_&Jumx3G`0Cwo(SC@-- zeXxPZUiL3*eRrX_Zac^+kv7ZiY^T51hKFbQ{;RcB>-;p2m;24%yYgv~f7QG7Am4)0 zb^b-!syr@`|BP>}x3gV--tXjZxc_eM2D$V)*rkE1{m(zWB>Jfi5-{&dcR8QGng-Ii zd3$he)w}l)6ZhP={Jy^brJb#L`V^4oA8h*kblw*kHK+#{EiY-G_qZG^^+fyY%bhia zOZULj=l#DfpoF#xlF(NBpa1)k`^jHO%zv%AyYPA1YLEvd_bj!uZI9Q2d(eIVYdhQH zj~Cuyzi(Nq7QWj5{L5OXg`1w2w$J<A54P};_1Bj>_rG@fxff*Qx!-e(|Nm-uce%JY z29#oW+`>*;zqH&F1Wp*2{Y(1aT_~QT4GOfA?4VTP0+s-$>)+nrUs}d*jC$AhevVzY z^ws6hKPf&18R}<$H@u{M-s->LFngc=^`&J^epH=4JPLogeSc~B&lzN)&$L*T_e-9C zse<af$-K+?{Lj;1ogZiZ`V#YR2|Uf5|K7a6nVUz?V8?+6Od!UG|8WoO|MHkL0sxxr BFj@cr literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/tb_firUnit_vhdl.prj b/proj/AudioProc.sim/sim_1/behav/xsim/tb_firUnit_vhdl.prj new file mode 100644 index 0000000..f516430 --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/tb_firUnit_vhdl.prj @@ -0,0 +1,8 @@ +# compile vhdl design source files +vhdl xil_defaultlib \ +"../../../../../src/hdl/controlUnit.vhd" \ +"../../../../../src/hdl/firUnit.vhd" \ +"../../../../../src/hdl/tb_firUnit.vhd" \ + +# Do not sort compile order +nosort diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/tb_firUnit_vlog.prj b/proj/AudioProc.sim/sim_1/behav/xsim/tb_firUnit_vlog.prj new file mode 100644 index 0000000..79956e6 --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/tb_firUnit_vlog.prj @@ -0,0 +1,9 @@ +# compile verilog/system verilog design source files +verilog xil_defaultlib --include "../../../../AudioProc.ip_user_files/ipstatic" \ +"../../../../../src/hdl/processingUnitIP.v" \ + +# compile glbl module +verilog xil_defaultlib "glbl.v" + +# Do not sort compile order +nosort diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xelab.pb b/proj/AudioProc.sim/sim_1/behav/xsim/xelab.pb new file mode 100644 index 0000000000000000000000000000000000000000..a803de98e9eb2ecdff8118ab99dcf226ccd92fb0 GIT binary patch literal 5756 zcmd<`=3-MVR!}YG5@3;HHZe5N;w;Y0EzL<R$uBYz;t~kUEK5wuR|tlSadNSj85tOv z=ov<_n;7dFTbi3^Fch#<uuNcN5Mbh(#mL1BHVoOETCQs6{DR7&%=C;B1w%^<GhHJC zBO`@~%$&@;3LOQ{yktEE$DAC6AdrG$g`m{p)S|M~6g@74E|3P0E)xaEl(NLU<kS=e z-^}Eqd<B=(vdrYvVmziGJ8wS|7f(=WUS4Kix)sdR#>U3Tj_qRNYG=~VFDTK^%uUya z_#fh7C`TX4OUlgCFU>12N-QWyP0`QEt1vUs%h#_+%}GpB(ACY%OD<B-)lErFDos}? zsVvA$PRvoz)h$ZRNvu%N)y*wYuu#zTQK-nwiBCyQODxSP$;nItiInDL7H8%b$CsrR zLAkk!$wm1vesOAYX;Ers0Z6W*AXh<Gw>U4cpg1GHM4==pJ}t8-G%vFxJ}EULu?)>{ zJ%l{EOnOdIj)HDZe!2q4_4!4KC8>HK9wdrQOe~SZ(1}Ytv^X;_T|u>2p*Sb8ELEW- zqbM~o1(Jk}&CQWRlbMUr0&0q-F{&vt!6k`BB_M-}OA<>mli_w}=I4P^qp^t*l2K4o zOf8U2apzJDNGvW^2+1hQFHO%-@XOB&&a48N>0eNinVVUaS_C%A%)%7iC=*j-l$3jq zk;^49xui5PM<FS*L?I_NFTErK<j0iEw6xTsVuiG#{9J{!{Gwb86>0fJ3I+K^B?{`Q z#p(iVQY=Ph7KU2f6~&pkWvNA(X_?7J%v_AdAi~6mg^S7A-zbpFS3e^^H?>$l%g8u4 zH7_+?-`CZ}+22pUq(C<<GpD2|RX4SyG$k`JuS6HFq_`+qKO-eazn~~TIkgxR382{a z4A3hRU^L?3Vlgx}G7@02V02)NVmCC<H8!v`%wQ;Bt6+m<&bzesq7lT4%v_8#^r0yp zAJRM$p+2N>BwFI}BF!TanoemNiN^SnDa|7h>O<N_qJ<frNTj(J>5)!N42<!3aX6$? z6NBL%iN=OzhQm7&jSbCA@c7V~OV&9*w;(6ABsE0=M?=KO0=ZcXX^0qGnjtqte7V#S z%^65zIWs>`AtkXSQ6ViSzg!_PFEOXGI1}1PGBHGNju@MmqBKYRxHOR5MbJbeb4v^p zjV(=)ofyQW8j_it3Tj^G=aiO!oCj*SK%4s@ZYI1VU~FQ7WSkKz7qekOF~s90W(LTn zdUNrD+zD#RgIa{()|RmavSW<IxI_vPld}`kQx%F!QuK;T67y0Li&7xQnHr!t(vz@p zB3weq#+9U2lw{^(H7tm*VX|D(FvBuaQ&aVdOH$%<^3yYu;|&eXOt6~jPuNr`E(sJ< z^Gb75i!zhri%YQk+KaG}qFll-Bg=C1%5vgMDhpDfQGynRfn36fD9O!FDa}b$P%Q@c z?+lQe!Jvpi?SJTjIs#k}Ut5}@wAUvw5_V%OS9D@gaz<uJYH~?wQK|x%6Q5s@T9jCl zS(aLwmsz5apQezSSCUy$iQWfE&d)0;%Fh8cXceNN9FPuJ_b3+PEHuCR66;qXE&-&T zm7cqw3wD3{5o@3@mmso%PN8n@)HTu5Db$U+Ci>$vF_c(eOL0jc`??}Nr?kX4KDV^O zg1S!i2@NsEZX!iaH3B)+1iQiH#=K8xh!NFIq`n(XsqRKI>?Vd0o0g=xB$3mSn~Sq6 zEVE-bIe=J`MY)8LO?Gw+3W~%LqW;91DZ(X$Y^HB$gd2`DPl=J{*nLh>qBjI3dK^hK zidgT<bIBrm-zPN0P{Y&DGsM<NJ;}gO6T7p?EuF)hov|B8igVGbHh47zs$sC3-a<qj z=g;K}uGUcNxU|e7P+f()c7qPgDMUk6!V)_6TCIX`UF*!{h{YX{AwK+0L8!r6qlR<I zI+bSTlqeuI4B<nJ;Gtb9W+QV8<mRCemjJ|2P|!lg9w9~>TbdxZ75TWhT=P;Cf>M+7 Ii&6v_0a=NP)c^nh literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/Compile_Options.txt b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/Compile_Options.txt new file mode 100644 index 0000000..2965ab3 --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/Compile_Options.txt @@ -0,0 +1 @@ +--incr --debug "typical" --relax --mt "8" -L "xil_defaultlib" -L "unisims_ver" -L "unimacro_ver" -L "secureip" -L "xpm" --snapshot "tb_firUnit_behav" "xil_defaultlib.tb_firUnit" "xil_defaultlib.glbl" -log "elaborate.log" diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/TempBreakPointFile.txt b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/TempBreakPointFile.txt new file mode 100644 index 0000000..fdbc612 --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/TempBreakPointFile.txt @@ -0,0 +1 @@ +Breakpoint File Version 1.0 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/obj/xsim_0.lnx64.o b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/obj/xsim_0.lnx64.o new file mode 100644 index 0000000000000000000000000000000000000000..45aa83ae18f493d04e05735798c6fa2368749685 GIT binary patch literal 278848 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.Y7ukGkBynW(gOS9M&2K;w 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 QBmg~s0OW2^8bQ|&0L$fOn*aa+ literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/obj/xsim_1.c b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/obj/xsim_1.c new file mode 100644 index 0000000..f2b4752 --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/obj/xsim_1.c @@ -0,0 +1,572 @@ +/**********************************************************************/ +/* ____ ____ */ +/* / /\/ / */ +/* /___/ \ / */ +/* \ \ \/ */ +/* \ \ Copyright (c) 2003-2020 Xilinx, Inc. */ +/* / / All Right Reserved. */ +/* /---/ /\ */ +/* \ \ / \ */ +/* \___\/\___\ */ +/**********************************************************************/ + +#if defined(_WIN32) + #include "stdio.h" + #define IKI_DLLESPEC __declspec(dllimport) +#else + #define IKI_DLLESPEC +#endif +#include "iki.h" +#include <string.h> +#include <math.h> +#ifdef __GNUC__ +#include <stdlib.h> +#else +#include <malloc.h> +#define alloca _alloca +#endif +/**********************************************************************/ +/* ____ ____ */ +/* / /\/ / */ +/* /___/ \ / */ +/* \ \ \/ */ +/* \ \ Copyright (c) 2003-2020 Xilinx, Inc. */ +/* / / All Right Reserved. */ +/* /---/ /\ */ +/* \ \ / \ */ +/* \___\/\___\ */ +/**********************************************************************/ + +#if defined(_WIN32) + #include "stdio.h" + #define IKI_DLLESPEC __declspec(dllimport) +#else + #define IKI_DLLESPEC +#endif +#include "iki.h" +#include <string.h> +#include <math.h> +#ifdef __GNUC__ +#include <stdlib.h> +#else +#include <malloc.h> +#define alloca _alloca +#endif +typedef void (*funcp)(char *, char *); +extern int main(int, char**); +IKI_DLLESPEC extern void execute_2(char*, char *); +IKI_DLLESPEC extern void execute_3(char*, char *); +IKI_DLLESPEC extern void execute_4(char*, char *); +IKI_DLLESPEC extern void execute_5(char*, char *); +IKI_DLLESPEC extern void execute_6(char*, char *); +IKI_DLLESPEC extern void execute_7(char*, char *); +IKI_DLLESPEC extern void execute_8(char*, char *); +IKI_DLLESPEC extern void execute_9(char*, char *); +IKI_DLLESPEC extern void execute_10(char*, char *); +IKI_DLLESPEC extern void execute_11(char*, char *); +IKI_DLLESPEC extern void execute_21(char*, char *); +IKI_DLLESPEC extern void execute_22(char*, char *); +IKI_DLLESPEC extern void execute_23(char*, char *); +IKI_DLLESPEC extern void execute_24(char*, char *); +IKI_DLLESPEC extern void execute_27(char*, char *); +IKI_DLLESPEC extern void execute_28(char*, char *); +IKI_DLLESPEC extern void execute_29(char*, char *); +IKI_DLLESPEC extern void execute_30(char*, char *); +IKI_DLLESPEC extern void execute_31(char*, char *); +IKI_DLLESPEC extern void execute_32(char*, char *); +IKI_DLLESPEC extern void execute_33(char*, char *); +IKI_DLLESPEC extern void execute_34(char*, char *); +IKI_DLLESPEC extern void execute_35(char*, char *); +IKI_DLLESPEC extern void execute_2776(char*, char *); +IKI_DLLESPEC extern void execute_2777(char*, char *); +IKI_DLLESPEC extern void execute_2778(char*, char *); +IKI_DLLESPEC extern void execute_2779(char*, char *); +IKI_DLLESPEC extern void execute_2780(char*, char *); +IKI_DLLESPEC extern void execute_2781(char*, char *); +IKI_DLLESPEC extern void execute_2782(char*, char *); +IKI_DLLESPEC extern void execute_2783(char*, char *); +IKI_DLLESPEC extern void vlog_const_rhs_process_execute_0_fast_no_reg_no_agg(char*, char*, char*); +IKI_DLLESPEC extern void execute_1389(char*, char *); +IKI_DLLESPEC extern void execute_40(char*, char *); +IKI_DLLESPEC extern void execute_1390(char*, char *); +IKI_DLLESPEC extern void execute_72(char*, char *); +IKI_DLLESPEC extern void execute_1406(char*, char *); +IKI_DLLESPEC extern void execute_1407(char*, char *); +IKI_DLLESPEC extern void execute_1408(char*, char *); +IKI_DLLESPEC extern void execute_91(char*, char *); +IKI_DLLESPEC extern void execute_1434(char*, char *); +IKI_DLLESPEC extern void execute_1435(char*, char *); +IKI_DLLESPEC extern void execute_1436(char*, char *); +IKI_DLLESPEC extern void execute_1437(char*, char *); +IKI_DLLESPEC extern void execute_1438(char*, char *); +IKI_DLLESPEC extern void execute_1439(char*, char *); +IKI_DLLESPEC extern void execute_1440(char*, char *); +IKI_DLLESPEC extern void execute_1441(char*, char *); +IKI_DLLESPEC extern void execute_1433(char*, char *); +IKI_DLLESPEC extern void execute_94(char*, char *); +IKI_DLLESPEC extern void execute_1443(char*, char *); +IKI_DLLESPEC extern void execute_1444(char*, char *); +IKI_DLLESPEC extern void execute_1445(char*, char *); +IKI_DLLESPEC extern void execute_1446(char*, char *); +IKI_DLLESPEC extern void execute_1442(char*, char *); +IKI_DLLESPEC extern void execute_100(char*, char *); +IKI_DLLESPEC extern void execute_101(char*, char *); +IKI_DLLESPEC extern void vlog_simple_process_execute_0_fast_no_reg_no_agg(char*, char*, char*); +IKI_DLLESPEC extern void execute_105(char*, char *); +IKI_DLLESPEC extern void execute_106(char*, char *); +IKI_DLLESPEC extern void execute_109(char*, char *); +IKI_DLLESPEC extern void execute_110(char*, char *); +IKI_DLLESPEC extern void execute_442(char*, char *); +IKI_DLLESPEC extern void execute_443(char*, char *); +IKI_DLLESPEC extern void execute_444(char*, char *); +IKI_DLLESPEC extern void execute_1705(char*, char *); +IKI_DLLESPEC extern void execute_1706(char*, char *); +IKI_DLLESPEC extern void execute_1707(char*, char *); +IKI_DLLESPEC extern void execute_1708(char*, char *); +IKI_DLLESPEC extern void execute_1725(char*, char *); +IKI_DLLESPEC extern void execute_1726(char*, char *); +IKI_DLLESPEC extern void execute_1727(char*, char *); +IKI_DLLESPEC extern void execute_1730(char*, char *); +IKI_DLLESPEC extern void execute_1731(char*, char *); +IKI_DLLESPEC extern void execute_1732(char*, char *); +IKI_DLLESPEC extern void execute_1733(char*, char *); +IKI_DLLESPEC extern void execute_483(char*, char *); +IKI_DLLESPEC extern void execute_491(char*, char *); +IKI_DLLESPEC extern void execute_1062(char*, char *); +IKI_DLLESPEC extern void execute_2412(char*, char *); +IKI_DLLESPEC extern void execute_2413(char*, char *); +IKI_DLLESPEC extern void execute_2411(char*, char *); +IKI_DLLESPEC extern void vlog_transfunc_eventcallback(char*, char*, unsigned, unsigned, unsigned, char *); +IKI_DLLESPEC extern void transaction_34(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_35(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_36(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_38(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void vhdl_transfunc_eventcallback(char*, char*, unsigned, unsigned, unsigned, char *); +IKI_DLLESPEC extern void transaction_40(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_41(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_42(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_43(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_44(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_45(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_46(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_49(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_50(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_51(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_52(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_53(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_54(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_55(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_56(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_57(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_58(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_59(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_60(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_61(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_72(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_75(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_77(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_78(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_79(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_80(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_81(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_82(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_83(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_84(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_85(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_86(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_87(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_88(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_89(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_90(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_91(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_92(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_93(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_94(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_95(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_96(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_97(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_98(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_99(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_100(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_101(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_102(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_103(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_116(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_117(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_118(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_119(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_120(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_121(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_122(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_123(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_124(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_125(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_126(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_127(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_128(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_129(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_130(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_131(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_132(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_133(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_134(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_152(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_153(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_154(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_155(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_156(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_157(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_158(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_159(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_160(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_161(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_162(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_163(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_164(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_165(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_166(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_167(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_168(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_169(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_170(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_171(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_172(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_173(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_174(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_175(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_176(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_177(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_178(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_179(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_180(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_181(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_182(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_183(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_184(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_185(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_186(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_187(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_188(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_189(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_190(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_191(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_192(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_212(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_213(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_214(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_238(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_239(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_240(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_241(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_242(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_243(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_244(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_245(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_247(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_248(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_249(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_250(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_251(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_252(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_253(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_258(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_264(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_275(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_277(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_278(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_279(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_280(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_281(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_282(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_283(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_284(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_285(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_286(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_287(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_288(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_289(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_290(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_291(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_292(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_293(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_294(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_295(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_296(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_297(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_298(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_299(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_300(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_301(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_302(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_303(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_304(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_305(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_306(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_307(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_308(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_309(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_310(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_311(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_312(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_313(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_314(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_315(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_316(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_317(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_318(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_319(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_320(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_321(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_322(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_323(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_337(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_338(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_339(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_340(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_341(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_342(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_343(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_344(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_345(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_346(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_347(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_348(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_349(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_350(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_351(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_352(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_354(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_355(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_362(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1030(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1036(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1042(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1048(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1054(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1116(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1122(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1128(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1226(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1232(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1238(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1244(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1250(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1256(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1262(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1268(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1274(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1280(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1286(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1292(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1298(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1304(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1310(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1316(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1322(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1328(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1334(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1340(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1346(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1352(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1358(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1364(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1370(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1376(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1382(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1388(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1394(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1400(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1406(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1412(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1418(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1424(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1430(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1436(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1442(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1448(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1454(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1460(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1466(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1472(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1478(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1484(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1490(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1496(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1502(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1508(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1514(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1520(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1526(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1532(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1538(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1544(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1550(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1556(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1562(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1568(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1574(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1580(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1586(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1592(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1598(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1604(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1610(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1616(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1622(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1628(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1634(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1640(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1646(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1652(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1658(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1664(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1670(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1676(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1682(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1688(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1694(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1700(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1706(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1712(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1718(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1724(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1730(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1736(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1742(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1748(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1754(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1760(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1766(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1772(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1778(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1784(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1790(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1796(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1802(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1808(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1814(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1820(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1826(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1832(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1838(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1844(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1850(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1856(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1862(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1868(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1874(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1880(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1886(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1892(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1898(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1904(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1910(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1916(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1922(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1928(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1934(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1940(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1946(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1952(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1958(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1964(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1970(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1976(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1982(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1988(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_1994(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2000(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2006(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2012(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2500(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2548(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2554(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2560(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2574(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2580(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2586(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2592(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2598(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2604(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2620(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2626(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2632(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2638(char*, char*, unsigned, unsigned, unsigned); +IKI_DLLESPEC extern void transaction_2654(char*, char*, unsigned, unsigned, unsigned); +funcp funcTab[439] = {(funcp)execute_2, (funcp)execute_3, (funcp)execute_4, (funcp)execute_5, (funcp)execute_6, (funcp)execute_7, (funcp)execute_8, (funcp)execute_9, (funcp)execute_10, (funcp)execute_11, (funcp)execute_21, (funcp)execute_22, (funcp)execute_23, (funcp)execute_24, (funcp)execute_27, (funcp)execute_28, (funcp)execute_29, (funcp)execute_30, (funcp)execute_31, (funcp)execute_32, (funcp)execute_33, (funcp)execute_34, (funcp)execute_35, (funcp)execute_2776, (funcp)execute_2777, (funcp)execute_2778, (funcp)execute_2779, (funcp)execute_2780, (funcp)execute_2781, (funcp)execute_2782, (funcp)execute_2783, (funcp)vlog_const_rhs_process_execute_0_fast_no_reg_no_agg, (funcp)execute_1389, (funcp)execute_40, (funcp)execute_1390, (funcp)execute_72, (funcp)execute_1406, (funcp)execute_1407, (funcp)execute_1408, (funcp)execute_91, (funcp)execute_1434, (funcp)execute_1435, (funcp)execute_1436, (funcp)execute_1437, (funcp)execute_1438, (funcp)execute_1439, (funcp)execute_1440, (funcp)execute_1441, (funcp)execute_1433, (funcp)execute_94, (funcp)execute_1443, (funcp)execute_1444, (funcp)execute_1445, (funcp)execute_1446, (funcp)execute_1442, (funcp)execute_100, (funcp)execute_101, (funcp)vlog_simple_process_execute_0_fast_no_reg_no_agg, (funcp)execute_105, (funcp)execute_106, (funcp)execute_109, (funcp)execute_110, (funcp)execute_442, (funcp)execute_443, (funcp)execute_444, (funcp)execute_1705, (funcp)execute_1706, (funcp)execute_1707, (funcp)execute_1708, (funcp)execute_1725, (funcp)execute_1726, (funcp)execute_1727, (funcp)execute_1730, (funcp)execute_1731, (funcp)execute_1732, (funcp)execute_1733, (funcp)execute_483, (funcp)execute_491, (funcp)execute_1062, (funcp)execute_2412, (funcp)execute_2413, (funcp)execute_2411, (funcp)vlog_transfunc_eventcallback, (funcp)transaction_34, (funcp)transaction_35, (funcp)transaction_36, (funcp)transaction_38, (funcp)vhdl_transfunc_eventcallback, (funcp)transaction_40, (funcp)transaction_41, (funcp)transaction_42, (funcp)transaction_43, (funcp)transaction_44, (funcp)transaction_45, (funcp)transaction_46, (funcp)transaction_49, (funcp)transaction_50, (funcp)transaction_51, (funcp)transaction_52, (funcp)transaction_53, (funcp)transaction_54, (funcp)transaction_55, (funcp)transaction_56, (funcp)transaction_57, (funcp)transaction_58, (funcp)transaction_59, (funcp)transaction_60, (funcp)transaction_61, (funcp)transaction_72, (funcp)transaction_75, (funcp)transaction_77, (funcp)transaction_78, (funcp)transaction_79, (funcp)transaction_80, (funcp)transaction_81, (funcp)transaction_82, (funcp)transaction_83, (funcp)transaction_84, (funcp)transaction_85, (funcp)transaction_86, (funcp)transaction_87, (funcp)transaction_88, (funcp)transaction_89, (funcp)transaction_90, (funcp)transaction_91, (funcp)transaction_92, (funcp)transaction_93, (funcp)transaction_94, (funcp)transaction_95, (funcp)transaction_96, (funcp)transaction_97, (funcp)transaction_98, (funcp)transaction_99, (funcp)transaction_100, (funcp)transaction_101, (funcp)transaction_102, (funcp)transaction_103, (funcp)transaction_116, (funcp)transaction_117, (funcp)transaction_118, (funcp)transaction_119, (funcp)transaction_120, (funcp)transaction_121, (funcp)transaction_122, (funcp)transaction_123, (funcp)transaction_124, (funcp)transaction_125, (funcp)transaction_126, (funcp)transaction_127, (funcp)transaction_128, (funcp)transaction_129, (funcp)transaction_130, (funcp)transaction_131, (funcp)transaction_132, (funcp)transaction_133, (funcp)transaction_134, (funcp)transaction_152, (funcp)transaction_153, (funcp)transaction_154, (funcp)transaction_155, (funcp)transaction_156, (funcp)transaction_157, (funcp)transaction_158, (funcp)transaction_159, (funcp)transaction_160, (funcp)transaction_161, (funcp)transaction_162, (funcp)transaction_163, (funcp)transaction_164, (funcp)transaction_165, (funcp)transaction_166, (funcp)transaction_167, (funcp)transaction_168, (funcp)transaction_169, (funcp)transaction_170, (funcp)transaction_171, (funcp)transaction_172, (funcp)transaction_173, (funcp)transaction_174, (funcp)transaction_175, (funcp)transaction_176, (funcp)transaction_177, (funcp)transaction_178, (funcp)transaction_179, (funcp)transaction_180, (funcp)transaction_181, (funcp)transaction_182, (funcp)transaction_183, (funcp)transaction_184, (funcp)transaction_185, (funcp)transaction_186, (funcp)transaction_187, (funcp)transaction_188, (funcp)transaction_189, (funcp)transaction_190, (funcp)transaction_191, (funcp)transaction_192, (funcp)transaction_212, (funcp)transaction_213, (funcp)transaction_214, (funcp)transaction_238, (funcp)transaction_239, (funcp)transaction_240, (funcp)transaction_241, (funcp)transaction_242, (funcp)transaction_243, (funcp)transaction_244, (funcp)transaction_245, (funcp)transaction_247, (funcp)transaction_248, (funcp)transaction_249, (funcp)transaction_250, (funcp)transaction_251, (funcp)transaction_252, (funcp)transaction_253, (funcp)transaction_258, (funcp)transaction_264, (funcp)transaction_275, (funcp)transaction_277, (funcp)transaction_278, (funcp)transaction_279, (funcp)transaction_280, (funcp)transaction_281, (funcp)transaction_282, (funcp)transaction_283, (funcp)transaction_284, (funcp)transaction_285, (funcp)transaction_286, (funcp)transaction_287, (funcp)transaction_288, (funcp)transaction_289, (funcp)transaction_290, (funcp)transaction_291, (funcp)transaction_292, (funcp)transaction_293, (funcp)transaction_294, (funcp)transaction_295, (funcp)transaction_296, (funcp)transaction_297, (funcp)transaction_298, (funcp)transaction_299, (funcp)transaction_300, (funcp)transaction_301, (funcp)transaction_302, (funcp)transaction_303, (funcp)transaction_304, (funcp)transaction_305, (funcp)transaction_306, (funcp)transaction_307, (funcp)transaction_308, (funcp)transaction_309, (funcp)transaction_310, (funcp)transaction_311, (funcp)transaction_312, (funcp)transaction_313, (funcp)transaction_314, (funcp)transaction_315, (funcp)transaction_316, (funcp)transaction_317, (funcp)transaction_318, (funcp)transaction_319, (funcp)transaction_320, (funcp)transaction_321, (funcp)transaction_322, (funcp)transaction_323, (funcp)transaction_337, (funcp)transaction_338, (funcp)transaction_339, (funcp)transaction_340, (funcp)transaction_341, (funcp)transaction_342, (funcp)transaction_343, (funcp)transaction_344, (funcp)transaction_345, (funcp)transaction_346, (funcp)transaction_347, (funcp)transaction_348, (funcp)transaction_349, (funcp)transaction_350, (funcp)transaction_351, (funcp)transaction_352, (funcp)transaction_354, (funcp)transaction_355, (funcp)transaction_362, (funcp)transaction_1030, (funcp)transaction_1036, (funcp)transaction_1042, (funcp)transaction_1048, (funcp)transaction_1054, (funcp)transaction_1116, (funcp)transaction_1122, (funcp)transaction_1128, (funcp)transaction_1226, (funcp)transaction_1232, (funcp)transaction_1238, (funcp)transaction_1244, (funcp)transaction_1250, (funcp)transaction_1256, (funcp)transaction_1262, (funcp)transaction_1268, (funcp)transaction_1274, (funcp)transaction_1280, (funcp)transaction_1286, (funcp)transaction_1292, (funcp)transaction_1298, (funcp)transaction_1304, (funcp)transaction_1310, (funcp)transaction_1316, (funcp)transaction_1322, (funcp)transaction_1328, (funcp)transaction_1334, (funcp)transaction_1340, (funcp)transaction_1346, (funcp)transaction_1352, (funcp)transaction_1358, (funcp)transaction_1364, (funcp)transaction_1370, (funcp)transaction_1376, (funcp)transaction_1382, (funcp)transaction_1388, (funcp)transaction_1394, (funcp)transaction_1400, (funcp)transaction_1406, (funcp)transaction_1412, (funcp)transaction_1418, (funcp)transaction_1424, (funcp)transaction_1430, (funcp)transaction_1436, (funcp)transaction_1442, (funcp)transaction_1448, (funcp)transaction_1454, (funcp)transaction_1460, (funcp)transaction_1466, (funcp)transaction_1472, (funcp)transaction_1478, (funcp)transaction_1484, (funcp)transaction_1490, (funcp)transaction_1496, (funcp)transaction_1502, (funcp)transaction_1508, (funcp)transaction_1514, (funcp)transaction_1520, (funcp)transaction_1526, (funcp)transaction_1532, (funcp)transaction_1538, (funcp)transaction_1544, (funcp)transaction_1550, (funcp)transaction_1556, (funcp)transaction_1562, (funcp)transaction_1568, (funcp)transaction_1574, (funcp)transaction_1580, (funcp)transaction_1586, (funcp)transaction_1592, (funcp)transaction_1598, (funcp)transaction_1604, (funcp)transaction_1610, (funcp)transaction_1616, (funcp)transaction_1622, (funcp)transaction_1628, (funcp)transaction_1634, (funcp)transaction_1640, (funcp)transaction_1646, (funcp)transaction_1652, (funcp)transaction_1658, (funcp)transaction_1664, (funcp)transaction_1670, (funcp)transaction_1676, (funcp)transaction_1682, (funcp)transaction_1688, (funcp)transaction_1694, (funcp)transaction_1700, (funcp)transaction_1706, (funcp)transaction_1712, (funcp)transaction_1718, (funcp)transaction_1724, (funcp)transaction_1730, (funcp)transaction_1736, (funcp)transaction_1742, (funcp)transaction_1748, (funcp)transaction_1754, (funcp)transaction_1760, (funcp)transaction_1766, (funcp)transaction_1772, (funcp)transaction_1778, (funcp)transaction_1784, (funcp)transaction_1790, (funcp)transaction_1796, (funcp)transaction_1802, (funcp)transaction_1808, (funcp)transaction_1814, (funcp)transaction_1820, (funcp)transaction_1826, (funcp)transaction_1832, (funcp)transaction_1838, (funcp)transaction_1844, (funcp)transaction_1850, (funcp)transaction_1856, (funcp)transaction_1862, (funcp)transaction_1868, (funcp)transaction_1874, (funcp)transaction_1880, (funcp)transaction_1886, (funcp)transaction_1892, (funcp)transaction_1898, (funcp)transaction_1904, (funcp)transaction_1910, (funcp)transaction_1916, (funcp)transaction_1922, (funcp)transaction_1928, (funcp)transaction_1934, (funcp)transaction_1940, (funcp)transaction_1946, (funcp)transaction_1952, (funcp)transaction_1958, (funcp)transaction_1964, (funcp)transaction_1970, (funcp)transaction_1976, (funcp)transaction_1982, (funcp)transaction_1988, (funcp)transaction_1994, (funcp)transaction_2000, (funcp)transaction_2006, (funcp)transaction_2012, (funcp)transaction_2500, (funcp)transaction_2548, (funcp)transaction_2554, (funcp)transaction_2560, (funcp)transaction_2574, (funcp)transaction_2580, (funcp)transaction_2586, (funcp)transaction_2592, (funcp)transaction_2598, (funcp)transaction_2604, (funcp)transaction_2620, (funcp)transaction_2626, (funcp)transaction_2632, (funcp)transaction_2638, (funcp)transaction_2654}; +const int NumRelocateId= 439; + +void relocate(char *dp) +{ + iki_relocate(dp, "xsim.dir/tb_firUnit_behav/xsim.reloc", (void **)funcTab, 439); + iki_vhdl_file_variable_register(dp + 561640); + iki_vhdl_file_variable_register(dp + 561696); + + + /*Populate the transaction function pointer field in the whole net structure */ +} + +void sensitize(char *dp) +{ + iki_sensitize(dp, "xsim.dir/tb_firUnit_behav/xsim.reloc"); +} + + // Initialize Verilog nets in mixed simulation, for the cases when the value at time 0 should be propagated from the mixed language Vhdl net + +void wrapper_func_0(char *dp) + +{ + + iki_vlog_schedule_transaction_signal_fast_vhdl_value_time_0(dp + 566968, dp + 571112, 0, 0, 0, 0, 1, 1); + + iki_vlog_schedule_transaction_signal_fast_vhdl_value_time_0(dp + 567024, dp + 572064, 0, 0, 0, 0, 1, 1); + + iki_vlog_schedule_transaction_signal_fast_vhdl_value_time_0(dp + 567080, dp + 571616, 0, 7, 0, 7, 8, 1); + + iki_vlog_schedule_transaction_signal_fast_vhdl_value_time_0(dp + 568344, dp + 571728, 0, 0, 0, 0, 1, 1); + + iki_vlog_schedule_transaction_signal_fast_vhdl_value_time_0(dp + 568400, dp + 571392, 0, 0, 0, 0, 1, 1); + + iki_vlog_schedule_transaction_signal_fast_vhdl_value_time_0(dp + 568456, dp + 571280, 0, 0, 0, 0, 1, 1); + + iki_vlog_schedule_transaction_signal_fast_vhdl_value_time_0(dp + 568512, dp + 571504, 0, 0, 0, 0, 1, 1); + + iki_vlog_schedule_transaction_signal_fast_vhdl_value_time_0(dp + 568568, dp + 571840, 0, 0, 0, 0, 1, 1); + + iki_vlog_schedule_transaction_signal_fast_vhdl_value_time_0(dp + 568624, dp + 571952, 0, 0, 0, 0, 1, 1); + +} + +void simulate(char *dp) +{ + iki_schedule_processes_at_time_zero(dp, "xsim.dir/tb_firUnit_behav/xsim.reloc"); + wrapper_func_0(dp); + + iki_execute_processes(); + + // Schedule resolution functions for the multiply driven Verilog nets that have strength + // Schedule transaction functions for the singly driven Verilog nets that have strength + +} +#include "iki_bridge.h" +void relocate(char *); + +void sensitize(char *); + +void simulate(char *); + +extern SYSTEMCLIB_IMP_DLLSPEC void local_register_implicit_channel(int, char*); +extern SYSTEMCLIB_IMP_DLLSPEC int xsim_argc_copy ; +extern SYSTEMCLIB_IMP_DLLSPEC char** xsim_argv_copy ; + +int main(int argc, char **argv) +{ + iki_heap_initialize("ms", "isimmm", 0, 2147483648) ; + iki_set_xsimdir_location_if_remapped(argc, argv) ; + iki_set_sv_type_file_path_name("xsim.dir/tb_firUnit_behav/xsim.svtype"); + iki_set_crvs_dump_file_path_name("xsim.dir/tb_firUnit_behav/xsim.crvsdump"); + void* design_handle = iki_create_design("xsim.dir/tb_firUnit_behav/xsim.mem", (void *)relocate, (void *)sensitize, (void *)simulate, (void*)0, 0, isimBridge_getWdbWriter(), 0, argc, argv); + iki_set_rc_trial_count(100); + (void) design_handle; + return iki_simulate_design(); +} diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/obj/xsim_1.lnx64.o b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/obj/xsim_1.lnx64.o new file mode 100644 index 0000000000000000000000000000000000000000..86bf929c9b2fd3364d69c7656a92eb3a93adc147 GIT binary patch literal 36368 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 F2LRYTm1Y0{ literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.dbg b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.dbg new file mode 100644 index 0000000000000000000000000000000000000000..e61916012747cf27bdd8d5d6191bb1a2a77d5f7f GIT binary patch literal 51520 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 JuCEe@J^<%fKd}G+ literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.mem b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.mem new file mode 100644 index 0000000000000000000000000000000000000000..f70991fade975e0b50d73f072716aa2132801676 GIT binary patch literal 68207 zcmZQT12T#tV37?95W2%3LW2cIiO~=k4S~@R7!3ichrpcw|Nnz9%wTC414;|1Gcd3- zK=7CU|NldU2R$_-08)SK<%Br3g7NKK{}rL3BFC<-S<|zmiKj)z!T=033=9es9xiBX zbZm5NY+g|B#J7Y;#zivHq97sV;)2Gh&1_+OG8P3F7T5>r7d$xN7|<-R@Z9$EzxVDw zU-x}q@wHm-`?mW^AMD$D-7332{cV1I_Wkbn{o#3$NxQy@{QRF9&gW85DH>z-_tM{` z-qY{s-~P&^e*DDqIL%il-}6eZ-@jFoHQsE$^Pi~e^X-e*8GfD6tnckJ&7!n;{Ud*o zvV8|Gwj>I#-6J1;vBu=brk}EpuAJYjefQ4v=UaOZUaT?rWO?mZ`Tc3<<v!e*{_FZZ zyZ67|XDRV~-;%#;&(Ha@>i@3$wKDwXKT)|8NAfT8{+wFYescQl%{o7JCC-Xacxth$ zRld}`vq{`_z4`qwx4vxl?LYte-IW_>Q_oje_BH+3Wb7FkWBPsTyEzZC=Is6%)ZX{d z)!bK@dy9<w_7AC_LmoY{s*k%eck>myHg}_sshuZ<`1j4OI&CSH&a?i*+~{8ayRkO; zk<Rbt%J0l^Q7g1vz3ZOR+A?;#kA-WiLe@V@-Xxi~Yh8*-B=eeMaWyl!Ut2KBb@ktt zP3OO~B}~uN^jOxOZ}Xa78<rYZEPC%@b>Vei<)N&#F-?~wR(}+*?QylOH9B9E?(5Ef z^!WeC%3Q{^Q@wXeC7aGGu|05jaxVAV3i&<iR?oICZTub)opk*71KV4M`*nHuxZe`8 zzQ_LlVc*Z(%m=ntrrr2xSHWL)Mt<tDdk=#8jz#pg&ylbCQo8%u?>f(gQQXs$q>@eJ zUX%ts*En5gZ>qI0IVSt*C6V5ZQu-$R-KqPN=gP8L&sEDUS{T0O(ZXoy`H$1u^K#ED zjEwx!6`Hf^SNQ8kyrpZ-Ki{^B?dJ7t`}Q@PBfc$ImTf3iKKGV#?3Iw}ui;6Xj{N+t zC>9>sR{86Mp~b9}SrH0N&Jyv{X6SsBUh(dc^?{#R>HU%aSw8G7Dl1*AEF7|Z<yN&7 zd6zAvORw`R@c1!7Rn0r*d1p(b#j1Zse^uBmnDT8Fe9{%SICF5is+#v7HY@gpcJa?n z7`~q0P<-LbHgm_)`<9dLD4L6H%Hw>z?By)2O~)Tq@2j<JnIsZqxaxgyaOmO-uS&Vz z=PS$oW;WWVV;K2pa?!n~Tc0LZ)LuK`+&8iRVD&l4_pIrA#OHpDD?4WWx~Ke{<oi8> z{dEr7KQ<jn>Ey56|Mu+j^1m@>&tC3cm0@If^w(F}wEgdm{KbPM=f1c49%mYAIwQXC zK=mxv>72?n*G}fvL?&%IvXtGn>3GP~{;xYfHgY+yFVugPXa~06xg;k^PR7^B_e}T6 zSBgCAKyC^w|1kHpV#%cPlMDP8>1W4Tm^-O2oIHoI#F59ogh_d8>vRkMSv4(wPU@D- zUpNi_T;S}vA{O_^Ci9b^73bV1JQviDd~jAb2#T)g{Ji9(`-_yMQlb0D^YhNmk^Ac_ zw9oPWLGvf28$Nhz)qUUvnZ{XhpR?9{dzxQ=tum+m7qHlc^2z<K3xsnkpJz9f2$h!K z+j{VO=Zr&kQeR|ioa5NJ_b++Ge%~M{x?*O-_qi9!i?g47xnVx(gELr+v)244$J`db zBDNR8Nk0|}ORUu0bENXplVrgcOV<B?cX{^w>F26fNx9!WyExsizqnJS#yOtt{)FoX z59zP`anKy(n@{)h(n>xbP?Wa+(KhkcA@2`&pD33IS)G(z;NS7E-7jIuwhuzjJty-w z`?<tE&u;qBx6Ar{R89SI?a;Via$jva!}ed_b$-dcfA8X@`SaQMJ^Axl_&eLLH@6=- ztbWk>(Zk0N6h9WIRCw6bh}fve+40B;@wbB{*+G(jA1HqOkoRFig@uHTirhU;IU)Xh zcK*(G{igOKho6H~xO|vU@k6J=!$yW*PKf_L8-HheK1lL9NHPVaQ`kmDt`20ZJ;>ts zAhYKmbbgemRpDXtM-U_l(kTwoln>H$9c1U}ug@2*-*2Cqbn5l<+Xo&#-~9np{K$VQ z|MmM+dHm~ltNngOmH*inRVT2e$5P$nFen?;oTwD4dG4~c=ix*Xa9V4A&-%YU%<2A4 zgXm)~ra{EoU+iB0-a4>+-$C8vZ}TBy&g$HCd~N%R6SwtT)XfAZ@AiGp_jk%UsaH<t z`Q_3+;iW>>p)+5k6MwyTdlH@A6}L<4+_7K(4ZhY-ef6|9lmF}Q8Pd~!Dl~7uD49Rm z_+FZ_+^-hZKRdr@#eKbG`flHA-&G&ore4@pztAu3fq&KAE74J3wjSM4ugYgv(Qo}Y zxAfTUXFc2RO6Ip4-}6h~lipMDh12Tb`|A5|j6NOs<?Vg{P1&*Pdy@J6#`nC>RaDRY z7*}|#`fP{$`~~8F_I*EVr_8@*|CTRj>(ciypQ~V>`;pJ`@!sb><u@eXcL?^|IqLtY zeLs7#n_NVF=F8d1=PHiR{pe@$xb|hw_o>GBJk$3CyV?9=+56!8-u!*W5c}qo9kYJi zQ+`eI{T$<amFaut&-qwq_UNMe3)cPbYl{z_V1BKyTWkEZr~IPi`$@+4Qq%YBpY!ow z;j!P>;f@N0I%?AFQ`V1vKF}>c7X7ei`z6WzsmAyAo~u~hTk(Zc>%jZ!`)dqAc6Oh; zZuNL=@v-RlJ=+gT<}WtBr<T6wEZkw+Bq|gBE?t^0SAOjFtDfy=CG&S1-{VW)GxuD@ zd5MoNgugW1|Gw{L>XXK=)2Hpb`L^f#9^-p*>3gQn`S{K1@!m&0-)F%Cq81tuf6rC0 z&-ut_^;ov(SoL|y_Zy7w2`bCgHpPATeb3yz*Ji`NOP9=#&-vJA{djJ{vEP>@-)pDu znS8EdIVg6jK(SMk4zbVjZBO|z$@goF?^&kr`FyUz-tzI^oFj|<FL2l0|NX3KBKx)Y zs9$NPB;PMGzNebL=k&RXddtUuANPD;4|mjRsH0}aM`#H5*j1eV$;$EgkCE&i(Q_5r zb3cYzKEC_9XZx)V_xT&-L9uBHR)6tnRQjIMa}}@Wel)XqoLh42_LH9NHz855^OsxH zCGYT5$!m?%)<1YIp&Q(GkF9<7k3evt()3<Ue&OT`p63{9od^}Bi5EQM|KCf!ayO^d z()L%2${*JS!m_+`^($sJd{+4<m+(AR`p;dtWgGh0YT02$S9imE3;!Em_{3r-bnWLT z5qi!!``*Dt+(93qrSW-nUppuDzgJHF@AWR#O$4<-85kHU7~jr0-7OO;(!Tohj2Bwo z={Kz%9bFxpo060|JN*Sr6*SZ){a`3n-Qm$>9a!+t$;HuSy4{D31`iIkM$b2V^x{~n z^nV6%qsSMw->*%#-0m5Ef7Ys(>(2e*x)uEV%i7D|Yra}9udaF&5?c2sTz;{@w&Q91 zp9*aEMJA<nzUO-W&-8HR>gnqJ=O4x||1!sB&2e+@Gddr=-&FU<o4=l8!+hiWrcc-Q zrFWjO?Z3zIaJFjNv>&QpbnnSs=_$6@#B*QAaPyI)yPrPzE+FfEs6aHoLxo#>@B1e< zON3t@5eAjj-s%FLVtTXGE%{%%SbbyxRS1_jT_&}5Kl422Y&Fr(hVfU6MBQY+Z*51v zZBYI)eQU(WLc{+vKNx3Me5t*WwvMB}cK7d-KKrIupDSPWyk`BEIq!StecpSsc;EJ_ zbKm{W|Gf9w@;<xm^WUqU*TjFH^M3Zc&$YLU_idf_b4Im~>Yrtn*_+!RO6e?LlCkB< zcS|Y#jGs%MZndnAkWp&ieN?f?LWOVQVaLJ_nRi0%CmuFfxbXcxs#vrmSVpOR@go6C z8!f(xhm}DL9lnW&ok0v`zKMq~KN7H<Bhr52VT*+epMR(GlY$r-rS@cyv}HZt>0j@+ zZ+$Ozzwz^5tLYE6|FDbS(-@xc@N`hk$2N~m1uuV9%YT|6TQB_~?!^0>4{kSZ|HiwA zN&6n_ghN6Wyb1GkT<%}ixS96m`~CQH|35!fu&hz!3*?{Q?fm4!ObZvj`CZOWK6F~R z@X3QjCR(`gJwK{g^utv~slE7-faM>ML;FDt1-^-gzdsVNtTAWj`}TRS?HdmJlJ!eA zZ~FgfZ|C2MeQ)?nr^MD3idJ$w0LAK#zkm7vv2`3hywCh^E#v?G=}%w2-f&jp^7N>; zS&QwyIqr=<o0wj4aP5N)i=TaXIH_R6-?E1X{=O>spTm8WeSLa$+=qSUrsixL@;~Z@ zMeBdg%q&S#?%pV>v)pyd3-9@hUmQB*I_>(s_<xyOSHCU&uVyE|;(T-5wdm6L(7Oc| z;u5>eUN7~Md3Hdq*UdHG``gdMQ9U-7f2Y+xb^76x^E3RhX=rKbhU-_JKfbkXZSmI= zA71Y<yHXZ=+-h}oTm18{3y(=#U;Fu8=t^bqijU9wO8=F-|M32~?!sfy*4HY(?R$8= zGJ3_wZ+)fv>i>Uuy+`@Vj{V7V*V`HVvEpx$;xAkC`6zpP{PTqYk0*9oWtT5|_;*(8 zkF?I2s^^|FuV6VH?qB!wO7W)~U!Tm_wc{b@rwuINRKGR<<F~2_el^o`zI6UFDoo7t zP`}iv-k{g<kf<cTuY_r0%ELvKlRi)ITO#b=V5iuoKi5Gea!1BIQghF!QN))t0~A)5 zpPl^WwXbek`L{W#w=7QBcmMADHR)o;mh#81UZz_=4qn{#=kmAs(AV1HW#Lnw#;?6> zD<)<imtP!n+>3Yp@v1+OUmaC%Xz$#1WYYb0>h1g2z5Q!hWq01`U*zxk&;M2`<$R3T zdv>G#wg+>nBD(BX+pS>Pec|`#_v_!Nga+*TUwLo-<HT<DSGj$Ru^B7dpZ+*qRDbVZ z?vL-!Q*J!keEZA4H@|Cte1E=k!_nv4U;d5!z4-Iron1FCrtGe<t5D4Oc;(T%^YfPN zQk$P#cdM*;(`4=0wVyU{?LQh5H>>u2(HbV>dsdozFCIE-w?wQqVD6+|8=KzyN2-(V zKNFLGvj5JvyT3lapI<rsz|zj$v5g*w&Z|e;)%&%J*Q~wwY{w72<*io^r~cUds@ZFU z_vPc;o~PdV?jo<On-{tGX<b}i?VX4%)sud4J~V$>-BiB5c=Ovok-xc*F5~k0mLIM# zsq)PH>xa4bMduguym0ci)j6KO%l=!?*V8kv{$Y%3Y}NPv&py-n^1eMtqb1xYL_$T5 z|Mk&T&hEOGkn85ZNzK#Q^RUNZkK1oD`A^DCYBQ4ZlJt^{lDwsnshK5WyWvup=V`gN zX_KaHlJer@l5)G%9O@CI`CGpHUuF64vh;1o>z;o;)B4`J`24+{pZ7m6KYw@T&D3uX z4jx|G8vG)cb^aeym-Pp?mCQPtw`socg`j``G866Z%rD*erE}?i!Ml&VVs4zDxU9N< z_7O#kD<AsgJ@)O8f2?%vZD-v%QNKxTZEctDlug~%Z}r9LaQvSqE0(%HoA>*+Oh)XS zmgVm2Zf5)_yJB%TjZ?RDv*qigm%`rm$K7)`xbJ@ZXxq*HH|Omhean1P`t9)b2yyTE z5x-_{&dZwqQ6X(kR8X(3%>Rkgj&Ee{mn!&^bADIEuOpZAH|lk74-pps7OZ)1>pJ`U ze?n%dzKLI>-Bp+MTxI3)U!VC@>I6=n*|A6{C)j-UCcSBP8^09S^l;_u`nRL8>t>qF z%^t9~;vb!z(JlY+*_BCIIf?dDKPhf&UcvY~vHIH4OX}19xs`Nl7be=Te3x`Wf`4P4 zz{`A<dp?2NE05+v?45mY-lfBv>o>0B_+@$Aa_8%fd3vo!rcON5qpfw&taP&`)SJgw z99Z^xne>VoxyL4+g?LZ;B)gw3)F64ScM;#1elMI2b`c_=cVGLee&@80c3WSe;A^(Y zb<fn*Ij_lcCg%J!zuvoAp|DiNSh#x0CAKTR`Us1*mEJy@yIKC`{MsGAubevmf9)3W zZ~E8XPOp2lUVXmlgdJv+W)`}t-dL7rmKv*5oAmPe4++s5YELKMcUN`YdPQ>i{&_Xm z93TDiNL!|1{IR~T-FkzZxt$y9HqW0d>?@X7G%fihYxn<m?MB`SJ8UP-Ok5xw)z^MD za($zJRo&4CsvCOrXK#wry%)1NMLyx#l_c>{-QV_?&IPaHyHz>y@$&AkQjc^W`p4X; zUs`ef*S}bc74?6A@(I=ZT$f+uUv=+d&b6~8e?8~?tIs~+c~Cq8oDfv6rGCu2^i@40 z^jDel+^b(s2OZe^s<7VE&gwyG2HWv<OABo7w13_4(e?D)J@V$WZN$!=4J?neE65Uz z4E3Hj^<Mw#cW?HbsC$vL_m++3<-hZv8I~T2e3fE-ZMIkW+2{7hr#$jo6#vZP`>Nx= zE;lr9?d6*R_tdfFJD(L6UyYr1d`^^0*wsntyZ(tBK2i}f`+n-jfBx6cMqQu3AXf98 z%CFaZ|H-g-sxN<iK0f14%aX~(UN<}%bIqRTUXgpLH+Mq2Tkuc$<MY?qAC)kaOS-$_ zB0Tk87Wt@GU2m(lF~ej@-uC{eZ|TwBg5$*PYm;vFZ7lm_boDKpR@&^s6k|wwG`ZKl zzVYr4mAh#&H|K#<i+yjoRDQYLlFvuZPC8sUY2SO1$A?Ol=c>Q7DO5gC=_vpDrA?ws z*R;ZwTjpJ<`Fnrgm!j^!$B)jfzWVrguK42w*~QFhUWWyvA6ML%@O8&W%jd6sfBltt zpX0U*6w^DyZGXgcHOJ;n@z*=-@%rgyP9baQr<30<nC~y{@g{4E|HGKSHM<;>$`{uh z`uyedOU6#y-cKL(FPwia<?$wUivK^Szcp3PN%D(pn0D?c=sNcK^=rkA>jUlXss8%; zrTNJ0o=+z~9<n*5*!%Ocd`_O}DfQ||lY*l)dCf-{-F}MH{H=M{a-_QF6X(-soxvvS z@|hJ2Cj{F46aDq`4tpoR)YHk&d)<$|w{Jd}))8oTaO%YaqMs$XIuG}J`dE=1VL1O` zg7G1Z`E%~blyx2Z+&poD#VL*XZ$f|l>}fl4yyuhVhi1{EuWw6ikj$RqUr`FO_n70O z$!<S?{CVJQIR9gU@j;FGduo0>73qD>F0A-5a&b*l_SerdSvn{8e){<2u;=oOGxIek zSX|YZf2Z`<PoL%^FWr8o{5)7U#aZfeI@^siCa0Dw$iK68Rh}O?!Q!~a{10q@Yo0kh z(suj#<I_`aknV8BkEM%iKAFFI{+UhXobf632jbHg$y}OYpWk@4W^v7)*^3*spKWFk z5|?^9dAF<meAfv(ZfMM3Q?v7orquQAsuOlx(U^be?XRCT9G&weo(l6_IG--5qGx{U z_<nEu`JxkcT+*2T=kBkcYnqN+b^FQk>1pKh3>*6h=FaTiPaof1J)bVCvd;XJy19q_ zeBKE=E^5qw^Y_=!oTelBy`MB~7R*1N=5Z%!ioZpK{rt5PcAV9a|F8JBW}EXPzQr}4 zoWFejDJN7e^;Fnq&HVFv9)E6X$mh?fv)k|RC~t91(c!P3Z!&l8mwGyx_si#-+?~IB zK56z`IG=8>@-J_S|BsG3yLyKt=a1}HqEqHn@ANdQ+&?`x5}etkEAQ1#wv)dmzjVI8 z_lC^eDgJd^>g;k4EL$6BcX08qpEBHLZ+kv{Joe&wvCWM+8B_e<75=U9W11b@^XX*Y z)$`9oHdr3kn19IPZ_PQD+27oLw)nqzUMzNFPV$s~`#Aggd<n(#0_}b-|MJ;VK1a{! zl=_2a%SE$g_na3j|KA+)`r~gS@n&E5#Wj1DOTJW6=&jLXoqf9Z(@ERK^ZnH~yv&*6 zUpA@EF808()q!@c&%b<r$!2!9_Y<f3>*tr5bE>4CKDJ*!|Ga6!<<lDTYgWwn&)@Je zd5XURe|r%)=^tDMO8VTtetuz|4NCgH*UvAvzi}sPivKs)zcqQxvq6bI?$Y_^ej9ck z*O*^0t<H}5VA_O0yMH-<Yu+)>X7BxU^8Cf~=>|7=3{R<7MB2|^m|%QHL%yH?ThF>c z)42J3?6U>kem;5faGu}A6X_~9dW=q~|DIK6xA@>Q!^JgRH3sV*ea+>$(PMf_y(YN+ zUk~$a_1;e(e?CY$`qNl0M@{1C<mv6=)~=6#9(37Ic}-*f1KGbdYK>=87T4HR?${D+ z^6b3GhM8GY{NKg?ty$K1wq$Y5rW%84<n+#;Uf$(qxA{O?U!dK?>R&(4u+9$e`SkJW z!=HW^XV|ZAI{Vt~=ac)_&p+qgFf)CM{{i`V9Yr3=|Msw&eeV7A(eBcGd+q~i3j^(T z_J92x$zs;s`{|_K<@4#BH*`!-E&s5x&Q8ARth(FJmOqKIN1wBwK9IIE(C%OQug~eM zH`bV(QvbiR&TjRAw5@@5jemYj3^s}TzlL%4R=1xO@h_fl=F7Pz{dDqU{&r0}`x^{q z(!HNf)~&R!H)}k*-R-ByzDwuRjc?=_o>HG8UtSC<FxDn)KC2-QiqWzSHxsA$&$I7Y z@#D{f>J2wDr}%%^`tQ$8Rx^9)r;k6jYl}WVub;4acjwPPoS}6>rOil#CB7Xpp(3rj zKO3ucsc~hAObHAK2w0S$ur6)w?3~i6TUWnvVP?D1n$dJngVU|R;MFl-F)l7H<rj9+ z&5lzRXe{b*b~woS@6K%V_@etuvRCc0PTqUcn)T)HcW+l+54~^se%UJP6oVJr{_ftx zn_K>Wb5ZoH$jC@r`^qZkZOosmd-4PBr?~!)>67AXzx}Ar_i?ZIJqf-U%U}LsZ(cg{ z^X$uitf#44r?dZ`s3vj7tk%JK?)k^LMg3Q7f}a0M$S%yjvp)BXjqi2yb#~SJ+Dd+< zJo_$jzSZja`N03}cJ;H&>O)tZe<bNKef9ZCnV-v-{*w8(tfuy#VQ$;Lg524AKivA; zT6$jaiQLM{C4Ti9OZUJ1v#qAqOk&H~sjrG(?f&$2reW^3uvO>xZGQT?cx`5J?b2U4 z|M%6@<{9MXtqGYw*?!9U^S;Z@o}Kz?^Yi1MzV1A_W#`(UTCsYq`1!YeXIpDseg5J6 z)7QnzGmFEQ{(AFgX-(}rv)p$pL*@tXpSJ$|-eqTNr@q?!e*34dJMV9)To6>d?SI@p zJN{W_{GqGPpFH~MYvqkCl}mzZzs=E(pC7yI?7P)2^MB0!nU%cHKV2Ri2IV#%%^jul zJAZHOovD8AV%eD$-)FXeKVcj6*(3J3?XU80C$hF0%G_+fqiouL<!JPt#qv)k@9@%F zEBy7~k=A{R^G~QxWZ1XBO>e$~itCOQ^Pku}5&o$nlrT3ydAh&CB&C=u{zY=1I%|YD zH~6iXcv@Y+Q&8`fx+VWl7rRcD2=yx`o(gv?;Sm2ic}{zc(tH=DHNsg>K5@DPwRHdT zJm+jT(O-%28mDQ|PZlN3L#}^So<l5r-6FNKhH0Y6!$ozIK2Pv}GTEb{)TuYduF<2b zAkh9~<q7pqo+<~d7LGa#6g>kSS}PB$dmH~O-In_Ke9oD&#J^j9rXKzjc=%yKw3(yx zB)e3Lgn!Sz?ldW``<(FL^ZST-+0&oye%qhFSv+p{{tuNhj`zxH>+1GJ-kIfgH*V(s zm%ol(P0#y(<=35CPtPpB_&o6PvyK10>|A#G>qh_Cc5kkW&20Y*PQJC1dl#$c?8!Sf zyZHO-ji1wAR^QrH`1hWQm1$R-<jnT%CqZfa?)l22mDRT@ljp5|yXW{@dv5kq@9q1e z-&Z>QWj}4Uj{WQWbEp4rl5IRK4bI~0{u%GO-+#OQS)9)P|2CO>pKE@VUvqzl+?D#I z<r4WkF?~wkJ<ckZex0v<xn3-8)~^30yWY-y_Vab-YuoeRuGd%9+THtI^z+vn^W1r> zL*^em`01-<!Y!Nlm3E)omt9LgyFb3_;Fijz_O;i}emB{*zpLEoaqrIjM;hRqdj0R! zsXO=2s?B}%Z}YS7;p}U_@3|HK|K-<zSr0va{*p1v?F(6T{+{`%>(5IsKg(G9i>Ghe z`tydDpH(dVbw*x0e*Si!+1s_RroTJ;>FZ4MT)&W2=Wjj^e!cnG`TqB_%;di<@1H0C zm^tM1jOW^A${=5S6+EB#>pQ1l$Z3hbH*W7H&T@aHTv5I9^D!IW|Lc<O+-LuO&i`)x zwLd>UD!;as{|@q9oy?x#eRlI_n9UDcb^cH1r>{THY>8YEGJogyQ`estUw+o@_0{tC zzbn7i{QUcV`m(d(e_t;Ceg9m!`}B94En0r7g34t1Li=UE?{ln5<#C5OW6$rs|Nka{ zeZ7DA+V68-uKyo%@%Q}~orTAKq)%C2BWFJGf8FV{?j6(joqR4_dT+uB<(NnL?|#Zn zPCXOd=)dT0bmGCK4EL<whi#oz?r_}jkM6y*7SZ<w-(T!_u&8d*j|0xHjlOfofC{d1 zw|SyZCcpk<9Buph^PcT3!JD7Y-T3c0)4AL7mo~G1HF&Oaxcl=h1-bX7=iP0Vua&;{ zvAfH&()@3pcx12fzFC#0??1Lk{93#FM@sdKq@eoWTIa*-W|TA~PXFA;Z}Iv^_52FS zwM!mcI$nFV%g*9r<@by1XQjo>rTt6p{mU)<*Zc9Prn=OE#m6lee^&kbU1Sz>;mKbW zL9Sq5Q=iSTcF(o;Tz~!jgz(SkzbZFZcl&$2Q~%HSWKUtC5C>xMN%o}2W;`vQSE+>l zoG5e9{o`MKQ^jkS%Vw+jZrB*<8vJ$@FJo83ihcowQ}@muKYskU|Ch{H=6|<e`)>U8 z|ED#VCT^6ddn9ak<9tQQzVFYzev9AMHSa?5z4}XxrS~4b;pF)la^%dOde!5v_WaMV zdvyN$uaswJU*CTA_xib=5C3;q?7ZZ1dr!T3sb<o>+TA8Td<pw=g#Iq%e|LUuYWsiX z9pxVnX~n+^uq(QEPW!OxM5~Q`7dJ7#X#Qd68`rt>@#1Gw_s?$r@p-S^Gg~!Iy=S$L zndNryJMvZ?+4fjE<ki~Be#xfOg6Gxy-hZ5>u{Xl~3IC6VcQv0Le?Q)r?~=H;v<58y z^SAu0Nx%Nc?w<5~E~lla%Lj*h&D<{v{Xe<wID7kdrGwBdp7(nEM*p5lKK$QN>)hS@ zd-=&rdmhIs@6X?3EyDW2!R9dU7ss0UY4-1Hny#+d?li~aqpVwWTetV=Gq-=HFcv;8 zXft1*f4cdcx^&I&g-rSO^S=m~f8oi0KACqx_d>~g=hV47q}y5VLF7SvThrL{AMCR2 zUhaE-txo*n1-sgfs~7)E`#H6;{QJ@)zdODQr1$23*1Ok}GH<8;+1U-EM|tv}zgJ2z zI{%@pMtH-bjC;uq4}?sozkXLyvQNBjajNzU!P|ZLYQd9@_srd&-E;HSo|(s-*`_Oh z>U{irBVQ=zYYE-oO>#SL@0sc2d+x)x??+9K<;;C}_Pq0}_lkWdn(r2i#<M9)oO)1n zq+0&}zmy#+LF(5Gqska;lb(37OI5%8t1zE^-^sN)o8rrwijVxU+;IEPUt9j>TT_hp z?5;ZhV|x1T-}%b(nTj%h)*ZN;FI<uGrCqM@(0=#qLZ!3TP1)K99zDson_2nU<@O%` z&(>44W4C|iI;hd%w5Q;Q&Uv2yiCa>4eBjxC@l(Ky!g{Oq1~X^Pd3g5q>pek_d9xdT zhgmlMSAKV1FD~NfQ~%q_&)@Dbik<eBIpTQ6O^II*D*u?A*B0Nk;MHfYom!nt`Ohaa zedKxHQCJf-$D{JX`_McV<2{laPFdG%kY6+ZR@$?-yB1%n-Fo`Nv#++7Kfh_!yI$I! zz_Ca`UB>LR@uB~MKaZ5A@3eWz2r`}H*8|IMCWVi79oCMT+-mW$Zh1q@gSUUr)t|Xt zx}0H$vFM}QrOT6dEKaNVU42k?(fi|R74aupzgx373mEUQY@GA*Z|Cbi0RiF3>t)pM zz4sA|eIfSf$Zy$3V;`1#_ueziyO36~`yEGux|-y@^jf>ZyEAomUC=$!`MU3bq#9HH zb=d>Lw|Mfe%QC(>qH_3lX*!eti*p~oRhxnNzn!+#op&=}F+BWx&CesH?i?MRC&T-M z-<PX(>y>a9KKctW<b64Ve}?g%*m9N)!jpO4Z?>Di;~mr?rS1=Sgd4ZN=6k@I+qV66 zA46Hvq=#>J88@nzq*wg5oek#KDn{>5SC(j+@v!z<&7)n)EJuz!(LUb!-FmXC_^wt9 z%d>UMPpe<rf4l6+edqU|zGqg%Yy69O&e^8G^<B07?5Ca&@@~;>+~+??>+-kCeNQQm z&zmdvuYZSrw9kEe-)YZetNHKM-;wQNs%X%^<G_E-Cb0D0!{)yaY_ew0-2Qrx*Y~S> zhi6~kezf!TIqhR5{ReKpH@#dE&khQ=Jw?IQMtgSG9D4O>3yLj<k9HkS$tr3yU;lpQ zE5GUfd-m(Jc&YiF+0C%S*z`T$iRD~+?pI`wf3NVJ61OIKOAdc+!1JYlWY5j_JD@K7 z<jkJ)QTl)XKNVz3N>Vz)*?#uO>&4Rl{<BvG%-VjR|K2sB*Aj1&OQX;Ix}wZ)^uXA* zKK^CXtvy@+$SS;W*7H`{d8X+5@A*t0dGg=C=5DaQ%=3Qpv#H#%*{16!te&Ltq0CNG z;QWVo-?C-ioi;wae|~V@iUZ0~ZS1ul<|uvSTdeCm?~KE_Gq+3A8T{Uy`ta=Q*UxJ> zb{Pxr*!{1Br~C>}{`0AjWM;kIMq}^tnfAXv%vksPoOb0NeP!c4bHn2{oRpQkcTSt% z%jm_q4-YR^wq9)TJ|c5mwm&fCNAI+^3;Flu-?sXDx4!sa36tGSh5LW^%{2cXxBad9 zl1lfBx3prqvrnFxt^TU^0#nAP4F_toZ$7lY)^}asa_>unAHCDq9l!q;eLl5=ThY(& zv-L-9*1E5I?JOpqp2ShVL;fMpuLu81;uuvHp8fF6&V#|)@Z^VQRprZ`Pvwp+M)7{1 zOrL+ZFkg9zfAo*<-&@UH9ti3>H`}e4F7)2umeG@wJWtN-i7jV)aAX}%eq8)@S-~&M zXCAm+y1c>WFeKld{qXJ+=jyrJ!$toc&N%(y>eXQWKW?Yl7r6KAcn2#xc6~lvx%-{S zgmh3IW!PbiOV93iKdKLQbo<PS(P;QHuQ!1ssm=U3<Ja1&pppP1SH16LJ-4^>z}?^T z<Q}!nd-!(GCdLv&lf%2K{VaXsUOsa9{rh$A{maL)4i=aG(Ehyd($Vnm{1068yp{gA zp6*+4+&EYK`MJkDS;6N%ynE+=Y`@LzyY<pPw=D2J{hj$;-RuL(i|xO32>*|pdGg8= zp7+{w4^_4%h#cW5-=}!~OWmQ$r2-OjR|=>vue959X{*(Gfu1IfBizepKAri{zGoYc z_`HYaQF2^&?=SvQJq6^WANLcVSg%k^uPBy#F+cbpYa648#}qb1%OG*xZ8x5l$z~bc zU)+mY<c@ydAF^qUt=Zn2>V@fF6xJ9p$(3n#U-_lnJ}K+?-%qL4zklA?x9#ww_bYe{ zlg}6?)@NHk=D#gJdAa+a_qq;$WVb5nUF+PjA^B|X+Vj1!-{<Q({gK@odTs9K+t>cS zKeJQte~;DAiDI{|{S7xNUmj5&@~~R<-L5>j4_&|IOuw}!U-3Nt`~BI5yWJi2Z13~# z-h31Gb9d#lU3dNK&a>}kuk0~A-e9{T|NCT~tRlY;W%e^u=J2ooP-cJf$d=01@_iT9 zl++h_XZ-j*+2_UH=gU4^zAR&Eef-}B_S!qOs?D?Jgjf8ZoV2a#Wa|7lN&opDZ=cQ= zfA;a=)4k_+^zUj&e$!uh#j`Fh@w)6$)6j&%PrYk5z2mu2o67v`h&Rjkm0OhSp6ET# zPwG7EENFhLhT)B){TwUXNAox4eV;lfFt^WUk)8nWw*`LFD*x?#cy`Oh@7kPg2CA=) z);^tF`Mb`Q;m*#mSHGv#+zA)rNsM|pPnxqj{@w4X)swXL+zoGOdKaU;C;#N}TGfLB z%S7M3(`I^bZtJ1jwM(1TW{BR~E^?n*5+5VQ%(ktc^U?N=-}HZfcs)gqdF?H^^LOVz z_0Qj)|6+P@Zt9Bs?^F8}lZEcw4VSpUKc6fAyC`G9^Qeb+W6ke|TebCg7L>;)I@s5M z+|6=eZg%VT->15R+WXDo1yA1>E{k87d3^ub+FVPYH@w#Wq+5S`sVzPmzvcATx4%Vs zfBwJ6QvO}EvAT8p?=FTN#cMx&`wQ3n_fBo=vbVpd_Fq`Yw|K`gt~ZMt`u}!FC)<f^ z`)?bj_T`+$=UH=~uee#>{5#~9p#3_|pSvcUKYB(`{Iv_ujpnMEkjS{dUSamH4p3wW zep}%8M~21YkVipz{Lhqo;6R<a;(h8buP-h+|Mm%Z6eKV8J2N}k`qQcp?|vzKub%w& zNj|^U;-fxqR<E(Xf50quUDe*0W&CA(!eh(pq<4#UTG{;Cng0EVHG4v=;WOt%{&$bp z_Jfn+Haj&*`AUn4`mdcm7!Kb4B~Y<?oy)#8{ESu<al)>)U)L4sex1U@AJg~m4qIXJ zne?{Wh38|}oSyUG<j&VAJUlULPFu@=aQM$)dPDq``sq9Vzka)~aH?H%<-6;?`Yk@S zzyIs6xo)Zy^2)mY;fh*+-Ps(UA9nmmkI~<4=dt#8&;66xJ@chcTh~oC{IB=eSi#a! zF8PdN0{^<tr@u^I=eOd0|GYr;oeQGp>Ky*PKg1#Tu1NlsWG+=-LH@5j2^-kI?tS$+ zRZn`)S$_9|!vFh}nfR};9yr)%wbSE&+%msizw@*176w-D-k`YgNyN&@HMME$KVNKF zCUx=L@0Dw;ne$%H14Y_J|6Qf}#e4Uh*!B7Ljg^P4zc-bMRo|_C&ywLQDE7a#z7t;4 zKj*<o%Ru#O?u~{!<nD?Kh+7>CO5iWatz{506xy@4pDDdytKGW|2bitcoNkC;+WNKe zNnXzi_Sc7h-O!l){QYgYSoP@VYxcDLa{b@L|Hje&^Jhy1LFI$hSARRj+jD(wtg_gp zub@}bv-E)6i>j+u(WQ5<v3C_EyU0e%mwP;5lx3EE!~OEsFNY#?w=2zG6Kiv(bk4Vz znzOQP6YJ)^Y<CyFe^hWo{MF%o`<;sXB|5D>f8IGky=nVb#SdYzoi&m2OeLcnykYSD z(yt$^n}g)?rCH#0)Afs4!rT(B4+B~BYyLmKI&GJt_~pU~?WT#L6Xs-;`|h`2UD5aW z-tqJI<>T+!{r!7=|EG=DzyAC2W7fAnw{Pd$?Yp=B_{YB=KmYr3|M#!+|Mq<^{ciQ$ z>f4_urT=d{zf*bV`uo!QjI+u6jPHCFet&%XS-ZcNkJtW9ude?ke(z87-gUL}XTSY< z@_VejGgJS8-=VwL^-I6+-zz`wZ*gLLx$OI;Z+?1SU;oRl`s(#q`Rd>}n|HM_^70;^ zBaSb={rUfj*S~HQ>dSqvThae(N5yQJ`q#BZU(4_P+`M<)-#@p~&imKR`}!Yj^6vV0 z#^>q22ll>le!%?xm%zO;u6LpGOtKZ%+dpgzE?ECd;KhO6b}ifIHdSA3cVNHwRdLT- zkvpsHSgby*<A0dD{6XAT#S4w)wH*1@tlwAhH}dUy?ObtNb4PeBN6CX&`9rt;4(@&B zykOMm(Eu6ZDMbJG57q?_4y+ADnqzv{2Wr0R=T2lh(f>{Gk4Dx1=~>fvN>{s_7Ms5K z$i+k+8Bp`}Rdi9<q_@@8(fj}XuBerq{rLR~@kef_4HN&Hntl5CFJktaO*h^DEIz)s zazkgYg!nn(bsNmj{my?AoGJMK#b>ve9^vH1y@v1J-&lT0Y2Wd`e%v+(#Ca0)KRhcs z_>MpNi2bbZhndChAJ|baub_Ev;k|YI4q01x@1?KJzV5DQKY`!<HPfR-eTE`8q)ThB z*;v2c5i9R;N?rHUjjtd1IBf!sJFx#2zPj}_^W@)4T<vz)#mM_#dh#~?>B-H>VfPO2 zSP=iAaqq(Peg7GjxZQs6_VsGE=Zj;cK0o~>@W8xcw;jv9RoTh=V&s{=u;pKGKM-A- zduIA;=Z1R^-hx{py+4a;IW9==iIr!{zq-{hejPt!RrB`O&JWh^GJAIVtD-~xhq79Z zJ)zf+)$FumdBJ;c9e?BYSGQ*9UvFpFd+;{629pL^wt!}q{hIk)yKZ;W^&j<8@fX)` zdGP7{4a<LhRf>6AWQ4yRd!OqUEPww+%dS1lr?_~IzA3Rcet+=CuUDV`6}xooUmQ1o z=J!^G(#mH3)=9fM#C6%5_AXRU-@EUpZe4%O!@1YyUfU7B@tuloX76wF3zM(yIGlNE zVt4N1_>+^j#QDkold6}g4*emWJo9ErueH@1@!N;{?mYXN^u#Coj-perlL&kLr&T?( z*{zP%&U(Fyd+zq@vP~CXn0;!woc6t=L*6gA&w8SudDK18vMWok%c?E@s=cSOZnxEs zE}M_L7C&XHHvja*<n=ix^;PSvAGjzk)qCW6x-p?$Y}v0lyY4vr3BQsqWj?!R)$G6F zeYbaQvQ%B$JH!2nanpf&C-Pr&DRAaC?=F3+{(0Lvj)uwE%KO)9cP1XsDcHWQ#G(F2 zNJVrw%Yl<y56#w3`TIwgagK@fp0(<edn&(k<=fXMCq?Z)Wc`wJ_HK6fKLxXj?sWF- zxcF(^24(j>?+hf@#y>p!xq4Zt`cu!>zr826taiCl5dXj5@RQ`jgx@<^(w{^zA6Rv{ zDCArHp}Vhbn`gZVuUP&oW#&!WTc-bRd=9_9+<yQ4x${2pU9XgpE$e!l*e(~h=<~-Q zdv`~ft!sN`3s?2ru2OPX|KZ!;W(JF$VHL~&q#3*JHW##?vrOi_^V)3+d0YOl<=nUT z;SzMd^CG<B^PhPy|0OQ`9C}^0V9|si@sAU(bFfuEwmbBiU%~ViSAP6?vjcVoD?e;o zcSpnafW_XQVjn;Lnz<u7e3|Bb8Ld5Qwaw$Q)*rHdy4`+%_(J~wY~`=J4(vU2dzTV} z-#XEI=~t(6&s|+5@3L@7Ui0>^E(&oE-#*W0dhjIb;oL7RXGPxLa{&d>9{#Pjns!|L zB)#G9pR?!hE9q-hZVF&p`I@iK9Tahj>jinX&EFpxuB5J2`RM%QK-;S5hjZUm|Jkd+ zSl#-)_0ei8zlBTkQt#BnnjCxko4v83b^CjHa12>LHJ`0{Yj5X|hbB)e<g>Q27A}5j zp78r$Vo-;~Be(sBW<M`~@gQ?vd;E)<z3&8i+_q0tpJTS$-Q`dCi_YtF@4nQ0-%!~z zZEiyT9r5{U{+DW<v+ppbvbHIj{t~^nZ+}ih?Sr6)wTkiUtyvadT>Igflgyr*cWjj& zwO^j{*e~Ts@3it(S*sVN?I$z-a^=svZ~V0Lx~#7GjolN~m+!p)bGqM_{qK$#XLG5P zN$>eP$2TGF;oDMohB-0XdoJ%vw)NymKf{*)`XtYTE%~k6zp6M2pW%AH`IYCX$=9B* zTmNJKzx1bj1LVG~XSY=D-);0{g~=KD`_nnBi&P7@_ZhD^S=YM#y|Ma2yPJCtSwH=r zxsF@hD*rXtL4jSpH4nesv^7F?WL|8dQ4}~lt}HKgb^dpF_rbf@wVA$i<-hI%C#2}` zyeUHawpDijsQBx1XRUVbt*!4LL-N7I`}^WNd92f#cb6_@{&jdcJo+>5+VrmbVOcpV z=ir(rC!Ie2wdqdaxXblDWPZ*&ImwTQGfx$&8$EJ6z5CF&&pQAAseD>ANu67DLTM{V zRr$5%gLBW`RaV|t`czi5!sYabgm$@K-&uX!UWZrcmvDgnBKl58<(eqtw}Q1Fwyn$P zxw-pLwIVxI=9(yDK@mt?C8H_w;og9nK_&k7y*YQo<m}e(PIm6EfBb*v)0H-x58nQs z8{hFZRP^}ywX>t{eh?6}^O$>JiAF}xgsO|l{9hOFGlzM#p7jn;G!(fpw=ip2`y`H} z7mi&4%iEP&6L^{gx)i+ygw$3{xgvGizVh`mO#=^}+xPFkuQ?Z){x0hI`TY5>6Oa9! zY@EG*>-B%%BeUP%e=l?XOzzfC>!zPct)3M5>*N=!M6I~1S+N;cI$d{#%Ws?C$*XR0 zLI3j+*}F5p`y9UfU+Gz`V7I5y$2^mK*7aNqUTQDr;Qw(+d{@POspLt%&(}VgrFrno zjJU#CmC*+>@2&s-t25`z{tlbW*`7-);}foQx;|SQ8~6T8r|+^NiEq}oR=;_5;O2DW z*4h8W5B?6A7g4G-+x1-ZnVqxVo$d~1uR8m>seQ>?;n-roV%Zqq=WC5m&hu{OlNMVx zbGvVk$$RDEc{01+n^^k`U7y%s_QYrNA!(t-MF&)8a_8SY+%{cRb#=*H_4acI-G1)v zDE_cwo_g!{vq$!PGT8n2cdF(7&l0z<wQgT(sB_pgeUk0;Ho3E2U$ir;9j-?PeY!pA zq_+Rz-E;0&_T;`kbo-LTw1=BIJ}-Il-GFbW>LZQJ-%jGM4?z{((MOn+D)_wo<oiUK zBJU%Cm%g>G+r0b3wv<n&E`QMbe%j{Pw$g{WnLMWpB9Hux{ZuW{en+Tq%9h%N-K7t6 zPd=Ht{9)|7=_vN?MzZhv&03!d`K#}L%glUV_(JD_mDhcHOOyQ7o8|;;s()6?*T(D@ zd2r8-<0j76_if|${b;r7_u@0NADB&0^{>e&nE8F*viNU`ix*F?wXD)RxO}C~p4y@U z&7ZNK8`*ygWW7j@pH{naPR0cFr$6VOz2ac@AXh$Hz0c$SXFGOvKAVG$m7Y=IUy@7Y zrv6Q2wn^UUIB&{dL)PRS=YGd5i2r67>{$M-^rpN+mV)#Lz2C`P=L&RxFK%Py|7OT> zvH#*ez2D6b`X)YczA2wt-{U#?;O~=_&rj|!T)tAd-g19N^Se3e?q7?4e5!FRkUqgy z8T3v*xS;Lzp7X4~Qss?BOVZ<~|7Bdlwu$lmCi`U%c&=}<&x-hvAm1$TSK{sKP4*n` zBs}e={0;nee1?hUdwZcdGx??z8U)M!?kg5A|B_t7Cx7+%p_zw#ZJyWmO%nH2{j9Y9 z1^eBTn?L=N@!(BizL#2W^1x=j8t<dfZ|-b=*!G<McjCd^+glv>oced7;a)@eO?k;Z z#k0*i!f(n;UI2Mdxw-uEGH?I>Wj}Z9So!Y5?+KID{dT<HZ*VF8OWo?~!;`&dS^ry; zJgM)#%FVj8jjyAB9r+n6|N6aY#PYwk7cw8O&|lwI)40{X@!N8@>zt*>EY=vm&wQ#} zzqoxDYo%)D?*n%4ZF2v9S^wPBzy8~sr0dszU;P<-zx<p|SuOj1>;12-|9(HZZvE%^ zpLg$*{=f0YSKYZXw(&PUf8OQ4=RZh!<^7!3)rrgYTiwfw{dE55y7i^yoBz~2Y`XZr z<G0JtJ8xb;ja#~}_<eiz_TFQYZyFp+tbJ7V?8$+@6W?7>-RPNgy*5OD-Q=~x>lfyz z+HL9nx3BiSZ2ii2i?^*kb<ytLPNi?*(!W>z+GF(1f4^}2-)MzNJ=gbYeS3cY&x9lU zrIPvVAGn0Sm~=yBqjlj0qjNi#^&WnuZ??{2d7+U^oO;#oqw0rtoIJkoO8$1y;;)Z3 zR6m`5_~(-&jCHdn>y@0m74-key8^bxQu#l#jka`us{Oj~^21#@?L3>ltXj@C$5dSQ z^Q0#Wrf&PYCiR)Gb%|%rq#Lq&kw4R~Tk7pAxLH?TJMY%cl{ugLHoZ9=e*9nDzqhf{ zzx!v;KPFXvkY666{9NSo+}A#P^56a_u(Oc<eOP?ux7Gi<{@R{<`#kx-%(*h%ILUoi z7J4U5KJxB}qW1mod8_8vzlqQ~ENfl${Milpe;!+7?PPyf7rw|l{?D?oLH@Pl^doAW zcOTA~`hIR%&Has!5AQ6`e8V5V<kokqjr)&RzTb4izI}6ScX*qADKuD4ociAE{pj<R zK7W}o{ocP1`$K-`sek+a=t5QcoB6`*KQ^jCovN_mU2}TgE!XqnkLR7vY3DI|x07d| z$JYG$J)f^Xt|>@-Gym|-bw{-icUplp%(X~)TK)X~$I7hZ>U^ukkN)JSUvevdZr9(v z7CGCK|Ie{F&~FOyS;0B0`@8Eq=F7kNQSk1M;kS1Eptt4n{eNxG&0UTW3XCq-YCq)1 zT+*{D|Mp&@Hr_csXVKxR_XlT8K3@8M(!<{h){bAR?RIR6JLUulij$Yt{=V}3$Ep0s zf3vJxUSE2jT>taN^jrD1qQ9&El%G5H&+^a1<FmkNt=uAguKe!r$0{?9w-<lkcjLa% zvHgEf-?;zyPOZYX^AB^bKbrc`TXvU<ndcinnN6SmK5#FryZQ0quA=-m?~f)vf4*_Q zc>CY>BqYDt<)4eb-+MjvxO~Ar<!|3D%J<9vuAXCU-|<)cjOFVX%N@4&j>|p2_C2Y- z|MMmO<of>4|L$(A=S$x$w%$iBxLvQ)SLpYapXU;tcfZ(qq;B1c!i?pnudUXszhnRB z&QF8shpX-$F0r4feh(a%{-+)5c4dec{qWgy{*~OT`EP!IJG*iJ^#0rNJ%9Js+_~EY zvNZd?e*UrFXCCh<j(+pL(C$YVm@I=v-sFBrYO{M^bHDy|&inn-^}GM>wa|$d{#{)d zu~+Zg`A+6P30-=fxlHNX_LR>5S9|LD<3F2ZjZS<M2l?Tg?#BJccUEUZjXONo>Wk!~ z1yAP``&RG!KCj<Cee+zQ_PhU&{fm>?rr+`TdiUXbufgFp)pX(hm^ru8lk(1Z3Z2`# z8Dvax@E^<e<CSy%2R^$~t@7+yVV=G0@9H_z?d$efYJb~xL;hj$!k={qS3ddQ_GQu& z1Ev0p$DiI7JncViTA1~oi03MK-#&ZT8oc@)J*i;1{Fi3)TFpQA+|Sv`p4+2mnEwVG zWaoeH%zk>SLjKmr#{I>$Z{EMXy;eHuzw)&DB^^hNz7}79cbL8TJ?l-r2VK0iclLd? z$hVjL{@?4-o?izo?kDJQK5uqU&inkpMo-W3ImdIxY;cmRz4zShee%c8i)7``ZGQII z;(vIMUHP>1$9MMHef$3Dr-W_z(^|fgsvnk%rtiOT;`!VBBmd-{U$suI*PlPVUg-Dp zInryCC(RMRvKW-@?cNus-r2YPG5@22|ML(1UM1dsO&OHTmKtxY_mg=5Pq@tocKQFc z+4T9A#ePr$^?loo`;Tqj{eB?#{M**T|CV#!M(r`GS?LVU5}nP{iqEOq$8PDqcYf>j z$A4B;uc#Ml|7M<CZ_c;<_`f)rX>~HcpC4i5Tf-SEG+U*tz4+SCx(^R>_Um7)viSDh zV!e&<@9H_>aXo*FEuyEPmQd-o_p8H?{Csij;i?<=yAQwX1v`^HxWqF@*kbe3wZ9(} z%l+y;H#PFV{i_}K)lWS%F#5T~02Uk8|M|Yj^UoK5^W#ALyQBZ&{(bd3`t!-t``4as ztmi976h)EG-@bBx^!aQb|MPF@pj>lK7F4?ZoQGMuS><n^Us1BGCO`H|#EbVw7k<wH z<<)fEd;XyE(&wV;M&AcMT2bFu&R;$~ewXQ=JvYiuC{*Wne!lp4&)0RJy#MmpKS=o9 zS?N4qkuUP+z1+W+XX2l!c*^XG@BiK|-oA8qQoTN(_5QxU#g7=mueJOuD!lhMV~^gm z6wCEBR^Pr`^jG_RvFQJ7e`-$j_1tqM>q_n$OFy5Qo%CP%nC0ur)Tisd&a~M6uJ`ZW zntOkJ-@GrpSFQ8y{K@p)=6j8vbCkZ&zrOQQ^)qebqlvHUL6QG=`|;l=yAS`n3J%;^ z2P02gKfm;OvEHx#d-Cu0nx9+0tNoXHbBUeI@7;6k#X)hkU+VYsf^FF!PZccU1I6jL zO8fcS-}QXH-sdkf?HxFa+Y9`zF1%4`0?y(Q!r)Sl@A;a~wcqD$oq2BR+{uM@Rdd4c z$$)a8UO#%&JD#?DKI_|^%vyzW`nNTI?)!A|#{J&IXE*MbZeM>CTs1*5$K8iKOt0;} z{=T?3*!bD+_N4m$;`hryp}bS|+xdq!OveKsc#DGV_LKSa>F>@T|Fds?<Scu>6qK5- z9WDG<Rd{2U&bR(Y3TnUl9!~u`eeU<P+O_#PIXUaTPgR+;YvWGC3)d$n-o3JX*Ao6$ z!H0WGFWZHBERXw}w}$`rX}!Ji@w~Iu9R5#@tcs04pH*v6cmLFn(yz~~9$(I^|5I1G zYW?x|;o(+KO=g#@HJop<`%3hs%-PE(J+ofp9~)W~yZ+XdqziFdx2|)FT`l+eTWRjv z>u;Y<xpOUIz0~U6jQpYbd24tpR_?mA`rF^M*IV8vPmAllAAhxKf9?LN;HvtXv-Z5^ z67kQj%=x(b)mhVu@U_>p_uB7!wtuJFp4Hd3u1mTbRb~6Xu5@Ym+o!<~x7P^&-#Tmm zs!86n1pfT0`TaF(?e$w6|6O*=@81>n_;TEv?7dR^n`U3j|EX$nDfIsOdojj;T>Pp+ z<9+RV^Pf#G(%riL`TD)fYFEBry>H`xucU&^%vs5%)45uYU71>;nw;yu*`rmeMe57j zNiS7*|JkB<((8D9$#u3`E#GYUt#5CyE~~B1T5}~?XKCR6^SwtVY`pYK()%v|uZz2~ z>vaR3Pd_L3mv`&odc9!b>oKDHvi5mS)>~cTyKB>O&r|buX@n~VaELIqI#8eDR{T(Z zs{izyrHC$SEO$@nRngk~do>dE8M>lbZ*A<ahCNk|IOzY>x<}-c!WoVzjj)4^r~NND zWk0f+Ean@myfO3OF}I}Ei?8wbW-h(RA~ied*0Kq+LM}(SX17L}UXf`3vAFtf`M0^X zeBTYH|9*Dwvq80b`n$^V`NiL?UazZt_k8c2lTWWqVN7+93}7RUdN7Zfov&oA#=5o2 zT3jLL7C7zZV>z=%OOI>Y7xuT))<sl3-WalexzQZ28+k83E&XzF)A@_)TP9Ci&R=Y` zOlOW+aaekLNyjhEkm-LfwEx~(UM6#8Vqx#HGTxAL%Y}Ni^L3`LKYe}T)8d~sjBZnR zIn_ER2M1&-aBKDQ_CECrc4m&bGnYvsdztQrjbCfoW^0IO^*2>CDvH$dBu$Imc&nf# zW}UuU<@_H#huvG#T$QJ%i?(p7b=n^iUF^GN#<GbI)gGMnS?_Rp*`?#rbIc5rk}f1X zXui!hk-2Db?N`y7TK1<8>gIlSn_GVMj^uR5_c=|)_pbgg6VPOG*ElpQBR=_lUC`V! z4R-Fj*P2?JCNWfAsIf3xv2*7-fx8Pk%gi@vU%xXUf8BF`)4fMOPOQl}#+MwiJV4f; z^?0?>)PlK(o=;u9Z*x`V^-0p*{G#stQl{%H)^6Qe>QeY<Q|i%#@3S7gI+`uE{@=Gp zuF6d7&M&mn*z@nhwBsfA!I$?Pd(p}^Wo}yjyxZ*67sN!j^DZyA@ngd4Km)Gx(w4<0 zQ_Hk^3^N4&Jv_KkA!+TAOM*JF2Ui(wcwH=EVzd6^yvmq^)6QkjHVb?-X|MN!zzNGO z*!31PiP~*g+!u8&^sW~3sRpA3JQ~cW9IAM7;`H^LG|qfXpPKx!Y`0~;ant$$*5_}t zS3Ky+`@T$;Ir*V#qxAl%$K3yjh6vrYKXN$S@L!4W|J_?`yS%P_mQQ@Ne!1>C=FNTe zi#qGYa|{2@4Ej@WV^@r`bA^FM+U2IW7T$M^FOn<XzIc@)^K-%E`GJ;gUKR>h*)JSQ z4Acx<d0JHJ>D!lgewxL7+gYK%WZ!|`Gj6sqUw+QGr68g+{GRIfn!CqN+ljw-W#OvW z9%$L;Wnlo;%X*J#p8v+LajB0}=XZZkdd0A3_X?h6LVP}7K{^|^2ii<NvDLET=JQ8? zO&Xc*g|CqDSCyIZiaF!qhS~~g?j7sXZdWWlt6y`%ec$}Yzk_U+ANg0lqNO=#Z&=Us zmf~qK_H11D9eVdaZ2VMf^jOMS^usSf(I-h>cTTBJTQtR2Y32vrXm&k68~tMny(|Kj zGgSRz*f-?9V}Blz#WAOuQ=v#dcaFq<7uL4dtlJz<^Pg3}7XCoSi`gMM^KnYdjYqqh za^qO-EZ?UGIX|$O%J6At@9%4e$`*XubSdVN-2R}LyYu;&x7)|WeO-`WGr!!j_291} zzL&pQ_%!#Oe;m6jl+BKlN2fAm-q+LjnIG?I{cQE_?<On$hjW^Kn{6vKzwz8#Tz#H5 z!}C@af$QfoA0PRls&%0Ab;-81e;@o&Gi5pFX>vf|R$8a<_spE=_4X$7uLn3knB&J_ z?|fUQ@X^1X+<JS9^-J3h+;n8{Uz9t|qA>oL*}0v5MPGMzNHINUVzQXBE%Fi1`Dl^y zSbGa`={d111rf(A>|H<J*!HdYvsD&{UB1Gc`Ac)B)g;NL+`i9$PA`jNj=AuG$(gfN z{nj++=<96yJa>KZkKZ?1uLxYXyszHyurQ*)aKUO#c)ElpPkK-vI+GHv<-hr!GuK!D z?2+H=>U`eEAN=hZT;=a$p`)d$Rl4)ovHB0*#V?Ef57znf{J!wc_2RnQnaAz6{9c}6 zem(QJUHQMmXaCf{O#G+MxyQEj+n<~5m3wt=m0G{O@%-Ft8{_r&D`#BKYb;N{H&6Vx z!TNBQ-Ezxif8VK$&42cFPkZHFtq<Rxy{X*D|M}PSjO~{}23PxTd0lvG<N3M&&!+v$ zublCJKkL1F%<mI-a@=n}XLsgx>BYR|m-}kp?a4FztaYLLt%07eJ}-B>>rxliitikI zbot`GExa3daozXi>VI#XcmMAwvz}Y_ruccis_vnP_V&sd|D~DoyPK!i&bVIhy8B-L zo1dG{&%It_yndqGv#-kz+<x{TRsPx6X&KiaZAq5DwO9An*Sd`J@^*Xn_dGxU-uyQk zC-3pCSI^8}we!!S+0zndA8`|X61}{5=jBX+J@JLJ9+-<%PGazrH@@cR+{C}feNygu zb~E`8iv6*6>&$A-Os}c<@jp5@*jk<OcT3gm^MPCV-#5lg7MkDTDfX$;tCQ=;k>7eZ z&GzMg=8PAae_hJ%diAr-rQeR6Jg{#=vf4k_m^`k36B_*^vY)@<%eifBrJi)#aPgkG zx1#cPE<9+*w|FJ*z2cpkcON?}o_@C1eo~q8zrQb!@s}nfuvi`V?Q-+oo&47f`!r-@ z(n~gkzG`4USrEOJ&&>4a)kf+2%lSU+3)^=4-sVz<_$hqTq-5V%9V*?h^X7WKJ3s77 z8@@l>RJuPKtXs#}>PB_T>jwuH|9y3!_kA#X#eIX@x5{&54~Q>qp6bRfFZa;uM$wvh z*&QEiUopHdPK(}o{u*OVpjAX}i9yf5NUlFG{C6v@z4Y(Iv841lbywr$b7bFyv**>! zw>t2DU()NU+hEl@PQG~1Bw@8cRe9pkm*H#qw#|P4QDosNv$Qq;mQ{nk7yIiTzGp`+ zFq(R%6#fcb-JI_KWi_+;K7ZMoIGLq8^KXFF{P@pMVYgMQjqlabAML@tm)A$hzL9zq z4z@5ukbQaW`nAkI7L^oqUpy#lSfU`;+~x5%{PCC7VeI;Io<NjobU9!8whN+c^~HmS z4NDIEcMfUk4275`_Y9)UB2;GT$MrYCw%#|kx*_Py{%1dj>x_u27JpY=J$P?2G{Ba3 zE;jlW8qNN}_2mPz#m(1~UO4dBKe(Dzy5YUZeyf7Vzpos8`RGN@om_Bu|2gpD!C&PV z_TSNeAmN?PAv@>mB#3L;FCHu`3FNnLTM#=ldh2V)cP3B+#E)FeuDl2i$r}kJ0XBz9 z4PNj-<z_mutN*<VmisaB;=zpbRst7{SB6E^f6!rl_HSQe-tQjE8})x?Zo5~o=VQH5 zG;e)`cW{LNVfRgWe~Nwn+<bYAe|gCC><o+Uq)oQ}_N+Djw$q|LnEk^R1LZjkF^dj` zEx7-@W}^LtvhVVCZdNSM?cb!$@1FfLcA8<{pLs8G8n?gAH#`5q_33B-j7Jv=wjb<P zJk;FIe@N@CxUbS`&)=?mW)9YqpM8F(|MP6Rx!r5s(=~2B+osRoTzbq-JYDz6=bb#W zwmHw=_<3fnUf#3o?sokG71#e=eI~hYMa{n3Pd>*QezLUj?64?Y<@x)lq;=-(B|rD1 z?zmr5_IUHXO=r?$CU4-qm-@P=R_|QYiS&PKH8-5UmG<2Dcg&qL>-%et<;UEt`j_;X zCqBgPe)6ZE|0I6;^k)f0UaISCI{Idc$$anUa97DGTgd%Sk4}G6TzJjNZoYoO{eM&D zo_|wZXuRL<(@&<x??3Ht*&G(1dj9*YntM{p^H+K*dEe3x+%RMAq-USk=>LZKPEOk* z?&lhCFlH;xKhAmQ_WUhy&&8{JFnhb9vQ1xW{(Iw}f0j%9lzIMLfXOMs_m;klLaW!M z8ojs|=JW6VShHQ{^UtJ0n|FWr!i>@v-0|H$5$?BrArEAK_nbAZ3H({J|K#)ONl%LB z+~3N<k!YH^zo0=x%ky*Pebu_pH+#=loi>_(y!-LS;@vQ#)H&`f-ge{X89Q<F&##r| zt8?y&y`3}fVfU%$?7nvY_1)}_|E!(VAP_eB8#lYh!bv9cxBGvXeLk<|TJ*G^Hjy&@ z%>K8nlIM4C7W-7$bztukLF@T9pFc{gt9|l0q_O;QFgQIJ-@D!Xe)X%DizMoJ9CzD& zoMtlL+~*_Alsjry3_oq(cJ9XWM{8PZ_W3-ByP6F5+P_r?c0cx<o&ICdr=NzC&+BSF zE57tq@n!MHs6TZ+GP72#j*NewQoDc3*Uw_ROwL}J^vX)}#G22Fnfuh|#?Pr!y`16W z{+uUd{k}7H`j5Y}SIob%G)?x1OwbJX3XMBIcHDFN^YZ1f<s7Mp?|6lL*uAu2!l!q4 z=I-BgUi!`ImhyS*d*Y2FHda=4_fD^!`a$noL;11;)|U>R-se>jUVY%U-iI>#yw4!s zZrcZQRX@C|IdcretAD}x{wbs~n)>11TgLY}jpa`lo9%zIy5&0~e?_zWKdCdf<u-mi z)c!i**y;DYN50>VsGo08anW}FqSYO1XBjcD9h&?-@zTUERr=??9-n0St@Mn^AvRh2 z>3R2BL#AkiDPGs<DVy+cS5nnZsXwy6C(LdC;Ci?J-z>FSo}VA?CH=T)$;Y3uJWQ6^ zvvih8md2tb%ra^Fqpk?vkM1}7uKIi3hR>4cC;KgF`hHhQ-k@FNnV=k(x!t^I<$vt( zz}Qe%GOe7ozPdhfy*wx^1O#U*#VZ<he(x&C*Sr4gL2A6}9%q{ebG1L@{n>d||F_md z+q2B~Dw*ET`<=7r!@~;WxP9xSoqsR9Kaowp?Sy#vy_U7J>e<wEHe9!^k#Bf>b>6yt zhrX_J+4$<v>*=3%3GcC(`R(v7^V?R<{8q*HH~%%!W!aH8Q@^y0QAwxutF@BX*WG<0 zb3D^moxeEQNc^t<{Kf8{Cza&uKD%#aELqq0?}1bGU%TmlcKko{%5s-<{i@FQk1c<N zwn^vQs>_;hej}VS|JwPB|M|0AnD0~~I;(T*Crk~MJU;z?_srFT?@Xqye#X*!_KlE) znPj#xOCsxyD+@GpJGXJX&|C5L7xQ;9wM3S{hfb*hk_oBWi}Yr0TRp*hiJsS%nWl$$ zS`RPz<LGhB=XT{g+w-?S&)Ipt;Qj9J^PcO>Er0gTwtD~j-}BD@o>M&Ud-c0{d&@J9 zo|qUO`X@g-{=b`j&JV7vXeqbH-Z!6TK6`%q%;Q~xqM{rA3k0{h?=-V0KW5V=b#Jw& zYWuaqxGO66RJryPbG}b$7dP$P?%VkNb4z)pb-#X=(0eb|du)epm+L=w^?ek({=je6 zL)PaWy81r4yX3%c*F(2AO*<}bBJuykZ~x%7<0_x6p0wvq6ZbQGa%WlegPV6x%{0HW z>(Tp%E(%A=>N6PkpFeBxu&Hj(_C1gDG`4vi6KM<WQH%C#{C#igj>(mFo7(!FFC@sE zt6O8VTfFb^T(uL+XNQaRoO!9>Rp_s<DV^hc`;mI1M+b{))pzq<FwWh%SFQHh=J_p` zj+%d}v%b9NTiNG~t#A1Zy`{~IS8UlhA?-|@p8MKLUW<31jy$~fKQa3METgOW$+KF- zxFkO}e5~rNJhrw@RDONP;aaD<V>^=Kes(mrmhHWNOmq`p%x|&J4ZKByHoJemu-q*C zWHDd0%$vz9{B?@A4TAKRY0O<eqxi>->Adrlw0xweE3NvlJ$sq`?2~$%Ds!$2%{!iF zrjmU2@kyiJ`09mgG>x9QPG5X(51Y(x+rk}R<C9*$*AD($c1FdS9pn%jv-38OuWf32 zZn)~9ouYkmjA6g8;f4$Ag5<b=Mrq8hj@|sGRCe3nr5FC(NtcrQ^x3dl=E}qpt{<&A zhdp=BP?F9$D)XW;{^c(Jwuxr;%X^=nteEnJ=Sp^tgW3N23(vm)Tx+vGKKq;HZJV~< zQ<ZETmA7`xc3#?By0hoz>8CRi;+Xr4L9S|^-}LK#?6P0EK9esvDJIKJxWACMAUpop zXX~p4^C!$VTsPzXYhIlrTW{D@9AM%2lrT4!f5$VGiVxnLX2q{UqHjG83SCwZaO=-Z zv8k%<Thuil?Fjn5SZS45x#{-bZ@w|kUOs#JC!5-ZfyZYYe?9LWd-3b}S+DH_@BP|r z*dT9WU#D5Qb<v`ye)Hr5Cs$~%?Qi-#b@N@#eC3C4BTrQZPOdnv_2HcQo~wMI6#0{D z&voH@$E+)A9Gkz}O%Q+YEPVF0L0y)v{+vZ~{xY7cUzMBrzPeTB`re-ByI-nRT!`Cz z>h}Ig(f-G-n3`1Hw|{<mo$>mI*Xp(3r!R1{FTNjdonj^WV_H@5#RZ2yE`67-rm}L| zmg7rT`8-_kBKi-z>~E1@(>|7eE_`!)`;M>KzoxY=vD}sS@F%lrXZYdmI!b#&L9SZg zmcO&{gV~)kkGp3bS^Y3NPi2p+d12gz2X&2mE^eQYz`LQta@CE?B1JK;z2?1l`k>2w zqSY_{%x}qz3+H3*f134G*ZA~{=rdOguTJ~6BV?+kj7V+w{{@e4xZU4WFDie0Uu}2v z{$=@@YG(~!vCXp&m|S66b2{meb-ExZUtay7>&@~0S?e5eu$%6<RP^gV*t6i^UzW<n z`HBan5)9wguAlJu)wNGG;!XLPN*|+a=YKc8@agBY#n-l<(OsM`>9?axbD8bB8CE9W zd-ol!{}OwD)4I9+$@ljiT^oOS`-S?v8Kt`C<yUy_k=pn4^pf8>Gme8|#k9to`=M<S zFVqcdTejbO$jbXp{e*NaH|I5mZg4bwe^qO9zx6?MLa$C<EpJUs!?g3;_hi<dUS#x3 zET!wb4b#Q#A1Z$Q;Jvp0P}}?MXYQRizA^v)qigG5M(3SwRr|g9uNKU|Z(F`!cy6Je zB?JoW<_~^l6@lPz2s*U;kC$Bhg-zdut?L%$D<0(9v7=D<e7WL}Y0;j0vYvgYV~eu8 z&m?cc_&PeTe_yN1d4I!SV)lj0w(i)s^b@09U+r(P?RCEQC;dGxB)ulw?(AoFupK8S zw5=_L+7Zr?fBUJ;K1c|xZrNUL_8jihumeZ6tt$3$AKZS&^U+m{$&jEGOk1k|V_Nm1 ze8r2OgM0QJ^`Dcen|>qy!{2G|*4D`U{-&Gvch<hAdO|A-r+@s@2u?Kn+$y5e3gWJ) z#PQxQGJp8?rv)@*PjlvPJ<Kh2$A5zPFEODt4c+N^&wuK%+~3r5WcA}@XqX=THSO!g z?Gs-7)O5T5Nd4RvF`2C|qNC)GhZj}<gxHqK${BLmz4D)f@1v_9biWJSTjy;F3C^Ev z57!n!z3O%7cEI_^$hPg?RSEK4&D<lef2i)6-#G33_BpAwr>DJ$_V~h9zp=FPoz#b7 z|JP+7{;m4DbGcso`}4M?udn~Pb2)!fp4ngLnms|iZ^Uv0A9sCUzh!>)FTUCRR>^i; z+tyxg*!gqCZuOp;Cq+Nbx##_z^)o{>^Ts((8~H$p2CEA-CG*a@pFdI~k`uk0(fYZ= zJB=^yo9FW?%kPxg_jzLU{xrKNU#YSf+4Jrp%DY*kkL=(xk>7j%+2UG5dDh$4G7nsf zpKs0e`Qks@#3#zr50~2&y}o|N{k{_K?K(wdExsFmzIdQHrN8FC?a6X=L*J*RhyS;J z3(ZuVzdFEc+QX$bk&Mqj-L*d}@O{_J`dE&<-PeVDkDRZ)cl`bN_vThL|8I(1{`sJ` zY)6|>jQb^#vwnXs=lq?ok^gtuv^#9qry279i20NMJnq!LoZSug#RDf-tPgnbm+#@* zT7GZ@|B$=>Ug(|_sPYYeTpe>==-#r=l{KKmz3;f_akGT-xsdF(@A%faN4B2=Rliq% z$XzdO+5Rv_F8+#2T<`nBSpN#^EDQaN3HK+8|NRWAiR-`Fu6ts$Q9}8_?d_sMAFutr zbNq|}yQ4kd!|Isp6SyV5>)G)+HW$9AvwL;4%&uxn&*zIrS_Jnwb!GNzKe?m$=JD?O z-+k$lfBrPg=6!x`2jAvL3i9XoT~FNgHGAFRKX#q(7G}+}7dqQ1{wZtC;XjNI=f3%% zHtWFZjeMW&4(<MvBX{3LxWe>W;=c(WzV$u@mqx$!f9>jg_SNv2;QszLmh~r+ZrQ}1 zDBR5dxyJnNw&~BlU##grvOJULefol@pLK)J96j`ZFQ2J=%7nM=%VJ*r_PzCascm12 z;)|p&y8mV$|EhcY|3OGu(QoJQxcZCPq-QJEK7y9Ze>y&Fn|lyaNS*HI%zqyZOX-{s z*A`YdHveY*<aXbw$@D<dt>1Bq$3x|wf-_X(k=36~?DQN?KaXA(b-yS~vX=W`m#a|Y zi)ar68`0SNmuh<8#p0hSTO3b&z)B~zL${5aJ}*-HnDt}Y*_Q3Mz_Ii}H<}~=ae-X? zg$H#_;EI4X=8fIK&#@f)p4JJi|ECDaO)+V;r+0$#ZfmT}Q%U~!U-zvt^<KCq@9^Gh zVS$2wS3Pf-{i@)v(7I@u|MK(p*RGE)c|AW(B5`lyv0X>!Pki>mvXCcF`0o#)ETQ!v z5#>3R>mY^WHQj$rAI$#EJ`SoGlJ7ohZrT3X_Z+B-+L-rodQ16~!w~ky<`3t7ih~+_ zAOqSt-amT`u1u2eJ_<Wj{fGA)x6~8!Cr5vV#ccOz66<bOV=7(jpS;HSO#Z?((KQVd zOl6-w7BG=$f4A%C>9;jo%+9%ce)%Kvc+U|~sb|4`u(bQO|MSN;zyE%b_jlI&#revO zt85Q}i`iqpU-S#y+jbosJs^(Iy?fWeg*=EO2+9>EJLW6s|Jt=9Zz7BCfuyGr^WHmE z$p1|gT7K>@r06@dabK#}7hRRAx~_}ce{>qJW&N+#uy1Ll4!q*L>Bn^SQ#mZE)^p^a zzYn&fEx&TkhcN3skaGQc%l3~7{rVXN_Kx>nM0;#t(kt6P`T1^v8gKQ^@c)eW&V!Q0 zv#9%@Rx;IezyGbXb58K47uNHZt=yZ}y5|2^t`x1}+S5OZe^`8b8-3@OY3=FBOAL4Y zI|cS<TmDa8cp2+0{xJ6kH#oT4@?Wa$k<~8-H5HonWY%=Q|KqOr{QtHaRgB;oOx+{f zr@j+XrBq(q9uwP;ueiM5^(e=Y((a|aburr`ZdJ6s2w(kH_0g`Qf8Rg-dHee=*X?y@ zOS}CiKU;t6^m}QL-(HKA3*2iHhXnGjqjOufKW2p`gY7Nb>mlV(#P%ON59dDp07}Gb zqTeX)k*<OiL)UcQDeZBe_Z%Efuf^)!D_+aST{yt5tbcC%qg}2-TOwpk1S?9Jz8f0z zRBF5yo39l3=FZvAY#BeFE#`hxQ<6BRf6|NA*q+Z9FKzRm(?88@UUQ<|ts24ekM})a zocDLu=Zp6zKg+*;65`m;7t=ZO-}8apXDDCW_u-la*y7I@pL6D4z6_~_KVOVHbo;9a zxcr>a|4tFw3_Diyh4s+w3unR2Fhlv;i66>J3c*gzpVL1n;pn3U-43sp-Z|c4B7fI+ zk>xv1J3hzL=JK&Q&lhh$`ctDb?#59IdEMOKM}B5xKDLy2wpcW{QtrF0eCg}!bNc@^ zn*5*W{<Bv3;+zV_^~Y*T<R7jruMqZqaCJuizlk5#)wLWqzsM5T`!hrSVQs4Pb6=Cj z@MODR>W89VgNsH(`P$A8+icG~o}Iz8{#ebI^DW!UwPC7^z~vINe9uqwbMBrSk_s=l zE+`WFZm4+H{rjYhZT2T1!MV1~ZkG}$dmYj{_A?{%_VbV#{r|+5R&kZ?Mecz1h=z+E zm)B`!jk?Kn`c@RzrBnQl+o!}wEs0KMPMWA1)sk^$QR9{?E*YwNhI!v+Uda*m)cAiP z-t9`zgMKpsPu9yJ+rn6-MU{@3W=>R!3JX|qL-hCQuk*Hl?|DAQV0Zqx$Nz4eoSpKG zxA<M{^Xl_+e$O=id{3II^-F5Tu9Kaq9h1w~zVVgL`EFUhK89^Je|?%r_2I~8@yTba zeuuU?t&dFL;X5`_hU;bh#;^6$qyHcCzR#4bJ*zY$@y7?@+TC9D(PiHce5fuIzjf)$ zI=%(p{WZ?*d3X2d*G0O%?{_g&`3vpc>tDDx!~61Y2Zp`th4!9x(!X`-%Qp54)m<;{ zZk&8vJU6pyJIjUN>5IM}nj8a?vlDZ8pSfte=L^^9S@&WYzx-=`arc+AT>J*c`vLEz z)1<HMOtb$`zyB(C{=<g<AGTdxD%Geh*66<f#OoPLpUqY5@83PQ+*3B#WM3AS^2wyK z8LY3m!he~0*So)Y@L3?ofIs}tj%_K&D{ti8`<b=*dEjR0HwkOb9S-VX`#S&a>)%h# zZ~glHiT=kuv3X}6pWRitWBxDcD<WsLN=;_fE_m$dZ?)uq>$U%8?*HD#cr6pj5jo5C z`Rn>;qSHhDKm7E{y`lCjyhpnzb)q2m@zUkJ+5zmx_8nidK_OeE-%6*yEWGlH_=;EY zp)9+krFJb$b}lb}8Fr-R^ugNK7VOt&nF*hXGCriwzO?UVnEPCH*-Q3k!aEMTxc~e8 z_(AqDeZ8}{E!kJ{-ahiDtI(CtOmd^Z_05u&JI)pfoH9*GEfVUqWC+a-bXDkWW`Ez^ z+#J-N&*$}D(Xyf~<=mv)In7txX1VU}EL=OK**}8s-=b3oGy1<K2uwS6@EmVpLBOjI zXB}VKtFU{w?)F`^Om|N66*GxXe2=3v+2?PP`LoxVk1v>Qi`&if<+j;QGiEPc`uDD! z#2K6F*y<GF=Qq@nSDU~7{B0L=(p!alI!jz1JHOg-^bNDDe&r>_zx8K+y)Sxl|CkA< zE-19VfB%;jSD5+sfy`pF9O2K}$3!j5b_;SJH+}mr?o9H+TTgb(db?v&-1_%hYwX@m zIR8vpZN2xTE0TMSG*Vuyw(U<Tc)0fEscqY)KH<^WOZ?gUweS&OU#s-otLb>dgyZ zb<d?|DW6?*_sEWCz2}Q!qU`=3`Sf#<v)ybV=dBr*uV+t>TDQ9C(T?E!=;)Wb`A$5) zl_XO$&8p^e<S+h{&x=*q#cC#ho_Wh-bB4L$y2{6!Wu{L%uODT{FZuG_XFXm0t$(+~ zTvscc_e1A>{+pj=NLu$#cBy^xdd_)hAfJ_<|8&Qent#1di|0DqWxu!2p6qoxT{nH} zbHTSiV!loOZf^H;uEh_X(jU(@f03Vb{=WieL8kI^<E<0ZF6Jf0d_I<Lsi!-Cx6XWZ z%O{(^{o6ck^S;WJPpf(+yWPA0qRxWP&RcfhPo2N*Pd-;pvRJ+E&`+P-C6QZZOI+Xc zF|yD5^z-0p=jF>zr0eeAGUsYh?Cc}AK4$*i`9}SHzRea}B+aao7}&2B+67BzioI1k zW}06!?eV2gKj%FCtkhm}ttf1ENR(Z+<?HI2TRWy)_P=+3#=pBrZeBl``R0Z;^w6@M zcK)=?r^xF6k*6c?@3~TBd(2b$eZI_3N2I{2pL8ViuMN6yt99q^e=y<vt@qb6CwrYP z)lILR&%dQmbNT!=^WWc<WuL#4?|#j+f6kwNDp^j5EiXoMb>)&qZky+??b>VP)}G<Z zwO?xe{%%ciZ1um3Y;M)_uKdzoE`N<{`>p%#*X$0Tw>LgJyT|x-<>!TFHu0>-9wf+| zTsYz1`z`<Om%YAU@iICg$940e_d@qy+z$O!U1a&(?$)I**Q|cYs!j~KwWO-LV`Ct= zZ2HAe_22i)w)$D%LTow9h3d{1w!3;>vr3=gzta8ux@DUEnfY$3#qS+D_@{CE*|&>q z-%q`q|F!PiZdJ9ef<3eDJ_|pzd(lTzlS;o#`SO3M-yRm7UtTe<k@u629e+X3+GsQD zHPKt{XJ49kz4rX%Ckqljuzy_r=gywbk@KD}oL8+-`eWa^DgT_~!vD2D3ICmBcYbBB zNq3p><F4m>_t<=Q=<}|Qt(^O`xZT-qwtLVjG2Qg7G2xvib3YwP|GD$btmjC1XTPV= z*C(>*$#>t$PnEl!?LJG!)ve0-J@vg}&gnh#-M2gspYDD%=H4{1J@3OS8q;UK|6O;f z{>1OP{K*IA@9ZtM-`H8P@Sec;zxNcY#5wkM>bmB4{H}X1v{zRC=||rj%_`?R-+$|0 zy!};hop?@xJ=<sT^XrSx)a~dG+56tTX?o#g;gx^RJ^d10IAeR)!+rOoQ#z!deYRn~ z{q)`Mvl~iJ`?Z&LS7u*b^mciX*n;4#c^~CVBDc%@5uJa0-)pg#@~;~N=7(S6pC*<6 z^p8XIta}2brv-u}wx54ib#dA<bC<hDQ(o9sabNG=X0liD)ikL^<&!ROn_0|XaIfyQ z*oypB-Zup=%=>=oWq5VZXT7#vt!l>``9D@NZaaNdw|86K&xw*IHxzfM#GdXet>-<f ztP|S3ZT_jq2EVJjj@DmDy}RjSd5zrfb<s=yPbfVdn(}D-xd$*u6fFAwp=2GXvU9$o ztK4yqZ6TDs)#bhI<%*hvY|pu`+|IxIsD2iIR{yQfah89r{-3B6cfM=X^Ca^9S)20* z*eccbr<<O?raL$FiterV-kFn6Y`0(Qm%Bgf?xNl~`{u8SUbg?t^NsI!x&Gph+}@+~ z$HHXhXXf0@D(5S@i#zWbf-By(718U|s-o3C{#c~zo8PhPsnnwK_q{RtHy+e9RhgE0 z-}||4>6Ftua_o+R?Vj}H<|OHgd5v$2N>4jQZ~wEcXBX?t^|o@6zcc&i=g*Bi9-8@E zaOytCWB>L&UTOPIvVE$F{Ir~(H&<L+UH8amZ_c*=Gm`7i|9F*o?tSDjyK8H<&wj$} z$K=K7m;1gee$sj^@BiIrqnrQlzVpkUjUickmT291i#DE;Gc0xYK(Tj~@yj*Ay}Dn) z?SggO3%*A!Dt})A4n}#71?4&yZ(H}h1~n7DF;pEFgtjg6I2V-LT-=?k(+_P;<lA1X zei#MTRnB_By75J>P}M=U8uz^wdrhxz5cskC{wvejEB}0t<!_w!O304s*5kaOQ#UWw z&bw~t-K&1$@#DPbu|da0de_f-QhrMLETl>CeL`i$1F3Vo8xGn``F_zpalL!I=Hsf6 zYS|~BD!%m2`+xOWZ&}TqYMK99+rGb?k^TC8uXyD>J@aQD)9&Upu~ss!biTBFeeu)! z$$MJ2Yt0IMm0|MR;dt}B5|97fYyao={kc6uZDDKgqR7O3W-8U(t%8ex)GRf-Z1aot zao6+ju5N}h*SGx7mo4IBQ?1-`=F^KDNt>pBvs|su*WPzmcsVh1M$V<w7b~Bpv5DWC zwQbv%ISlE0b#0g0%+9xr*m1;i$F(gp6Rt^37O}I`C_S^y>Q&84fx?ELT!k}UoY;T% zsmjvC#Tj7_9#l`>`%Hr8vCI;)%QpXx9uu{^ks{(8bN<$6?izRIw%y0qY*<qGp?F$z zzS{{$-S`uU@1*xU-oLN%ZIQ*>wd!8>C%ymue_w8K+)VQM*R<MufwIZRkMY%Be6vQ> zs>Xh~!!Q1ybDCazH0f&;^aalDO}(No5&k41Zl1F8@ujtXj@?g-*UoG^QBd?_{fUiN zuO;u>xm?z~*|V)9^YwQgy*;K!?_{ohsdII8#PWBNMzb<GLYI5V?t2~b(mrKwm96KO z(0oS8|NpCXvXa^LF4ZT*OniUKs&wzu1m~&EuYRXT@%`Gj{*}>G`CtE5Xny#&zwVb= zMT#?{<&OLc8JQ_oHN^qH_)i}EF34y0y?`%BTITo-@t*9ZGJj@0eGt+vbLHIkJ=dEL zC;4yU`E|*nqM!sxk2DAS^gZV+J#r=a>NhNtxb9_nBhAv{ydwM7&$jPnzS!DLKRN5z z!E?JTEHp}gJX`QZep0hAC;RMkg?vG?PuJ`Wdfy9bqRCEcF1LEJplo0E@62SMOUjp{ zGuC%+{cF_u`HDqvv-_*Z4;EZ`IJ@~$y$9bt524zF*>jq&Jku=IDryGlzOBP<|9V36 zt=CC!pKIUx75sZ=Ykpk#6bt5(xXo$T3NxDKC(G}iSFCg8`Hi6V_vbe*{Xb!TvcHnd z?Sii2o?C1dR|01kt~;@DPfefh@uh!deixp8u5bNh^R($v>$3l5o@cLo^tn&=_`~Hh zIp>@E^);UlYR|Xx{;&AcX6A>VFHX-ne?^S7fnA`n5ZVl?yY%U2U3<;7Pu`~^bM4>$ zbg<sX7-ZfN`Dtff7E-g|yRe=4zsAoqZ#Ag|xGjgbWtQvC@1Al#SF+j0q4@1zAKmX; zYOZ~|{7Ob4$MMXh^S{%M9ZX+&*nIxd{}XEFIsMr4RpPnvR#wjiJ$~>O-1#WG{G~PL zBpx@;%6|VkYp30Wc_!ALzqhDOzq|hF=5KYUQe9m(eSYrzuHnC*&d<76T{q{v&+gSd z^4@bP-~IWAJ^w4(x9{#$`E_r)#r>7Klcu~1XFDePbKT#0{}fLjd~f+AVL$UqDPwns z>bR3{PLzE(oBj5$%-bJZuB%7Y-}=1l+Wmx;>RTRbFTekHo1k5J(bt-~x^I8)c)qOP zcv1Y-&dKr$&yTvtJ$dfBW$8=ak9SV4ba_8>KDfsu{b=Xp%N_SvAq98EyC)@!wm)W- zi-#(dbjc4_hty>AtbaN#DxY-$T&>Nsww(MT*Y?O`7_a+<?VsRv;yE9F$6VnKi+CRO zZ`$WOCyUORUp2eR@uTCwtp3kdX)6n*P8X}^t9{<^($bFqAlv5vyXSAGf2;Z;S!KKH z-|EThQ*^doH*Q|qcdn@RqkW}9W~eDYVpl5vgz!+&<ML~C64X{``b>WGC0)Z&yd{Dw zrCc<UBWa?-1)~iPs#~A-^Z5wB>sOjNiD_0B7xx=}qlt}1tdowJ`6}~ioC#>`<NRA3 zE|uuZ>$c&oT-|q@bC#d0x9$IZZ};=JzuuimzW=`b-tOnc=dHh2pMSsoy{==ywy!q3 zZ@>I5w*TfAafu__E}Nb|a9;58GXJLeYm@IY+8;7I{w6kQ8<+8qvdg<>*4_}xyPH|h z`q`<7$Mij;d%VBQrT?ba{x8-1x!sW0ncJFmb1A=;_IjTCyiIkt<C{-k$n!~;+WN3M z@?U3RYv6&f<b;R2<kspu3)kPwfB0^SS%$?m&HZfN0uL&GYd1Zx`TXl+@p(DtLnY5{ zocq?#*%+KWd3ldq%-1!WkI!t&c>f}K`oY(q{q!T)>;u_vtED)ztG4IMPWfkA`ax?_ zMXlUZE05d)+0FM1)~!fiXZ2&w)q}R0uO3+T9W1%3>Rx_s`NS<+tNDe0t-HZxpmF8k z<jI>CHcvXdozLt4EUO4tp>59($FQ$lYpkMv%yb>!zr(K{Y?i&?7;gL7_WsFKz1Kly zVt3!3Sg>wJm`&D>zco@mkE={>&bXhtP4(Mn<|AiJ^IZK^|EDVI9#Cvrd}<G?%<0-f zj{l3-{5M5}&B5oF6(8<)+)yEWT{+9RJ$?Vp9gE}|&mAuPyRtXi-G2VQoUbdkGFLrW zrM>R?#uUBBT@y~n9E*&7ec>c`_hU!fC|hIcDizC`*Au_2U+M1bxoF#;me+z?OWV#I z*>UXZ;{Or0Ru>s<i+a0PuiNpf_^SORxpnJ|i{qZYQQ~@a@u_*bbH7S^zU`!cre9xV zO)4<HR&2Xy+ZmOs(G3YPk6#7uzPi|J^12_g_MDfa1xoHb`So|(>&kV1*8Q`R<E&ef zUw@~1)B0Jn&2t*%zQ5J}cjW!rZTAk97W7%VJ^nsp(&6vl!!GTA_C4(I36{(sjMp8r zyv>|1z2tq|W%c6M-`f1osUm;mK0k_KXTHDd$?bTnnGtVHz1Yj|%;J@uBD1eF;Mesl z2Oqkyzuteibi%DmXQnUtb!^A6s|UN+@a?m|elUhTStWf6pV|G1NXq$zW!FTWEuC;H zX-V_;V8eBVr5}P;Hy<vNJyUAn_Ra0(gLgk~UT{45Fq(a7y|1i{W66eJb?ch1h$+kN zncG#^ySkZqEnnR1MSQd3Us{=7|9m1<@AUfB`!~&*&|Ldld7be6-b)Anen(1T8)o@T zSoM1cUr_WT&q+@064!TFSzLMbfOjV!+rHA1+xLrHGI(R;#m--AC~c)-S@U|qm-Q=~ zl{@+PVvdzgxOJ#|_Cwj8>=;>@)Y5{ob<I2Zj-B|fA!~DK3X+%l1!QGDsG>OXdbDiL znNox62PJMwFKu3X8Y#*C2wc?sSFBie$u^0X58j4=4A0qMRiS_N;L?+Pk86&<i#cCh z^8ByK_227a9c%B0`z@QTUG(Vr!*ap!+s_}|+IOt9YQo2gi8uScYTWbZPWDKYdAM}K zzvEH=mtXptzehy6XKjL6#lIXA$rqihG4dD1j@~}aBKFSSPczOn;<NtKy=@<^amQ_O z{TR3AfOXr4b#u=@?%t+x@4MEAYXbMCxt-%S+i~wi_v;G=#k~ptLL%dK6fBXhn7RGG zFyr;o^~%q$u6tG$o*(g`%5=%>_=WdGd)B{m%)i~W%eYI$<8mydt^PmnVoCJ&HA_mn zUs|6`Q@OEn=REgA0n_5c>r*Wi*?)g?k5S(z{q<+=<?TOgW+vNY+k98Btf{Y?{Lj>W z|J6yHM#*y5IkUWNJcC{cJnnkE>~%5!<~4ll7F*5u@Z9|R&v#XFJI|!L-n$wf>38Db zzQ2OkJKwv#d~j_mQnFd2EW9L<50soCrbvaeKaZ6CV|n#pOJ(fy-LEU37)>`7LUGU1 zW^1_<ZG2vQ_pLPkX1{u{HKpmw`A1eBxt;2sT(U_qk6%4dTHW0L)Jo#VHP!q7f;<jy zIISU@Q)hsbY_1E+uG!i7T48IexcOmgP*U4*<<*0CBBd906lAS?KJj!6S|BWK-ff<S zC=LsBW-460yc0RC?l|P*_G7mOd$BA}&Fe||^_oi(Z=_D)dv|{hQUZM4$rtAP(8?qC z;nA}n_&~+rx{X#pk`T#tiz$*TA9wKa%{hUb0}JL}J$Stso&zVwry|_6Vcv@e4TUl6 zD|OwhDy&5xONF!7r<Hz?`TS7goqh{rN%X8Y2KQdxnESf2@7<pH)9k-Luzm8-xbDXt z=huGgE;sW`I{#d5$^VVl_8%+e7w)jzcD<<9C0b<tv0{FC<vqMj;<<r)q|V#=sO)*2 zT~TvU?C9!`cMhu@s;=RA&MLh|{6zQbfRoSVgyQ`FtZs|%U-vrB{hahq>viRk74H&l zPHq-mTnQO9_`c!hHC^#byHp>ZX4$V_kh$*p&L5X7)YnJ<aldObtz=o^-Axa_L%OK- zXLqF<UF`ogF~<Ia*wNL2+f4-SZM`}N?2^*cB8P4pHGN*B+ZDbzZ)f9&Fz&bw2dkR) z7)agtv`cm0vYqRyWi8jg)m&E|xgy%m?^Diw13P_C2le$d_nf;$J3-y#S4(F95LbM! z_>tqszxvpMwf;2<g0jE%#b5VfT(7%6d~e(Dp3SP)o*MlA?wa=Q=`Y(GH}p+zOH8g= z(7d2g^F_jsJ$t{{pZhg`#=82)OK&9Pux>thU;HPF<cnL{KX)~5)3`U2YtLnl{L=~N zKpA%@*PhFq`CA{jMvJ_6V!h`tbWgMy9FVt{9I$TwAh!qXnewGf?|lwg2Ygth+x7i7 z*B*1Bdq?FTeFSN8W4$+<<Naj$Cwmf@Yu)2E95TC;q4?sz+3D=E=DhCbcX{nUPjgpT zEjWYMe8Ob2gKwPW<UPvowU+uE{IQDTf1bdfp9-JbG6TYWR6lQc##|%U#QSXFADdl= z>*V%o{kMtYN%@yQy~E*kam~Cw^Tn^yw_P+lpSWtm%Sl&e9IoV&6+5G5`E1trhU6wA z_o+{3JnVEn#<(xP)#8lr_4<m=-R!niHCi>IEX;b(e|4Ch<gD-Kun@0&#B!wRro(xA z-wJ8=g19Z7aX(_X_h{RElnUP#8g|d8;<j2LNc2o|>AZ@}8hhu8-!aE34~Av!&Dr+) zsn}`mX7#%X2Iv0tRLz&Y(iva!^<(KH?_jg4|NB#u_fC<CdcE|?hrMxL|5r@5yM8({ zrAhw%`LBYxlY)!)&hf3tX3@W;vi@0BCHKR(+V9-mXFoY=b0I?C-n)W7{?KQ}oTb-J z-!0o)vxxb%s`k9oVH@7ezi{>V^uO8@WFG#QzG-8e7vI{iK}A2}^q1CO@tptq>GKY| zce@&1E8kLC{;bNf{lhoGJsFet%zFJa=8(0^9s7Q>liigIHpboas@VSJ;ZKHbL9d_I z?T&l5@b%M0x23%`r@#L#<z=|!XI!{^{H%?qqwag(!eU9Ti+uRp(@;<BnfpQR-Py{E zYL%wfPgk~-ckR%Z%bg_t*&%uFADf4{uZ}+E2HB#xJI>Dg`e}}j#_eS<uU$QUeX0ID zi95@LZ${{=wqL8#w5(Y_{gVBwCFj3>;#<_eS!;*gBHyB{b<@j*?&;pOga(rM!@2fT zJ}>h9lq8q2W_rBB9^Sha`Zv7RPIrG(b<^qk=|4Yn7Vi6bdYw??Lvz2mT*)hUud`U> z{Qv3eR~(<q>NoFAe9r8nX|%RW{pf%5H$v~6GkM}!58g75Z_T{br*}ck^7stqhRxF} zPssQA&lawHU^nGw%l4-x&s}FfX)R^1xWD+o?gmg6-r{*L>a?|rYFzZ}_LL352GU2$ z6MwARng3j*U;ma${@kass}Jn%_#ju)407wCU3@<cj8)?<n{JuFQ^u9n{NtYNK4}(a zR{dKl`Zn=gd&;Yxtu@&5UEtpPy)|6Rs#ox5Ox{yaulzwwq++_jy_xPH-|N46x83%$ zlbw$0p1*#d{;*0PiN2?PH|g~<-)Yxde&uXB*v%q!&}+f=FS}k$jk{iXUb3@c&Fo*_ zj97&-E$VBp`F@|oY4qCEF8`vMrRnQsYKL||4L#Rwc5-#3xhO~e@BJVv^4Ff^j3_sG zwJfz|yW@vNzMrl|#`W%cdAg<iueQxTP%0|D9M19nqZwFZsQJNN`{sPO#sSJ2XLr3^ z-BSLwdrzLz>?f{wudbNA&#!`C{xK+lm0mWCHh=50G0!O2D!-D&NRTnoym!CD{=8lD z&)jbO|LC(=?xf(&c~PDf;_^?yiM8~yImi3S`k+jAFKY7IsM5>kocZ<#yUk8Ur&pT3 zS{B;!eOs7Z{1(r+v%4})AKtxp2$cG^zEb<KFO&CS?qBQm&KJ}wO<ym2FLdvty9Fri zq}|=p_rdOq|2+N#?NIZ*d9Rl(&%FD^?62)yPS<<8Dp*qPhE!~?yZeP<=Jw<NPd(SY zrLsKj?ic4n(aIH|g#CJ%yx_f1_llZ}YL(e%Z7!^ueNFh@;dXGS&3$@x#cVTyds-j| zu8uUf^{AK~_u!-J>?c>(%&zmP@ZWdfwE)De$`5m^=Yf($)-~VRocWJG+sGdXTa{;( z`+C{oEqPuQZ{N%;sIM%qWQkE$c)d*a{pIzu>l~lG{pMVA50n|M`SJ_jo7W_sJ1Kl~ z-Y?aMa|<UN7tfuv{hG>*u)AAYKiGXq2Sp7ekk+<*KQbTc_b(g|*NTIJHmX$k&%Aem zhjxGKhsCJbq3TZx>t{m(OtxkFFNS{o8(vp^MQxiH!urB9K%unnWQ$^ctPRtqye#Q8 z@#eN}&vGx@!P3&)mh$_?bD)mmeJHB{3Nc6^$*J$@_5b_>o|HHb?atN*<t9+bcvt*} zrkzajhjX{KgS-;HIWJ3X&tLuzyEq}9WPX@i-*sF(XX&eD_qOG&ve=)|o;taNS^sbv zAMZc*O(vfOTaY@>yak{c;OXmGbfyFxU~p{=^JUR`XdGfU>Bba?Olhx$jP?v`eQtFf z)w&#z-EQ7DH)8FDK3T?zO`_agVri=yE*k|bPtN$Ouq~@VhA~>OD<bFuTes=G$#*u- zDc;m?_u;MW?`d~u`o?|x|LNWPdw<{mynnY=|Kpw?dUqe)-s-(B{itx&COdy~d(l~? zn{M98n&$V+a7|>K)#dBnGv!r|CvE1nNYg0p*(77yXYs_MXX{&izU{U3;^p6VmHux1 zKl!<A)jyLP3$7+?(Ouzr&S>$Wf4`cP{TzH|Zrwb6`gMm2ch0ygD(_7`?>-RyzT>({ z>hwK(YFoDdF_DkIqN4vRVXktV)joZJdw=bp?^)1jpZ4~}y=(jHXC2@0%}_BhV6WZu z?XMNesusM}l->8F^oG!S-op3sd%j)!S#6xpwd2>FMN_9wa@N*YZGXLI%G>0*B{Qe% zPx`eZ*L;2d3QxbYd;X|C%&ndFd68PB>E}=3E#((E&vnmw;wqo<<mr0O_igDG`WcRu zmKUBq6__>s`6-_2Dd+3D?(-MEkN@*6;+I_QRwJoOP0KBxf{J#W^S)_!&2xI?Pw61} z@HY>>3Ywl=Idl4N&iDW37sXvsS)UeXCUozLAl&$T&i9w*7sOp?`cyRI?CETy6Q{pi z)eM{@c%oNO!o2=lj>6g<>*khU_nEg^_{=lLwA#}-ZI4;`G>am({=fA9|J8cW9ezJ1 z{h$2&?VWS|(N|QSha6^@bGLfu!y|f!OAk%w%-{FG)%TOrJBIfOtoQB<-kX(MQxiCO z&(mq!RaEY+d-nD0qsa%Gr$i>!)W6UFy63DvXyJH%>(5w;`(CW~>;>*klP`|DqN4xA z>ccti&g*+jbnGN;JZ6d>+kW!?tIE(OanqC0sdeHN(=DF8O{(A*xR-o>PV1&CSpm1i zuBhn8_%q*|!t{PV=ld_QbHq(gc9(uPJig~adpJk_%dmIx7ZUb7E&Z8fov-Ep%=fLE z&%R?-EKl~VtnB-@=VfToopm?PfPA$4*`Al{Tgv}W2AQzhGT+LnqMak|ic0=YOD=_S zlV`s5%6q)`pFa+AN@AtyGhcVk_w#&Virp%zxk15xZ4YPBU(-XoKU9PLAN5)7fvsP~ zc3aSLvOTjtFWWDC@7nvKxC>3sd>6mj^D@jT-|KT7TXBY(w-J-2EmP6GkUb9d_ez>% zwuknAek^8sa;0VdFZPGAd*^`@&2!)N!uJ;6f4FCb=e?rGMQbZBdmf6`stBCCM|4_v z^1UlQ6|b*<{OIcYDeK(qdkTAe??2nK!ZU7drEpBXm1_m}w$HE4S9r#qt-QRSBmZuc z-989scFXoe-sh~k8TU*Mo|`R}ZjgU!>i60bPQ#nxS3k{>O}r(QaqVf@p9Jv<cPHph z;(LF5y3AtT<IReNH|&1KHnVGPKJ?SId;itXtM(tQWsjQhUM=$e+NJx9*Nbm?!kXLj zV4Fd0`Ga#AKm3X^e!b)Q7<<`#=X(e4Pq90{-t9N~Ft;+xPbcwL-nB_k759&nbIU*7 z$E<sz{Cf2Lw<iyjf0N65vR8cB`)_w;dGCAj`QG2_T2o%4`dv1|ao_HPzuu|7+AXtR z@0gl%q@CBP_Ye0;=f%}ei0r@du{qYE%z0Z>daT#X@ToGYY0?FAxH=DiJNaG;l(?Ri zr~h3$Z~K?Tch(o0YQl4Cr(fS4YpySPY{$XVR?#>7P8F@*{h)bf%EeD}pIrEIx4z?j zl-wh*yNcJmXH(m!oagm_!;^bZXXifJE&BCN`2yCTdHcTJJ#nP`<yp5Wx~CUEv_84; z<?jDN_n+FI0EdoP#Qmv(_f<bzKQj4O@Z#^q4<OTHZ_mE?)?n=~BZ#N&{>n4^Dl7kL z&Tq{#Kkv?BUj#PAy13|}eyb+fx#jI&?>-W!EuZN>)yBikp`7K(ZyT<lJ$(=Ux=o+2 z{mP~9c5D2j<GNXsf<M>F&E<T*?YE_V)}-*ywQ{i>`L98%xh8GDb0g$+tz0a)pW^!| zEF!M=du5689_e?FA9v4sa<yi@yWB(DopV4bZ|lA1jMuq8bLP(k<@2n4=NDT)j14^w z$_?G6;g5@5Z8_dAthUt8aQwV%Y1zFH@ke`3mIh5qJW+M|viu{<)upy!MH%O=-*;u( zQzi-aV{}^W_pL|DB`ZtbUxx<L>5lh)_YQ*t>D}gi(eldoQ&Sc^@tppI<HYA9o!XVM z2Y+^*{(NNKlO4KyXUlH~m8hSO#I<byw;7xbE9X^MKFp0eR0%40p1rtW<^RUFqMHTm zZJUh^AFkE5^+P%Q4|8{PgZyQBUU<F2o>ou+v$}HLjp-k*-8%{Ml+8x@hj%O4!5L%9 zrq9cAPwqMS(?;pc_h7ctwj0VG=YE+LYa14E8}-gK{_fWB`%ac!e$)B#FQ%_wKikpp zm~~$N{$#nd?2qNGIr}edVR$>AcYE!A`3u{pL_V~-x4TyB{OaE(>*ZH0ef&1hZj0cf z3f50zLigHkTk2=MtoW_{fe-AittETHH9zpF?Abd1(PM6@H~CMF{x@c*-!AmW`qZaG zecTU!G*0)O)-BPv_jTpo=AR00*1szF`_x)9_13F5UpIJH-+lRh^|4^?o#!2x=bzj^ zJ2d~fF0bObXrcSF=1x6&^y_oa-lcQ(j!p6tzdm2u>)C3*^8D!J7Y{d<?Tgwo@%sCT z&mzNTlxFSt?7H9S^ta_Vzooa`uDcy^K-?;R@1^CR_O$)9F%R%QZtdS#Ztzf7WY3DF zk7L&y_$_xR+Pc3V<PZDx2Y$yL+P%5$^P*{e<*iKb1rE*DuL$%${(A${`+!5y#nSTe zS1x^A7y3Zft-}2LQ;-R@L5<(F4&63t|J=m(IpN9C&ua^}{j<xh+~{`bdy1!<Lo$nz zWxm$UQ_l^Jc{I)>$MJpN@wtD)l+4xL^>SRx7pFBxKCrr>@IUg|=k?n^JQmop;Pb`M zHtDJojU%4}o30+4^>Vt;H}_@hOIO;y*Sr0&u<YO7*P8Ec&+ff<e$8pwSbN4fQzBK5 zYi#DV*!QTzd7J&oZT~Yo-bVBP4r>DybswutEe*ciInp1#YUXnHx`TyBYvw0)B<|1K z^!V0Yo3?%VhT1v--4Ax}vD<d++Tv*fuLZZv){%8r*y(qv(C5&-q<=ncx0}9yU1opw z^_JJat2X`ha$a5<|Nie1ySy3aUMpw4tT27|y0+oNyfu$NfpK-m`f!(u(=4FCG=2A4 zRQO)#<sUzq*k(5Enc;l0);2mp=~wRA^A&r$57qAdE;wH_v}k@Ko89Ek(~iI0v$Xu+ z&YivXFHc{(5ual>`CUrqlRx^C-`36Fzcpi({TB6v$8Ud5|E}}>r&06W`)hVPTfN_~ z_)u9bml+q|k3B2}dtP)oZ?V6*?Y>CR?`z%rR3AE?T2t`vtD})s>eD|K%V$+qeG#`_ zH>3K)zmgm4U!L2)=)R)2#;?%a-=%+;&TDVK@he6osrKAVLtlqvV<zeOk9RV?x7Ig# zow8Z-nP$NIKaZyGjhlSxW}Lt3@ubs+&NG?U=^v`NV)1CgV}|GQ7xtb0-)%SN&D>kr zmFpI&Sw8&ic!0D1o}tVAA7M)@ZJIv3n{xt`(J$-d?^TYwJSX<kCpV#c?tGxekNz)* z$Nv|_J6B|TS?XtO*#GqBnX=i_Qzf4)-5*@oG3otD4wn)ZsqZtJ9L3h|nIaQasc9MW zd})sS>m{f6{1I5$zcjg`*2T9d>)BI{L(%rLz~#i}O)Vet@*jb!(=Ux~aeZogTvg|Y zZ&|SCPU`1PYR!98^!>F0KN(0ia`ZVQn|!(?jB2cmGgrhvjyU;R-#7Ya_sDoxWVaQ^ z#S8D5RcYDx!OW}(#D2ltyGO>qBD%{G)C$~r{n^t?JfA)#y{~rNFiXwDP`+`}vWzE7 zpIkWQee$7|e(LWC_1I@mS%TzeuX_e<{w;0U?(qTKxGYk7m|NEfD(=K<7fhUfUFcq0 zBE-4rpEubx@9C-R^xY-CSTLf*0JBM%7$k4b4>NNzNB-%l;PQ3m^vRt0uPV>MTC5_6 zc2@~JXVulvm(GpLJEfrixbDBvyT9FmGW(Ll<t&AI(ZhC**Q?~%`Z)Q($#Z5^M!Ho< z{{l4w*Qdoz6Ta8G+fqMk64<e#E!(&0gU#i?v8P546t@5SzG{ij7x@0~=_9+H5zqFj zFPb<Vt(`5e$X;>v=^nd9YL=#-KUp2xy-WN#s3G($RrTTB-OZp#yvQz9S!w%F_wC6_ zNA6Rn51Z-pr%jk%xW8WV`@h(nZ%-b*H=W<-1{w?6Geu_I=b&x<rI%9U{FJ|LG?;(g z{ff%+w74+Ad$(*rA#nA~>6b0vKbV2o;PyMuq1pF)KR1a@nSMMcZr)i1{oT)!9`0dy zw&VMIrZ%PL^R2$*n0yK<%6Pi;Nx|Idn`+lg*8BX4El9q9+q|Zt8(nVh-~{IbZO+ZA ztW<vZweG-YcGHvHb{9^Zp3RYe`Su<D1*}g~H=jMtSbMAVga5AI70*^~jC*u%f5dy6 zi#sFdR&Ugen!g_{Memt;<@nrmXo^lXeRx(Jl!(vnnd4f~Zg=pr5Y&Qbj`z>Zcgj0( zpE_-9rhhzr!t}~DOh@0h@A$4?SFKaqA7qOe=9@ih*VH#dgXW%B#q3$2NDMdDe=czE zQ>l%9;N(4^L_Np5;<ewWkD!!dD=bv-G^>oQ^5w7p_m{43d#F+PKHg%n*xB&AaRL|# zW>4>x<Fg(^<8)KohrGI8P&}G`E|Pl~`$gisH>k_zpsfE~_};4Ini@y$Q{F%7nI=s4 zHa>AWBkWj<mSkg}a={KPNjxw}zB}$IG~384?<rjm+B>yAEv|0P2fvt;@KEs=xOZs( z2e8w*bK>fhoA>yX$8S#Fdg`oh;rsZ!cT>9;>q%gy^caU%$*1Q-!~Ch!p=ec58+}&g z&W;b~RzI)og!cK=Ip1HjFS2hCn=+j_CoWI4@~3^c-GiPs9{5D|?D`3zsj|oNAG`}n z-0XFB>A%dGX)*r-GcH||%)GNHYSFA|zmhl3Z1IZdI^uiyD9diwZ5?6KQQSd0XO$i7 z+9qFM=xpvR?o_N?x^dIBOOa_=T*}dDrxt!bRC(?F_m48R(x-phexJM7cy;yr;vMgw z|1F$<UgwRbNZg+ppB_zbs#5*(lXYvPzVXawoBhJW&-Bj|UA(^XGIwk8#mAx-zrV|F zl7Gc9b&+{`-_ncOeUELA$rLB`nfc4?;mhwl9$%GpT>kbW&DL47`aADRR(zTNPC};J zpwE7S;q%tOSKnTH`Oo3oAyVtBdF5JN%m=Yfammm7tbc9p+kRR&-z4PEinV(~KCIJ| z4Se0*Q(4Hjt>V$t*SkYLgz>%j{J_Y(@!H(WedpiDU;O@V^}=ld9Rb|G&sj{|UGQdt z?EX)!|9xs7-d5PpU0dgv7j<fh)wy%+`ZEuonttZt?ddjlRhO3QPw%XIQyKAH+34Ap zFR8m9$X0rMR!WZZj@J|4Gke{&eJ;oLSg?!j`_uB^?XC6KucvzMn<M+XNTpfd-}~jV zfH=O|x`l6or&WHLH=94+sC}yb%){IDD{H<i@sF<y`jY&+d6)b|!{tl$!#VDqVxA=~ z`8n#>r{JdY>!P=&pO_*3{J^2<(>d>Lv#qL)o%ZDP&W-xn=W2e=*U#Q05-J)m{OixE zitJ;(b`_3xH78}l_NDOM-}mI>#mRQHJA=L?U#^9ktuMYO_Ip-b%9-q!r}++67qos; zHF|c`a>IwG%USau=k496=l$vF&yD)`ryQJqajB!d)BN}gvyV^Sts%cpM*zjiaf-h- z=1qThd}GhI)0d`)bKTq4^-T73$Ms9o=L_y}*T1??=5z<x(W_bBzu*HKoLc<m^!D@* zsj}rk3Fn>X$0ywWI_dJv-3s#iQuwsvjoS0$KmB;&Ie*_CuP=`S=D%}KIg|PFwBNzo z9(zvAxPEE+YS#B>ytn92G}J%W*s8x?Y!CD8uayOnlk}e--xo9I;B@`SfXNS^a6QRj zou+dJJ?iYWe{J033yHd?rcLD~tDm_Z+cRxnjB*A4_RM&t<hVJ^-0|x~_t>UF+?xI7 z^wvw$vnO}!zx|#zdHuS5;m-5pzrH>3-~Y~D4Gb5DeMx@)78=I(>J{vHmmzLeJs7<| z;J1+E=SMOTKR$hK+P*h@{rc0BYIbUTdn)$w^psgb`SXihOZUtC`m?IK{FwXw{TAqE z|7rTsus!GE-;N$j-P)agAHLmLR5{Ub{Zjq?8Wqp=F2GXV9={J}xz}F5-lP(**I8Rx z&KBQRSD*Cav-JGJRli>yKK<#T_p=S3REvLnQ|<4c_vPhj{mwd_dux6RN)|``+T{IV z+x;aFW3O}HyVi{eX7N3x(qDh=(m6T(baFgj>W9=9-__gf_P;WF@Z*Ja*t5ga&m=ze ze)i$5x17A~%gfWHUF`ertbmyMiS6KR7f3jmbKUE!gs0<pu|3YxU%+u^ofL1UUOV&C z`{|~SSFc&M+v>~D(7SDOSPEXRs`)X=a!t)inSHe<A1_v~{q;$Ek-YZxmvt`3=1kl7 zXVrtX%8+!Nckp)YJa{_3&XQj_*Nz{Qj$hrFZk#sfM6B!5zxTXLGB5OBcrO0s*~KSb z*%*P*yGVZbx~q^duAKZpHfl8_F!IIr)IQIEC6Bt;4`u5vg2Q-PQv5#4W_{=V_J&`6 zP7G?QyR}^pBj(y(9N*@5xBtY9%a^9xHf^t&3Q2Q!R4Uk|x55&#IrqJ3p^!}db)&xh zgoD!^#os)6(iGMBkoV^Y)#8YslPqg~Pde`I|Le<B-9_@!)+P2z$$sAPd4hZ9PS1vf zK|a^LwVUCQwqLcPTN@H-cQ@+mpMG$9%l_rOOEaA3$7}qak}CIA`ZIcJ$nUO`iCqVc zx3Gh^ogneHx2gQSG~C>L;XTTyA@OE@bl)DwUq(;A*B-f@zH-f~-D<Fi`}_<e;>tcU z%Kuma&Cu^T?kRl)7n}DKEBMbM5^(T`FtOL4A8b;I|8{KO9ktq-mx34GpD*$2PtZ2g z6Vt7$Fx>pUtM1Lu4Nzk@J&@fQ0V$62ME6|wyAI13cho9&i@p3>8aYXS`>}m86ZZN1 z{Au*%x3Kg4_z6iqGehz%(c^88_m||~?a)xJ^ZyWLw*rzH_Ul)qU(bT2hJOwpw&`90 zr-pAw_tm)lGFsZ46%@z+^y!7?;-~CVXC8m>4LvA|cE32j>^m$CFMRN}YCR-Pyb<2> zxj!>5<xF>R!o$<@ocE5g&H~jScSL^|y~_4~vab75-FwwtCNJDyeCDqDTv25G`Qd4% zLX^bO?`nT-ulM)I5pKUzU!I=Nac^6B*1e5A6}q)QgAeZhvjS8;gNtNqmiI5LO+e+) zP5IwNVX&eid1=d^ns@Io+`Rn7@rB!=ZeGK2&+QSo<h-L=aov9Pb#Z9fmUqy)pz#?f zl)oR_w<qA2(bN0-&hM_D+}XO7$@|+A^m4*p_-{nrYG~Y5v%G&%39a#-H<h1^H`RyM zN_huw7q0`G%AOow=km*Fsnz9w^UR)pT2*ZcOK{)+p}Y7~+{OO6#n1@6r(VH+?jj^P z|83g-WeX_4!S!_OgIxRQ&!D1>JvlyZ^1<nk-uf>(`RTX2^ZfX_@VZAQfAM3u`+GNk z#pxVqp58CA$F>*Z?xOw&Z)<}<=?_$o*eO)ZK6hyks1Pc6bNZ}gjpVPtoeR(BKUzEG ze!0yb7xX&%=Yki<AL&3%Wp3KO*AZlrcl<liJ%9T_Ssa`yYMZvd>jkF@8<F3eCLNp( z$sV7ww|A;%S7@Op<3Ceh9G`goHKe?}qhB$*1Jb5YJZSx=BQ74A)Y@6!2Lyrxp*=a? zZrZ`=ro!>rJFAXgcs_mgQM;oCYuhmj%lPiPHFH)%%L>7R(e9AIZEo7W!GAq0=JHwc zcgBIubx)3$JNe-Bi%SdS7oOLDadz>^ssARTw}9jX{@(bS1r34yqI;azUxJw0&vmcu zH#|KgH*Nns6&wUQF6Od+{kxv^T%UU)_U)3t^D@8{lYNla1^?gw=AxT#r}t~)TN9}H z&Q05GLLnh6C$i`4_Y7FRQ)kIPEpirAhx&EbTB<keH|yOvd6IQ2)8X^a(Npk#;lDS2 z{Mo#Yum9l%<zzqa_<wO9%Kn8zjQ!{M;oO~tf15##P@S5eOCIR{a|c)ak@CMk{gtel z`K?&}T+G)0_FsO6{{Gj~zJK2{(^sE<Ufi7Y#Z>>-X_4=i1=Y1&-=b@nxLbov*ib70 z`J?Z8?3P2r-@j>lYX!JH(9Zh)=WTekGGAzqvOA=#PCvFUW+EtcFIMAtFZk=vq1zk3 zNSgYeM{gtj*RgxRTz?%>3;q;87_9=ST$Z!GU$hBc!5TMh|72b(7c=e2>9!lwucyOW z1SPv$rk9+#u<wt2`g}RI#faX>ocf&DRLSH1$E%`KH*n>=6^NK9FKe-+*z35&g@qUV z3PTdhc5#Z{u$rM3>SL93!L3(TDp~Q^xfL5b?Y(+tNgmbv*CCv|>j%3Z@5?`enJSkQ zweGs?Qj9pidv5-BoBMOT{a04cFOI98?DYQcz3ThtKhN8K-~ZCvb*5d5ZvDtU+oUn8 zCtvjA_jj-BYi6t8U$4IJa_O^|pB83#*PJh0WBhD~&BKiEM-KkpU=&$@`ebbVE1~n< zTH5nP!k5>-nPAN}+3?s#X`^R*%>3?t-E~}eIrF>D{m)#NUYhYhwi=Y(?@2$pZgnrt zf6vFDlWRk)G%Ct@WWs)fJ0JUAbcVlsAKbM4yM9%D>@&8E-;Q55{+!plzdZi*szn-Z zy=>yL=VL8OPxRS-K2rZ|{tvSg@15rBpXd%tThX|A>+-0_&m$2{px59g(E3I4*6yW{ z`rl5sqFwGfB$w0+@7cX?L2V~Ay_Fxl{ZD=Gem(EcsmYH{$9u%zn;z#h^(8<1=ZqJh zS&J7M@of742dUJA7%sm^es&!!T}d9iUF`r#%zfPVZ295Uo}ADgUgfI#*lEvBhj!}E zpRiBovink_{`OA=FFv;x%{4k(=xJ9YDG2K<)Pnjqa$<iYzDnQi50;G8_m2M;{9)Vw zsLy_>N3vg@PG^1J=${?$mwE(T#?^D)>x_T-w={B={%qm+Fr9h-zHj^(+`O;VF8+de ze_M7AQp<i1xKlP?_^-t$Z)naIZra`m$qoG+_mt<u8y7ZO746?&etxjYBz~LPzL;4D zr-yhJmp?C4*lvB{;uNI90_<En{a=M2o<p1S|8*<W<)HP4KF7Vk@)uz(i<-a>-~Ri& zUw`^i&CO{)KE2}Er}O=LLs9fBV;1h(eUf?Z3+LY}_eCn}zk>Q>Kjkm>-?hI6$z_(B z747xVhWFxNzmQ`U+hG|kwe`W<KMU{0Pha}8DEZN8U&$Ixz5AWLoG*4?c+UMI$k+PR zz1K)hqV?cLedQwgXgR3am0b_s{@(|x?WXOUqhFD22Tvc7niaG6E&qN!HFMt^kDAJS zw)n2?^S7<<`q6UXx%MN|%AIE(n<KUC<G?L@)sM_^zh$A}9NM(~^KD4Yw<+p_*}b*! zq{nqI`l~KD={?<cWcpuF)%RT3dH(ySyOwvXU%g)ysh0W$>g?4leQ|ta{tHMgWfS_r zOi<tG+14*lnGW7AYlnr!)6AywC)vMjcIcd)9^0uef9}EQQ%Yjbd1g4z&u5Dc{IPsn z?kPlR21ytG;(sl^h(g`V&6+O?X>?xWxVP>syeG0=XiszewdV&@Gxyz@_~X-d$(l&5 zn(lpH7#5!Ye(7@i)Ngm@p(l=cioZ6NPlvW#j9K4%?1u!gjrWIdx$p!Rqf)Wkemx|J zJ!>j8n)M$qXRGC|-M2trj(7X-b?BL|Xyc3H-`Jr|mTO%14%(gV?y1zRja08FUk`7~ z#wb-p+pPwhdS~X3qQpP_*}LvsJ$L81){2_v@5J)h-F73@){rEz+11{x#tYi>UCo;R z{VycmKFJ*1y*U)#H;p+My*n6^mZ$$Hs$`3Adw21|bL}}_(imelE2GDnjsKU&M~*|C zt0%fg_Xxzb`W5m~t6^!Oa^C~l*B2pyJM~9VEL(irzn@1gJfGcK$MyZvvwn;uwqEeB z#h*lIl!<fPi-NQ?_XK=+7Y$Egl@lMx?h2pJ4$2n_AD>?1*(Z`8zvJH-CYfI~k>3=i zJTIv=LU-<-h(8VA>pdWWklOq}cDFmEXwwtk!yXPV+TxTds_j>RgSSTG<J05DKa9Sd zS8ub6*U&p-bo@X%M%a40+L!H%hZy@boAv#L-zJdMTXZnGb|yUarZ#P_-3`gf<&RD` z^6Xo4CMblp&hN!%(I1!2NYws+j$!ik&bpjitDtp!(ZSohT_FxO<GPnBo(=1QtP|M7 zTmA}MT7FmA_s5ehep=d{sH0VmFFuRD&N?&coA=KTsV=bLAV~33b+JEm`^&mHr(RS= z{wiAfAa{Q#v?w;`xOZ*ot?9v%AHky)y-npwn<1{we{}kO`iIm%R~F<iJTLy`=;DV` z`)8qNj5x(#g-c=~fss1-L9PO%^$^-r9z7Qx6jPhZE1E&w^UqKB9hojHS>rj?q`W+j zy=XVH?0t-~J-oY4Cg(DwsH~j&VD1i2NGPlm+;cV^-Yt*Qt@wTYH6#?&_t~s|SMiQ( z!=rs)q<H>*?p%0&dR^$@nl0~l|3q}AuY)_&ri<iv!^RW#gni)K4jmXvJ9xWr72L&9 z2XEh81Wpq+6MhuA!V)p}<(`+pZ|_dV2nF?D8=qQ1({R4fp1;|k#_QHEPiM2{pRalA z4Q+P6X3Y<V2Cm7+r&TXcf8pvna(jBE+eUf5+I>m!b7x-c|8IhkjvfCrT#s7{Nfw)2 zKa{Pz2C4toHkChc1(g_ud^$Bd{XT@nuB-&r(9NCtpb@th^Zj{h_sx`Ce&hT)d8A=Y zNJ)8L=~rRSQfP^`o$H<&G}{G!cvtK99@e10&GP;P*V)&bOyc|0_ubK~jeK@qU%NYY z;pI#1cK5eP3tSMsC3hCR5We1BCldu5R!}<_?Fw;jZd3Ue$-VneK!!E*#rHH%&x)JA z^yep!N2k|&$4`5CHfZK?=Sqt&Kb>~^MLv5`se>L8HSI5s-|L1JK=*Vi-1V+NjNZ<1 z?}a8jBpg4K#V-Jd#0sk}u_LTsJlNuoW%2$J`&Hu@ZzGlWT^^$fE$^z!vG<22<J}Kr zZJ<s1Jdr(L>p{T{?n1v8+N1kC1LWpSRv(`}Mo!0z{gHZ&kh=4|*xwrgt0B==H2J~X zxHXUg1#|9u%JmoaK*Qm^;GV7BCZOg-<m4ZpSYMtts;`s$1*$#uw-;G+CYbsobwVHp zZ||y`69F4;GlLJ?$Tn?%X9y49_o91}muG_As`v5fB-P`^;jvHm2!c(1uacp;J^yA6 z@~|VgUfvV?<#EAQXri!Y$=8KcpZ7E?!fjW5hxYo5x*y1DK}@#$_*7J~M)RKCc3Vs7 z4HurzK6_8(?bcX#jPPCih<(p~CusOCe<0fpEi%mx?k)rm;D9>N_f#vY)sN4WQ@>cO z=l%KVrX$nMK^+ZHGPax3`oH}@zYF)(8EZf8{W0I8@7j_2ooD~b?6|*h%5U4Qs)uLZ zt%wi&a%6ofY*ZQIq3AEk&p$&Ob=$e`EnGb7`~C>8e|>W?x+?mI@AVmMcH@28ZrnSm zq)kFgrR-mfZ^>N4BWf#R15O^$ncK9^!u>Q$nBxv+Nil)<4VKyl)@Boo)bBbhTu{{h zX>oAG>V}XxCBif2X6!m*|6$*kn%&QTzMJ#3r}w+%_ocqOwmz@E{r&Tv=X>w_yH#7h ze{tt^zU|JL!tyTl=d}OFM%U?|Iq@`3d%tYxzZ-kyA8wzKKlA*2dBdGst=PZqdK!Ot z*NGY5zkFhrd9ORKLbf9OXKj?;{Qqqaa_^citB8H3x8;uY-ajv5-q}CxzgzA6^RiLa zy1y-*cTx>!Kh%4^D(=7W9ebzw`gg3$AEY#2-R1sly8NSg)8(s+=TE<^;u-!^_*q2A zzGoJ8$!7|)j$C}z+5DZ+cIS(;vGtoyEql6Z)jrK%8$X7E3b^9DE&krNg{SP|l`6RZ zgR;i;OVi&rm46L`7jxV!`G4c~?$_)7{B+KV>8pc&7{%LJEADT#i$C%GUBk_^w8PUa zA3=wuA<dQi&bl>qk>4MuxP3o;X}ULS{%h}9<wnYJ-tl$OAM$Q4skNLb2%Z3#&Ux?S z-KzRnvFE3kotQ2i^kdVnh9IujPA@*UmTu>>^F3U66TQH1T_oRL_6pL}d?T>uE2PnK zQ?sJo9MJ|)sqof+@%h0fi}-W>HIZHqPdA%i39;JBeDh{w>*h^}aZ`wMpDvQGo)4{| ze##!S{<j9w8r&1{;oI8Fu%5ymmk(m|FaCbL$s&H6%f34^4^5wJ&vU|0S1xeUh3D3b zW>5W?f33F23^8*9uBt0nzBt||3r(@%9QQ6=hP2!^d4J$rcNJ##pLGv%tG(W@KmDj? zr^2VFf$Dxw*0D|Av#@Ta;^W$%ZXcZHzwdqHxwP)=0ZohmNnIpAd;S$@{krpkuH8aN zxwK!s;&>OlksQu(@7VFL|90t|o6fBqzfZkY|LFGhSEOt;%3pkzE%|Za(8kLc;i7$1 zcu(1EXz|hXAXghSwwe9%^wg&9&#d6dV>L_uS5RM4?D^@V6ZP%2YAZc!D);IBD>4Xo zp07VcdTP>yUHvJDkrzmz2Wl0_UVymzXDxhw=sL%}w$<?Qk8sX=3)w;AA9M6?E63|i z*yr<N@v4^B3uE|d_XWHQo@E(jH<K4J4Oa{5rp9Ui+E@=8l$7VVmj$T^--zweoepnv z#i>_R{{~Gw&C$13j@O&K&*#VYR6F0m&=1K@^Vc`!pH*C3e)fDDeCiNV$F3Lu8*yXF zZ}4o(C$@vuCH;_e@@L_L-2D;oR=C^2+ZRC{v%-CEx@szGx#HXY{W@~txpm6RkPqTt zYW1WMQ)S>n?a#y)$FKE5lSp^d_VQ+ku`#+8yQjmaweG1@%zl3Xocz}H)Kr#p#fKHt z`Yqglv@GFCH%6j3yGZ_ZK6DhQvirf?9lr2JSNC*yqw8P9hims%eZQVsxbID0&CeNM zQk}M|?LDXR@S$kA<(HpY@7iS83eMidFg@yG|Kn_Ez5UPSgPAb6!JOLvAa*Ar7?wAc ze@UyAixGQ%`szge^5q{=U#thUU=CmKKU$l4c~K7fxJcN={-x5;aglp!71^M9;izAq z$`0=SCj(DyrA^!avq4OqcVha_$!bO6J)Zy13EkiK=$A2X!HdsJZ#D<WU9PJ`&xk*b zKeFh@LF?~L;UD_eK?f&av%cSkn09$Du%|Wq3pk&=R*v7N->UCiUz_yebL*o+CdFTL z&Z4IY^NzY4ZD`N;jz-1r_0T3vIoG||ba;VuPqiX?JtXqJx$evHdU$%3iEHS=e$Lu` zT>DJhd+c`DV5EwjFODD60~OJiFHJA!zITWV)F9HWy{TTYeEvds_pJZH+WjGrf<yJw z)9|1lM)fDwhDOE<{HmE+YR)(L+oqf!M(!xRhn=2ZlE1p{l2<q06+dm?pVkMtZ?Ei` zEcr3&SJCDNb8Y>97a1voXHx$Kedvn^b)^dT$#m50w1I_%?6O9!SEr@dok9<c_o9C- zN*bXBM%}?^e@JsKn&thUo$!(<nl(SO(~cihooqWX{iw*kH7gFyX{z;pf8fwNj5J|) zv43woEFJHEAp3t7Byaqg`e5zv4e<8;de;2HjrZcGAN^Tm@abvV%hN6Y<>M~BKid{` zX5o49Q?*{k?&XH)Azb6|CHZ(bG{M<vRCqs!_8k}x-Y%I1H`}>s`&$`E^;huZ^xI3* zIa@`3y%u(!um5lxTV-WJE=Ee*@Z$J0edw6|pWX+$b<iHqzpxK_Hm>k;qP%JQM;(a4 z9#2l&YSw7(tDPV#{j0|D-j<ey$F8NKmzn(?>J@Lrq4{naOaATW&~Ay@!P}*X!QI78 z+kg2$%w2b4`tg0$O66ZCf4Q#;Nyw@zR8O2PEypl?zxZE^sy1lc*~4duYJ5I?J97zE zPu0YH;HwRr&khP`olj45UY>55A0NhgbItE|uG)QnC%63%JpBwK5;-sS|NRVgww-3h zYDmT|3i!Y$vmBO?cgBABR_6sVIsVCMfA4s;E17l=t2CxN&)1*wdrDg0y5E~0!l%C> z6}Np?oz5BPjPFnNgVtX-A$jEIln1giSHg_`x#hvzA3MOQ!>HUx&wO!=!}DdZ(#T{U z=TpO4{&e)Pwsx`Kb`CmWZ>dsIEe#Fo4G+%BE{2<&e(?4mMMzM8IWb*3=!el1y}7fL z|Hw*InxH4QKiw~m|Kf+XTx#4tl$n60EV99)ryoq<1>AF%{I@G1O`=&Rre_EJFnamD z!720ph3DK)?Uv45oK}sI-oh{TKYkC*BtQ2&$W?=M+652peqUcz4_#~VU#-IZwJE5D zQCaik^jggtNk}5@O?RsFxm<u@Xw!@1m#U$e<6rEDYeL{M{;A)=>Ob{g|0zM%TKseV z@a=kL-1MVAH|c$P%J=eg%l&@Q`*u^JLW^7M=1ZA<@V_-5qZ*AD@&EA16I$Q7v%Y`P z3271)O@A<VGk8n~)O&a*wx?Ct1ms>z>rYQtUz*MtD+O`!!)<JpJD(rLNM`dF$=|*Q z?N@(NJ$U=SA2c;=dJt={suCIw@q&BSzQ3?XulsYV^OMuFB87KqpI<WnaVT;kzW6{J zqt27N*xw7QQGe<mjGh5)W*ukAf8GHqlt9ywceE>B_g@7W{&dcX>GB>APuDy!tyX#d z+ukWCgk>7?S(`awPeqT%N8M&hW-`(^yzu>ubshE^3eyZ*l%{?<%orSV(Kpjb;7o}? zjE?cFeOA8O=T5i<73lGmEaaUzvGwS$<0?YW75XHO<lHqmU7)r)T1-_sz})fMoNt!f zpU>Gd{f^z9@0Q!k-}~zAeY^9$?fmC9=l|BtuYO-`I$2Y1m8gZ~q^0pGb*oKY&k>w? zCUP^6;q47#6`Bi=pFXJHl)Uz*aDh(Pvl&^IQZ<DgR%bT+ynbx9{fkGFd?Ih|_wo(e z9Wq6}J+VNno<FInc-~FMU$5=_=P=AM&h}ik=g<9??F)N8vl$-TeW6CIBHHHTtdKHI zeS61>@;{v*;qJ!|B>nen*{9B#@2~m1RidX~RG;^4?tRY9yxDIz_#9i1HqGZvx3hsn z%HHa4|AQ~?pLuHSmhJje=Zalg@#^x)58fviKAk@4@b>sqe^yMk`};}c;_-F<_Dq&M ze}s}J1z*;$=E$G=;OLAeSHGO@=X`(KedqrKpHGi0E_^usU*KNz@}CtA5<UDcr+2T3 zU$?mKXFvys=>M2C2NYI1B)`;fTUA=CX}RT3P|=TX-ZSM(FD;M%H~mF&HUD+@9#22t z{eN0Me4F!VkHq9Xv+62meaN#t^H(T&lKAn)w)lC9dv5!G`sJiEKYrbYx}O?fy_cE% z-QN;h{_VZtj_sH3?K^nantAbkD;vo=G#l!?zHEGH0ky%#yMn*&NTs1#rRiUzV#oiM zyS|scn=UbVj|HE}pCXQjvELQf>mT{_^QqSB>ARJFs8(BCj-PcUXX)PBl`mIt@K%<V z82t$<%J{kT$%nVojqG17@!zkb_$%Un`MQ3I$#Z7aMS4|iuRj1W{}a=p>J<C$-aVdi zGVD@yk!}^)yDDoHr=8cAUK{_e|H1T>UBZqV+3xFQ=HGwtTCn`l<HwU9PM_p_T3@w2 zfB%%9f$FutQY|kYKefN8_Q;GUSH7I)I<)(p?YVBlldE4&cjkQm(GTHtiHB<~j=kpI zSW~z2-mj;-1^-Nvxfgpv=+DV5+w~7F)whT;o6Q4SzgnkhS@V18nSQI6m-X8x3-9?Y z3w8NVNzh(WaKIF?Je2+F4LAGK=9cZR`)h0*bmqtBZK?ZN$g*EYd&er(*A1EZ@tao3 z>YwdemGWchlMA1`Pd>b@pIUdtbADZ=;>F|Vw(qn{@+r#t_0;1~v|<IsY>|g+?;VCm zYoFSlxA`AGGJxED^VicG-oG9#NJ_k4t=S*`=t}>*Z{Jpm-%xgVHw)8z!HdVI9gdMV zRI@bwTg3D5?JwEqkW_hI@Sf=T;{8WvJULpp;NkRS&iu>Ld-e&Oem>pu_4LciKT>bq z_xGv(ZF6gC)vCS57$N@DVo^Wu`eJB^dmXy{PZ}EHk2&8Tn_mPsc)t3cuj@a8Q{=X& z{V{R}^{={a;0RdbaD+={_GFB}Ru`yUbL;$9L2xG0SKH&ez96p0GtPJaAEt+~SB}9$ z#7||<)cw!Cwno_PzmxU%(>#tk$+G!oi&|9cwr|<4|4}x;;Xq(1W;PXC)NiX_2z9kL zXZ~Jj9@Tjm`(Ff}27kI9y8Tz%PEKLkdHwQ;{WUgC@yq`HJ+fu{`i8P8Kb)`X`L@M- z@#*fLBD3#r&@=bBUtUh1++inIGx4?ZF_q=Z;_Es;gmFQfy{G5Hwrz;em@a(pocNE5 z29UEe{}z?A?DzToyE8LC{*mvxh6d?;KMaH8)qd^R+YB{0Oz_^jGH5tY=FC5S_>R7z zT4kY3#*e3>E!$Jg!I?6({p;!LN<UOBYZ#~MTDE&t|DF{5@`q>Hy=fSsy?laj&0Rfc z(yml}`1a08Xr|OURQ-Yxk+!oA-Tq)47vJ&p^Xa|U^!r^uoZj>!)z8%V*6rm{G3QVA zo2VVuS8bmb@5Oh&PV@6(zh7TYXLs0L`_lq-xS#4CUH@W8kgQSLBY)>OA|{phgj!dC zGkpBEx=OXC_-WPGZ0^6jbkFYo*O0T@?Ii1F3d%$w=g8&4wQFu1`)b(H`R~$~(~>RQ zA0D4$-oY8?yMNEL4}5#4|4tPUh7?t558vKA1<vn3SA9LrIsMyF$H#~Esn7cMUHI}n zyU_oi=Ip6*#we@y^u0*FE)2~zo7z5vaY9@^$F)NJ{!zHg>smj^)y(N<2Zf6BHT`U* zA4}6ude>Urzpwx4@8A0yDyOF%kIR_sA7A;}cf-vJ`|nq^&)z>a<EwLVvD`WF3}>FV z9J`#Jt>669zSDgF$xGWEZWpELo}4nhe(DSN)5$UR24csouiTl_xiPMG!?XBP*6kn4 zY)@4hiXF2KYy4gXTGI_;dp4HqJ<R>ZxL*Irg8dV}x7=(K{lkB5{>o|MR(frp+4-Vl zWVAMXcU)Kg^_j$l_|uPN;~Vci^;tLRjKS_NFVE!|opZB0b6oOB!km-;^S{q7yBFmD zT$g`lv-tEQVF$kd<uG2dSMS)Sy?Rf!e4Mo1BK~Vo+O#K1zi;zc$IIS7^YyouaC_~u zW7hFJU!tGIXMEQ0HQ&FMY5xDKlY|$%W_%|t!TmUP=>hBc;2>-TZL`|j_`$4p{&n%> z#67b`D#QiuHP5!xKX#~MwrIs`j{Kz$jz&nl=NGNWSK0G=Rz<C$*s<SRnBF@bx?O4i z93+*;danvpN-BbPX1!jUz4qU`&3hE49DTj^fL@n0=URs{?)k@c%;p&MS6biutT*HM z6Q6aL9$1O!xu2Ck!}R^&vx%QKR0?0`?RdId?(g2ca<Q)K-GB2%{xMHtowOqQgvr@+ z`>p3adHjv*^0w}?RomZ|-;lQ#-gq;xjQiNyGxqmuq&}G+oo%1cvhC>^uIDF{isqT* zJb2D|>`;Y#@Pk;Virf27S1PhSH~q9|zn^h#>#w}U&%gdZSi9^_{|}4xn@ewq=kI5I zY?J<p_vO{}&52?X`Q0A>OYa~4&7btM<frWF)9e}lzshb(_`hr3d&gvUk4Lle8#0^j z*53clDRg|p#XDb~8yDP|8FoH<`^Un6w!+fc*TQY?^0QBy6RGOH^`~^fo`;>z&*mq8 zE<ZZue&53cjl*u|))dUsSAG8T=GQ+q%MCYIKN4S~{p)0mGtb{&#nIOnrb*wrmw4^q zmJ?;V<{vJst8dxDy+!ht`uxXx^1uGnxcZ#w_v+PkykfO{eo7i27Q|1>ZBkocCx3e) zPwh0BeP1J=UBB{tc8A^ie`eRyrKEYB1z*oHtDW|?=<4(OsM@;uuZkP3uZ8Ys>$cnd z%fIpTnktJq<<Fzkzn0xDE&DgOdfMyXQqGp=)+~K?n#mx&VdFz9yK@&4%u0&V+)pxI z|9imjlyLi*`n_lE4VV4dw#+dzQ8_(qMtyzni|Ws^G50giyqWid^>x=TyYm9h`}s=d zRh@eEpmPzQ)%TsN`8G|yYFTY$*I~6|{nHn-9a^kz{Hif32`Kt;&2eUYF#B{t*_^1O zr4x=#GTd~|x3SbVUiJ*n`4qPqA*na*>f6>db{^1Yjfm-gzDj@HiFI=_FBxCIwe_8h z9j9IN_wJjEAF984aIG)p#eydv);1gMU&g1WZnfi~*t%vDw!bsJu)eO^XJv8c)q@>5 zHC8WnPuutP%=WnBk>~FeM^~lFzK?!a(fE4CwPMwifw^4|KJT1#W_{)TBG!u=zoo_; z&(Jwn7_=feIX3Y4rB5-Q+fIMo_f%r_`OuqRUKB4p<`>i-Tw}jtgRS$EbsO0EENA80 zf3KB&YGu!*8SeP6X1gudK6#UD`T6BP>g+w9#b^9@P`y{`J^NiBzlL+IcitO{9b5ge z?t*U1cBc<XIz8c!|1Ox?vi+f3TzpUK$E-c_CE5>j*FWAP!TtDZh5ZZZmhI_`piH;^ z*l$PPmhEvcJ)te-zj^oUgDNvSblZ0RXD6O{)0On|A&YjvCz<A1c1Y3uKwHfbAA z&Y$wVd7t08!&i%cR&p3x@IU=7qkiM{#mJjK*15+%U*4Q5_xAU%L!T$~Psuw~99^|v z>(BOB?|F^<4~i!{v;X+H>DUpIeeTMZHTLEcf11vpeaEk4QJUFxPO0uIA5U2)#umms z{AD}q^cp_BbH|o9@B4Ztbb8F!TVIP$IcuoYRw}c6*m-i|{UX`RRe4I5t9Tcmf39Y< z|5@?md?DG}29sY)^g7zB)gIinsBh`hot-(;Ul&haz1Hsjyk7tLwf%zOdrSV#$^KpQ zdzyCol=F8}#cr%$yLRn&^>e}Ia?gIPGxeV;v+wyzqy5ipzDB#;pFiu=*SW_QecAoZ zE+YI&`Sr@I-m3@Sr%Ybnysz}o_dnOle?OAhTz!V=c>e9p%X#Y-@#WQNOF|BpJF|Xe zbGd+Q&dful6OJvApS&+2_Ix<|^Jv)`1L^sEyUuNnDLok)A7eS$F0AH5YO(5v`Bo?X zq#kUP`_XAN<F_+X!hWw}b)&}ex}#KcozJf(P`ZxED*bR$=i)(M>36<Pzhg^JhT6y8 zezR)#x}QmZ?<n_wk&}BLy=~v=QlHoRmOfcwHpT9J^r=6yzUzhy%f3ESB)fQH#Bt9? zzP?gdS?|-e-Z%BG|DLA3*3N#m>aUmuw;m_Pe7*Fwct-gG``Et+Lg&ZYn_npVdBgtA z-Xka97uLonCz#Az@6C7rbI8p2;(50`zU<9rx?V2z*)Z>%Ir}xyuXn%hdpb9aJ^swR zX!if?Gb(?y_#pRACxnGc9*<Xu2ux;FU9&RtpxQr%W~PNf5BNK$UdZr@`M2Rf%3aqf zt_#Gr<lb+JIuUw}Yr6c^B&7%aOBTiW@?M&>r7)o_b4KQ}8ELaJeks0;h`4s4vgZ8f zbDwSYK7YIK`Mv6SyHD>me*fkj=pMrJwdXAF7ti~CuRMR@1o_BLhuDM(f{lN9`QN<P zZT!p2{U$#nq28J4clRT{;~&1f7K>+oy8LgV$!fEse@w6Kc{bx<`8AmWKFvAqJGGbm z|9S2Ip_0GS`b(M5t<8vY=2mvAY4d4t7N6U8**;n;RAa%}qq|)izpEXJ)~~qu>``vm zgIK?c>3vT>y3Xz{?`6t2erRjZ_Ic6SqqkQcs5X9RYds6hS$p8NQ-wHZ+?Jgc<r*Kh z3EkUQB^SSCXT^7|59<{6EO#%A+t9dA@qPBQ@`|$tP3*twFMMkHw{*e(3psU91U+<^ z<ZD{rCyULPmMA0dUw&`ucSG05*%65<mS?1&HPjyMO_AFcbKtq+jRd*6KOaBe)9L@b z;pZQxhfbf*Eo_@4+v9ouu#t_4+=CBKzdz-f8^1*I&{0|0?uCC(zuouuLw3!c^~T!@ zpMCAQ`QUIxQ^fCMw?j&0*JyVwoAP8v+CAnzapppg|KU;p)q_6eCr9z={s}VCpYeSA zgvxu7$Ddnno%v{{y}`N_?!`QYUtY^ehX-g|eE<8*bOK*xTsM!+oa^&tp0gHnp7VcI zJp1bNWZsuAiz_EEI`FoyfA{m(YQ|pC)TBc?%<ub`&i((>I$*J#{_k+JFOfwp*V13c z2hR@|s<pFhd2PIvx8-7cp={1Co%5%|=bJ~={)=_4`Xv*UUi<fF-}8e@&Zk>j-HSOM zIG?-KP)8@~clt@esQF9leQWnkeewBD{eGV4^`D-<zjDk<Z*%>WW7iWdr_1P9#O?dF z=i;l+t9f1KTWggsd%y2WxPEQv`RSWKMe?61|NSrW(Y!?a<u`2Synb`M=V#LAsQE#4 zd5e$j+K_Q?icIj?>H`}!1=_#Vw|=e9_xkrXLWke;$I^_r50*!BUDEykG{4q?hs|bQ z!!N5}7jwk~r`X-k{hD!uWs!T|=Je*%fy*x4-uG2&tLW3cMbF(eeNO#&rIx8=ynkP^ zCnxLIj9Wi%UQj+M7}dX|-q$wD^~;Knq3hhQOq=N#%F6OsD!hMNr0p(?Cb`gqE3>%P zx`!qjrSPn+U-<iAd926gZUZ*?1FxeO@9^_CJEw27emZmPd0U-7=Qsbm?{U4}^2h~u z*UwFVZ)Gj&pZxFCSHWDpd!K`D#ZPm5t3Ty?*`eG2#Lsn`iNCjCy=U6;{lt7r{aZ16 zgheZ^3*GzJB%ZV3xNBTY`?A?}O+SsVesbEL8pz&|y+L+G?$vYIUo6&@_bxN|a(z+B z@o>qt88y7R_xA@~nrmisj_=RJ^V}N_T1>9IqPIK0@_ftx`R<a_<J#Zvkk$CQrzuJ6 z=e+sr_nW+ywcGQXVN3m&jF-=ScI!vj&pSW)>9RAo&t%W|X~fav-r>kqsBvESa?Qew zxJi%yKC^uwA=}~ntNpy~f&aUaQt6HPYmB2B+^@gi=@%e9?c^u_9_@9ri+Od9Y`yl| zS#FC}#m|-)_S4O30ms|FO@EfTvt+}Mb2%>-JmFZ|d};qOzPf2I5}tdmYrZn=S%v4S z+@9<hS(}8?g1U9hnQy#Tm3`m2pn0}B=xkE=49M}f#V+i(>p_R1uHw7bBLO}P)pK>T zZwR~fBwNq>KkWiu{d7D1{ZGx`rIF{i%D<`1H!BG!YPsh4GCr97b|>Gqzg@2twl1}d zo0KK}SSp--{${HiUZn<_9=G{^Z&=p0t@icLSKaIPOZjz*^1ki2^#8#>oiA@b_~gii zki%QQy0Az070NEz*3#~wbv6-n%B6Q0yZMq8&HHvu@p@o%C8Mt1{l~cjTiM^gzhT?^ zy5z-g>m~my)l>@hhCcq+XWe0E_HWW_<y$d(q`sHm@vNwhf3hc|_+!?c`yVS0Rli~d zC5iRN{>sX>luvuWDjoCOB`&7@({JlT*-}+Ko6h~qRlB}h=g$3&jXj$epZ{FRXeN>V z>0jUDviqA<kJfUp6P38X!oK#k>&yLKJp2BEQ~ia1iwu5FD}0*oZFl7P$)d*&kN@$V z6tt?J{Ll3Bc71`lH@@p!=gj&n%dPl2F{beDm%aNRn}@NNKeNhs$H-OP@@@LFn>$Mi zZq7l9wlX2vH`Q$@A?Y6}TcZL#!IsBwI^VXqsi4y~p<$+U@!&mm(1Ef&4+Yj}flk}p zmsI-UrAVnkM8F#5`+F=*o+o^Ie(B)V@N{Q(RajJayRdJUdt&90%bZvPK220Qj6MET zX@NpXb(&<X)sBC+kX%&P`6A(ZGU(9F&CR_H;Ar{4?e%~E-|aj3CcSvJ|C$uzbUrbA z@VUBBSM|EETg!vaE8W`1*!u}|_Gm<Y=?9am2cLz0cpt|8X5#as4|kti+B|#qriIOu zl(&G7Pu|h_BH_0j=;Ycuk*n_nL22lIUg-t{!@d96A5_P$&bN)1{qi-u`u)_bmT%8b zOD>(~&0d`cIwrO60_2#~>79JrzJd~v#@}_ZY#;;lw^~`KU3dJvXU7KjjQY%ZbG_NO z-=BdLe(MEfb8eml9T+U5@42-Xbf)k0NZC0ar5ltrPX$@;`+RqM+&+1qZT}Z-d3NdG zU2~*R+|d2v!KGYKxOnZ)o_-K?)^KDP`|@DfD|S1JkL+K6?sr@IihS4eRr_8~T)x}m zssY;%+Z%ticl!C8tv&EP!1?d|;+OUFzOMghdqdYn{`t3pT9?_~;g72~#H;R!-d+T% zZB6&FSBpQit>l013X!_oQoiZ|t8|UMU}d4~sr~HIo^4mS_SRWn->p-_UuG<s?*8u4 zXQrH~``E2-zl&byRe1l=ZoA*tKF8|U{{6{!=)%7m%f(lUpXQ&w_OWu)9g}4rZ6o06 zb$6%Vm(s$y3${T*uj}=)_umtw*Yd?pU&NPnTx-?;gG;=X-KL$Bnm_ycuEy6BuNB*< zy1#h-%=7=O^JjOrzX<&6w$A;ESm~dvX@|jQQvbF&UOe&Y;-{Lg1fP9a_(=3t{EE*` z_Rl7&I`V(^Sh}FSG9~6h^9d(`{R^+}z3};<xxSb2kL29Pm){mojC=p!^=FafcBA4; zwQ-4vrp;}QDf51YnA9Kq+);Ic#iCd}Ui{*-N3n|zRO>&?6#?aTGwly`y&t~aJNOt> z0Z6glTQ7VsSlR+q0nFvvb6;W4W)=|pF4vyh9QoHF?U-_n5BJ<F{I?W?!u-3|hi^jn zJe$OGKKxYq^ypt@+tvHc)5Kehx?f8aJZ<-5In`aR@O|Q++=stsu(t7jGdzBIZh7jK zMITMq{E@jb@tHyX4CZg5(I;)*M4v8Y&Y8MSI41w|#ZqDKvW)B#yF_z87_U_RvWM@j z{z?niT=nzri`}%MERAv(g?2=0op(=WyRdlI8F%yYVp;yV{a*iP{d~b^#2A(L_%$1- zT>JUL@6hdfZE$i>mcQ#-@fz$Ksh=;*IrA@jfm>y!pDyML-mBeS0P+opBYe+T8yo;q zpljA3!Ibr6@ovuieC>Yy8wv6~dn)Z-ZJaT0aj4UC(ZD}nzkI6onfB@8+Z4HL=ASD$ zwt4-0u{_6aSLd_Eoc-IktKGSmkg0dx`_Ollx(&_WZ^v)yKL7kAo92_h-!A>Pc^&__ z?)Q6vzZScCUbBOo{Qb7QL&bevP<!+0j{9}|4|AhWf#PQUvA^H=h3+}ef3_!~`729h zVf^&_`SNj>FC<SX-S)L^U3uh=`~T{U&dthu@R%oO>Nj2Uo3*F6iG0@;PfGYaUx(@E zzSdUd6Y@p(i{3EW^*g_h22}-I8}cvR*#1WOmth^}b^a|oD@?!X{^rd076yk{^8HT& z58v*e2Wr%=-k4uG<HI#h$cef?_o;T&gq8}W&dsfu@j6!Qn{M?<i`TzZ=8Gq+-jW}g z_+7U;_|Ep8RZ?%C^e+6XTF-Vh`po+O;r;$=!;EsX*1ih0yT87wRX1$u|DFH-Yg~W- z;QIg8`m?Y9_fO)yP^24geqr0qgR2Yw{@>lQ{l65X9{T$KI7j~62jGnT>p$b6+gm{A zG3v$jzW#q-dCzaVQ<WE=J-WK%-~ZY})oF}i_dovipPwUtF-(u+q1)A_&<LE7|MdIf z<56+vJ5MeA+@<la>eo*@HSg>H<rP0~_@`VW*R(dsZr816i~pL)$8I&d_`J|%r{2UT z4Sa9)J-=z>KK+?7MZ;C!d71AQFGH_qKQnqBREACc`9jsd5S|SCPq0`Rwy&24)u>Mv z_X~rvNUmO7Z_SqZAGV!;2I@kDE6dk5eURHZ2^_!^`|Ug{j&nm(p}g?DY1$PvAU~aO zpRcs%ulzGmcFlUS*kAab)j@8v8|=#Y^ZKjwRy<GGdZE%)q@MTuXK*r<pHz9na`J1o z8(L2nzcrKp%X-#bSS~woow@o;qb>VYZZ6(3_4(q!MIw87W}02pKB_VE`C`MS=aHe$ z7XOZaU?pcIKlPvK=Zo_va9*(Jg*m^SBmaE}I3C>Ws%CtcS0xV)U}gEgnh)oyg45~= z_xY-OVyA!nvFPm4)f4;e+$;Qj9zvaLue@h6EaRQ$%>SJt7r)`4okZp5nk&VQp{u^d zd&|7q$;l5t&tfkBgwRsa<MVfK$`5z^w{o|@QTyWHHLQ*YRU(dGWo30_k6w|pl5Ly4 z)WVC0Qr>EpYAhGrv`lu{nJg`hxf4&8Y&BWl7PCZ1Aba7Iqh8`cVoHUA0>5PM*`Bsc zf0zH)^3HGT{D<Yo+27xN|8(AY+wXts_P@Vb`+nxh7rC{z?PZ<Yzx{0N$=X$EdctPg zmy;=dv)-C~mXYJkcdghrr!r`crgC(g=BX)DY$~nfrk;GW@(s(J#XHzdDr|pWyp+5< z&iwqtk5`S2C3n2bUHr+a!}D``zbjAu2_BKtvYPwf=`EV__`%D`>y&NYcmC<M+);6^ z*Z6_W<ZYim+8lc$og+7Q-m%R+@xn*#r{vWLtL{H&duk^88Tqv-|0*&}=GzBs{y1&g z6084D6VJ|{Qf~Xu)~f6CqO`}h?v39i4_SMESd{iycIkoLjUVpWPkJtH65&5V{QBgN z&*TpNSlLza@R;Z$8-^J5+s`(gt4p??|31rC=t13CukHH^Zk>JNvu07=|4H-9=c$#N z6<Vw}zOdljlKh><pLBNzebH4@P3%7D@Ilwm)3Z{XPvMJhb@>O-ZRIC^m_GZJD0lIL zZoS%P_v-<6^$XG-U;Ut4uefJxlenq$`nLSaX&=n^AO3Vbdu;W?XfvUEeO%|brPipQ zkgoAQB|QD`%h+o-U-8-97j4S_DZFy?vf|3QjbhKE-}Tj;o~`*y?6Osxt{U^f?MGBp zpT=I=zUJmp(0#m0kFU>oef^W}?2~^CO9jBelJ#TSbB_02jdLKj-gK(C&0Y|9C1;P+ zzNeL-L3l?{nc1B0S^22QV()3I>IDAz@3{_c&rvG9cB{Xi`@*A|)2B{spVE8o^@Mp# z>esn%kl9rKN=B%r`+v1=?dd<Y;0v{l>Uuppr{({YmRxcA^p8J{vwFi1Z{H$#Z(Gp0 zZZJDXb<b3&$8Wk-NN={;zW{Uq`N8c!=ATY+DcZf{%HOKDj1cc?GrqsyeqA!7aNpDF ziTRR~7UiETOFw&F`2NQ~F;_oo>|1~S>GS^MFa7?^^uAy4D6nsSBhT!|*1<Jmf3mtx zZk;1_ubJcaj~BJRqU}Ha)K0wkV20+)ed{@Li`|axx9Y0T-SyFT${)A;>R<Sc7;g2w zX-i%7yLRG=n-$NsKJ0U-&}P-oGP}phwMSp*-m&c!b%C2d-dlBG_uLQL<eu$WakFB! zNX2c={GAV6&mQ}&%X&|?W&1;c^B^suTzm8d?@en41@!y#q80x=D>gTYo6NXBLHzex z&a|kOpZ_0rh^L)gQeVgZoG1GI*@pc4Z-w$*IIU*a#Bsm;ELN}nc*9FxyZi>W#{v8D zKki#0zgOXC-Ia3t$JX=S3qA{4?rHS%-111FJ$WfNDmtZq1?p#}ITl<yR#)OH`R=6r zv)%GjKbro&SU;IDVE6R((kpIOnEtvroiqQl95@aZ%h$GkC@U!f$Nk?7_J?ydDgrlu z%=)s}n)CgqyEgkF8e&_vzcqzw_{;xrtq91|roS$RbLKx@ZL@ztBfs0d3;ml?jrP1y zWZqZ1!F$iv^kVs7kH0VWpRl-d`QUNIjKaS!{1?}K*(CBi@c!S{_Z7BN3bcY=xKH-g zmNYv#??%zK3;j_-lON^H*}74FZb)PGC&$|Fi;ecB+3%Xo(=cuNk6obTvsnJE%AUxB zpwzQi{;qSy>#`4j7NtGD`ojIY(7mf~L7}|f&Hh*Xq1#*Mg0ebDLhxP`RKs8Shq-kV zpM%o8oBc1Vhi@wyKR2=2NmN$9ao<1bQIm+@-PcABcCRn!47Z*2dxq01_ju*U8|tLx z+ZP=Dx|rYP?~5-YzXO||E@i7d{<$bn#p8v$r;$*_tKD%<_OlN7R<|!d5Gnop;@9Vo z=l$udfw=w`n<T^3Xt?W@_Vk`Fgaq~r#zVJv&4jx0zRI4b;GE!QUp3)_S<WMH5pc0z zPHB&>w55KQSzK@37lVgqxuANZTeiQ8oEHze@;Cp5`~8PbRb29Zr%ri`#XQQDI$rCe z_;vB`ldL&+4nRVF{i3>(xURn|I0d)O;Az>XqNb_&{t*9%hu?e7?QQ9QZm4Eg^S)*M zd-v%dvlso4x^G-H<&3=cyl0=;K^DK?dt!pT!nXet!EXI=ulq7+9SEq1`nXrzwPkyz z?0Nl+4f8-(LVpbW+xFhwyz|4JoohB{>plM*yEd`qr{Cw_7yBnvF8{;7=bS_LXWf3+ zeNT-we@!#CxxfFOklqim|K(o4rZEPC?`ck{@x5PU6}kM@yeDAmdGB9p2hBW#3#X+m zAI$6yeg?(=;q57$`LFXqXVJ}5$p4`G@41oW#nicT;}1XI?eszS=#q1<<e!(aMa{|o z8T%x9THyUjAAT2{N@+U$I$4rq-_d$SkNcbcW!d%B{uYyrzr20Q#GlDOlxzMufJ@$U z3VXWi&Q^kQ!jEajobQAAi@^cEZ>j#nxB3;}(y{uBF6Vmnf9bvV1TUt}T|46>*xsc} z&V{Xi`j}~p#r;ispLFjp*{AyO_LTqj-_>d^O@2^vaQlz_otL&hN&5(?5N7Rrs$*1d zVsqj-Kg5If4|6LUzybY1mzg6!3{**7{h-UtnSWQmvJPhPzxJP+Am83CQ3jXGUzAI? zrJJrd29?WgC$_Iyv`;m$KF6uzZq4z}RfTF1*NPpczd!0B)H$Va((<kIPXFP$`daMI zs_P~4+-;jp>+U68in%j6{o~(CZprx1pT(L_He~-aj5iP1{4uNM-lLpDvqixf-Y&n8 z@8R0tf}o-;uJ?TO9Pf(o`{%*IRC909oDXGxCxD&)V~;EA!?iFyhAkh=?jHw7+T+h+ z&Ybzj`7QJ_9yCuB|GoCZ-xvR`Ke;D%u{{2v(E4A&caDo(dalbhu`ptPSHJUxN53wf zeYWWLtV2Io-?|IyiA?_<tRi`-e2>b_*mI)40;lWjlo$RL_&sK)Ok~IZ`NE*GBX+;Q z_b2O5l-p}P&i=Oe@QGc4KV|pjfhyV;?)QBwq~AXUd*#=~?*jL(<wK(N?~8&%(R$E= zPnjeCu-CkJP;~r#;c@8prY5kTUbwpp-dh7I;a6Ym?^D}T`u)QnaN*%>|7z2s_GAU- zeZRS;SIicJlzY2RSlp>Fhm;)Ai|f7=-s)HT^E+_*_mirTANM_0J^8L^-G%;LDJTEV zxX{1r`KhNT?p^3V7klV=;r+iWde-0U-#2}Y^x5)HrOc+%>)q_D>>j?|(F}EnHs^a6 zXpvSc|1kDnDa^I3E!*E_LkqzwMMN=e*s|Ra5&?_l_jY{PW(K{1yZ>*-A-fx?Z+VW3 z<gwL!7uEat?D>xVnR%DktGBt7^2O<}+PBH~pLlZSXSZ=`im~;Xuqm3Fmi;}4S8o4Y z$PpD|e@pJ`;`0~kOzKY^`Bzf;zc}gOna-Ny-jnV=jaevPdUDcl!-evt=ck^YsClMd zFR|K&Ej{<o-xues3;h4h|M|{6wdQQy7v_|^C+a$3Rg>1C=<O{~e;yaQcQyVAG`b2~ zw!a1)4A>jKSbpz}57%HNVa1`_HQJB_Sy#gJ@NL8yaC-c*c)Gy7&L(k_4+l@&PPV`G zxJ&3rur4Hys^34fTQ=d>#qW~~e_YV5xyPWpPQF(4mHYOkH~Qygl}fJ*w`cZ#|MYRm zEJrQ#{*%wnzBJ&w^lztNibA^Fq~yk%>@t_9TCP&+v+|cQ;{RZKYeGBg%VY2Jdb^Ek zf5mt`J1#o^*=OafNyS-5Drc+vF`S#p{->r;>0xgE1JEIXFR~TapSJxtE8t>SkWuG{ zcQJQ355Lh^wZb!QP4oNeM@xV1?fGD)`{XAp?~io*S>>!RqOBKyEeem&|9Gu!zyBj1 zpBd$cc?&ATV`lC@VY>RquBw$cV-w}rZF}Qq9Jlv4mit=$=MGojBEL=x@83&z{VQK@ z{xj$4^N**&?GxWmhjuYn$}T%#J@bQEP1AF6)05G%ANzbe&40~xEU$ZM^H1^6ZKL_1 z0|D1}RAh@(EEfPJdXP50uLkC-am86Tl0I8c{c!E-=Rb=;7Y>|k_?~ut&(UM%p~Clk z^6YgU-?d{gJ<0u-@xwEbiuFo+KIemOsgIjezW?=1@tT*WE!)4T#qlq2+_yCUmi*6U z%2&*Fvtv?%<hD&{oUF%u$^7k)&VBj2ruEzw{rm&ukE~zIBwM!E>VeOl{IzUm%XTl& zX`HKlpB~<|_~Gnz%6oiEZT7G5jPt#3()}Utj{#KS&6e^V;A544Eql%R-sGWkz~nu% z_GR)t)Qvq>E1Wec{IdC3<vo9&fB40!d(K?8ujcZD&!4PxrrcGNjcd_Od7yHt;ft>* z|Eu52`X>}do6iOxXTB`|m&U_bTgWNLwU>``<X<lZ9pf3Dn-zE3{H{wyHY?~b<jdx@ zb3T}zfASM_R_3o|RfldHg3rn{t-V}xXm_&acSW#!S>B&KvbKs7>frN2_qJtM*fxkg zpWSu#z4Dp*nO^MouSEX|F}$}$<lnr%9P#PLXGl1oNq!mm^N&+s(23yh&vPD3Dte}9 zd2D9wfx>VvnTw{S@lrM?XR`m9^SOA*yI0FU?qb$m_s(nauGwz_%HKTlJ>zuu(wg00 zbz1|=Cpm9^m#0>Gy-;+$^@T^T*2RaEU$?#zyYSk~CtjQ1t*Q@}C{?#KdHqf-sJwgK zlT!Amn7h1Puksc;-(6a1pZa#riPt8U^3{tBUilSeT)X?+^KNPAXRvLj7VrAK$@%VF z58WSswrBoo-01&t*X|23Hv&FaSgOX0KJASSI`?LZO!8T~2REh*x%>ai6I{7_ndY8% z4&AGFCkEbK%Tt>E?$+)6?7DcU6S$YW+cdfIZlhRux$@#&zav-d-mY&|e59ik<c-7S zcmK-oNizDyh3F8+)=mix72R)>ETP%vxXDpjvX?z&=M4QhhHE9YnXj*6O<ekS^3GR{ zYk4~Omj=z;$D-Zp)vVNHRIJ7OKR|-Fg)30Gcv`K)nyiGC++m&$H@p6%Tm8Pb`Tp(d z{l)j#Ki{+cZung9-R|%6_P)2=|9kiEclUQbzh~XU)wCe|?8*h}-We~x+BNT5Tv-l> z+8s9Oob$KC<i++bx|TTa+b)HG|4ql2yOkOAaoJ{lR}Xc4A^mOM;jH};xpUV)n=YmF zuVJ^=hvR%J!?!9HZdqY;;NyC&hZl}du{DW!8ESmwZjey9?_8UA2hzHBZ-2F;y6@QC z+*OC9=H2jI^`X$jZgS6#$rdrk?ivY|&$h0((|A^-T-WMd+>*lZhsC1hrB{1)oBp08 zST59ldPlV1qr58Ve(Mc0ALUK!+x`FN4(+#}e#9C*(h~rgz$H{3o&ISD^K8v`_trgL zrzm@~@z0u$>1Ap{&qL4FY%fxfEL1Pt(X)HD=bh5HLy!4#mhE_bt?+xARQc&J9Yfa3 z5y1=fKl7+eXcRvG`Hz8nVouO!QLTFqts3q`wf;F36t_Oh`O%3LMh6PFCd(L`_GKp@ zQmo9l{x*Hp?YeIw%bPAP&R6`oF_Z0lf5v2s-KOVK4Ii=`*qhb%`|DJe_lI7}=-*Pg z_dRRR>f}SKXI&1Cy_?Q?@9x_FEvI#?*R`5;ia$<B_Nma^KVP}xxX<H1O}rmY7w)*p zwfvWO$&&8xm*cvx{8*Z<@Q}wu-lr|jOGfhOZ0@~NEFN9+zG?UDq{Y`ypH=MTGN1hv z%oSShy?4*l2X93xE~<Upb>;MJj(g7H#d}?5AL%Z9;H00gUhzHtz+=W7wY_szfBm$o zq;M}w?AOWZ3&bR5lv_wvX%?o4RO)>RdejlEpZa@-`r|97Lsjha?E9a)Z}FU?_jS|s z2eQf^7WqCZT{%5op`v+ZjQ&Nnk4Z8+E}YgE+QV=1v4UZ?r+%UhTgivRFCSG!a#vnT z{=y@YwBWJw=jY9TPnEmJ?RDR|E^bwq`pTc7rGW>&GCelG>9{vzy4Rny)h&gG^e4Xl z_QR#_?jqkuHOrkCEnXi#+APd3b&PYr&xbPZJsFcL9LpKrr?6M-clxl-w*7OrS?6~5 z$GIzo?p<H;>*|zVW>BL0P|beO+M@BX>+B=dOK*w)sO@LovzqhXOeXzXDsdM|4^+oa z{jh3PqS2?_Z4Y9vp7`lH`-pXPC|gB-QNwq?rtdpHf?_MK;vY*zwd{kxS_iFNAGppw z(p~voj=f^P+Xub82Y;H*UdjKp;+=V|R_vbpOZZOu&ug5Ou;9PSd;XnOeY%AyBGr1w zBvtx$9G6V_T~ROj+~V+c&$>C)X5i!z+h=^o^+Vpe=io?^N#8O1fvwfVe&YqckB(Xt z7@pfO?ZI2Q!#`PPd+Lj4?A>D;8>4@9Ial2$o+~WO?*6LI`l@|BN#|SRykrVrFU^tv zoHD0sXWx_Knws<EFRB&px^g;SU{AMuAt<zBUp+PFy!WdR5l{Jodmb~N)4$<UwbSGE z)7Y1fs%FYQS<%_^(y=dvO^sFf=EL2)_D``e;+l$@#N;N)_wWB@wB)cNj}SO5e2Qz@ z9t{eZ*FpOGeLtLA@wloJl#&m$#;sGYVE2clh5Tz(J2id3T>5m^;&%oU^I3gcX3ms^ zb2Cz2EIl$YFlOfk?@r~sy;I&M&+7@+H=pol$Lsqx_KSQUm8_h8U$NpiILc#RJuT<F zXX*T>jyG3G|5zjU-a8&2@@!9n)A63z*H4`@7fqk`r+nJdJL1)Bla3uY)dn%%1=aZd z?w=mtnqFDwGW*EOAboSeJ<b0gfTQ5b>G#5W%;!CVdmvA(BK+^%&)jB{<L)i|T9iKP z#nPw$g7)8@zU9h`j}>g6BwkpXLvl-yc$H@1k+st|)t;GL`0A<HB>DCAozUF!iJj&B zHF3+hEuMSyzJ6+Fc|U71A|8Ho+}o*NP<Jrx(&^n><LqXuRn44UTho~S;7o!;U3f`? z(e==p{kG@cch$M9yZyEK&o0;5M_zu~z34aRJ>~kxAZItdJ5bK2w@>?*;lbOQpiKGp zVnu9C_!owQyML{p6A!X=zxFHTitqnhL0N%&*SlA{7tI&gbD0(7qILVUt-Nc~zXdmy zFZgJ$@YuO)UxCx?Bd=fWRyweI>VsU#;~y9KK03PR^`qU3+&S(oYqqI7nD)y2?&{yZ z?U$F_PmxSlxcWHrv-f!iCCQ9A$9_AnyZ3vNg;AHT_+uU+_dAbyHr4Lg-%~v2Vc?_# z|9-PWlBP`h4Yv>H#6Yg!C6j)`?}MJ@nd6cdz(t5e`U~}new*{)SiQ64>!*}iFP5q@ zUyD3dyD?oMljlp!B%ZxfER4D|P=h>K#oq3#4kTl}dit0pfAWEDv(D>F<Nh^0h%KM+ zTJ@GnTo1E&)z0PzclY%lXTIT6Rk{D#>A=ffub<9XqUzdz+&CdI!PDL7OVFbe8hcPn zzqu;*>+YZatb9wwZ+g{FmV?z#Jp06Rh1PrTz2o}9?oai)=^2wN4EbVSJk4t=|0)O0 zS3f6QJI$&3B6Y8-`Ol>D4wocu6jeeDUlj9V=@G&0ai_i+`X5_4eZR`j!iRd0khyX? zUU1Lt`LOgDFT96&|5JE+e5Y8k{_aU|i6DQqsxpzYYUY+Xpp<wj)nVUv(+_&<R{!|t zIOlz>t>?PiXZt_C7Rwb{e){{qZ$f*H{{|<(1=j2C{jTbI@D?2S-!k^--TPfN>p|@9 zxu7!i`qS$8^8$OCZ(D$p#)8-D?*0D7d(b)<oV`EoU0=(R|GzWb;aIy!?ZXzcPLOhD zmiJ4N!3E`+-Fo+a|583^{ZvqHe}eJX*<~;4F6-RN&x+e3ah^MNp0D|zUFix3d9Lj5 z|K1+6_q%Fgiby(o@i^b3PUe>-Bo_OO->6qS=K_~sea12h6~D_r6tZpc+#|uRcTDo1 z&j-2s3E+6#>Hhj@Xo!CMME2e59#(pVO8bO;zPhXKhxF{jKdomM#qZVaKK%dxQ-z1g zAJXUWZ(x+?*RuJ(^82CdU%%`T(0eYI9q4+{YHv<6uW2H4dr4);s=DwryM0NO&whPN z2(fs0-(~fD@vF*ztx6dG>CO=AzQ0D`?gfE5=K8ru-(Omwf26zpR`$o&SL#Z4{k7|k zpZ@J|xfq*H-SpP4CSM+Io)s*%|Jt+%vS)+Eb&l){`^<i3&z5a$^CJp_)80h%=Jy?4 zzt%Kj-;T<ITz~9$O~3KyR@2e#HANSlMDIP^a`4%8xjP%Se9b-kqrUsiwx6Xe-bUSN zF)j7Me^;DcFZ`<d^wY<syL&&MJ%0O|sLtOnyr*YNZ;hXRR$s|##)7|gX&<xmIS*MJ z*uQA+v1iw%LR-RL9yZ&*ZN<Lpugmyv{JEvPzj$kWLGRCs+ty7Vf~uOo%})G0Tl6Y> zE!T`^k$-MkSwFm{vM0Rtsn_m!^&97#<xO)p{w{6&Tk|9E^5wGqAA0r}7IFJU{M~iv zGviMFWuEdTpD$gzDLQYWxoe(d|6Tnj@0s3~FTTsKqA_F9-)o-svG*2FKU;NE|8GfL zcJ6zw{_jq2%TGMIzVPvTrMKb#73=mC{0%oc|0?a1*o=DT=BL&28xrqnJrlpx{ddKg z_zSKto6qhGlrG5pti7^E!eZ0c*Pq{gZ9lI6YR`3fWBs`LGkY}Ve)_d|QunX_mYX%% z!V0uS6Zp-ImRF>u{XWq4g<sa=o^$P#x|Iyo3j(KZnp;!f+I>a)ZKAHq`sdg6ZwG%} z`MY<;*FTRrzUyzdTjQgvy02jNRrShgKN5B?<X>$f=YQ~5%HOQ$ug{CWdhX8ZznXri zx%%)&&E2ogKlfT>DjB|F@z0tQzase$oSAR`KXTXS$HDXb50{Ca-@kwU<;Q&g>h$)U zKgG7{-F~gRw#x6Hf3V0kmkH=I{&h+9j{L!#+w#YjCTzR;P^<lB8hdQ}&9wH9>N9f7 zB+8p^rah00w&W|`w3Yd(!RFs5nQ|4^Fa4!_-X>ctV?hV!dGDpK4*!dsn6^31=3U5y zsejh=u6y!lhg`6H#QC41c8@LkqSnMl*5~a%Wbx*==&{uM>kaI`{e5(>bC0*oCi{** zPk)Qr*;W6Y<G&{U+xxD$>D7N_!q@%#v~I@byZn_^_UnE;J(28So32rD;Yr<!1@cl? zi`imK^|-H0uaBKNA)f0>dd~ich3nT#IJds#e8m6Td&d2)r!Nn&KU-^h(xK_o>?iA& zRQO!@s`9b@w%q)Q(<X7ZAC&*1ow(1*T<v(j_pt}E+0z?Yo^PMzA?x->`t|yUzaH4} zJ^PT#xpm6-?Z+N}ZA}+r{#W(v`R1P2JNE=m&NwsOJZ!G+9{z`mZLemo7TTJ$pXvVg zH7;|XUTLhH(7$hLuybl{p^UX=#fM6_pbrl|Pmb!$ubDSl<eyeA^QYd-LpCX!AD8BD zeq5Tl`EhB|=HxrK-blEcS<f?{efP7(+|u*ON1FSOcd*yTe$L4_Eg#TleE;z0j7Nt* zXCy8CV{|_G=bV|}KG@8P(A<CKbA(;`GFzK|wXjqApKYd{pP9*jesSm2Pp57ApBAUx z!ql>t=a^)ISL*#KecPVu+b!4pR<rrWZ$kq)&R|3Pn||y59#U?5y2qa}BIl!U;+ESJ z%|A?@yxu%%iIk1Uz2HYYr!4$h{ht@7Yy7Xa``7BE^=DPfug~gPhx6^j&DZqW{5fn} zx8FW>!Ji)stAGFa{HKsrXP$k#wEf|`^3_a%wm<L7ADF!5&J?cwOiOO>ERE3q|L6BN z&E}7v{iE&Yem1}KUH;|A=-1EpZ+gyu^MMw_^{JI!UGfW<dxZL3a;^I=e{KF-vwM<l z^&XG&LFbQqJid9XyXU>v@10L1Z%;E!y0uMq`^oFqXV=?KyMO-anQ8m$Q%hI<`DR&n zXVtf_Dc!;M_2x0|`?9CNuHf|NCZ7*WpSON)jGiZ+(xh*zKZpO$r#%Y7H7_e4);yT@ zoOR}d(?OL#?I+z;kN$-?xhLvuk<4~Mxk=NeRIe)frfKiDWbXaDH=FspQg()<dT&eF zxuh#*g=o1)@0L5MZ}lX#LMxl+6rD2MzQ-|6k^f<GoWe=rC(H&C3l6ewiJBxe`N*`y zg}<3E{56$2AYdFV_%}Cr<J4`pX02%{GvZU!3rjLd>hSL1?squRJb_)2f04$V=|!?F ze;*XRWxsumZ(nZer?M^195*ZfJ^X9G@!0OfljgcVr>P1H-n-QE`{i$UTN~N?-F@eO zzuB+9&;IMb*yHQ7f5)DWzy4?a?!W7v@6Y~yz4qUF>;LOMuZJ+j>ZkgC(G1V}Ir)ax z-dBhJFZIt>b9()HTX1rm`0jN(Zu~jFd+sdR>pQr@|Igcc*Y$JZ&+?09yH8zT_hVi5 z_vLcpQ?I{@xAyn3JsxAx&#tdG=YHOYM~8l99_r?PzFmCJj)J<`2SH5fJv%<kXWZQ} z|Fqoo)tgSet2|PCb;tY5r7z!y&iViS=<Q>>d-lIQZB_Ik+%0qN-`u$sw{o3ooNLa` z;rLmw@n^!Zs>xN;KNpLhKd<+=^5!%9AFu27+4nzxxnW;P+gx{>uNkkeAF5MGE)|_` ze)!j=*AHy2g?FTPEblw;Dr)-gm!W6QUk%)6bxZH_Q>8@}H-E6yr;5cKeLmm!)9%wX z9KXM-8GkGM-SX$hj*t7^T-$YK`e}*Xr^VJkSbt_y={)&EKg<4U8$F3XVQ;)zFWPR# zzV@mP2PAkvO>jrfdHdL3)uR99ti5f_Pj3JGu2}5<PwTw!{~x~ptUQ0^)yJ5R&#OYi zzVh5xU(<E!=j&Z_=6_EA{7^Zr{GYs>VSWE<vGaOATb>Kf&3<TeVWUBI?6c)BkMH{W zV13V((%OG-ivAt0TNR#p!@pGLOw{zBnZGvX+5XU0-g>TXSDw$=GR1wbkDI?)Z&iHg z->T%qYrA6n745(JwEVe(Vp533|5TY>XWBRHe-$eIEnJp+v)HH0J;!doR-BjK|FBf* zVSBvWMf-rdf2%cq8K0^Ty!XedtIp-;H}k+R=2Pky-}$f8^{?xb{FL)`(ypSX?g!Sn z{5<;pg4k1ijsH$J_sP1>U;Kyj>3og<&O2+>yZpqy9-Lcf`(8JG<KC)&IZ^sISHJrD zVu$*Kr@IepMd`R-{+MCcH|^@lP4gV(HlNJde=pVZ()q<NFFKmGGnAItB<?w_lyv%L z;uiZ#(@wdh6ICWJ)phb-J5O8jYeB-wRnKdux$>ud-hS0Wa+6I}i0=H5-;0kfx;I~} zHZ0(1!`GFIQkYjsY?`ETX$G&dugR<{m%BD91x^hK<qFkQ7M-GUYp(C~&o^CKJW5}# zK2>m`L~`0HqZ}<yneC=mZ91o}RXMllW}>OQ?(4^^ByT^No056zQi_1E+6AS&lL{NR zI<NE9&As{jR!`Pvi^ow?PgVL|qorQy9DK7-x7U1&<#oPA`to<xlhawHr_2c5W<B%m zzEuAD|8E$be@?o3`RJrAXAIL*-J-kPe6NWZdTV^HX^^w5x^nsM&$}Nh;&jC>HN9c4 z-COc<zMQN?Zu}=lzW!<c?(FT8y%_2{>IMAjq}DPC%g^|A;0*gSyA2;2YvnBh9yqVL zcJar{*H!tM8}hfPC<T3Q+Tzrpz4`v><8N52dtP4In5D)YJo($~ud~zFxZFE^bdI<{ z#wsqG-Y*GO+ur`LTC~>d_{PweFScsQZVp?je09~WA2w<2pKt1YS~2h4{rQRB58k*) zx#V?Rt>QmjJWZ7My5pHsTTEIPDyC?u?1`K<!y}6;OIqY?k+9|>VKd99v^Ni4EJ-=P ztly3O>I_M%s}jN!_!dp~pT9voX<5Xl%-!eHbb^Ji>OVZO;H3)7(>(%HKF6F$&a{5I ztvD<C)s(j^$={@J*Cg%CeaSgLSnuxKKZRfN3^gLdw#D&An5pb`Zsgr_;92FCDPrGe zIaY|ha4g_3+_7xZh7?QRt#(dlzgJj#oxGx9Q`i&uXvWiDDu+HgfA@aVklNTH`f*BZ zbWo6wsJmub$eEQ90UP~~GKzX@@paBP7P2I6>6O(}s-_054|)~qwbyH<v}URD;=GhA zy*;}o2AUhaa&x<TVuiFMub<oAQ!BzPziKUydwON{oT{n8>x*86`t3cn5+ZnUBG;>A z$J!-nE2duKxc}jc)Z^;8(|(wxd#~l>+?F^YNt#V_+dZ$1r5;^t-Gg#sCncSZ?yw47 z>T&nNO0B@GaP`G5D`V%*W?ITqqUSZ?($$|T0ds|emN>thGeP5P;PV!jmHk%gDqhLX z?w2eTZ@ro`K`AvLK)%~7KQ%c!#j2k5>%=CJ;D4JcxAqG!y?Z!#+7#E#3)KsmR^HD$ z#_aK`K$GF9^RC0+jsNgAK4<ydDV{D@Qo{ed_NVdY8+EPBoH7@Jyq5HM>{R{uv_Vx} z-nUDJS$$e?!jvUfG#_So%{}y3|JKF!w{-_gzq}A=3Hr6b_CZU~uNk%iWiOq#eej?A zxM_z)YzUKtlxbwt(o0U+A!!-BGp{tctny#dsA?K`C0JpSuA*2=*A6Yy0-t&RE4X}; zrT)m&OE2rRyu9grS7Yb<MWNLkoJ~PXdq3`9{Nl`m^ZXLo^Fn&;miKN=pLEenSIl|o zHhbsNTc<BC-hO<_yX$hHQCE5F*1J7^#y{uV!9M@ymFDuheD+rT*>rog`l_kF(%5<n zTl{OdH{9ah8#S}6daGOR-l(<Q|Jb?y-CHkyI_qA9z;7P&O+q2l!kSLq@w$*5oGYPS zy~=cxP>6S$>WZ)nnFgKp9|WGRn62r4H^lPQvr~cQk$t;v7G3e3zF2Nw=XCu5{`duQ z`y6a*8moRVef_}t>LK@)!{%Q<K^WpI+EG-b#i1*OsJMUUG=za}SaiitxTz>A_Ll6; z*_*OAW^c$|pS>=%HXB!5U0C;P0@I6mp$+dmSzpWxZg{83`eI&S!#hsa7xVme(#-uE z^5!wzwPD;<$yD;0<;6433ulEF%vKlMI9uHTt7P|eumViUo8Lbo^dn32)nFJ8kzU%5 z-HzfHkD<<hsDrvMr&3Nf;r7MptGmPU^h&lel?%N3>T>AUTW_Pf$dF@iXG<vZKCzzG zvj3yUOKY)}m)B=q*e+1tnC*P_YEziW^!liaF;N+=#raD_&zd%enV3tgb&7qQ<yt&( zwdmQYjbSF`fl-OotM1vp5ZktV<=d6E%XU4_Z4bzo-SQ|z{5Egt`O9S+rB_^M*wy%U zd6npb=o^Be>zQwfebZU_I{xl~zJf&eh*+lAdfT2K)zseh{FPBee`0mqjhzYn7q=JR zpJ!6-l6=7Bj-TX_C5L7huQcfJY<2X};#q&@b<jEQ6UQbvnYoE<GF&j>?MI#<CUXzY zn+l<yWDh-1Njbc40`G4pvp3u~H|Rq-*S?+fmHlCEbbo7!m!#L*m0|0yWKMQF99)*@ ze)pu%<5zR#LbIZ(e7@H8Z;MIwh+Q;k+AFE4TH%I4`TsM#ZH*79-pM}c?SEA(^ZYus zZ5|G*TPvU6D$C~AySmnP&6Gn@$K<Zb9eAhz>B6i>-_B&`Y&jmIEUi8}Av(&g<IbjI zGK<cB|Nd^GxkY5>>~H@JUhSPH8`6Dmwu$wMWmoIozt(?uzxvOL?KXS%hWk(Z{HkoL zjnwtUFF%#tPBFaycCVa&&-sh*WcJIs+tw`nxUBrss}=Kl#P=%Jl_!1saIswH+~cOB zKTH-LxBoBctJW>|?>L|O;-~j=>NdQnjhF8~wt1O%zD-nLl|;d%$8A5_b24S7uQ;K9 z$F5EHr{G=Is8y?11#LOQ|8>X7ldP_nQa^uNee=iN<AymkZ9gvZ&N4AS|MOX}^GvDP z{K+-THQFa-r<Z@L>an?h+q>%YMa5-LSA3U|ueZBD*VgsZ{#kQ7R2%hej!vI{{Kt~w z_4h=xTV?yo?)QD$IEnw2a7~Vhr0@5eA6x2QREEWWZ4du*`FQ*NJC^rSE(@@{Ptu-Q z+swc7T|+2;tE%l^)$IQI?o;mKxz8U*<*|O>7xks9VuJYJ9XF*9NZ;Sq6(QrB&9nK% z!_UWft3UP2nZG$@KkLp0?f*5ohu6j1{?@y_Cwo`r^_tJ?jy{Y1EnQYy@c*8;blKkW z?<XgV&))R+*UiuDPutom?;mWdohWv)E%swh!@O(xtADyi-;TchBiA)L+WJrXsc+}h z&GYUFO_l!9dFrgRdFs<^z0xvSyWi(5R_3beT=e#ZS-R1|y~6en@15%t+P*#TsZe<5 f|CR%;Kjqs4o<@Dl{^fo5+_&u?zWkRw(q97r?P*-W literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.reloc b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.reloc new file mode 100644 index 0000000000000000000000000000000000000000..319a188acc6b6247f32d5c84b8a9ea5a7380b202 GIT binary patch literal 116468 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�YDR$2{!x|Q% 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⪌;Pp80?8&Ex+hpHA3o+W+z0nNxSQGwP4uIi~sB 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 H>S;CrydB!x literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.rlx b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.rlx new file mode 100644 index 0000000..d741599 --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.rlx @@ -0,0 +1,12 @@ + +{ + crc : 10053442714840703673 , + ccp_crc : 0 , + cmdline : " --incr --debug typical --relax --mt 8 -L xil_defaultlib -L unisims_ver -L unimacro_ver -L secureip -L xpm --snapshot tb_firUnit_behav xil_defaultlib.tb_firUnit xil_defaultlib.glbl" , + buildDate : "May 22 2024" , + buildTime : "18:54:44" , + linkCmd : "/usr/bin/gcc -Wa,-W -O -fPIC -m64 -Wl,--no-as-needed -Wl,--unresolved-symbols=ignore-all -o \"xsim.dir/tb_firUnit_behav/xsimk\" \"xsim.dir/tb_firUnit_behav/obj/xsim_0.lnx64.o\" \"xsim.dir/tb_firUnit_behav/obj/xsim_1.lnx64.o\" -L\"/opt/img/Vivado2024.1/Vivado/2024.1/lib/lnx64.o\" -lrdi_simulator_kernel -L/opt/img/Vivado2024.1/Vivado/2024.1/lib/lnx64.o/../../tps/lnx64/gcc-9.3.0/bin/../lib64 -Wl,--disable-new-dtags -Wl,-rpath=/opt/img/Vivado2024.1/Vivado/2024.1/lib/lnx64.o/../../tps/lnx64/gcc-9.3.0/bin/../lib64 -lrdi_simbridge_kernel" , + aggregate_nets : + [ + ] +} \ No newline at end of file diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.rtti b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.rtti new file mode 100644 index 0000000000000000000000000000000000000000..405d1122e815b13e5604b5c536bf5312533c7537 GIT binary patch literal 633 zcma#Z%*o8FQ1A@S%vA`93~*I&^Yn35FfcG=U~oV2b6+|q0|SF069a=50|Nsy1H*!x z{PfIZ237_LU}RumU}0cjFkmobh+>EU3o0`(faDhxCnx447R6`gm4LVmj0_A7|NsB5 z2Wc^6U|<knU|0YWWMF1k0M-YRfMKuz0|Udq|NsBb{r~^J1yn<3UP)?tY7y8#Z2IJ( z8vjG}c|lzr9O4r1<L~b2%)rFJ0LIJ=3=AN@sfVgFs7I(Xs2iv=s2i#?s7I+YsE4aF zsQaihsC%e0sOzeOUFnTvQYd9cDL@0r&oLx4$k7Mv9FV(Vq2mbkEZouYVXn?0{y|`c zj0_9Fz6XUA8v_H_Z6M7c3=6GTs9Qtgi%SwqQo;H_{szSw2!}g*hQtRu`Ud#8G6aYC z2e~o?1o=C=1_yikxySqX`v)-ihlT`%hA@B?y85}m6oV|)0NKRAzz_tbOQG~KD18q~ TYk(9pFfbHD>B&&~3X}!_Pc>`| literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.svtype b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.svtype new file mode 100644 index 0000000000000000000000000000000000000000..57a1c98a5f6d4cad2df1f5c52fb8d6f99ce7db99 GIT binary patch literal 78 zcmcCwfB+^21_nk328RFt|NjTk42&!c3=GU5Q4kj<%*d#~z`!6666S$uWKf3EAPNAb CB?z+s literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.type b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.type new file mode 100644 index 0000000000000000000000000000000000000000..b6c17a51f0760d7896f3e40ea46dbc6815759bd4 GIT binary patch literal 7552 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 E0NInpCjbBd literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.xdbg b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsim.xdbg new file mode 100644 index 0000000000000000000000000000000000000000..856343384d65338b1a24df88fe724ff26b9e29ab GIT binary patch literal 23272 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 z%0D=YT|VIuME{CY*yTS!<vT85mv1->(LdoTc6os#5cwImu*)xi$|u~%E^lxYqTk^u zcKHKP`58a3%Lg2T=(qTXUH$=7{suGl^<4$WA^JCb!LFa-1Vny<G<N+Hpz<>mu*)l) zgy>(Oid}vKRDOjPc6o<W5d9nUvCCh8%4djUmrpni(O+PTUH$`9zQPH+e8U-t{swpK z@&ace@*O_d<rhHZCj?@bH#i5;KO+pg`~j%^f@tjW0p}t5S0rGUe*l%=kcwTt-~vSd zjx6l*3>P8t9+ueUCqU&ZDzM8dT!QEiD8Vkj0V>Z?i(TH~GDLqx4|e$rP<f8o*yR(h zK=dD2j9vZ%RK8*jcKL>@5d9pxvC9iwgUHV~iCumHR9@o-c6o#A5d9AxV3$7tm7nnv zyL`Y6i2i_2*ySHU<vD(1moK;p(LaL|Ha?A7KQY{b$ZJSom!ANY-=T(GUg0)GzlSMy z`3+Ec20QHX4tF5>cer7fzW|jl@W(E{p%|iHBLcg;LkUEFM;dnd3s8BFQta{xr4ao$ znz74&fXZh~g2_YFqql!v%s|LPR(heXuTHp$kcX}0KyE)xcz}?HjP#@GKkytO4;hI= zmDl)zkcae?QRO54BjmBQ&pOy(`(GgY7tsB;gBKx>t$p@F1R;;DeI_A;kjK_OYtTW+ zV{4ynFh<B@Yo9%^LdZjADpCC};DnHe%mkv!R|G-i(bw0&_CF{rf`lJT9@K^f#UCzt zP#EKrhlMXL{h%-g=`UhnU;xek7c9hXKQ4Kg{kY^|_T!RAw?ASve*4ko(d|c<N4Fnc z9^HQA_4^>b=<*Y`;CCOoJi7bP<w15Jhd;VJy8RC}<F_AO9^HO)d35_>^2q!5K<-=c z6;d9}I0&&HUEbjvL|)(scKHWT`Ho}Q<r}_3^fR2qF0b$dB42SDyZiyD{D-sH<r98F z^k-baF3<1_BLCnLR32@8KqR!V`~jQ4$04u41j+U2>rY~!`Y#ZW|3N@rff-^xtb9OE z9|5YU<qNF*faO1QdGz#wE{~o*(B;wXU!a2Desp<s`_bjm?MIhKx8K7Xzy0X)==P(_ zquY-zk8b}AFZ}kS%cI+mE{|?MOrDV;2<!gL8S#+x0g?xq4bu->f1r_vkO!p=bom>F z2zij-(B&7DA>^^uzYR4Ad2IFXg~yOq3&?%g>feM<2zhMvufR8mJS_dg+y|@QkoR|i z<Uklye!=9C*AIfi2ZXW7GcpFj_g{jtE^K|-4CwkXkh#bhWDYvt6j=at<|!7w2^KMA zA&|Ld$O1UbfyE^(%wTO3WWF&G=9m+q#)1enAa^4x!^VfDA7nRz^dR%WoAyA0P>jtS GkQ4y7^#$ty literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsimSettings.ini b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsimSettings.ini new file mode 100644 index 0000000..5f049d3 --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsimSettings.ini @@ -0,0 +1,50 @@ +[General] +ARRAY_DISPLAY_LIMIT=1024 +RADIX=hex +TIME_UNIT=ns +TRACE_LIMIT=65536 +VHDL_ENTITY_SCOPE_FILTER=true +VHDL_PACKAGE_SCOPE_FILTER=false +VHDL_BLOCK_SCOPE_FILTER=true +VHDL_PROCESS_SCOPE_FILTER=false +VHDL_PROCEDURE_SCOPE_FILTER=false +VERILOG_MODULE_SCOPE_FILTER=true +VERILOG_PACKAGE_SCOPE_FILTER=false +VERILOG_BLOCK_SCOPE_FILTER=false +VERILOG_TASK_SCOPE_FILTER=false +VERILOG_PROCESS_SCOPE_FILTER=false +INPUT_OBJECT_FILTER=true +OUTPUT_OBJECT_FILTER=true +INOUT_OBJECT_FILTER=true +INTERNAL_OBJECT_FILTER=true +CONSTANT_OBJECT_FILTER=true +VARIABLE_OBJECT_FILTER=true +INPUT_PROTOINST_FILTER=true +OUTPUT_PROTOINST_FILTER=true +INOUT_PROTOINST_FILTER=true +INTERNAL_PROTOINST_FILTER=true +CONSTANT_PROTOINST_FILTER=true +VARIABLE_PROTOINST_FILTER=true +SCOPE_NAME_COLUMN_WIDTH=117 +SCOPE_DESIGN_UNIT_COLUMN_WIDTH=162 +SCOPE_BLOCK_TYPE_COLUMN_WIDTH=103 +OBJECT_NAME_COLUMN_WIDTH=183 +OBJECT_VALUE_COLUMN_WIDTH=49 +OBJECT_DATA_TYPE_COLUMN_WIDTH=75 +PROCESS_NAME_COLUMN_WIDTH=75 +PROCESS_TYPE_COLUMN_WIDTH=75 +FRAME_INDEX_COLUMN_WIDTH=75 +FRAME_NAME_COLUMN_WIDTH=75 +FRAME_FILE_NAME_COLUMN_WIDTH=75 +FRAME_LINE_NUM_COLUMN_WIDTH=75 +LOCAL_NAME_COLUMN_WIDTH=75 +LOCAL_VALUE_COLUMN_WIDTH=75 +LOCAL_DATA_TYPE_COLUMN_WIDTH=0 +PROTO_NAME_COLUMN_WIDTH=0 +PROTO_VALUE_COLUMN_WIDTH=0 +INPUT_LOCAL_FILTER=1 +OUTPUT_LOCAL_FILTER=1 +INOUT_LOCAL_FILTER=1 +INTERNAL_LOCAL_FILTER=1 +CONSTANT_LOCAL_FILTER=1 +VARIABLE_LOCAL_FILTER=1 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsimcrash.log b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsimcrash.log new file mode 100644 index 0000000..e69de29 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsimk b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsimk new file mode 100755 index 0000000000000000000000000000000000000000..46ae9050f79d9729623b307bd72622325cf237f6 GIT binary patch literal 245872 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 literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsimkernel.log b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsimkernel.log new file mode 100644 index 0000000..6dcda36 --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/tb_firUnit_behav/xsimkernel.log @@ -0,0 +1,7 @@ +Running: xsim.dir/tb_firUnit_behav/xsimk -simmode gui -wdb tb_firUnit_behav.wdb -simrunnum 0 -socket 45333 +Design successfully loaded +Design Loading Memory Usage: 21704 KB (Peak: 21712 KB) +Design Loading CPU Usage: 30 ms +Simulation completed +Simulation Memory Usage: 103960 KB (Peak: 160972 KB) +Simulation CPU Usage: 180 ms diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/controlunit.vdb b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/controlunit.vdb new file mode 100644 index 0000000000000000000000000000000000000000..48c54abb716744ad85987502e6a582b80c7dc323 GIT binary patch literal 8568 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 literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/firunit.vdb b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/firunit.vdb new file mode 100644 index 0000000000000000000000000000000000000000..15451a9f5bd947d440cff6dbb94c3b14e3249350 GIT binary patch literal 10248 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 S070<Of(D`xnREcH0R#Z*20Uv3 literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/glbl.sdb b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/glbl.sdb new file mode 100644 index 0000000000000000000000000000000000000000..949b56b44538c80c8dd70af79cc2e47a534f205c GIT binary patch literal 5635 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 V83O}+EEjF?7L<oU*a0;B3jn;YP_zI5 literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/operative@unit.sdb b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/operative@unit.sdb new file mode 100644 index 0000000000000000000000000000000000000000..c02de1ac750fe2b2a73641b47a3bac2cc30a64a4 GIT binary patch literal 172617 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�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 V^!D^}@N)%CVuFMj9E5V@nE}q&W?}#U literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/tb_firunit.vdb b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/tb_firunit.vdb new file mode 100644 index 0000000000000000000000000000000000000000..988b29a53a7bb466d60534485de0cf5e7e4fd964 GIT binary patch literal 7426 zcmWg2k!R*+U|7Jwz`)?}q)MKd<M7XY=^!2>gMtEs!~1<_b~&UoY~W(xb9VL1^2>De z_VjY_b4}yQa`n$lcJ+2}&eE$;4{x8py3rwufq~&a6gYS?FfcTCui{(W(r2-#rOUQy zF>iZwH*e#jg}j{|eH}fDN^Lxg`x;uBS1j(}=~%S5y`_t%e=)C|te~)j3|tBC!j7Ka zZeHq|Cd0tMzytClg99T2!v+>6Mh0sp=H|r<IlPh`z5E@sGFI5Aw�AoPr3mCAem# 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 literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/xil_defaultlib.rlx b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/xil_defaultlib.rlx new file mode 100644 index 0000000..ca1ef8f --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.dir/xil_defaultlib/xil_defaultlib.rlx @@ -0,0 +1,9 @@ +0.7 +2020.2 +May 22 2024 +18:54:44 +/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/proj/AudioProc.sim/sim_1/behav/xsim/glbl.v,1708598507,verilog,,,,glbl,,,,,,,, +/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/controlUnit.vhd,1740569012,vhdl,/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/firUnit.vhd,,,controlunit,,,,,,,, +/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/firUnit.vhd,1740562757,vhdl,/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/tb_firUnit.vhd,,,firunit,,,,,,,, +/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/processingUnitIP.v,1740562757,verilog,/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/firUnit.vhd,,,\operativeUnit\,,,../../../../AudioProc.ip_user_files/ipstatic,,,,, +/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/tb_firUnit.vhd,1740562757,vhdl,,,,tb_firunit,,,,,,,, diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.ini b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.ini new file mode 100644 index 0000000..65c1bae --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.ini @@ -0,0 +1,490 @@ +std=$RDI_DATADIR/xsim/vhdl/std +ieee=$RDI_DATADIR/xsim/vhdl/ieee +ieee_proposed=$RDI_DATADIR/xsim/vhdl/ieee_proposed +vl=$RDI_DATADIR/xsim/vhdl/vl +synopsys=$RDI_DATADIR/xsim/vhdl/synopsys +uvm=$RDI_DATADIR/xsim/system_verilog/uvm +secureip=$RDI_DATADIR/xsim/verilog/secureip +unisim=$RDI_DATADIR/xsim/vhdl/unisim +unimacro=$RDI_DATADIR/xsim/vhdl/unimacro +unifast=$RDI_DATADIR/xsim/vhdl/unifast +unisims_ver=$RDI_DATADIR/xsim/verilog/unisims_ver +unimacro_ver=$RDI_DATADIR/xsim/verilog/unimacro_ver +unifast_ver=$RDI_DATADIR/xsim/verilog/unifast_ver +simprims_ver=$RDI_DATADIR/xsim/verilog/simprims_ver +axi_epu_v1_0_4=$RDI_DATADIR/xsim/ip/axi_epu_v1_0_4 +xlconcat_v2_1_6=$RDI_DATADIR/xsim/ip/xlconcat_v2_1_6 +emb_fifo_gen_v1_0_5=$RDI_DATADIR/xsim/ip/emb_fifo_gen_v1_0_5 +mipi_csi2_tx_ctrl_v1_0_6=$RDI_DATADIR/xsim/ip/mipi_csi2_tx_ctrl_v1_0_6 +c_mux_bit_v12_0_9=$RDI_DATADIR/xsim/ip/c_mux_bit_v12_0_9 +smartconnect_v1_0=$RDI_DATADIR/xsim/ip/smartconnect_v1_0 +v_smpte_uhdsdi_tx_v1_0_4=$RDI_DATADIR/xsim/ip/v_smpte_uhdsdi_tx_v1_0_4 +cam_v3_0_0=$RDI_DATADIR/xsim/ip/cam_v3_0_0 +microblaze_v11_0_13=$RDI_DATADIR/xsim/ip/microblaze_v11_0_13 +axi_fifo_mm_s_v4_3_3=$RDI_DATADIR/xsim/ip/axi_fifo_mm_s_v4_3_3 +v_hdmi_rx1_v1_0_9=$RDI_DATADIR/xsim/ip/v_hdmi_rx1_v1_0_9 +video_frame_crc_v1_0_6=$RDI_DATADIR/xsim/ip/video_frame_crc_v1_0_6 +hdcp22_cipher_dp_v1_0_2=$RDI_DATADIR/xsim/ip/hdcp22_cipher_dp_v1_0_2 +generic_baseblocks_v2_1_2=$RDI_DATADIR/xsim/ip/generic_baseblocks_v2_1_2 +axis_clock_converter_v1_1_32=$RDI_DATADIR/xsim/ip/axis_clock_converter_v1_1_32 +psx_vip_v1_0_4=$RDI_DATADIR/xsim/ip/psx_vip_v1_0_4 +g975_efec_i4_v1_0_22=$RDI_DATADIR/xsim/ip/g975_efec_i4_v1_0_22 +axi_lite_ipif_v3_0_4=$RDI_DATADIR/xsim/ip/axi_lite_ipif_v3_0_4 +axis_dbg_stub_v1_0_1=$RDI_DATADIR/xsim/ip/axis_dbg_stub_v1_0_1 +ethernet_1_10_25g_v2_7_15=$RDI_DATADIR/xsim/ip/ethernet_1_10_25g_v2_7_15 +an_lt_v1_0_12=$RDI_DATADIR/xsim/ip/an_lt_v1_0_12 +hdmi_gt_controller_v1_0_13=$RDI_DATADIR/xsim/ip/hdmi_gt_controller_v1_0_13 +axi_cdma_v4_1_31=$RDI_DATADIR/xsim/ip/axi_cdma_v4_1_31 +xilinx_vip=$RDI_DATADIR/xsim/ip/xilinx_vip +videoaxi4s_bridge_v1_0_7=$RDI_DATADIR/xsim/ip/videoaxi4s_bridge_v1_0_7 +mdm_riscv_v1_0_2=$RDI_DATADIR/xsim/ip/mdm_riscv_v1_0_2 +axi_uartlite_v2_0_35=$RDI_DATADIR/xsim/ip/axi_uartlite_v2_0_35 +axi_perf_mon_v5_0_33=$RDI_DATADIR/xsim/ip/axi_perf_mon_v5_0_33 +axi_master_burst_v2_0_9=$RDI_DATADIR/xsim/ip/axi_master_burst_v2_0_9 +aie_ps_v1_0=$RDI_DATADIR/xsim/ip/aie_ps_v1_0 +ibert_lib_v1_0_11=$RDI_DATADIR/xsim/ip/ibert_lib_v1_0_11 +axi_datamover_v5_1_33=$RDI_DATADIR/xsim/ip/axi_datamover_v5_1_33 +noc_nps4_v1_0_0=$RDI_DATADIR/xsim/ip/noc_nps4_v1_0_0 +xbip_dsp48_addsub_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_dsp48_addsub_v3_0_9 +v_axi4s_vid_out_v4_0_18=$RDI_DATADIR/xsim/ip/v_axi4s_vid_out_v4_0_18 +axi_chip2chip_v5_0_22=$RDI_DATADIR/xsim/ip/axi_chip2chip_v5_0_22 +gtwizard_ultrascale_v1_7_18=$RDI_DATADIR/xsim/ip/gtwizard_ultrascale_v1_7_18 +axi_infrastructure_v1_1_0=$RDI_DATADIR/xsim/ip/axi_infrastructure_v1_1_0 +switch_core_top_v1_0_16=$RDI_DATADIR/xsim/ip/switch_core_top_v1_0_16 +vitis_net_p4_v2_1_0=$RDI_DATADIR/xsim/ip/vitis_net_p4_v2_1_0 +axi_sideband_util_v1_0_15=$RDI_DATADIR/xsim/ip/axi_sideband_util_v1_0_15 +axis_infrastructure_v1_1_1=$RDI_DATADIR/xsim/ip/axis_infrastructure_v1_1_1 +dist_mem_gen_v8_0_15=$RDI_DATADIR/xsim/ip/dist_mem_gen_v8_0_15 +shell_utils_addr_remap_v1_0_10=$RDI_DATADIR/xsim/ip/shell_utils_addr_remap_v1_0_10 +xbip_addsub_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_addsub_v3_0_9 +dds_compiler_v6_0_25=$RDI_DATADIR/xsim/ip/dds_compiler_v6_0_25 +bscan_axi_v1_0_2=$RDI_DATADIR/xsim/ip/bscan_axi_v1_0_2 +fifo_generator_v13_2_10=$RDI_DATADIR/xsim/ip/fifo_generator_v13_2_10 +dprx_fec_8b10b_v1_0_3=$RDI_DATADIR/xsim/ip/dprx_fec_8b10b_v1_0_3 +pcie_axi4lite_tap_v1_0_2=$RDI_DATADIR/xsim/ip/pcie_axi4lite_tap_v1_0_2 +av_pat_gen_v2_0_2=$RDI_DATADIR/xsim/ip/av_pat_gen_v2_0_2 +polar_v1_1_4=$RDI_DATADIR/xsim/ip/polar_v1_1_4 +v_tpg_v8_2_5=$RDI_DATADIR/xsim/ip/v_tpg_v8_2_5 +tcc_encoder_3gpplte_v4_0_19=$RDI_DATADIR/xsim/ip/tcc_encoder_3gpplte_v4_0_19 +axis_accelerator_adapter_v2_1_18=$RDI_DATADIR/xsim/ip/axis_accelerator_adapter_v2_1_18 +mem_pl_v1_0_2=$RDI_DATADIR/xsim/ip/mem_pl_v1_0_2 +perf_axi_tg_v1_0_13=$RDI_DATADIR/xsim/ip/perf_axi_tg_v1_0_13 +trace_hub_v1_1_0=$RDI_DATADIR/xsim/ip/trace_hub_v1_1_0 +axi_pcie_v2_9_11=$RDI_DATADIR/xsim/ip/axi_pcie_v2_9_11 +axi_emc_v3_0_31=$RDI_DATADIR/xsim/ip/axi_emc_v3_0_31 +tsn_endpoint_ethernet_mac_block_v1_0_16=$RDI_DATADIR/xsim/ip/tsn_endpoint_ethernet_mac_block_v1_0_16 +soft_ecc_proxy_v1_1_1=$RDI_DATADIR/xsim/ip/soft_ecc_proxy_v1_1_1 +axi_apb_bridge_v3_0_20=$RDI_DATADIR/xsim/ip/axi_apb_bridge_v3_0_20 +axis_broadcaster_v1_1_30=$RDI_DATADIR/xsim/ip/axis_broadcaster_v1_1_30 +axis_dwidth_converter_sc_v1_1=$RDI_DATADIR/xsim/ip/axis_dwidth_converter_sc_v1_1 +vid_edid_v1_0_2=$RDI_DATADIR/xsim/ip/vid_edid_v1_0_2 +noc_nidb_v1_0_0=$RDI_DATADIR/xsim/ip/noc_nidb_v1_0_0 +v_vid_in_axi4s_v5_0_4=$RDI_DATADIR/xsim/ip/v_vid_in_axi4s_v5_0_4 +v_dual_splitter_v1_0_11=$RDI_DATADIR/xsim/ip/v_dual_splitter_v1_0_11 +axis_ila_txns_cntr_v1_0_0=$RDI_DATADIR/xsim/ip/axis_ila_txns_cntr_v1_0_0 +pl_fileio_v1_0_0=$RDI_DATADIR/xsim/ip/pl_fileio_v1_0_0 +msm_cpp=$RDI_DATADIR/xsim/ip/msm_cpp +debug_tcp_server_v1=$RDI_DATADIR/xsim/ip/debug_tcp_server_v1 +v_frmbuf_wr_v2_5_2=$RDI_DATADIR/xsim/ip/v_frmbuf_wr_v2_5_2 +v_smpte_uhdsdi_rx_v1_0_3=$RDI_DATADIR/xsim/ip/v_smpte_uhdsdi_rx_v1_0_3 +mpegtsmux_v1_1_9=$RDI_DATADIR/xsim/ip/mpegtsmux_v1_1_9 +noc_nps_v1_0_1=$RDI_DATADIR/xsim/ip/noc_nps_v1_0_1 +v_multi_scaler_v1_2_6=$RDI_DATADIR/xsim/ip/v_multi_scaler_v1_2_6 +x5io_wizard_v1_0_4=$RDI_DATADIR/xsim/ip/x5io_wizard_v1_0_4 +axi_remapper_rx_v1_0_2=$RDI_DATADIR/xsim/ip/axi_remapper_rx_v1_0_2 +emu_perf_common_v1_0=$RDI_DATADIR/xsim/ip/emu_perf_common_v1_0 +sem_ultra_v3_1_26=$RDI_DATADIR/xsim/ip/sem_ultra_v3_1_26 +axi_utils_v2_0_9=$RDI_DATADIR/xsim/ip/axi_utils_v2_0_9 +v_tc_v6_2_8=$RDI_DATADIR/xsim/ip/v_tc_v6_2_8 +ieee802d3_clause74_fec_v1_0_18=$RDI_DATADIR/xsim/ip/ieee802d3_clause74_fec_v1_0_18 +jesd204c_v4_2_14=$RDI_DATADIR/xsim/ip/jesd204c_v4_2_14 +xtlm=$RDI_DATADIR/xsim/ip/xtlm +hdmi_acr_ctrl_v1_0_3=$RDI_DATADIR/xsim/ip/hdmi_acr_ctrl_v1_0_3 +icap_arb_v1_0_2=$RDI_DATADIR/xsim/ip/icap_arb_v1_0_2 +nvme_tc_v3_0_6=$RDI_DATADIR/xsim/ip/nvme_tc_v3_0_6 +axi4svideo_bridge_v1_0_18=$RDI_DATADIR/xsim/ip/axi4svideo_bridge_v1_0_18 +jtag_axi=$RDI_DATADIR/xsim/ip/jtag_axi +axi_intc_v4_1_19=$RDI_DATADIR/xsim/ip/axi_intc_v4_1_19 +v_demosaic_v1_1_11=$RDI_DATADIR/xsim/ip/v_demosaic_v1_1_11 +pcie_jtag_v1_0_1=$RDI_DATADIR/xsim/ip/pcie_jtag_v1_0_1 +xlslice_v1_0_4=$RDI_DATADIR/xsim/ip/xlslice_v1_0_4 +axi_vfifo_ctrl_v2_0_34=$RDI_DATADIR/xsim/ip/axi_vfifo_ctrl_v2_0_34 +gmii_to_rgmii_v4_1_14=$RDI_DATADIR/xsim/ip/gmii_to_rgmii_v4_1_14 +util_reduced_logic_v2_0_6=$RDI_DATADIR/xsim/ip/util_reduced_logic_v2_0_6 +nvmeha_v1_0_12=$RDI_DATADIR/xsim/ip/nvmeha_v1_0_12 +axi_c2c_v1_0_9=$RDI_DATADIR/xsim/ip/axi_c2c_v1_0_9 +ft_prach_v1_2_2=$RDI_DATADIR/xsim/ip/ft_prach_v1_2_2 +v_smpte_uhdsdi_v1_0_11=$RDI_DATADIR/xsim/ip/v_smpte_uhdsdi_v1_0_11 +axi_pmon_v1_0_1=$RDI_DATADIR/xsim/ip/axi_pmon_v1_0_1 +gtwizard_ultrascale_v1_6_16=$RDI_DATADIR/xsim/ip/gtwizard_ultrascale_v1_6_16 +gigantic_mux=$RDI_DATADIR/xsim/ip/gigantic_mux +displayport_v7_0_24=$RDI_DATADIR/xsim/ip/displayport_v7_0_24 +msm_adapters=$RDI_DATADIR/xsim/ip/msm_adapters +v_frmbuf_wr_v2_2_10=$RDI_DATADIR/xsim/ip/v_frmbuf_wr_v2_2_10 +fast_adapter_v1_0_8=$RDI_DATADIR/xsim/ip/fast_adapter_v1_0_8 +rst_vip_v1_0_6=$RDI_DATADIR/xsim/ip/rst_vip_v1_0_6 +v_hdmi_phy1_v1_0_12=$RDI_DATADIR/xsim/ip/v_hdmi_phy1_v1_0_12 +pcie_qdma_mailbox_v1_0_5=$RDI_DATADIR/xsim/ip/pcie_qdma_mailbox_v1_0_5 +pr_decoupler_v1_0_11=$RDI_DATADIR/xsim/ip/pr_decoupler_v1_0_11 +v_hdmi_tx1_v1_0_8=$RDI_DATADIR/xsim/ip/v_hdmi_tx1_v1_0_8 +processing_system7_v5_5_6=$RDI_DATADIR/xsim/ip/processing_system7_v5_5_6 +axis_cap_ctrl_v1_0_1=$RDI_DATADIR/xsim/ip/axis_cap_ctrl_v1_0_1 +common_rpc_v1=$RDI_DATADIR/xsim/ip/common_rpc_v1 +xtlm_ipc_v1_0=$RDI_DATADIR/xsim/ip/xtlm_ipc_v1_0 +v_tpg_v8_1_10=$RDI_DATADIR/xsim/ip/v_tpg_v8_1_10 +v_hcresampler_v1_1_11=$RDI_DATADIR/xsim/ip/v_hcresampler_v1_1_11 +axi_interface_monitor_v1_1_0=$RDI_DATADIR/xsim/ip/axi_interface_monitor_v1_1_0 +axi_intc_v4_1=$RDI_DATADIR/xsim/ip/axi_intc_v4_1 +mammoth_transcode_v1_0_2=$RDI_DATADIR/xsim/ip/mammoth_transcode_v1_0_2 +axi_timebase_wdt_v3_0_23=$RDI_DATADIR/xsim/ip/axi_timebase_wdt_v3_0_23 +floating_point_v7_0_23=$RDI_DATADIR/xsim/ip/floating_point_v7_0_23 +displayport_v9_0_9=$RDI_DATADIR/xsim/ip/displayport_v9_0_9 +noc_hbm_v1_0_0=$RDI_DATADIR/xsim/ip/noc_hbm_v1_0_0 +versal_cips_ps_vip_v1_0_9=$RDI_DATADIR/xsim/ip/versal_cips_ps_vip_v1_0_9 +amm_axi_bridge_v1_0_17=$RDI_DATADIR/xsim/ip/amm_axi_bridge_v1_0_17 +v_vid_gt_bridge_v2_0_5=$RDI_DATADIR/xsim/ip/v_vid_gt_bridge_v2_0_5 +v_gamma_lut_v1_1_11=$RDI_DATADIR/xsim/ip/v_gamma_lut_v1_1_11 +rld3_pl_v1_0_14=$RDI_DATADIR/xsim/ip/rld3_pl_v1_0_14 +l_ethernet_v3_3_10=$RDI_DATADIR/xsim/ip/l_ethernet_v3_3_10 +ernic_v4_0_3=$RDI_DATADIR/xsim/ip/ernic_v4_0_3 +fec_5g_common_v1_1_4=$RDI_DATADIR/xsim/ip/fec_5g_common_v1_1_4 +sim_qdma_sc_v1_0=$RDI_DATADIR/xsim/ip/sim_qdma_sc_v1_0 +dfx_bitstream_monitor_v1_0_5=$RDI_DATADIR/xsim/ip/dfx_bitstream_monitor_v1_0_5 +axi_mmu_v2_1_29=$RDI_DATADIR/xsim/ip/axi_mmu_v2_1_29 +v_sdi_rx_vid_bridge_v2_0_2=$RDI_DATADIR/xsim/ip/v_sdi_rx_vid_bridge_v2_0_2 +v_csc_v1_1_11=$RDI_DATADIR/xsim/ip/v_csc_v1_1_11 +usxgmii_v1_2_17=$RDI_DATADIR/xsim/ip/usxgmii_v1_2_17 +trace_s2mm_v2_0_1=$RDI_DATADIR/xsim/ip/trace_s2mm_v2_0_1 +ieee802d3_rs_fec_v2_0_22=$RDI_DATADIR/xsim/ip/ieee802d3_rs_fec_v2_0_22 +v_hdmi_tx_v3_0_4=$RDI_DATADIR/xsim/ip/v_hdmi_tx_v3_0_4 +ldpc_5gnr_v1_0_3=$RDI_DATADIR/xsim/ip/ldpc_5gnr_v1_0_3 +rama_v1_1_17_lib=$RDI_DATADIR/xsim/ip/rama_v1_1_17_lib +rs_decoder_v9_0_22=$RDI_DATADIR/xsim/ip/rs_decoder_v9_0_22 +ieee802d3_400g_rs_fec_v3_0_2=$RDI_DATADIR/xsim/ip/ieee802d3_400g_rs_fec_v3_0_2 +xscl=$RDI_DATADIR/xsim/ip/xscl +iomodule_v3_1_10=$RDI_DATADIR/xsim/ip/iomodule_v3_1_10 +axis_mem_v1_0_2=$RDI_DATADIR/xsim/ip/axis_mem_v1_0_2 +axi_tft_v2_0_28=$RDI_DATADIR/xsim/ip/axi_tft_v2_0_28 +fc32_rs_fec_v1_0_27=$RDI_DATADIR/xsim/ip/fc32_rs_fec_v1_0_27 +axi_remapper_tx_v1_0_2=$RDI_DATADIR/xsim/ip/axi_remapper_tx_v1_0_2 +dfx_axi_shutdown_manager_v1_0_3=$RDI_DATADIR/xsim/ip/dfx_axi_shutdown_manager_v1_0_3 +util_vector_logic_v2_0_4=$RDI_DATADIR/xsim/ip/util_vector_logic_v2_0_4 +axis_ila_intf_v1_0_2=$RDI_DATADIR/xsim/ip/axis_ila_intf_v1_0_2 +axi_amm_bridge_v1_0_21=$RDI_DATADIR/xsim/ip/axi_amm_bridge_v1_0_21 +xpm_cdc_gen_v1_0_4=$RDI_DATADIR/xsim/ip/xpm_cdc_gen_v1_0_4 +c_accum_v12_0_18=$RDI_DATADIR/xsim/ip/c_accum_v12_0_18 +cmac_v2_6_15=$RDI_DATADIR/xsim/ip/cmac_v2_6_15 +axi_firewall_v1_2_6=$RDI_DATADIR/xsim/ip/axi_firewall_v1_2_6 +dft_v4_2_8=$RDI_DATADIR/xsim/ip/dft_v4_2_8 +ernic_v3_1_5=$RDI_DATADIR/xsim/ip/ernic_v3_1_5 +xsdbs_v1_0_4=$RDI_DATADIR/xsim/ip/xsdbs_v1_0_4 +stm_v1_0=$RDI_DATADIR/xsim/ip/stm_v1_0 +axi_timer_v2_0_33=$RDI_DATADIR/xsim/ip/axi_timer_v2_0_33 +lmb_v10_v3_0_14=$RDI_DATADIR/xsim/ip/lmb_v10_v3_0_14 +v_deinterlacer_v5_1_4=$RDI_DATADIR/xsim/ip/v_deinterlacer_v5_1_4 +axis_data_fifo_v1_1_32=$RDI_DATADIR/xsim/ip/axis_data_fifo_v1_1_32 +hw_trace=$RDI_DATADIR/xsim/ip/hw_trace +sim_xdma_sc_v1=$RDI_DATADIR/xsim/ip/sim_xdma_sc_v1 +axi_vip_v1_1_17=$RDI_DATADIR/xsim/ip/axi_vip_v1_1_17 +mipi_dphy_v4_3_11=$RDI_DATADIR/xsim/ip/mipi_dphy_v4_3_11 +ieee802d3_50g_rs_fec_v2_0_17=$RDI_DATADIR/xsim/ip/ieee802d3_50g_rs_fec_v2_0_17 +xdfe_equalizer_v1_0_9=$RDI_DATADIR/xsim/ip/xdfe_equalizer_v1_0_9 +flexo_100g_rs_fec_v1_0_28=$RDI_DATADIR/xsim/ip/flexo_100g_rs_fec_v1_0_28 +v_uhdsdi_audio_v2_0_8=$RDI_DATADIR/xsim/ip/v_uhdsdi_audio_v2_0_8 +v_tc_v6_1_14=$RDI_DATADIR/xsim/ip/v_tc_v6_1_14 +ddr4_pl_phy_v1_0_2=$RDI_DATADIR/xsim/ip/ddr4_pl_phy_v1_0_2 +sem_v4_1_15=$RDI_DATADIR/xsim/ip/sem_v4_1_15 +c_shift_ram_v12_0_17=$RDI_DATADIR/xsim/ip/c_shift_ram_v12_0_17 +lib_pkg_v1_0_4=$RDI_DATADIR/xsim/ip/lib_pkg_v1_0_4 +bs_switch_v1_0_4=$RDI_DATADIR/xsim/ip/bs_switch_v1_0_4 +shell_utils_msp432_bsl_crc_gen_v1_0_2=$RDI_DATADIR/xsim/ip/shell_utils_msp432_bsl_crc_gen_v1_0_2 +axis_dbg_sync_v1_0_1=$RDI_DATADIR/xsim/ip/axis_dbg_sync_v1_0_1 +high_speed_selectio_wiz_v3_6_9=$RDI_DATADIR/xsim/ip/high_speed_selectio_wiz_v3_6_9 +emc_common_v3_0_7=$RDI_DATADIR/xsim/ip/emc_common_v3_0_7 +fir_compiler_v7_2_22=$RDI_DATADIR/xsim/ip/fir_compiler_v7_2_22 +microblaze_mcs_v2_3_7=$RDI_DATADIR/xsim/ip/microblaze_mcs_v2_3_7 +oran_radio_if_v3_2_0=$RDI_DATADIR/xsim/ip/oran_radio_if_v3_2_0 +i2s_transmitter_v1_0_8=$RDI_DATADIR/xsim/ip/i2s_transmitter_v1_0_8 +floating_point_v7_1_18=$RDI_DATADIR/xsim/ip/floating_point_v7_1_18 +sim_trig_v1_0_12=$RDI_DATADIR/xsim/ip/sim_trig_v1_0_12 +hbm2e_pl_v1_0_1=$RDI_DATADIR/xsim/ip/hbm2e_pl_v1_0_1 +axis_protocol_checker_v2_0_15=$RDI_DATADIR/xsim/ip/axis_protocol_checker_v2_0_15 +vitis_deadlock_detector_v1_0_2=$RDI_DATADIR/xsim/ip/vitis_deadlock_detector_v1_0_2 +axi_msg_v1_0_11=$RDI_DATADIR/xsim/ip/axi_msg_v1_0_11 +c_compare_v12_0_9=$RDI_DATADIR/xsim/ip/c_compare_v12_0_9 +c_mux_bus_v12_0_9=$RDI_DATADIR/xsim/ip/c_mux_bus_v12_0_9 +xsdbm_v3_0_2=$RDI_DATADIR/xsim/ip/xsdbm_v3_0_2 +rld3_pl_phy_v1_0_2=$RDI_DATADIR/xsim/ip/rld3_pl_phy_v1_0_2 +mpram_v1_0_4=$RDI_DATADIR/xsim/ip/mpram_v1_0_4 +oddr_v1_0_4=$RDI_DATADIR/xsim/ip/oddr_v1_0_4 +bs_mux_v1_0_1=$RDI_DATADIR/xsim/ip/bs_mux_v1_0_1 +ptp_1588_timer_syncer_v2_0_6=$RDI_DATADIR/xsim/ip/ptp_1588_timer_syncer_v2_0_6 +dfx_controller_v1_0_7=$RDI_DATADIR/xsim/ip/dfx_controller_v1_0_7 +noc_ncrb_v1_0_0=$RDI_DATADIR/xsim/ip/noc_ncrb_v1_0_0 +rs_toolbox_v9_0_13=$RDI_DATADIR/xsim/ip/rs_toolbox_v9_0_13 +pc_cfr_v8_0_2=$RDI_DATADIR/xsim/ip/pc_cfr_v8_0_2 +multi_channel_25g_rs_fec_v1_0_26=$RDI_DATADIR/xsim/ip/multi_channel_25g_rs_fec_v1_0_26 +lmb_bram_if_cntlr_v4_0_24=$RDI_DATADIR/xsim/ip/lmb_bram_if_cntlr_v4_0_24 +hdcp_keymngmt_blk_v1_0_2=$RDI_DATADIR/xsim/ip/hdcp_keymngmt_blk_v1_0_2 +axi_lite_ipif_v3_0=$RDI_DATADIR/xsim/ip/axi_lite_ipif_v3_0 +compact_gt_v1_0_17=$RDI_DATADIR/xsim/ip/compact_gt_v1_0_17 +v_vcresampler_v1_1_11=$RDI_DATADIR/xsim/ip/v_vcresampler_v1_1_11 +mipi_dsi2_rx_ctrl_v1_0_0=$RDI_DATADIR/xsim/ip/mipi_dsi2_rx_ctrl_v1_0_0 +axi_quad_spi_v3_2_30=$RDI_DATADIR/xsim/ip/axi_quad_spi_v3_2_30 +div_gen_v5_1_22=$RDI_DATADIR/xsim/ip/div_gen_v5_1_22 +v_frmbuf_rd_v2_2_10=$RDI_DATADIR/xsim/ip/v_frmbuf_rd_v2_2_10 +can_v5_1_3=$RDI_DATADIR/xsim/ip/can_v5_1_3 +axi_pcie3_v3_0_30=$RDI_DATADIR/xsim/ip/axi_pcie3_v3_0_30 +emb_mem_gen_v1_0_9=$RDI_DATADIR/xsim/ip/emb_mem_gen_v1_0_9 +noc2_xbr2x4_v1_0_0=$RDI_DATADIR/xsim/ip/noc2_xbr2x4_v1_0_0 +xbip_counter_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_counter_v3_0_9 +axi_jtag_v1_0_2=$RDI_DATADIR/xsim/ip/axi_jtag_v1_0_2 +tmr_manager_v1_0_12=$RDI_DATADIR/xsim/ip/tmr_manager_v1_0_12 +noc_nmu_sim_v1_0_0=$RDI_DATADIR/xsim/ip/noc_nmu_sim_v1_0_0 +mipi_csi2_rx_ctrl_v1_0_10=$RDI_DATADIR/xsim/ip/mipi_csi2_rx_ctrl_v1_0_10 +axi_bram_ctrl_v4_0_15=$RDI_DATADIR/xsim/ip/axi_bram_ctrl_v4_0_15 +axi_gpio_v2_0_33=$RDI_DATADIR/xsim/ip/axi_gpio_v2_0_33 +rs_encoder_v9_0_21=$RDI_DATADIR/xsim/ip/rs_encoder_v9_0_21 +rwd_tlmmodel_v1=$RDI_DATADIR/xsim/ip/rwd_tlmmodel_v1 +axi_bram_ctrl_v4_1_10=$RDI_DATADIR/xsim/ip/axi_bram_ctrl_v4_1_10 +uram_rd_back_v1_0_4=$RDI_DATADIR/xsim/ip/uram_rd_back_v1_0_4 +lib_fifo_v1_0_19=$RDI_DATADIR/xsim/ip/lib_fifo_v1_0_19 +canfd_v3_0_10=$RDI_DATADIR/xsim/ip/canfd_v3_0_10 +hdcp22_rng_v1_0_3=$RDI_DATADIR/xsim/ip/hdcp22_rng_v1_0_3 +xfft_v9_1_12=$RDI_DATADIR/xsim/ip/xfft_v9_1_12 +axi_memory_init_v1_0_12=$RDI_DATADIR/xsim/ip/axi_memory_init_v1_0_12 +common_cpp_v1_0=$RDI_DATADIR/xsim/ip/common_cpp_v1_0 +ai_pl_trig=$RDI_DATADIR/xsim/ip/ai_pl_trig +c_reg_fd_v12_0_9=$RDI_DATADIR/xsim/ip/c_reg_fd_v12_0_9 +axi_mm2s_mapper_v1_1_30=$RDI_DATADIR/xsim/ip/axi_mm2s_mapper_v1_1_30 +ldpc_v2_0_15=$RDI_DATADIR/xsim/ip/ldpc_v2_0_15 +sim_cpu_v1_0=$RDI_DATADIR/xsim/ip/sim_cpu_v1_0 +axi_data_fifo_v2_1_30=$RDI_DATADIR/xsim/ip/axi_data_fifo_v2_1_30 +g709_fec_v2_4_10=$RDI_DATADIR/xsim/ip/g709_fec_v2_4_10 +axi_mcdma_v1_1_12=$RDI_DATADIR/xsim/ip/axi_mcdma_v1_1_12 +axi_lmb_bridge_v1_0_3=$RDI_DATADIR/xsim/ip/axi_lmb_bridge_v1_0_3 +lte_fft_v2_1_10=$RDI_DATADIR/xsim/ip/lte_fft_v2_1_10 +axi_interconnect_v1_7_23=$RDI_DATADIR/xsim/ip/axi_interconnect_v1_7_23 +axi_dwidth_converter_v2_1_31=$RDI_DATADIR/xsim/ip/axi_dwidth_converter_v2_1_31 +axi_usb2_device_v5_0_32=$RDI_DATADIR/xsim/ip/axi_usb2_device_v5_0_32 +axi_hwicap_v3_0_35=$RDI_DATADIR/xsim/ip/axi_hwicap_v3_0_35 +ldpc_5gnr_lite_v1_0_2=$RDI_DATADIR/xsim/ip/ldpc_5gnr_lite_v1_0_2 +fifo_generator_v13_1_5=$RDI_DATADIR/xsim/ip/fifo_generator_v13_1_5 +axi_protocol_checker_v2_0_17=$RDI_DATADIR/xsim/ip/axi_protocol_checker_v2_0_17 +c_counter_binary_v12_0_19=$RDI_DATADIR/xsim/ip/c_counter_binary_v12_0_19 +axis_ila_pp_v1_0_2=$RDI_DATADIR/xsim/ip/axis_ila_pp_v1_0_2 +mem_tg_v1_0_13=$RDI_DATADIR/xsim/ip/mem_tg_v1_0_13 +xbip_utils_v3_0_13=$RDI_DATADIR/xsim/ip/xbip_utils_v3_0_13 +aie_xtlm_v1_0_0=$RDI_DATADIR/xsim/ip/aie_xtlm_v1_0_0 +xtlm_ap_ctrl_v1_0=$RDI_DATADIR/xsim/ip/xtlm_ap_ctrl_v1_0 +v_vid_in_axi4s_v4_0_11=$RDI_DATADIR/xsim/ip/v_vid_in_axi4s_v4_0_11 +cmac_usplus_v3_1_17=$RDI_DATADIR/xsim/ip/cmac_usplus_v3_1_17 +xdfe_common_v1_0_3=$RDI_DATADIR/xsim/ip/xdfe_common_v1_0_3 +viterbi_v9_1_17=$RDI_DATADIR/xsim/ip/viterbi_v9_1_17 +xdfe_nr_prach_v2_0_3=$RDI_DATADIR/xsim/ip/xdfe_nr_prach_v2_0_3 +v_smpte_sdi_v3_0_11=$RDI_DATADIR/xsim/ip/v_smpte_sdi_v3_0_11 +mdm_v3_2=$RDI_DATADIR/xsim/ip/mdm_v3_2 +clk_vip_v1_0_4=$RDI_DATADIR/xsim/ip/clk_vip_v1_0_4 +mdm_v3_2_26=$RDI_DATADIR/xsim/ip/mdm_v3_2_26 +xtlm_trace_model_v1_0=$RDI_DATADIR/xsim/ip/xtlm_trace_model_v1_0 +xbip_dsp48_multadd_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_dsp48_multadd_v3_0_9 +noc2_nsu_v1_0_1=$RDI_DATADIR/xsim/ip/noc2_nsu_v1_0_1 +timer_sync_1588_v1_2_5=$RDI_DATADIR/xsim/ip/timer_sync_1588_v1_2_5 +axis_ila_ct_v1_0_1=$RDI_DATADIR/xsim/ip/axis_ila_ct_v1_0_1 +dcmac_v2_4_0=$RDI_DATADIR/xsim/ip/dcmac_v2_4_0 +v_dp_axi4s_vid_out_v1_0_8=$RDI_DATADIR/xsim/ip/v_dp_axi4s_vid_out_v1_0_8 +xbip_dsp48_acc_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_dsp48_acc_v3_0_9 +noc2_xbr4x2_v1_0_0=$RDI_DATADIR/xsim/ip/noc2_xbr4x2_v1_0_0 +sd_fec_v1_1_14=$RDI_DATADIR/xsim/ip/sd_fec_v1_1_14 +xbip_accum_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_accum_v3_0_9 +displayport_v8_1_9=$RDI_DATADIR/xsim/ip/displayport_v8_1_9 +ilknf_v1_3_4=$RDI_DATADIR/xsim/ip/ilknf_v1_3_4 +v_letterbox_v1_1_11=$RDI_DATADIR/xsim/ip/v_letterbox_v1_1_11 +iomodule_v3_0=$RDI_DATADIR/xsim/ip/iomodule_v3_0 +dbg_intf=$RDI_DATADIR/xsim/ip/dbg_intf +cpm5_v1_0_16=$RDI_DATADIR/xsim/ip/cpm5_v1_0_16 +ieee802d3_25g_rs_fec_v1_0_30=$RDI_DATADIR/xsim/ip/ieee802d3_25g_rs_fec_v1_0_30 +jesd204_v7_2_20=$RDI_DATADIR/xsim/ip/jesd204_v7_2_20 +clk_gen_sim_v1_0_4=$RDI_DATADIR/xsim/ip/clk_gen_sim_v1_0_4 +g709_rs_decoder_v2_2_14=$RDI_DATADIR/xsim/ip/g709_rs_decoder_v2_2_14 +cpri_v8_11_20=$RDI_DATADIR/xsim/ip/cpri_v8_11_20 +ieee802d3_200g_rs_fec_v2_0_11=$RDI_DATADIR/xsim/ip/ieee802d3_200g_rs_fec_v2_0_11 +v_warp_init_v1_1_4=$RDI_DATADIR/xsim/ip/v_warp_init_v1_1_4 +v_hscaler_v1_1_11=$RDI_DATADIR/xsim/ip/v_hscaler_v1_1_11 +spdif_v2_0_29=$RDI_DATADIR/xsim/ip/spdif_v2_0_29 +func_emu_util_v1_0=$RDI_DATADIR/xsim/ip/func_emu_util_v1_0 +axi_uart16550_v2_0_33=$RDI_DATADIR/xsim/ip/axi_uart16550_v2_0_33 +axi_clock_converter_v2_1_30=$RDI_DATADIR/xsim/ip/axi_clock_converter_v2_1_30 +dprx_v1_0_4=$RDI_DATADIR/xsim/ip/dprx_v1_0_4 +mrmac_v2_3_0=$RDI_DATADIR/xsim/ip/mrmac_v2_3_0 +cic_compiler_v4_0_19=$RDI_DATADIR/xsim/ip/cic_compiler_v4_0_19 +c_gate_bit_v12_0_9=$RDI_DATADIR/xsim/ip/c_gate_bit_v12_0_9 +noc_sc_v1_0_0_legacy=$RDI_DATADIR/xsim/ip/noc_sc_v1_0_0_legacy +ten_gig_eth_pcs_pma_v6_0_27=$RDI_DATADIR/xsim/ip/ten_gig_eth_pcs_pma_v6_0_27 +xdfe_cc_filter_v1_1_4=$RDI_DATADIR/xsim/ip/xdfe_cc_filter_v1_1_4 +axi_crossbar_v2_1_32=$RDI_DATADIR/xsim/ip/axi_crossbar_v2_1_32 +axis_itct_v1_0_1=$RDI_DATADIR/xsim/ip/axis_itct_v1_0_1 +xbip_pipe_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_pipe_v3_0_9 +tsn_temac_v1_0_11=$RDI_DATADIR/xsim/ip/tsn_temac_v1_0_11 +lib_srl_fifo_v1_0_4=$RDI_DATADIR/xsim/ip/lib_srl_fifo_v1_0_4 +ecc_v2_0_16=$RDI_DATADIR/xsim/ip/ecc_v2_0_16 +mutex_v2_1_13=$RDI_DATADIR/xsim/ip/mutex_v2_1_13 +lmb_bram_if_cntlr_v4_0=$RDI_DATADIR/xsim/ip/lmb_bram_if_cntlr_v4_0 +ahblite_axi_bridge_v3_0_26=$RDI_DATADIR/xsim/ip/ahblite_axi_bridge_v3_0_26 +tmr_inject_v1_0_6=$RDI_DATADIR/xsim/ip/tmr_inject_v1_0_6 +qdriv_pl_phy_v1_0_2=$RDI_DATADIR/xsim/ip/qdriv_pl_phy_v1_0_2 +tcc_decoder_3gppmm_v2_0_27=$RDI_DATADIR/xsim/ip/tcc_decoder_3gppmm_v2_0_27 +ai_noc=$RDI_DATADIR/xsim/ip/ai_noc +util_idelay_ctrl_v1_0_4=$RDI_DATADIR/xsim/ip/util_idelay_ctrl_v1_0_4 +noc2_nps_v1_0_0=$RDI_DATADIR/xsim/ip/noc2_nps_v1_0_0 +etrnic_v1_1_8=$RDI_DATADIR/xsim/ip/etrnic_v1_1_8 +axi_ahblite_bridge_v3_0_28=$RDI_DATADIR/xsim/ip/axi_ahblite_bridge_v3_0_28 +ieee802d3_50g_rs_fec_v1_0_24=$RDI_DATADIR/xsim/ip/ieee802d3_50g_rs_fec_v1_0_24 +noc_hbm_nmu_sim_v1_0_0=$RDI_DATADIR/xsim/ip/noc_hbm_nmu_sim_v1_0_0 +noc_npp_rptr_v1_0_0=$RDI_DATADIR/xsim/ip/noc_npp_rptr_v1_0_0 +dfx_decoupler_v1_0_9=$RDI_DATADIR/xsim/ip/dfx_decoupler_v1_0_9 +dsp_macro_v1_0_6=$RDI_DATADIR/xsim/ip/dsp_macro_v1_0_6 +cpm5n_v1_0_8=$RDI_DATADIR/xsim/ip/cpm5n_v1_0_8 +axi_dma_v7_1_32=$RDI_DATADIR/xsim/ip/axi_dma_v7_1_32 +sim_ipc_multi_intf_v1_0=$RDI_DATADIR/xsim/ip/sim_ipc_multi_intf_v1_0 +hdcp_v1_0_5=$RDI_DATADIR/xsim/ip/hdcp_v1_0_5 +axi_epc_v2_0_34=$RDI_DATADIR/xsim/ip/axi_epc_v2_0_34 +tmr_comparator_v1_0_7=$RDI_DATADIR/xsim/ip/tmr_comparator_v1_0_7 +v_warp_filter_v1_1_4=$RDI_DATADIR/xsim/ip/v_warp_filter_v1_1_4 +ai_pl=$RDI_DATADIR/xsim/ip/ai_pl +xdfe_nlf_v1_1_1=$RDI_DATADIR/xsim/ip/xdfe_nlf_v1_1_1 +v_scenechange_v1_1_6=$RDI_DATADIR/xsim/ip/v_scenechange_v1_1_6 +vfb_v1_0_25=$RDI_DATADIR/xsim/ip/vfb_v1_0_25 +axis_interconnect_v1_1_23=$RDI_DATADIR/xsim/ip/axis_interconnect_v1_1_23 +xlconstant_v1_1_9=$RDI_DATADIR/xsim/ip/xlconstant_v1_1_9 +adc_dac_if_phy_v1_0_0=$RDI_DATADIR/xsim/ip/adc_dac_if_phy_v1_0_0 +mult_gen_v12_0_21=$RDI_DATADIR/xsim/ip/mult_gen_v12_0_21 +i2s_receiver_v1_0_8=$RDI_DATADIR/xsim/ip/i2s_receiver_v1_0_8 +qdriv_pl_v1_0_13=$RDI_DATADIR/xsim/ip/qdriv_pl_v1_0_13 +xbip_dsp48_wrapper_v3_0_6=$RDI_DATADIR/xsim/ip/xbip_dsp48_wrapper_v3_0_6 +lut_buffer_v2_0_1=$RDI_DATADIR/xsim/ip/lut_buffer_v2_0_1 +vid_phy_controller_v2_2_18=$RDI_DATADIR/xsim/ip/vid_phy_controller_v2_2_18 +advanced_io_wizard_phy_v1_0_3=$RDI_DATADIR/xsim/ip/advanced_io_wizard_phy_v1_0_3 +uhdsdi_gt_v2_1_4=$RDI_DATADIR/xsim/ip/uhdsdi_gt_v2_1_4 +axi_dbg_hub=$RDI_DATADIR/xsim/ip/axi_dbg_hub +anlt_subcore_ip_v1_0_2=$RDI_DATADIR/xsim/ip/anlt_subcore_ip_v1_0_2 +xxv_ethernet_v4_1_10=$RDI_DATADIR/xsim/ip/xxv_ethernet_v4_1_10 +cdcam_v1_1_0=$RDI_DATADIR/xsim/ip/cdcam_v1_1_0 +pci32_v5_0_13=$RDI_DATADIR/xsim/ip/pci32_v5_0_13 +v_mix_v5_2_9=$RDI_DATADIR/xsim/ip/v_mix_v5_2_9 +pci64_v5_0_12=$RDI_DATADIR/xsim/ip/pci64_v5_0_12 +in_system_ibert_v1_0_22=$RDI_DATADIR/xsim/ip/in_system_ibert_v1_0_22 +proc_sys_reset_v5_0_15=$RDI_DATADIR/xsim/ip/proc_sys_reset_v5_0_15 +axis_dwidth_converter_v1_1_30=$RDI_DATADIR/xsim/ip/axis_dwidth_converter_v1_1_30 +sim_ddr_v1_0=$RDI_DATADIR/xsim/ip/sim_ddr_v1_0 +sim_qdma_cpp_v1_0=$RDI_DATADIR/xsim/ip/sim_qdma_cpp_v1_0 +axi_traffic_gen_v3_0_17=$RDI_DATADIR/xsim/ip/axi_traffic_gen_v3_0_17 +v_hdmi_rx_v3_0_4=$RDI_DATADIR/xsim/ip/v_hdmi_rx_v3_0_4 +xdfe_resampler_v1_0_9=$RDI_DATADIR/xsim/ip/xdfe_resampler_v1_0_9 +zynq_ultra_ps_e_v3_3_12=$RDI_DATADIR/xsim/ip/zynq_ultra_ps_e_v3_3_12 +axi_i3c_v1_0_0=$RDI_DATADIR/xsim/ip/axi_i3c_v1_0_0 +g709_rs_encoder_v2_2_12=$RDI_DATADIR/xsim/ip/g709_rs_encoder_v2_2_12 +xpm=$RDI_DATADIR/xsim/ip/xpm +dptx_v1_0_4=$RDI_DATADIR/xsim/ip/dptx_v1_0_4 +v_axi4s_remap_v1_1_10=$RDI_DATADIR/xsim/ip/v_axi4s_remap_v1_1_10 +tri_mode_ethernet_mac_v9_0_32=$RDI_DATADIR/xsim/ip/tri_mode_ethernet_mac_v9_0_32 +xbip_bram18k_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_bram18k_v3_0_9 +shell_utils_build_info_v2_0_0=$RDI_DATADIR/xsim/ip/shell_utils_build_info_v2_0_0 +cordic_v6_0_22=$RDI_DATADIR/xsim/ip/cordic_v6_0_22 +sim_xdma_cpp_v1=$RDI_DATADIR/xsim/ip/sim_xdma_cpp_v1 +axi_hbicap_v1_0_7=$RDI_DATADIR/xsim/ip/axi_hbicap_v1_0_7 +zynq_ultra_ps_e_vip_v1_0_17=$RDI_DATADIR/xsim/ip/zynq_ultra_ps_e_vip_v1_0_17 +gtwizard_ultrascale_v1_5_4=$RDI_DATADIR/xsim/ip/gtwizard_ultrascale_v1_5_4 +remote_port_c_v4=$RDI_DATADIR/xsim/ip/remote_port_c_v4 +axi_vdma_v6_3_19=$RDI_DATADIR/xsim/ip/axi_vdma_v6_3_19 +x5io_wizard_phy_v1_0_1=$RDI_DATADIR/xsim/ip/x5io_wizard_phy_v1_0_1 +tcc_encoder_3gpp_v5_0_22=$RDI_DATADIR/xsim/ip/tcc_encoder_3gpp_v5_0_22 +axis_combiner_v1_1_29=$RDI_DATADIR/xsim/ip/axis_combiner_v1_1_29 +microblaze_v9_5_5=$RDI_DATADIR/xsim/ip/microblaze_v9_5_5 +advanced_io_wizard_v1_0_13=$RDI_DATADIR/xsim/ip/advanced_io_wizard_v1_0_13 +lib_cdc_v1_0_3=$RDI_DATADIR/xsim/ip/lib_cdc_v1_0_3 +axis_ila_adv_trig_v1_0_1=$RDI_DATADIR/xsim/ip/axis_ila_adv_trig_v1_0_1 +qdma_v5_0_9=$RDI_DATADIR/xsim/ip/qdma_v5_0_9 +ddr4_pl_v1_0_14=$RDI_DATADIR/xsim/ip/ddr4_pl_v1_0_14 +noc_mc_ddr5_phy_v1_0_1=$RDI_DATADIR/xsim/ip/noc_mc_ddr5_phy_v1_0_1 +xtlm_simple_interconnect_v1_0=$RDI_DATADIR/xsim/ip/xtlm_simple_interconnect_v1_0 +axi_sg_v4_1_18=$RDI_DATADIR/xsim/ip/axi_sg_v4_1_18 +xdfe_cc_mixer_v2_0_4=$RDI_DATADIR/xsim/ip/xdfe_cc_mixer_v2_0_4 +processing_system7_vip_v1_0_19=$RDI_DATADIR/xsim/ip/processing_system7_vip_v1_0_19 +mipi_dsi_tx_ctrl_v1_0_9=$RDI_DATADIR/xsim/ip/mipi_dsi_tx_ctrl_v1_0_9 +microblaze_riscv_v1_0_2=$RDI_DATADIR/xsim/ip/microblaze_riscv_v1_0_2 +cpm4_v1_0_16=$RDI_DATADIR/xsim/ip/cpm4_v1_0_16 +xbip_multadd_v3_0_20=$RDI_DATADIR/xsim/ip/xbip_multadd_v3_0_20 +axis_data_fifo_v2_0_13=$RDI_DATADIR/xsim/ip/axis_data_fifo_v2_0_13 +ltlib_v1_0_2=$RDI_DATADIR/xsim/ip/ltlib_v1_0_2 +axis_switch_sc_v1_1=$RDI_DATADIR/xsim/ip/axis_switch_sc_v1_1 +sim_clk_gen_v1_0_4=$RDI_DATADIR/xsim/ip/sim_clk_gen_v1_0_4 +xdfe_fft_v1_0_7=$RDI_DATADIR/xsim/ip/xdfe_fft_v1_0_7 +hsdp_trace_v2_0_2=$RDI_DATADIR/xsim/ip/hsdp_trace_v2_0_2 +blk_mem_gen_v8_4_8=$RDI_DATADIR/xsim/ip/blk_mem_gen_v8_4_8 +cam_blk_lib_v1_1_0=$RDI_DATADIR/xsim/ip/cam_blk_lib_v1_1_0 +tmr_voter_v1_0_6=$RDI_DATADIR/xsim/ip/tmr_voter_v1_0_6 +util_ff_v1_0_3=$RDI_DATADIR/xsim/ip/util_ff_v1_0_3 +interrupt_control_v3_1_5=$RDI_DATADIR/xsim/ip/interrupt_control_v3_1_5 +xdfe_ofdm_v2_1_0=$RDI_DATADIR/xsim/ip/xdfe_ofdm_v2_1_0 +audio_clock_recovery_unit_v1_0_4=$RDI_DATADIR/xsim/ip/audio_clock_recovery_unit_v1_0_4 +ten_gig_eth_mac_v15_1_12=$RDI_DATADIR/xsim/ip/ten_gig_eth_mac_v15_1_12 +axi_protocol_converter_v2_1_31=$RDI_DATADIR/xsim/ip/axi_protocol_converter_v2_1_31 +xbip_dsp48_mult_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_dsp48_mult_v3_0_9 +tmr_sem_v1_0_26=$RDI_DATADIR/xsim/ip/tmr_sem_v1_0_26 +v_frmbuf_rd_v2_4_3=$RDI_DATADIR/xsim/ip/v_frmbuf_rd_v2_4_3 +cmpy_v6_0_24=$RDI_DATADIR/xsim/ip/cmpy_v6_0_24 +ta_dma_v1_0_15=$RDI_DATADIR/xsim/ip/ta_dma_v1_0_15 +v_tpg_v8_0_14=$RDI_DATADIR/xsim/ip/v_tpg_v8_0_14 +axi_tlm_ext_v1_0=$RDI_DATADIR/xsim/ip/axi_tlm_ext_v1_0 +axi_iic_v2_1_7=$RDI_DATADIR/xsim/ip/axi_iic_v2_1_7 +c_addsub_v12_0_18=$RDI_DATADIR/xsim/ip/c_addsub_v12_0_18 +audio_tpg_v1_0_2=$RDI_DATADIR/xsim/ip/audio_tpg_v1_0_2 +axi_tg_sc_v1_0=$RDI_DATADIR/xsim/ip/axi_tg_sc_v1_0 +v_vid_sdi_tx_bridge_v2_0_2=$RDI_DATADIR/xsim/ip/v_vid_sdi_tx_bridge_v2_0_2 +noc_nsu_sim_v1_0_0=$RDI_DATADIR/xsim/ip/noc_nsu_sim_v1_0_0 +axi_register_slice_v2_1_31=$RDI_DATADIR/xsim/ip/axi_register_slice_v2_1_31 +axis_switch_v1_1_31=$RDI_DATADIR/xsim/ip/axis_switch_v1_1_31 +axi_stream_monitor_v1_1_1=$RDI_DATADIR/xsim/ip/axi_stream_monitor_v1_1_1 +v_uhdsdi_vidgen_v1_0_3=$RDI_DATADIR/xsim/ip/v_uhdsdi_vidgen_v1_0_3 +bscan_jtag=$RDI_DATADIR/xsim/ip/bscan_jtag +audio_formatter_v1_0_13=$RDI_DATADIR/xsim/ip/audio_formatter_v1_0_13 +axis_vio_v1_0_11=$RDI_DATADIR/xsim/ip/axis_vio_v1_0_11 +interlaken_v2_4_17=$RDI_DATADIR/xsim/ip/interlaken_v2_4_17 +axis_register_slice_v1_1_31=$RDI_DATADIR/xsim/ip/axis_register_slice_v1_1_31 +remote_port_sc_v4=$RDI_DATADIR/xsim/ip/remote_port_sc_v4 +hdcp22_cipher_v1_0_5=$RDI_DATADIR/xsim/ip/hdcp22_cipher_v1_0_5 +picxo_fracxo_v2_0_2=$RDI_DATADIR/xsim/ip/picxo_fracxo_v2_0_2 +xdma_v4_1_29=$RDI_DATADIR/xsim/ip/xdma_v4_1_29 +accelerator_monitor_v1_1_0=$RDI_DATADIR/xsim/ip/accelerator_monitor_v1_1_0 +noc_nps6_v1_0_0=$RDI_DATADIR/xsim/ip/noc_nps6_v1_0_0 +roe_framer_v3_0_8=$RDI_DATADIR/xsim/ip/roe_framer_v3_0_8 +g975_efec_i7_v2_0_23=$RDI_DATADIR/xsim/ip/g975_efec_i7_v2_0_23 +quadsgmii_v3_5_18=$RDI_DATADIR/xsim/ip/quadsgmii_v3_5_18 +axi_ethernet_buffer_v2_0_25=$RDI_DATADIR/xsim/ip/axi_ethernet_buffer_v2_0_25 +fit_timer_v2_0_12=$RDI_DATADIR/xsim/ip/fit_timer_v2_0_12 +bsip_v1_1_1=$RDI_DATADIR/xsim/ip/bsip_v1_1_1 +lmb_v10_v3_0=$RDI_DATADIR/xsim/ip/lmb_v10_v3_0 +mailbox_v2_1_17=$RDI_DATADIR/xsim/ip/mailbox_v2_1_17 +v_vscaler_v1_1_11=$RDI_DATADIR/xsim/ip/v_vscaler_v1_1_11 +fifo_generator_v13_0_7=$RDI_DATADIR/xsim/ip/fifo_generator_v13_0_7 +av_pat_gen_v1_0_2=$RDI_DATADIR/xsim/ip/av_pat_gen_v1_0_2 +v_frmbuf_rd_v2_5_2=$RDI_DATADIR/xsim/ip/v_frmbuf_rd_v2_5_2 +mipi_rx_phy_v1_0_0=$RDI_DATADIR/xsim/ip/mipi_rx_phy_v1_0_0 +gig_ethernet_pcs_pma_v16_2_18=$RDI_DATADIR/xsim/ip/gig_ethernet_pcs_pma_v16_2_18 +noc2_nmu_v1_0_1=$RDI_DATADIR/xsim/ip/noc2_nmu_v1_0_1 +ats_switch_v1_0_10=$RDI_DATADIR/xsim/ip/ats_switch_v1_0_10 +axi_ethernetlite_v3_0_30=$RDI_DATADIR/xsim/ip/axi_ethernetlite_v3_0_30 +axis_mu_v1_0_1=$RDI_DATADIR/xsim/ip/axis_mu_v1_0_1 +vby1hs_v1_0_5=$RDI_DATADIR/xsim/ip/vby1hs_v1_0_5 +noc_sc_v1_0_0=$RDI_DATADIR/xsim/ip/noc_sc_v1_0_0 +convolution_v9_0_20=$RDI_DATADIR/xsim/ip/convolution_v9_0_20 +axi4stream_vip_v1_1_17=$RDI_DATADIR/xsim/ip/axi4stream_vip_v1_1_17 +axis_subset_converter_v1_1_31=$RDI_DATADIR/xsim/ip/axis_subset_converter_v1_1_31 +srio_gen2_v4_1_19=$RDI_DATADIR/xsim/ip/srio_gen2_v4_1_19 +lib_bmg_v1_0_17=$RDI_DATADIR/xsim/ip/lib_bmg_v1_0_17 +system_cache_v5_0_11=$RDI_DATADIR/xsim/ip/system_cache_v5_0_11 +dp_videoaxi4s_bridge_v1_0_3=$RDI_DATADIR/xsim/ip/dp_videoaxi4s_bridge_v1_0_3 +sid_v8_0_21=$RDI_DATADIR/xsim/ip/sid_v8_0_21 +blk_mem_gen_v8_3_7=$RDI_DATADIR/xsim/ip/blk_mem_gen_v8_3_7 +noc2_sc_v1_0_0=$RDI_DATADIR/xsim/ip/noc2_sc_v1_0_0 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xsim.ini.bak b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.ini.bak new file mode 100644 index 0000000..65c1bae --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/xsim.ini.bak @@ -0,0 +1,490 @@ +std=$RDI_DATADIR/xsim/vhdl/std +ieee=$RDI_DATADIR/xsim/vhdl/ieee +ieee_proposed=$RDI_DATADIR/xsim/vhdl/ieee_proposed +vl=$RDI_DATADIR/xsim/vhdl/vl +synopsys=$RDI_DATADIR/xsim/vhdl/synopsys +uvm=$RDI_DATADIR/xsim/system_verilog/uvm +secureip=$RDI_DATADIR/xsim/verilog/secureip +unisim=$RDI_DATADIR/xsim/vhdl/unisim +unimacro=$RDI_DATADIR/xsim/vhdl/unimacro +unifast=$RDI_DATADIR/xsim/vhdl/unifast +unisims_ver=$RDI_DATADIR/xsim/verilog/unisims_ver +unimacro_ver=$RDI_DATADIR/xsim/verilog/unimacro_ver +unifast_ver=$RDI_DATADIR/xsim/verilog/unifast_ver +simprims_ver=$RDI_DATADIR/xsim/verilog/simprims_ver +axi_epu_v1_0_4=$RDI_DATADIR/xsim/ip/axi_epu_v1_0_4 +xlconcat_v2_1_6=$RDI_DATADIR/xsim/ip/xlconcat_v2_1_6 +emb_fifo_gen_v1_0_5=$RDI_DATADIR/xsim/ip/emb_fifo_gen_v1_0_5 +mipi_csi2_tx_ctrl_v1_0_6=$RDI_DATADIR/xsim/ip/mipi_csi2_tx_ctrl_v1_0_6 +c_mux_bit_v12_0_9=$RDI_DATADIR/xsim/ip/c_mux_bit_v12_0_9 +smartconnect_v1_0=$RDI_DATADIR/xsim/ip/smartconnect_v1_0 +v_smpte_uhdsdi_tx_v1_0_4=$RDI_DATADIR/xsim/ip/v_smpte_uhdsdi_tx_v1_0_4 +cam_v3_0_0=$RDI_DATADIR/xsim/ip/cam_v3_0_0 +microblaze_v11_0_13=$RDI_DATADIR/xsim/ip/microblaze_v11_0_13 +axi_fifo_mm_s_v4_3_3=$RDI_DATADIR/xsim/ip/axi_fifo_mm_s_v4_3_3 +v_hdmi_rx1_v1_0_9=$RDI_DATADIR/xsim/ip/v_hdmi_rx1_v1_0_9 +video_frame_crc_v1_0_6=$RDI_DATADIR/xsim/ip/video_frame_crc_v1_0_6 +hdcp22_cipher_dp_v1_0_2=$RDI_DATADIR/xsim/ip/hdcp22_cipher_dp_v1_0_2 +generic_baseblocks_v2_1_2=$RDI_DATADIR/xsim/ip/generic_baseblocks_v2_1_2 +axis_clock_converter_v1_1_32=$RDI_DATADIR/xsim/ip/axis_clock_converter_v1_1_32 +psx_vip_v1_0_4=$RDI_DATADIR/xsim/ip/psx_vip_v1_0_4 +g975_efec_i4_v1_0_22=$RDI_DATADIR/xsim/ip/g975_efec_i4_v1_0_22 +axi_lite_ipif_v3_0_4=$RDI_DATADIR/xsim/ip/axi_lite_ipif_v3_0_4 +axis_dbg_stub_v1_0_1=$RDI_DATADIR/xsim/ip/axis_dbg_stub_v1_0_1 +ethernet_1_10_25g_v2_7_15=$RDI_DATADIR/xsim/ip/ethernet_1_10_25g_v2_7_15 +an_lt_v1_0_12=$RDI_DATADIR/xsim/ip/an_lt_v1_0_12 +hdmi_gt_controller_v1_0_13=$RDI_DATADIR/xsim/ip/hdmi_gt_controller_v1_0_13 +axi_cdma_v4_1_31=$RDI_DATADIR/xsim/ip/axi_cdma_v4_1_31 +xilinx_vip=$RDI_DATADIR/xsim/ip/xilinx_vip +videoaxi4s_bridge_v1_0_7=$RDI_DATADIR/xsim/ip/videoaxi4s_bridge_v1_0_7 +mdm_riscv_v1_0_2=$RDI_DATADIR/xsim/ip/mdm_riscv_v1_0_2 +axi_uartlite_v2_0_35=$RDI_DATADIR/xsim/ip/axi_uartlite_v2_0_35 +axi_perf_mon_v5_0_33=$RDI_DATADIR/xsim/ip/axi_perf_mon_v5_0_33 +axi_master_burst_v2_0_9=$RDI_DATADIR/xsim/ip/axi_master_burst_v2_0_9 +aie_ps_v1_0=$RDI_DATADIR/xsim/ip/aie_ps_v1_0 +ibert_lib_v1_0_11=$RDI_DATADIR/xsim/ip/ibert_lib_v1_0_11 +axi_datamover_v5_1_33=$RDI_DATADIR/xsim/ip/axi_datamover_v5_1_33 +noc_nps4_v1_0_0=$RDI_DATADIR/xsim/ip/noc_nps4_v1_0_0 +xbip_dsp48_addsub_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_dsp48_addsub_v3_0_9 +v_axi4s_vid_out_v4_0_18=$RDI_DATADIR/xsim/ip/v_axi4s_vid_out_v4_0_18 +axi_chip2chip_v5_0_22=$RDI_DATADIR/xsim/ip/axi_chip2chip_v5_0_22 +gtwizard_ultrascale_v1_7_18=$RDI_DATADIR/xsim/ip/gtwizard_ultrascale_v1_7_18 +axi_infrastructure_v1_1_0=$RDI_DATADIR/xsim/ip/axi_infrastructure_v1_1_0 +switch_core_top_v1_0_16=$RDI_DATADIR/xsim/ip/switch_core_top_v1_0_16 +vitis_net_p4_v2_1_0=$RDI_DATADIR/xsim/ip/vitis_net_p4_v2_1_0 +axi_sideband_util_v1_0_15=$RDI_DATADIR/xsim/ip/axi_sideband_util_v1_0_15 +axis_infrastructure_v1_1_1=$RDI_DATADIR/xsim/ip/axis_infrastructure_v1_1_1 +dist_mem_gen_v8_0_15=$RDI_DATADIR/xsim/ip/dist_mem_gen_v8_0_15 +shell_utils_addr_remap_v1_0_10=$RDI_DATADIR/xsim/ip/shell_utils_addr_remap_v1_0_10 +xbip_addsub_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_addsub_v3_0_9 +dds_compiler_v6_0_25=$RDI_DATADIR/xsim/ip/dds_compiler_v6_0_25 +bscan_axi_v1_0_2=$RDI_DATADIR/xsim/ip/bscan_axi_v1_0_2 +fifo_generator_v13_2_10=$RDI_DATADIR/xsim/ip/fifo_generator_v13_2_10 +dprx_fec_8b10b_v1_0_3=$RDI_DATADIR/xsim/ip/dprx_fec_8b10b_v1_0_3 +pcie_axi4lite_tap_v1_0_2=$RDI_DATADIR/xsim/ip/pcie_axi4lite_tap_v1_0_2 +av_pat_gen_v2_0_2=$RDI_DATADIR/xsim/ip/av_pat_gen_v2_0_2 +polar_v1_1_4=$RDI_DATADIR/xsim/ip/polar_v1_1_4 +v_tpg_v8_2_5=$RDI_DATADIR/xsim/ip/v_tpg_v8_2_5 +tcc_encoder_3gpplte_v4_0_19=$RDI_DATADIR/xsim/ip/tcc_encoder_3gpplte_v4_0_19 +axis_accelerator_adapter_v2_1_18=$RDI_DATADIR/xsim/ip/axis_accelerator_adapter_v2_1_18 +mem_pl_v1_0_2=$RDI_DATADIR/xsim/ip/mem_pl_v1_0_2 +perf_axi_tg_v1_0_13=$RDI_DATADIR/xsim/ip/perf_axi_tg_v1_0_13 +trace_hub_v1_1_0=$RDI_DATADIR/xsim/ip/trace_hub_v1_1_0 +axi_pcie_v2_9_11=$RDI_DATADIR/xsim/ip/axi_pcie_v2_9_11 +axi_emc_v3_0_31=$RDI_DATADIR/xsim/ip/axi_emc_v3_0_31 +tsn_endpoint_ethernet_mac_block_v1_0_16=$RDI_DATADIR/xsim/ip/tsn_endpoint_ethernet_mac_block_v1_0_16 +soft_ecc_proxy_v1_1_1=$RDI_DATADIR/xsim/ip/soft_ecc_proxy_v1_1_1 +axi_apb_bridge_v3_0_20=$RDI_DATADIR/xsim/ip/axi_apb_bridge_v3_0_20 +axis_broadcaster_v1_1_30=$RDI_DATADIR/xsim/ip/axis_broadcaster_v1_1_30 +axis_dwidth_converter_sc_v1_1=$RDI_DATADIR/xsim/ip/axis_dwidth_converter_sc_v1_1 +vid_edid_v1_0_2=$RDI_DATADIR/xsim/ip/vid_edid_v1_0_2 +noc_nidb_v1_0_0=$RDI_DATADIR/xsim/ip/noc_nidb_v1_0_0 +v_vid_in_axi4s_v5_0_4=$RDI_DATADIR/xsim/ip/v_vid_in_axi4s_v5_0_4 +v_dual_splitter_v1_0_11=$RDI_DATADIR/xsim/ip/v_dual_splitter_v1_0_11 +axis_ila_txns_cntr_v1_0_0=$RDI_DATADIR/xsim/ip/axis_ila_txns_cntr_v1_0_0 +pl_fileio_v1_0_0=$RDI_DATADIR/xsim/ip/pl_fileio_v1_0_0 +msm_cpp=$RDI_DATADIR/xsim/ip/msm_cpp +debug_tcp_server_v1=$RDI_DATADIR/xsim/ip/debug_tcp_server_v1 +v_frmbuf_wr_v2_5_2=$RDI_DATADIR/xsim/ip/v_frmbuf_wr_v2_5_2 +v_smpte_uhdsdi_rx_v1_0_3=$RDI_DATADIR/xsim/ip/v_smpte_uhdsdi_rx_v1_0_3 +mpegtsmux_v1_1_9=$RDI_DATADIR/xsim/ip/mpegtsmux_v1_1_9 +noc_nps_v1_0_1=$RDI_DATADIR/xsim/ip/noc_nps_v1_0_1 +v_multi_scaler_v1_2_6=$RDI_DATADIR/xsim/ip/v_multi_scaler_v1_2_6 +x5io_wizard_v1_0_4=$RDI_DATADIR/xsim/ip/x5io_wizard_v1_0_4 +axi_remapper_rx_v1_0_2=$RDI_DATADIR/xsim/ip/axi_remapper_rx_v1_0_2 +emu_perf_common_v1_0=$RDI_DATADIR/xsim/ip/emu_perf_common_v1_0 +sem_ultra_v3_1_26=$RDI_DATADIR/xsim/ip/sem_ultra_v3_1_26 +axi_utils_v2_0_9=$RDI_DATADIR/xsim/ip/axi_utils_v2_0_9 +v_tc_v6_2_8=$RDI_DATADIR/xsim/ip/v_tc_v6_2_8 +ieee802d3_clause74_fec_v1_0_18=$RDI_DATADIR/xsim/ip/ieee802d3_clause74_fec_v1_0_18 +jesd204c_v4_2_14=$RDI_DATADIR/xsim/ip/jesd204c_v4_2_14 +xtlm=$RDI_DATADIR/xsim/ip/xtlm +hdmi_acr_ctrl_v1_0_3=$RDI_DATADIR/xsim/ip/hdmi_acr_ctrl_v1_0_3 +icap_arb_v1_0_2=$RDI_DATADIR/xsim/ip/icap_arb_v1_0_2 +nvme_tc_v3_0_6=$RDI_DATADIR/xsim/ip/nvme_tc_v3_0_6 +axi4svideo_bridge_v1_0_18=$RDI_DATADIR/xsim/ip/axi4svideo_bridge_v1_0_18 +jtag_axi=$RDI_DATADIR/xsim/ip/jtag_axi +axi_intc_v4_1_19=$RDI_DATADIR/xsim/ip/axi_intc_v4_1_19 +v_demosaic_v1_1_11=$RDI_DATADIR/xsim/ip/v_demosaic_v1_1_11 +pcie_jtag_v1_0_1=$RDI_DATADIR/xsim/ip/pcie_jtag_v1_0_1 +xlslice_v1_0_4=$RDI_DATADIR/xsim/ip/xlslice_v1_0_4 +axi_vfifo_ctrl_v2_0_34=$RDI_DATADIR/xsim/ip/axi_vfifo_ctrl_v2_0_34 +gmii_to_rgmii_v4_1_14=$RDI_DATADIR/xsim/ip/gmii_to_rgmii_v4_1_14 +util_reduced_logic_v2_0_6=$RDI_DATADIR/xsim/ip/util_reduced_logic_v2_0_6 +nvmeha_v1_0_12=$RDI_DATADIR/xsim/ip/nvmeha_v1_0_12 +axi_c2c_v1_0_9=$RDI_DATADIR/xsim/ip/axi_c2c_v1_0_9 +ft_prach_v1_2_2=$RDI_DATADIR/xsim/ip/ft_prach_v1_2_2 +v_smpte_uhdsdi_v1_0_11=$RDI_DATADIR/xsim/ip/v_smpte_uhdsdi_v1_0_11 +axi_pmon_v1_0_1=$RDI_DATADIR/xsim/ip/axi_pmon_v1_0_1 +gtwizard_ultrascale_v1_6_16=$RDI_DATADIR/xsim/ip/gtwizard_ultrascale_v1_6_16 +gigantic_mux=$RDI_DATADIR/xsim/ip/gigantic_mux +displayport_v7_0_24=$RDI_DATADIR/xsim/ip/displayport_v7_0_24 +msm_adapters=$RDI_DATADIR/xsim/ip/msm_adapters +v_frmbuf_wr_v2_2_10=$RDI_DATADIR/xsim/ip/v_frmbuf_wr_v2_2_10 +fast_adapter_v1_0_8=$RDI_DATADIR/xsim/ip/fast_adapter_v1_0_8 +rst_vip_v1_0_6=$RDI_DATADIR/xsim/ip/rst_vip_v1_0_6 +v_hdmi_phy1_v1_0_12=$RDI_DATADIR/xsim/ip/v_hdmi_phy1_v1_0_12 +pcie_qdma_mailbox_v1_0_5=$RDI_DATADIR/xsim/ip/pcie_qdma_mailbox_v1_0_5 +pr_decoupler_v1_0_11=$RDI_DATADIR/xsim/ip/pr_decoupler_v1_0_11 +v_hdmi_tx1_v1_0_8=$RDI_DATADIR/xsim/ip/v_hdmi_tx1_v1_0_8 +processing_system7_v5_5_6=$RDI_DATADIR/xsim/ip/processing_system7_v5_5_6 +axis_cap_ctrl_v1_0_1=$RDI_DATADIR/xsim/ip/axis_cap_ctrl_v1_0_1 +common_rpc_v1=$RDI_DATADIR/xsim/ip/common_rpc_v1 +xtlm_ipc_v1_0=$RDI_DATADIR/xsim/ip/xtlm_ipc_v1_0 +v_tpg_v8_1_10=$RDI_DATADIR/xsim/ip/v_tpg_v8_1_10 +v_hcresampler_v1_1_11=$RDI_DATADIR/xsim/ip/v_hcresampler_v1_1_11 +axi_interface_monitor_v1_1_0=$RDI_DATADIR/xsim/ip/axi_interface_monitor_v1_1_0 +axi_intc_v4_1=$RDI_DATADIR/xsim/ip/axi_intc_v4_1 +mammoth_transcode_v1_0_2=$RDI_DATADIR/xsim/ip/mammoth_transcode_v1_0_2 +axi_timebase_wdt_v3_0_23=$RDI_DATADIR/xsim/ip/axi_timebase_wdt_v3_0_23 +floating_point_v7_0_23=$RDI_DATADIR/xsim/ip/floating_point_v7_0_23 +displayport_v9_0_9=$RDI_DATADIR/xsim/ip/displayport_v9_0_9 +noc_hbm_v1_0_0=$RDI_DATADIR/xsim/ip/noc_hbm_v1_0_0 +versal_cips_ps_vip_v1_0_9=$RDI_DATADIR/xsim/ip/versal_cips_ps_vip_v1_0_9 +amm_axi_bridge_v1_0_17=$RDI_DATADIR/xsim/ip/amm_axi_bridge_v1_0_17 +v_vid_gt_bridge_v2_0_5=$RDI_DATADIR/xsim/ip/v_vid_gt_bridge_v2_0_5 +v_gamma_lut_v1_1_11=$RDI_DATADIR/xsim/ip/v_gamma_lut_v1_1_11 +rld3_pl_v1_0_14=$RDI_DATADIR/xsim/ip/rld3_pl_v1_0_14 +l_ethernet_v3_3_10=$RDI_DATADIR/xsim/ip/l_ethernet_v3_3_10 +ernic_v4_0_3=$RDI_DATADIR/xsim/ip/ernic_v4_0_3 +fec_5g_common_v1_1_4=$RDI_DATADIR/xsim/ip/fec_5g_common_v1_1_4 +sim_qdma_sc_v1_0=$RDI_DATADIR/xsim/ip/sim_qdma_sc_v1_0 +dfx_bitstream_monitor_v1_0_5=$RDI_DATADIR/xsim/ip/dfx_bitstream_monitor_v1_0_5 +axi_mmu_v2_1_29=$RDI_DATADIR/xsim/ip/axi_mmu_v2_1_29 +v_sdi_rx_vid_bridge_v2_0_2=$RDI_DATADIR/xsim/ip/v_sdi_rx_vid_bridge_v2_0_2 +v_csc_v1_1_11=$RDI_DATADIR/xsim/ip/v_csc_v1_1_11 +usxgmii_v1_2_17=$RDI_DATADIR/xsim/ip/usxgmii_v1_2_17 +trace_s2mm_v2_0_1=$RDI_DATADIR/xsim/ip/trace_s2mm_v2_0_1 +ieee802d3_rs_fec_v2_0_22=$RDI_DATADIR/xsim/ip/ieee802d3_rs_fec_v2_0_22 +v_hdmi_tx_v3_0_4=$RDI_DATADIR/xsim/ip/v_hdmi_tx_v3_0_4 +ldpc_5gnr_v1_0_3=$RDI_DATADIR/xsim/ip/ldpc_5gnr_v1_0_3 +rama_v1_1_17_lib=$RDI_DATADIR/xsim/ip/rama_v1_1_17_lib +rs_decoder_v9_0_22=$RDI_DATADIR/xsim/ip/rs_decoder_v9_0_22 +ieee802d3_400g_rs_fec_v3_0_2=$RDI_DATADIR/xsim/ip/ieee802d3_400g_rs_fec_v3_0_2 +xscl=$RDI_DATADIR/xsim/ip/xscl +iomodule_v3_1_10=$RDI_DATADIR/xsim/ip/iomodule_v3_1_10 +axis_mem_v1_0_2=$RDI_DATADIR/xsim/ip/axis_mem_v1_0_2 +axi_tft_v2_0_28=$RDI_DATADIR/xsim/ip/axi_tft_v2_0_28 +fc32_rs_fec_v1_0_27=$RDI_DATADIR/xsim/ip/fc32_rs_fec_v1_0_27 +axi_remapper_tx_v1_0_2=$RDI_DATADIR/xsim/ip/axi_remapper_tx_v1_0_2 +dfx_axi_shutdown_manager_v1_0_3=$RDI_DATADIR/xsim/ip/dfx_axi_shutdown_manager_v1_0_3 +util_vector_logic_v2_0_4=$RDI_DATADIR/xsim/ip/util_vector_logic_v2_0_4 +axis_ila_intf_v1_0_2=$RDI_DATADIR/xsim/ip/axis_ila_intf_v1_0_2 +axi_amm_bridge_v1_0_21=$RDI_DATADIR/xsim/ip/axi_amm_bridge_v1_0_21 +xpm_cdc_gen_v1_0_4=$RDI_DATADIR/xsim/ip/xpm_cdc_gen_v1_0_4 +c_accum_v12_0_18=$RDI_DATADIR/xsim/ip/c_accum_v12_0_18 +cmac_v2_6_15=$RDI_DATADIR/xsim/ip/cmac_v2_6_15 +axi_firewall_v1_2_6=$RDI_DATADIR/xsim/ip/axi_firewall_v1_2_6 +dft_v4_2_8=$RDI_DATADIR/xsim/ip/dft_v4_2_8 +ernic_v3_1_5=$RDI_DATADIR/xsim/ip/ernic_v3_1_5 +xsdbs_v1_0_4=$RDI_DATADIR/xsim/ip/xsdbs_v1_0_4 +stm_v1_0=$RDI_DATADIR/xsim/ip/stm_v1_0 +axi_timer_v2_0_33=$RDI_DATADIR/xsim/ip/axi_timer_v2_0_33 +lmb_v10_v3_0_14=$RDI_DATADIR/xsim/ip/lmb_v10_v3_0_14 +v_deinterlacer_v5_1_4=$RDI_DATADIR/xsim/ip/v_deinterlacer_v5_1_4 +axis_data_fifo_v1_1_32=$RDI_DATADIR/xsim/ip/axis_data_fifo_v1_1_32 +hw_trace=$RDI_DATADIR/xsim/ip/hw_trace +sim_xdma_sc_v1=$RDI_DATADIR/xsim/ip/sim_xdma_sc_v1 +axi_vip_v1_1_17=$RDI_DATADIR/xsim/ip/axi_vip_v1_1_17 +mipi_dphy_v4_3_11=$RDI_DATADIR/xsim/ip/mipi_dphy_v4_3_11 +ieee802d3_50g_rs_fec_v2_0_17=$RDI_DATADIR/xsim/ip/ieee802d3_50g_rs_fec_v2_0_17 +xdfe_equalizer_v1_0_9=$RDI_DATADIR/xsim/ip/xdfe_equalizer_v1_0_9 +flexo_100g_rs_fec_v1_0_28=$RDI_DATADIR/xsim/ip/flexo_100g_rs_fec_v1_0_28 +v_uhdsdi_audio_v2_0_8=$RDI_DATADIR/xsim/ip/v_uhdsdi_audio_v2_0_8 +v_tc_v6_1_14=$RDI_DATADIR/xsim/ip/v_tc_v6_1_14 +ddr4_pl_phy_v1_0_2=$RDI_DATADIR/xsim/ip/ddr4_pl_phy_v1_0_2 +sem_v4_1_15=$RDI_DATADIR/xsim/ip/sem_v4_1_15 +c_shift_ram_v12_0_17=$RDI_DATADIR/xsim/ip/c_shift_ram_v12_0_17 +lib_pkg_v1_0_4=$RDI_DATADIR/xsim/ip/lib_pkg_v1_0_4 +bs_switch_v1_0_4=$RDI_DATADIR/xsim/ip/bs_switch_v1_0_4 +shell_utils_msp432_bsl_crc_gen_v1_0_2=$RDI_DATADIR/xsim/ip/shell_utils_msp432_bsl_crc_gen_v1_0_2 +axis_dbg_sync_v1_0_1=$RDI_DATADIR/xsim/ip/axis_dbg_sync_v1_0_1 +high_speed_selectio_wiz_v3_6_9=$RDI_DATADIR/xsim/ip/high_speed_selectio_wiz_v3_6_9 +emc_common_v3_0_7=$RDI_DATADIR/xsim/ip/emc_common_v3_0_7 +fir_compiler_v7_2_22=$RDI_DATADIR/xsim/ip/fir_compiler_v7_2_22 +microblaze_mcs_v2_3_7=$RDI_DATADIR/xsim/ip/microblaze_mcs_v2_3_7 +oran_radio_if_v3_2_0=$RDI_DATADIR/xsim/ip/oran_radio_if_v3_2_0 +i2s_transmitter_v1_0_8=$RDI_DATADIR/xsim/ip/i2s_transmitter_v1_0_8 +floating_point_v7_1_18=$RDI_DATADIR/xsim/ip/floating_point_v7_1_18 +sim_trig_v1_0_12=$RDI_DATADIR/xsim/ip/sim_trig_v1_0_12 +hbm2e_pl_v1_0_1=$RDI_DATADIR/xsim/ip/hbm2e_pl_v1_0_1 +axis_protocol_checker_v2_0_15=$RDI_DATADIR/xsim/ip/axis_protocol_checker_v2_0_15 +vitis_deadlock_detector_v1_0_2=$RDI_DATADIR/xsim/ip/vitis_deadlock_detector_v1_0_2 +axi_msg_v1_0_11=$RDI_DATADIR/xsim/ip/axi_msg_v1_0_11 +c_compare_v12_0_9=$RDI_DATADIR/xsim/ip/c_compare_v12_0_9 +c_mux_bus_v12_0_9=$RDI_DATADIR/xsim/ip/c_mux_bus_v12_0_9 +xsdbm_v3_0_2=$RDI_DATADIR/xsim/ip/xsdbm_v3_0_2 +rld3_pl_phy_v1_0_2=$RDI_DATADIR/xsim/ip/rld3_pl_phy_v1_0_2 +mpram_v1_0_4=$RDI_DATADIR/xsim/ip/mpram_v1_0_4 +oddr_v1_0_4=$RDI_DATADIR/xsim/ip/oddr_v1_0_4 +bs_mux_v1_0_1=$RDI_DATADIR/xsim/ip/bs_mux_v1_0_1 +ptp_1588_timer_syncer_v2_0_6=$RDI_DATADIR/xsim/ip/ptp_1588_timer_syncer_v2_0_6 +dfx_controller_v1_0_7=$RDI_DATADIR/xsim/ip/dfx_controller_v1_0_7 +noc_ncrb_v1_0_0=$RDI_DATADIR/xsim/ip/noc_ncrb_v1_0_0 +rs_toolbox_v9_0_13=$RDI_DATADIR/xsim/ip/rs_toolbox_v9_0_13 +pc_cfr_v8_0_2=$RDI_DATADIR/xsim/ip/pc_cfr_v8_0_2 +multi_channel_25g_rs_fec_v1_0_26=$RDI_DATADIR/xsim/ip/multi_channel_25g_rs_fec_v1_0_26 +lmb_bram_if_cntlr_v4_0_24=$RDI_DATADIR/xsim/ip/lmb_bram_if_cntlr_v4_0_24 +hdcp_keymngmt_blk_v1_0_2=$RDI_DATADIR/xsim/ip/hdcp_keymngmt_blk_v1_0_2 +axi_lite_ipif_v3_0=$RDI_DATADIR/xsim/ip/axi_lite_ipif_v3_0 +compact_gt_v1_0_17=$RDI_DATADIR/xsim/ip/compact_gt_v1_0_17 +v_vcresampler_v1_1_11=$RDI_DATADIR/xsim/ip/v_vcresampler_v1_1_11 +mipi_dsi2_rx_ctrl_v1_0_0=$RDI_DATADIR/xsim/ip/mipi_dsi2_rx_ctrl_v1_0_0 +axi_quad_spi_v3_2_30=$RDI_DATADIR/xsim/ip/axi_quad_spi_v3_2_30 +div_gen_v5_1_22=$RDI_DATADIR/xsim/ip/div_gen_v5_1_22 +v_frmbuf_rd_v2_2_10=$RDI_DATADIR/xsim/ip/v_frmbuf_rd_v2_2_10 +can_v5_1_3=$RDI_DATADIR/xsim/ip/can_v5_1_3 +axi_pcie3_v3_0_30=$RDI_DATADIR/xsim/ip/axi_pcie3_v3_0_30 +emb_mem_gen_v1_0_9=$RDI_DATADIR/xsim/ip/emb_mem_gen_v1_0_9 +noc2_xbr2x4_v1_0_0=$RDI_DATADIR/xsim/ip/noc2_xbr2x4_v1_0_0 +xbip_counter_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_counter_v3_0_9 +axi_jtag_v1_0_2=$RDI_DATADIR/xsim/ip/axi_jtag_v1_0_2 +tmr_manager_v1_0_12=$RDI_DATADIR/xsim/ip/tmr_manager_v1_0_12 +noc_nmu_sim_v1_0_0=$RDI_DATADIR/xsim/ip/noc_nmu_sim_v1_0_0 +mipi_csi2_rx_ctrl_v1_0_10=$RDI_DATADIR/xsim/ip/mipi_csi2_rx_ctrl_v1_0_10 +axi_bram_ctrl_v4_0_15=$RDI_DATADIR/xsim/ip/axi_bram_ctrl_v4_0_15 +axi_gpio_v2_0_33=$RDI_DATADIR/xsim/ip/axi_gpio_v2_0_33 +rs_encoder_v9_0_21=$RDI_DATADIR/xsim/ip/rs_encoder_v9_0_21 +rwd_tlmmodel_v1=$RDI_DATADIR/xsim/ip/rwd_tlmmodel_v1 +axi_bram_ctrl_v4_1_10=$RDI_DATADIR/xsim/ip/axi_bram_ctrl_v4_1_10 +uram_rd_back_v1_0_4=$RDI_DATADIR/xsim/ip/uram_rd_back_v1_0_4 +lib_fifo_v1_0_19=$RDI_DATADIR/xsim/ip/lib_fifo_v1_0_19 +canfd_v3_0_10=$RDI_DATADIR/xsim/ip/canfd_v3_0_10 +hdcp22_rng_v1_0_3=$RDI_DATADIR/xsim/ip/hdcp22_rng_v1_0_3 +xfft_v9_1_12=$RDI_DATADIR/xsim/ip/xfft_v9_1_12 +axi_memory_init_v1_0_12=$RDI_DATADIR/xsim/ip/axi_memory_init_v1_0_12 +common_cpp_v1_0=$RDI_DATADIR/xsim/ip/common_cpp_v1_0 +ai_pl_trig=$RDI_DATADIR/xsim/ip/ai_pl_trig +c_reg_fd_v12_0_9=$RDI_DATADIR/xsim/ip/c_reg_fd_v12_0_9 +axi_mm2s_mapper_v1_1_30=$RDI_DATADIR/xsim/ip/axi_mm2s_mapper_v1_1_30 +ldpc_v2_0_15=$RDI_DATADIR/xsim/ip/ldpc_v2_0_15 +sim_cpu_v1_0=$RDI_DATADIR/xsim/ip/sim_cpu_v1_0 +axi_data_fifo_v2_1_30=$RDI_DATADIR/xsim/ip/axi_data_fifo_v2_1_30 +g709_fec_v2_4_10=$RDI_DATADIR/xsim/ip/g709_fec_v2_4_10 +axi_mcdma_v1_1_12=$RDI_DATADIR/xsim/ip/axi_mcdma_v1_1_12 +axi_lmb_bridge_v1_0_3=$RDI_DATADIR/xsim/ip/axi_lmb_bridge_v1_0_3 +lte_fft_v2_1_10=$RDI_DATADIR/xsim/ip/lte_fft_v2_1_10 +axi_interconnect_v1_7_23=$RDI_DATADIR/xsim/ip/axi_interconnect_v1_7_23 +axi_dwidth_converter_v2_1_31=$RDI_DATADIR/xsim/ip/axi_dwidth_converter_v2_1_31 +axi_usb2_device_v5_0_32=$RDI_DATADIR/xsim/ip/axi_usb2_device_v5_0_32 +axi_hwicap_v3_0_35=$RDI_DATADIR/xsim/ip/axi_hwicap_v3_0_35 +ldpc_5gnr_lite_v1_0_2=$RDI_DATADIR/xsim/ip/ldpc_5gnr_lite_v1_0_2 +fifo_generator_v13_1_5=$RDI_DATADIR/xsim/ip/fifo_generator_v13_1_5 +axi_protocol_checker_v2_0_17=$RDI_DATADIR/xsim/ip/axi_protocol_checker_v2_0_17 +c_counter_binary_v12_0_19=$RDI_DATADIR/xsim/ip/c_counter_binary_v12_0_19 +axis_ila_pp_v1_0_2=$RDI_DATADIR/xsim/ip/axis_ila_pp_v1_0_2 +mem_tg_v1_0_13=$RDI_DATADIR/xsim/ip/mem_tg_v1_0_13 +xbip_utils_v3_0_13=$RDI_DATADIR/xsim/ip/xbip_utils_v3_0_13 +aie_xtlm_v1_0_0=$RDI_DATADIR/xsim/ip/aie_xtlm_v1_0_0 +xtlm_ap_ctrl_v1_0=$RDI_DATADIR/xsim/ip/xtlm_ap_ctrl_v1_0 +v_vid_in_axi4s_v4_0_11=$RDI_DATADIR/xsim/ip/v_vid_in_axi4s_v4_0_11 +cmac_usplus_v3_1_17=$RDI_DATADIR/xsim/ip/cmac_usplus_v3_1_17 +xdfe_common_v1_0_3=$RDI_DATADIR/xsim/ip/xdfe_common_v1_0_3 +viterbi_v9_1_17=$RDI_DATADIR/xsim/ip/viterbi_v9_1_17 +xdfe_nr_prach_v2_0_3=$RDI_DATADIR/xsim/ip/xdfe_nr_prach_v2_0_3 +v_smpte_sdi_v3_0_11=$RDI_DATADIR/xsim/ip/v_smpte_sdi_v3_0_11 +mdm_v3_2=$RDI_DATADIR/xsim/ip/mdm_v3_2 +clk_vip_v1_0_4=$RDI_DATADIR/xsim/ip/clk_vip_v1_0_4 +mdm_v3_2_26=$RDI_DATADIR/xsim/ip/mdm_v3_2_26 +xtlm_trace_model_v1_0=$RDI_DATADIR/xsim/ip/xtlm_trace_model_v1_0 +xbip_dsp48_multadd_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_dsp48_multadd_v3_0_9 +noc2_nsu_v1_0_1=$RDI_DATADIR/xsim/ip/noc2_nsu_v1_0_1 +timer_sync_1588_v1_2_5=$RDI_DATADIR/xsim/ip/timer_sync_1588_v1_2_5 +axis_ila_ct_v1_0_1=$RDI_DATADIR/xsim/ip/axis_ila_ct_v1_0_1 +dcmac_v2_4_0=$RDI_DATADIR/xsim/ip/dcmac_v2_4_0 +v_dp_axi4s_vid_out_v1_0_8=$RDI_DATADIR/xsim/ip/v_dp_axi4s_vid_out_v1_0_8 +xbip_dsp48_acc_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_dsp48_acc_v3_0_9 +noc2_xbr4x2_v1_0_0=$RDI_DATADIR/xsim/ip/noc2_xbr4x2_v1_0_0 +sd_fec_v1_1_14=$RDI_DATADIR/xsim/ip/sd_fec_v1_1_14 +xbip_accum_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_accum_v3_0_9 +displayport_v8_1_9=$RDI_DATADIR/xsim/ip/displayport_v8_1_9 +ilknf_v1_3_4=$RDI_DATADIR/xsim/ip/ilknf_v1_3_4 +v_letterbox_v1_1_11=$RDI_DATADIR/xsim/ip/v_letterbox_v1_1_11 +iomodule_v3_0=$RDI_DATADIR/xsim/ip/iomodule_v3_0 +dbg_intf=$RDI_DATADIR/xsim/ip/dbg_intf +cpm5_v1_0_16=$RDI_DATADIR/xsim/ip/cpm5_v1_0_16 +ieee802d3_25g_rs_fec_v1_0_30=$RDI_DATADIR/xsim/ip/ieee802d3_25g_rs_fec_v1_0_30 +jesd204_v7_2_20=$RDI_DATADIR/xsim/ip/jesd204_v7_2_20 +clk_gen_sim_v1_0_4=$RDI_DATADIR/xsim/ip/clk_gen_sim_v1_0_4 +g709_rs_decoder_v2_2_14=$RDI_DATADIR/xsim/ip/g709_rs_decoder_v2_2_14 +cpri_v8_11_20=$RDI_DATADIR/xsim/ip/cpri_v8_11_20 +ieee802d3_200g_rs_fec_v2_0_11=$RDI_DATADIR/xsim/ip/ieee802d3_200g_rs_fec_v2_0_11 +v_warp_init_v1_1_4=$RDI_DATADIR/xsim/ip/v_warp_init_v1_1_4 +v_hscaler_v1_1_11=$RDI_DATADIR/xsim/ip/v_hscaler_v1_1_11 +spdif_v2_0_29=$RDI_DATADIR/xsim/ip/spdif_v2_0_29 +func_emu_util_v1_0=$RDI_DATADIR/xsim/ip/func_emu_util_v1_0 +axi_uart16550_v2_0_33=$RDI_DATADIR/xsim/ip/axi_uart16550_v2_0_33 +axi_clock_converter_v2_1_30=$RDI_DATADIR/xsim/ip/axi_clock_converter_v2_1_30 +dprx_v1_0_4=$RDI_DATADIR/xsim/ip/dprx_v1_0_4 +mrmac_v2_3_0=$RDI_DATADIR/xsim/ip/mrmac_v2_3_0 +cic_compiler_v4_0_19=$RDI_DATADIR/xsim/ip/cic_compiler_v4_0_19 +c_gate_bit_v12_0_9=$RDI_DATADIR/xsim/ip/c_gate_bit_v12_0_9 +noc_sc_v1_0_0_legacy=$RDI_DATADIR/xsim/ip/noc_sc_v1_0_0_legacy +ten_gig_eth_pcs_pma_v6_0_27=$RDI_DATADIR/xsim/ip/ten_gig_eth_pcs_pma_v6_0_27 +xdfe_cc_filter_v1_1_4=$RDI_DATADIR/xsim/ip/xdfe_cc_filter_v1_1_4 +axi_crossbar_v2_1_32=$RDI_DATADIR/xsim/ip/axi_crossbar_v2_1_32 +axis_itct_v1_0_1=$RDI_DATADIR/xsim/ip/axis_itct_v1_0_1 +xbip_pipe_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_pipe_v3_0_9 +tsn_temac_v1_0_11=$RDI_DATADIR/xsim/ip/tsn_temac_v1_0_11 +lib_srl_fifo_v1_0_4=$RDI_DATADIR/xsim/ip/lib_srl_fifo_v1_0_4 +ecc_v2_0_16=$RDI_DATADIR/xsim/ip/ecc_v2_0_16 +mutex_v2_1_13=$RDI_DATADIR/xsim/ip/mutex_v2_1_13 +lmb_bram_if_cntlr_v4_0=$RDI_DATADIR/xsim/ip/lmb_bram_if_cntlr_v4_0 +ahblite_axi_bridge_v3_0_26=$RDI_DATADIR/xsim/ip/ahblite_axi_bridge_v3_0_26 +tmr_inject_v1_0_6=$RDI_DATADIR/xsim/ip/tmr_inject_v1_0_6 +qdriv_pl_phy_v1_0_2=$RDI_DATADIR/xsim/ip/qdriv_pl_phy_v1_0_2 +tcc_decoder_3gppmm_v2_0_27=$RDI_DATADIR/xsim/ip/tcc_decoder_3gppmm_v2_0_27 +ai_noc=$RDI_DATADIR/xsim/ip/ai_noc +util_idelay_ctrl_v1_0_4=$RDI_DATADIR/xsim/ip/util_idelay_ctrl_v1_0_4 +noc2_nps_v1_0_0=$RDI_DATADIR/xsim/ip/noc2_nps_v1_0_0 +etrnic_v1_1_8=$RDI_DATADIR/xsim/ip/etrnic_v1_1_8 +axi_ahblite_bridge_v3_0_28=$RDI_DATADIR/xsim/ip/axi_ahblite_bridge_v3_0_28 +ieee802d3_50g_rs_fec_v1_0_24=$RDI_DATADIR/xsim/ip/ieee802d3_50g_rs_fec_v1_0_24 +noc_hbm_nmu_sim_v1_0_0=$RDI_DATADIR/xsim/ip/noc_hbm_nmu_sim_v1_0_0 +noc_npp_rptr_v1_0_0=$RDI_DATADIR/xsim/ip/noc_npp_rptr_v1_0_0 +dfx_decoupler_v1_0_9=$RDI_DATADIR/xsim/ip/dfx_decoupler_v1_0_9 +dsp_macro_v1_0_6=$RDI_DATADIR/xsim/ip/dsp_macro_v1_0_6 +cpm5n_v1_0_8=$RDI_DATADIR/xsim/ip/cpm5n_v1_0_8 +axi_dma_v7_1_32=$RDI_DATADIR/xsim/ip/axi_dma_v7_1_32 +sim_ipc_multi_intf_v1_0=$RDI_DATADIR/xsim/ip/sim_ipc_multi_intf_v1_0 +hdcp_v1_0_5=$RDI_DATADIR/xsim/ip/hdcp_v1_0_5 +axi_epc_v2_0_34=$RDI_DATADIR/xsim/ip/axi_epc_v2_0_34 +tmr_comparator_v1_0_7=$RDI_DATADIR/xsim/ip/tmr_comparator_v1_0_7 +v_warp_filter_v1_1_4=$RDI_DATADIR/xsim/ip/v_warp_filter_v1_1_4 +ai_pl=$RDI_DATADIR/xsim/ip/ai_pl +xdfe_nlf_v1_1_1=$RDI_DATADIR/xsim/ip/xdfe_nlf_v1_1_1 +v_scenechange_v1_1_6=$RDI_DATADIR/xsim/ip/v_scenechange_v1_1_6 +vfb_v1_0_25=$RDI_DATADIR/xsim/ip/vfb_v1_0_25 +axis_interconnect_v1_1_23=$RDI_DATADIR/xsim/ip/axis_interconnect_v1_1_23 +xlconstant_v1_1_9=$RDI_DATADIR/xsim/ip/xlconstant_v1_1_9 +adc_dac_if_phy_v1_0_0=$RDI_DATADIR/xsim/ip/adc_dac_if_phy_v1_0_0 +mult_gen_v12_0_21=$RDI_DATADIR/xsim/ip/mult_gen_v12_0_21 +i2s_receiver_v1_0_8=$RDI_DATADIR/xsim/ip/i2s_receiver_v1_0_8 +qdriv_pl_v1_0_13=$RDI_DATADIR/xsim/ip/qdriv_pl_v1_0_13 +xbip_dsp48_wrapper_v3_0_6=$RDI_DATADIR/xsim/ip/xbip_dsp48_wrapper_v3_0_6 +lut_buffer_v2_0_1=$RDI_DATADIR/xsim/ip/lut_buffer_v2_0_1 +vid_phy_controller_v2_2_18=$RDI_DATADIR/xsim/ip/vid_phy_controller_v2_2_18 +advanced_io_wizard_phy_v1_0_3=$RDI_DATADIR/xsim/ip/advanced_io_wizard_phy_v1_0_3 +uhdsdi_gt_v2_1_4=$RDI_DATADIR/xsim/ip/uhdsdi_gt_v2_1_4 +axi_dbg_hub=$RDI_DATADIR/xsim/ip/axi_dbg_hub +anlt_subcore_ip_v1_0_2=$RDI_DATADIR/xsim/ip/anlt_subcore_ip_v1_0_2 +xxv_ethernet_v4_1_10=$RDI_DATADIR/xsim/ip/xxv_ethernet_v4_1_10 +cdcam_v1_1_0=$RDI_DATADIR/xsim/ip/cdcam_v1_1_0 +pci32_v5_0_13=$RDI_DATADIR/xsim/ip/pci32_v5_0_13 +v_mix_v5_2_9=$RDI_DATADIR/xsim/ip/v_mix_v5_2_9 +pci64_v5_0_12=$RDI_DATADIR/xsim/ip/pci64_v5_0_12 +in_system_ibert_v1_0_22=$RDI_DATADIR/xsim/ip/in_system_ibert_v1_0_22 +proc_sys_reset_v5_0_15=$RDI_DATADIR/xsim/ip/proc_sys_reset_v5_0_15 +axis_dwidth_converter_v1_1_30=$RDI_DATADIR/xsim/ip/axis_dwidth_converter_v1_1_30 +sim_ddr_v1_0=$RDI_DATADIR/xsim/ip/sim_ddr_v1_0 +sim_qdma_cpp_v1_0=$RDI_DATADIR/xsim/ip/sim_qdma_cpp_v1_0 +axi_traffic_gen_v3_0_17=$RDI_DATADIR/xsim/ip/axi_traffic_gen_v3_0_17 +v_hdmi_rx_v3_0_4=$RDI_DATADIR/xsim/ip/v_hdmi_rx_v3_0_4 +xdfe_resampler_v1_0_9=$RDI_DATADIR/xsim/ip/xdfe_resampler_v1_0_9 +zynq_ultra_ps_e_v3_3_12=$RDI_DATADIR/xsim/ip/zynq_ultra_ps_e_v3_3_12 +axi_i3c_v1_0_0=$RDI_DATADIR/xsim/ip/axi_i3c_v1_0_0 +g709_rs_encoder_v2_2_12=$RDI_DATADIR/xsim/ip/g709_rs_encoder_v2_2_12 +xpm=$RDI_DATADIR/xsim/ip/xpm +dptx_v1_0_4=$RDI_DATADIR/xsim/ip/dptx_v1_0_4 +v_axi4s_remap_v1_1_10=$RDI_DATADIR/xsim/ip/v_axi4s_remap_v1_1_10 +tri_mode_ethernet_mac_v9_0_32=$RDI_DATADIR/xsim/ip/tri_mode_ethernet_mac_v9_0_32 +xbip_bram18k_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_bram18k_v3_0_9 +shell_utils_build_info_v2_0_0=$RDI_DATADIR/xsim/ip/shell_utils_build_info_v2_0_0 +cordic_v6_0_22=$RDI_DATADIR/xsim/ip/cordic_v6_0_22 +sim_xdma_cpp_v1=$RDI_DATADIR/xsim/ip/sim_xdma_cpp_v1 +axi_hbicap_v1_0_7=$RDI_DATADIR/xsim/ip/axi_hbicap_v1_0_7 +zynq_ultra_ps_e_vip_v1_0_17=$RDI_DATADIR/xsim/ip/zynq_ultra_ps_e_vip_v1_0_17 +gtwizard_ultrascale_v1_5_4=$RDI_DATADIR/xsim/ip/gtwizard_ultrascale_v1_5_4 +remote_port_c_v4=$RDI_DATADIR/xsim/ip/remote_port_c_v4 +axi_vdma_v6_3_19=$RDI_DATADIR/xsim/ip/axi_vdma_v6_3_19 +x5io_wizard_phy_v1_0_1=$RDI_DATADIR/xsim/ip/x5io_wizard_phy_v1_0_1 +tcc_encoder_3gpp_v5_0_22=$RDI_DATADIR/xsim/ip/tcc_encoder_3gpp_v5_0_22 +axis_combiner_v1_1_29=$RDI_DATADIR/xsim/ip/axis_combiner_v1_1_29 +microblaze_v9_5_5=$RDI_DATADIR/xsim/ip/microblaze_v9_5_5 +advanced_io_wizard_v1_0_13=$RDI_DATADIR/xsim/ip/advanced_io_wizard_v1_0_13 +lib_cdc_v1_0_3=$RDI_DATADIR/xsim/ip/lib_cdc_v1_0_3 +axis_ila_adv_trig_v1_0_1=$RDI_DATADIR/xsim/ip/axis_ila_adv_trig_v1_0_1 +qdma_v5_0_9=$RDI_DATADIR/xsim/ip/qdma_v5_0_9 +ddr4_pl_v1_0_14=$RDI_DATADIR/xsim/ip/ddr4_pl_v1_0_14 +noc_mc_ddr5_phy_v1_0_1=$RDI_DATADIR/xsim/ip/noc_mc_ddr5_phy_v1_0_1 +xtlm_simple_interconnect_v1_0=$RDI_DATADIR/xsim/ip/xtlm_simple_interconnect_v1_0 +axi_sg_v4_1_18=$RDI_DATADIR/xsim/ip/axi_sg_v4_1_18 +xdfe_cc_mixer_v2_0_4=$RDI_DATADIR/xsim/ip/xdfe_cc_mixer_v2_0_4 +processing_system7_vip_v1_0_19=$RDI_DATADIR/xsim/ip/processing_system7_vip_v1_0_19 +mipi_dsi_tx_ctrl_v1_0_9=$RDI_DATADIR/xsim/ip/mipi_dsi_tx_ctrl_v1_0_9 +microblaze_riscv_v1_0_2=$RDI_DATADIR/xsim/ip/microblaze_riscv_v1_0_2 +cpm4_v1_0_16=$RDI_DATADIR/xsim/ip/cpm4_v1_0_16 +xbip_multadd_v3_0_20=$RDI_DATADIR/xsim/ip/xbip_multadd_v3_0_20 +axis_data_fifo_v2_0_13=$RDI_DATADIR/xsim/ip/axis_data_fifo_v2_0_13 +ltlib_v1_0_2=$RDI_DATADIR/xsim/ip/ltlib_v1_0_2 +axis_switch_sc_v1_1=$RDI_DATADIR/xsim/ip/axis_switch_sc_v1_1 +sim_clk_gen_v1_0_4=$RDI_DATADIR/xsim/ip/sim_clk_gen_v1_0_4 +xdfe_fft_v1_0_7=$RDI_DATADIR/xsim/ip/xdfe_fft_v1_0_7 +hsdp_trace_v2_0_2=$RDI_DATADIR/xsim/ip/hsdp_trace_v2_0_2 +blk_mem_gen_v8_4_8=$RDI_DATADIR/xsim/ip/blk_mem_gen_v8_4_8 +cam_blk_lib_v1_1_0=$RDI_DATADIR/xsim/ip/cam_blk_lib_v1_1_0 +tmr_voter_v1_0_6=$RDI_DATADIR/xsim/ip/tmr_voter_v1_0_6 +util_ff_v1_0_3=$RDI_DATADIR/xsim/ip/util_ff_v1_0_3 +interrupt_control_v3_1_5=$RDI_DATADIR/xsim/ip/interrupt_control_v3_1_5 +xdfe_ofdm_v2_1_0=$RDI_DATADIR/xsim/ip/xdfe_ofdm_v2_1_0 +audio_clock_recovery_unit_v1_0_4=$RDI_DATADIR/xsim/ip/audio_clock_recovery_unit_v1_0_4 +ten_gig_eth_mac_v15_1_12=$RDI_DATADIR/xsim/ip/ten_gig_eth_mac_v15_1_12 +axi_protocol_converter_v2_1_31=$RDI_DATADIR/xsim/ip/axi_protocol_converter_v2_1_31 +xbip_dsp48_mult_v3_0_9=$RDI_DATADIR/xsim/ip/xbip_dsp48_mult_v3_0_9 +tmr_sem_v1_0_26=$RDI_DATADIR/xsim/ip/tmr_sem_v1_0_26 +v_frmbuf_rd_v2_4_3=$RDI_DATADIR/xsim/ip/v_frmbuf_rd_v2_4_3 +cmpy_v6_0_24=$RDI_DATADIR/xsim/ip/cmpy_v6_0_24 +ta_dma_v1_0_15=$RDI_DATADIR/xsim/ip/ta_dma_v1_0_15 +v_tpg_v8_0_14=$RDI_DATADIR/xsim/ip/v_tpg_v8_0_14 +axi_tlm_ext_v1_0=$RDI_DATADIR/xsim/ip/axi_tlm_ext_v1_0 +axi_iic_v2_1_7=$RDI_DATADIR/xsim/ip/axi_iic_v2_1_7 +c_addsub_v12_0_18=$RDI_DATADIR/xsim/ip/c_addsub_v12_0_18 +audio_tpg_v1_0_2=$RDI_DATADIR/xsim/ip/audio_tpg_v1_0_2 +axi_tg_sc_v1_0=$RDI_DATADIR/xsim/ip/axi_tg_sc_v1_0 +v_vid_sdi_tx_bridge_v2_0_2=$RDI_DATADIR/xsim/ip/v_vid_sdi_tx_bridge_v2_0_2 +noc_nsu_sim_v1_0_0=$RDI_DATADIR/xsim/ip/noc_nsu_sim_v1_0_0 +axi_register_slice_v2_1_31=$RDI_DATADIR/xsim/ip/axi_register_slice_v2_1_31 +axis_switch_v1_1_31=$RDI_DATADIR/xsim/ip/axis_switch_v1_1_31 +axi_stream_monitor_v1_1_1=$RDI_DATADIR/xsim/ip/axi_stream_monitor_v1_1_1 +v_uhdsdi_vidgen_v1_0_3=$RDI_DATADIR/xsim/ip/v_uhdsdi_vidgen_v1_0_3 +bscan_jtag=$RDI_DATADIR/xsim/ip/bscan_jtag +audio_formatter_v1_0_13=$RDI_DATADIR/xsim/ip/audio_formatter_v1_0_13 +axis_vio_v1_0_11=$RDI_DATADIR/xsim/ip/axis_vio_v1_0_11 +interlaken_v2_4_17=$RDI_DATADIR/xsim/ip/interlaken_v2_4_17 +axis_register_slice_v1_1_31=$RDI_DATADIR/xsim/ip/axis_register_slice_v1_1_31 +remote_port_sc_v4=$RDI_DATADIR/xsim/ip/remote_port_sc_v4 +hdcp22_cipher_v1_0_5=$RDI_DATADIR/xsim/ip/hdcp22_cipher_v1_0_5 +picxo_fracxo_v2_0_2=$RDI_DATADIR/xsim/ip/picxo_fracxo_v2_0_2 +xdma_v4_1_29=$RDI_DATADIR/xsim/ip/xdma_v4_1_29 +accelerator_monitor_v1_1_0=$RDI_DATADIR/xsim/ip/accelerator_monitor_v1_1_0 +noc_nps6_v1_0_0=$RDI_DATADIR/xsim/ip/noc_nps6_v1_0_0 +roe_framer_v3_0_8=$RDI_DATADIR/xsim/ip/roe_framer_v3_0_8 +g975_efec_i7_v2_0_23=$RDI_DATADIR/xsim/ip/g975_efec_i7_v2_0_23 +quadsgmii_v3_5_18=$RDI_DATADIR/xsim/ip/quadsgmii_v3_5_18 +axi_ethernet_buffer_v2_0_25=$RDI_DATADIR/xsim/ip/axi_ethernet_buffer_v2_0_25 +fit_timer_v2_0_12=$RDI_DATADIR/xsim/ip/fit_timer_v2_0_12 +bsip_v1_1_1=$RDI_DATADIR/xsim/ip/bsip_v1_1_1 +lmb_v10_v3_0=$RDI_DATADIR/xsim/ip/lmb_v10_v3_0 +mailbox_v2_1_17=$RDI_DATADIR/xsim/ip/mailbox_v2_1_17 +v_vscaler_v1_1_11=$RDI_DATADIR/xsim/ip/v_vscaler_v1_1_11 +fifo_generator_v13_0_7=$RDI_DATADIR/xsim/ip/fifo_generator_v13_0_7 +av_pat_gen_v1_0_2=$RDI_DATADIR/xsim/ip/av_pat_gen_v1_0_2 +v_frmbuf_rd_v2_5_2=$RDI_DATADIR/xsim/ip/v_frmbuf_rd_v2_5_2 +mipi_rx_phy_v1_0_0=$RDI_DATADIR/xsim/ip/mipi_rx_phy_v1_0_0 +gig_ethernet_pcs_pma_v16_2_18=$RDI_DATADIR/xsim/ip/gig_ethernet_pcs_pma_v16_2_18 +noc2_nmu_v1_0_1=$RDI_DATADIR/xsim/ip/noc2_nmu_v1_0_1 +ats_switch_v1_0_10=$RDI_DATADIR/xsim/ip/ats_switch_v1_0_10 +axi_ethernetlite_v3_0_30=$RDI_DATADIR/xsim/ip/axi_ethernetlite_v3_0_30 +axis_mu_v1_0_1=$RDI_DATADIR/xsim/ip/axis_mu_v1_0_1 +vby1hs_v1_0_5=$RDI_DATADIR/xsim/ip/vby1hs_v1_0_5 +noc_sc_v1_0_0=$RDI_DATADIR/xsim/ip/noc_sc_v1_0_0 +convolution_v9_0_20=$RDI_DATADIR/xsim/ip/convolution_v9_0_20 +axi4stream_vip_v1_1_17=$RDI_DATADIR/xsim/ip/axi4stream_vip_v1_1_17 +axis_subset_converter_v1_1_31=$RDI_DATADIR/xsim/ip/axis_subset_converter_v1_1_31 +srio_gen2_v4_1_19=$RDI_DATADIR/xsim/ip/srio_gen2_v4_1_19 +lib_bmg_v1_0_17=$RDI_DATADIR/xsim/ip/lib_bmg_v1_0_17 +system_cache_v5_0_11=$RDI_DATADIR/xsim/ip/system_cache_v5_0_11 +dp_videoaxi4s_bridge_v1_0_3=$RDI_DATADIR/xsim/ip/dp_videoaxi4s_bridge_v1_0_3 +sid_v8_0_21=$RDI_DATADIR/xsim/ip/sid_v8_0_21 +blk_mem_gen_v8_3_7=$RDI_DATADIR/xsim/ip/blk_mem_gen_v8_3_7 +noc2_sc_v1_0_0=$RDI_DATADIR/xsim/ip/noc2_sc_v1_0_0 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xvhdl.log b/proj/AudioProc.sim/sim_1/behav/xsim/xvhdl.log new file mode 100644 index 0000000..8969597 --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/xvhdl.log @@ -0,0 +1,6 @@ +INFO: [VRFC 10-163] Analyzing VHDL file "/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/controlUnit.vhd" into library xil_defaultlib +INFO: [VRFC 10-3107] analyzing entity 'controlUnit' +INFO: [VRFC 10-163] Analyzing VHDL file "/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/firUnit.vhd" into library xil_defaultlib +INFO: [VRFC 10-3107] analyzing entity 'firUnit' +INFO: [VRFC 10-163] Analyzing VHDL file "/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/src/hdl/tb_firUnit.vhd" into library xil_defaultlib +INFO: [VRFC 10-3107] analyzing entity 'tb_firUnit' diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xvhdl.pb b/proj/AudioProc.sim/sim_1/behav/xsim/xvhdl.pb new file mode 100644 index 0000000000000000000000000000000000000000..ebdc7dbc21a66ff374a08ece254a12a7179d2bd6 GIT binary patch literal 789 zcmd;D&&Z|Wn3tGSS(TZWt`O$o;-iq3nUkuZq*|<`keOGKuaJ|ORFqg$si0acz$(RT zXlAU%T~VBwTb5dsnU<Ms<iq8qpOK%NTCAUCWSpCtmzu8c>+0g{@26i<pqrMNQ&N<w zn_5zul9`xSq6=42T$HSzk&>gIoS#=xl%Ertmsz4$mXTs4z{OXQnG>IqnwD6aQ<9UJ z6vbv}plfJmoWW4QTERMjkwJio%a=<u5$@#Fypqh4N(FV*Vs!ylDHbC$OLJ5Q@^Wz_ z*%HNWXrOCsXkd<P;A%<(!Gp_<f<Q>iEFvucJV^=wPA+z+4Ol(Dj#AHib9qwW`I4k~ ksOyMN06rx7pNESJVF}hC;N#+Q%}Y@TN=?o$N)ccL07ReeO8@`> literal 0 HcmV?d00001 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xvlog.log b/proj/AudioProc.sim/sim_1/behav/xsim/xvlog.log new file mode 100644 index 0000000..e69de29 diff --git a/proj/AudioProc.sim/sim_1/behav/xsim/xvlog.pb b/proj/AudioProc.sim/sim_1/behav/xsim/xvlog.pb new file mode 100644 index 0000000..b155e40 --- /dev/null +++ b/proj/AudioProc.sim/sim_1/behav/xsim/xvlog.pb @@ -0,0 +1,4 @@ + + + +End Record \ No newline at end of file diff --git a/proj/AudioProc.xpr b/proj/AudioProc.xpr new file mode 100644 index 0000000..9079871 --- /dev/null +++ b/proj/AudioProc.xpr @@ -0,0 +1,322 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Product Version: Vivado v2024.1 (64-bit) --> +<!-- --> +<!-- Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. --> +<!-- Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. --> + +<Project Product="Vivado" Version="7" Minor="67" Path="/homes/j23meneg/MEDCON/tp-filtre-etudiant-j23meneg/proj/AudioProc.xpr"> + <DefaultLaunch Dir="$PRUNDIR"/> + <Configuration> + <Option Name="Id" Val="1826229ec62c4c04a4c2273c38d8af2f"/> + <Option Name="Part" Val="xc7a200tsbg484-1"/> + <Option Name="CompiledLibDir" Val="$PCACHEDIR/compile_simlib"/> + <Option Name="CompiledLibDirXSim" Val=""/> + <Option Name="CompiledLibDirModelSim" Val="$PCACHEDIR/compile_simlib/modelsim"/> + <Option Name="CompiledLibDirQuesta" Val="$PCACHEDIR/compile_simlib/questa"/> + <Option Name="CompiledLibDirXcelium" Val="$PCACHEDIR/compile_simlib/xcelium"/> + <Option Name="CompiledLibDirVCS" Val="$PCACHEDIR/compile_simlib/vcs"/> + <Option Name="CompiledLibDirRiviera" Val="$PCACHEDIR/compile_simlib/riviera"/> + <Option Name="CompiledLibDirActivehdl" Val="$PCACHEDIR/compile_simlib/activehdl"/> + <Option Name="SimulatorInstallDirModelSim" Val=""/> + <Option Name="SimulatorInstallDirQuesta" Val=""/> + <Option Name="SimulatorInstallDirXcelium" Val=""/> + <Option Name="SimulatorInstallDirVCS" Val=""/> + <Option Name="SimulatorInstallDirRiviera" Val=""/> + <Option Name="SimulatorInstallDirActiveHdl" Val=""/> + <Option Name="SimulatorGccInstallDirModelSim" Val=""/> + <Option Name="SimulatorGccInstallDirQuesta" Val=""/> + <Option Name="SimulatorGccInstallDirXcelium" Val=""/> + <Option Name="SimulatorGccInstallDirVCS" Val=""/> + <Option Name="SimulatorGccInstallDirRiviera" Val=""/> + <Option Name="SimulatorGccInstallDirActiveHdl" Val=""/> + <Option Name="SimulatorVersionXsim" Val="2024.1"/> + <Option Name="SimulatorVersionModelSim" Val="2023.2"/> + <Option Name="SimulatorVersionQuesta" Val="2023.2"/> + <Option Name="SimulatorVersionXcelium" Val="23.03.002"/> + <Option Name="SimulatorVersionVCS" Val="U-2023.03-1"/> + <Option Name="SimulatorVersionRiviera" Val="2023.04"/> + <Option Name="SimulatorVersionActiveHdl" Val="14.1"/> + <Option Name="SimulatorGccVersionXsim" Val="9.3.0"/> + <Option Name="SimulatorGccVersionModelSim" Val="7.4.0"/> + <Option Name="SimulatorGccVersionQuesta" Val="7.4.0"/> + <Option Name="SimulatorGccVersionXcelium" Val="9.3.0"/> + <Option Name="SimulatorGccVersionVCS" Val="9.2.0"/> + <Option Name="SimulatorGccVersionRiviera" Val="9.3.0"/> + <Option Name="SimulatorGccVersionActiveHdl" Val="9.3.0"/> + <Option Name="TargetLanguage" Val="VHDL"/> + <Option Name="BoardPart" Val=""/> + <Option Name="ActiveSimSet" Val="sim_1"/> + <Option Name="DefaultLib" Val="xil_defaultlib"/> + <Option Name="ProjectType" Val="Default"/> + <Option Name="IPRepoPath" Val="$PPRDIR/../repo"/> + <Option Name="IPOutputRepo" Val="$PCACHEDIR/ip"/> + <Option Name="IPDefaultOutputPath" Val="$PGENDIR/sources_1"/> + <Option Name="IPCachePermission" Val="read"/> + <Option Name="IPCachePermission" Val="write"/> + <Option Name="EnableCoreContainer" Val="FALSE"/> + <Option Name="EnableResourceEstimation" Val="FALSE"/> + <Option Name="SimCompileState" Val="TRUE"/> + <Option Name="CreateRefXciForCoreContainers" Val="FALSE"/> + <Option Name="IPUserFilesDir" Val="$PIPUSERFILESDIR"/> + <Option Name="IPStaticSourceDir" Val="$PIPUSERFILESDIR/ipstatic"/> + <Option Name="EnableBDX" Val="FALSE"/> + <Option Name="WTXSimLaunchSim" Val="7"/> + <Option Name="WTModelSimLaunchSim" Val="0"/> + <Option Name="WTQuestaLaunchSim" Val="0"/> + <Option Name="WTIesLaunchSim" Val="0"/> + <Option Name="WTVcsLaunchSim" Val="0"/> + <Option Name="WTRivieraLaunchSim" Val="0"/> + <Option Name="WTActivehdlLaunchSim" Val="0"/> + <Option Name="WTXSimExportSim" Val="1"/> + <Option Name="WTModelSimExportSim" Val="1"/> + <Option Name="WTQuestaExportSim" Val="1"/> + <Option Name="WTIesExportSim" Val="0"/> + <Option Name="WTVcsExportSim" Val="1"/> + <Option Name="WTRivieraExportSim" Val="1"/> + <Option Name="WTActivehdlExportSim" Val="1"/> + <Option Name="GenerateIPUpgradeLog" Val="TRUE"/> + <Option Name="XSimRadix" Val="hex"/> + <Option Name="XSimTimeUnit" Val="ns"/> + <Option Name="XSimArrayDisplayLimit" Val="1024"/> + <Option Name="XSimTraceLimit" Val="65536"/> + <Option Name="SimTypes" Val="rtl"/> + <Option Name="SimTypes" Val="bfm"/> + <Option Name="SimTypes" Val="tlm"/> + <Option Name="SimTypes" Val="tlm_dpi"/> + <Option Name="MEMEnableMemoryMapGeneration" Val="TRUE"/> + <Option Name="DcpsUptoDate" Val="TRUE"/> + <Option Name="ClassicSocBoot" Val="FALSE"/> + <Option Name="LocalIPRepoLeafDirName" Val="ip_repo"/> + </Configuration> + <FileSets Version="1" Minor="32"> + <FileSet Name="sources_1" Type="DesignSrcs" RelSrcDir="$PSRCDIR/sources_1" RelGenDir="$PGENDIR/sources_1"> + <Filter Type="Srcs"/> + <File Path="$PPRDIR/../src/hdl/processingUnitIP.v"> + <FileInfo> + <Attr Name="UsedIn" Val="synthesis"/> + <Attr Name="UsedIn" Val="implementation"/> + <Attr Name="UsedIn" Val="simulation"/> + </FileInfo> + </File> + <File Path="$PPRDIR/../src/ip/clk_wiz_0/clk_wiz_0.xci"> + <FileInfo> + <Attr Name="AutoDisabled" Val="1"/> + <Attr Name="UsedIn" Val="synthesis"/> + <Attr Name="UsedIn" Val="implementation"/> + <Attr Name="UsedIn" Val="simulation"/> + </FileInfo> + </File> + <File Path="$PPRDIR/../src/hdl/audio_init.v"> + <FileInfo> + <Attr Name="AutoDisabled" Val="1"/> + <Attr Name="UsedIn" Val="synthesis"/> + <Attr Name="UsedIn" Val="implementation"/> + <Attr Name="UsedIn" Val="simulation"/> + </FileInfo> + </File> + <File Path="$PPRDIR/../src/hdl/debounce.v"> + <FileInfo> + <Attr Name="AutoDisabled" Val="1"/> + <Attr Name="UsedIn" Val="synthesis"/> + <Attr Name="UsedIn" Val="implementation"/> + <Attr Name="UsedIn" Val="simulation"/> + </FileInfo> + </File> + <File Path="$PPRDIR/../src/hdl/TWICtl.vhd"> + <FileInfo> + <Attr Name="AutoDisabled" Val="1"/> + <Attr Name="UsedIn" Val="synthesis"/> + <Attr Name="UsedIn" Val="simulation"/> + </FileInfo> + </File> + <File Path="$PPRDIR/../src/hdl/controlUnit.vhd"> + <FileInfo> + <Attr Name="AutoDisabled" Val="1"/> + <Attr Name="UsedIn" Val="synthesis"/> + <Attr Name="UsedIn" Val="simulation"/> + </FileInfo> + </File> + <File Path="$PPRDIR/../src/hdl/operativeUnit.vhd"> + <FileInfo> + <Attr Name="UserDisabled" Val="1"/> + <Attr Name="AutoDisabled" Val="1"/> + <Attr Name="UsedIn" Val="synthesis"/> + <Attr Name="UsedIn" Val="simulation"/> + </FileInfo> + </File> + <File Path="$PPRDIR/../src/hdl/firUnit.vhd"> + <FileInfo> + <Attr Name="AutoDisabled" Val="1"/> + <Attr Name="UsedIn" Val="synthesis"/> + <Attr Name="UsedIn" Val="simulation"/> + </FileInfo> + </File> + <File Path="$PPRDIR/../src/hdl/fir.vhd"> + <FileInfo> + <Attr Name="AutoDisabled" Val="1"/> + <Attr Name="UsedIn" Val="synthesis"/> + <Attr Name="UsedIn" Val="simulation"/> + </FileInfo> + </File> + <File Path="$PPRDIR/../src/hdl/i2s_ctl.vhd"> + <FileInfo> + <Attr Name="AutoDisabled" Val="1"/> + <Attr Name="UsedIn" Val="synthesis"/> + <Attr Name="UsedIn" Val="simulation"/> + </FileInfo> + </File> + <File Path="$PPRDIR/../src/hdl/audioProc.v"> + <FileInfo> + <Attr Name="AutoDisabled" Val="1"/> + <Attr Name="UsedIn" Val="synthesis"/> + <Attr Name="UsedIn" Val="implementation"/> + <Attr Name="UsedIn" Val="simulation"/> + </FileInfo> + </File> + <File Path="$PPRDIR/../src/hdl/tb_firUnit.vhd"> + <FileInfo> + <Attr Name="AutoDisabled" Val="1"/> + <Attr Name="UsedIn" Val="synthesis"/> + <Attr Name="UsedIn" Val="simulation"/> + </FileInfo> + </File> + <Config> + <Option Name="DesignMode" Val="RTL"/> + <Option Name="TopModule" Val="operativeUnit"/> + <Option Name="TopLib" Val="xil_defaultlib"/> + <Option Name="TopRTLFile" Val="$PPRDIR/../src/hdl/processingUnitIP.v"/> + </Config> + </FileSet> + <FileSet Name="constrs_1" Type="Constrs" RelSrcDir="$PSRCDIR/constrs_1" RelGenDir="$PGENDIR/constrs_1"> + <Filter Type="Constrs"/> + <File Path="$PPRDIR/../src/constraints/NexysVideo_Master.xdc"> + <FileInfo> + <Attr Name="UsedIn" Val="synthesis"/> + <Attr Name="UsedIn" Val="implementation"/> + </FileInfo> + </File> + <Config> + <Option Name="ConstrsType" Val="XDC"/> + </Config> + </FileSet> + <FileSet Name="sim_1" Type="SimulationSrcs" RelSrcDir="$PSRCDIR/sim_1" RelGenDir="$PGENDIR/sim_1"> + <File Path="$PPRDIR/tb_firUnit_behav.wcfg"> + <FileInfo> + <Attr Name="UsedIn" Val="simulation"/> + </FileInfo> + </File> + <Config> + <Option Name="DesignMode" Val="RTL"/> + <Option Name="TopModule" Val="tb_firUnit"/> + <Option Name="TopLib" Val="xil_defaultlib"/> + <Option Name="TransportPathDelay" Val="0"/> + <Option Name="TransportIntDelay" Val="0"/> + <Option Name="SelectedSimModel" Val="rtl"/> + <Option Name="PamDesignTestbench" Val=""/> + <Option Name="PamDutBypassFile" Val="xil_dut_bypass"/> + <Option Name="PamSignalDriverFile" Val="xil_bypass_driver"/> + <Option Name="PamPseudoTop" Val="pseudo_tb"/> + <Option Name="SrcSet" Val="sources_1"/> + <Option Name="XSimWcfgFile" Val="$PPRDIR/tb_firUnit_behav.wcfg"/> + </Config> + </FileSet> + <FileSet Name="utils_1" Type="Utils" RelSrcDir="$PSRCDIR/utils_1" RelGenDir="$PGENDIR/utils_1"> + <Filter Type="Utils"/> + <Config> + <Option Name="TopAutoSet" Val="TRUE"/> + </Config> + </FileSet> + </FileSets> + <Simulators> + <Simulator Name="XSim"> + <Option Name="Description" Val="Vivado Simulator"/> + <Option Name="CompiledLib" Val="0"/> + </Simulator> + <Simulator Name="ModelSim"> + <Option Name="Description" Val="ModelSim Simulator"/> + </Simulator> + <Simulator Name="Questa"> + <Option Name="Description" Val="Questa Advanced Simulator"/> + </Simulator> + <Simulator Name="Xcelium"> + <Option Name="Description" Val="Xcelium Parallel Simulator"/> + </Simulator> + <Simulator Name="VCS"> + <Option Name="Description" Val="Verilog Compiler Simulator (VCS)"/> + </Simulator> + <Simulator Name="Riviera"> + <Option Name="Description" Val="Riviera-PRO Simulator"/> + </Simulator> + </Simulators> + <Runs Version="1" Minor="22"> + <Run Id="synth_1" Type="Ft3:Synth" SrcSet="sources_1" Part="xc7a200tsbg484-1" ConstrsSet="constrs_1" Description="Higher performance designs, resource sharing is turned off, the global fanout guide is set to a lower number, FSM extraction forced to one-hot, LUT combining is disabled, equivalent registers are preserved, SRL are inferred with a larger threshold" AutoIncrementalCheckpoint="true" WriteIncrSynthDcp="false" State="current" IncludeInArchive="true" IsChild="false" AutoIncrementalDir="$PSRCDIR/utils_1/imports/synth_1" AutoRQSDir="$PSRCDIR/utils_1/imports/synth_1" ParallelReportGen="true"> + <Strategy Version="1" Minor="2"> + <StratHandle Name="Flow_PerfOptimized_High" Flow="Vivado Synthesis 2014"> + <Desc>Higher performance designs, resource sharing is turned off, the global fanout guide is set to a lower number, FSM extraction forced to one-hot, LUT combining is disabled, equivalent registers are preserved, SRL are inferred with a larger threshold</Desc> + </StratHandle> + <Step Id="synth_design"> + <Option Id="FsmExtraction">1</Option> + <Option Id="KeepEquivalentRegisters">1</Option> + <Option Id="NoCombineLuts">1</Option> + <Option Id="RepFanoutThreshold">400</Option> + <Option Id="ResourceSharing">2</Option> + <Option Id="ShregMinSize">5</Option> + </Step> + </Strategy> + <ReportStrategy Name="Vivado Synthesis Default Reports" Flow="Vivado Synthesis 2017"/> + <Report Name="ROUTE_DESIGN.REPORT_METHODOLOGY" Enabled="1"/> + <RQSFiles/> + </Run> + <Run Id="impl_1" Type="Ft2:EntireDesign" Part="xc7a200tsbg484-1" ConstrsSet="constrs_1" Description="Vivado Implementation Defaults" AutoIncrementalCheckpoint="false" WriteIncrSynthDcp="false" State="current" SynthRun="synth_1" IncludeInArchive="true" IsChild="false" GenFullBitstream="true" AutoIncrementalDir="$PSRCDIR/utils_1/imports/impl_1" AutoRQSDir="$PSRCDIR/utils_1/imports/impl_1" ParallelReportGen="true"> + <Strategy Version="1" Minor="2"> + <StratHandle Name="Vivado Implementation Defaults" Flow="Vivado Implementation 2014"> + <Desc>Vivado Implementation Defaults</Desc> + </StratHandle> + <Step Id="init_design"/> + <Step Id="opt_design"/> + <Step Id="power_opt_design"/> + <Step Id="place_design"/> + <Step Id="post_place_power_opt_design"/> + <Step Id="phys_opt_design"/> + <Step Id="route_design"/> + <Step Id="post_route_phys_opt_design"/> + <Step Id="write_bitstream"> + <Option Id="BinFile">1</Option> + </Step> + </Strategy> + <ReportStrategy Name="Vivado Implementation Default Reports" Flow="Vivado Implementation 2017"/> + <Report Name="ROUTE_DESIGN.REPORT_METHODOLOGY" Enabled="1"/> + <RQSFiles/> + </Run> + </Runs> + <Board/> + <DashboardSummary Version="1" Minor="0"> + <Dashboards> + <Dashboard Name="default_dashboard"> + <Gadgets> + <Gadget Name="drc_1" Type="drc" Version="1" Row="2" Column="0"> + <GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_route_report_drc_0 "/> + </Gadget> + <Gadget Name="methodology_1" Type="methodology" Version="1" Row="2" Column="1"> + <GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_route_report_methodology_0 "/> + </Gadget> + <Gadget Name="power_1" Type="power" Version="1" Row="1" Column="0"> + <GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_route_report_power_0 "/> + </Gadget> + <Gadget Name="timing_1" Type="timing" Version="1" Row="0" Column="1"> + <GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_route_report_timing_summary_0 "/> + </Gadget> + <Gadget Name="utilization_1" Type="utilization" Version="1" Row="0" Column="0"> + <GadgetParam Name="REPORTS" Type="string_list" Value="synth_1#synth_1_synth_report_utilization_0 "/> + <GadgetParam Name="RUN.STEP" Type="string" Value="synth_design"/> + <GadgetParam Name="RUN.TYPE" Type="string" Value="synthesis"/> + </Gadget> + <Gadget Name="utilization_2" Type="utilization" Version="1" Row="1" Column="1"> + <GadgetParam Name="REPORTS" Type="string_list" Value="impl_1#impl_1_place_report_utilization_0 "/> + </Gadget> + </Gadgets> + </Dashboard> + <CurrentDashboard>default_dashboard</CurrentDashboard> + </Dashboards> + </DashboardSummary> +</Project> diff --git a/proj/ip_upgrade.log b/proj/ip_upgrade.log new file mode 100644 index 0000000..0991554 --- /dev/null +++ b/proj/ip_upgrade.log @@ -0,0 +1,27 @@ +Copyright 1986-2022 Xilinx, Inc. All Rights Reserved. Copyright 2022-2024 Advanced Micro Devices, Inc. All Rights Reserved. +--------------------------------------------------------------------------------------------------------------------------------------------- +| Tool Version : Vivado v.2024.1 (lin64) Build 5076996 Wed May 22 18:36:09 MDT 2024 +| Date : Wed Feb 26 12:12:35 2025 +| Host : fl-tp-br-669 running 64-bit Ubuntu 24.04.1 LTS +| Command : upgrade_ip +| Device : xc7a200tsbg484-1 +--------------------------------------------------------------------------------------------------------------------------------------------- + +Upgrade Log for IP 'clk_wiz_0' + +1. Summary +---------- + +CAUTION (success, with warnings) in the upgrade of clk_wiz_0 from xilinx.com:ip:clk_wiz:5.2 to xilinx.com:ip:clk_wiz:6.0 (Rev. 14) + +After upgrade, an IP may have parameter and port differences compared to the original customization. Please review the parameters within the IP customization GUI to ensure proper functionality. Also, please review the updated IP instantiation template to ensure proper connectivity, and update your design if required. + +2. Connection Warnings +---------------------- + +Detected external port differences while upgrading 'clk_wiz_0'. These changes may impact your design. + + +-Upgraded port order differs after port 'reset' + + diff --git a/proj/tb_firUnit_behav.wcfg b/proj/tb_firUnit_behav.wcfg new file mode 100644 index 0000000..dc82ba5 --- /dev/null +++ b/proj/tb_firUnit_behav.wcfg @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8"?> +<wave_config> + <wave_state> + </wave_state> + <db_ref_list> + <db_ref path="tb_firUnit_behav.wdb" id="1"> + <top_modules> + <top_module name="glbl" /> + <top_module name="tb_firUnit" /> + </top_modules> + </db_ref> + </db_ref_list> + <zoom_setting> + <ZoomStartTime time="8,222.820 ns"></ZoomStartTime> + <ZoomEndTime time="9,522.821 ns"></ZoomEndTime> + <Cursor1Time time="766.530 ns"></Cursor1Time> + </zoom_setting> + <column_width_setting> + <NameColumnWidth column_width="175"></NameColumnWidth> + <ValueColumnWidth column_width="134"></ValueColumnWidth> + </column_width_setting> + <WVObjectSize size="9" /> + <wvobject type="logic" fp_name="/tb_firUnit/SC_clock"> + <obj_property name="ElementShortName">SC_clock</obj_property> + <obj_property name="ObjectShortName">SC_clock</obj_property> + </wvobject> + <wvobject type="logic" fp_name="/tb_firUnit/SC_reset"> + <obj_property name="ElementShortName">SC_reset</obj_property> + <obj_property name="ObjectShortName">SC_reset</obj_property> + </wvobject> + <wvobject type="array" fp_name="/tb_firUnit/SC_inputSample"> + <obj_property name="ElementShortName">SC_inputSample[7:0]</obj_property> + <obj_property name="ObjectShortName">SC_inputSample[7:0]</obj_property> + </wvobject> + <wvobject type="logic" fp_name="/tb_firUnit/SC_inputSampleValid"> + <obj_property name="ElementShortName">SC_inputSampleValid</obj_property> + <obj_property name="ObjectShortName">SC_inputSampleValid</obj_property> + </wvobject> + <wvobject type="array" fp_name="/tb_firUnit/SC_filteredSample"> + <obj_property name="ElementShortName">SC_filteredSample[7:0]</obj_property> + <obj_property name="ObjectShortName">SC_filteredSample[7:0]</obj_property> + <obj_property name="Radix">SIGNEDDECRADIX</obj_property> + </wvobject> + <wvobject type="logic" fp_name="/tb_firUnit/SC_filteredSampleValid"> + <obj_property name="ElementShortName">SC_filteredSampleValid</obj_property> + <obj_property name="ObjectShortName">SC_filteredSampleValid</obj_property> + </wvobject> + <wvobject type="logic" fp_name="/tb_firUnit/firUnit_1/SC_incrAddress"> + <obj_property name="ElementShortName">SC_incrAddress</obj_property> + <obj_property name="ObjectShortName">SC_incrAddress</obj_property> + </wvobject> + <wvobject type="array" fp_name="/tb_firUnit/firUnit_1/operativeUnit_1/SR_readAddress_reg__0"> + <obj_property name="ElementShortName">SR_readAddress_reg__0[3:0]</obj_property> + <obj_property name="ObjectShortName">SR_readAddress_reg__0[3:0]</obj_property> + </wvobject> + <wvobject type="other" fp_name="/tb_firUnit/firUnit_1/controlUnit_1/SR_presentState"> + <obj_property name="ElementShortName">SR_presentState</obj_property> + <obj_property name="ObjectShortName">SR_presentState</obj_property> + </wvobject> +</wave_config> diff --git a/src/hdl/controlUnit.vhd b/src/hdl/controlUnit.vhd index 705905d..0248523 100644 --- a/src/hdl/controlUnit.vhd +++ b/src/hdl/controlUnit.vhd @@ -49,34 +49,58 @@ architecture archi_operativeUnit of controlUnit is begin - process (_BLANK_) is + process (I_reset, I_clock) is begin if I_reset = '1' then -- asynchronous reset (active high) - SR_presentState <= _BLANK_ + SR_presentState <= WAIT_SAMPLE; elsif rising_edge(I_clock) then -- rising clock edge - _BLANK_ + SR_presentState <= SR_futurState; end if; end process; - process (_BLANK_) is + process (SR_presentState, I_inputSampleValid, I_processingDone) is begin case SR_presentState is when WAIT_SAMPLE => - _BLANK_ + if (I_inputSampleValid = '1') then + SR_futurState <= STORE; + else + SR_futurState <= WAIT_SAMPLE; + end if; + + when STORE => + SR_futurState <= PROCESSING_LOOP; + + when PROCESSING_LOOP => + if (I_processingDone = '1') then + SR_futurState <= OUTPUT; + else + SR_futurState <= PROCESSING_LOOP; + end if; + + + when OUTPUT => + SR_futurState <= WAIT_END_SAMPLE; + + when WAIT_END_SAMPLE => + if (I_inputSampleValid = '0') then + SR_futurState <= WAIT_SAMPLE; + else + SR_futurState <= WAIT_END_SAMPLE; + end if; when others => null; end case; end process; - O_loadShift <= '1' when _BLANK_ ; - O_initAddress <= '1' when _BLANK_ ; - O_incrAddress <= '1' when _BLANK_ ; - O_initSum <= '1' when _BLANK_ ; - O_loadSum <= '1' when _BLANK_ ; - O_loadY <= '1' when _BLANK_ ; - O_FilteredSampleValid <= '1' when _BLANK_ ; - + O_loadShift <= '1' when SR_presentState=STORE else '0'; + O_initAddress <= '1' when SR_presentState=STORE else '0'; + O_incrAddress <= '1' when SR_presentState=PROCESSING_LOOP else '0'; + O_initSum <= '1' when SR_presentState=STORE else '0'; + O_loadSum <= '1' when SR_presentState=PROCESSING_LOOP else '0'; + O_loadY <= '1' when SR_presentState=OUTPUT else '0'; + O_FilteredSampleValid <= '1' when SR_presentState=WAIT_END_SAMPLE else '0'; diff --git a/src/ip/clk_wiz_0/clk_wiz_0.dcp b/src/ip/clk_wiz_0/clk_wiz_0.dcp deleted file mode 100644 index 1df5ec10a4ff9e7c1b2e8c55ee8f41698941ff5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12528 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 diff --git a/src/ip/clk_wiz_0/clk_wiz_0.v b/src/ip/clk_wiz_0/clk_wiz_0.v index 2e3a203..088af81 100644 --- a/src/ip/clk_wiz_0/clk_wiz_0.v +++ b/src/ip/clk_wiz_0/clk_wiz_0.v @@ -1,23 +1,22 @@ + // file: clk_wiz_0.v -// -// (c) Copyright 2008 - 2013 Xilinx, Inc. All rights reserved. -// +// (c) Copyright 2017-2018, 2023 Advanced Micro Devices, Inc. All rights reserved. +// // This file contains confidential and proprietary information -// of Xilinx, Inc. and is protected under U.S. and -// international copyright and other intellectual property -// laws. -// +// of AMD and is protected under U.S. and international copyright +// and other intellectual property laws. +// // DISCLAIMER // This disclaimer is not a license and does not grant any // rights to the materials distributed herewith. Except as // otherwise provided in a valid license issued to you by -// Xilinx, and to the maximum extent permitted by applicable +// AMD, and to the maximum extent permitted by applicable // law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND -// WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES +// WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES // AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING // BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- // INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and -// (2) Xilinx shall not be liable (whether in contract or tort, +// (2) AMD shall not be liable (whether in contract or tort, // including negligence, or under any other theory of // liability) for any loss or damage of any kind or nature // related to, arising under or in connection with these @@ -26,11 +25,11 @@ // (including loss of data, profits, goodwill, or any type of // loss or damage suffered as a result of any action brought // by a third party) even if such damage or loss was -// reasonably foreseeable or Xilinx had been advised of the +// reasonably foreseeable or AMD had been advised of the // possibility of the same. -// +// // CRITICAL APPLICATIONS -// Xilinx products are not designed or intended to be fail- +// AMD products are not designed or intended to be fail- // safe, or for use in any application requiring fail-safe // performance, such as life-support or safety devices or // systems, Class III medical devices, nuclear facilities, @@ -39,13 +38,12 @@ // injury, or severe property or environmental damage // (individually and collectively, "Critical // Applications"). Customer assumes the sole risk and -// liability of any use of Xilinx products in Critical +// liability of any use of AMD products in Critical // Applications, subject only to applicable laws and // regulations governing limitations on product liability. -// +// // THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS // PART OF THIS FILE AT ALL TIMES. -// //---------------------------------------------------------------------------- // User entered comments //---------------------------------------------------------------------------- @@ -55,10 +53,10 @@ // Output Output Phase Duty Cycle Pk-to-Pk Phase // Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps) //---------------------------------------------------------------------------- -// CLK_OUT1___100.000______0.000______50.0______151.366____132.063 -// CLK_OUT2___200.000______0.000______50.0______132.221____132.063 -// CLK_OUT3____12.000______0.000______50.0______231.952____132.063 -// CLK_OUT4____50.000______0.000______50.0______174.353____132.063 +// clk_out1__100.00000______0.000______50.0______151.366____132.063 +// clk_out2__200.00000______0.000______50.0______132.221____132.063 +// clk_out3__12.00000______0.000______50.0______231.952____132.063 +// clk_out4__50.00000______0.000______50.0______174.353____132.063 // //---------------------------------------------------------------------------- // Input Clock Freq (MHz) Input Jitter (UI) @@ -67,12 +65,10 @@ `timescale 1ps/1ps -(* CORE_GENERATION_INFO = "clk_wiz_0,clk_wiz_v5_2_0,{component_name=clk_wiz_0,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=4,clkin1_period=10.0,clkin2_period=10.0,use_power_down=false,use_reset=true,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}" *) +(* CORE_GENERATION_INFO = "clk_wiz_0,clk_wiz_v6_0_14_0_0,{component_name=clk_wiz_0,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=4,clkin1_period=10.0,clkin2_period=10.0,use_power_down=false,use_reset=true,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}" *) module clk_wiz_0 ( - // Clock in ports - input clk_in1, // Clock out ports output clk_out1, output clk_out2, @@ -80,13 +76,13 @@ module clk_wiz_0 output clk_out4, // Status and control signals input reset, - output locked + output locked, + // Clock in ports + input clk_in1 ); clk_wiz_0_clk_wiz inst ( - // Clock in ports - .clk_in1(clk_in1), // Clock out ports .clk_out1(clk_out1), .clk_out2(clk_out2), @@ -94,7 +90,9 @@ module clk_wiz_0 .clk_out4(clk_out4), // Status and control signals .reset(reset), - .locked(locked) + .locked(locked), + // Clock in ports + .clk_in1(clk_in1) ); endmodule diff --git a/src/ip/clk_wiz_0/clk_wiz_0.vho b/src/ip/clk_wiz_0/clk_wiz_0.vho index c6b126b..b02ca8e 100644 --- a/src/ip/clk_wiz_0/clk_wiz_0.vho +++ b/src/ip/clk_wiz_0/clk_wiz_0.vho @@ -1,22 +1,21 @@ --- --- (c) Copyright 2008 - 2013 Xilinx, Inc. All rights reserved. --- + +-- (c) Copyright 2017-2018, 2023 Advanced Micro Devices, Inc. All rights reserved. +-- -- This file contains confidential and proprietary information --- of Xilinx, Inc. and is protected under U.S. and --- international copyright and other intellectual property --- laws. --- +-- of AMD and is protected under U.S. and international copyright +-- and other intellectual property laws. +-- -- DISCLAIMER -- This disclaimer is not a license and does not grant any -- rights to the materials distributed herewith. Except as -- otherwise provided in a valid license issued to you by --- Xilinx, and to the maximum extent permitted by applicable +-- AMD, and to the maximum extent permitted by applicable -- law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND --- WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES +-- WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES -- AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING -- BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- -- INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and --- (2) Xilinx shall not be liable (whether in contract or tort, +-- (2) AMD shall not be liable (whether in contract or tort, -- including negligence, or under any other theory of -- liability) for any loss or damage of any kind or nature -- related to, arising under or in connection with these @@ -25,11 +24,11 @@ -- (including loss of data, profits, goodwill, or any type of -- loss or damage suffered as a result of any action brought -- by a third party) even if such damage or loss was --- reasonably foreseeable or Xilinx had been advised of the +-- reasonably foreseeable or AMD had been advised of the -- possibility of the same. --- +-- -- CRITICAL APPLICATIONS --- Xilinx products are not designed or intended to be fail- +-- AMD products are not designed or intended to be fail- -- safe, or for use in any application requiring fail-safe -- performance, such as life-support or safety devices or -- systems, Class III medical devices, nuclear facilities, @@ -38,13 +37,12 @@ -- injury, or severe property or environmental damage -- (individually and collectively, "Critical -- Applications"). Customer assumes the sole risk and --- liability of any use of Xilinx products in Critical +-- liability of any use of AMD products in Critical -- Applications, subject only to applicable laws and -- regulations governing limitations on product liability. --- +-- -- THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS -- PART OF THIS FILE AT ALL TIMES. --- ------------------------------------------------------------------------------ -- User entered comments ------------------------------------------------------------------------------ @@ -54,10 +52,10 @@ -- Output Output Phase Duty Cycle Pk-to-Pk Phase -- Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps) ------------------------------------------------------------------------------ --- CLK_OUT1___100.000______0.000______50.0______151.366____132.063 --- CLK_OUT2___200.000______0.000______50.0______132.221____132.063 --- CLK_OUT3____12.000______0.000______50.0______231.952____132.063 --- CLK_OUT4____50.000______0.000______50.0______174.353____132.063 +-- clk_out1__100.00000______0.000______50.0______151.366____132.063 +-- clk_out2__200.00000______0.000______50.0______132.221____132.063 +-- clk_out3__12.00000______0.000______50.0______231.952____132.063 +-- clk_out4__50.00000______0.000______50.0______174.353____132.063 -- ------------------------------------------------------------------------------ -- Input Clock Freq (MHz) Input Jitter (UI) @@ -70,7 +68,6 @@ component clk_wiz_0 port (-- Clock in ports - clk_in1 : in std_logic; -- Clock out ports clk_out1 : out std_logic; clk_out2 : out std_logic; @@ -78,7 +75,8 @@ port clk_out4 : out std_logic; -- Status and control signals reset : in std_logic; - locked : out std_logic + locked : out std_logic; + clk_in1 : in std_logic ); end component; @@ -88,9 +86,6 @@ end component; ------------- Begin Cut here for INSTANTIATION Template ----- INST_TAG your_instance_name : clk_wiz_0 port map ( - - -- Clock in ports - clk_in1 => clk_in1, -- Clock out ports clk_out1 => clk_out1, clk_out2 => clk_out2, @@ -98,6 +93,8 @@ your_instance_name : clk_wiz_0 clk_out4 => clk_out4, -- Status and control signals reset => reset, - locked => locked + locked => locked, + -- Clock in ports + clk_in1 => clk_in1 ); -- INST_TAG_END ------ End INSTANTIATION Template ------------ diff --git a/src/ip/clk_wiz_0/clk_wiz_0.xci b/src/ip/clk_wiz_0/clk_wiz_0.xci index 79f1c0a..8735bea 100644 --- a/src/ip/clk_wiz_0/clk_wiz_0.xci +++ b/src/ip/clk_wiz_0/clk_wiz_0.xci @@ -1,525 +1,728 @@ -<?xml version="1.0" encoding="UTF-8"?> -<spirit:design xmlns:xilinx="http://www.xilinx.com" xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1685-2009" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - <spirit:vendor>xilinx.com</spirit:vendor> - <spirit:library>xci</spirit:library> - <spirit:name>unknown</spirit:name> - <spirit:version>1.0</spirit:version> - <spirit:componentInstances> - <spirit:componentInstance> - <spirit:instanceName>clk_wiz_0</spirit:instanceName> - <spirit:componentRef spirit:vendor="xilinx.com" spirit:library="ip" spirit:name="clk_wiz" spirit:version="5.2"/> - <spirit:configurableElementValues> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CDDCDONE_PORT">cddcdone</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CDDCREQ_PORT">cddcreq</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKFB_IN_N_PORT">clkfb_in_n</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKFB_IN_PORT">clkfb_in</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKFB_IN_P_PORT">clkfb_in_p</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING">SINGLE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKFB_OUT_N_PORT">clkfb_out_n</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKFB_OUT_PORT">clkfb_out</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKFB_OUT_P_PORT">clkfb_out_p</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKFB_STOPPED_PORT">clkfb_stopped</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKIN1_JITTER_PS">100.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKIN2_JITTER_PS">100.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT1_DRIVES">BUFG</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT1_DUTY_CYCLE">50.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT1_OUT_FREQ">100.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT1_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT1_REQUESTED_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT1_REQUESTED_OUT_FREQ">100.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT1_REQUESTED_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT1_SEQUENCE_NUMBER">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_DRIVES">BUFG</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_DUTY_CYCLE">50.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_OUT_FREQ">200.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_REQUESTED_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_REQUESTED_OUT_FREQ">200.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_REQUESTED_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_SEQUENCE_NUMBER">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT2_USED">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT3_DRIVES">BUFG</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT3_DUTY_CYCLE">50.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT3_OUT_FREQ">12.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT3_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT3_REQUESTED_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT3_REQUESTED_OUT_FREQ">12.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT3_REQUESTED_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT3_SEQUENCE_NUMBER">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT3_USED">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT4_DRIVES">BUFG</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT4_DUTY_CYCLE">50.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT4_OUT_FREQ">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT4_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT4_REQUESTED_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT4_REQUESTED_OUT_FREQ">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT4_REQUESTED_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT4_SEQUENCE_NUMBER">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT4_USED">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT5_DRIVES">BUFG</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT5_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT5_OUT_FREQ">100.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT5_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT5_REQUESTED_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT5_REQUESTED_OUT_FREQ">100.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT5_REQUESTED_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT5_SEQUENCE_NUMBER">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT5_USED">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT6_DRIVES">BUFG</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT6_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT6_OUT_FREQ">100.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT6_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT6_REQUESTED_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT6_REQUESTED_OUT_FREQ">100.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT6_REQUESTED_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT6_SEQUENCE_NUMBER">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT6_USED">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT7_DRIVES">BUFG</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT7_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT7_OUT_FREQ">100.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT7_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT7_REQUESTED_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT7_REQUESTED_OUT_FREQ">100.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT7_REQUESTED_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT7_SEQUENCE_NUMBER">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUT7_USED">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLKOUTPHY_MODE">VCO</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLK_IN_SEL_PORT">clk_in_sel</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLK_OUT1_PORT">clk_out1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLK_OUT2_PORT">clk_out2</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLK_OUT3_PORT">clk_out3</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLK_OUT4_PORT">clk_out4</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLK_OUT5_PORT">clk_out5</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLK_OUT6_PORT">clk_out6</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLK_OUT7_PORT">clk_out7</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLK_VALID_PORT">CLK_VALID</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_CLOCK_MGR_TYPE">NA</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_DADDR_PORT">daddr</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_DCLK_PORT">dclk</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_DEN_PORT">den</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_DIN_PORT">din</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_DOUT_PORT">dout</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_DRDY_PORT">drdy</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_DWE_PORT">dwe</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_ENABLE_CLKOUTPHY">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_FEEDBACK_SOURCE">FDBK_AUTO</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_HAS_CDDC">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_INCLK_SUM_ROW0">Input Clock Freq (MHz) Input Jitter (UI)</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_INCLK_SUM_ROW1">__primary_________100.000____________0.010</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_INCLK_SUM_ROW2">no_secondary_input_clock </spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_INPUT_CLK_STOPPED_PORT">input_clk_stopped</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_INTERFACE_SELECTION">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_IN_FREQ_UNITS">Units_MHz</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_JITTER_SEL">No_Jitter</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_LOCKED_PORT">locked</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_BANDWIDTH">OPTIMIZED</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKFBOUT_MULT_F">6.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKFBOUT_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKFBOUT_USE_FINE_PS">FALSE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKIN1_PERIOD">10.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKIN2_PERIOD">10.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT0_DIVIDE_F">6.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT0_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT0_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT0_USE_FINE_PS">FALSE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT1_DIVIDE">3</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT1_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT1_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT1_USE_FINE_PS">FALSE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT2_DIVIDE">50</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT2_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT2_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT2_USE_FINE_PS">FALSE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT3_DIVIDE">12</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT3_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT3_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT3_USE_FINE_PS">FALSE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT4_CASCADE">FALSE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT4_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT4_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT4_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT4_USE_FINE_PS">FALSE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT5_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT5_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT5_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT5_USE_FINE_PS">FALSE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT6_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT6_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT6_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLKOUT6_USE_FINE_PS">FALSE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_CLOCK_HOLD">FALSE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_COMPENSATION">ZHOLD</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_DIVCLK_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_NOTES">None</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_REF_JITTER1">0.010</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_REF_JITTER2">0.010</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_MMCM_STARTUP_WAIT">FALSE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_NUM_OUT_CLKS">4</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW0A"> Output Output Phase Duty Cycle Pk-to-Pk Phase</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW0B"> Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW1">CLK_OUT1___100.000______0.000______50.0______151.366____132.063</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW2">CLK_OUT2___200.000______0.000______50.0______132.221____132.063</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW3">CLK_OUT3____12.000______0.000______50.0______231.952____132.063</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW4">CLK_OUT4____50.000______0.000______50.0______174.353____132.063</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW5">no_CLK_OUT5_output</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW6">no_CLK_OUT6_output</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW7">no_CLK_OUT7_output</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_OVERRIDE_MMCM">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_OVERRIDE_PLL">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLATFORM">UNKNOWN</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_BANDWIDTH">OPTIMIZED</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKFBOUT_MULT">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKFBOUT_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKIN_PERIOD">1.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT0_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT0_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT0_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT1_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT1_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT1_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT2_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT2_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT2_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT3_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT3_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT3_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT4_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT4_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT4_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT5_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT5_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLKOUT5_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_CLK_FEEDBACK">CLKFBOUT</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_COMPENSATION">SYSTEM_SYNCHRONOUS</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_DIVCLK_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_NOTES">No notes</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PLL_REF_JITTER">0.010</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_POWER_DOWN_PORT">power_down</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PRIMARY_PORT">clk_in1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PRIMITIVE">MMCM</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PRIMTYPE_SEL">AUTO</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PRIM_IN_FREQ">100.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PRIM_IN_JITTER">0.010</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PRIM_IN_TIMEPERIOD">10.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PRIM_SOURCE">Single_ended_clock_capable_pin</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PSCLK_PORT">psclk</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PSDONE_PORT">psdone</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PSEN_PORT">psen</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_PSINCDEC_PORT">psincdec</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_RESET_LOW">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_RESET_PORT">reset</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_SECONDARY_IN_FREQ">100.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_SECONDARY_IN_JITTER">0.010</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_SECONDARY_IN_TIMEPERIOD">10.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_SECONDARY_PORT">clk_in2</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_SECONDARY_SOURCE">Single_ended_clock_capable_pin</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_SS_MODE">CENTER_HIGH</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_SS_MOD_PERIOD">4000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_SS_MOD_TIME">0.004</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_STATUS_PORT">STATUS</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_S_AXI_ADDR_WIDTH">11</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH">32</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_CLKFB_STOPPED">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_CLKOUT1_BAR">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_CLKOUT2_BAR">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_CLKOUT3_BAR">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_CLKOUT4_BAR">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_CLK_VALID">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_CLOCK_SEQUENCING">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_DYN_PHASE_SHIFT">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_DYN_RECONFIG">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_FAST_SIMULATION">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_FREEZE">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_FREQ_SYNTH">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_INCLK_STOPPED">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_INCLK_SWITCHOVER">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_LOCKED">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_MAX_I_JITTER">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_MIN_O_JITTER">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_MIN_POWER">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_POWER_DOWN">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_RESET">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_SAFE_CLOCK_STARTUP">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_SPREAD_SPECTRUM">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.C_USE_STATUS">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="MODELPARAM_VALUE.c_component_name">clk_wiz_0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CALC_DONE">empty</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CDDCDONE_PORT">cddcdone</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CDDCREQ_PORT">cddcreq</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKFB_IN_N_PORT">clkfb_in_n</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKFB_IN_PORT">clkfb_in</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKFB_IN_P_PORT">clkfb_in_p</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKFB_IN_SIGNALING">SINGLE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKFB_OUT_N_PORT">clkfb_out_n</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKFB_OUT_PORT">clkfb_out</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKFB_OUT_P_PORT">clkfb_out_p</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKFB_STOPPED_PORT">clkfb_stopped</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKIN1_JITTER_PS">100.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKIN1_UI_JITTER">0.010</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKIN2_JITTER_PS">100.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKIN2_UI_JITTER">0.010</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT1_DRIVES">BUFG</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT1_JITTER">151.366</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT1_PHASE_ERROR">132.063</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT1_REQUESTED_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT1_REQUESTED_OUT_FREQ">100.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT1_REQUESTED_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT1_SEQUENCE_NUMBER">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT1_USED">true</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_DRIVES">BUFG</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_JITTER">132.221</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_PHASE_ERROR">132.063</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_REQUESTED_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_REQUESTED_OUT_FREQ">200.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_REQUESTED_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_SEQUENCE_NUMBER">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT2_USED">true</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT3_DRIVES">BUFG</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT3_JITTER">231.952</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT3_PHASE_ERROR">132.063</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT3_REQUESTED_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT3_REQUESTED_OUT_FREQ">12.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT3_REQUESTED_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT3_SEQUENCE_NUMBER">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT3_USED">true</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT4_DRIVES">BUFG</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT4_JITTER">174.353</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT4_PHASE_ERROR">132.063</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT4_REQUESTED_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT4_REQUESTED_OUT_FREQ">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT4_REQUESTED_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT4_SEQUENCE_NUMBER">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT4_USED">true</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT5_DRIVES">BUFG</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT5_JITTER">0.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT5_PHASE_ERROR">0.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT5_REQUESTED_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT5_REQUESTED_OUT_FREQ">100.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT5_REQUESTED_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT5_SEQUENCE_NUMBER">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT5_USED">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT6_DRIVES">BUFG</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT6_JITTER">0.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT6_PHASE_ERROR">0.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT6_REQUESTED_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT6_REQUESTED_OUT_FREQ">100.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT6_REQUESTED_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT6_SEQUENCE_NUMBER">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT6_USED">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT7_DRIVES">BUFG</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT7_JITTER">0.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT7_PHASE_ERROR">0.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT7_REQUESTED_DUTY_CYCLE">50.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT7_REQUESTED_OUT_FREQ">100.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT7_REQUESTED_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT7_SEQUENCE_NUMBER">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUT7_USED">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLKOUTPHY_REQUESTED_FREQ">600.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_IN1_BOARD_INTERFACE">Custom</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_IN2_BOARD_INTERFACE">Custom</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_IN_SEL_PORT">clk_in_sel</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_OUT1_PORT">clk_out1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_OUT1_USE_FINE_PS_GUI">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_OUT2_PORT">clk_out2</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_OUT2_USE_FINE_PS_GUI">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_OUT3_PORT">clk_out3</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_OUT3_USE_FINE_PS_GUI">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_OUT4_PORT">clk_out4</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_OUT4_USE_FINE_PS_GUI">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_OUT5_PORT">clk_out5</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_OUT5_USE_FINE_PS_GUI">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_OUT6_PORT">clk_out6</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_OUT6_USE_FINE_PS_GUI">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_OUT7_PORT">clk_out7</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_OUT7_USE_FINE_PS_GUI">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLK_VALID_PORT">CLK_VALID</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.CLOCK_MGR_TYPE">auto</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.Component_Name">clk_wiz_0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.DADDR_PORT">daddr</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.DCLK_PORT">dclk</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.DEN_PORT">den</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.DIFF_CLK_IN1_BOARD_INTERFACE">Custom</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.DIFF_CLK_IN2_BOARD_INTERFACE">Custom</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.DIN_PORT">din</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.DOUT_PORT">dout</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.DRDY_PORT">drdy</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.DWE_PORT">dwe</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.ENABLE_CDDC">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.ENABLE_CLKOUTPHY">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.FEEDBACK_SOURCE">FDBK_AUTO</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.INPUT_CLK_STOPPED_PORT">input_clk_stopped</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.INPUT_MODE">frequency</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.INTERFACE_SELECTION">Enable_AXI</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.IN_FREQ_UNITS">Units_MHz</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.IN_JITTER_UNITS">Units_UI</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.JITTER_OPTIONS">UI</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.JITTER_SEL">No_Jitter</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.LOCKED_PORT">locked</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_BANDWIDTH">OPTIMIZED</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKFBOUT_MULT_F">6.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKFBOUT_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKFBOUT_USE_FINE_PS">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKIN1_PERIOD">10.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKIN2_PERIOD">10.0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT0_DIVIDE_F">6.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT0_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT0_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT0_USE_FINE_PS">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT1_DIVIDE">3</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT1_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT1_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT1_USE_FINE_PS">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT2_DIVIDE">50</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT2_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT2_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT2_USE_FINE_PS">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT3_DIVIDE">12</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT3_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT3_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT3_USE_FINE_PS">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT4_CASCADE">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT4_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT4_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT4_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT4_USE_FINE_PS">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT5_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT5_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT5_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT5_USE_FINE_PS">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT6_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT6_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT6_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLKOUT6_USE_FINE_PS">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_CLOCK_HOLD">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_COMPENSATION">ZHOLD</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_DIVCLK_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_NOTES">None</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_REF_JITTER1">0.010</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_REF_JITTER2">0.010</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.MMCM_STARTUP_WAIT">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.NUM_OUT_CLKS">4</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.OVERRIDE_MMCM">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.OVERRIDE_PLL">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PHASE_DUTY_CONFIG">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLATFORM">UNKNOWN</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_BANDWIDTH">OPTIMIZED</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKFBOUT_MULT">4</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKFBOUT_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKIN_PERIOD">10.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT0_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT0_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT0_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT1_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT1_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT1_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT2_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT2_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT2_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT3_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT3_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT3_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT4_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT4_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT4_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT5_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT5_DUTY_CYCLE">0.500</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLKOUT5_PHASE">0.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_CLK_FEEDBACK">CLKFBOUT</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_COMPENSATION">SYSTEM_SYNCHRONOUS</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_DIVCLK_DIVIDE">1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_NOTES">None</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PLL_REF_JITTER">0.010</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.POWER_DOWN_PORT">power_down</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PRIMARY_PORT">clk_in1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PRIMITIVE">MMCM</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PRIMTYPE_SEL">mmcm_adv</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PRIM_IN_FREQ">100.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PRIM_IN_JITTER">0.010</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PRIM_IN_TIMEPERIOD">10.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PRIM_SOURCE">Single_ended_clock_capable_pin</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PSCLK_PORT">psclk</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PSDONE_PORT">psdone</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PSEN_PORT">psen</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.PSINCDEC_PORT">psincdec</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.RELATIVE_INCLK">REL_PRIMARY</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.RESET_BOARD_INTERFACE">Custom</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.RESET_PORT">reset</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.RESET_TYPE">ACTIVE_HIGH</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.SECONDARY_IN_FREQ">100.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.SECONDARY_IN_JITTER">0.010</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.SECONDARY_IN_TIMEPERIOD">10.000</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.SECONDARY_PORT">clk_in2</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.SECONDARY_SOURCE">Single_ended_clock_capable_pin</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.SS_MODE">CENTER_HIGH</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.SS_MOD_FREQ">250</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.SS_MOD_TIME">0.004</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.STATUS_PORT">STATUS</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.SUMMARY_STRINGS">empty</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_BOARD_FLOW">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_CLKFB_STOPPED">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_CLK_VALID">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_CLOCK_SEQUENCING">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_DYN_PHASE_SHIFT">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_DYN_RECONFIG">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_FREEZE">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_FREQ_SYNTH">true</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_INCLK_STOPPED">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_INCLK_SWITCHOVER">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_LOCKED">true</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_MAX_I_JITTER">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_MIN_O_JITTER">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_MIN_POWER">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_PHASE_ALIGNMENT">true</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_POWER_DOWN">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_RESET">true</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_SAFE_CLOCK_STARTUP">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_SPREAD_SPECTRUM">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PARAM_VALUE.USE_STATUS">false</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.ARCHITECTURE">artix7</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.BOARD"/> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.DEVICE">xc7a200t</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.PACKAGE">sbg484</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.PREFHDL">VHDL</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.SILICON_REVISION"/> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.SIMULATOR_LANGUAGE">MIXED</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.SPEEDGRADE">-1</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.TEMPERATURE_GRADE">C</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_CUSTOMIZATION">TRUE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="PROJECT_PARAM.USE_RDI_GENERATION">TRUE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPCONTEXT">IP_Flow</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.IPREVISION">0</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.MANAGED">TRUE</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.OUTPUTDIR">.</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SELECTEDSIMMODEL"/> - <spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SHAREDDIR">.</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SWVERSION">2015.3</spirit:configurableElementValue> - <spirit:configurableElementValue spirit:referenceId="RUNTIME_PARAM.SYNTHESISFLOW">OUT_OF_CONTEXT</spirit:configurableElementValue> - </spirit:configurableElementValues> - <spirit:vendorExtensions> - <xilinx:componentInstanceExtensions> - <xilinx:configElementInfos> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT1_JITTER" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT1_PHASE_ERROR" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT2_JITTER" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT2_PHASE_ERROR" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT2_USED" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT3_JITTER" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT3_PHASE_ERROR" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT3_USED" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT4_JITTER" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT4_PHASE_ERROR" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT4_USED" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_CLKFBOUT_MULT_F" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_CLKOUT0_DIVIDE_F" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_CLKOUT1_DIVIDE" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_CLKOUT2_DIVIDE" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_CLKOUT3_DIVIDE" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_DIVCLK_DIVIDE" xilinx:valueSource="user"/> - <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.NUM_OUT_CLKS" xilinx:valueSource="user"/> - </xilinx:configElementInfos> - </xilinx:componentInstanceExtensions> - </spirit:vendorExtensions> - </spirit:componentInstance> - </spirit:componentInstances> -</spirit:design> +{ + "schema": "xilinx.com:schema:json_instance:1.0", + "ip_inst": { + "xci_name": "clk_wiz_0", + "component_reference": "xilinx.com:ip:clk_wiz:6.0", + "ip_revision": "14", + "gen_directory": ".", + "parameters": { + "component_parameters": { + "Component_Name": [ { "value": "clk_wiz_0", "resolve_type": "user", "usage": "all" } ], + "USER_CLK_FREQ0": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ], + "USER_CLK_FREQ1": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ], + "USER_CLK_FREQ2": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ], + "USER_CLK_FREQ3": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ], + "ENABLE_CLOCK_MONITOR": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "OPTIMIZE_CLOCKING_STRUCTURE_EN": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "ENABLE_USER_CLOCK0": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "ENABLE_USER_CLOCK1": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "ENABLE_USER_CLOCK2": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "ENABLE_USER_CLOCK3": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "Enable_PLL0": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "Enable_PLL1": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "REF_CLK_FREQ": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PRECISION": [ { "value": "1", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PRIMITIVE": [ { "value": "MMCM", "resolve_type": "user", "usage": "all" } ], + "PRIMTYPE_SEL": [ { "value": "mmcm_adv", "resolve_type": "user", "usage": "all" } ], + "CLOCK_MGR_TYPE": [ { "value": "auto", "resolve_type": "user", "usage": "all" } ], + "USE_FREQ_SYNTH": [ { "value": "true", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "USE_SPREAD_SPECTRUM": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "USE_PHASE_ALIGNMENT": [ { "value": "true", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "USE_MIN_POWER": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "USE_DYN_PHASE_SHIFT": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "USE_DYN_RECONFIG": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "JITTER_SEL": [ { "value": "No_Jitter", "resolve_type": "user", "usage": "all" } ], + "PRIM_IN_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PRIM_IN_TIMEPERIOD": [ { "value": "10.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "IN_FREQ_UNITS": [ { "value": "Units_MHz", "resolve_type": "user", "usage": "all" } ], + "PHASESHIFT_MODE": [ { "value": "WAVEFORM", "resolve_type": "user", "usage": "all" } ], + "IN_JITTER_UNITS": [ { "value": "Units_UI", "resolve_type": "user", "usage": "all" } ], + "RELATIVE_INCLK": [ { "value": "REL_PRIMARY", "resolve_type": "user", "usage": "all" } ], + "USE_INCLK_SWITCHOVER": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "SECONDARY_IN_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "SECONDARY_IN_TIMEPERIOD": [ { "value": "10.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "SECONDARY_PORT": [ { "value": "clk_in2", "resolve_type": "user", "usage": "all" } ], + "SECONDARY_SOURCE": [ { "value": "Single_ended_clock_capable_pin", "resolve_type": "user", "usage": "all" } ], + "JITTER_OPTIONS": [ { "value": "UI", "resolve_type": "user", "usage": "all" } ], + "CLKIN1_UI_JITTER": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKIN2_UI_JITTER": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PRIM_IN_JITTER": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ], + "SECONDARY_IN_JITTER": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKIN1_JITTER_PS": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKIN2_JITTER_PS": [ { "value": "100.0", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT1_USED": [ { "value": "true", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLKOUT2_USED": [ { "value": "true", "value_src": "user", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLKOUT3_USED": [ { "value": "true", "value_src": "user", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLKOUT4_USED": [ { "value": "true", "value_src": "user", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLKOUT5_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLKOUT6_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLKOUT7_USED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "NUM_OUT_CLKS": [ { "value": "4", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ], + "CLK_OUT1_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLK_OUT2_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLK_OUT3_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLK_OUT4_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLK_OUT5_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLK_OUT6_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLK_OUT7_USE_FINE_PS_GUI": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "PRIMARY_PORT": [ { "value": "clk_in1", "resolve_type": "user", "usage": "all" } ], + "CLK_OUT1_PORT": [ { "value": "clk_out1", "resolve_type": "user", "usage": "all" } ], + "CLK_OUT2_PORT": [ { "value": "clk_out2", "resolve_type": "user", "usage": "all" } ], + "CLK_OUT3_PORT": [ { "value": "clk_out3", "resolve_type": "user", "usage": "all" } ], + "CLK_OUT4_PORT": [ { "value": "clk_out4", "resolve_type": "user", "usage": "all" } ], + "CLK_OUT5_PORT": [ { "value": "clk_out5", "resolve_type": "user", "usage": "all" } ], + "CLK_OUT6_PORT": [ { "value": "clk_out6", "resolve_type": "user", "usage": "all" } ], + "CLK_OUT7_PORT": [ { "value": "clk_out7", "resolve_type": "user", "usage": "all" } ], + "DADDR_PORT": [ { "value": "daddr", "resolve_type": "user", "usage": "all" } ], + "DCLK_PORT": [ { "value": "dclk", "resolve_type": "user", "usage": "all" } ], + "DRDY_PORT": [ { "value": "drdy", "resolve_type": "user", "usage": "all" } ], + "DWE_PORT": [ { "value": "dwe", "resolve_type": "user", "usage": "all" } ], + "DIN_PORT": [ { "value": "din", "resolve_type": "user", "usage": "all" } ], + "DOUT_PORT": [ { "value": "dout", "resolve_type": "user", "usage": "all" } ], + "DEN_PORT": [ { "value": "den", "resolve_type": "user", "usage": "all" } ], + "PSCLK_PORT": [ { "value": "psclk", "resolve_type": "user", "usage": "all" } ], + "PSEN_PORT": [ { "value": "psen", "resolve_type": "user", "usage": "all" } ], + "PSINCDEC_PORT": [ { "value": "psincdec", "resolve_type": "user", "usage": "all" } ], + "PSDONE_PORT": [ { "value": "psdone", "resolve_type": "user", "usage": "all" } ], + "CLKOUT1_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT1_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT1_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT2_REQUESTED_OUT_FREQ": [ { "value": "200.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT2_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT2_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT3_REQUESTED_OUT_FREQ": [ { "value": "12.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT3_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT3_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT4_REQUESTED_OUT_FREQ": [ { "value": "50.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT4_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT4_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT5_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT5_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT5_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT6_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT6_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT6_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT7_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT7_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT7_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "USE_MAX_I_JITTER": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "USE_MIN_O_JITTER": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLKOUT1_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLKOUT2_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLKOUT3_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLKOUT4_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLKOUT5_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLKOUT6_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLKOUT7_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "PRIM_SOURCE": [ { "value": "Single_ended_clock_capable_pin", "resolve_type": "user", "usage": "all" } ], + "CLKOUT1_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ], + "CLKOUT2_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ], + "CLKOUT3_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ], + "CLKOUT4_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ], + "CLKOUT5_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ], + "CLKOUT6_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ], + "CLKOUT7_DRIVES": [ { "value": "BUFG", "resolve_type": "user", "usage": "all" } ], + "FEEDBACK_SOURCE": [ { "value": "FDBK_AUTO", "resolve_type": "user", "usage": "all" } ], + "CLKFB_IN_SIGNALING": [ { "value": "SINGLE", "resolve_type": "user", "usage": "all" } ], + "CLKFB_IN_PORT": [ { "value": "clkfb_in", "resolve_type": "user", "usage": "all" } ], + "CLKFB_IN_P_PORT": [ { "value": "clkfb_in_p", "resolve_type": "user", "usage": "all" } ], + "CLKFB_IN_N_PORT": [ { "value": "clkfb_in_n", "resolve_type": "user", "usage": "all" } ], + "CLKFB_OUT_PORT": [ { "value": "clkfb_out", "resolve_type": "user", "usage": "all" } ], + "CLKFB_OUT_P_PORT": [ { "value": "clkfb_out_p", "resolve_type": "user", "usage": "all" } ], + "CLKFB_OUT_N_PORT": [ { "value": "clkfb_out_n", "resolve_type": "user", "usage": "all" } ], + "PLATFORM": [ { "value": "UNKNOWN", "resolve_type": "user", "usage": "all" } ], + "SUMMARY_STRINGS": [ { "value": "empty", "resolve_type": "user", "usage": "all" } ], + "USE_LOCKED": [ { "value": "true", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CALC_DONE": [ { "value": "empty", "resolve_type": "user", "usage": "all" } ], + "USE_RESET": [ { "value": "true", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "USE_POWER_DOWN": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "USE_STATUS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "USE_FREEZE": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "USE_CLK_VALID": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "USE_INCLK_STOPPED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "USE_CLKFB_STOPPED": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "RESET_PORT": [ { "value": "reset", "resolve_type": "user", "usage": "all" } ], + "LOCKED_PORT": [ { "value": "locked", "resolve_type": "user", "usage": "all" } ], + "POWER_DOWN_PORT": [ { "value": "power_down", "resolve_type": "user", "usage": "all" } ], + "CLK_VALID_PORT": [ { "value": "CLK_VALID", "resolve_type": "user", "usage": "all" } ], + "STATUS_PORT": [ { "value": "STATUS", "resolve_type": "user", "usage": "all" } ], + "CLK_IN_SEL_PORT": [ { "value": "clk_in_sel", "resolve_type": "user", "usage": "all" } ], + "INPUT_CLK_STOPPED_PORT": [ { "value": "input_clk_stopped", "resolve_type": "user", "usage": "all" } ], + "CLKFB_STOPPED_PORT": [ { "value": "clkfb_stopped", "resolve_type": "user", "usage": "all" } ], + "SS_MODE": [ { "value": "CENTER_HIGH", "resolve_type": "user", "usage": "all" } ], + "SS_MOD_FREQ": [ { "value": "250", "resolve_type": "user", "format": "float", "usage": "all" } ], + "SS_MOD_TIME": [ { "value": "0.004", "resolve_type": "user", "format": "float", "usage": "all" } ], + "OVERRIDE_MMCM": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "MMCM_NOTES": [ { "value": "None", "resolve_type": "user", "usage": "all" } ], + "MMCM_DIVCLK_DIVIDE": [ { "value": "1", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ], + "MMCM_BANDWIDTH": [ { "value": "OPTIMIZED", "resolve_type": "user", "usage": "all" } ], + "MMCM_CLKFBOUT_MULT_F": [ { "value": "6.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKFBOUT_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKFBOUT_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "MMCM_CLKIN1_PERIOD": [ { "value": "10.0", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKIN2_PERIOD": [ { "value": "10.0", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT4_CASCADE": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "MMCM_CLOCK_HOLD": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "MMCM_COMPENSATION": [ { "value": "ZHOLD", "resolve_type": "user", "usage": "all" } ], + "MMCM_REF_JITTER1": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_REF_JITTER2": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_STARTUP_WAIT": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "MMCM_CLKOUT0_DIVIDE_F": [ { "value": "6.000", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT0_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT0_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT0_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "MMCM_CLKOUT1_DIVIDE": [ { "value": "3", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ], + "MMCM_CLKOUT1_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT1_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "MMCM_CLKOUT2_DIVIDE": [ { "value": "50", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ], + "MMCM_CLKOUT2_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT2_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "MMCM_CLKOUT3_DIVIDE": [ { "value": "12", "value_src": "user", "resolve_type": "user", "format": "long", "usage": "all" } ], + "MMCM_CLKOUT3_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT3_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "MMCM_CLKOUT4_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "MMCM_CLKOUT4_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT4_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "MMCM_CLKOUT5_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "MMCM_CLKOUT5_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT5_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT5_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "MMCM_CLKOUT6_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "MMCM_CLKOUT6_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT6_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "MMCM_CLKOUT6_USE_FINE_PS": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "OVERRIDE_PLL": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "PLL_NOTES": [ { "value": "None", "resolve_type": "user", "usage": "all" } ], + "PLL_BANDWIDTH": [ { "value": "OPTIMIZED", "resolve_type": "user", "usage": "all" } ], + "PLL_CLKFBOUT_MULT": [ { "value": "4", "resolve_type": "user", "format": "long", "usage": "all" } ], + "PLL_CLKFBOUT_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PLL_CLK_FEEDBACK": [ { "value": "CLKFBOUT", "resolve_type": "user", "usage": "all" } ], + "PLL_DIVCLK_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "PLL_CLKIN_PERIOD": [ { "value": "10.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PLL_COMPENSATION": [ { "value": "SYSTEM_SYNCHRONOUS", "resolve_type": "user", "usage": "all" } ], + "PLL_REF_JITTER": [ { "value": "0.010", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PLL_CLKOUT0_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "PLL_CLKOUT0_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PLL_CLKOUT0_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PLL_CLKOUT1_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "PLL_CLKOUT1_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PLL_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PLL_CLKOUT2_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "PLL_CLKOUT2_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PLL_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PLL_CLKOUT3_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "PLL_CLKOUT3_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PLL_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PLL_CLKOUT4_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "PLL_CLKOUT4_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PLL_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PLL_CLKOUT5_DIVIDE": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "PLL_CLKOUT5_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "user", "format": "float", "usage": "all" } ], + "PLL_CLKOUT5_PHASE": [ { "value": "0.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "RESET_TYPE": [ { "value": "ACTIVE_HIGH", "resolve_type": "user", "usage": "all" } ], + "USE_SAFE_CLOCK_STARTUP": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "USE_CLOCK_SEQUENCING": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLKOUT1_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "CLKOUT2_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "CLKOUT3_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "CLKOUT4_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "CLKOUT5_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "CLKOUT6_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "CLKOUT7_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "user", "format": "long", "usage": "all" } ], + "USE_BOARD_FLOW": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLK_IN1_BOARD_INTERFACE": [ { "value": "Custom", "resolve_type": "user", "usage": "all" } ], + "CLK_IN2_BOARD_INTERFACE": [ { "value": "Custom", "resolve_type": "user", "usage": "all" } ], + "DIFF_CLK_IN1_BOARD_INTERFACE": [ { "value": "Custom", "resolve_type": "user", "usage": "all" } ], + "DIFF_CLK_IN2_BOARD_INTERFACE": [ { "value": "Custom", "resolve_type": "user", "usage": "all" } ], + "AUTO_PRIMITIVE": [ { "value": "MMCM", "resolve_type": "user", "usage": "all" } ], + "RESET_BOARD_INTERFACE": [ { "value": "Custom", "resolve_type": "user", "usage": "all" } ], + "ENABLE_CDDC": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CDDCDONE_PORT": [ { "value": "cddcdone", "resolve_type": "user", "usage": "all" } ], + "CDDCREQ_PORT": [ { "value": "cddcreq", "resolve_type": "user", "usage": "all" } ], + "ENABLE_CLKOUTPHY": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "CLKOUTPHY_REQUESTED_FREQ": [ { "value": "600.000", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT1_JITTER": [ { "value": "151.366", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT1_PHASE_ERROR": [ { "value": "132.063", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT2_JITTER": [ { "value": "132.221", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT2_PHASE_ERROR": [ { "value": "132.063", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT3_JITTER": [ { "value": "231.952", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT3_PHASE_ERROR": [ { "value": "132.063", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT4_JITTER": [ { "value": "174.353", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT4_PHASE_ERROR": [ { "value": "132.063", "value_src": "user", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT5_JITTER": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT5_PHASE_ERROR": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT6_JITTER": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT6_PHASE_ERROR": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT7_JITTER": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ], + "CLKOUT7_PHASE_ERROR": [ { "value": "0.0", "resolve_type": "user", "format": "float", "usage": "all" } ], + "INPUT_MODE": [ { "value": "frequency", "resolve_type": "user", "usage": "all" } ], + "INTERFACE_SELECTION": [ { "value": "Enable_AXI", "resolve_type": "user", "usage": "all" } ], + "AXI_DRP": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ], + "PHASE_DUTY_CONFIG": [ { "value": "false", "resolve_type": "user", "format": "bool", "usage": "all" } ] + }, + "model_parameters": { + "C_CLKOUT2_USED": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USER_CLK_FREQ0": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_AUTO_PRIMITIVE": [ { "value": "MMCM", "resolve_type": "generated", "usage": "all" } ], + "C_USER_CLK_FREQ1": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_USER_CLK_FREQ2": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_USER_CLK_FREQ3": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_ENABLE_CLOCK_MONITOR": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_ENABLE_USER_CLOCK0": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_ENABLE_USER_CLOCK1": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_ENABLE_USER_CLOCK2": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_ENABLE_USER_CLOCK3": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_Enable_PLL0": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_Enable_PLL1": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_REF_CLK_FREQ": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PRECISION": [ { "value": "1", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT3_USED": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_CLKOUT4_USED": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_CLKOUT5_USED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_CLKOUT6_USED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_CLKOUT7_USED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_CLKOUT1_BAR": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_CLKOUT2_BAR": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_CLKOUT3_BAR": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_CLKOUT4_BAR": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "c_component_name": [ { "value": "clk_wiz_0", "resolve_type": "generated", "usage": "all" } ], + "C_PLATFORM": [ { "value": "UNKNOWN", "resolve_type": "generated", "usage": "all" } ], + "C_USE_FREQ_SYNTH": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_PHASE_ALIGNMENT": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_PRIM_IN_JITTER": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_SECONDARY_IN_JITTER": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_JITTER_SEL": [ { "value": "No_Jitter", "resolve_type": "generated", "usage": "all" } ], + "C_USE_MIN_POWER": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_MIN_O_JITTER": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_MAX_I_JITTER": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_DYN_PHASE_SHIFT": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_OPTIMIZE_CLOCKING_STRUCTURE_EN": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_INCLK_SWITCHOVER": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_DYN_RECONFIG": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_SPREAD_SPECTRUM": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_FAST_SIMULATION": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_PRIMTYPE_SEL": [ { "value": "AUTO", "resolve_type": "generated", "usage": "all" } ], + "C_USE_CLK_VALID": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_PRIM_IN_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PRIM_IN_TIMEPERIOD": [ { "value": "10.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_IN_FREQ_UNITS": [ { "value": "Units_MHz", "resolve_type": "generated", "usage": "all" } ], + "C_SECONDARY_IN_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_SECONDARY_IN_TIMEPERIOD": [ { "value": "10.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_FEEDBACK_SOURCE": [ { "value": "FDBK_AUTO", "resolve_type": "generated", "usage": "all" } ], + "C_PRIM_SOURCE": [ { "value": "Single_ended_clock_capable_pin", "resolve_type": "generated", "usage": "all" } ], + "C_PHASESHIFT_MODE": [ { "value": "WAVEFORM", "resolve_type": "generated", "usage": "all" } ], + "C_SECONDARY_SOURCE": [ { "value": "Single_ended_clock_capable_pin", "resolve_type": "generated", "usage": "all" } ], + "C_CLKFB_IN_SIGNALING": [ { "value": "SINGLE", "resolve_type": "generated", "usage": "all" } ], + "C_USE_RESET": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_RESET_LOW": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_LOCKED": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_INCLK_STOPPED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_CLKFB_STOPPED": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_POWER_DOWN": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_STATUS": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_FREEZE": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_NUM_OUT_CLKS": [ { "value": "4", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_CLKOUT1_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT2_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT3_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT4_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT5_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT6_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT7_DRIVES": [ { "value": "BUFG", "resolve_type": "generated", "usage": "all" } ], + "C_INCLK_SUM_ROW0": [ { "value": "Input Clock Freq (MHz) Input Jitter (UI)", "resolve_type": "generated", "usage": "all" } ], + "C_INCLK_SUM_ROW1": [ { "value": "__primary_________100.000____________0.010", "resolve_type": "generated", "usage": "all" } ], + "C_INCLK_SUM_ROW2": [ { "value": "no_secondary_input_clock ", "resolve_type": "generated", "usage": "all" } ], + "C_OUTCLK_SUM_ROW0A": [ { "value": " Output Output Phase Duty Cycle Pk-to-Pk Phase", "resolve_type": "generated", "usage": "all" } ], + "C_OUTCLK_SUM_ROW0B": [ { "value": " Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)", "resolve_type": "generated", "usage": "all" } ], + "C_OUTCLK_SUM_ROW1": [ { "value": "clk_out1__100.00000______0.000______50.0______151.366____132.063", "resolve_type": "generated", "usage": "all" } ], + "C_OUTCLK_SUM_ROW2": [ { "value": "clk_out2__200.00000______0.000______50.0______132.221____132.063", "resolve_type": "generated", "usage": "all" } ], + "C_OUTCLK_SUM_ROW3": [ { "value": "clk_out3__12.00000______0.000______50.0______231.952____132.063", "resolve_type": "generated", "usage": "all" } ], + "C_OUTCLK_SUM_ROW4": [ { "value": "clk_out4__50.00000______0.000______50.0______174.353____132.063", "resolve_type": "generated", "usage": "all" } ], + "C_OUTCLK_SUM_ROW5": [ { "value": "no_CLK_OUT5_output", "resolve_type": "generated", "usage": "all" } ], + "C_OUTCLK_SUM_ROW6": [ { "value": "no_CLK_OUT6_output", "resolve_type": "generated", "usage": "all" } ], + "C_OUTCLK_SUM_ROW7": [ { "value": "no_CLK_OUT7_output", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT1_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT2_REQUESTED_OUT_FREQ": [ { "value": "200.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT3_REQUESTED_OUT_FREQ": [ { "value": "12.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT4_REQUESTED_OUT_FREQ": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT5_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT6_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT7_REQUESTED_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT1_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT2_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT3_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT4_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT5_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT6_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT7_REQUESTED_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT1_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT2_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT3_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT4_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT5_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT6_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT7_REQUESTED_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT1_OUT_FREQ": [ { "value": "100.00000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT2_OUT_FREQ": [ { "value": "200.00000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT3_OUT_FREQ": [ { "value": "12.00000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT4_OUT_FREQ": [ { "value": "50.00000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT5_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT6_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT7_OUT_FREQ": [ { "value": "100.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT5_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT6_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT7_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT1_DUTY_CYCLE": [ { "value": "50.0", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT2_DUTY_CYCLE": [ { "value": "50.0", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT3_DUTY_CYCLE": [ { "value": "50.0", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT4_DUTY_CYCLE": [ { "value": "50.0", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT5_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT6_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKOUT7_DUTY_CYCLE": [ { "value": "50.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_USE_SAFE_CLOCK_STARTUP": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_USE_CLOCK_SEQUENCING": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_CLKOUT1_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_CLKOUT2_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_CLKOUT3_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_CLKOUT4_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_CLKOUT5_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_CLKOUT6_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_CLKOUT7_SEQUENCE_NUMBER": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_MMCM_NOTES": [ { "value": "None", "resolve_type": "generated", "usage": "all" } ], + "C_MMCM_BANDWIDTH": [ { "value": "OPTIMIZED", "resolve_type": "generated", "usage": "all" } ], + "C_MMCM_CLKFBOUT_MULT_F": [ { "value": "6.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKIN1_PERIOD": [ { "value": "10.0", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKIN2_PERIOD": [ { "value": "10.0", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKOUT4_CASCADE": [ { "value": "FALSE", "resolve_type": "generated", "format": "bool", "usage": "all" } ], + "C_MMCM_CLOCK_HOLD": [ { "value": "FALSE", "resolve_type": "generated", "format": "bool", "usage": "all" } ], + "C_MMCM_COMPENSATION": [ { "value": "ZHOLD", "resolve_type": "generated", "usage": "all" } ], + "C_MMCM_DIVCLK_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_MMCM_REF_JITTER1": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_REF_JITTER2": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_STARTUP_WAIT": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ], + "C_MMCM_CLKOUT0_DIVIDE_F": [ { "value": "6.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKOUT1_DIVIDE": [ { "value": "3", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_MMCM_CLKOUT2_DIVIDE": [ { "value": "50", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_MMCM_CLKOUT3_DIVIDE": [ { "value": "12", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_MMCM_CLKOUT4_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_MMCM_CLKOUT5_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_MMCM_CLKOUT6_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_MMCM_CLKOUT0_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKOUT1_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKOUT2_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKOUT3_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKOUT4_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKOUT5_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKOUT6_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKFBOUT_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKOUT0_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKOUT5_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKOUT6_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_MMCM_CLKFBOUT_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ], + "C_MMCM_CLKOUT0_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ], + "C_MMCM_CLKOUT1_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ], + "C_MMCM_CLKOUT2_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ], + "C_MMCM_CLKOUT3_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ], + "C_MMCM_CLKOUT4_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ], + "C_MMCM_CLKOUT5_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ], + "C_MMCM_CLKOUT6_USE_FINE_PS": [ { "value": "FALSE", "resolve_type": "generated", "usage": "all" } ], + "C_PLL_NOTES": [ { "value": "No notes", "resolve_type": "generated", "usage": "all" } ], + "C_PLL_BANDWIDTH": [ { "value": "OPTIMIZED", "resolve_type": "generated", "usage": "all" } ], + "C_PLL_CLK_FEEDBACK": [ { "value": "CLKFBOUT", "resolve_type": "generated", "usage": "all" } ], + "C_PLL_CLKFBOUT_MULT": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_PLL_CLKIN_PERIOD": [ { "value": "1.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PLL_COMPENSATION": [ { "value": "SYSTEM_SYNCHRONOUS", "resolve_type": "generated", "usage": "all" } ], + "C_PLL_DIVCLK_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_PLL_REF_JITTER": [ { "value": "0.010", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PLL_CLKOUT0_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_PLL_CLKOUT1_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_PLL_CLKOUT2_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_PLL_CLKOUT3_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_PLL_CLKOUT4_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_PLL_CLKOUT5_DIVIDE": [ { "value": "1", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_PLL_CLKOUT0_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PLL_CLKOUT1_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PLL_CLKOUT2_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PLL_CLKOUT3_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PLL_CLKOUT4_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PLL_CLKOUT5_DUTY_CYCLE": [ { "value": "0.500", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PLL_CLKFBOUT_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PLL_CLKOUT0_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PLL_CLKOUT1_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PLL_CLKOUT2_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PLL_CLKOUT3_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PLL_CLKOUT4_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PLL_CLKOUT5_PHASE": [ { "value": "0.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLOCK_MGR_TYPE": [ { "value": "NA", "resolve_type": "generated", "usage": "all" } ], + "C_OVERRIDE_MMCM": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_OVERRIDE_PLL": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_PRIMARY_PORT": [ { "value": "clk_in1", "resolve_type": "generated", "usage": "all" } ], + "C_SECONDARY_PORT": [ { "value": "clk_in2", "resolve_type": "generated", "usage": "all" } ], + "C_CLK_OUT1_PORT": [ { "value": "clk_out1", "resolve_type": "generated", "usage": "all" } ], + "C_CLK_OUT2_PORT": [ { "value": "clk_out2", "resolve_type": "generated", "usage": "all" } ], + "C_CLK_OUT3_PORT": [ { "value": "clk_out3", "resolve_type": "generated", "usage": "all" } ], + "C_CLK_OUT4_PORT": [ { "value": "clk_out4", "resolve_type": "generated", "usage": "all" } ], + "C_CLK_OUT5_PORT": [ { "value": "clk_out5", "resolve_type": "generated", "usage": "all" } ], + "C_CLK_OUT6_PORT": [ { "value": "clk_out6", "resolve_type": "generated", "usage": "all" } ], + "C_CLK_OUT7_PORT": [ { "value": "clk_out7", "resolve_type": "generated", "usage": "all" } ], + "C_RESET_PORT": [ { "value": "reset", "resolve_type": "generated", "usage": "all" } ], + "C_LOCKED_PORT": [ { "value": "locked", "resolve_type": "generated", "usage": "all" } ], + "C_CLKFB_IN_PORT": [ { "value": "clkfb_in", "resolve_type": "generated", "usage": "all" } ], + "C_CLKFB_IN_P_PORT": [ { "value": "clkfb_in_p", "resolve_type": "generated", "usage": "all" } ], + "C_CLKFB_IN_N_PORT": [ { "value": "clkfb_in_n", "resolve_type": "generated", "usage": "all" } ], + "C_CLKFB_OUT_PORT": [ { "value": "clkfb_out", "resolve_type": "generated", "usage": "all" } ], + "C_CLKFB_OUT_P_PORT": [ { "value": "clkfb_out_p", "resolve_type": "generated", "usage": "all" } ], + "C_CLKFB_OUT_N_PORT": [ { "value": "clkfb_out_n", "resolve_type": "generated", "usage": "all" } ], + "C_POWER_DOWN_PORT": [ { "value": "power_down", "resolve_type": "generated", "usage": "all" } ], + "C_DADDR_PORT": [ { "value": "daddr", "resolve_type": "generated", "usage": "all" } ], + "C_DCLK_PORT": [ { "value": "dclk", "resolve_type": "generated", "usage": "all" } ], + "C_DRDY_PORT": [ { "value": "drdy", "resolve_type": "generated", "usage": "all" } ], + "C_DWE_PORT": [ { "value": "dwe", "resolve_type": "generated", "usage": "all" } ], + "C_DIN_PORT": [ { "value": "din", "resolve_type": "generated", "usage": "all" } ], + "C_DOUT_PORT": [ { "value": "dout", "resolve_type": "generated", "usage": "all" } ], + "C_DEN_PORT": [ { "value": "den", "resolve_type": "generated", "usage": "all" } ], + "C_PSCLK_PORT": [ { "value": "psclk", "resolve_type": "generated", "usage": "all" } ], + "C_PSEN_PORT": [ { "value": "psen", "resolve_type": "generated", "usage": "all" } ], + "C_PSINCDEC_PORT": [ { "value": "psincdec", "resolve_type": "generated", "usage": "all" } ], + "C_PSDONE_PORT": [ { "value": "psdone", "resolve_type": "generated", "usage": "all" } ], + "C_CLK_VALID_PORT": [ { "value": "CLK_VALID", "resolve_type": "generated", "usage": "all" } ], + "C_STATUS_PORT": [ { "value": "STATUS", "resolve_type": "generated", "usage": "all" } ], + "C_CLK_IN_SEL_PORT": [ { "value": "clk_in_sel", "resolve_type": "generated", "usage": "all" } ], + "C_INPUT_CLK_STOPPED_PORT": [ { "value": "input_clk_stopped", "resolve_type": "generated", "usage": "all" } ], + "C_CLKFB_STOPPED_PORT": [ { "value": "clkfb_stopped", "resolve_type": "generated", "usage": "all" } ], + "C_CLKIN1_JITTER_PS": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_CLKIN2_JITTER_PS": [ { "value": "100.0", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_PRIMITIVE": [ { "value": "MMCM", "resolve_type": "generated", "usage": "all" } ], + "C_SS_MODE": [ { "value": "CENTER_HIGH", "resolve_type": "generated", "usage": "all" } ], + "C_SS_MOD_PERIOD": [ { "value": "4000", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_SS_MOD_TIME": [ { "value": "0.004", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_HAS_CDDC": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_CDDCDONE_PORT": [ { "value": "cddcdone", "resolve_type": "generated", "usage": "all" } ], + "C_CDDCREQ_PORT": [ { "value": "cddcreq", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUTPHY_MODE": [ { "value": "VCO", "resolve_type": "generated", "usage": "all" } ], + "C_ENABLE_CLKOUTPHY": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_INTERFACE_SELECTION": [ { "value": "0", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_S_AXI_ADDR_WIDTH": [ { "value": "11", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_S_AXI_DATA_WIDTH": [ { "value": "32", "resolve_type": "generated", "format": "long", "usage": "all" } ], + "C_POWER_REG": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT0_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT0_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT1_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT1_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT2_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT2_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT3_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT3_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT4_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT4_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT5_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT5_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT6_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT6_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKFBOUT_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKFBOUT_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_DIVCLK": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_LOCK_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_LOCK_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_LOCK_3": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_FILTER_1": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_FILTER_2": [ { "value": "0000", "resolve_type": "generated", "usage": "all" } ], + "C_DIVIDE1_AUTO": [ { "value": "1", "resolve_type": "generated", "usage": "all" } ], + "C_DIVIDE2_AUTO": [ { "value": "0.5", "resolve_type": "generated", "usage": "all" } ], + "C_DIVIDE3_AUTO": [ { "value": "8.333333333333334", "resolve_type": "generated", "usage": "all" } ], + "C_DIVIDE4_AUTO": [ { "value": "2.0", "resolve_type": "generated", "usage": "all" } ], + "C_DIVIDE5_AUTO": [ { "value": "0.16666666666666666", "resolve_type": "generated", "usage": "all" } ], + "C_DIVIDE6_AUTO": [ { "value": "0.16666666666666666", "resolve_type": "generated", "usage": "all" } ], + "C_DIVIDE7_AUTO": [ { "value": "0.16666666666666666", "resolve_type": "generated", "usage": "all" } ], + "C_PLLBUFGCEDIV": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_MMCMBUFGCEDIV": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_PLLBUFGCEDIV1": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_PLLBUFGCEDIV2": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_PLLBUFGCEDIV3": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_PLLBUFGCEDIV4": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_MMCMBUFGCEDIV1": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_MMCMBUFGCEDIV2": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_MMCMBUFGCEDIV3": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_MMCMBUFGCEDIV4": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_MMCMBUFGCEDIV5": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_MMCMBUFGCEDIV6": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_MMCMBUFGCEDIV7": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT1_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT2_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT3_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT4_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT5_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT6_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT7_MATCHED_ROUTING": [ { "value": "false", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT0_ACTUAL_FREQ": [ { "value": "100.00000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT1_ACTUAL_FREQ": [ { "value": "200.00000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT2_ACTUAL_FREQ": [ { "value": "12.00000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT3_ACTUAL_FREQ": [ { "value": "50.00000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT4_ACTUAL_FREQ": [ { "value": "100.000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT5_ACTUAL_FREQ": [ { "value": "100.000", "resolve_type": "generated", "usage": "all" } ], + "C_CLKOUT6_ACTUAL_FREQ": [ { "value": "100.000", "resolve_type": "generated", "usage": "all" } ], + "C_M_MAX": [ { "value": "64.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_M_MIN": [ { "value": "2.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_D_MAX": [ { "value": "80.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_D_MIN": [ { "value": "1.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_O_MAX": [ { "value": "128.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_O_MIN": [ { "value": "1.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_VCO_MIN": [ { "value": "600.000", "resolve_type": "generated", "format": "float", "usage": "all" } ], + "C_VCO_MAX": [ { "value": "1200.000", "resolve_type": "generated", "format": "float", "usage": "all" } ] + }, + "project_parameters": { + "ARCHITECTURE": [ { "value": "artix7" } ], + "BASE_BOARD_PART": [ { "value": "" } ], + "BOARD_CONNECTIONS": [ { "value": "" } ], + "DEVICE": [ { "value": "xc7a200t" } ], + "NEXTGEN_VERSAL": [ { "value": "0" } ], + "PACKAGE": [ { "value": "sbg484" } ], + "PREFHDL": [ { "value": "VHDL" } ], + "SILICON_REVISION": [ { "value": "" } ], + "SIMULATOR_LANGUAGE": [ { "value": "MIXED" } ], + "SPEEDGRADE": [ { "value": "-1" } ], + "STATIC_POWER": [ { "value": "" } ], + "TEMPERATURE_GRADE": [ { "value": "" } ] + }, + "runtime_parameters": { + "IPCONTEXT": [ { "value": "IP_Flow" } ], + "IPREVISION": [ { "value": "14" } ], + "MANAGED": [ { "value": "TRUE" } ], + "OUTPUTDIR": [ { "value": "." } ], + "SELECTEDSIMMODEL": [ { "value": "" } ], + "SHAREDDIR": [ { "value": "." } ], + "SWVERSION": [ { "value": "2024.1" } ], + "SYNTHESISFLOW": [ { "value": "OUT_OF_CONTEXT" } ] + } + }, + "boundary": { + "ports": { + "reset": [ { "direction": "in", "driver_value": "0" } ], + "clk_in1": [ { "direction": "in" } ], + "clk_out1": [ { "direction": "out" } ], + "clk_out2": [ { "direction": "out" } ], + "clk_out3": [ { "direction": "out" } ], + "clk_out4": [ { "direction": "out" } ], + "locked": [ { "direction": "out" } ] + }, + "interfaces": { + "reset": { + "vlnv": "xilinx.com:signal:reset:1.0", + "abstraction_type": "xilinx.com:signal:reset_rtl:1.0", + "mode": "slave", + "parameters": { + "POLARITY": [ { "value": "ACTIVE_HIGH", "value_src": "constant", "usage": "all" } ], + "BOARD.ASSOCIATED_PARAM": [ { "value": "RESET_BOARD_INTERFACE", "value_src": "constant", "usage": "all" } ], + "INSERT_VIP": [ { "value": "0", "resolve_type": "user", "format": "long", "usage": "simulation.rtl", "is_ips_inferred": true, "is_static_object": false } ] + }, + "port_maps": { + "RST": [ { "physical_name": "reset" } ] + } + }, + "clock_CLK_IN1": { + "vlnv": "xilinx.com:signal:clock:1.0", + "abstraction_type": "xilinx.com:signal:clock_rtl:1.0", + "mode": "slave", + "parameters": { + "FREQ_HZ": [ { "value": "100000000", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ], + "FREQ_TOLERANCE_HZ": [ { "value": "0", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ], + "PHASE": [ { "value": "0.0", "resolve_type": "generated", "format": "float", "is_ips_inferred": true, "is_static_object": false } ], + "CLK_DOMAIN": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "ASSOCIATED_BUSIF": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "ASSOCIATED_PORT": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "ASSOCIATED_RESET": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "INSERT_VIP": [ { "value": "0", "resolve_type": "user", "format": "long", "usage": "simulation.rtl", "is_ips_inferred": true, "is_static_object": false } ], + "BOARD.ASSOCIATED_PARAM": [ { "value": "CLK_IN1_BOARD_INTERFACE", "usage": "all", "is_static_object": false } ] + }, + "port_maps": { + "CLK_IN1": [ { "physical_name": "clk_in1" } ] + } + }, + "clock_CLK_OUT1": { + "vlnv": "xilinx.com:signal:clock:1.0", + "abstraction_type": "xilinx.com:signal:clock_rtl:1.0", + "mode": "master", + "parameters": { + "FREQ_HZ": [ { "value": "100000000", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ], + "FREQ_TOLERANCE_HZ": [ { "value": "0", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ], + "PHASE": [ { "value": "0.0", "resolve_type": "generated", "format": "float", "is_ips_inferred": true, "is_static_object": false } ], + "CLK_DOMAIN": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "ASSOCIATED_BUSIF": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "ASSOCIATED_PORT": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "ASSOCIATED_RESET": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "INSERT_VIP": [ { "value": "0", "resolve_type": "user", "format": "long", "usage": "simulation.rtl", "is_ips_inferred": true, "is_static_object": false } ] + }, + "port_maps": { + "CLK_OUT1": [ { "physical_name": "clk_out1" } ] + } + }, + "clock_CLK_OUT2": { + "vlnv": "xilinx.com:signal:clock:1.0", + "abstraction_type": "xilinx.com:signal:clock_rtl:1.0", + "mode": "master", + "parameters": { + "FREQ_HZ": [ { "value": "100000000", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ], + "FREQ_TOLERANCE_HZ": [ { "value": "0", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ], + "PHASE": [ { "value": "0.0", "resolve_type": "generated", "format": "float", "is_ips_inferred": true, "is_static_object": false } ], + "CLK_DOMAIN": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "ASSOCIATED_BUSIF": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "ASSOCIATED_PORT": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "ASSOCIATED_RESET": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "INSERT_VIP": [ { "value": "0", "resolve_type": "user", "format": "long", "usage": "simulation.rtl", "is_ips_inferred": true, "is_static_object": false } ] + }, + "port_maps": { + "CLK_OUT2": [ { "physical_name": "clk_out2" } ] + } + }, + "clock_CLK_OUT3": { + "vlnv": "xilinx.com:signal:clock:1.0", + "abstraction_type": "xilinx.com:signal:clock_rtl:1.0", + "mode": "master", + "parameters": { + "FREQ_HZ": [ { "value": "100000000", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ], + "FREQ_TOLERANCE_HZ": [ { "value": "0", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ], + "PHASE": [ { "value": "0.0", "resolve_type": "generated", "format": "float", "is_ips_inferred": true, "is_static_object": false } ], + "CLK_DOMAIN": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "ASSOCIATED_BUSIF": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "ASSOCIATED_PORT": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "ASSOCIATED_RESET": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "INSERT_VIP": [ { "value": "0", "resolve_type": "user", "format": "long", "usage": "simulation.rtl", "is_ips_inferred": true, "is_static_object": false } ] + }, + "port_maps": { + "CLK_OUT3": [ { "physical_name": "clk_out3" } ] + } + }, + "clock_CLK_OUT4": { + "vlnv": "xilinx.com:signal:clock:1.0", + "abstraction_type": "xilinx.com:signal:clock_rtl:1.0", + "mode": "master", + "parameters": { + "FREQ_HZ": [ { "value": "100000000", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ], + "FREQ_TOLERANCE_HZ": [ { "value": "0", "resolve_type": "generated", "format": "long", "is_ips_inferred": true, "is_static_object": false } ], + "PHASE": [ { "value": "0.0", "resolve_type": "generated", "format": "float", "is_ips_inferred": true, "is_static_object": false } ], + "CLK_DOMAIN": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "ASSOCIATED_BUSIF": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "ASSOCIATED_PORT": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "ASSOCIATED_RESET": [ { "value": "", "resolve_type": "generated", "is_ips_inferred": true, "is_static_object": false } ], + "INSERT_VIP": [ { "value": "0", "resolve_type": "user", "format": "long", "usage": "simulation.rtl", "is_ips_inferred": true, "is_static_object": false } ] + }, + "port_maps": { + "CLK_OUT4": [ { "physical_name": "clk_out4" } ] + } + } + } + } + } +} \ No newline at end of file diff --git a/src/ip/clk_wiz_0/clk_wiz_0.xdc b/src/ip/clk_wiz_0/clk_wiz_0.xdc index 420a6de..b41c9c9 100644 --- a/src/ip/clk_wiz_0/clk_wiz_0.xdc +++ b/src/ip/clk_wiz_0/clk_wiz_0.xdc @@ -1,23 +1,22 @@ + # file: clk_wiz_0.xdc -# -# (c) Copyright 2008 - 2013 Xilinx, Inc. All rights reserved. -# +# (c) Copyright 2017-2018, 2023 Advanced Micro Devices, Inc. All rights reserved. +# # This file contains confidential and proprietary information -# of Xilinx, Inc. and is protected under U.S. and -# international copyright and other intellectual property -# laws. -# +# of AMD and is protected under U.S. and international copyright +# and other intellectual property laws. +# # DISCLAIMER # This disclaimer is not a license and does not grant any # rights to the materials distributed herewith. Except as # otherwise provided in a valid license issued to you by -# Xilinx, and to the maximum extent permitted by applicable +# AMD, and to the maximum extent permitted by applicable # law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND -# WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES +# WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES # AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING # BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- # INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and -# (2) Xilinx shall not be liable (whether in contract or tort, +# (2) AMD shall not be liable (whether in contract or tort, # including negligence, or under any other theory of # liability) for any loss or damage of any kind or nature # related to, arising under or in connection with these @@ -26,11 +25,11 @@ # (including loss of data, profits, goodwill, or any type of # loss or damage suffered as a result of any action brought # by a third party) even if such damage or loss was -# reasonably foreseeable or Xilinx had been advised of the +# reasonably foreseeable or AMD had been advised of the # possibility of the same. -# +# # CRITICAL APPLICATIONS -# Xilinx products are not designed or intended to be fail- +# AMD products are not designed or intended to be fail- # safe, or for use in any application requiring fail-safe # performance, such as life-support or safety devices or # systems, Class III medical devices, nuclear facilities, @@ -39,13 +38,12 @@ # injury, or severe property or environmental damage # (individually and collectively, "Critical # Applications"). Customer assumes the sole risk and -# liability of any use of Xilinx products in Critical +# liability of any use of AMD products in Critical # Applications, subject only to applicable laws and # regulations governing limitations on product liability. -# +# # THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS # PART OF THIS FILE AT ALL TIMES. -# # Input clock periods. These duplicate the values entered for the # input clocks. You can use these to time your system. If required @@ -53,7 +51,7 @@ #---------------------------------------------------------------- # Connect to input port when clock capable pin is selected for input create_clock -period 10.0 [get_ports clk_in1] -set_input_jitter [get_clocks -of_objects [get_ports clk_in1]] 0.10000000000000001 - +set_input_jitter [get_clocks -of_objects [get_ports clk_in1]] 0.100 +set_property PHASESHIFT_MODE WAVEFORM [get_cells -hierarchical *adv*] diff --git a/src/ip/clk_wiz_0/clk_wiz_0.xml b/src/ip/clk_wiz_0/clk_wiz_0.xml index 66fd124..587244a 100644 --- a/src/ip/clk_wiz_0/clk_wiz_0.xml +++ b/src/ip/clk_wiz_0/clk_wiz_0.xml @@ -149,6 +149,287 @@ </spirit:physicalPort> </spirit:portMap> </spirit:portMaps> + <spirit:parameters> + <spirit:parameter> + <spirit:name>DATA_WIDTH</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.DATA_WIDTH">1</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>PROTOCOL</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.PROTOCOL">AXI4LITE</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>FREQ_HZ</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.FREQ_HZ">100000000</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ID_WIDTH</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.ID_WIDTH">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ADDR_WIDTH</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.ADDR_WIDTH">1</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>AWUSER_WIDTH</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.AWUSER_WIDTH">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ARUSER_WIDTH</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.ARUSER_WIDTH">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>WUSER_WIDTH</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.WUSER_WIDTH">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>RUSER_WIDTH</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.RUSER_WIDTH">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>BUSER_WIDTH</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.BUSER_WIDTH">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>READ_WRITE_MODE</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.READ_WRITE_MODE">READ_WRITE</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>HAS_BURST</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_BURST">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>HAS_LOCK</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_LOCK">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>HAS_PROT</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_PROT">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>HAS_CACHE</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_CACHE">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>HAS_QOS</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_QOS">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>HAS_REGION</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_REGION">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>HAS_WSTRB</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_WSTRB">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>HAS_BRESP</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_BRESP">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>HAS_RRESP</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_RRESP">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>SUPPORTS_NARROW_BURST</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.SUPPORTS_NARROW_BURST">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>NUM_READ_OUTSTANDING</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.NUM_READ_OUTSTANDING">1</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>NUM_WRITE_OUTSTANDING</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.NUM_WRITE_OUTSTANDING">1</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>MAX_BURST_LENGTH</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.MAX_BURST_LENGTH">1</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>PHASE</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.PHASE">0.0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>CLK_DOMAIN</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.CLK_DOMAIN"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>NUM_READ_THREADS</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.NUM_READ_THREADS">1</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>NUM_WRITE_THREADS</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.NUM_WRITE_THREADS">1</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>RUSER_BITS_PER_BYTE</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.RUSER_BITS_PER_BYTE">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>WUSER_BITS_PER_BYTE</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.WUSER_BITS_PER_BYTE">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>INSERT_VIP</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="BUSIFPARAM_VALUE.S_AXI_LITE.INSERT_VIP">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>simulation.rtl</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + </spirit:parameters> <spirit:vendorExtensions> <xilinx:busInterfaceInfo> <xilinx:enablement> @@ -180,7 +461,61 @@ </spirit:parameter> <spirit:parameter> <spirit:name>ASSOCIATED_RESET</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.S_AXI_ACLK.ASSOCIATED_RESET">aresetn</spirit:value> + <spirit:value spirit:id="BUSIFPARAM_VALUE.S_AXI_ACLK.ASSOCIATED_RESET">s_axi_aresetn</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>FREQ_HZ</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_ACLK.FREQ_HZ">100000000</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>FREQ_TOLERANCE_HZ</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_ACLK.FREQ_TOLERANCE_HZ">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>PHASE</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_ACLK.PHASE">0.0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>CLK_DOMAIN</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_ACLK.CLK_DOMAIN"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_PORT</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.S_AXI_ACLK.ASSOCIATED_PORT"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>INSERT_VIP</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="BUSIFPARAM_VALUE.S_AXI_ACLK.INSERT_VIP">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>simulation.rtl</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> </spirit:parameter> </spirit:parameters> <spirit:vendorExtensions> @@ -192,87 +527,173 @@ </spirit:vendorExtensions> </spirit:busInterface> <spirit:busInterface> - <spirit:name>s_axi_resetn</spirit:name> - <spirit:displayName>S_AXI_RESETN</spirit:displayName> - <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="reset" spirit:version="1.0"/> - <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="reset_rtl" spirit:version="1.0"/> + <spirit:name>ref_clk</spirit:name> + <spirit:displayName>ref_clk</spirit:displayName> + <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock" spirit:version="1.0"/> + <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock_rtl" spirit:version="1.0"/> <spirit:slave/> <spirit:portMaps> <spirit:portMap> <spirit:logicalPort> - <spirit:name>RST</spirit:name> + <spirit:name>CLK</spirit:name> </spirit:logicalPort> <spirit:physicalPort> - <spirit:name>s_axi_aresetn</spirit:name> + <spirit:name>ref_clk</spirit:name> </spirit:physicalPort> </spirit:portMap> </spirit:portMaps> <spirit:parameters> <spirit:parameter> - <spirit:name>ASSOCIATED_RESET</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.S_AXI_RESETN.ASSOCIATED_RESET">aresetn</spirit:value> + <spirit:name>FREQ_HZ</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.REF_CLK.FREQ_HZ">100000000</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> </spirit:parameter> <spirit:parameter> - <spirit:name>POLARITY</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.S_AXI_RESETN.POLARITY">ACTIVE_LOW</spirit:value> + <spirit:name>FREQ_TOLERANCE_HZ</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.REF_CLK.FREQ_TOLERANCE_HZ">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> </spirit:parameter> - </spirit:parameters> - <spirit:vendorExtensions> - <xilinx:busInterfaceInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.s_axi_resetn" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:busInterfaceInfo> - </spirit:vendorExtensions> + <spirit:parameter> + <spirit:name>PHASE</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.REF_CLK.PHASE">0.0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>CLK_DOMAIN</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.REF_CLK.CLK_DOMAIN"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_BUSIF</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.REF_CLK.ASSOCIATED_BUSIF"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_PORT</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.REF_CLK.ASSOCIATED_PORT"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_RESET</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.REF_CLK.ASSOCIATED_RESET"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>INSERT_VIP</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="BUSIFPARAM_VALUE.REF_CLK.INSERT_VIP">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>simulation.rtl</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + </spirit:parameters> + <spirit:vendorExtensions> + <xilinx:busInterfaceInfo> + <xilinx:enablement> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.ref_clk" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_ENABLE_CLOCK_MONITOR'))">false</xilinx:isEnabled> + </xilinx:enablement> + </xilinx:busInterfaceInfo> + </spirit:vendorExtensions> </spirit:busInterface> <spirit:busInterface> - <spirit:name>intr</spirit:name> - <spirit:displayName>Intr</spirit:displayName> - <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="interrupt" spirit:version="1.0"/> - <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="interrupt_rtl" spirit:version="1.0"/> - <spirit:master/> + <spirit:name>s_axi_resetn</spirit:name> + <spirit:displayName>S_AXI_RESETN</spirit:displayName> + <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="reset" spirit:version="1.0"/> + <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="reset_rtl" spirit:version="1.0"/> + <spirit:slave/> <spirit:portMaps> <spirit:portMap> <spirit:logicalPort> - <spirit:name>INTERRUPT</spirit:name> + <spirit:name>RST</spirit:name> </spirit:logicalPort> <spirit:physicalPort> - <spirit:name>ip2intc_irpt</spirit:name> + <spirit:name>s_axi_aresetn</spirit:name> </spirit:physicalPort> </spirit:portMap> </spirit:portMaps> + <spirit:parameters> + <spirit:parameter> + <spirit:name>ASSOCIATED_RESET</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.S_AXI_RESETN.ASSOCIATED_RESET">aresetn</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>POLARITY</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.S_AXI_RESETN.POLARITY">ACTIVE_LOW</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>INSERT_VIP</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="BUSIFPARAM_VALUE.S_AXI_RESETN.INSERT_VIP">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>simulation.rtl</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + </spirit:parameters> <spirit:vendorExtensions> <xilinx:busInterfaceInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.intr" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.s_axi_resetn" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:busInterfaceInfo> </spirit:vendorExtensions> </spirit:busInterface> <spirit:busInterface> - <spirit:name>clock_CLK_IN1</spirit:name> - <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock" spirit:version="1.0"/> - <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock_rtl" spirit:version="1.0"/> - <spirit:slave/> + <spirit:name>intr</spirit:name> + <spirit:displayName>Intr</spirit:displayName> + <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="interrupt" spirit:version="1.0"/> + <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="interrupt_rtl" spirit:version="1.0"/> + <spirit:master/> <spirit:portMaps> <spirit:portMap> <spirit:logicalPort> - <spirit:name>CLK</spirit:name> + <spirit:name>INTERRUPT</spirit:name> </spirit:logicalPort> <spirit:physicalPort> - <spirit:name>clk_in1</spirit:name> + <spirit:name>interrupt</spirit:name> </spirit:physicalPort> </spirit:portMap> </spirit:portMaps> <spirit:parameters> <spirit:parameter> - <spirit:name>BOARD.ASSOCIATED_PARAM</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_IN1.BOARD.ASSOCIATED_PARAM">CLK_IN1_BOARD_INTERFACE</spirit:value> + <spirit:name>SENSITIVITY</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.INTR.SENSITIVITY">EDGE_RISING</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>PortWidth</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.INTR.PortWidth">1</spirit:value> <spirit:vendorExtensions> <xilinx:parameterInfo> - <xilinx:enablement> - <xilinx:presence>required</xilinx:presence> - </xilinx:enablement> + <xilinx:parameterUsage>none</xilinx:parameterUsage> </xilinx:parameterInfo> </spirit:vendorExtensions> </spirit:parameter> @@ -280,7 +701,7 @@ <spirit:vendorExtensions> <xilinx:busInterfaceInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.clock_CLK_IN1" xilinx:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Single_ended_clock_capable_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Single_ended_non_clock_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="No_buffer") or (spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Global_buffer"))">true</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.intr" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:busInterfaceInfo> </spirit:vendorExtensions> @@ -322,39 +743,21 @@ </xilinx:parameterInfo> </spirit:vendorExtensions> </spirit:parameter> - </spirit:parameters> - <spirit:vendorExtensions> - <xilinx:busInterfaceInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.CLK_IN1_D" xilinx:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Differential_clock_capable_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Differential_non_clock_pin"))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:busInterfaceInfo> - </spirit:vendorExtensions> - </spirit:busInterface> - <spirit:busInterface> - <spirit:name>clock_CLK_IN2</spirit:name> - <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock" spirit:version="1.0"/> - <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock_rtl" spirit:version="1.0"/> - <spirit:slave/> - <spirit:portMaps> - <spirit:portMap> - <spirit:logicalPort> - <spirit:name>CLK</spirit:name> - </spirit:logicalPort> - <spirit:physicalPort> - <spirit:name>clk_in2</spirit:name> - </spirit:physicalPort> - </spirit:portMap> - </spirit:portMaps> - <spirit:parameters> <spirit:parameter> - <spirit:name>BOARD.ASSOCIATED_PARAM</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_IN2.BOARD.ASSOCIATED_PARAM">CLK_IN2_BOARD_INTERFACE</spirit:value> + <spirit:name>CAN_DEBUG</spirit:name> + <spirit:value spirit:format="bool" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLK_IN1_D.CAN_DEBUG">false</spirit:value> <spirit:vendorExtensions> <xilinx:parameterInfo> - <xilinx:enablement> - <xilinx:presence>required</xilinx:presence> - </xilinx:enablement> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>FREQ_HZ</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLK_IN1_D.FREQ_HZ">100000000</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> </xilinx:parameterInfo> </spirit:vendorExtensions> </spirit:parameter> @@ -362,7 +765,7 @@ <spirit:vendorExtensions> <xilinx:busInterfaceInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.clock_CLK_IN2" xilinx:dependency="(((spirit:decode(id('MODELPARAM_VALUE.C_SECONDARY_SOURCE'))="Single_ended_clock_capable_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_SECONDARY_SOURCE'))="Single_ended_non_clock_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_SECONDARY_SOURCE'))="No_buffer") or (spirit:decode(id('MODELPARAM_VALUE.C_SECONDARY_SOURCE'))="Global_buffer")) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_INCLK_SWITCHOVER'))=1))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.CLK_IN1_D" xilinx:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Differential_clock_capable_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Differential_non_clock_pin"))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:busInterfaceInfo> </spirit:vendorExtensions> @@ -404,6 +807,24 @@ </xilinx:parameterInfo> </spirit:vendorExtensions> </spirit:parameter> + <spirit:parameter> + <spirit:name>CAN_DEBUG</spirit:name> + <spirit:value spirit:format="bool" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLK_IN2_D.CAN_DEBUG">false</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>FREQ_HZ</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLK_IN2_D.FREQ_HZ">100000000</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> </spirit:parameters> <spirit:vendorExtensions> <xilinx:busInterfaceInfo> @@ -413,29 +834,6 @@ </xilinx:busInterfaceInfo> </spirit:vendorExtensions> </spirit:busInterface> - <spirit:busInterface> - <spirit:name>clock_CLKFB_IN</spirit:name> - <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock" spirit:version="1.0"/> - <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock_rtl" spirit:version="1.0"/> - <spirit:slave/> - <spirit:portMaps> - <spirit:portMap> - <spirit:logicalPort> - <spirit:name>CLK</spirit:name> - </spirit:logicalPort> - <spirit:physicalPort> - <spirit:name>clkfb_in</spirit:name> - </spirit:physicalPort> - </spirit:portMap> - </spirit:portMaps> - <spirit:vendorExtensions> - <xilinx:busInterfaceInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.clock_CLKFB_IN" xilinx:dependency="((((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and ((spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO") or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) or ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) and ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))!=1) or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO_OFFCHIP") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING'))!="DIFF")))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:busInterfaceInfo> - </spirit:vendorExtensions> - </spirit:busInterface> <spirit:busInterface> <spirit:name>CLKFB_IN_D</spirit:name> <spirit:displayName>CLKFB_IN_D</spirit:displayName> @@ -461,1328 +859,788 @@ </spirit:physicalPort> </spirit:portMap> </spirit:portMaps> + <spirit:parameters> + <spirit:parameter> + <spirit:name>CAN_DEBUG</spirit:name> + <spirit:value spirit:format="bool" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLKFB_IN_D.CAN_DEBUG">false</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>FREQ_HZ</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLKFB_IN_D.FREQ_HZ">100000000</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + </spirit:parameters> <spirit:vendorExtensions> <xilinx:busInterfaceInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.CLKFB_IN_D" xilinx:dependency="((((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and ((spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO") or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) or ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) and ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING'))="DIFF")))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.CLKFB_IN_D" xilinx:dependency="((((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and ((spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO") or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) or ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP")) and ((spirit:decode(id('MODELPARAM_VALUE.C_MMCM_COMPENSATION'))!="INTERNAL"))) and ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING'))="DIFF") and ((spirit:decode(id('MODELPARAM_VALUE.C_MMCM_COMPENSATION'))!="INTERNAL"))))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:busInterfaceInfo> </spirit:vendorExtensions> </spirit:busInterface> <spirit:busInterface> - <spirit:name>clock_CLK_OUT1</spirit:name> - <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock" spirit:version="1.0"/> - <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock_rtl" spirit:version="1.0"/> + <spirit:name>CLKFB_OUT_D</spirit:name> + <spirit:displayName>CLKFB_OUT_D</spirit:displayName> + <spirit:description>Differential Feeback Clock Output</spirit:description> + <spirit:busType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="diff_clock" spirit:version="1.0"/> + <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="diff_clock_rtl" spirit:version="1.0"/> <spirit:master/> <spirit:portMaps> <spirit:portMap> <spirit:logicalPort> - <spirit:name>CLK</spirit:name> + <spirit:name>CLK_N</spirit:name> </spirit:logicalPort> <spirit:physicalPort> - <spirit:name>clk_out1</spirit:name> + <spirit:name>clkfb_out_n</spirit:name> </spirit:physicalPort> </spirit:portMap> - </spirit:portMaps> - <spirit:parameters> - <spirit:parameter> - <spirit:name>FREQ_HZ</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT1.FREQ_HZ">100000000</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>ASSOCIATED_MMCM_LOCK</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT1.ASSOCIATED_MMCM_LOCK">locked</spirit:value> - </spirit:parameter> - </spirit:parameters> - </spirit:busInterface> - <spirit:busInterface> - <spirit:name>clock_CLK_OUT2</spirit:name> - <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock" spirit:version="1.0"/> - <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock_rtl" spirit:version="1.0"/> - <spirit:master/> - <spirit:portMaps> <spirit:portMap> <spirit:logicalPort> - <spirit:name>CLK</spirit:name> + <spirit:name>CLK_P</spirit:name> </spirit:logicalPort> <spirit:physicalPort> - <spirit:name>clk_out2</spirit:name> + <spirit:name>clkfb_out_p</spirit:name> </spirit:physicalPort> </spirit:portMap> </spirit:portMaps> <spirit:parameters> <spirit:parameter> - <spirit:name>FREQ_HZ</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT2.FREQ_HZ">100000000</spirit:value> + <spirit:name>CAN_DEBUG</spirit:name> + <spirit:value spirit:format="bool" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLKFB_OUT_D.CAN_DEBUG">false</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> </spirit:parameter> <spirit:parameter> - <spirit:name>ASSOCIATED_MMCM_LOCK</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT2.ASSOCIATED_MMCM_LOCK">locked</spirit:value> + <spirit:name>FREQ_HZ</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLKFB_OUT_D.FREQ_HZ">100000000</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> </spirit:parameter> </spirit:parameters> <spirit:vendorExtensions> <xilinx:busInterfaceInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.clock_CLK_OUT2" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT2_USED'))=1)">true</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.CLKFB_OUT_D" xilinx:dependency="((((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and ((spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO") or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) or ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP")) and ((spirit:decode(id('MODELPARAM_VALUE.C_MMCM_COMPENSATION'))!="INTERNAL"))) and ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING'))="DIFF") and ((spirit:decode(id('MODELPARAM_VALUE.C_MMCM_COMPENSATION'))!="INTERNAL"))))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:busInterfaceInfo> </spirit:vendorExtensions> </spirit:busInterface> <spirit:busInterface> - <spirit:name>clock_CLK_OUT3</spirit:name> - <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock" spirit:version="1.0"/> - <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock_rtl" spirit:version="1.0"/> - <spirit:master/> + <spirit:name>reset</spirit:name> + <spirit:displayName>reset</spirit:displayName> + <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="reset" spirit:version="1.0"/> + <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="reset_rtl" spirit:version="1.0"/> + <spirit:slave/> <spirit:portMaps> <spirit:portMap> <spirit:logicalPort> - <spirit:name>CLK</spirit:name> + <spirit:name>RST</spirit:name> </spirit:logicalPort> <spirit:physicalPort> - <spirit:name>clk_out3</spirit:name> + <spirit:name>reset</spirit:name> </spirit:physicalPort> </spirit:portMap> </spirit:portMaps> <spirit:parameters> <spirit:parameter> - <spirit:name>FREQ_HZ</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT3.FREQ_HZ">100000000</spirit:value> + <spirit:name>POLARITY</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.RESET.POLARITY">ACTIVE_HIGH</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>BOARD.ASSOCIATED_PARAM</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.RESET.BOARD.ASSOCIATED_PARAM">RESET_BOARD_INTERFACE</spirit:value> </spirit:parameter> <spirit:parameter> - <spirit:name>ASSOCIATED_MMCM_LOCK</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT3.ASSOCIATED_MMCM_LOCK">locked</spirit:value> + <spirit:name>INSERT_VIP</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="BUSIFPARAM_VALUE.RESET.INSERT_VIP">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>simulation.rtl</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> </spirit:parameter> </spirit:parameters> <spirit:vendorExtensions> <xilinx:busInterfaceInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.clock_CLK_OUT3" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT3_USED'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_SPREAD_SPECTRUM'))=0)">true</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.reset" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_RESET'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_RESET_LOW'))=0) and (not spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION')))">true</xilinx:isEnabled> </xilinx:enablement> </xilinx:busInterfaceInfo> </spirit:vendorExtensions> </spirit:busInterface> <spirit:busInterface> - <spirit:name>clock_CLK_OUT4</spirit:name> - <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock" spirit:version="1.0"/> - <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock_rtl" spirit:version="1.0"/> - <spirit:master/> + <spirit:name>resetn</spirit:name> + <spirit:displayName>resetn</spirit:displayName> + <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="reset" spirit:version="1.0"/> + <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="reset_rtl" spirit:version="1.0"/> + <spirit:slave/> <spirit:portMaps> <spirit:portMap> <spirit:logicalPort> - <spirit:name>CLK</spirit:name> + <spirit:name>RST</spirit:name> </spirit:logicalPort> <spirit:physicalPort> - <spirit:name>clk_out4</spirit:name> + <spirit:name>resetn</spirit:name> </spirit:physicalPort> </spirit:portMap> </spirit:portMaps> <spirit:parameters> <spirit:parameter> - <spirit:name>FREQ_HZ</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT4.FREQ_HZ">100000000</spirit:value> + <spirit:name>POLARITY</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.RESETN.POLARITY">ACTIVE_LOW</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>BOARD.ASSOCIATED_PARAM</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.RESETN.BOARD.ASSOCIATED_PARAM">RESET_BOARD_INTERFACE</spirit:value> </spirit:parameter> <spirit:parameter> - <spirit:name>ASSOCIATED_MMCM_LOCK</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT4.ASSOCIATED_MMCM_LOCK">locked</spirit:value> + <spirit:name>INSERT_VIP</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="BUSIFPARAM_VALUE.RESETN.INSERT_VIP">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>simulation.rtl</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> </spirit:parameter> </spirit:parameters> <spirit:vendorExtensions> <xilinx:busInterfaceInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.clock_CLK_OUT4" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT4_USED'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_SPREAD_SPECTRUM'))=0)">true</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.resetn" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_RESET'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_RESET_LOW'))=1) and (not spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION')))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:busInterfaceInfo> </spirit:vendorExtensions> </spirit:busInterface> <spirit:busInterface> - <spirit:name>clock_CLK_OUT5</spirit:name> + <spirit:name>clock_CLK_IN1</spirit:name> <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock" spirit:version="1.0"/> <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock_rtl" spirit:version="1.0"/> - <spirit:master/> + <spirit:slave/> <spirit:portMaps> <spirit:portMap> <spirit:logicalPort> - <spirit:name>CLK</spirit:name> + <spirit:name>CLK_IN1</spirit:name> </spirit:logicalPort> <spirit:physicalPort> - <spirit:name>clk_out5</spirit:name> + <spirit:name>clk_in1</spirit:name> </spirit:physicalPort> </spirit:portMap> </spirit:portMaps> <spirit:parameters> <spirit:parameter> <spirit:name>FREQ_HZ</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT5.FREQ_HZ">100000000</spirit:value> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_IN1.FREQ_HZ">100000000</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>FREQ_TOLERANCE_HZ</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_IN1.FREQ_TOLERANCE_HZ">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>PHASE</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_IN1.PHASE">0.0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>CLK_DOMAIN</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_IN1.CLK_DOMAIN"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_BUSIF</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_IN1.ASSOCIATED_BUSIF"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_PORT</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_IN1.ASSOCIATED_PORT"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_RESET</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_IN1.ASSOCIATED_RESET"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>INSERT_VIP</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_IN1.INSERT_VIP">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>simulation.rtl</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> </spirit:parameter> <spirit:parameter> - <spirit:name>ASSOCIATED_MMCM_LOCK</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT5.ASSOCIATED_MMCM_LOCK">locked</spirit:value> + <spirit:name>BOARD.ASSOCIATED_PARAM</spirit:name> + <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_IN1.BOARD.ASSOCIATED_PARAM">CLK_IN1_BOARD_INTERFACE</spirit:value> </spirit:parameter> </spirit:parameters> - <spirit:vendorExtensions> - <xilinx:busInterfaceInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.clock_CLK_OUT5" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT5_USED'))=1)">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:busInterfaceInfo> - </spirit:vendorExtensions> </spirit:busInterface> <spirit:busInterface> - <spirit:name>clock_CLK_OUT6</spirit:name> + <spirit:name>clock_CLK_OUT1</spirit:name> <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock" spirit:version="1.0"/> <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock_rtl" spirit:version="1.0"/> <spirit:master/> <spirit:portMaps> <spirit:portMap> <spirit:logicalPort> - <spirit:name>CLK</spirit:name> + <spirit:name>CLK_OUT1</spirit:name> </spirit:logicalPort> <spirit:physicalPort> - <spirit:name>clk_out6</spirit:name> + <spirit:name>clk_out1</spirit:name> </spirit:physicalPort> </spirit:portMap> </spirit:portMaps> <spirit:parameters> <spirit:parameter> <spirit:name>FREQ_HZ</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT6.FREQ_HZ">100000000</spirit:value> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT1.FREQ_HZ">100000000</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>FREQ_TOLERANCE_HZ</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT1.FREQ_TOLERANCE_HZ">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>PHASE</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT1.PHASE">0.0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>CLK_DOMAIN</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT1.CLK_DOMAIN"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_BUSIF</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT1.ASSOCIATED_BUSIF"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_PORT</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT1.ASSOCIATED_PORT"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> </spirit:parameter> <spirit:parameter> - <spirit:name>ASSOCIATED_MMCM_LOCK</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT6.ASSOCIATED_MMCM_LOCK">locked</spirit:value> + <spirit:name>ASSOCIATED_RESET</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT1.ASSOCIATED_RESET"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>INSERT_VIP</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT1.INSERT_VIP">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>simulation.rtl</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> </spirit:parameter> </spirit:parameters> - <spirit:vendorExtensions> - <xilinx:busInterfaceInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.clock_CLK_OUT6" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT6_USED'))=1)">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:busInterfaceInfo> - </spirit:vendorExtensions> </spirit:busInterface> <spirit:busInterface> - <spirit:name>clock_CLK_OUT7</spirit:name> + <spirit:name>clock_CLK_OUT2</spirit:name> <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock" spirit:version="1.0"/> <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock_rtl" spirit:version="1.0"/> <spirit:master/> <spirit:portMaps> <spirit:portMap> <spirit:logicalPort> - <spirit:name>CLK</spirit:name> + <spirit:name>CLK_OUT2</spirit:name> </spirit:logicalPort> <spirit:physicalPort> - <spirit:name>clk_out7</spirit:name> + <spirit:name>clk_out2</spirit:name> </spirit:physicalPort> </spirit:portMap> </spirit:portMaps> <spirit:parameters> <spirit:parameter> <spirit:name>FREQ_HZ</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT7.FREQ_HZ">100000000</spirit:value> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT2.FREQ_HZ">100000000</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>FREQ_TOLERANCE_HZ</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT2.FREQ_TOLERANCE_HZ">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>PHASE</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT2.PHASE">0.0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>CLK_DOMAIN</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT2.CLK_DOMAIN"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_BUSIF</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT2.ASSOCIATED_BUSIF"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_PORT</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT2.ASSOCIATED_PORT"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_RESET</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT2.ASSOCIATED_RESET"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> </spirit:parameter> <spirit:parameter> - <spirit:name>ASSOCIATED_MMCM_LOCK</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT7.ASSOCIATED_MMCM_LOCK">locked</spirit:value> + <spirit:name>INSERT_VIP</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT2.INSERT_VIP">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>simulation.rtl</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> </spirit:parameter> </spirit:parameters> - <spirit:vendorExtensions> - <xilinx:busInterfaceInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.clock_CLK_OUT7" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT7_USED'))=1)">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:busInterfaceInfo> - </spirit:vendorExtensions> </spirit:busInterface> <spirit:busInterface> - <spirit:name>clock_CLKFB_OUT</spirit:name> + <spirit:name>clock_CLK_OUT3</spirit:name> <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock" spirit:version="1.0"/> <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock_rtl" spirit:version="1.0"/> <spirit:master/> <spirit:portMaps> <spirit:portMap> <spirit:logicalPort> - <spirit:name>CLK</spirit:name> - </spirit:logicalPort> - <spirit:physicalPort> - <spirit:name>clkfb_out</spirit:name> - </spirit:physicalPort> - </spirit:portMap> - </spirit:portMaps> - <spirit:vendorExtensions> - <xilinx:busInterfaceInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.clock_CLKFB_OUT" xilinx:dependency="((((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and ((spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO") or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) or ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) and ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))!=1) or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO_OFFCHIP") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING'))!="DIFF")))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:busInterfaceInfo> - </spirit:vendorExtensions> - </spirit:busInterface> - <spirit:busInterface> - <spirit:name>CLKFB_OUT_D</spirit:name> - <spirit:displayName>CLKFB_OUT_D</spirit:displayName> - <spirit:description>Differential Feeback Clock Output</spirit:description> - <spirit:busType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="diff_clock" spirit:version="1.0"/> - <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="diff_clock_rtl" spirit:version="1.0"/> - <spirit:master/> - <spirit:portMaps> - <spirit:portMap> - <spirit:logicalPort> - <spirit:name>CLK_N</spirit:name> - </spirit:logicalPort> - <spirit:physicalPort> - <spirit:name>clkfb_out_n</spirit:name> - </spirit:physicalPort> - </spirit:portMap> - <spirit:portMap> - <spirit:logicalPort> - <spirit:name>CLK_P</spirit:name> - </spirit:logicalPort> - <spirit:physicalPort> - <spirit:name>clkfb_out_p</spirit:name> - </spirit:physicalPort> - </spirit:portMap> - </spirit:portMaps> - <spirit:vendorExtensions> - <xilinx:busInterfaceInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.CLKFB_OUT_D" xilinx:dependency="((((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and ((spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO") or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) or ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) and ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING'))="DIFF")))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:busInterfaceInfo> - </spirit:vendorExtensions> - </spirit:busInterface> - <spirit:busInterface> - <spirit:name>reset</spirit:name> - <spirit:displayName>reset</spirit:displayName> - <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="reset" spirit:version="1.0"/> - <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="reset_rtl" spirit:version="1.0"/> - <spirit:slave/> - <spirit:portMaps> - <spirit:portMap> - <spirit:logicalPort> - <spirit:name>RST</spirit:name> + <spirit:name>CLK_OUT3</spirit:name> </spirit:logicalPort> <spirit:physicalPort> - <spirit:name>reset</spirit:name> + <spirit:name>clk_out3</spirit:name> </spirit:physicalPort> </spirit:portMap> </spirit:portMaps> <spirit:parameters> <spirit:parameter> - <spirit:name>POLARITY</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.RESET.POLARITY">ACTIVE_HIGH</spirit:value> + <spirit:name>FREQ_HZ</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT3.FREQ_HZ">100000000</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> </spirit:parameter> <spirit:parameter> - <spirit:name>BOARD.ASSOCIATED_PARAM</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.RESET.BOARD.ASSOCIATED_PARAM">RESET_BOARD_INTERFACE</spirit:value> + <spirit:name>FREQ_TOLERANCE_HZ</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT3.FREQ_TOLERANCE_HZ">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> </spirit:parameter> - </spirit:parameters> - <spirit:vendorExtensions> - <xilinx:busInterfaceInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.reset" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_RESET'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_RESET_LOW'))=0) and (not spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION')))">true</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:busInterfaceInfo> - </spirit:vendorExtensions> - </spirit:busInterface> - <spirit:busInterface> - <spirit:name>resetn</spirit:name> - <spirit:displayName>resetn</spirit:displayName> - <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="reset" spirit:version="1.0"/> - <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="reset_rtl" spirit:version="1.0"/> - <spirit:slave/> - <spirit:portMaps> - <spirit:portMap> - <spirit:logicalPort> - <spirit:name>RST</spirit:name> - </spirit:logicalPort> - <spirit:physicalPort> - <spirit:name>resetn</spirit:name> - </spirit:physicalPort> - </spirit:portMap> - </spirit:portMaps> - <spirit:parameters> <spirit:parameter> - <spirit:name>POLARITY</spirit:name> - <spirit:value spirit:id="BUSIFPARAM_VALUE.RESETN.POLARITY">ACTIVE_LOW</spirit:value> + <spirit:name>PHASE</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT3.PHASE">0.0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> </spirit:parameter> - </spirit:parameters> - <spirit:vendorExtensions> - <xilinx:busInterfaceInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.resetn" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_RESET'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_RESET_LOW'))=1) and (not spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION')))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:busInterfaceInfo> - </spirit:vendorExtensions> - </spirit:busInterface> - <spirit:busInterface> - <spirit:name>s_drp</spirit:name> - <spirit:displayName>s_drp</spirit:displayName> - <spirit:description>Slave DRP Port</spirit:description> - <spirit:busType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="drp" spirit:version="1.0"/> - <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="interface" spirit:name="drp_rtl" spirit:version="1.0"/> - <spirit:slave/> - <spirit:portMaps> - <spirit:portMap> - <spirit:logicalPort> - <spirit:name>DADDR</spirit:name> - </spirit:logicalPort> - <spirit:physicalPort> - <spirit:name>daddr</spirit:name> - </spirit:physicalPort> - </spirit:portMap> - <spirit:portMap> - <spirit:logicalPort> - <spirit:name>DEN</spirit:name> - </spirit:logicalPort> - <spirit:physicalPort> - <spirit:name>den</spirit:name> - </spirit:physicalPort> - </spirit:portMap> - <spirit:portMap> - <spirit:logicalPort> - <spirit:name>DI</spirit:name> - </spirit:logicalPort> - <spirit:physicalPort> - <spirit:name>din</spirit:name> - </spirit:physicalPort> - </spirit:portMap> - <spirit:portMap> - <spirit:logicalPort> - <spirit:name>DO</spirit:name> - </spirit:logicalPort> - <spirit:physicalPort> - <spirit:name>dout</spirit:name> - </spirit:physicalPort> - </spirit:portMap> - <spirit:portMap> - <spirit:logicalPort> - <spirit:name>DRDY</spirit:name> - </spirit:logicalPort> - <spirit:physicalPort> - <spirit:name>drdy</spirit:name> - </spirit:physicalPort> - </spirit:portMap> - <spirit:portMap> - <spirit:logicalPort> - <spirit:name>DWE</spirit:name> - </spirit:logicalPort> - <spirit:physicalPort> - <spirit:name>dwe</spirit:name> - </spirit:physicalPort> - </spirit:portMap> - </spirit:portMaps> - <spirit:vendorExtensions> - <xilinx:busInterfaceInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="BUSIF_ENABLEMENT.s_drp" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_USE_DYN_RECONFIG')) and (not spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION')))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:busInterfaceInfo> - </spirit:vendorExtensions> - </spirit:busInterface> - </spirit:busInterfaces> - <spirit:model> - <spirit:views> - <spirit:view> - <spirit:name>xilinx_vhdlinstantiationtemplate</spirit:name> - <spirit:displayName>VHDL Instantiation Template</spirit:displayName> - <spirit:envIdentifier>vhdlSource:vivado.xilinx.com:synthesis.template</spirit:envIdentifier> - <spirit:language>vhdl</spirit:language> - <spirit:fileSetRef> - <spirit:localName>xilinx_vhdlinstantiationtemplate_view_fileset</spirit:localName> - </spirit:fileSetRef> - <spirit:parameters> - <spirit:parameter> - <spirit:name>customizationCRC</spirit:name> - <spirit:value>df5bfb27</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>customizationCRCversion</spirit:name> - <spirit:value>5</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>boundaryCRC</spirit:name> - <spirit:value>893de65f</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>boundaryCRCversion</spirit:name> - <spirit:value>1</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>GENtimestamp</spirit:name> - <spirit:value>Fri Jan 22 01:11:32 UTC 2016</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>StaleAtRelink</spirit:name> - <spirit:value>false</spirit:value> - </spirit:parameter> - </spirit:parameters> - </spirit:view> - <spirit:view> - <spirit:name>xilinx_anylanguagesynthesis</spirit:name> - <spirit:displayName>Synthesis</spirit:displayName> - <spirit:envIdentifier>:vivado.xilinx.com:synthesis</spirit:envIdentifier> - <spirit:fileSetRef> - <spirit:localName>xilinx_anylanguagesynthesis_view_fileset</spirit:localName> - </spirit:fileSetRef> - <spirit:parameters> - <spirit:parameter> - <spirit:name>customizationCRC</spirit:name> - <spirit:value>df5bfb27</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>customizationCRCversion</spirit:name> - <spirit:value>5</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>boundaryCRC</spirit:name> - <spirit:value>893de65f</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>boundaryCRCversion</spirit:name> - <spirit:value>1</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>GENtimestamp</spirit:name> - <spirit:value>Fri Jan 22 01:11:33 UTC 2016</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>StaleAtRelink</spirit:name> - <spirit:value>false</spirit:value> - </spirit:parameter> - </spirit:parameters> - </spirit:view> - <spirit:view> - <spirit:name>xilinx_anylanguagesynthesiswrapper</spirit:name> - <spirit:displayName>Synthesis Wrapper</spirit:displayName> - <spirit:envIdentifier>:vivado.xilinx.com:synthesis.wrapper</spirit:envIdentifier> - <spirit:fileSetRef> - <spirit:localName>xilinx_anylanguagesynthesiswrapper_view_fileset</spirit:localName> - </spirit:fileSetRef> - <spirit:parameters> - <spirit:parameter> - <spirit:name>customizationCRC</spirit:name> - <spirit:value>df5bfb27</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>customizationCRCversion</spirit:name> - <spirit:value>5</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>boundaryCRC</spirit:name> - <spirit:value>893de65f</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>boundaryCRCversion</spirit:name> - <spirit:value>1</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>GENtimestamp</spirit:name> - <spirit:value>Fri Jan 22 01:11:33 UTC 2016</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>StaleAtRelink</spirit:name> - <spirit:value>false</spirit:value> - </spirit:parameter> - </spirit:parameters> - </spirit:view> - <spirit:view> - <spirit:name>xilinx_anylanguagebehavioralsimulation</spirit:name> - <spirit:displayName>Simulation</spirit:displayName> - <spirit:envIdentifier>:vivado.xilinx.com:simulation</spirit:envIdentifier> - <spirit:fileSetRef> - <spirit:localName>xilinx_anylanguagebehavioralsimulation_view_fileset</spirit:localName> - </spirit:fileSetRef> - <spirit:parameters> - <spirit:parameter> - <spirit:name>customizationCRC</spirit:name> - <spirit:value>b7329546</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>customizationCRCversion</spirit:name> - <spirit:value>5</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>boundaryCRC</spirit:name> - <spirit:value>893de65f</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>boundaryCRCversion</spirit:name> - <spirit:value>1</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>GENtimestamp</spirit:name> - <spirit:value>Fri Jan 22 01:11:33 UTC 2016</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>StaleAtRelink</spirit:name> - <spirit:value>false</spirit:value> - </spirit:parameter> - </spirit:parameters> - </spirit:view> - <spirit:view> - <spirit:name>xilinx_anylanguagesimulationwrapper</spirit:name> - <spirit:displayName>Simulation Wrapper</spirit:displayName> - <spirit:envIdentifier>:vivado.xilinx.com:simulation.wrapper</spirit:envIdentifier> - <spirit:fileSetRef> - <spirit:localName>xilinx_anylanguagesimulationwrapper_view_fileset</spirit:localName> - </spirit:fileSetRef> - <spirit:parameters> - <spirit:parameter> - <spirit:name>customizationCRC</spirit:name> - <spirit:value>b7329546</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>customizationCRCversion</spirit:name> - <spirit:value>5</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>boundaryCRC</spirit:name> - <spirit:value>893de65f</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>boundaryCRCversion</spirit:name> - <spirit:value>1</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>GENtimestamp</spirit:name> - <spirit:value>Fri Jan 22 01:11:33 UTC 2016</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>StaleAtRelink</spirit:name> - <spirit:value>false</spirit:value> - </spirit:parameter> - </spirit:parameters> - </spirit:view> - <spirit:view> - <spirit:name>xilinx_implementation</spirit:name> - <spirit:displayName>Implementation</spirit:displayName> - <spirit:envIdentifier>:vivado.xilinx.com:implementation</spirit:envIdentifier> - <spirit:fileSetRef> - <spirit:localName>xilinx_implementation_view_fileset</spirit:localName> - </spirit:fileSetRef> - <spirit:parameters> - <spirit:parameter> - <spirit:name>customizationCRC</spirit:name> - <spirit:value>df5bfb27</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>customizationCRCversion</spirit:name> - <spirit:value>5</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>boundaryCRC</spirit:name> - <spirit:value>893de65f</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>boundaryCRCversion</spirit:name> - <spirit:value>1</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>GENtimestamp</spirit:name> - <spirit:value>Fri Jan 22 01:11:33 UTC 2016</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>StaleAtRelink</spirit:name> - <spirit:value>false</spirit:value> - </spirit:parameter> - </spirit:parameters> - </spirit:view> - <spirit:view> - <spirit:name>xilinx_versioninformation</spirit:name> - <spirit:displayName>Version Information</spirit:displayName> - <spirit:envIdentifier>:vivado.xilinx.com:docs.versioninfo</spirit:envIdentifier> - <spirit:fileSetRef> - <spirit:localName>xilinx_versioninformation_view_fileset</spirit:localName> - </spirit:fileSetRef> - <spirit:parameters> - <spirit:parameter> - <spirit:name>customizationCRC</spirit:name> - <spirit:value>df5bfb27</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>customizationCRCversion</spirit:name> - <spirit:value>5</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>boundaryCRC</spirit:name> - <spirit:value>893de65f</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>boundaryCRCversion</spirit:name> - <spirit:value>1</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>GENtimestamp</spirit:name> - <spirit:value>Fri Jan 22 01:11:33 UTC 2016</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>StaleAtRelink</spirit:name> - <spirit:value>false</spirit:value> - </spirit:parameter> - </spirit:parameters> - </spirit:view> - <spirit:view> - <spirit:name>xilinx_externalfiles</spirit:name> - <spirit:displayName>External Files</spirit:displayName> - <spirit:envIdentifier>:vivado.xilinx.com:external.files</spirit:envIdentifier> - <spirit:fileSetRef> - <spirit:localName>xilinx_externalfiles_view_fileset</spirit:localName> - </spirit:fileSetRef> - <spirit:parameters> - <spirit:parameter> - <spirit:name>customizationCRC</spirit:name> - <spirit:value>df5bfb27</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>customizationCRCversion</spirit:name> - <spirit:value>5</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>boundaryCRC</spirit:name> - <spirit:value>893de65f</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>boundaryCRCversion</spirit:name> - <spirit:value>1</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>GENtimestamp</spirit:name> - <spirit:value>Fri Jan 22 01:13:26 UTC 2016</spirit:value> - </spirit:parameter> - <spirit:parameter> - <spirit:name>StaleAtRelink</spirit:name> - <spirit:value>false</spirit:value> - </spirit:parameter> - </spirit:parameters> - </spirit:view> - </spirit:views> - <spirit:ports> - <spirit:port> - <spirit:name>s_axi_aclk</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_aclk" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_aresetn</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_aresetn" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_awaddr</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:vector> - <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_S_AXI_ADDR_WIDTH')) - 1)">10</spirit:left> - <spirit:right spirit:format="long">0</spirit:right> - </spirit:vector> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic_vector</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_awaddr" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_awvalid</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_awvalid" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_awready</spirit:name> - <spirit:wire> - <spirit:direction>out</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_awready" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_wdata</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:vector> - <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH')) - 1)">31</spirit:left> - <spirit:right spirit:format="long">0</spirit:right> - </spirit:vector> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic_vector</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_wdata" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_wstrb</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:vector> - <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH')) div 8) - 1)">3</spirit:left> - <spirit:right spirit:format="long">0</spirit:right> - </spirit:vector> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic_vector</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_wstrb" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_wvalid</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_wvalid" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_wready</spirit:name> - <spirit:wire> - <spirit:direction>out</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_wready" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_bresp</spirit:name> - <spirit:wire> - <spirit:direction>out</spirit:direction> - <spirit:vector> - <spirit:left spirit:format="long">1</spirit:left> - <spirit:right spirit:format="long">0</spirit:right> - </spirit:vector> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic_vector</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_bresp" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_bvalid</spirit:name> - <spirit:wire> - <spirit:direction>out</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_bvalid" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_bready</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_bready" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_araddr</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:vector> - <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_S_AXI_ADDR_WIDTH')) - 1)">10</spirit:left> - <spirit:right spirit:format="long">0</spirit:right> - </spirit:vector> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic_vector</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_araddr" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_arvalid</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_arvalid" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_arready</spirit:name> - <spirit:wire> - <spirit:direction>out</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_arready" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_rdata</spirit:name> - <spirit:wire> - <spirit:direction>out</spirit:direction> - <spirit:vector> - <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH')) - 1)">31</spirit:left> - <spirit:right spirit:format="long">0</spirit:right> - </spirit:vector> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic_vector</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_rdata" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_rresp</spirit:name> - <spirit:wire> - <spirit:direction>out</spirit:direction> - <spirit:vector> - <spirit:left spirit:format="long">1</spirit:left> - <spirit:right spirit:format="long">0</spirit:right> - </spirit:vector> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic_vector</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_rresp" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_rvalid</spirit:name> - <spirit:wire> - <spirit:direction>out</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_rvalid" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>s_axi_rready</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_rready" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>clk_in1</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_in1" xilinx:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Single_ended_clock_capable_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Single_ended_non_clock_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="No_buffer") or (spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Global_buffer"))">true</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>clk_in1_p</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_in1_p" xilinx:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Differential_clock_capable_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Differential_non_clock_pin"))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>clk_in1_n</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_in1_n" xilinx:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Differential_clock_capable_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Differential_non_clock_pin"))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>clk_in2</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_in2" xilinx:dependency="(((spirit:decode(id('MODELPARAM_VALUE.C_SECONDARY_SOURCE'))="Single_ended_clock_capable_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_SECONDARY_SOURCE'))="Single_ended_non_clock_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_SECONDARY_SOURCE'))="No_buffer") or (spirit:decode(id('MODELPARAM_VALUE.C_SECONDARY_SOURCE'))="Global_buffer")) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_INCLK_SWITCHOVER'))=1))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>clk_in2_p</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_in2_p" xilinx:dependency="(((spirit:decode(id('MODELPARAM_VALUE.C_SECONDARY_SOURCE'))="Differential_clock_capable_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_SECONDARY_SOURCE'))="Differential_non_clock_pin")) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_INCLK_SWITCHOVER'))=1))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>clk_in2_n</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_in2_n" xilinx:dependency="(((spirit:decode(id('MODELPARAM_VALUE.C_SECONDARY_SOURCE'))="Differential_clock_capable_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_SECONDARY_SOURCE'))="Differential_non_clock_pin")) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_INCLK_SWITCHOVER'))=1))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>clk_in_sel</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_in_sel" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_INCLK_SWITCHOVER'))=1)">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>clkfb_in</spirit:name> - <spirit:wire> - <spirit:direction>in</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clkfb_in" xilinx:dependency="((((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and ((spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO") or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) or ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) and ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))!=1) or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO_OFFCHIP") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING'))!="DIFF")))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> + <spirit:parameter> + <spirit:name>CLK_DOMAIN</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT3.CLK_DOMAIN"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_BUSIF</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT3.ASSOCIATED_BUSIF"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_PORT</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT3.ASSOCIATED_PORT"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_RESET</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT3.ASSOCIATED_RESET"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>INSERT_VIP</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT3.INSERT_VIP">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>simulation.rtl</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + </spirit:parameters> + </spirit:busInterface> + <spirit:busInterface> + <spirit:name>clock_CLK_OUT4</spirit:name> + <spirit:busType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock" spirit:version="1.0"/> + <spirit:abstractionType spirit:vendor="xilinx.com" spirit:library="signal" spirit:name="clock_rtl" spirit:version="1.0"/> + <spirit:master/> + <spirit:portMaps> + <spirit:portMap> + <spirit:logicalPort> + <spirit:name>CLK_OUT4</spirit:name> + </spirit:logicalPort> + <spirit:physicalPort> + <spirit:name>clk_out4</spirit:name> + </spirit:physicalPort> + </spirit:portMap> + </spirit:portMaps> + <spirit:parameters> + <spirit:parameter> + <spirit:name>FREQ_HZ</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT4.FREQ_HZ">100000000</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>FREQ_TOLERANCE_HZ</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT4.FREQ_TOLERANCE_HZ">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>PHASE</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT4.PHASE">0.0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>CLK_DOMAIN</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT4.CLK_DOMAIN"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_BUSIF</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT4.ASSOCIATED_BUSIF"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_PORT</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT4.ASSOCIATED_PORT"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ASSOCIATED_RESET</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT4.ASSOCIATED_RESET"/> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>none</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + <spirit:parameter> + <spirit:name>INSERT_VIP</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="BUSIFPARAM_VALUE.CLOCK_CLK_OUT4.INSERT_VIP">0</spirit:value> + <spirit:vendorExtensions> + <xilinx:parameterInfo> + <xilinx:parameterUsage>simulation.rtl</xilinx:parameterUsage> + </xilinx:parameterInfo> + </spirit:vendorExtensions> + </spirit:parameter> + </spirit:parameters> + </spirit:busInterface> + </spirit:busInterfaces> + <spirit:model> + <spirit:views> + <spirit:view> + <spirit:name>xilinx_anylanguagebehavioralsimulation</spirit:name> + <spirit:displayName>Simulation</spirit:displayName> + <spirit:envIdentifier>:vivado.xilinx.com:simulation</spirit:envIdentifier> + <spirit:modelName>clk_wiz_v6_0_14</spirit:modelName> + <spirit:fileSetRef> + <spirit:localName>xilinx_anylanguagebehavioralsimulation_view_fileset</spirit:localName> + </spirit:fileSetRef> + <spirit:parameters> + <spirit:parameter> + <spirit:name>GENtimestamp</spirit:name> + <spirit:value>Wed Feb 26 11:12:46 UTC 2025</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>outputProductCRC</spirit:name> + <spirit:value>9:19cc2464</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:view> + <spirit:view> + <spirit:name>xilinx_anylanguagesimulationwrapper</spirit:name> + <spirit:displayName>Simulation Wrapper</spirit:displayName> + <spirit:envIdentifier>:vivado.xilinx.com:simulation.wrapper</spirit:envIdentifier> + <spirit:modelName>clk_wiz_0</spirit:modelName> + <spirit:fileSetRef> + <spirit:localName>xilinx_anylanguagesimulationwrapper_view_fileset</spirit:localName> + </spirit:fileSetRef> + <spirit:parameters> + <spirit:parameter> + <spirit:name>GENtimestamp</spirit:name> + <spirit:value>Wed Feb 26 11:12:46 UTC 2025</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>outputProductCRC</spirit:name> + <spirit:value>9:19cc2464</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:view> + <spirit:view> + <spirit:name>xilinx_anylanguagesynthesis</spirit:name> + <spirit:displayName>Synthesis</spirit:displayName> + <spirit:envIdentifier>:vivado.xilinx.com:synthesis</spirit:envIdentifier> + <spirit:modelName>clk_wiz_v6_0_14</spirit:modelName> + <spirit:fileSetRef> + <spirit:localName>xilinx_anylanguagesynthesis_view_fileset</spirit:localName> + </spirit:fileSetRef> + <spirit:parameters> + <spirit:parameter> + <spirit:name>GENtimestamp</spirit:name> + <spirit:value>Wed Feb 26 11:12:46 UTC 2025</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>outputProductCRC</spirit:name> + <spirit:value>9:72f46ee5</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:view> + <spirit:view> + <spirit:name>xilinx_anylanguagesynthesiswrapper</spirit:name> + <spirit:displayName>Synthesis Wrapper</spirit:displayName> + <spirit:envIdentifier>:vivado.xilinx.com:synthesis.wrapper</spirit:envIdentifier> + <spirit:modelName>clk_wiz_0</spirit:modelName> + <spirit:fileSetRef> + <spirit:localName>xilinx_anylanguagesynthesiswrapper_view_fileset</spirit:localName> + </spirit:fileSetRef> + <spirit:parameters> + <spirit:parameter> + <spirit:name>GENtimestamp</spirit:name> + <spirit:value>Wed Feb 26 11:12:46 UTC 2025</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>outputProductCRC</spirit:name> + <spirit:value>9:72f46ee5</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:view> + <spirit:view> + <spirit:name>xilinx_elaborateports</spirit:name> + <spirit:displayName>Elaborate Ports</spirit:displayName> + <spirit:envIdentifier>:vivado.xilinx.com:elaborate.ports</spirit:envIdentifier> + <spirit:parameters> + <spirit:parameter> + <spirit:name>outputProductCRC</spirit:name> + <spirit:value>9:8ebd4ae1</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:view> + <spirit:view> + <spirit:name>xilinx_implementation</spirit:name> + <spirit:displayName>Implementation</spirit:displayName> + <spirit:envIdentifier>:vivado.xilinx.com:implementation</spirit:envIdentifier> + <spirit:fileSetRef> + <spirit:localName>xilinx_implementation_view_fileset</spirit:localName> + </spirit:fileSetRef> + <spirit:parameters> + <spirit:parameter> + <spirit:name>GENtimestamp</spirit:name> + <spirit:value>Wed Feb 26 11:12:46 UTC 2025</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>outputProductCRC</spirit:name> + <spirit:value>9:72f46ee5</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:view> + <spirit:view> + <spirit:name>xilinx_synthesisconstraints</spirit:name> + <spirit:displayName>Synthesis Constraints</spirit:displayName> + <spirit:envIdentifier>:vivado.xilinx.com:synthesis.constraints</spirit:envIdentifier> + <spirit:parameters> + <spirit:parameter> + <spirit:name>outputProductCRC</spirit:name> + <spirit:value>9:72f46ee5</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:view> + <spirit:view> + <spirit:name>xilinx_versioninformation</spirit:name> + <spirit:displayName>Version Information</spirit:displayName> + <spirit:envIdentifier>:vivado.xilinx.com:docs.versioninfo</spirit:envIdentifier> + <spirit:fileSetRef> + <spirit:localName>xilinx_versioninformation_view_fileset</spirit:localName> + </spirit:fileSetRef> + <spirit:parameters> + <spirit:parameter> + <spirit:name>GENtimestamp</spirit:name> + <spirit:value>Wed Feb 26 11:12:46 UTC 2025</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>outputProductCRC</spirit:name> + <spirit:value>9:72f46ee5</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:view> + <spirit:view> + <spirit:name>xilinx_vhdlinstantiationtemplate</spirit:name> + <spirit:displayName>VHDL Instantiation Template</spirit:displayName> + <spirit:envIdentifier>vhdlSource:vivado.xilinx.com:synthesis.template</spirit:envIdentifier> + <spirit:language>vhdl</spirit:language> + <spirit:modelName>clk_wiz_v6_0_14</spirit:modelName> + <spirit:fileSetRef> + <spirit:localName>xilinx_vhdlinstantiationtemplate_view_fileset</spirit:localName> + </spirit:fileSetRef> + <spirit:parameters> + <spirit:parameter> + <spirit:name>GENtimestamp</spirit:name> + <spirit:value>Wed Feb 26 11:12:34 UTC 2025</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>outputProductCRC</spirit:name> + <spirit:value>9:72f46ee5</spirit:value> + </spirit:parameter> + </spirit:parameters> + </spirit:view> + </spirit:views> + <spirit:ports> <spirit:port> - <spirit:name>clkfb_in_p</spirit:name> + <spirit:name>s_axi_aclk</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> @@ -1799,13 +1657,13 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clkfb_in_p" xilinx:dependency="((((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and ((spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO") or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) or ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) and ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING'))="DIFF")))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_aclk" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clkfb_in_n</spirit:name> + <spirit:name>s_axi_aresetn</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> @@ -1822,17 +1680,17 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clkfb_in_n" xilinx:dependency="((((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and ((spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO") or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) or ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) and ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING'))="DIFF")))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_aresetn" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>daddr</spirit:name> + <spirit:name>s_axi_awaddr</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:vector> - <spirit:left spirit:format="long">6</spirit:left> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_S_AXI_ADDR_WIDTH')) - 1)">10</spirit:left> <spirit:right spirit:format="long">0</spirit:right> </spirit:vector> <spirit:wireTypeDefs> @@ -1849,13 +1707,13 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.daddr" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_USE_DYN_RECONFIG')) and (not spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION')))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_awaddr" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>dclk</spirit:name> + <spirit:name>s_axi_awvalid</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> @@ -1872,15 +1730,15 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.dclk" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_USE_DYN_RECONFIG')) and (not spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION')))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_awvalid" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>den</spirit:name> + <spirit:name>s_axi_awready</spirit:name> <spirit:wire> - <spirit:direction>in</spirit:direction> + <spirit:direction>out</spirit:direction> <spirit:wireTypeDefs> <spirit:wireTypeDef> <spirit:typeName>std_logic</spirit:typeName> @@ -1888,24 +1746,21 @@ <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> </spirit:wire> <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.den" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_USE_DYN_RECONFIG')) and (not spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION')))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_awready" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>din</spirit:name> + <spirit:name>s_axi_wdata</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:vector> - <spirit:left spirit:format="long">15</spirit:left> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH')) - 1)">31</spirit:left> <spirit:right spirit:format="long">0</spirit:right> </spirit:vector> <spirit:wireTypeDefs> @@ -1917,67 +1772,27 @@ </spirit:wireTypeDefs> <spirit:driver> <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.din" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_USE_DYN_RECONFIG')) and (not spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION')))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>dout</spirit:name> - <spirit:wire> - <spirit:direction>out</spirit:direction> - <spirit:vector> - <spirit:left spirit:format="long">15</spirit:left> - <spirit:right spirit:format="long">0</spirit:right> - </spirit:vector> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic_vector</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> - </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.dout" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_USE_DYN_RECONFIG')) and (not spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION')))">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> - </spirit:port> - <spirit:port> - <spirit:name>drdy</spirit:name> - <spirit:wire> - <spirit:direction>out</spirit:direction> - <spirit:wireTypeDefs> - <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> - <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> - <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> - </spirit:wireTypeDef> - </spirit:wireTypeDefs> + </spirit:driver> </spirit:wire> <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.drdy" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_USE_DYN_RECONFIG')) and (not spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION')))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_wdata" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>dwe</spirit:name> + <spirit:name>s_axi_wstrb</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH')) div 8) - 1)">3</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> <spirit:wireTypeDefs> <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> + <spirit:typeName>std_logic_vector</spirit:typeName> <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> @@ -1989,13 +1804,13 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.dwe" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_USE_DYN_RECONFIG')) and (not spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION')))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_wstrb" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>psclk</spirit:name> + <spirit:name>s_axi_wvalid</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> @@ -2012,15 +1827,15 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.psclk" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_DYN_PHASE_SHIFT'))=1)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_wvalid" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>psen</spirit:name> + <spirit:name>s_axi_wready</spirit:name> <spirit:wire> - <spirit:direction>in</spirit:direction> + <spirit:direction>out</spirit:direction> <spirit:wireTypeDefs> <spirit:wireTypeDef> <spirit:typeName>std_logic</spirit:typeName> @@ -2028,43 +1843,41 @@ <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> </spirit:wire> <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.psen" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_DYN_PHASE_SHIFT'))=1)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_wready" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>psincdec</spirit:name> + <spirit:name>s_axi_bresp</spirit:name> <spirit:wire> - <spirit:direction>in</spirit:direction> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long">1</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> <spirit:wireTypeDefs> <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> + <spirit:typeName>std_logic_vector</spirit:typeName> <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> </spirit:wire> <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.psincdec" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_DYN_PHASE_SHIFT'))=1)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_bresp" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>psdone</spirit:name> + <spirit:name>s_axi_bvalid</spirit:name> <spirit:wire> <spirit:direction>out</spirit:direction> <spirit:wireTypeDefs> @@ -2078,15 +1891,15 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.psdone" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_DYN_PHASE_SHIFT'))=1)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_bvalid" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out1</spirit:name> + <spirit:name>s_axi_bready</spirit:name> <spirit:wire> - <spirit:direction>out</spirit:direction> + <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> <spirit:wireTypeDef> <spirit:typeName>std_logic</spirit:typeName> @@ -2094,15 +1907,29 @@ <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> </spirit:wireTypeDefs> + <spirit:driver> + <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> + </spirit:driver> </spirit:wire> + <spirit:vendorExtensions> + <xilinx:portInfo> + <xilinx:enablement> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_bready" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> + </xilinx:enablement> + </xilinx:portInfo> + </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out1_ce</spirit:name> + <spirit:name>s_axi_araddr</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_S_AXI_ADDR_WIDTH')) - 1)">10</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> <spirit:wireTypeDefs> <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> + <spirit:typeName>std_logic_vector</spirit:typeName> <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> @@ -2114,13 +1941,13 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out1_ce" xilinx:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT1_DRIVES'))="BUFGCE") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT1_DRIVES'))="BUFHCE") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT1_DRIVES'))="BUFR")) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_SAFE_CLOCK_STARTUP'))=0)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_araddr" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out1_clr</spirit:name> + <spirit:name>s_axi_arvalid</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> @@ -2137,13 +1964,13 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out1_clr" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT1_DRIVES'))="BUFR")">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_arvalid" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out2</spirit:name> + <spirit:name>s_axi_arready</spirit:name> <spirit:wire> <spirit:direction>out</spirit:direction> <spirit:wireTypeDefs> @@ -2157,59 +1984,61 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out2" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT2_USED'))=1)">true</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_arready" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out2_ce</spirit:name> + <spirit:name>s_axi_rdata</spirit:name> <spirit:wire> - <spirit:direction>in</spirit:direction> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long" spirit:resolve="dependent" spirit:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH')) - 1)">31</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> <spirit:wireTypeDefs> <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> + <spirit:typeName>std_logic_vector</spirit:typeName> <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> </spirit:wire> <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out2_ce" xilinx:dependency="(((spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT2_DRIVES'))="BUFGCE") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT2_DRIVES'))="BUFHCE") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT2_DRIVES'))="BUFR")) and (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT2_USED'))=1)) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_SAFE_CLOCK_STARTUP'))=0)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_rdata" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out2_clr</spirit:name> + <spirit:name>s_axi_rresp</spirit:name> <spirit:wire> - <spirit:direction>in</spirit:direction> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long">1</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> <spirit:wireTypeDefs> <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> + <spirit:typeName>std_logic_vector</spirit:typeName> <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> </spirit:wire> <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out2_clr" xilinx:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT2_DRIVES'))="BUFR") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT2_USED'))=1))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_rresp" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out3</spirit:name> + <spirit:name>s_axi_rvalid</spirit:name> <spirit:wire> <spirit:direction>out</spirit:direction> <spirit:wireTypeDefs> @@ -2223,13 +2052,13 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out3" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT3_USED'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_SPREAD_SPECTRUM'))=0)">true</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_rvalid" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out3_ce</spirit:name> + <spirit:name>s_axi_rready</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> @@ -2246,13 +2075,13 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out3_ce" xilinx:dependency="(((spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT3_DRIVES'))="BUFGCE") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT3_DRIVES'))="BUFHCE") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT3_DRIVES'))="BUFR")) and (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT3_USED'))=1)) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_SPREAD_SPECTRUM'))=0) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_SAFE_CLOCK_STARTUP'))=0)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.s_axi_rready" xilinx:dependency="spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION'))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out3_clr</spirit:name> + <spirit:name>clk_in1_p</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> @@ -2269,15 +2098,15 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out3_clr" xilinx:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT3_DRIVES'))="BUFR") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT3_USED'))=1)) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_SPREAD_SPECTRUM'))=0)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_in1_p" xilinx:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Differential_clock_capable_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Differential_non_clock_pin"))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out4</spirit:name> + <spirit:name>clk_in1_n</spirit:name> <spirit:wire> - <spirit:direction>out</spirit:direction> + <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> <spirit:wireTypeDef> <spirit:typeName>std_logic</spirit:typeName> @@ -2285,17 +2114,20 @@ <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> </spirit:wireTypeDefs> + <spirit:driver> + <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> + </spirit:driver> </spirit:wire> <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out4" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT4_USED'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_SPREAD_SPECTRUM'))=0)">true</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_in1_n" xilinx:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Differential_clock_capable_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_PRIM_SOURCE'))="Differential_non_clock_pin"))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out4_ce</spirit:name> + <spirit:name>clk_in2_p</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> @@ -2312,13 +2144,13 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out4_ce" xilinx:dependency="(((spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT4_DRIVES'))="BUFGCE") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT4_DRIVES'))="BUFHCE") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT4_DRIVES'))="BUFR")) and (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT4_USED'))=1)) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_SPREAD_SPECTRUM'))=0) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_SAFE_CLOCK_STARTUP'))=0)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_in2_p" xilinx:dependency="(((spirit:decode(id('MODELPARAM_VALUE.C_SECONDARY_SOURCE'))="Differential_clock_capable_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_SECONDARY_SOURCE'))="Differential_non_clock_pin")) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_INCLK_SWITCHOVER'))=1))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out4_clr</spirit:name> + <spirit:name>clk_in2_n</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> @@ -2335,15 +2167,15 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out4_clr" xilinx:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT4_DRIVES'))="BUFR") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT4_USED'))=1)) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_SPREAD_SPECTRUM'))=0)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_in2_n" xilinx:dependency="(((spirit:decode(id('MODELPARAM_VALUE.C_SECONDARY_SOURCE'))="Differential_clock_capable_pin") or (spirit:decode(id('MODELPARAM_VALUE.C_SECONDARY_SOURCE'))="Differential_non_clock_pin")) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_INCLK_SWITCHOVER'))=1))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out5</spirit:name> + <spirit:name>clkfb_in_p</spirit:name> <spirit:wire> - <spirit:direction>out</spirit:direction> + <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> <spirit:wireTypeDef> <spirit:typeName>std_logic</spirit:typeName> @@ -2351,17 +2183,20 @@ <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> </spirit:wireTypeDefs> + <spirit:driver> + <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> + </spirit:driver> </spirit:wire> <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out5" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT5_USED'))=1)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clkfb_in_p" xilinx:dependency="((((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and ((spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO") or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) or ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP")) and ((spirit:decode(id('MODELPARAM_VALUE.C_MMCM_COMPENSATION'))!="INTERNAL"))) and ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING'))="DIFF") and ((spirit:decode(id('MODELPARAM_VALUE.C_MMCM_COMPENSATION'))!="INTERNAL"))))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out5_ce</spirit:name> + <spirit:name>clkfb_in_n</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> @@ -2378,15 +2213,15 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out5_ce" xilinx:dependency="(((spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT5_DRIVES'))="BUFGCE") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT5_DRIVES'))="BUFHCE") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT5_DRIVES'))="BUFR")) and (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT5_USED'))=1)) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_SAFE_CLOCK_STARTUP'))=0)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clkfb_in_n" xilinx:dependency="((((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and ((spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO") or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) or ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP")) and ((spirit:decode(id('MODELPARAM_VALUE.C_MMCM_COMPENSATION'))!="INTERNAL"))) and ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING'))="DIFF") and ((spirit:decode(id('MODELPARAM_VALUE.C_MMCM_COMPENSATION'))!="INTERNAL"))))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out5_clr</spirit:name> + <spirit:name>clkfb_out_p</spirit:name> <spirit:wire> - <spirit:direction>in</spirit:direction> + <spirit:direction>out</spirit:direction> <spirit:wireTypeDefs> <spirit:wireTypeDef> <spirit:typeName>std_logic</spirit:typeName> @@ -2394,20 +2229,17 @@ <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> </spirit:wire> <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out5_clr" xilinx:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT5_DRIVES'))="BUFR") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT5_USED'))=1))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clkfb_out_p" xilinx:dependency="((((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and ((spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO") or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) or ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP")) and ((spirit:decode(id('MODELPARAM_VALUE.C_MMCM_COMPENSATION'))!="INTERNAL"))) and ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING'))="DIFF") and ((spirit:decode(id('MODELPARAM_VALUE.C_MMCM_COMPENSATION'))!="INTERNAL"))))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out6</spirit:name> + <spirit:name>clkfb_out_n</spirit:name> <spirit:wire> <spirit:direction>out</spirit:direction> <spirit:wireTypeDefs> @@ -2421,13 +2253,13 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out6" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT6_USED'))=1)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clkfb_out_n" xilinx:dependency="((((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and ((spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO") or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) or ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP")) and ((spirit:decode(id('MODELPARAM_VALUE.C_MMCM_COMPENSATION'))!="INTERNAL"))) and ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING'))="DIFF") and ((spirit:decode(id('MODELPARAM_VALUE.C_MMCM_COMPENSATION'))!="INTERNAL"))))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out6_ce</spirit:name> + <spirit:name>reset</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> @@ -2444,13 +2276,13 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out6_ce" xilinx:dependency="(((spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT6_DRIVES'))="BUFGCE") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT6_DRIVES'))="BUFHCE") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT6_DRIVES'))="BUFR")) and (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT6_USED'))=1)) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_SAFE_CLOCK_STARTUP'))=0)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.reset" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_RESET'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_RESET_LOW'))=0) and (not spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION')))">true</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out6_clr</spirit:name> + <spirit:name>resetn</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> @@ -2467,15 +2299,15 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out6_clr" xilinx:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT6_DRIVES'))="BUFR") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT6_USED'))=1))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.resetn" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_RESET'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_RESET_LOW'))=1) and (not spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION')))">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out7</spirit:name> + <spirit:name>ref_clk</spirit:name> <spirit:wire> - <spirit:direction>out</spirit:direction> + <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> <spirit:wireTypeDef> <spirit:typeName>std_logic</spirit:typeName> @@ -2483,22 +2315,29 @@ <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> </spirit:wireTypeDefs> + <spirit:driver> + <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> + </spirit:driver> </spirit:wire> <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out7" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT7_USED'))=1)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.ref_clk" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_ENABLE_CLOCK_MONITOR'))=1)">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out7_ce</spirit:name> + <spirit:name>clk_stop</spirit:name> <spirit:wire> - <spirit:direction>in</spirit:direction> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long">3</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> <spirit:wireTypeDefs> <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> + <spirit:typeName>std_logic_vector</spirit:typeName> <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> @@ -2510,18 +2349,22 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out7_ce" xilinx:dependency="(((spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT7_DRIVES'))="BUFGCE") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT7_DRIVES'))="BUFHCE") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT7_DRIVES'))="BUFR")) and (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT7_USED'))=1)) and (spirit:decode(id('MODELPARAM_VALUE.C_USE_SAFE_CLOCK_STARTUP'))=0)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_stop" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_ENABLE_CLOCK_MONITOR'))=1)">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clk_out7_clr</spirit:name> + <spirit:name>clk_glitch</spirit:name> <spirit:wire> - <spirit:direction>in</spirit:direction> + <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long">3</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> <spirit:wireTypeDefs> <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> + <spirit:typeName>std_logic_vector</spirit:typeName> <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> @@ -2533,13 +2376,13 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_out7_clr" xilinx:dependency="((spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT7_DRIVES'))="BUFR") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKOUT7_USED'))=1))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_glitch" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_ENABLE_CLOCK_MONITOR'))=1)">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clkfb_out</spirit:name> + <spirit:name>interrupt</spirit:name> <spirit:wire> <spirit:direction>out</spirit:direction> <spirit:wireTypeDefs> @@ -2549,39 +2392,49 @@ <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> </spirit:wireTypeDefs> + <spirit:driver> + <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> + </spirit:driver> </spirit:wire> <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clkfb_out" xilinx:dependency="((((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and ((spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO") or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) or ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) and ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))!=1) or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO_OFFCHIP") or (spirit:decode(id('MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING'))!="DIFF")))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.interrupt" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_ENABLE_CLOCK_MONITOR'))=1)">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clkfb_out_p</spirit:name> + <spirit:name>clk_oor</spirit:name> <spirit:wire> <spirit:direction>out</spirit:direction> + <spirit:vector> + <spirit:left spirit:format="long">3</spirit:left> + <spirit:right spirit:format="long">0</spirit:right> + </spirit:vector> <spirit:wireTypeDefs> <spirit:wireTypeDef> - <spirit:typeName>std_logic</spirit:typeName> + <spirit:typeName>std_logic_vector</spirit:typeName> <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> </spirit:wireTypeDefs> + <spirit:driver> + <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> + </spirit:driver> </spirit:wire> <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clkfb_out_p" xilinx:dependency="((((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and ((spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO") or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) or ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) and ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING'))="DIFF")))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clk_oor" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_ENABLE_CLOCK_MONITOR'))=1)">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clkfb_out_n</spirit:name> + <spirit:name>user_clk0</spirit:name> <spirit:wire> - <spirit:direction>out</spirit:direction> + <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> <spirit:wireTypeDef> <spirit:typeName>std_logic</spirit:typeName> @@ -2589,17 +2442,20 @@ <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> </spirit:wireTypeDefs> + <spirit:driver> + <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> + </spirit:driver> </spirit:wire> <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clkfb_out_n" xilinx:dependency="((((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and ((spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))!="FDBK_AUTO") or (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) or ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP"))) and ((spirit:decode(id('MODELPARAM_VALUE.C_USE_PHASE_ALIGNMENT'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_FEEDBACK_SOURCE'))="FDBK_AUTO_OFFCHIP") and (spirit:decode(id('MODELPARAM_VALUE.C_CLKFB_IN_SIGNALING'))="DIFF")))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.user_clk0" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_ENABLE_CLOCK_MONITOR'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_ENABLE_USER_CLOCK0'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_Enable_PLL0'))=0)">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>reset</spirit:name> + <spirit:name>user_clk1</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> @@ -2616,13 +2472,13 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.reset" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_RESET'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_RESET_LOW'))=0) and (not spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION')))">true</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.user_clk1" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_ENABLE_CLOCK_MONITOR'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_ENABLE_USER_CLOCK1'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_Enable_PLL1'))=0)">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>resetn</spirit:name> + <spirit:name>user_clk2</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> @@ -2639,13 +2495,13 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.resetn" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_RESET'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_RESET_LOW'))=1) and (not spirit:decode(id('MODELPARAM_VALUE.C_INTERFACE_SELECTION')))">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.user_clk2" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_ENABLE_CLOCK_MONITOR'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_ENABLE_USER_CLOCK2'))=1)">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>power_down</spirit:name> + <spirit:name>user_clk3</spirit:name> <spirit:wire> <spirit:direction>in</spirit:direction> <spirit:wireTypeDefs> @@ -2662,13 +2518,26 @@ <spirit:vendorExtensions> <xilinx:portInfo> <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.power_down" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_POWER_DOWN'))=1)">false</xilinx:isEnabled> + <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.user_clk3" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_ENABLE_CLOCK_MONITOR'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_ENABLE_USER_CLOCK3'))=1)">false</xilinx:isEnabled> </xilinx:enablement> </xilinx:portInfo> </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>input_clk_stopped</spirit:name> + <spirit:name>clk_in1</spirit:name> + <spirit:wire> + <spirit:direction>in</spirit:direction> + <spirit:wireTypeDefs> + <spirit:wireTypeDef> + <spirit:typeName>std_logic</spirit:typeName> + <spirit:viewNameRef>xilinx_anylanguagesynthesis</spirit:viewNameRef> + <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> + </spirit:wireTypeDef> + </spirit:wireTypeDefs> + </spirit:wire> + </spirit:port> + <spirit:port> + <spirit:name>clk_out1</spirit:name> <spirit:wire> <spirit:direction>out</spirit:direction> <spirit:wireTypeDefs> @@ -2679,16 +2548,9 @@ </spirit:wireTypeDef> </spirit:wireTypeDefs> </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.input_clk_stopped" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_INCLK_STOPPED'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_PRIMITIVE'))="MMCM")">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>clkfb_stopped</spirit:name> + <spirit:name>clk_out2</spirit:name> <spirit:wire> <spirit:direction>out</spirit:direction> <spirit:wireTypeDefs> @@ -2699,16 +2561,9 @@ </spirit:wireTypeDef> </spirit:wireTypeDefs> </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.clkfb_stopped" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_CLKFB_STOPPED'))=1) and (spirit:decode(id('MODELPARAM_VALUE.C_PRIMITIVE'))="MMCM")">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>locked</spirit:name> + <spirit:name>clk_out3</spirit:name> <spirit:wire> <spirit:direction>out</spirit:direction> <spirit:wireTypeDefs> @@ -2719,16 +2574,9 @@ </spirit:wireTypeDef> </spirit:wireTypeDefs> </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.locked" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_USE_LOCKED'))=1)">true</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>cddcdone</spirit:name> + <spirit:name>clk_out4</spirit:name> <spirit:wire> <spirit:direction>out</spirit:direction> <spirit:wireTypeDefs> @@ -2739,18 +2587,11 @@ </spirit:wireTypeDef> </spirit:wireTypeDefs> </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.cddcdone" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_HAS_CDDC'))=1)">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> </spirit:port> <spirit:port> - <spirit:name>cddcreq</spirit:name> + <spirit:name>locked</spirit:name> <spirit:wire> - <spirit:direction>in</spirit:direction> + <spirit:direction>out</spirit:direction> <spirit:wireTypeDefs> <spirit:wireTypeDef> <spirit:typeName>std_logic</spirit:typeName> @@ -2758,17 +2599,7 @@ <spirit:viewNameRef>xilinx_anylanguagebehavioralsimulation</spirit:viewNameRef> </spirit:wireTypeDef> </spirit:wireTypeDefs> - <spirit:driver> - <spirit:defaultValue spirit:format="long">0</spirit:defaultValue> - </spirit:driver> </spirit:wire> - <spirit:vendorExtensions> - <xilinx:portInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PORT_ENABLEMENT.cddcreq" xilinx:dependency="(spirit:decode(id('MODELPARAM_VALUE.C_HAS_CDDC'))=1)">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:portInfo> - </spirit:vendorExtensions> </spirit:port> </spirit:ports> <spirit:modelParameters> @@ -2776,6 +2607,62 @@ <spirit:name>C_CLKOUT2_USED</spirit:name> <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT2_USED" spirit:order="194">1</spirit:value> </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:name>C_USER_CLK_FREQ0</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_USER_CLK_FREQ0" spirit:order="1194">100.0</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="string"> + <spirit:name>C_AUTO_PRIMITIVE</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_AUTO_PRIMITIVE" spirit:order="1195">MMCM</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:name>C_USER_CLK_FREQ1</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_USER_CLK_FREQ1" spirit:order="1195">100.0</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:name>C_USER_CLK_FREQ2</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_USER_CLK_FREQ2" spirit:order="1196">100.0</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:name>C_USER_CLK_FREQ3</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_USER_CLK_FREQ3" spirit:order="1197">100.0</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:name>C_ENABLE_CLOCK_MONITOR</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_ENABLE_CLOCK_MONITOR" spirit:order="1200">0</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:name>C_ENABLE_USER_CLOCK0</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_ENABLE_USER_CLOCK0" spirit:order="1201">0</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:name>C_ENABLE_USER_CLOCK1</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_ENABLE_USER_CLOCK1" spirit:order="1202">0</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:name>C_ENABLE_USER_CLOCK2</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_ENABLE_USER_CLOCK2" spirit:order="1203">0</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:name>C_ENABLE_USER_CLOCK3</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_ENABLE_USER_CLOCK3" spirit:order="1204">0</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:name>C_Enable_PLL0</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_Enable_PLL0" spirit:order="1205">0</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:name>C_Enable_PLL1</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_Enable_PLL1" spirit:order="1206">0</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:name>C_REF_CLK_FREQ</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_REF_CLK_FREQ" spirit:order="1209">100.0</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:name>C_PRECISION</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_PRECISION" spirit:order="1209">1</spirit:value> + </spirit:modelParameter> <spirit:modelParameter spirit:dataType="INTEGER"> <spirit:name>C_CLKOUT3_USED</spirit:name> <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT3_USED" spirit:order="195">1</spirit:value> @@ -2856,6 +2743,10 @@ <spirit:name>C_USE_DYN_PHASE_SHIFT</spirit:name> <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_USE_DYN_PHASE_SHIFT" spirit:order="213">0</spirit:value> </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:name>C_OPTIMIZE_CLOCKING_STRUCTURE_EN</spirit:name> + <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_OPTIMIZE_CLOCKING_STRUCTURE_EN" spirit:order="214">0</spirit:value> + </spirit:modelParameter> <spirit:modelParameter spirit:dataType="INTEGER"> <spirit:name>C_USE_INCLK_SWITCHOVER</spirit:name> <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_USE_INCLK_SWITCHOVER" spirit:order="214">0</spirit:value> @@ -2908,6 +2799,10 @@ <spirit:name>C_PRIM_SOURCE</spirit:name> <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_PRIM_SOURCE" spirit:order="224">Single_ended_clock_capable_pin</spirit:value> </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_PHASESHIFT_MODE</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_PHASESHIFT_MODE" spirit:order="2240">WAVEFORM</spirit:value> + </spirit:modelParameter> <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_SECONDARY_SOURCE</spirit:name> <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_SECONDARY_SOURCE" spirit:order="225">Single_ended_clock_capable_pin</spirit:value> @@ -3003,19 +2898,19 @@ </spirit:modelParameter> <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_OUTCLK_SUM_ROW1</spirit:name> - <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW1" spirit:order="247">CLK_OUT1___100.000______0.000______50.0______151.366____132.063</spirit:value> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW1" spirit:order="247">clk_out1__100.00000______0.000______50.0______151.366____132.063</spirit:value> </spirit:modelParameter> <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_OUTCLK_SUM_ROW2</spirit:name> - <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW2" spirit:order="248">CLK_OUT2___200.000______0.000______50.0______132.221____132.063</spirit:value> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW2" spirit:order="248">clk_out2__200.00000______0.000______50.0______132.221____132.063</spirit:value> </spirit:modelParameter> <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_OUTCLK_SUM_ROW3</spirit:name> - <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW3" spirit:order="249">CLK_OUT3____12.000______0.000______50.0______231.952____132.063</spirit:value> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW3" spirit:order="249">clk_out3__12.00000______0.000______50.0______231.952____132.063</spirit:value> </spirit:modelParameter> <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_OUTCLK_SUM_ROW4</spirit:name> - <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW4" spirit:order="250">CLK_OUT4____50.000______0.000______50.0______174.353____132.063</spirit:value> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_OUTCLK_SUM_ROW4" spirit:order="250">clk_out4__50.00000______0.000______50.0______174.353____132.063</spirit:value> </spirit:modelParameter> <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_OUTCLK_SUM_ROW5</spirit:name> @@ -3115,19 +3010,19 @@ </spirit:modelParameter> <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_CLKOUT1_OUT_FREQ</spirit:name> - <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT1_OUT_FREQ" spirit:order="275">100.000</spirit:value> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT1_OUT_FREQ" spirit:order="275">100.00000</spirit:value> </spirit:modelParameter> <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_CLKOUT2_OUT_FREQ</spirit:name> - <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT2_OUT_FREQ" spirit:order="276">200.000</spirit:value> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT2_OUT_FREQ" spirit:order="276">200.00000</spirit:value> </spirit:modelParameter> <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_CLKOUT3_OUT_FREQ</spirit:name> - <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT3_OUT_FREQ" spirit:order="277">12.000</spirit:value> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT3_OUT_FREQ" spirit:order="277">12.00000</spirit:value> </spirit:modelParameter> <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_CLKOUT4_OUT_FREQ</spirit:name> - <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT4_OUT_FREQ" spirit:order="278">50.000</spirit:value> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT4_OUT_FREQ" spirit:order="278">50.00000</spirit:value> </spirit:modelParameter> <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_CLKOUT5_OUT_FREQ</spirit:name> @@ -3279,33 +3174,33 @@ </spirit:modelParameter> <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_MMCM_STARTUP_WAIT</spirit:name> - <spirit:value spirit:format="bool" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCM_STARTUP_WAIT" spirit:order="307">FALSE</spirit:value> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCM_STARTUP_WAIT" spirit:order="307">FALSE</spirit:value> </spirit:modelParameter> <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_MMCM_CLKOUT0_DIVIDE_F</spirit:name> <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCM_CLKOUT0_DIVIDE_F" spirit:order="308">6.000</spirit:value> </spirit:modelParameter> - <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_MMCM_CLKOUT1_DIVIDE</spirit:name> <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCM_CLKOUT1_DIVIDE" spirit:order="309">3</spirit:value> </spirit:modelParameter> - <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_MMCM_CLKOUT2_DIVIDE</spirit:name> <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCM_CLKOUT2_DIVIDE" spirit:order="310">50</spirit:value> </spirit:modelParameter> - <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_MMCM_CLKOUT3_DIVIDE</spirit:name> <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCM_CLKOUT3_DIVIDE" spirit:order="311">12</spirit:value> </spirit:modelParameter> - <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_MMCM_CLKOUT4_DIVIDE</spirit:name> <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCM_CLKOUT4_DIVIDE" spirit:order="312">1</spirit:value> </spirit:modelParameter> - <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_MMCM_CLKOUT5_DIVIDE</spirit:name> <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCM_CLKOUT5_DIVIDE" spirit:order="313">1</spirit:value> </spirit:modelParameter> - <spirit:modelParameter spirit:dataType="INTEGER"> + <spirit:modelParameter spirit:dataType="STRING"> <spirit:name>C_MMCM_CLKOUT6_DIVIDE</spirit:name> <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCM_CLKOUT6_DIVIDE" spirit:order="314">1</spirit:value> </spirit:modelParameter> @@ -3715,9 +3610,274 @@ <spirit:displayName>C S Axi Data Width</spirit:displayName> <spirit:value spirit:format="long" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_S_AXI_DATA_WIDTH" spirit:order="216" spirit:minimum="32" spirit:maximum="128" spirit:rangeType="long">32</spirit:value> </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_POWER_REG</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_POWER_REG" spirit:order="409">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT0_1</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT0_1" spirit:order="410">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT0_2</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT0_2" spirit:order="411">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT1_1</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT1_1" spirit:order="410">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT1_2</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT1_2" spirit:order="410">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT2_1</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT2_1" spirit:order="411">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT2_2</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT2_2" spirit:order="411">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT3_1</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT3_1" spirit:order="410">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT3_2</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT3_2" spirit:order="411">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT4_1</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT4_1" spirit:order="410">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT4_2</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT4_2" spirit:order="411">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT5_1</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT5_1" spirit:order="410">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT5_2</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT5_2" spirit:order="411">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT6_1</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT6_1" spirit:order="410">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT6_2</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT6_2" spirit:order="411">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKFBOUT_1</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKFBOUT_1" spirit:order="410">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKFBOUT_2</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKFBOUT_2" spirit:order="411">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_DIVCLK</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_DIVCLK" spirit:order="411">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_LOCK_1</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_LOCK_1" spirit:order="411">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_LOCK_2</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_LOCK_2" spirit:order="411">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_LOCK_3</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_LOCK_3" spirit:order="411">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_FILTER_1</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_FILTER_1" spirit:order="411">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_FILTER_2</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_FILTER_2" spirit:order="411">0000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_DIVIDE1_AUTO</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_DIVIDE1_AUTO" spirit:order="411">1</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_DIVIDE2_AUTO</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_DIVIDE2_AUTO" spirit:order="411">0.5</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_DIVIDE3_AUTO</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_DIVIDE3_AUTO" spirit:order="411">8.333333333333334</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_DIVIDE4_AUTO</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_DIVIDE4_AUTO" spirit:order="411">2.0</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_DIVIDE5_AUTO</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_DIVIDE5_AUTO" spirit:order="411">0.16666666666666666</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_DIVIDE6_AUTO</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_DIVIDE6_AUTO" spirit:order="411">0.16666666666666666</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_DIVIDE7_AUTO</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_DIVIDE7_AUTO" spirit:order="411">0.16666666666666666</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_PLLBUFGCEDIV</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_PLLBUFGCEDIV" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_MMCMBUFGCEDIV</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCMBUFGCEDIV" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_PLLBUFGCEDIV1</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_PLLBUFGCEDIV1" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_PLLBUFGCEDIV2</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_PLLBUFGCEDIV2" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_PLLBUFGCEDIV3</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_PLLBUFGCEDIV3" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_PLLBUFGCEDIV4</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_PLLBUFGCEDIV4" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_MMCMBUFGCEDIV1</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCMBUFGCEDIV1" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_MMCMBUFGCEDIV2</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCMBUFGCEDIV2" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_MMCMBUFGCEDIV3</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCMBUFGCEDIV3" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_MMCMBUFGCEDIV4</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCMBUFGCEDIV4" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_MMCMBUFGCEDIV5</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCMBUFGCEDIV5" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_MMCMBUFGCEDIV6</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCMBUFGCEDIV6" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_MMCMBUFGCEDIV7</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_MMCMBUFGCEDIV7" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT1_MATCHED_ROUTING</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT1_MATCHED_ROUTING" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT2_MATCHED_ROUTING</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT2_MATCHED_ROUTING" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT3_MATCHED_ROUTING</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT3_MATCHED_ROUTING" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT4_MATCHED_ROUTING</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT4_MATCHED_ROUTING" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT5_MATCHED_ROUTING</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT5_MATCHED_ROUTING" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT6_MATCHED_ROUTING</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT6_MATCHED_ROUTING" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT7_MATCHED_ROUTING</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT7_MATCHED_ROUTING" spirit:order="411">false</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT0_ACTUAL_FREQ</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT0_ACTUAL_FREQ" spirit:order="711">100.00000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT1_ACTUAL_FREQ</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT1_ACTUAL_FREQ" spirit:order="712">200.00000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT2_ACTUAL_FREQ</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT2_ACTUAL_FREQ" spirit:order="713">12.00000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT3_ACTUAL_FREQ</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT3_ACTUAL_FREQ" spirit:order="714">50.00000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT4_ACTUAL_FREQ</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT4_ACTUAL_FREQ" spirit:order="715">100.000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT5_ACTUAL_FREQ</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT5_ACTUAL_FREQ" spirit:order="716">100.000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="STRING"> + <spirit:name>C_CLKOUT6_ACTUAL_FREQ</spirit:name> + <spirit:value spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_CLKOUT6_ACTUAL_FREQ" spirit:order="717">100.000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="REAL"> + <spirit:name>C_M_MAX</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_M_MAX" spirit:order="403">64.000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="REAL"> + <spirit:name>C_M_MIN</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_M_MIN" spirit:order="403">2.000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="REAL"> + <spirit:name>C_D_MAX</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_D_MAX" spirit:order="403">80.000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="REAL"> + <spirit:name>C_D_MIN</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_D_MIN" spirit:order="403">1.000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="REAL"> + <spirit:name>C_O_MAX</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_O_MAX" spirit:order="403">128.000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="REAL"> + <spirit:name>C_O_MIN</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_O_MIN" spirit:order="403">1.000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="REAL"> + <spirit:name>C_VCO_MIN</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_VCO_MIN" spirit:order="403">600.000</spirit:value> + </spirit:modelParameter> + <spirit:modelParameter spirit:dataType="REAL"> + <spirit:name>C_VCO_MAX</spirit:name> + <spirit:value spirit:format="float" spirit:resolve="generated" spirit:id="MODELPARAM_VALUE.C_VCO_MAX" spirit:order="403">1200.000</spirit:value> + </spirit:modelParameter> </spirit:modelParameters> </spirit:model> <spirit:choices> + <spirit:choice> + <spirit:name>choice_list_1d3de01d</spirit:name> + <spirit:enumeration>WAVEFORM</spirit:enumeration> + <spirit:enumeration>LATENCY</spirit:enumeration> + </spirit:choice> <spirit:choice> <spirit:name>choice_list_876bfc32</spirit:name> <spirit:enumeration>UI</spirit:enumeration> @@ -3769,6 +3929,12 @@ <spirit:enumeration spirit:text="User-Controlled On-Chip">FDBK_ONCHIP</spirit:enumeration> <spirit:enumeration spirit:text="User-Controlled Off-Chip">FDBK_OFFCHIP</spirit:enumeration> </spirit:choice> + <spirit:choice> + <spirit:name>choice_pairs_340369e0</spirit:name> + <spirit:enumeration spirit:text="Custom">Custom</spirit:enumeration> + <spirit:enumeration spirit:text="sys clock">sys_clock</spirit:enumeration> + <spirit:enumeration spirit:text="sys diff clock">sys_diff_clock</spirit:enumeration> + </spirit:choice> <spirit:choice> <spirit:name>choice_pairs_3c2d3ec7</spirit:name> <spirit:enumeration spirit:text="Single-ended">SINGLE</spirit:enumeration> @@ -3789,6 +3955,12 @@ <spirit:enumeration spirit:text="BUFHCE">BUFHCE</spirit:enumeration> <spirit:enumeration spirit:text="No buffer">No_buffer</spirit:enumeration> </spirit:choice> + <spirit:choice> + <spirit:name>choice_pairs_77d3d587</spirit:name> + <spirit:enumeration spirit:text="MMCM">MMCM</spirit:enumeration> + <spirit:enumeration spirit:text="PLL">PLL</spirit:enumeration> + <spirit:enumeration spirit:text="BUFGCE DIV">BUFGCE_DIV</spirit:enumeration> + </spirit:choice> <spirit:choice> <spirit:name>choice_pairs_8b28f1f7</spirit:name> <spirit:enumeration spirit:text="AXI4Lite">Enable_AXI</spirit:enumeration> @@ -3835,10 +4007,59 @@ </spirit:choices> <spirit:fileSets> <spirit:fileSet> - <spirit:name>xilinx_vhdlinstantiationtemplate_view_fileset</spirit:name> + <spirit:name>xilinx_anylanguagebehavioralsimulation_view_fileset</spirit:name> <spirit:file> - <spirit:name>clk_wiz_0.vho</spirit:name> - <spirit:userFileType>vhdlTemplate</spirit:userFileType> + <spirit:name>mmcm_pll_drp_func_7s_mmcm.vh</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + <spirit:userFileType>USED_IN_ipstatic</spirit:userFileType> + <spirit:isIncludeFile>true</spirit:isIncludeFile> + <spirit:logicalName>clk_wiz_v6_0_14</spirit:logicalName> + </spirit:file> + <spirit:file> + <spirit:name>mmcm_pll_drp_func_7s_pll.vh</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + <spirit:userFileType>USED_IN_ipstatic</spirit:userFileType> + <spirit:isIncludeFile>true</spirit:isIncludeFile> + <spirit:logicalName>clk_wiz_v6_0_14</spirit:logicalName> + </spirit:file> + <spirit:file> + <spirit:name>mmcm_pll_drp_func_us_mmcm.vh</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + <spirit:userFileType>USED_IN_ipstatic</spirit:userFileType> + <spirit:isIncludeFile>true</spirit:isIncludeFile> + <spirit:logicalName>clk_wiz_v6_0_14</spirit:logicalName> + </spirit:file> + <spirit:file> + <spirit:name>mmcm_pll_drp_func_us_pll.vh</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + <spirit:userFileType>USED_IN_ipstatic</spirit:userFileType> + <spirit:isIncludeFile>true</spirit:isIncludeFile> + <spirit:logicalName>clk_wiz_v6_0_14</spirit:logicalName> + </spirit:file> + <spirit:file> + <spirit:name>mmcm_pll_drp_func_us_plus_pll.vh</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + <spirit:userFileType>USED_IN_ipstatic</spirit:userFileType> + <spirit:isIncludeFile>true</spirit:isIncludeFile> + <spirit:logicalName>clk_wiz_v6_0_14</spirit:logicalName> + </spirit:file> + <spirit:file> + <spirit:name>mmcm_pll_drp_func_us_plus_mmcm.vh</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + <spirit:userFileType>USED_IN_ipstatic</spirit:userFileType> + <spirit:isIncludeFile>true</spirit:isIncludeFile> + <spirit:logicalName>clk_wiz_v6_0_14</spirit:logicalName> + </spirit:file> + <spirit:file> + <spirit:name>clk_wiz_0_clk_wiz.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + </spirit:file> + </spirit:fileSet> + <spirit:fileSet> + <spirit:name>xilinx_anylanguagesimulationwrapper_view_fileset</spirit:name> + <spirit:file> + <spirit:name>clk_wiz_0.v</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> </spirit:file> </spirit:fileSet> <spirit:fileSet> @@ -3859,26 +4080,48 @@ <spirit:userFileType>USED_IN_synthesis</spirit:userFileType> </spirit:file> <spirit:file> - <spirit:name>clk_wiz_0_clk_wiz.v</spirit:name> + <spirit:name>mmcm_pll_drp_func_7s_mmcm.vh</spirit:name> <spirit:fileType>verilogSource</spirit:fileType> + <spirit:isIncludeFile>true</spirit:isIncludeFile> + <spirit:logicalName>clk_wiz_v6_0_14</spirit:logicalName> </spirit:file> - </spirit:fileSet> - <spirit:fileSet> - <spirit:name>xilinx_anylanguagesynthesiswrapper_view_fileset</spirit:name> <spirit:file> - <spirit:name>clk_wiz_0.v</spirit:name> + <spirit:name>mmcm_pll_drp_func_7s_pll.vh</spirit:name> <spirit:fileType>verilogSource</spirit:fileType> + <spirit:isIncludeFile>true</spirit:isIncludeFile> + <spirit:logicalName>clk_wiz_v6_0_14</spirit:logicalName> + </spirit:file> + <spirit:file> + <spirit:name>mmcm_pll_drp_func_us_mmcm.vh</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + <spirit:isIncludeFile>true</spirit:isIncludeFile> + <spirit:logicalName>clk_wiz_v6_0_14</spirit:logicalName> + </spirit:file> + <spirit:file> + <spirit:name>mmcm_pll_drp_func_us_pll.vh</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + <spirit:isIncludeFile>true</spirit:isIncludeFile> + <spirit:logicalName>clk_wiz_v6_0_14</spirit:logicalName> + </spirit:file> + <spirit:file> + <spirit:name>mmcm_pll_drp_func_us_plus_pll.vh</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + <spirit:isIncludeFile>true</spirit:isIncludeFile> + <spirit:logicalName>clk_wiz_v6_0_14</spirit:logicalName> + </spirit:file> + <spirit:file> + <spirit:name>mmcm_pll_drp_func_us_plus_mmcm.vh</spirit:name> + <spirit:fileType>verilogSource</spirit:fileType> + <spirit:isIncludeFile>true</spirit:isIncludeFile> + <spirit:logicalName>clk_wiz_v6_0_14</spirit:logicalName> </spirit:file> - </spirit:fileSet> - <spirit:fileSet> - <spirit:name>xilinx_anylanguagebehavioralsimulation_view_fileset</spirit:name> <spirit:file> <spirit:name>clk_wiz_0_clk_wiz.v</spirit:name> <spirit:fileType>verilogSource</spirit:fileType> </spirit:file> </spirit:fileSet> <spirit:fileSet> - <spirit:name>xilinx_anylanguagesimulationwrapper_view_fileset</spirit:name> + <spirit:name>xilinx_anylanguagesynthesiswrapper_view_fileset</spirit:name> <spirit:file> <spirit:name>clk_wiz_0.v</spirit:name> <spirit:fileType>verilogSource</spirit:fileType> @@ -3897,44 +4140,15 @@ <spirit:fileSet> <spirit:name>xilinx_versioninformation_view_fileset</spirit:name> <spirit:file> - <spirit:name>doc/clk_wiz_v5_2_changelog.txt</spirit:name> + <spirit:name>doc/clk_wiz_v6_0_changelog.txt</spirit:name> <spirit:userFileType>text</spirit:userFileType> </spirit:file> </spirit:fileSet> <spirit:fileSet> - <spirit:name>xilinx_externalfiles_view_fileset</spirit:name> - <spirit:file> - <spirit:name>clk_wiz_0.dcp</spirit:name> - <spirit:userFileType>dcp</spirit:userFileType> - <spirit:userFileType>USED_IN_implementation</spirit:userFileType> - <spirit:userFileType>USED_IN_synthesis</spirit:userFileType> - <spirit:logicalName>xil_defaultlib</spirit:logicalName> - </spirit:file> - <spirit:file> - <spirit:name>clk_wiz_0_stub.v</spirit:name> - <spirit:fileType>verilogSource</spirit:fileType> - <spirit:userFileType>USED_IN_synth_blackbox_stub</spirit:userFileType> - <spirit:logicalName>xil_defaultlib</spirit:logicalName> - </spirit:file> - <spirit:file> - <spirit:name>clk_wiz_0_stub.vhdl</spirit:name> - <spirit:fileType>vhdlSource</spirit:fileType> - <spirit:userFileType>USED_IN_synth_blackbox_stub</spirit:userFileType> - <spirit:logicalName>xil_defaultlib</spirit:logicalName> - </spirit:file> - <spirit:file> - <spirit:name>clk_wiz_0_sim_netlist.v</spirit:name> - <spirit:fileType>verilogSource</spirit:fileType> - <spirit:userFileType>USED_IN_simulation</spirit:userFileType> - <spirit:userFileType>USED_IN_single_language</spirit:userFileType> - <spirit:logicalName>xil_defaultlib</spirit:logicalName> - </spirit:file> + <spirit:name>xilinx_vhdlinstantiationtemplate_view_fileset</spirit:name> <spirit:file> - <spirit:name>clk_wiz_0_sim_netlist.vhdl</spirit:name> - <spirit:fileType>vhdlSource</spirit:fileType> - <spirit:userFileType>USED_IN_simulation</spirit:userFileType> - <spirit:userFileType>USED_IN_single_language</spirit:userFileType> - <spirit:logicalName>xil_defaultlib</spirit:logicalName> + <spirit:name>clk_wiz_0.vho</spirit:name> + <spirit:userFileType>vhdlTemplate</spirit:userFileType> </spirit:file> </spirit:fileSet> </spirit:fileSets> @@ -3944,6 +4158,76 @@ <spirit:name>Component_Name</spirit:name> <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.Component_Name" spirit:order="1">clk_wiz_0</spirit:value> </spirit:parameter> + <spirit:parameter> + <spirit:name>USER_CLK_FREQ0</spirit:name> + <spirit:displayName>User Frequency(MHz)</spirit:displayName> + <spirit:value spirit:format="float" spirit:resolve="user" spirit:id="PARAM_VALUE.USER_CLK_FREQ0" spirit:order="15200" spirit:minimum="1" spirit:maximum="300">100.0</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>USER_CLK_FREQ1</spirit:name> + <spirit:displayName>User Frequency(MHz)</spirit:displayName> + <spirit:value spirit:format="float" spirit:resolve="user" spirit:id="PARAM_VALUE.USER_CLK_FREQ1" spirit:order="15200" spirit:minimum="1" spirit:maximum="300">100.0</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>USER_CLK_FREQ2</spirit:name> + <spirit:displayName>User Frequency(MHz)</spirit:displayName> + <spirit:value spirit:format="float" spirit:resolve="user" spirit:id="PARAM_VALUE.USER_CLK_FREQ2" spirit:order="15200" spirit:minimum="1" spirit:maximum="300">100.0</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>USER_CLK_FREQ3</spirit:name> + <spirit:displayName>User Frequency(MHz)</spirit:displayName> + <spirit:value spirit:format="float" spirit:resolve="user" spirit:id="PARAM_VALUE.USER_CLK_FREQ3" spirit:order="15200" spirit:minimum="1" spirit:maximum="300">100.0</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ENABLE_CLOCK_MONITOR</spirit:name> + <spirit:displayName>Enable Clock Monitoring</spirit:displayName> + <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.ENABLE_CLOCK_MONITOR" spirit:order="10.1">false</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>OPTIMIZE_CLOCKING_STRUCTURE_EN</spirit:name> + <spirit:displayName>Optimize Clocking Structure</spirit:displayName> + <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.OPTIMIZE_CLOCKING_STRUCTURE_EN" spirit:order="10.1">false</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ENABLE_USER_CLOCK0</spirit:name> + <spirit:displayName>User Clock</spirit:displayName> + <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.ENABLE_USER_CLOCK0" spirit:order="1090">false</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ENABLE_USER_CLOCK1</spirit:name> + <spirit:displayName>User Clock</spirit:displayName> + <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.ENABLE_USER_CLOCK1" spirit:order="1090">false</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ENABLE_USER_CLOCK2</spirit:name> + <spirit:displayName>User Clock</spirit:displayName> + <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.ENABLE_USER_CLOCK2" spirit:order="1090">false</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>ENABLE_USER_CLOCK3</spirit:name> + <spirit:displayName>User Clock</spirit:displayName> + <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.ENABLE_USER_CLOCK3" spirit:order="1090">false</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>Enable_PLL0</spirit:name> + <spirit:displayName>User Clock</spirit:displayName> + <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.Enable_PLL0" spirit:order="1090">false</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>Enable_PLL1</spirit:name> + <spirit:displayName>User Clock</spirit:displayName> + <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.Enable_PLL1" spirit:order="1090">false</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>REF_CLK_FREQ</spirit:name> + <spirit:displayName>Reference Frequency(MHz)</spirit:displayName> + <spirit:value spirit:format="float" spirit:resolve="user" spirit:id="PARAM_VALUE.REF_CLK_FREQ" spirit:order="15300" spirit:minimum="1" spirit:maximum="300">100.0</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>PRECISION</spirit:name> + <spirit:displayName>Tolerance(MHz)</spirit:displayName> + <spirit:value spirit:format="float" spirit:resolve="user" spirit:id="PARAM_VALUE.PRECISION" spirit:order="15400" spirit:minimum="1" spirit:maximum="100">1</spirit:value> + </spirit:parameter> <spirit:parameter> <spirit:name>PRIMITIVE</spirit:name> <spirit:displayName>Primitive</spirit:displayName> @@ -3999,6 +4283,10 @@ <spirit:name>IN_FREQ_UNITS</spirit:name> <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.IN_FREQ_UNITS" spirit:choiceRef="choice_pairs_8eea9b32" spirit:order="15" spirit:configGroups="0 NoDisplay">Units_MHz</spirit:value> </spirit:parameter> + <spirit:parameter> + <spirit:name>PHASESHIFT_MODE</spirit:name> + <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.PHASESHIFT_MODE" spirit:choiceRef="choice_list_1d3de01d" spirit:order="116" spirit:configGroups="0 NoDisplay">WAVEFORM</spirit:value> + </spirit:parameter> <spirit:parameter> <spirit:name>IN_JITTER_UNITS</spirit:name> <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.IN_JITTER_UNITS" spirit:choiceRef="choice_pairs_c5ef7212" spirit:order="16" spirit:configGroups="0 NoDisplay">Units_UI</spirit:value> @@ -4283,6 +4571,34 @@ <spirit:name>USE_MIN_O_JITTER</spirit:name> <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.USE_MIN_O_JITTER" spirit:order="84" spirit:configGroups="0 NoDisplay">false</spirit:value> </spirit:parameter> + <spirit:parameter> + <spirit:name>CLKOUT1_MATCHED_ROUTING</spirit:name> + <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.CLKOUT1_MATCHED_ROUTING" spirit:order="984" spirit:configGroups="0 NoDisplay">false</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>CLKOUT2_MATCHED_ROUTING</spirit:name> + <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.CLKOUT2_MATCHED_ROUTING" spirit:order="985" spirit:configGroups="0 NoDisplay">false</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>CLKOUT3_MATCHED_ROUTING</spirit:name> + <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.CLKOUT3_MATCHED_ROUTING" spirit:order="986" spirit:configGroups="0 NoDisplay">false</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>CLKOUT4_MATCHED_ROUTING</spirit:name> + <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.CLKOUT4_MATCHED_ROUTING" spirit:order="987" spirit:configGroups="0 NoDisplay">false</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>CLKOUT5_MATCHED_ROUTING</spirit:name> + <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.CLKOUT5_MATCHED_ROUTING" spirit:order="988" spirit:configGroups="0 NoDisplay">false</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>CLKOUT6_MATCHED_ROUTING</spirit:name> + <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.CLKOUT6_MATCHED_ROUTING" spirit:order="989" spirit:configGroups="0 NoDisplay">false</spirit:value> + </spirit:parameter> + <spirit:parameter> + <spirit:name>CLKOUT7_MATCHED_ROUTING</spirit:name> + <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.CLKOUT7_MATCHED_ROUTING" spirit:order="990" spirit:configGroups="0 NoDisplay">false</spirit:value> + </spirit:parameter> <spirit:parameter> <spirit:name>PRIM_SOURCE</spirit:name> <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.PRIM_SOURCE" spirit:choiceRef="choice_pairs_11d71346" spirit:order="14.1" spirit:configGroups="0 NoDisplay">Single_ended_clock_capable_pin</spirit:value> @@ -4445,7 +4761,7 @@ </spirit:parameter> <spirit:parameter> <spirit:name>MMCM_DIVCLK_DIVIDE</spirit:name> - <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.MMCM_DIVCLK_DIVIDE" spirit:order="124" spirit:configGroups="0 NoDisplay" spirit:minimum="1" spirit:maximum="106" spirit:rangeType="long">1</spirit:value> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.MMCM_DIVCLK_DIVIDE" spirit:order="124" spirit:configGroups="0 NoDisplay">1</spirit:value> </spirit:parameter> <spirit:parameter> <spirit:name>MMCM_BANDWIDTH</spirit:name> @@ -4513,7 +4829,7 @@ </spirit:parameter> <spirit:parameter> <spirit:name>MMCM_CLKOUT1_DIVIDE</spirit:name> - <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.MMCM_CLKOUT1_DIVIDE" spirit:order="141" spirit:configGroups="0 NoDisplay" spirit:minimum="1" spirit:maximum="128" spirit:rangeType="long">3</spirit:value> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.MMCM_CLKOUT1_DIVIDE" spirit:order="141" spirit:configGroups="0 NoDisplay">3</spirit:value> </spirit:parameter> <spirit:parameter> <spirit:name>MMCM_CLKOUT1_DUTY_CYCLE</spirit:name> @@ -4529,7 +4845,7 @@ </spirit:parameter> <spirit:parameter> <spirit:name>MMCM_CLKOUT2_DIVIDE</spirit:name> - <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.MMCM_CLKOUT2_DIVIDE" spirit:order="145" spirit:configGroups="0 NoDisplay" spirit:minimum="1" spirit:maximum="128" spirit:rangeType="long">50</spirit:value> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.MMCM_CLKOUT2_DIVIDE" spirit:order="145" spirit:configGroups="0 NoDisplay">50</spirit:value> </spirit:parameter> <spirit:parameter> <spirit:name>MMCM_CLKOUT2_DUTY_CYCLE</spirit:name> @@ -4545,7 +4861,7 @@ </spirit:parameter> <spirit:parameter> <spirit:name>MMCM_CLKOUT3_DIVIDE</spirit:name> - <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.MMCM_CLKOUT3_DIVIDE" spirit:order="149" spirit:configGroups="0 NoDisplay" spirit:minimum="1" spirit:maximum="128" spirit:rangeType="long">12</spirit:value> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.MMCM_CLKOUT3_DIVIDE" spirit:order="149" spirit:configGroups="0 NoDisplay">12</spirit:value> </spirit:parameter> <spirit:parameter> <spirit:name>MMCM_CLKOUT3_DUTY_CYCLE</spirit:name> @@ -4561,7 +4877,7 @@ </spirit:parameter> <spirit:parameter> <spirit:name>MMCM_CLKOUT4_DIVIDE</spirit:name> - <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.MMCM_CLKOUT4_DIVIDE" spirit:order="153" spirit:configGroups="0 NoDisplay" spirit:minimum="1" spirit:maximum="128" spirit:rangeType="long">1</spirit:value> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.MMCM_CLKOUT4_DIVIDE" spirit:order="153" spirit:configGroups="0 NoDisplay">1</spirit:value> </spirit:parameter> <spirit:parameter> <spirit:name>MMCM_CLKOUT4_DUTY_CYCLE</spirit:name> @@ -4577,7 +4893,7 @@ </spirit:parameter> <spirit:parameter> <spirit:name>MMCM_CLKOUT5_DIVIDE</spirit:name> - <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.MMCM_CLKOUT5_DIVIDE" spirit:order="157" spirit:configGroups="0 NoDisplay" spirit:minimum="1" spirit:maximum="128" spirit:rangeType="long">1</spirit:value> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.MMCM_CLKOUT5_DIVIDE" spirit:order="157" spirit:configGroups="0 NoDisplay">1</spirit:value> </spirit:parameter> <spirit:parameter> <spirit:name>MMCM_CLKOUT5_DUTY_CYCLE</spirit:name> @@ -4593,7 +4909,7 @@ </spirit:parameter> <spirit:parameter> <spirit:name>MMCM_CLKOUT6_DIVIDE</spirit:name> - <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.MMCM_CLKOUT6_DIVIDE" spirit:order="161" spirit:configGroups="0 NoDisplay" spirit:minimum="1" spirit:maximum="128" spirit:rangeType="long">1</spirit:value> + <spirit:value spirit:format="long" spirit:resolve="user" spirit:id="PARAM_VALUE.MMCM_CLKOUT6_DIVIDE" spirit:order="161" spirit:configGroups="0 NoDisplay">1</spirit:value> </spirit:parameter> <spirit:parameter> <spirit:name>MMCM_CLKOUT6_DUTY_CYCLE</spirit:name> @@ -4767,11 +5083,11 @@ </spirit:parameter> <spirit:parameter> <spirit:name>CLK_IN1_BOARD_INTERFACE</spirit:name> - <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.CLK_IN1_BOARD_INTERFACE" spirit:choiceRef="choice_pairs_0920eb1b" spirit:order="13.8">Custom</spirit:value> + <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.CLK_IN1_BOARD_INTERFACE" spirit:choiceRef="choice_pairs_340369e0" spirit:order="13.8">Custom</spirit:value> </spirit:parameter> <spirit:parameter> <spirit:name>CLK_IN2_BOARD_INTERFACE</spirit:name> - <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.CLK_IN2_BOARD_INTERFACE" spirit:choiceRef="choice_pairs_0920eb1b" spirit:order="13.9">Custom</spirit:value> + <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.CLK_IN2_BOARD_INTERFACE" spirit:choiceRef="choice_pairs_340369e0" spirit:order="13.9">Custom</spirit:value> </spirit:parameter> <spirit:parameter> <spirit:name>DIFF_CLK_IN1_BOARD_INTERFACE</spirit:name> @@ -4781,6 +5097,10 @@ <spirit:name>DIFF_CLK_IN2_BOARD_INTERFACE</spirit:name> <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.DIFF_CLK_IN2_BOARD_INTERFACE" spirit:choiceRef="choice_pairs_0920eb1b" spirit:order="13.2">Custom</spirit:value> </spirit:parameter> + <spirit:parameter> + <spirit:name>AUTO_PRIMITIVE</spirit:name> + <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.AUTO_PRIMITIVE" spirit:choiceRef="choice_pairs_77d3d587" spirit:order="13212">MMCM</spirit:value> + </spirit:parameter> <spirit:parameter> <spirit:name>RESET_BOARD_INTERFACE</spirit:name> <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.RESET_BOARD_INTERFACE" spirit:choiceRef="choice_list_ac75ef1e" spirit:order="21.4">Custom</spirit:value> @@ -4877,42 +5197,66 @@ </spirit:parameter> <spirit:parameter> <spirit:name>INPUT_MODE</spirit:name> - <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.INPUT_MODE" spirit:choiceRef="choice_pairs_f669c2f5" spirit:order="14.4">frequency</spirit:value> + <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.INPUT_MODE" spirit:choiceRef="choice_pairs_f669c2f5" spirit:order="7.8">frequency</spirit:value> </spirit:parameter> <spirit:parameter> <spirit:name>INTERFACE_SELECTION</spirit:name> <spirit:value spirit:resolve="user" spirit:id="PARAM_VALUE.INTERFACE_SELECTION" spirit:choiceRef="choice_pairs_8b28f1f7" spirit:order="11.1">Enable_AXI</spirit:value> </spirit:parameter> + <spirit:parameter> + <spirit:name>AXI_DRP</spirit:name> + <spirit:displayName>Write DRP registers</spirit:displayName> + <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.AXI_DRP" spirit:order="11.12">false</spirit:value> + </spirit:parameter> <spirit:parameter> <spirit:name>PHASE_DUTY_CONFIG</spirit:name> <spirit:displayName>Phase Duty Cycle Config</spirit:displayName> <spirit:value spirit:format="bool" spirit:resolve="user" spirit:id="PARAM_VALUE.PHASE_DUTY_CONFIG" spirit:order="11.2">false</spirit:value> - <spirit:vendorExtensions> - <xilinx:parameterInfo> - <xilinx:enablement> - <xilinx:isEnabled xilinx:resolve="dependent" xilinx:id="PARAM_ENABLEMENT.PHASE_DUTY_CONFIG">false</xilinx:isEnabled> - </xilinx:enablement> - </xilinx:parameterInfo> - </spirit:vendorExtensions> </spirit:parameter> </spirit:parameters> <spirit:vendorExtensions> <xilinx:coreExtensions> <xilinx:displayName>Clocking Wizard</xilinx:displayName> - <xilinx:coreRevision>0</xilinx:coreRevision> + <xilinx:xpmLibraries> + <xilinx:xpmLibrary>XPM_CDC</xilinx:xpmLibrary> + </xilinx:xpmLibraries> + <xilinx:coreRevision>14</xilinx:coreRevision> <xilinx:configElementInfos> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.ADDR_WIDTH" xilinx:valueSource="auto"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.ARUSER_WIDTH" xilinx:valueSource="constant"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.AWUSER_WIDTH" xilinx:valueSource="constant"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.BUSER_WIDTH" xilinx:valueSource="constant"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.DATA_WIDTH" xilinx:valueSource="auto"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_BRESP" xilinx:valueSource="auto"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_BURST" xilinx:valueSource="constant"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_CACHE" xilinx:valueSource="constant"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_LOCK" xilinx:valueSource="constant"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_PROT" xilinx:valueSource="constant"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_QOS" xilinx:valueSource="constant"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_REGION" xilinx:valueSource="constant"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_RRESP" xilinx:valueSource="auto"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.HAS_WSTRB" xilinx:valueSource="auto"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.ID_WIDTH" xilinx:valueSource="constant"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.PROTOCOL" xilinx:valueSource="constant"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.RUSER_WIDTH" xilinx:valueSource="constant"/> + <xilinx:configElementInfo xilinx:referenceId="BUSIFPARAM_VALUE.S_AXI_LITE.WUSER_WIDTH" xilinx:valueSource="constant"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT1_JITTER" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT1_PHASE_ERROR" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT2_JITTER" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT2_PHASE_ERROR" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT2_REQUESTED_OUT_FREQ" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT2_USED" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT3_JITTER" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT3_PHASE_ERROR" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT3_REQUESTED_OUT_FREQ" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT3_USED" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT4_JITTER" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT4_PHASE_ERROR" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT4_REQUESTED_OUT_FREQ" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.CLKOUT4_USED" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_CLKFBOUT_MULT_F" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_CLKIN1_PERIOD" xilinx:valueSource="user"/> + <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_CLKIN2_PERIOD" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_CLKOUT0_DIVIDE_F" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_CLKOUT1_DIVIDE" xilinx:valueSource="user"/> <xilinx:configElementInfo xilinx:referenceId="PARAM_VALUE.MMCM_CLKOUT2_DIVIDE" xilinx:valueSource="user"/> @@ -4922,12 +5266,12 @@ </xilinx:configElementInfos> </xilinx:coreExtensions> <xilinx:packagingInfo> - <xilinx:xilinxVersion>2015.3</xilinx:xilinxVersion> - <xilinx:checksum xilinx:scope="busInterfaces" xilinx:value="69bff2c8"/> - <xilinx:checksum xilinx:scope="fileGroups" xilinx:value="3a523104"/> - <xilinx:checksum xilinx:scope="ports" xilinx:value="a5d35bf6"/> - <xilinx:checksum xilinx:scope="hdlParameters" xilinx:value="18e8d175"/> - <xilinx:checksum xilinx:scope="parameters" xilinx:value="09870f83"/> + <xilinx:xilinxVersion>2024.1</xilinx:xilinxVersion> + <xilinx:checksum xilinx:scope="busInterfaces" xilinx:value="52494094"/> + <xilinx:checksum xilinx:scope="fileGroups" xilinx:value="f72112df"/> + <xilinx:checksum xilinx:scope="ports" xilinx:value="4f3d3737"/> + <xilinx:checksum xilinx:scope="hdlParameters" xilinx:value="c11c59cd"/> + <xilinx:checksum xilinx:scope="parameters" xilinx:value="63dcade9"/> </xilinx:packagingInfo> </spirit:vendorExtensions> </spirit:component> diff --git a/src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v b/src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v index e47643a..eb66c80 100644 --- a/src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v +++ b/src/ip/clk_wiz_0/clk_wiz_0_clk_wiz.v @@ -1,23 +1,22 @@ + // file: clk_wiz_0.v -// -// (c) Copyright 2008 - 2013 Xilinx, Inc. All rights reserved. -// +// (c) Copyright 2017-2018, 2023 Advanced Micro Devices, Inc. All rights reserved. +// // This file contains confidential and proprietary information -// of Xilinx, Inc. and is protected under U.S. and -// international copyright and other intellectual property -// laws. -// +// of AMD and is protected under U.S. and international copyright +// and other intellectual property laws. +// // DISCLAIMER // This disclaimer is not a license and does not grant any // rights to the materials distributed herewith. Except as // otherwise provided in a valid license issued to you by -// Xilinx, and to the maximum extent permitted by applicable +// AMD, and to the maximum extent permitted by applicable // law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND -// WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES +// WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES // AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING // BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- // INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and -// (2) Xilinx shall not be liable (whether in contract or tort, +// (2) AMD shall not be liable (whether in contract or tort, // including negligence, or under any other theory of // liability) for any loss or damage of any kind or nature // related to, arising under or in connection with these @@ -26,11 +25,11 @@ // (including loss of data, profits, goodwill, or any type of // loss or damage suffered as a result of any action brought // by a third party) even if such damage or loss was -// reasonably foreseeable or Xilinx had been advised of the +// reasonably foreseeable or AMD had been advised of the // possibility of the same. -// +// // CRITICAL APPLICATIONS -// Xilinx products are not designed or intended to be fail- +// AMD products are not designed or intended to be fail- // safe, or for use in any application requiring fail-safe // performance, such as life-support or safety devices or // systems, Class III medical devices, nuclear facilities, @@ -39,13 +38,12 @@ // injury, or severe property or environmental damage // (individually and collectively, "Critical // Applications"). Customer assumes the sole risk and -// liability of any use of Xilinx products in Critical +// liability of any use of AMD products in Critical // Applications, subject only to applicable laws and // regulations governing limitations on product liability. -// +// // THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS // PART OF THIS FILE AT ALL TIMES. -// //---------------------------------------------------------------------------- // User entered comments //---------------------------------------------------------------------------- @@ -55,10 +53,10 @@ // Output Output Phase Duty Cycle Pk-to-Pk Phase // Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps) //---------------------------------------------------------------------------- -// CLK_OUT1___100.000______0.000______50.0______151.366____132.063 -// CLK_OUT2___200.000______0.000______50.0______132.221____132.063 -// CLK_OUT3____12.000______0.000______50.0______231.952____132.063 -// CLK_OUT4____50.000______0.000______50.0______174.353____132.063 +// clk_out1__100.00000______0.000______50.0______151.366____132.063 +// clk_out2__200.00000______0.000______50.0______132.221____132.063 +// clk_out3__12.00000______0.000______50.0______231.952____132.063 +// clk_out4__50.00000______0.000______50.0______174.353____132.063 // //---------------------------------------------------------------------------- // Input Clock Freq (MHz) Input Jitter (UI) @@ -68,8 +66,8 @@ `timescale 1ps/1ps module clk_wiz_0_clk_wiz + (// Clock in ports - input clk_in1, // Clock out ports output clk_out1, output clk_out2, @@ -77,23 +75,35 @@ module clk_wiz_0_clk_wiz output clk_out4, // Status and control signals input reset, - output locked + output locked, + input clk_in1 ); - // Input buffering //------------------------------------ +wire clk_in1_clk_wiz_0; +wire clk_in2_clk_wiz_0; IBUF clkin1_ibufg (.O (clk_in1_clk_wiz_0), .I (clk_in1)); + // Clocking PRIMITIVE //------------------------------------ // Instantiation of the MMCM PRIMITIVE // * Unused inputs are tied off // * Unused outputs are labeled unused + + wire clk_out1_clk_wiz_0; + wire clk_out2_clk_wiz_0; + wire clk_out3_clk_wiz_0; + wire clk_out4_clk_wiz_0; + wire clk_out5_clk_wiz_0; + wire clk_out6_clk_wiz_0; + wire clk_out7_clk_wiz_0; + wire [15:0] do_unused; wire drdy_unused; wire psdone_unused; @@ -179,12 +189,12 @@ module clk_wiz_0_clk_wiz .CLKFBSTOPPED (clkfbstopped_unused), .PWRDWN (1'b0), .RST (reset_high)); - assign reset_high = reset; assign locked = locked_int; - - // Output buffering +// Clock Monitor clock assigning +//-------------------------------------- + // Output buffering //----------------------------------- BUFG clkf_buf @@ -193,6 +203,9 @@ module clk_wiz_0_clk_wiz + + + BUFG clkout1_buf (.O (clk_out1), .I (clk_out1_clk_wiz_0)); diff --git a/src/ip/clk_wiz_0/clk_wiz_0_ooc.xdc b/src/ip/clk_wiz_0/clk_wiz_0_ooc.xdc index 41c79d7..773dcfa 100644 --- a/src/ip/clk_wiz_0/clk_wiz_0_ooc.xdc +++ b/src/ip/clk_wiz_0/clk_wiz_0_ooc.xdc @@ -1,23 +1,22 @@ + # file: clk_wiz_0_ooc.xdc -# -# (c) Copyright 2008 - 2013 Xilinx, Inc. All rights reserved. -# +# (c) Copyright 2017-2018, 2023 Advanced Micro Devices, Inc. All rights reserved. +# # This file contains confidential and proprietary information -# of Xilinx, Inc. and is protected under U.S. and -# international copyright and other intellectual property -# laws. -# +# of AMD and is protected under U.S. and international copyright +# and other intellectual property laws. +# # DISCLAIMER # This disclaimer is not a license and does not grant any # rights to the materials distributed herewith. Except as # otherwise provided in a valid license issued to you by -# Xilinx, and to the maximum extent permitted by applicable +# AMD, and to the maximum extent permitted by applicable # law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND -# WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES +# WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES # AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING # BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- # INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and -# (2) Xilinx shall not be liable (whether in contract or tort, +# (2) AMD shall not be liable (whether in contract or tort, # including negligence, or under any other theory of # liability) for any loss or damage of any kind or nature # related to, arising under or in connection with these @@ -26,11 +25,11 @@ # (including loss of data, profits, goodwill, or any type of # loss or damage suffered as a result of any action brought # by a third party) even if such damage or loss was -# reasonably foreseeable or Xilinx had been advised of the +# reasonably foreseeable or AMD had been advised of the # possibility of the same. -# +# # CRITICAL APPLICATIONS -# Xilinx products are not designed or intended to be fail- +# AMD products are not designed or intended to be fail- # safe, or for use in any application requiring fail-safe # performance, such as life-support or safety devices or # systems, Class III medical devices, nuclear facilities, @@ -39,13 +38,12 @@ # injury, or severe property or environmental damage # (individually and collectively, "Critical # Applications"). Customer assumes the sole risk and -# liability of any use of Xilinx products in Critical +# liability of any use of AMD products in Critical # Applications, subject only to applicable laws and # regulations governing limitations on product liability. -# +# # THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS # PART OF THIS FILE AT ALL TIMES. -# ################# #DEFAULT CLOCK CONSTRAINTS @@ -54,3 +52,4 @@ # Clock Period Constraints # ############################################################ #create_clock -period 10.0 [get_ports clk_in1] + diff --git a/src/ip/clk_wiz_0/clk_wiz_0_sim_netlist.v b/src/ip/clk_wiz_0/clk_wiz_0_sim_netlist.v deleted file mode 100644 index e0a8184..0000000 --- a/src/ip/clk_wiz_0/clk_wiz_0_sim_netlist.v +++ /dev/null @@ -1,278 +0,0 @@ -// Copyright 1986-2015 Xilinx, Inc. All Rights Reserved. -// -------------------------------------------------------------------------------- -// Tool Version: Vivado v.2015.3 (win64) Build 1368829 Mon Sep 28 20:06:43 MDT 2015 -// Date : Thu Jan 21 17:13:26 2016 -// Host : WK86 running 64-bit Service Pack 1 (build 7601) -// Command : write_verilog -force -mode funcsim C:/Work/Github/Working/Looper/src/ip/clk_wiz_0/clk_wiz_0_sim_netlist.v -// Design : clk_wiz_0 -// Purpose : This verilog netlist is a functional simulation representation of the design and should not be modified -// or synthesized. This netlist cannot be used for SDF annotated simulation. -// Device : xc7a200tsbg484-1 -// -------------------------------------------------------------------------------- -`timescale 1 ps / 1 ps - -(* CORE_GENERATION_INFO = "clk_wiz_0,clk_wiz_v5_2_0,{component_name=clk_wiz_0,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=4,clkin1_period=10.0,clkin2_period=10.0,use_power_down=false,use_reset=true,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}" *) -(* NotValidForBitStream *) -module clk_wiz_0 - (clk_in1, - clk_out1, - clk_out2, - clk_out3, - clk_out4, - reset, - locked); - input clk_in1; - output clk_out1; - output clk_out2; - output clk_out3; - output clk_out4; - input reset; - output locked; - - (* IBUF_LOW_PWR *) wire clk_in1; - wire clk_out1; - wire clk_out2; - wire clk_out3; - wire clk_out4; - wire locked; - wire reset; - - clk_wiz_0_clk_wiz_0_clk_wiz inst - (.clk_in1(clk_in1), - .clk_out1(clk_out1), - .clk_out2(clk_out2), - .clk_out3(clk_out3), - .clk_out4(clk_out4), - .locked(locked), - .reset(reset)); -endmodule - -(* ORIG_REF_NAME = "clk_wiz_0_clk_wiz" *) -module clk_wiz_0_clk_wiz_0_clk_wiz - (clk_in1, - clk_out1, - clk_out2, - clk_out3, - clk_out4, - reset, - locked); - input clk_in1; - output clk_out1; - output clk_out2; - output clk_out3; - output clk_out4; - input reset; - output locked; - - wire clk_in1; - wire clk_in1_clk_wiz_0; - wire clk_out1; - wire clk_out1_clk_wiz_0; - wire clk_out2; - wire clk_out2_clk_wiz_0; - wire clk_out3; - wire clk_out3_clk_wiz_0; - wire clk_out4; - wire clk_out4_clk_wiz_0; - wire clkfbout_buf_clk_wiz_0; - wire clkfbout_clk_wiz_0; - wire locked; - wire reset; - wire NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED; - wire NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED; - wire NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED; - wire NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED; - wire NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED; - wire NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED; - wire NLW_mmcm_adv_inst_CLKOUT3B_UNCONNECTED; - wire NLW_mmcm_adv_inst_CLKOUT4_UNCONNECTED; - wire NLW_mmcm_adv_inst_CLKOUT5_UNCONNECTED; - wire NLW_mmcm_adv_inst_CLKOUT6_UNCONNECTED; - wire NLW_mmcm_adv_inst_DRDY_UNCONNECTED; - wire NLW_mmcm_adv_inst_PSDONE_UNCONNECTED; - wire [15:0]NLW_mmcm_adv_inst_DO_UNCONNECTED; - - (* BOX_TYPE = "PRIMITIVE" *) - BUFG clkf_buf - (.I(clkfbout_clk_wiz_0), - .O(clkfbout_buf_clk_wiz_0)); - (* BOX_TYPE = "PRIMITIVE" *) - (* CAPACITANCE = "DONT_CARE" *) - (* IBUF_DELAY_VALUE = "0" *) - (* IFD_DELAY_VALUE = "AUTO" *) - IBUF #( - .IOSTANDARD("DEFAULT")) - clkin1_ibufg - (.I(clk_in1), - .O(clk_in1_clk_wiz_0)); - (* BOX_TYPE = "PRIMITIVE" *) - BUFG clkout1_buf - (.I(clk_out1_clk_wiz_0), - .O(clk_out1)); - (* BOX_TYPE = "PRIMITIVE" *) - BUFG clkout2_buf - (.I(clk_out2_clk_wiz_0), - .O(clk_out2)); - (* BOX_TYPE = "PRIMITIVE" *) - BUFG clkout3_buf - (.I(clk_out3_clk_wiz_0), - .O(clk_out3)); - (* BOX_TYPE = "PRIMITIVE" *) - BUFG clkout4_buf - (.I(clk_out4_clk_wiz_0), - .O(clk_out4)); - (* BOX_TYPE = "PRIMITIVE" *) - MMCME2_ADV #( - .BANDWIDTH("OPTIMIZED"), - .CLKFBOUT_MULT_F(6.000000), - .CLKFBOUT_PHASE(0.000000), - .CLKFBOUT_USE_FINE_PS("FALSE"), - .CLKIN1_PERIOD(10.000000), - .CLKIN2_PERIOD(0.000000), - .CLKOUT0_DIVIDE_F(6.000000), - .CLKOUT0_DUTY_CYCLE(0.500000), - .CLKOUT0_PHASE(0.000000), - .CLKOUT0_USE_FINE_PS("FALSE"), - .CLKOUT1_DIVIDE(3), - .CLKOUT1_DUTY_CYCLE(0.500000), - .CLKOUT1_PHASE(0.000000), - .CLKOUT1_USE_FINE_PS("FALSE"), - .CLKOUT2_DIVIDE(50), - .CLKOUT2_DUTY_CYCLE(0.500000), - .CLKOUT2_PHASE(0.000000), - .CLKOUT2_USE_FINE_PS("FALSE"), - .CLKOUT3_DIVIDE(12), - .CLKOUT3_DUTY_CYCLE(0.500000), - .CLKOUT3_PHASE(0.000000), - .CLKOUT3_USE_FINE_PS("FALSE"), - .CLKOUT4_CASCADE("FALSE"), - .CLKOUT4_DIVIDE(1), - .CLKOUT4_DUTY_CYCLE(0.500000), - .CLKOUT4_PHASE(0.000000), - .CLKOUT4_USE_FINE_PS("FALSE"), - .CLKOUT5_DIVIDE(1), - .CLKOUT5_DUTY_CYCLE(0.500000), - .CLKOUT5_PHASE(0.000000), - .CLKOUT5_USE_FINE_PS("FALSE"), - .CLKOUT6_DIVIDE(1), - .CLKOUT6_DUTY_CYCLE(0.500000), - .CLKOUT6_PHASE(0.000000), - .CLKOUT6_USE_FINE_PS("FALSE"), - .COMPENSATION("ZHOLD"), - .DIVCLK_DIVIDE(1), - .IS_CLKINSEL_INVERTED(1'b0), - .IS_PSEN_INVERTED(1'b0), - .IS_PSINCDEC_INVERTED(1'b0), - .IS_PWRDWN_INVERTED(1'b0), - .IS_RST_INVERTED(1'b0), - .REF_JITTER1(0.010000), - .REF_JITTER2(0.010000), - .SS_EN("FALSE"), - .SS_MODE("CENTER_HIGH"), - .SS_MOD_PERIOD(10000), - .STARTUP_WAIT("FALSE")) - mmcm_adv_inst - (.CLKFBIN(clkfbout_buf_clk_wiz_0), - .CLKFBOUT(clkfbout_clk_wiz_0), - .CLKFBOUTB(NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED), - .CLKFBSTOPPED(NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED), - .CLKIN1(clk_in1_clk_wiz_0), - .CLKIN2(1'b0), - .CLKINSEL(1'b1), - .CLKINSTOPPED(NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED), - .CLKOUT0(clk_out1_clk_wiz_0), - .CLKOUT0B(NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED), - .CLKOUT1(clk_out2_clk_wiz_0), - .CLKOUT1B(NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED), - .CLKOUT2(clk_out3_clk_wiz_0), - .CLKOUT2B(NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED), - .CLKOUT3(clk_out4_clk_wiz_0), - .CLKOUT3B(NLW_mmcm_adv_inst_CLKOUT3B_UNCONNECTED), - .CLKOUT4(NLW_mmcm_adv_inst_CLKOUT4_UNCONNECTED), - .CLKOUT5(NLW_mmcm_adv_inst_CLKOUT5_UNCONNECTED), - .CLKOUT6(NLW_mmcm_adv_inst_CLKOUT6_UNCONNECTED), - .DADDR({1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0}), - .DCLK(1'b0), - .DEN(1'b0), - .DI({1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0,1'b0}), - .DO(NLW_mmcm_adv_inst_DO_UNCONNECTED[15:0]), - .DRDY(NLW_mmcm_adv_inst_DRDY_UNCONNECTED), - .DWE(1'b0), - .LOCKED(locked), - .PSCLK(1'b0), - .PSDONE(NLW_mmcm_adv_inst_PSDONE_UNCONNECTED), - .PSEN(1'b0), - .PSINCDEC(1'b0), - .PWRDWN(1'b0), - .RST(reset)); -endmodule -`ifndef GLBL -`define GLBL -`timescale 1 ps / 1 ps - -module glbl (); - - parameter ROC_WIDTH = 100000; - parameter TOC_WIDTH = 0; - -//-------- STARTUP Globals -------------- - wire GSR; - wire GTS; - wire GWE; - wire PRLD; - tri1 p_up_tmp; - tri (weak1, strong0) PLL_LOCKG = p_up_tmp; - - wire PROGB_GLBL; - wire CCLKO_GLBL; - wire FCSBO_GLBL; - wire [3:0] DO_GLBL; - wire [3:0] DI_GLBL; - - reg GSR_int; - reg GTS_int; - reg PRLD_int; - -//-------- JTAG Globals -------------- - wire JTAG_TDO_GLBL; - wire JTAG_TCK_GLBL; - wire JTAG_TDI_GLBL; - wire JTAG_TMS_GLBL; - wire JTAG_TRST_GLBL; - - reg JTAG_CAPTURE_GLBL; - reg JTAG_RESET_GLBL; - reg JTAG_SHIFT_GLBL; - reg JTAG_UPDATE_GLBL; - reg JTAG_RUNTEST_GLBL; - - reg JTAG_SEL1_GLBL = 0; - reg JTAG_SEL2_GLBL = 0 ; - reg JTAG_SEL3_GLBL = 0; - reg JTAG_SEL4_GLBL = 0; - - reg JTAG_USER_TDO1_GLBL = 1'bz; - reg JTAG_USER_TDO2_GLBL = 1'bz; - reg JTAG_USER_TDO3_GLBL = 1'bz; - reg JTAG_USER_TDO4_GLBL = 1'bz; - - assign (weak1, weak0) GSR = GSR_int; - assign (weak1, weak0) GTS = GTS_int; - assign (weak1, weak0) PRLD = PRLD_int; - - initial begin - GSR_int = 1'b1; - PRLD_int = 1'b1; - #(ROC_WIDTH) - GSR_int = 1'b0; - PRLD_int = 1'b0; - end - - initial begin - GTS_int = 1'b1; - #(TOC_WIDTH) - GTS_int = 1'b0; - end - -endmodule -`endif diff --git a/src/ip/clk_wiz_0/clk_wiz_0_sim_netlist.vhdl b/src/ip/clk_wiz_0/clk_wiz_0_sim_netlist.vhdl deleted file mode 100644 index 84ae83d..0000000 --- a/src/ip/clk_wiz_0/clk_wiz_0_sim_netlist.vhdl +++ /dev/null @@ -1,218 +0,0 @@ --- Copyright 1986-2015 Xilinx, Inc. All Rights Reserved. --- -------------------------------------------------------------------------------- --- Tool Version: Vivado v.2015.3 (win64) Build 1368829 Mon Sep 28 20:06:43 MDT 2015 --- Date : Thu Jan 21 17:13:26 2016 --- Host : WK86 running 64-bit Service Pack 1 (build 7601) --- Command : write_vhdl -force -mode funcsim C:/Work/Github/Working/Looper/src/ip/clk_wiz_0/clk_wiz_0_sim_netlist.vhdl --- Design : clk_wiz_0 --- Purpose : This VHDL netlist is a functional simulation representation of the design and should not be modified or --- synthesized. This netlist cannot be used for SDF annotated simulation. --- Device : xc7a200tsbg484-1 --- -------------------------------------------------------------------------------- -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -library UNISIM; -use UNISIM.VCOMPONENTS.ALL; -entity clk_wiz_0_clk_wiz_0_clk_wiz is - port ( - clk_in1 : in STD_LOGIC; - clk_out1 : out STD_LOGIC; - clk_out2 : out STD_LOGIC; - clk_out3 : out STD_LOGIC; - clk_out4 : out STD_LOGIC; - reset : in STD_LOGIC; - locked : out STD_LOGIC - ); - attribute ORIG_REF_NAME : string; - attribute ORIG_REF_NAME of clk_wiz_0_clk_wiz_0_clk_wiz : entity is "clk_wiz_0_clk_wiz"; -end clk_wiz_0_clk_wiz_0_clk_wiz; - -architecture STRUCTURE of clk_wiz_0_clk_wiz_0_clk_wiz is - signal clk_in1_clk_wiz_0 : STD_LOGIC; - signal clk_out1_clk_wiz_0 : STD_LOGIC; - signal clk_out2_clk_wiz_0 : STD_LOGIC; - signal clk_out3_clk_wiz_0 : STD_LOGIC; - signal clk_out4_clk_wiz_0 : STD_LOGIC; - signal clkfbout_buf_clk_wiz_0 : STD_LOGIC; - signal clkfbout_clk_wiz_0 : STD_LOGIC; - signal NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED : STD_LOGIC; - signal NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED : STD_LOGIC; - signal NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED : STD_LOGIC; - signal NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED : STD_LOGIC; - signal NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED : STD_LOGIC; - signal NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED : STD_LOGIC; - signal NLW_mmcm_adv_inst_CLKOUT3B_UNCONNECTED : STD_LOGIC; - signal NLW_mmcm_adv_inst_CLKOUT4_UNCONNECTED : STD_LOGIC; - signal NLW_mmcm_adv_inst_CLKOUT5_UNCONNECTED : STD_LOGIC; - signal NLW_mmcm_adv_inst_CLKOUT6_UNCONNECTED : STD_LOGIC; - signal NLW_mmcm_adv_inst_DRDY_UNCONNECTED : STD_LOGIC; - signal NLW_mmcm_adv_inst_PSDONE_UNCONNECTED : STD_LOGIC; - signal NLW_mmcm_adv_inst_DO_UNCONNECTED : STD_LOGIC_VECTOR ( 15 downto 0 ); - attribute BOX_TYPE : string; - attribute BOX_TYPE of clkf_buf : label is "PRIMITIVE"; - attribute BOX_TYPE of clkin1_ibufg : label is "PRIMITIVE"; - attribute CAPACITANCE : string; - attribute CAPACITANCE of clkin1_ibufg : label is "DONT_CARE"; - attribute IBUF_DELAY_VALUE : string; - attribute IBUF_DELAY_VALUE of clkin1_ibufg : label is "0"; - attribute IFD_DELAY_VALUE : string; - attribute IFD_DELAY_VALUE of clkin1_ibufg : label is "AUTO"; - attribute BOX_TYPE of clkout1_buf : label is "PRIMITIVE"; - attribute BOX_TYPE of clkout2_buf : label is "PRIMITIVE"; - attribute BOX_TYPE of clkout3_buf : label is "PRIMITIVE"; - attribute BOX_TYPE of clkout4_buf : label is "PRIMITIVE"; - attribute BOX_TYPE of mmcm_adv_inst : label is "PRIMITIVE"; -begin -clkf_buf: unisim.vcomponents.BUFG - port map ( - I => clkfbout_clk_wiz_0, - O => clkfbout_buf_clk_wiz_0 - ); -clkin1_ibufg: unisim.vcomponents.IBUF - generic map( - IOSTANDARD => "DEFAULT" - ) - port map ( - I => clk_in1, - O => clk_in1_clk_wiz_0 - ); -clkout1_buf: unisim.vcomponents.BUFG - port map ( - I => clk_out1_clk_wiz_0, - O => clk_out1 - ); -clkout2_buf: unisim.vcomponents.BUFG - port map ( - I => clk_out2_clk_wiz_0, - O => clk_out2 - ); -clkout3_buf: unisim.vcomponents.BUFG - port map ( - I => clk_out3_clk_wiz_0, - O => clk_out3 - ); -clkout4_buf: unisim.vcomponents.BUFG - port map ( - I => clk_out4_clk_wiz_0, - O => clk_out4 - ); -mmcm_adv_inst: unisim.vcomponents.MMCME2_ADV - generic map( - BANDWIDTH => "OPTIMIZED", - CLKFBOUT_MULT_F => 6.000000, - CLKFBOUT_PHASE => 0.000000, - CLKFBOUT_USE_FINE_PS => false, - CLKIN1_PERIOD => 10.000000, - CLKIN2_PERIOD => 0.000000, - CLKOUT0_DIVIDE_F => 6.000000, - CLKOUT0_DUTY_CYCLE => 0.500000, - CLKOUT0_PHASE => 0.000000, - CLKOUT0_USE_FINE_PS => false, - CLKOUT1_DIVIDE => 3, - CLKOUT1_DUTY_CYCLE => 0.500000, - CLKOUT1_PHASE => 0.000000, - CLKOUT1_USE_FINE_PS => false, - CLKOUT2_DIVIDE => 50, - CLKOUT2_DUTY_CYCLE => 0.500000, - CLKOUT2_PHASE => 0.000000, - CLKOUT2_USE_FINE_PS => false, - CLKOUT3_DIVIDE => 12, - CLKOUT3_DUTY_CYCLE => 0.500000, - CLKOUT3_PHASE => 0.000000, - CLKOUT3_USE_FINE_PS => false, - CLKOUT4_CASCADE => false, - CLKOUT4_DIVIDE => 1, - CLKOUT4_DUTY_CYCLE => 0.500000, - CLKOUT4_PHASE => 0.000000, - CLKOUT4_USE_FINE_PS => false, - CLKOUT5_DIVIDE => 1, - CLKOUT5_DUTY_CYCLE => 0.500000, - CLKOUT5_PHASE => 0.000000, - CLKOUT5_USE_FINE_PS => false, - CLKOUT6_DIVIDE => 1, - CLKOUT6_DUTY_CYCLE => 0.500000, - CLKOUT6_PHASE => 0.000000, - CLKOUT6_USE_FINE_PS => false, - COMPENSATION => "ZHOLD", - DIVCLK_DIVIDE => 1, - IS_CLKINSEL_INVERTED => '0', - IS_PSEN_INVERTED => '0', - IS_PSINCDEC_INVERTED => '0', - IS_PWRDWN_INVERTED => '0', - IS_RST_INVERTED => '0', - REF_JITTER1 => 0.010000, - REF_JITTER2 => 0.010000, - SS_EN => "FALSE", - SS_MODE => "CENTER_HIGH", - SS_MOD_PERIOD => 10000, - STARTUP_WAIT => false - ) - port map ( - CLKFBIN => clkfbout_buf_clk_wiz_0, - CLKFBOUT => clkfbout_clk_wiz_0, - CLKFBOUTB => NLW_mmcm_adv_inst_CLKFBOUTB_UNCONNECTED, - CLKFBSTOPPED => NLW_mmcm_adv_inst_CLKFBSTOPPED_UNCONNECTED, - CLKIN1 => clk_in1_clk_wiz_0, - CLKIN2 => '0', - CLKINSEL => '1', - CLKINSTOPPED => NLW_mmcm_adv_inst_CLKINSTOPPED_UNCONNECTED, - CLKOUT0 => clk_out1_clk_wiz_0, - CLKOUT0B => NLW_mmcm_adv_inst_CLKOUT0B_UNCONNECTED, - CLKOUT1 => clk_out2_clk_wiz_0, - CLKOUT1B => NLW_mmcm_adv_inst_CLKOUT1B_UNCONNECTED, - CLKOUT2 => clk_out3_clk_wiz_0, - CLKOUT2B => NLW_mmcm_adv_inst_CLKOUT2B_UNCONNECTED, - CLKOUT3 => clk_out4_clk_wiz_0, - CLKOUT3B => NLW_mmcm_adv_inst_CLKOUT3B_UNCONNECTED, - CLKOUT4 => NLW_mmcm_adv_inst_CLKOUT4_UNCONNECTED, - CLKOUT5 => NLW_mmcm_adv_inst_CLKOUT5_UNCONNECTED, - CLKOUT6 => NLW_mmcm_adv_inst_CLKOUT6_UNCONNECTED, - DADDR(6 downto 0) => B"0000000", - DCLK => '0', - DEN => '0', - DI(15 downto 0) => B"0000000000000000", - DO(15 downto 0) => NLW_mmcm_adv_inst_DO_UNCONNECTED(15 downto 0), - DRDY => NLW_mmcm_adv_inst_DRDY_UNCONNECTED, - DWE => '0', - LOCKED => locked, - PSCLK => '0', - PSDONE => NLW_mmcm_adv_inst_PSDONE_UNCONNECTED, - PSEN => '0', - PSINCDEC => '0', - PWRDWN => '0', - RST => reset - ); -end STRUCTURE; -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; -library UNISIM; -use UNISIM.VCOMPONENTS.ALL; -entity clk_wiz_0 is - port ( - clk_in1 : in STD_LOGIC; - clk_out1 : out STD_LOGIC; - clk_out2 : out STD_LOGIC; - clk_out3 : out STD_LOGIC; - clk_out4 : out STD_LOGIC; - reset : in STD_LOGIC; - locked : out STD_LOGIC - ); - attribute NotValidForBitStream : boolean; - attribute NotValidForBitStream of clk_wiz_0 : entity is true; - attribute CORE_GENERATION_INFO : string; - attribute CORE_GENERATION_INFO of clk_wiz_0 : entity is "clk_wiz_0,clk_wiz_v5_2_0,{component_name=clk_wiz_0,use_phase_alignment=true,use_min_o_jitter=false,use_max_i_jitter=false,use_dyn_phase_shift=false,use_inclk_switchover=false,use_dyn_reconfig=false,enable_axi=0,feedback_source=FDBK_AUTO,PRIMITIVE=MMCM,num_out_clk=4,clkin1_period=10.0,clkin2_period=10.0,use_power_down=false,use_reset=true,use_locked=true,use_inclk_stopped=false,feedback_type=SINGLE,CLOCK_MGR_TYPE=NA,manual_override=false}"; -end clk_wiz_0; - -architecture STRUCTURE of clk_wiz_0 is -begin -inst: entity work.clk_wiz_0_clk_wiz_0_clk_wiz - port map ( - clk_in1 => clk_in1, - clk_out1 => clk_out1, - clk_out2 => clk_out2, - clk_out3 => clk_out3, - clk_out4 => clk_out4, - locked => locked, - reset => reset - ); -end STRUCTURE; diff --git a/src/ip/clk_wiz_0/clk_wiz_0_stub.v b/src/ip/clk_wiz_0/clk_wiz_0_stub.v deleted file mode 100644 index 3e730b7..0000000 --- a/src/ip/clk_wiz_0/clk_wiz_0_stub.v +++ /dev/null @@ -1,24 +0,0 @@ -// Copyright 1986-2015 Xilinx, Inc. All Rights Reserved. -// -------------------------------------------------------------------------------- -// Tool Version: Vivado v.2015.3 (win64) Build 1368829 Mon Sep 28 20:06:43 MDT 2015 -// Date : Thu Jan 21 17:13:26 2016 -// Host : WK86 running 64-bit Service Pack 1 (build 7601) -// Command : write_verilog -force -mode synth_stub C:/Work/Github/Working/Looper/src/ip/clk_wiz_0/clk_wiz_0_stub.v -// Design : clk_wiz_0 -// Purpose : Stub declaration of top-level module interface -// Device : xc7a200tsbg484-1 -// -------------------------------------------------------------------------------- - -// This empty module with port declaration file causes synthesis tools to infer a black box for IP. -// The synthesis directives are for Synopsys Synplify support to prevent IO buffer insertion. -// Please paste the declaration into a Verilog source file or add the file as an additional source. -module clk_wiz_0(clk_in1, clk_out1, clk_out2, clk_out3, clk_out4, reset, locked) -/* synthesis syn_black_box black_box_pad_pin="clk_in1,clk_out1,clk_out2,clk_out3,clk_out4,reset,locked" */; - input clk_in1; - output clk_out1; - output clk_out2; - output clk_out3; - output clk_out4; - input reset; - output locked; -endmodule diff --git a/src/ip/clk_wiz_0/clk_wiz_0_stub.vhdl b/src/ip/clk_wiz_0/clk_wiz_0_stub.vhdl deleted file mode 100644 index 262c691..0000000 --- a/src/ip/clk_wiz_0/clk_wiz_0_stub.vhdl +++ /dev/null @@ -1,33 +0,0 @@ --- Copyright 1986-2015 Xilinx, Inc. All Rights Reserved. --- -------------------------------------------------------------------------------- --- Tool Version: Vivado v.2015.3 (win64) Build 1368829 Mon Sep 28 20:06:43 MDT 2015 --- Date : Thu Jan 21 17:13:26 2016 --- Host : WK86 running 64-bit Service Pack 1 (build 7601) --- Command : write_vhdl -force -mode synth_stub C:/Work/Github/Working/Looper/src/ip/clk_wiz_0/clk_wiz_0_stub.vhdl --- Design : clk_wiz_0 --- Purpose : Stub declaration of top-level module interface --- Device : xc7a200tsbg484-1 --- -------------------------------------------------------------------------------- -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; - -entity clk_wiz_0 is - Port ( - clk_in1 : in STD_LOGIC; - clk_out1 : out STD_LOGIC; - clk_out2 : out STD_LOGIC; - clk_out3 : out STD_LOGIC; - clk_out4 : out STD_LOGIC; - reset : in STD_LOGIC; - locked : out STD_LOGIC - ); - -end clk_wiz_0; - -architecture stub of clk_wiz_0 is -attribute syn_black_box : boolean; -attribute black_box_pad_pin : string; -attribute syn_black_box of stub : architecture is true; -attribute black_box_pad_pin of stub : architecture is "clk_in1,clk_out1,clk_out2,clk_out3,clk_out4,reset,locked"; -begin -end; diff --git a/src/ip/clk_wiz_0/doc/clk_wiz_v5_2_changelog.txt b/src/ip/clk_wiz_0/doc/clk_wiz_v5_2_changelog.txt deleted file mode 100644 index c88739c..0000000 --- a/src/ip/clk_wiz_0/doc/clk_wiz_v5_2_changelog.txt +++ /dev/null @@ -1,115 +0,0 @@ -2015.3: - * Version 5.2 - * IP revision number added to HDL module, library, and include file names, to support designs with both locked and upgraded IP instances - * Port Renaming tab is hidden in the GUI in IP Integrator as this feature is not supported - * Phase alignment feature is removed for ultrascale PLL as primitve has limited capabilities of supporting this feature - * When clocking wizard is targetted on a board part, the frequency values that gets propagated to primary and secondary clocks are displayed in floating number format - * Example design and simulation files are delivered in verilog only - -2015.2.1: - * Version 5.1 (Rev. 6) - * No changes - -2015.2: - * Version 5.1 (Rev. 6) - * No changes - -2015.1: - * Version 5.1 (Rev. 6) - * Updated mmcm_pll_filter_lookup and mmcm_pll_lock_lookup functions in the header file for 7-Series and UltraScale devices - * Supported devices and production status are now determined automatically, to simplify support for future devices - -2014.4.1: - * Version 5.1 (Rev. 5) - * No changes - -2014.4: - * Version 5.1 (Rev. 5) - * Internal device family change, no functional changes - * updates related to the source selection based on board interface for zed board - -2014.3: - * Version 5.1 (Rev. 4) - * Option added to enable dynamic phase and duty cycle for resource optimization in AXI4-Lite interface - -2014.2: - * Version 5.1 (Rev. 3) - * Updated for AXI4-Lite interface locked status register address and bit mapping to align with the pg065 - -2014.1: - * Version 5.1 (Rev. 2) - * Updated to use inverted output CLKOUTB 0-3 of Clocking Primitive based on requested 180 phase w.r.t. previous clock - * Internal device family name change, no functional changes - -2013.4: - * Version 5.1 (Rev. 1) - * Added support for Ultrascale devices - * Updated Board Flow GUI to select the clock interfaces - * Fixed issue with Stub file parameter error for BUFR output driver - -2013.3: - * Version 5.1 - * Added AXI4-Lite interface to dynamically reconfigure MMCM/PLL - * Improved safe clock logic to remove glitches on clock outputs for odd multiples of input clock frequencies - * Fixed precision issues between displayed and actual frequencies - * Added tool tips to GUI - * Added Jitter and Phase error values to IP properties - * Added support for Cadence IES and Synopsys VCS simulators - * Reduced warnings in synthesis and simulation - * Enhanced support for IP Integrator - -2013.2: - * Version 5.0 (Rev. 1) - * Fixed issue with clock constraints for multiple instances of clocking wizard - * Updated Life-Cycle status of devices - -2013.1: - * Version 5.0 - * Lower case ports for Verilog - * Added Safe Clock Startup and Clock Sequencing - -(c) Copyright 2008 - 2015 Xilinx, Inc. All rights reserved. - -This file contains confidential and proprietary information -of Xilinx, Inc. and is protected under U.S. and -international copyright and other intellectual property -laws. - -DISCLAIMER -This disclaimer is not a license and does not grant any -rights to the materials distributed herewith. Except as -otherwise provided in a valid license issued to you by -Xilinx, and to the maximum extent permitted by applicable -law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND -WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES -AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING -BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- -INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and -(2) Xilinx shall not be liable (whether in contract or tort, -including negligence, or under any other theory of -liability) for any loss or damage of any kind or nature -related to, arising under or in connection with these -materials, including for any direct, or any indirect, -special, incidental, or consequential loss or damage -(including loss of data, profits, goodwill, or any type of -loss or damage suffered as a result of any action brought -by a third party) even if such damage or loss was -reasonably foreseeable or Xilinx had been advised of the -possibility of the same. - -CRITICAL APPLICATIONS -Xilinx products are not designed or intended to be fail- -safe, or for use in any application requiring fail-safe -performance, such as life-support or safety devices or -systems, Class III medical devices, nuclear facilities, -applications related to the deployment of airbags, or any -other applications that could lead to death, personal -injury, or severe property or environmental damage -(individually and collectively, "Critical -Applications"). Customer assumes the sole risk and -liability of any use of Xilinx products in Critical -Applications, subject only to applicable laws and -regulations governing limitations on product liability. - -THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS -PART OF THIS FILE AT ALL TIMES. diff --git a/src/ip/clk_wiz_0/doc/clk_wiz_v6_0_changelog.txt b/src/ip/clk_wiz_0/doc/clk_wiz_v6_0_changelog.txt new file mode 100755 index 0000000..7c91ba6 --- /dev/null +++ b/src/ip/clk_wiz_0/doc/clk_wiz_v6_0_changelog.txt @@ -0,0 +1,323 @@ +2024.1: + * Version 6.0 (Rev. 14) + * General: IP packaging adjustments to address warnings from IP Packager integrity check + +2023.2.2: + * Version 6.0 (Rev. 13) + * No changes + +2023.2.1: + * Version 6.0 (Rev. 13) + * No changes + +2023.2: + * Version 6.0 (Rev. 13) + * Bug Fix: CR Fixes + * Other: CR Fixes + +2023.1.2: + * Version 6.0 (Rev. 12) + * No changes + +2023.1.1: + * Version 6.0 (Rev. 12) + * No changes + +2023.1: + * Version 6.0 (Rev. 12) + * Bug Fix: CR Fixes + * Other: CR Fixes + +2022.2.2: + * Version 6.0 (Rev. 11) + * No changes + +2022.2.1: + * Version 6.0 (Rev. 11) + * No changes + +2022.2: + * Version 6.0 (Rev. 11) + * Bug Fix: CR Fixes + * Other: CR Fixes + +2022.1.2: + * Version 6.0 (Rev. 10) + * No changes + +2022.1.1: + * Version 6.0 (Rev. 10) + * No changes + +2022.1: + * Version 6.0 (Rev. 10) + * Bug Fix: CR Fixes + * Other: CR Fixes + +2021.2.2: + * Version 6.0 (Rev. 9) + * No changes + +2021.2.1: + * Version 6.0 (Rev. 9) + * No changes + +2021.2: + * Version 6.0 (Rev. 9) + * Bug Fix: CR Fixes + * Other: CR Fixes + +2021.1.1: + * Version 6.0 (Rev. 8) + * No changes + +2021.1: + * Version 6.0 (Rev. 8) + * Bug Fix: Internal GUI fixes + * Other: CR Fixes + +2020.3: + * Version 6.0 (Rev. 7) + * Bug Fix: Internal GUI fixes + * Other: CR Fixes + +2020.2.2: + * Version 6.0 (Rev. 6) + * No changes + +2020.2.1: + * Version 6.0 (Rev. 6) + * No changes + +2020.2: + * Version 6.0 (Rev. 6) + * Bug Fix: Internal GUI fixes + * Other: CR Fixes + +2020.1.1: + * Version 6.0 (Rev. 5) + * No changes + +2020.1: + * Version 6.0 (Rev. 5) + * Bug Fix: Internal GUI fixes + * Other: CR Fixes + +2019.2.2: + * Version 6.0 (Rev. 4) + * No changes + +2019.2.1: + * Version 6.0 (Rev. 4) + * No changes + +2019.2: + * Version 6.0 (Rev. 4) + * Bug Fix: Internal GUI fixes + * Other: CR Fixes + +2019.1.3: + * Version 6.0 (Rev. 3) + * No changes + +2019.1.2: + * Version 6.0 (Rev. 3) + * No changes + +2019.1.1: + * Version 6.0 (Rev. 3) + * No changes + +2019.1: + * Version 6.0 (Rev. 3) + * Bug Fix: Internal GUI fixes + * Other: New family support added + +2018.3.1: + * Version 6.0 (Rev. 2) + * No changes + +2018.3: + * Version 6.0 (Rev. 2) + * Bug Fix: Made input source independent for primary and secondary clock + * Other: New family support added + +2018.2: + * Version 6.0 (Rev. 1) + * Bug Fix: Removed vco freq check when Primitive is None + * Other: New family support added + +2018.1: + * Version 6.0 + * Bug Fix: Bug fixes in Dynamic Reconfiguration feature and Write DRP feature + * Bug Fix: Bug fixes for connection issue for s_axi_aresetn pin in IPI + * Feature Enhancement: The default value of USE_PHASE_ALIGMENT is updated to false for UltraScale and UltraScale+ devices. Phase Alignment feature uses extra clock routes in UltraScale and UltraScale+ designs when MMCMs are used. These routing resources are wasted when user do not understand when phase alignment is really needed. Now, implementation tools can use these extra clock routing resources for high fanout signals. + * Feature Enhancement: A column "Max. freq of buffer" is added in the Output Clock table which shows the maximum frequency that the selected output buffer can support + * Other: DRCs added for invalid input values in Override mode + +2017.4: + * Version 5.4 (Rev. 3) + * Bug Fix: Internal GUI issues are fixed for COMPENSATION mode as INTERNAL + * Bug Fix: Fixed issue in dynamic reconfiguration of fractional values of M in MMCME3, MMCME4 + +2017.3: + * Version 5.4 (Rev. 2) + * General: Internal GUI changes. No effect on the customer design. Added support for aspartan7 devices + +2017.2: + * Version 5.4 (Rev. 1) + * General: Internal GUI changes. No effect on the customer design. + +2017.1: + * Version 5.4 + * Port Change: Minor version upgrade. CLR pins are added to the pin list when selected buffer is BUFGCEDIV for ultrascale and ultrascale plus devices. + * Other: Added support for new zynq ultrascale plus devices. + +2016.4: + * Version 5.3 (Rev. 3) + * Bug Fix: Internal GUI issues are fixed. + +2016.3: + * Version 5.3 (Rev. 2) + * Feature Enhancement: Added new option "Auto" under PRIMITIVE selection for ultrascale and above devices. This option allows the Wizard to instantiate appropriate primitive for the user inputs. + * Feature Enhancement: Added Matched Routing Option for better timing solutions. + * Feature Enhancement: Options 'Buffer' and 'Buffer_with_CE' are added to the buffer selection list. + * Other: Source HDL files are concatenated into a single file to speed up synthesis and simulation. No changes required by the user + * Other: Added support for Spartan7 devices. + +2016.2: + * Version 5.3 (Rev. 1) + * Internal register bit update, no effect on customer designs. + +2016.1: + * Version 5.3 + * Added Clock Monitor Feature as part of clocking wizard + * DRP registers can be directly written through AXI without resource utilization + * Changes to HDL library management to support Vivado IP simulation library + +2015.4.2: + * Version 5.2 (Rev. 1) + * No changes + +2015.4.1: + * Version 5.2 (Rev. 1) + * No changes + +2015.4: + * Version 5.2 (Rev. 1) + * Internal device family change, no functional changes + +2015.3: + * Version 5.2 + * IP revision number added to HDL module, library, and include file names, to support designs with both locked and upgraded IP instances + * Port Renaming tab is hidden in the GUI in IP Integrator as this feature is not supported + * Phase alignment feature is removed for ultrascale PLL as primitve has limited capabilities of supporting this feature + * When clocking wizard is targetted on a board part, the frequency values that gets propagated to primary and secondary clocks are displayed in floating number format + * Example design and simulation files are delivered in verilog only + +2015.2.1: + * Version 5.1 (Rev. 6) + * No changes + +2015.2: + * Version 5.1 (Rev. 6) + * No changes + +2015.1: + * Version 5.1 (Rev. 6) + * Updated mmcm_pll_filter_lookup and mmcm_pll_lock_lookup functions in the header file for 7-Series and UltraScale devices + * Supported devices and production status are now determined automatically, to simplify support for future devices + +2014.4.1: + * Version 5.1 (Rev. 5) + * No changes + +2014.4: + * Version 5.1 (Rev. 5) + * Internal device family change, no functional changes + * updates related to the source selection based on board interface for zed board + +2014.3: + * Version 5.1 (Rev. 4) + * Option added to enable dynamic phase and duty cycle for resource optimization in AXI4-Lite interface + +2014.2: + * Version 5.1 (Rev. 3) + * Updated for AXI4-Lite interface locked status register address and bit mapping to align with the pg065 + +2014.1: + * Version 5.1 (Rev. 2) + * Updated to use inverted output CLKOUTB 0-3 of Clocking Primitive based on requested 180 phase w.r.t. previous clock + * Internal device family name change, no functional changes + +2013.4: + * Version 5.1 (Rev. 1) + * Added support for Ultrascale devices + * Updated Board Flow GUI to select the clock interfaces + * Fixed issue with Stub file parameter error for BUFR output driver + +2013.3: + * Version 5.1 + * Added AXI4-Lite interface to dynamically reconfigure MMCM/PLL + * Improved safe clock logic to remove glitches on clock outputs for odd multiples of input clock frequencies + * Fixed precision issues between displayed and actual frequencies + * Added tool tips to GUI + * Added Jitter and Phase error values to IP properties + * Added support for Cadence IES and Synopsys VCS simulators + * Reduced warnings in synthesis and simulation + * Enhanced support for IP Integrator + +2013.2: + * Version 5.0 (Rev. 1) + * Fixed issue with clock constraints for multiple instances of clocking wizard + * Updated Life-Cycle status of devices + +2013.1: + * Version 5.0 + * Lower case ports for Verilog + * Added Safe Clock Startup and Clock Sequencing + +(c) Copyright 2008 - 2024 Advanced Micro Devices, Inc. All rights reserved. + +This file contains confidential and proprietary information +of AMD and is protected under U.S. and international copyright +and other intellectual property laws. + +DISCLAIMER +This disclaimer is not a license and does not grant any +rights to the materials distributed herewith. Except as +otherwise provided in a valid license issued to you by +AMD, and to the maximum extent permitted by applicable +law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES +AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +(2) AMD shall not be liable (whether in contract or tort, +including negligence, or under any other theory of +liability) for any loss or damage of any kind or nature +related to, arising under or in connection with these +materials, including for any direct, or any indirect, +special, incidental, or consequential loss or damage +(including loss of data, profits, goodwill, or any type of +loss or damage suffered as a result of any action brought +by a third party) even if such damage or loss was +reasonably foreseeable or AMD had been advised of the +possibility of the same. + +CRITICAL APPLICATIONS +AMD products are not designed or intended to be fail- +safe, or for use in any application requiring fail-safe +performance, such as life-support or safety devices or +systems, Class III medical devices, nuclear facilities, +applications related to the deployment of airbags, or any +other applications that could lead to death, personal +injury, or severe property or environmental damage +(individually and collectively, "Critical +Applications"). Customer assumes the sole risk and +liability of any use of AMD products in Critical +Applications, subject only to applicable laws and +regulations governing limitations on product liability. + +THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +PART OF THIS FILE AT ALL TIMES. diff --git a/src/ip/clk_wiz_0/mmcm_pll_drp_func_7s_mmcm.vh b/src/ip/clk_wiz_0/mmcm_pll_drp_func_7s_mmcm.vh new file mode 100755 index 0000000..6c4981a --- /dev/null +++ b/src/ip/clk_wiz_0/mmcm_pll_drp_func_7s_mmcm.vh @@ -0,0 +1,680 @@ +// (c) Copyright 2009-2010, 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// This file contains confidential and proprietary information +// of AMD and is protected under U.S. and international copyright +// and other intellectual property laws. +// +// DISCLAIMER +// This disclaimer is not a license and does not grant any +// rights to the materials distributed herewith. Except as +// otherwise provided in a valid license issued to you by +// AMD, and to the maximum extent permitted by applicable +// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +// WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES +// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +// (2) AMD shall not be liable (whether in contract or tort, +// including negligence, or under any other theory of +// liability) for any loss or damage of any kind or nature +// related to, arising under or in connection with these +// materials, including for any direct, or any indirect, +// special, incidental, or consequential loss or damage +// (including loss of data, profits, goodwill, or any type of +// loss or damage suffered as a result of any action brought +// by a third party) even if such damage or loss was +// reasonably foreseeable or AMD had been advised of the +// possibility of the same. +// +// CRITICAL APPLICATIONS +// AMD products are not designed or intended to be fail- +// safe, or for use in any application requiring fail-safe +// performance, such as life-support or safety devices or +// systems, Class III medical devices, nuclear facilities, +// applications related to the deployment of airbags, or any +// other applications that could lead to death, personal +// injury, or severe property or environmental damage +// (individually and collectively, "Critical +// Applications"). Customer assumes the sole risk and +// liability of any use of AMD products in Critical +// Applications, subject only to applicable laws and +// regulations governing limitations on product liability. +// +// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +// PART OF THIS FILE AT ALL TIMES. +//////////////////////////////////////////////////////////// +// +/////////////////////////////////////////////////////////////////////////////// + +// These are user functions that should not be modified. Changes to the defines +// or code within the functions may alter the accuracy of the calculations. + +// Define debug to provide extra messages durring elaboration +//`define DEBUG 1 + +// FRAC_PRECISION describes the width of the fractional portion of the fixed +// point numbers. These should not be modified, they are for development +// only +`define FRAC_PRECISION 10 +// FIXED_WIDTH describes the total size for fixed point calculations(int+frac). +// Warning: L.50 and below will not calculate properly with FIXED_WIDTHs +// greater than 32 +`define FIXED_WIDTH 32 + +// This function takes a fixed point number and rounds it to the nearest +// fractional precision bit. +function [`FIXED_WIDTH:1] round_frac + ( + // Input is (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point number + input [`FIXED_WIDTH:1] decimal, + + // This describes the precision of the fraction, for example a value + // of 1 would modify the fractional so that instead of being a .16 + // fractional, it would be a .1 (rounded to the nearest 0.5 in turn) + input [`FIXED_WIDTH:1] precision + ); + + begin + + `ifdef DEBUG + $display("round_frac - decimal: %h, precision: %h", decimal, precision); + `endif + // If the fractional precision bit is high then round up + if( decimal[(`FRAC_PRECISION-precision)] == 1'b1) begin + round_frac = decimal + (1'b1 << (`FRAC_PRECISION-precision)); + end else begin + round_frac = decimal; + end + `ifdef DEBUG + $display("round_frac: %h", round_frac); + `endif + end +endfunction + +// This function calculates high_time, low_time, w_edge, and no_count +// of a non-fractional counter based on the divide and duty cycle +// +// NOTE: high_time and low_time are returned as integers between 0 and 63 +// inclusive. 64 should equal 6'b000000 (in other words it is okay to +// ignore the overflow) +function [13:0] mmcm_pll_divider + ( + input [7:0] divide, // Max divide is 128 + input [31:0] duty_cycle // Duty cycle is multiplied by 100,000 + ); + + reg [`FIXED_WIDTH:1] duty_cycle_fix; + + // High/Low time is initially calculated with a wider integer to prevent a + // calculation error when it overflows to 64. + reg [6:0] high_time; + reg [6:0] low_time; + reg w_edge; + reg no_count; + + reg [`FIXED_WIDTH:1] temp; + + begin + // Duty Cycle must be between 0 and 1,000 + if(duty_cycle <=0 || duty_cycle >= 100000) begin +`ifndef SYNTHESIS + $display("ERROR: duty_cycle: %d is invalid", duty_cycle); + `endif + $finish; + end + + // Convert to FIXED_WIDTH-FRAC_PRECISION.FRAC_PRECISION fixed point + duty_cycle_fix = (duty_cycle << `FRAC_PRECISION) / 100_000; + + `ifdef DEBUG + $display("duty_cycle_fix: %h", duty_cycle_fix); + `endif + + // If the divide is 1 nothing needs to be set except the no_count bit. + // Other values are dummies + if(divide == 7'h01) begin + high_time = 7'h01; + w_edge = 1'b0; + low_time = 7'h01; + no_count = 1'b1; + end else begin + temp = round_frac(duty_cycle_fix*divide, 1); + + // comes from above round_frac + high_time = temp[`FRAC_PRECISION+7:`FRAC_PRECISION+1]; + // If the duty cycle * divide rounded is .5 or greater then this bit + // is set. + w_edge = temp[`FRAC_PRECISION]; // comes from round_frac + + // If the high time comes out to 0, it needs to be set to at least 1 + // and w_edge set to 0 + if(high_time == 7'h00) begin + high_time = 7'h01; + w_edge = 1'b0; + end + + if(high_time == divide) begin + high_time = divide - 1; + w_edge = 1'b1; + end + + // Calculate low_time based on the divide setting and set no_count to + // 0 as it is only used when divide is 1. + low_time = divide - high_time; + no_count = 1'b0; + end + + // Set the return value. + mmcm_pll_divider = {w_edge,no_count,high_time[5:0],low_time[5:0]}; + end +endfunction + +// This function calculates mx, delay_time, and phase_mux +// of a non-fractional counter based on the divide and phase +// +// NOTE: The only valid value for the MX bits is 2'b00 to ensure the coarse mux +// is used. +function [10:0] mmcm_pll_phase + ( + // divide must be an integer (use fractional if not) + // assumed that divide already checked to be valid + input [7:0] divide, // Max divide is 128 + + // Phase is given in degrees (-360,000 to 360,000) + input signed [31:0] phase + ); + + reg [`FIXED_WIDTH:1] phase_in_cycles; + reg [`FIXED_WIDTH:1] phase_fixed; + reg [1:0] mx; + reg [5:0] delay_time; + reg [2:0] phase_mux; + + reg [`FIXED_WIDTH:1] temp; + + begin +`ifdef DEBUG + $display("mmcm_pll_phase-divide:%d,phase:%d", + divide, phase); +`endif + + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + // If phase is less than 0, convert it to a positive phase shift + // Convert to (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point + if(phase < 0) begin + phase_fixed = ( (phase + 360000) << `FRAC_PRECISION ) / 1000; + end else begin + phase_fixed = ( phase << `FRAC_PRECISION ) / 1000; + end + + // Put phase in terms of decimal number of vco clock cycles + phase_in_cycles = ( phase_fixed * divide ) / 360; + +`ifdef DEBUG + $display("phase_in_cycles: %h", phase_in_cycles); +`endif + + + temp = round_frac(phase_in_cycles, 3); + + // set mx to 2'b00 that the phase mux from the VCO is enabled + mx = 2'b00; + phase_mux = temp[`FRAC_PRECISION:`FRAC_PRECISION-2]; + delay_time = temp[`FRAC_PRECISION+6:`FRAC_PRECISION+1]; + + `ifdef DEBUG + $display("temp: %h", temp); + `endif + + // Setup the return value + mmcm_pll_phase={mx, phase_mux, delay_time}; + end +endfunction + +// This function takes the divide value and outputs the necessary lock values +function [39:0] mmcm_pll_lock_lookup + ( + input [6:0] divide // Max divide is 64 + ); + + reg [2559:0] lookup; + + begin + lookup = { + // This table is composed of: + // LockRefDly_LockFBDly_LockCnt_LockSatHigh_UnlockCnt + 40'b00110_00110_1111101000_1111101001_0000000001, + 40'b00110_00110_1111101000_1111101001_0000000001, + 40'b01000_01000_1111101000_1111101001_0000000001, + 40'b01011_01011_1111101000_1111101001_0000000001, + 40'b01110_01110_1111101000_1111101001_0000000001, + 40'b10001_10001_1111101000_1111101001_0000000001, + 40'b10011_10011_1111101000_1111101001_0000000001, + 40'b10110_10110_1111101000_1111101001_0000000001, + 40'b11001_11001_1111101000_1111101001_0000000001, + 40'b11100_11100_1111101000_1111101001_0000000001, + 40'b11111_11111_1110000100_1111101001_0000000001, + 40'b11111_11111_1100111001_1111101001_0000000001, + 40'b11111_11111_1011101110_1111101001_0000000001, + 40'b11111_11111_1010111100_1111101001_0000000001, + 40'b11111_11111_1010001010_1111101001_0000000001, + 40'b11111_11111_1001110001_1111101001_0000000001, + 40'b11111_11111_1000111111_1111101001_0000000001, + 40'b11111_11111_1000100110_1111101001_0000000001, + 40'b11111_11111_1000001101_1111101001_0000000001, + 40'b11111_11111_0111110100_1111101001_0000000001, + 40'b11111_11111_0111011011_1111101001_0000000001, + 40'b11111_11111_0111000010_1111101001_0000000001, + 40'b11111_11111_0110101001_1111101001_0000000001, + 40'b11111_11111_0110010000_1111101001_0000000001, + 40'b11111_11111_0110010000_1111101001_0000000001, + 40'b11111_11111_0101110111_1111101001_0000000001, + 40'b11111_11111_0101011110_1111101001_0000000001, + 40'b11111_11111_0101011110_1111101001_0000000001, + 40'b11111_11111_0101000101_1111101001_0000000001, + 40'b11111_11111_0101000101_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001 + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + mmcm_pll_lock_lookup = lookup[ ((64-divide)*40) +: 40]; + `ifdef DEBUG + $display("lock_lookup: %b", mmcm_pll_lock_lookup); + `endif + end +endfunction + +// This function takes the divide value and the bandwidth setting of the MMCM +// and outputs the digital filter settings necessary. +function [9:0] mmcm_pll_filter_lookup + ( + input [6:0] divide, // Max divide is 64 + input [8*9:0] BANDWIDTH + ); + + reg [639:0] lookup_low; + reg [639:0] lookup_high; + + reg [9:0] lookup_entry; + + begin + lookup_low = { + // CP_RES_LFHF + 10'b0010_1111_00, + 10'b0010_1111_00, + 10'b0010_1111_00, + 10'b0010_1111_00, + 10'b0010_0111_00, + 10'b0010_1011_00, + 10'b0010_1101_00, + 10'b0010_0011_00, + 10'b0010_0101_00, + 10'b0010_0101_00, + 10'b0010_1001_00, + 10'b0010_1110_00, + 10'b0010_1110_00, + 10'b0010_1110_00, + 10'b0010_1110_00, + 10'b0010_0001_00, + 10'b0010_0001_00, + 10'b0010_0001_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_1010_00, + 10'b0010_1010_00, + 10'b0010_1010_00, + 10'b0010_1010_00, + 10'b0010_1010_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00 + }; + + lookup_high = { + // CP_RES_LFHF + 10'b0010_1111_00, + 10'b0100_1111_00, + 10'b0101_1011_00, + 10'b0111_0111_00, + 10'b1101_0111_00, + 10'b1110_1011_00, + 10'b1110_1101_00, + 10'b1111_0011_00, + 10'b1110_0101_00, + 10'b1111_0101_00, + 10'b1111_1001_00, + 10'b1101_0001_00, + 10'b1111_1001_00, + 10'b1111_1001_00, + 10'b1111_1001_00, + 10'b1111_1001_00, + 10'b1111_0101_00, + 10'b1111_0101_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b0101_1100_00, + 10'b0101_1100_00, + 10'b0101_1100_00, + 10'b0101_1100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0011_0100_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0111_0001_00, + 10'b0111_0001_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0110_0001_00, + 10'b0110_0001_00, + 10'b0101_0110_00, + 10'b0101_0110_00, + 10'b0101_0110_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0100_1010_00, + 10'b0011_1100_00, + 10'b0011_1100_00 + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + if(BANDWIDTH == "LOW") begin + // Low Bandwidth + mmcm_pll_filter_lookup = lookup_low[ ((64-divide)*10) +: 10]; + end else begin + // High or optimized bandwidth + mmcm_pll_filter_lookup = lookup_high[ ((64-divide)*10) +: 10]; + end + + `ifdef DEBUG + $display("filter_lookup: %b", mmcm_pll_filter_lookup); + `endif + end +endfunction + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +function [37:0] mmcm_pll_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle // Multiplied by 100,000 + ); + + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_pll_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + // w_edge[13], no_count[12], high_time[11:6], low_time[5:0] + div_calc = mmcm_pll_divider(divide, duty_cycle); + // mx[10:9], pm[8:6], dt[5:0] + phase_calc = mmcm_pll_phase(divide, phase); + + // Return value is the upper and lower address of counter + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + `ifdef DEBUG + $display("div:%d dc:%d phase:%d ht:%d lt:%d ed:%d nc:%d mx:%d dt:%d pm:%d", + divide, duty_cycle, phase, div_calc[11:6], div_calc[5:0], + div_calc[13], div_calc[12], + phase_calc[16:15], phase_calc[5:0], phase_calc[14:12]); + `endif + + mmcm_pll_count_calc = + { + // Upper Address + 6'h00, phase_calc[10:9], div_calc[13:12], phase_calc[5:0], + // Lower Address + phase_calc[8:6], 1'b0, div_calc[11:0] + }; + end +endfunction + + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +// for fractional multiply/divide functions. +// +// +function [37:0] mmcm_frac_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle, // Multiplied by 1,000 + input [9:0] frac // Multiplied by 1000 + ); + + //Required for fractional divide calculations + reg [7:0] lt_frac; + reg [7:0] ht_frac; + + reg /*[7:0]*/ wf_fall_frac; + reg /*[7:0]*/ wf_rise_frac; + + reg [31:0] a; + reg [7:0] pm_rise_frac_filtered ; + reg [7:0] pm_fall_frac_filtered ; + reg [7:0] clkout0_divide_int; + reg [2:0] clkout0_divide_frac; + reg [7:0] even_part_high; + reg [7:0] even_part_low; + + reg [7:0] odd; + reg [7:0] odd_and_frac; + + reg [7:0] pm_fall; + reg [7:0] pm_rise; + reg [7:0] dt; + reg [7:0] dt_int; + reg [63:0] dt_calc; + + reg [7:0] pm_rise_frac; + reg [7:0] pm_fall_frac; + + reg [31:0] a_per_in_octets; + reg [31:0] a_phase_in_cycles; + + parameter precision = 0.125; + + reg [31:0] phase_fixed; // changed to 31:0 from 32:1 jt 5/2/11 + reg [31: 0] phase_pos; + reg [31: 0] phase_vco; + reg [31:0] temp;// changed to 31:0 from 32:1 jt 5/2/11 + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_frac_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + //convert phase to fixed + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + + // Return value is + // Transfer data + // RESERVED [37:36] + // FRAC_TIME [35:33] + // FRAC_WF_FALL [32] + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + + + clkout0_divide_frac = frac / 125; + clkout0_divide_int = divide; + + even_part_high = clkout0_divide_int >> 1;//$rtoi(clkout0_divide_int / 2); + even_part_low = even_part_high; + + odd = clkout0_divide_int - even_part_high - even_part_low; + odd_and_frac = (8*odd) + clkout0_divide_frac; + + lt_frac = even_part_high - (odd_and_frac <= 9);//IF(odd_and_frac>9,even_part_high, even_part_high - 1) + ht_frac = even_part_low - (odd_and_frac <= 8);//IF(odd_and_frac>8,even_part_low, even_part_low- 1) + + pm_fall = {odd[6:0],2'b00} + {6'h00, clkout0_divide_frac[2:1]}; // using >> instead of clkout0_divide_frac / 2 + pm_rise = 0; //0 + + wf_fall_frac = ((odd_and_frac >=2) && (odd_and_frac <=9)) || ((clkout0_divide_frac == 1) && (clkout0_divide_int == 2));//CRS610807 + wf_rise_frac = (odd_and_frac >=1) && (odd_and_frac <=8);//IF(odd_and_frac>=1,IF(odd_and_frac <= 8,1,0),0) + + + + //Calculate phase in fractional cycles + a_per_in_octets = (8 * divide) + (frac / 125) ; + a_phase_in_cycles = (phase+10) * a_per_in_octets / 360000 ;//Adding 1 due to rounding errors + pm_rise_frac = (a_phase_in_cycles[7:0] ==8'h00)?8'h00:a_phase_in_cycles[7:0] - {a_phase_in_cycles[7:3],3'b000}; + + dt_calc = ((phase+10) * a_per_in_octets / 8 )/360000 ;//TRUNC(phase* divide / 360); //or_simply (a_per_in_octets / 8) + dt = dt_calc[7:0]; + + pm_rise_frac_filtered = (pm_rise_frac >=8) ? (pm_rise_frac ) - 8: pm_rise_frac ; //((phase_fixed * (divide + frac / 1000)) / 360) - {pm_rise_frac[7:3],3'b000};//$rtoi(clkout0_phase * clkout0_divide / 45);//a; + + dt_int = dt + (& pm_rise_frac[7:4]); //IF(pm_rise_overwriting>7,dt+1,dt) + pm_fall_frac = pm_fall + pm_rise_frac; + pm_fall_frac_filtered = pm_fall + pm_rise_frac - {pm_fall_frac[7:3], 3'b000}; + + div_calc = mmcm_pll_divider(divide, duty_cycle); //Use to determine edge[7], no count[6] + phase_calc = mmcm_pll_phase(divide, phase);// returns{mx[1:0], phase_mux[2:0], delay_time[5:0]} + + mmcm_frac_count_calc[37:0] = + { 2'b00, pm_fall_frac_filtered[2:0], wf_fall_frac, + 1'b0, clkout0_divide_frac[2:0], 1'b1, wf_rise_frac, phase_calc[10:9], div_calc[13:12], dt[5:0], + pm_rise_frac_filtered[2], pm_rise_frac_filtered[1], pm_rise_frac_filtered[0], 1'b0, ht_frac[5:0], lt_frac[5:0] + } ; + + `ifdef DEBUG + $display("-%d.%d p%d>> :DADDR_9_15 frac30to28.frac_en.wf_r_frac.dt:%b%d%d_%b:DADDR_7_13 pm_f_frac_filtered_29to27.wf_f_frac_26:%b%d:DADDR_8_14.pm_r_frac_filt_15to13.ht_frac.lt_frac:%b%b%b:", divide, frac, phase, clkout0_divide_frac, 1, wf_rise_frac, dt, pm_fall_frac_filtered, wf_fall_frac, pm_rise_frac_filtered, ht_frac, lt_frac); + `endif + + end +endfunction + diff --git a/src/ip/clk_wiz_0/mmcm_pll_drp_func_7s_pll.vh b/src/ip/clk_wiz_0/mmcm_pll_drp_func_7s_pll.vh new file mode 100755 index 0000000..b662a3e --- /dev/null +++ b/src/ip/clk_wiz_0/mmcm_pll_drp_func_7s_pll.vh @@ -0,0 +1,542 @@ +// (c) Copyright 2009-2010, 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// This file contains confidential and proprietary information +// of AMD and is protected under U.S. and international copyright +// and other intellectual property laws. +// +// DISCLAIMER +// This disclaimer is not a license and does not grant any +// rights to the materials distributed herewith. Except as +// otherwise provided in a valid license issued to you by +// AMD, and to the maximum extent permitted by applicable +// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +// WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES +// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +// (2) AMD shall not be liable (whether in contract or tort, +// including negligence, or under any other theory of +// liability) for any loss or damage of any kind or nature +// related to, arising under or in connection with these +// materials, including for any direct, or any indirect, +// special, incidental, or consequential loss or damage +// (including loss of data, profits, goodwill, or any type of +// loss or damage suffered as a result of any action brought +// by a third party) even if such damage or loss was +// reasonably foreseeable or AMD had been advised of the +// possibility of the same. +// +// CRITICAL APPLICATIONS +// AMD products are not designed or intended to be fail- +// safe, or for use in any application requiring fail-safe +// performance, such as life-support or safety devices or +// systems, Class III medical devices, nuclear facilities, +// applications related to the deployment of airbags, or any +// other applications that could lead to death, personal +// injury, or severe property or environmental damage +// (individually and collectively, "Critical +// Applications"). Customer assumes the sole risk and +// liability of any use of AMD products in Critical +// Applications, subject only to applicable laws and +// regulations governing limitations on product liability. +// +// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +// PART OF THIS FILE AT ALL TIMES. +//////////////////////////////////////////////////////////// +// +/////////////////////////////////////////////////////////////////////////////// + +// These are user functions that should not be modified. Changes to the defines +// or code within the functions may alter the accuracy of the calculations. + +// Define debug to provide extra messages durring elaboration +//`define DEBUG 1 + +// FRAC_PRECISION describes the width of the fractional portion of the fixed +// point numbers. These should not be modified, they are for development +// only +`define FRAC_PRECISION 10 +// FIXED_WIDTH describes the total size for fixed point calculations(int+frac). +// Warning: L.50 and below will not calculate properly with FIXED_WIDTHs +// greater than 32 +`define FIXED_WIDTH 32 + +// This function takes a fixed point number and rounds it to the nearest +// fractional precision bit. +function [`FIXED_WIDTH:1] round_frac + ( + // Input is (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point number + input [`FIXED_WIDTH:1] decimal, + + // This describes the precision of the fraction, for example a value + // of 1 would modify the fractional so that instead of being a .16 + // fractional, it would be a .1 (rounded to the nearest 0.5 in turn) + input [`FIXED_WIDTH:1] precision + ); + + begin + +`ifdef DEBUG + $display("round_frac - decimal: %h, precision: %h", decimal, precision); +`endif + // If the fractional precision bit is high then round up + if( decimal[(`FRAC_PRECISION-precision)] == 1'b1) begin + round_frac = decimal + (1'b1 << (`FRAC_PRECISION-precision)); + end else begin + round_frac = decimal; + end +`ifdef DEBUG + $display("round_frac: %h", round_frac); +`endif + end +endfunction + +// This function calculates high_time, low_time, w_edge, and no_count +// of a non-fractional counter based on the divide and duty cycle +// +// NOTE: high_time and low_time are returned as integers between 0 and 63 +// inclusive. 64 should equal 6'b000000 (in other words it is okay to +// ignore the overflow) +function [13:0] mmcm_pll_divider + ( + input [7:0] divide, // Max divide is 128 + input [31:0] duty_cycle // Duty cycle is multiplied by 100,000 + ); + + reg [`FIXED_WIDTH:1] duty_cycle_fix; + + // High/Low time is initially calculated with a wider integer to prevent a + // calculation error when it overflows to 64. + reg [6:0] high_time; + reg [6:0] low_time; + reg w_edge; + reg no_count; + + reg [`FIXED_WIDTH:1] temp; + + begin + // Duty Cycle must be between 0 and 1,000 + if(duty_cycle <=0 || duty_cycle >= 100000) begin +`ifndef SYNTHESIS + $display("ERROR: duty_cycle: %d is invalid", duty_cycle); + `endif + $finish; + end + + // Convert to FIXED_WIDTH-FRAC_PRECISION.FRAC_PRECISION fixed point + duty_cycle_fix = (duty_cycle << `FRAC_PRECISION) / 100_000; + +`ifdef DEBUG + $display("duty_cycle_fix: %h", duty_cycle_fix); +`endif + + // If the divide is 1 nothing needs to be set except the no_count bit. + // Other values are dummies + if(divide == 7'h01) begin + high_time = 7'h01; + w_edge = 1'b0; + low_time = 7'h01; + no_count = 1'b1; + end else begin + temp = round_frac(duty_cycle_fix*divide, 1); + + // comes from above round_frac + high_time = temp[`FRAC_PRECISION+7:`FRAC_PRECISION+1]; + // If the duty cycle * divide rounded is .5 or greater then this bit + // is set. + w_edge = temp[`FRAC_PRECISION]; // comes from round_frac + + // If the high time comes out to 0, it needs to be set to at least 1 + // and w_edge set to 0 + if(high_time == 7'h00) begin + high_time = 7'h01; + w_edge = 1'b0; + end + + if(high_time == divide) begin + high_time = divide - 1; + w_edge = 1'b1; + end + + // Calculate low_time based on the divide setting and set no_count to + // 0 as it is only used when divide is 1. + low_time = divide - high_time; + no_count = 1'b0; + end + + // Set the return value. + mmcm_pll_divider = {w_edge,no_count,high_time[5:0],low_time[5:0]}; + end +endfunction + +// This function calculates mx, delay_time, and phase_mux +// of a non-fractional counter based on the divide and phase +// +// NOTE: The only valid value for the MX bits is 2'b00 to ensure the coarse mux +// is used. +function [10:0] mmcm_pll_phase + ( + // divide must be an integer (use fractional if not) + // assumed that divide already checked to be valid + input [7:0] divide, // Max divide is 128 + + // Phase is given in degrees (-360,000 to 360,000) + input signed [31:0] phase + ); + + reg [`FIXED_WIDTH:1] phase_in_cycles; + reg [`FIXED_WIDTH:1] phase_fixed; + reg [1:0] mx; + reg [5:0] delay_time; + reg [2:0] phase_mux; + + reg [`FIXED_WIDTH:1] temp; + + begin +`ifdef DEBUG + $display("mmcm_pll_phase-divide:%d,phase:%d", + divide, phase); +`endif + + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + // If phase is less than 0, convert it to a positive phase shift + // Convert to (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point + if(phase < 0) begin + phase_fixed = ( (phase + 360000) << `FRAC_PRECISION ) / 1000; + end else begin + phase_fixed = ( phase << `FRAC_PRECISION ) / 1000; + end + + // Put phase in terms of decimal number of vco clock cycles + phase_in_cycles = ( phase_fixed * divide ) / 360; + +`ifdef DEBUG + $display("phase_in_cycles: %h", phase_in_cycles); +`endif + + + temp = round_frac(phase_in_cycles, 3); + + // set mx to 2'b00 that the phase mux from the VCO is enabled + mx = 2'b00; + phase_mux = temp[`FRAC_PRECISION:`FRAC_PRECISION-2]; + delay_time = temp[`FRAC_PRECISION+6:`FRAC_PRECISION+1]; + +`ifdef DEBUG + $display("temp: %h", temp); +`endif + + // Setup the return value + mmcm_pll_phase={mx, phase_mux, delay_time}; + end +endfunction + +// This function takes the divide value and outputs the necessary lock values +function [39:0] mmcm_pll_lock_lookup + ( + input [6:0] divide // Max divide is 64 + ); + + reg [2559:0] lookup; + + begin + lookup = { + // This table is composed of: + // LockRefDly_LockFBDly_LockCnt_LockSatHigh_UnlockCnt + 40'b00110_00110_1111101000_1111101001_0000000001, + 40'b00110_00110_1111101000_1111101001_0000000001, + 40'b01000_01000_1111101000_1111101001_0000000001, + 40'b01011_01011_1111101000_1111101001_0000000001, + 40'b01110_01110_1111101000_1111101001_0000000001, + 40'b10001_10001_1111101000_1111101001_0000000001, + 40'b10011_10011_1111101000_1111101001_0000000001, + 40'b10110_10110_1111101000_1111101001_0000000001, + 40'b11001_11001_1111101000_1111101001_0000000001, + 40'b11100_11100_1111101000_1111101001_0000000001, + 40'b11111_11111_1110000100_1111101001_0000000001, + 40'b11111_11111_1100111001_1111101001_0000000001, + 40'b11111_11111_1011101110_1111101001_0000000001, + 40'b11111_11111_1010111100_1111101001_0000000001, + 40'b11111_11111_1010001010_1111101001_0000000001, + 40'b11111_11111_1001110001_1111101001_0000000001, + 40'b11111_11111_1000111111_1111101001_0000000001, + 40'b11111_11111_1000100110_1111101001_0000000001, + 40'b11111_11111_1000001101_1111101001_0000000001, + 40'b11111_11111_0111110100_1111101001_0000000001, + 40'b11111_11111_0111011011_1111101001_0000000001, + 40'b11111_11111_0111000010_1111101001_0000000001, + 40'b11111_11111_0110101001_1111101001_0000000001, + 40'b11111_11111_0110010000_1111101001_0000000001, + 40'b11111_11111_0110010000_1111101001_0000000001, + 40'b11111_11111_0101110111_1111101001_0000000001, + 40'b11111_11111_0101011110_1111101001_0000000001, + 40'b11111_11111_0101011110_1111101001_0000000001, + 40'b11111_11111_0101000101_1111101001_0000000001, + 40'b11111_11111_0101000101_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001 + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + mmcm_pll_lock_lookup = lookup[ ((64-divide)*40) +: 40]; + `ifdef DEBUG + $display("lock_lookup: %b", mmcm_pll_lock_lookup); + `endif + end +endfunction + +// This function takes the divide value and the bandwidth setting of the PLL +// and outputs the digital filter settings necessary. +function [9:0] mmcm_pll_filter_lookup + ( + input [6:0] divide, // Max divide is 64 + input [8*9:0] BANDWIDTH + ); + + reg [639:0] lookup_low; + reg [639:0] lookup_high; + + reg [9:0] lookup_entry; + + begin + lookup_low = { + // CP_RES_LFHF + 10'b0010_1111_00, + 10'b0010_1111_00, + 10'b0010_0111_00, + 10'b0010_1101_00, + 10'b0010_0101_00, + 10'b0010_0101_00, + 10'b0010_1001_00, + 10'b0010_1110_00, + 10'b0010_1110_00, + 10'b0010_0001_00, + 10'b0010_0001_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_0110_00, + 10'b0010_1010_00, + 10'b0010_1010_00, + 10'b0010_1010_00, + 10'b0010_1010_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_1100_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0010_0010_00, + 10'b0011_1100_00, + 10'b0011_1100_00, + 10'b0011_1100_00, + 10'b0011_1100_00, + 10'b0011_1100_00, + 10'b0011_1100_00, + 10'b0011_1100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00 + }; + + lookup_high = { + // CP_RES_LFHF + 10'b0011_0111_00, + 10'b0011_0111_00, + 10'b0101_1111_00, + 10'b0111_1111_00, + 10'b0111_1011_00, + 10'b1101_0111_00, + 10'b1110_1011_00, + 10'b1110_1101_00, + 10'b1111_1101_00, + 10'b1111_0111_00, + 10'b1111_1011_00, + 10'b1111_1101_00, + 10'b1111_0011_00, + 10'b1110_0101_00, + 10'b1111_0101_00, + 10'b1111_0101_00, + 10'b1111_0101_00, + 10'b1111_0101_00, + 10'b0111_0110_00, + 10'b0111_0110_00, + 10'b0111_0110_00, + 10'b0111_0110_00, + 10'b0101_1100_00, + 10'b0101_1100_00, + 10'b0101_1100_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b1100_0001_00, + 10'b0100_0010_00, + 10'b0100_0010_00, + 10'b0100_0010_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0011_0100_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0010_1000_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0100_1100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00, + 10'b0010_0100_00 + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + if(BANDWIDTH == "LOW") begin + // Low Bandwidth + mmcm_pll_filter_lookup = lookup_low[ ((64-divide)*10) +: 10]; + end else begin + // High or optimized bandwidth + mmcm_pll_filter_lookup = lookup_high[ ((64-divide)*10) +: 10]; + end + + `ifdef DEBUG + $display("filter_lookup: %b", mmcm_pll_filter_lookup); + `endif + end +endfunction + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +function [37:0] mmcm_pll_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle // Multiplied by 100,000 + ); + + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_pll_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); +`endif + + // w_edge[13], no_count[12], high_time[11:6], low_time[5:0] + div_calc = mmcm_pll_divider(divide, duty_cycle); + // mx[10:9], pm[8:6], dt[5:0] + phase_calc = mmcm_pll_phase(divide, phase); + + // Return value is the upper and lower address of counter + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + +`ifdef DEBUG + $display("div:%d dc:%d phase:%d ht:%d lt:%d ed:%d nc:%d mx:%d dt:%d pm:%d", + divide, duty_cycle, phase, div_calc[11:6], div_calc[5:0], + div_calc[13], div_calc[12], + phase_calc[16:15], phase_calc[5:0], phase_calc[14:12]); +`endif + + mmcm_pll_count_calc = + { + // Upper Address + 6'h00, phase_calc[10:9], div_calc[13:12], phase_calc[5:0], + // Lower Address + phase_calc[8:6], 1'b0, div_calc[11:0] + }; + end +endfunction diff --git a/src/ip/clk_wiz_0/mmcm_pll_drp_func_us_mmcm.vh b/src/ip/clk_wiz_0/mmcm_pll_drp_func_us_mmcm.vh new file mode 100755 index 0000000..154c81f --- /dev/null +++ b/src/ip/clk_wiz_0/mmcm_pll_drp_func_us_mmcm.vh @@ -0,0 +1,680 @@ +// (c) Copyright 2009-2010, 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// This file contains confidential and proprietary information +// of AMD and is protected under U.S. and international copyright +// and other intellectual property laws. +// +// DISCLAIMER +// This disclaimer is not a license and does not grant any +// rights to the materials distributed herewith. Except as +// otherwise provided in a valid license issued to you by +// AMD, and to the maximum extent permitted by applicable +// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +// WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES +// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +// (2) AMD shall not be liable (whether in contract or tort, +// including negligence, or under any other theory of +// liability) for any loss or damage of any kind or nature +// related to, arising under or in connection with these +// materials, including for any direct, or any indirect, +// special, incidental, or consequential loss or damage +// (including loss of data, profits, goodwill, or any type of +// loss or damage suffered as a result of any action brought +// by a third party) even if such damage or loss was +// reasonably foreseeable or AMD had been advised of the +// possibility of the same. +// +// CRITICAL APPLICATIONS +// AMD products are not designed or intended to be fail- +// safe, or for use in any application requiring fail-safe +// performance, such as life-support or safety devices or +// systems, Class III medical devices, nuclear facilities, +// applications related to the deployment of airbags, or any +// other applications that could lead to death, personal +// injury, or severe property or environmental damage +// (individually and collectively, "Critical +// Applications"). Customer assumes the sole risk and +// liability of any use of AMD products in Critical +// Applications, subject only to applicable laws and +// regulations governing limitations on product liability. +// +// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +// PART OF THIS FILE AT ALL TIMES. +//////////////////////////////////////////////////////////// +// +/////////////////////////////////////////////////////////////////////////////// + +// These are user functions that should not be modified. Changes to the defines +// or code within the functions may alter the accuracy of the calculations. + +// Define debug to provide extra messages durring elaboration +//`define DEBUG 1 + +// FRAC_PRECISION describes the width of the fractional portion of the fixed +// point numbers. These should not be modified, they are for development +// only +`define FRAC_PRECISION 10 +// FIXED_WIDTH describes the total size for fixed point calculations(int+frac). +// Warning: L.50 and below will not calculate properly with FIXED_WIDTHs +// greater than 32 +`define FIXED_WIDTH 32 + +// This function takes a fixed point number and rounds it to the nearest +// fractional precision bit. +function [`FIXED_WIDTH:1] round_frac + ( + // Input is (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point number + input [`FIXED_WIDTH:1] decimal, + + // This describes the precision of the fraction, for example a value + // of 1 would modify the fractional so that instead of being a .16 + // fractional, it would be a .1 (rounded to the nearest 0.5 in turn) + input [`FIXED_WIDTH:1] precision + ); + + begin + + `ifdef DEBUG + $display("round_frac - decimal: %h, precision: %h", decimal, precision); + `endif + // If the fractional precision bit is high then round up + if( decimal[(`FRAC_PRECISION-precision)] == 1'b1) begin + round_frac = decimal + (1'b1 << (`FRAC_PRECISION-precision)); + end else begin + round_frac = decimal; + end + `ifdef DEBUG + $display("round_frac: %h", round_frac); + `endif + end +endfunction + +// This function calculates high_time, low_time, w_edge, and no_count +// of a non-fractional counter based on the divide and duty cycle +// +// NOTE: high_time and low_time are returned as integers between 0 and 63 +// inclusive. 64 should equal 6'b000000 (in other words it is okay to +// ignore the overflow) +function [13:0] mmcm_pll_divider + ( + input [7:0] divide, // Max divide is 128 + input [31:0] duty_cycle // Duty cycle is multiplied by 100,000 + ); + + reg [`FIXED_WIDTH:1] duty_cycle_fix; + + // High/Low time is initially calculated with a wider integer to prevent a + // calculation error when it overflows to 64. + reg [6:0] high_time; + reg [6:0] low_time; + reg w_edge; + reg no_count; + + reg [`FIXED_WIDTH:1] temp; + + begin + // Duty Cycle must be between 0 and 1,000 + if(duty_cycle <=0 || duty_cycle >= 100000) begin +`ifndef SYNTHESIS + $display("ERROR: duty_cycle: %d is invalid", duty_cycle); + `endif + $finish; + end + + // Convert to FIXED_WIDTH-FRAC_PRECISION.FRAC_PRECISION fixed point + duty_cycle_fix = (duty_cycle << `FRAC_PRECISION) / 100_000; + + `ifdef DEBUG + $display("duty_cycle_fix: %h", duty_cycle_fix); + `endif + + // If the divide is 1 nothing needs to be set except the no_count bit. + // Other values are dummies + if(divide == 7'h01) begin + high_time = 7'h01; + w_edge = 1'b0; + low_time = 7'h01; + no_count = 1'b1; + end else begin + temp = round_frac(duty_cycle_fix*divide, 1); + + // comes from above round_frac + high_time = temp[`FRAC_PRECISION+7:`FRAC_PRECISION+1]; + // If the duty cycle * divide rounded is .5 or greater then this bit + // is set. + w_edge = temp[`FRAC_PRECISION]; // comes from round_frac + + // If the high time comes out to 0, it needs to be set to at least 1 + // and w_edge set to 0 + if(high_time == 7'h00) begin + high_time = 7'h01; + w_edge = 1'b0; + end + + if(high_time == divide) begin + high_time = divide - 1; + w_edge = 1'b1; + end + + // Calculate low_time based on the divide setting and set no_count to + // 0 as it is only used when divide is 1. + low_time = divide - high_time; + no_count = 1'b0; + end + + // Set the return value. + mmcm_pll_divider = {w_edge,no_count,high_time[5:0],low_time[5:0]}; + end +endfunction + +// This function calculates mx, delay_time, and phase_mux +// of a non-fractional counter based on the divide and phase +// +// NOTE: The only valid value for the MX bits is 2'b00 to ensure the coarse mux +// is used. +function [10:0] mmcm_pll_phase + ( + // divide must be an integer (use fractional if not) + // assumed that divide already checked to be valid + input [7:0] divide, // Max divide is 128 + + // Phase is given in degrees (-360,000 to 360,000) + input signed [31:0] phase + ); + + reg [`FIXED_WIDTH:1] phase_in_cycles; + reg [`FIXED_WIDTH:1] phase_fixed; + reg [1:0] mx; + reg [5:0] delay_time; + reg [2:0] phase_mux; + + reg [`FIXED_WIDTH:1] temp; + + begin +`ifdef DEBUG + $display("mmcm_pll_phase-divide:%d,phase:%d", + divide, phase); +`endif + + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + // If phase is less than 0, convert it to a positive phase shift + // Convert to (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point + if(phase < 0) begin + phase_fixed = ( (phase + 360000) << `FRAC_PRECISION ) / 1000; + end else begin + phase_fixed = ( phase << `FRAC_PRECISION ) / 1000; + end + + // Put phase in terms of decimal number of vco clock cycles + phase_in_cycles = ( phase_fixed * divide ) / 360; + +`ifdef DEBUG + $display("phase_in_cycles: %h", phase_in_cycles); +`endif + + + temp = round_frac(phase_in_cycles, 3); + + // set mx to 2'b00 that the phase mux from the VCO is enabled + mx = 2'b00; + phase_mux = temp[`FRAC_PRECISION:`FRAC_PRECISION-2]; + delay_time = temp[`FRAC_PRECISION+6:`FRAC_PRECISION+1]; + + `ifdef DEBUG + $display("temp: %h", temp); + `endif + + // Setup the return value + mmcm_pll_phase={mx, phase_mux, delay_time}; + end +endfunction + +// This function takes the divide value and outputs the necessary lock values +function [39:0] mmcm_pll_lock_lookup + ( + input [6:0] divide // Max divide is 64 + ); + + reg [2559:0] lookup; + + begin + lookup = { + // This table is composed of: + // LockRefDly_LockFBDly_LockCnt_LockSatHigh_UnlockCnt + 40'b00110_00110_1111101000_1111101001_0000000001, + 40'b00110_00110_1111101000_1111101001_0000000001, + 40'b01000_01000_1111101000_1111101001_0000000001, + 40'b01011_01011_1111101000_1111101001_0000000001, + 40'b01110_01110_1111101000_1111101001_0000000001, + 40'b10001_10001_1111101000_1111101001_0000000001, + 40'b10011_10011_1111101000_1111101001_0000000001, + 40'b10110_10110_1111101000_1111101001_0000000001, + 40'b11001_11001_1111101000_1111101001_0000000001, + 40'b11100_11100_1111101000_1111101001_0000000001, + 40'b11111_11111_1110000100_1111101001_0000000001, + 40'b11111_11111_1100111001_1111101001_0000000001, + 40'b11111_11111_1011101110_1111101001_0000000001, + 40'b11111_11111_1010111100_1111101001_0000000001, + 40'b11111_11111_1010001010_1111101001_0000000001, + 40'b11111_11111_1001110001_1111101001_0000000001, + 40'b11111_11111_1000111111_1111101001_0000000001, + 40'b11111_11111_1000100110_1111101001_0000000001, + 40'b11111_11111_1000001101_1111101001_0000000001, + 40'b11111_11111_0111110100_1111101001_0000000001, + 40'b11111_11111_0111011011_1111101001_0000000001, + 40'b11111_11111_0111000010_1111101001_0000000001, + 40'b11111_11111_0110101001_1111101001_0000000001, + 40'b11111_11111_0110010000_1111101001_0000000001, + 40'b11111_11111_0110010000_1111101001_0000000001, + 40'b11111_11111_0101110111_1111101001_0000000001, + 40'b11111_11111_0101011110_1111101001_0000000001, + 40'b11111_11111_0101011110_1111101001_0000000001, + 40'b11111_11111_0101000101_1111101001_0000000001, + 40'b11111_11111_0101000101_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001 + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + mmcm_pll_lock_lookup = lookup[ ((64-divide)*40) +: 40]; + `ifdef DEBUG + $display("lock_lookup: %b", mmcm_pll_lock_lookup); + `endif + end +endfunction + +// This function takes the divide value and the bandwidth setting of the MMCM +// and outputs the digital filter settings necessary. +function [9:0] mmcm_pll_filter_lookup + ( + input [6:0] divide, // Max divide is 64 + input [8*9:0] BANDWIDTH + ); + + reg [639:0] lookup_low; + reg [639:0] lookup_high; + + reg [9:0] lookup_entry; + + begin + lookup_low = { + // CP_RES_LFHF + 10'b0010_1111_11, + 10'b0010_1111_11, + 10'b0010_1111_11, + 10'b0010_1111_11, + 10'b0010_1111_11, + 10'b0010_1111_11, + 10'b0010_0111_11, + 10'b0010_0111_11, + 10'b0010_0111_11, + 10'b0010_1101_11, + 10'b0010_1101_11, + 10'b0010_1101_11, + 10'b0010_0011_11, + 10'b0010_0101_11, + 10'b0010_0101_11, + 10'b0010_0101_11, + 10'b0010_1001_11, + 10'b0010_1001_11, + 10'b0010_1110_11, + 10'b0010_1110_11, + 10'b0010_1110_11, + 10'b0010_1110_11, + 10'b0010_1110_11, + 10'b0010_1110_11, + 10'b0010_0001_11, + 10'b0010_0001_11, + 10'b0010_0001_11, + 10'b0010_0001_11, + 10'b0010_0001_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_0110_11, + 10'b0010_1010_11, + 10'b0010_1010_11, + 10'b0010_1010_11, + 10'b0010_1010_11, + 10'b0010_1010_11, + 10'b0010_1010_11, + 10'b0010_1010_11, + 10'b0010_1010_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11, + 10'b0010_1100_11 + }; + + lookup_high = { + // CP_RES_LFHF + 10'b0010_1111_11, + 10'b0010_1111_11, + 10'b0010_1011_11, + 10'b0011_1111_11, + 10'b0100_1111_11, + 10'b0100_1111_11, + 10'b0101_1111_11, + 10'b0110_1111_11, + 10'b0111_1111_11, + 10'b0111_1111_11, + 10'b1100_1111_11, + 10'b1101_1111_11, + 10'b1110_1111_11, + 10'b1111_1111_11, + 10'b1111_1111_11, + 10'b1110_0111_11, + 10'b1110_1011_11, + 10'b1111_0111_11, + 10'b1111_1011_11, + 10'b1111_1011_11, + 10'b1110_1101_11, + 10'b1111_1101_11, + 10'b1111_1101_11, + 10'b1111_0011_11, + 10'b1111_0011_11, + 10'b1111_0011_11, + 10'b1110_0101_11, + 10'b1110_0101_11, + 10'b1110_0101_11, + 10'b1111_0101_11, + 10'b1111_0101_11, + 10'b1111_0101_11, + 10'b1111_1001_11, + 10'b1111_1001_11, + 10'b1111_1001_11, + 10'b1111_1001_11, + 10'b1111_1001_11, + 10'b1110_1110_11, + 10'b1110_1110_11, + 10'b1110_1110_11, + 10'b1110_1110_11, + 10'b1111_1110_11, + 10'b1111_1110_11, + 10'b1111_1110_11, + 10'b1111_1110_11, + 10'b1111_1110_11, + 10'b1111_1110_11, + 10'b1111_1110_11, + 10'b1110_0001_11, + 10'b1110_0001_11, + 10'b1110_0001_11, + 10'b1110_0001_11, + 10'b1110_0001_11, + 10'b1100_0110_11, + 10'b1100_0110_11, + 10'b1100_0110_11, + 10'b1100_0110_11, + 10'b1100_0110_11, + 10'b1100_0110_11, + 10'b1100_0110_11, + 10'b1100_1010_11, + 10'b1100_1010_11, + 10'b1100_1010_11, + 10'b1100_1010_11 + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + if(BANDWIDTH == "LOW") begin + // Low Bandwidth + mmcm_pll_filter_lookup = lookup_low[ ((64-divide)*10) +: 10]; + end else begin + // High or optimized bandwidth + mmcm_pll_filter_lookup = lookup_high[ ((64-divide)*10) +: 10]; + end + + `ifdef DEBUG + $display("filter_lookup: %b", mmcm_pll_filter_lookup); + `endif + end +endfunction + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +function [37:0] mmcm_pll_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle // Multiplied by 100,000 + ); + + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_pll_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + // w_edge[13], no_count[12], high_time[11:6], low_time[5:0] + div_calc = mmcm_pll_divider(divide, duty_cycle); + // mx[10:9], pm[8:6], dt[5:0] + phase_calc = mmcm_pll_phase(divide, phase); + + // Return value is the upper and lower address of counter + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + `ifdef DEBUG + $display("div:%d dc:%d phase:%d ht:%d lt:%d ed:%d nc:%d mx:%d dt:%d pm:%d", + divide, duty_cycle, phase, div_calc[11:6], div_calc[5:0], + div_calc[13], div_calc[12], + phase_calc[16:15], phase_calc[5:0], phase_calc[14:12]); + `endif + + mmcm_pll_count_calc = + { + // Upper Address + 6'h00, phase_calc[10:9], div_calc[13:12], phase_calc[5:0], + // Lower Address + phase_calc[8:6], 1'b0, div_calc[11:0] + }; + end +endfunction + + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +// for fractional multiply/divide functions. +// +// +function [37:0] mmcm_frac_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle, // Multiplied by 1,000 + input [9:0] frac // Multiplied by 1000 + ); + + //Required for fractional divide calculations + reg [7:0] lt_frac; + reg [7:0] ht_frac; + + reg /*[7:0]*/ wf_fall_frac; + reg /*[7:0]*/ wf_rise_frac; + + reg [31:0] a; + reg [7:0] pm_rise_frac_filtered ; + reg [7:0] pm_fall_frac_filtered ; + reg [7:0] clkout0_divide_int; + reg [2:0] clkout0_divide_frac; + reg [7:0] even_part_high; + reg [7:0] even_part_low; + + reg [7:0] odd; + reg [7:0] odd_and_frac; + + reg [7:0] pm_fall; + reg [7:0] pm_rise; + reg [7:0] dt; + reg [7:0] dt_int; + reg [63:0] dt_calc; + + reg [7:0] pm_rise_frac; + reg [7:0] pm_fall_frac; + + reg [31:0] a_per_in_octets; + reg [31:0] a_phase_in_cycles; + + parameter precision = 0.125; + + reg [31:0] phase_fixed; // changed to 31:0 from 32:1 jt 5/2/11 + reg [31: 0] phase_pos; + reg [31: 0] phase_vco; + reg [31:0] temp;// changed to 31:0 from 32:1 jt 5/2/11 + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_frac_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + //convert phase to fixed + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + + // Return value is + // Transfer data + // RESERVED [37:36] + // FRAC_TIME [35:33] + // FRAC_WF_FALL [32] + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + + + clkout0_divide_frac = frac / 125; + clkout0_divide_int = divide; + + even_part_high = clkout0_divide_int >> 1;//$rtoi(clkout0_divide_int / 2); + even_part_low = even_part_high; + + odd = clkout0_divide_int - even_part_high - even_part_low; + odd_and_frac = (8*odd) + clkout0_divide_frac; + + lt_frac = even_part_high - (odd_and_frac <= 9);//IF(odd_and_frac>9,even_part_high, even_part_high - 1) + ht_frac = even_part_low - (odd_and_frac <= 8);//IF(odd_and_frac>8,even_part_low, even_part_low- 1) + + pm_fall = {odd[6:0],2'b00} + {6'h00, clkout0_divide_frac[2:1]}; // using >> instead of clkout0_divide_frac / 2 + pm_rise = 0; //0 + + wf_fall_frac = ((odd_and_frac >=2) && (odd_and_frac <=9)) || ((clkout0_divide_frac == 1) && (clkout0_divide_int == 2));//CRS610807 + wf_rise_frac = (odd_and_frac >=1) && (odd_and_frac <=8);//IF(odd_and_frac>=1,IF(odd_and_frac <= 8,1,0),0) + + + + //Calculate phase in fractional cycles + a_per_in_octets = (8 * divide) + (frac / 125) ; + a_phase_in_cycles = (phase+10) * a_per_in_octets / 360000 ;//Adding 1 due to rounding errors + pm_rise_frac = (a_phase_in_cycles[7:0] ==8'h00)?8'h00:a_phase_in_cycles[7:0] - {a_phase_in_cycles[7:3],3'b000}; + + dt_calc = ((phase+10) * a_per_in_octets / 8 )/360000 ;//TRUNC(phase* divide / 360); //or_simply (a_per_in_octets / 8) + dt = dt_calc[7:0]; + + pm_rise_frac_filtered = (pm_rise_frac >=8) ? (pm_rise_frac ) - 8: pm_rise_frac ; //((phase_fixed * (divide + frac / 1000)) / 360) - {pm_rise_frac[7:3],3'b000};//$rtoi(clkout0_phase * clkout0_divide / 45);//a; + + dt_int = dt + (& pm_rise_frac[7:4]); //IF(pm_rise_overwriting>7,dt+1,dt) + pm_fall_frac = pm_fall + pm_rise_frac; + pm_fall_frac_filtered = pm_fall + pm_rise_frac - {pm_fall_frac[7:3], 3'b000}; + + div_calc = mmcm_pll_divider(divide, duty_cycle); //Use to determine edge[7], no count[6] + phase_calc = mmcm_pll_phase(divide, phase);// returns{mx[1:0], phase_mux[2:0], delay_time[5:0]} + + mmcm_frac_count_calc[37:0] = + { 2'b00, pm_fall_frac_filtered[2:0], wf_fall_frac, + 1'b0, clkout0_divide_frac[2:0], 1'b1, wf_rise_frac, phase_calc[10:9], div_calc[13:12], dt[5:0], + pm_rise_frac_filtered[2], pm_rise_frac_filtered[1], pm_rise_frac_filtered[0], 1'b0, ht_frac[5:0], lt_frac[5:0] + } ; + + `ifdef DEBUG + $display("-%d.%d p%d>> :DADDR_9_15 frac30to28.frac_en.wf_r_frac.dt:%b%d%d_%b:DADDR_7_13 pm_f_frac_filtered_29to27.wf_f_frac_26:%b%d:DADDR_8_14.pm_r_frac_filt_15to13.ht_frac.lt_frac:%b%b%b:", divide, frac, phase, clkout0_divide_frac, 1, wf_rise_frac, dt, pm_fall_frac_filtered, wf_fall_frac, pm_rise_frac_filtered, ht_frac, lt_frac); + `endif + + end +endfunction + diff --git a/src/ip/clk_wiz_0/mmcm_pll_drp_func_us_pll.vh b/src/ip/clk_wiz_0/mmcm_pll_drp_func_us_pll.vh new file mode 100755 index 0000000..ff369d1 --- /dev/null +++ b/src/ip/clk_wiz_0/mmcm_pll_drp_func_us_pll.vh @@ -0,0 +1,555 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Company: AMD +// Engineer: Jim Tatsukawa +// Date: 6/15/2015 +// Design Name: PLLE3 DRP +// Module Name: plle3_drp_func.h +// Version: 1.10 +// Target Devices: UltraScale Architecture +// Tool versions: 2015.1 +// Description: This header provides the functions necessary to +// calculate the DRP register values for the V6 PLL. +// +// Revision Notes: 8/11 - PLLE3 updated for PLLE3 file 4564419 +// Revision Notes: 6/15 - pll_filter_lookup fixed for max M of 19 +// PM_Rise bits have been removed for PLLE3 +// +// (c) Copyright 2009-2010, 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// This file contains confidential and proprietary information +// of AMD and is protected under U.S. and international copyright +// and other intellectual property laws. +// +// DISCLAIMER +// This disclaimer is not a license and does not grant any +// rights to the materials distributed herewith. Except as +// otherwise provided in a valid license issued to you by +// AMD, and to the maximum extent permitted by applicable +// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +// WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES +// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +// (2) AMD shall not be liable (whether in contract or tort, +// including negligence, or under any other theory of +// liability) for any loss or damage of any kind or nature +// related to, arising under or in connection with these +// materials, including for any direct, or any indirect, +// special, incidental, or consequential loss or damage +// (including loss of data, profits, goodwill, or any type of +// loss or damage suffered as a result of any action brought +// by a third party) even if such damage or loss was +// reasonably foreseeable or AMD had been advised of the +// possibility of the same. +// +// CRITICAL APPLICATIONS +// AMD products are not designed or intended to be fail- +// safe, or for use in any application requiring fail-safe +// performance, such as life-support or safety devices or +// systems, Class III medical devices, nuclear facilities, +// applications related to the deployment of airbags, or any +// other applications that could lead to death, personal +// injury, or severe property or environmental damage +// (individually and collectively, "Critical +// Applications"). Customer assumes the sole risk and +// liability of any use of AMD products in Critical +// Applications, subject only to applicable laws and +// regulations governing limitations on product liability. +// +// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +// PART OF THIS FILE AT ALL TIMES. +//////////////////////////////////////////////////////////// +// +/////////////////////////////////////////////////////////////////////////////// + +// These are user functions that should not be modified. Changes to the defines +// or code within the functions may alter the accuracy of the calculations. + +// Define debug to provide extra messages durring elaboration +//`define DEBUG 1 + +// FRAC_PRECISION describes the width of the fractional portion of the fixed +// point numbers. These should not be modified, they are for development +// only +`define FRAC_PRECISION 10 +// FIXED_WIDTH describes the total size for fixed point calculations(int+frac). +// Warning: L.50 and below will not calculate properly with FIXED_WIDTHs +// greater than 32 +`define FIXED_WIDTH 32 + +// This function takes a fixed point number and rounds it to the nearest +// fractional precision bit. +function [`FIXED_WIDTH:1] round_frac + ( + // Input is (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point number + input [`FIXED_WIDTH:1] decimal, + + // This describes the precision of the fraction, for example a value + // of 1 would modify the fractional so that instead of being a .16 + // fractional, it would be a .1 (rounded to the nearest 0.5 in turn) + input [`FIXED_WIDTH:1] precision + ); + + begin + + `ifdef DEBUG + $display("round_frac - decimal: %h, precision: %h", decimal, precision); + `endif + // If the fractional precision bit is high then round up + if( decimal[(`FRAC_PRECISION-precision)] == 1'b1) begin + round_frac = decimal + (1'b1 << (`FRAC_PRECISION-precision)); + end else begin + round_frac = decimal; + end + `ifdef DEBUG + $display("round_frac: %h", round_frac); + `endif + end +endfunction + +// This function calculates high_time, low_time, w_edge, and no_count +// of a non-fractional counter based on the divide and duty cycle +// +// NOTE: high_time and low_time are returned as integers between 0 and 63 +// inclusive. 64 should equal 6'b000000 (in other words it is okay to +// ignore the overflow) +function [13:0] mmcm_pll_divider + ( + input [7:0] divide, // Max divide is 128 + input [31:0] duty_cycle // Duty cycle is multiplied by 100,000 + ); + + reg [`FIXED_WIDTH:1] duty_cycle_fix; + + // High/Low time is initially calculated with a wider integer to prevent a + // calculation error when it overflows to 64. + reg [6:0] high_time; + reg [6:0] low_time; + reg w_edge; + reg no_count; + + reg [`FIXED_WIDTH:1] temp; + + begin + // Duty Cycle must be between 0 and 1,000 + if(duty_cycle <=0 || duty_cycle >= 100000) begin +`ifndef SYNTHESIS + $display("ERROR: duty_cycle: %d is invalid", duty_cycle); + `endif + $finish; + end + + // Convert to FIXED_WIDTH-FRAC_PRECISION.FRAC_PRECISION fixed point + duty_cycle_fix = (duty_cycle << `FRAC_PRECISION) / 100_000; + + `ifdef DEBUG + $display("duty_cycle_fix: %h", duty_cycle_fix); + `endif + + // If the divide is 1 nothing needs to be set except the no_count bit. + // Other values are dummies + if(divide == 7'h01) begin + high_time = 7'h01; + w_edge = 1'b0; + low_time = 7'h01; + no_count = 1'b1; + end else begin + temp = round_frac(duty_cycle_fix*divide, 1); + + // comes from above round_frac + high_time = temp[`FRAC_PRECISION+7:`FRAC_PRECISION+1]; + // If the duty cycle * divide rounded is .5 or greater then this bit + // is set. + w_edge = temp[`FRAC_PRECISION]; // comes from round_frac + + // If the high time comes out to 0, it needs to be set to at least 1 + // and w_edge set to 0 + if(high_time == 7'h00) begin + high_time = 7'h01; + w_edge = 1'b0; + end + + if(high_time == divide) begin + high_time = divide - 1; + w_edge = 1'b1; + end + + // Calculate low_time based on the divide setting and set no_count to + // 0 as it is only used when divide is 1. + low_time = divide - high_time; + no_count = 1'b0; + end + + // Set the return value. + mmcm_pll_divider = {w_edge,no_count,high_time[5:0],low_time[5:0]}; + end +endfunction + +// This function calculates mx, delay_time, and phase_mux +// of a non-fractional counter based on the divide and phase +// +// NOTE: The only valid value for the MX bits is 2'b00 to ensure the coarse mux +// is used. +function [10:0] mmcm_pll_phase + ( + // divide must be an integer (use fractional if not) + // assumed that divide already checked to be valid + input [7:0] divide, // Max divide is 128 + + // Phase is given in degrees (-360,000 to 360,000) + input signed [31:0] phase + ); + + reg [`FIXED_WIDTH:1] phase_in_cycles; + reg [`FIXED_WIDTH:1] phase_fixed; + reg [1:0] mx; + reg [5:0] delay_time; + reg [2:0] phase_mux; + + reg [`FIXED_WIDTH:1] temp; + + begin +`ifdef DEBUG + $display("mmcm_pll_phase-divide:%d,phase:%d", + divide, phase); +`endif + + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + // If phase is less than 0, convert it to a positive phase shift + // Convert to (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point + if(phase < 0) begin + phase_fixed = ( (phase + 360000) << `FRAC_PRECISION ) / 1000; + end else begin + phase_fixed = ( phase << `FRAC_PRECISION ) / 1000; + end + + // Put phase in terms of decimal number of vco clock cycles + phase_in_cycles = ( phase_fixed * divide ) / 360; + +`ifdef DEBUG + $display("phase_in_cycles: %h", phase_in_cycles); +`endif + + + temp = round_frac(phase_in_cycles, 3); + + // set mx to 2'b00 that the phase mux from the VCO is enabled + mx = 2'b00; + phase_mux = temp[`FRAC_PRECISION:`FRAC_PRECISION-2]; + delay_time = temp[`FRAC_PRECISION+6:`FRAC_PRECISION+1]; + + `ifdef DEBUG + $display("temp: %h", temp); + `endif + + // Setup the return value + mmcm_pll_phase={mx, phase_mux, delay_time}; + end +endfunction + +// This function takes the divide value and outputs the necessary lock values +function [39:0] mmcm_pll_lock_lookup + ( + input [6:0] divide // Max divide is 64 + ); + + reg [759:0] lookup; + + begin + lookup = { + // This table is composed of: + // LockRefDly_LockFBDly_LockCnt_LockSatHigh_UnlockCnt + 40'b00110_00110_1111101000_1111101001_0000000001, //1 + 40'b00110_00110_1111101000_1111101001_0000000001, //2 + 40'b01000_01000_1111101000_1111101001_0000000001, //3 + 40'b01011_01011_1111101000_1111101001_0000000001, //4 + 40'b01110_01110_1111101000_1111101001_0000000001, //5 + 40'b10001_10001_1111101000_1111101001_0000000001, //6 + 40'b10011_10011_1111101000_1111101001_0000000001, //7 + 40'b10110_10110_1111101000_1111101001_0000000001, //8 + 40'b11001_11001_1111101000_1111101001_0000000001, //9 + 40'b11100_11100_1111101000_1111101001_0000000001, //10 + 40'b11111_11111_1110000100_1111101001_0000000001, //11 + 40'b11111_11111_1100111001_1111101001_0000000001, //12 + 40'b11111_11111_1011101110_1111101001_0000000001, //13 + 40'b11111_11111_1010111100_1111101001_0000000001, //14 + 40'b11111_11111_1010001010_1111101001_0000000001, //15 + 40'b11111_11111_1001110001_1111101001_0000000001, //16 + 40'b11111_11111_1000111111_1111101001_0000000001, //17 + 40'b11111_11111_1000100110_1111101001_0000000001, //18 + 40'b11111_11111_1000001101_1111101001_0000000001 //19 + + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + mmcm_pll_lock_lookup = lookup[ ((19-divide)*40) +: 40]; + `ifdef DEBUG + $display("lock_lookup: %b", mmcm_pll_lock_lookup); + `endif + end +endfunction + +// This function takes the divide value and the bandwidth setting of the PLL +// and outputs the digital filter settings necessary. Removing bandwidth setting for PLLE3. +function [9:0] mmcm_pll_filter_lookup + ( + input [6:0] divide // Max divide is 19 + ); + + reg [639:0] lookup; + reg [9:0] lookup_entry; + + begin + + lookup = { + // CP_RES_LFHF + 10'b0010_1111_01, //1 + 10'b0010_0011_11, //2 + 10'b0011_0011_11, //3 + 10'b0010_0001_11, //4 + 10'b0010_0110_11, //5 + 10'b0010_1010_11, //6 + 10'b0010_1010_11, //7 + 10'b0011_0110_11, //8 + 10'b0010_1100_11, //9 + 10'b0010_1100_11, //10 + 10'b0010_1100_11, //11 + 10'b0010_0010_11, //12 + 10'b0011_1100_11, //13 + 10'b0011_1100_11, //14 + 10'b0011_1100_11, //15 + 10'b0011_1100_11, //16 + 10'b0011_0010_11, //17 + 10'b0011_0010_11, //18 + 10'b0011_0010_11 //19 + }; + + mmcm_pll_filter_lookup = lookup [ ((19-divide)*10) +: 10]; + + `ifdef DEBUG + $display("filter_lookup: %b", mmcm_pll_filter_lookup); + `endif + end +endfunction + +// This function set the CLKOUTPHY divide settings to match +// the desired CLKOUTPHY_MODE setting. To create VCO_X2, then +// the CLKOUTPHY will be set to 2'b00 since the VCO is internally +// doubled and 2'b00 will represent divide by 1. Similarly "VCO" // will need to divide the doubled clock VCO clock frequency by // 2 therefore 2'b01 will match a divide by 2.And VCO_HALF will // need to divide the doubled VCO by 4, therefore 2'b10 +function [9:0] mmcm_pll_clkoutphy_calc + ( + input [8*9:0] CLKOUTPHY_MODE + ); + + if(CLKOUTPHY_MODE == "VCO_X2") begin + mmcm_pll_clkoutphy_calc= 2'b00; + end else if(CLKOUTPHY_MODE == "VCO") begin + mmcm_pll_clkoutphy_calc= 2'b01; + end else if(CLKOUTPHY_MODE == "CLKIN") begin + mmcm_pll_clkoutphy_calc= 2'b11; + end else begin // Assume "VCO_HALF" + mmcm_pll_clkoutphy_calc= 2'b10; + end + +endfunction + + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +function [37:0] mmcm_pll_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle // Multiplied by 100,000 + ); + + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_pll_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + // w_edge[13], no_count[12], high_time[11:6], low_time[5:0] + div_calc = mmcm_pll_divider(divide, duty_cycle); + // mx[10:9], pm[8:6], dt[5:0] + phase_calc = mmcm_pll_phase(divide, phase); + + // Return value is the upper and lower address of counter + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + `ifdef DEBUG + $display("div:%d dc:%d phase:%d ht:%d lt:%d ed:%d nc:%d mx:%d dt:%d pm:%d", + divide, duty_cycle, phase, div_calc[11:6], div_calc[5:0], + div_calc[13], div_calc[12], + phase_calc[16:15], phase_calc[5:0], 3'b000);//Removed PM_Rise bits + `endif + + mmcm_pll_count_calc = + { + // Upper Address + 6'h00, phase_calc[10:9], div_calc[13:12], phase_calc[5:0], + // Lower Address + phase_calc[8:6], 1'b0, div_calc[11:0] + }; + end +endfunction + + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +// for fractional multiply/divide functions. +// +// +function [37:0] mmcm_pll_frac_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle, // Multiplied by 1,000 + input [9:0] frac // Multiplied by 1000 + ); + + //Required for fractional divide calculations + reg [7:0] lt_frac; + reg [7:0] ht_frac; + + reg /*[7:0]*/ wf_fall_frac; + reg /*[7:0]*/ wf_rise_frac; + + reg [31:0] a; + reg [7:0] pm_rise_frac_filtered ; + reg [7:0] pm_fall_frac_filtered ; + reg [7:0] clkout0_divide_int; + reg [2:0] clkout0_divide_frac; + reg [7:0] even_part_high; + reg [7:0] even_part_low; + + reg [7:0] odd; + reg [7:0] odd_and_frac; + + reg [7:0] pm_fall; + reg [7:0] pm_rise; + reg [7:0] dt; + reg [7:0] dt_int; + reg [63:0] dt_calc; + + reg [7:0] pm_rise_frac; + reg [7:0] pm_fall_frac; + + reg [31:0] a_per_in_octets; + reg [31:0] a_phase_in_cycles; + + parameter precision = 0.125; + + reg [31:0] phase_fixed; // changed to 31:0 from 32:1 jt 5/2/11 + reg [31: 0] phase_pos; + reg [31: 0] phase_vco; + reg [31:0] temp;// changed to 31:0 from 32:1 jt 5/2/11 + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_pll_frac_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + //convert phase to fixed + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + + // Return value is + // Transfer data + // RESERVED [37:36] + // FRAC_TIME [35:33] + // FRAC_WF_FALL [32] + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + + + clkout0_divide_frac = frac / 125; + clkout0_divide_int = divide; + + even_part_high = clkout0_divide_int >> 1;//$rtoi(clkout0_divide_int / 2); + even_part_low = even_part_high; + + odd = clkout0_divide_int - even_part_high - even_part_low; + odd_and_frac = (8*odd) + clkout0_divide_frac; + + lt_frac = even_part_high - (odd_and_frac <= 9);//IF(odd_and_frac>9,even_part_high, even_part_high - 1) + ht_frac = even_part_low - (odd_and_frac <= 8);//IF(odd_and_frac>8,even_part_low, even_part_low- 1) + + pm_fall = {odd[6:0],2'b00} + {6'h00, clkout0_divide_frac[2:1]}; // using >> instead of clkout0_divide_frac / 2 + pm_rise = 0; //0 + + wf_fall_frac = (odd_and_frac >=2) && (odd_and_frac <=9);//IF(odd_and_frac>=2,IF(odd_and_frac <= 9,1,0),0) + wf_rise_frac = (odd_and_frac >=1) && (odd_and_frac <=8);//IF(odd_and_frac>=1,IF(odd_and_frac <= 8,1,0),0) + + + + //Calculate phase in fractional cycles + a_per_in_octets = (8 * divide) + (frac / 125) ; + a_phase_in_cycles = (phase+10) * a_per_in_octets / 360000 ;//Adding 1 due to rounding errors + pm_rise_frac = (a_phase_in_cycles[7:0] ==8'h00)?8'h00:a_phase_in_cycles[7:0] - {a_phase_in_cycles[7:3],3'b000}; + + dt_calc = ((phase+10) * a_per_in_octets / 8 )/360000 ;//TRUNC(phase* divide / 360); //or_simply (a_per_in_octets / 8) + dt = dt_calc[7:0]; + + pm_rise_frac_filtered = (pm_rise_frac >=8) ? (pm_rise_frac ) - 8: pm_rise_frac ; //((phase_fixed * (divide + frac / 1000)) / 360) - {pm_rise_frac[7:3],3'b000};//$rtoi(clkout0_phase * clkout0_divide / 45);//a; + + dt_int = dt + (& pm_rise_frac[7:4]); //IF(pm_rise_overwriting>7,dt+1,dt) + pm_fall_frac = pm_fall + pm_rise_frac; + pm_fall_frac_filtered = pm_fall + pm_rise_frac - {pm_fall_frac[7:3], 3'b000}; + + div_calc = mmcm_pll_divider(divide, duty_cycle); //Use to determine edge[7], no count[6] + phase_calc = mmcm_pll_phase(divide, phase);// returns{mx[1:0], phase_mux[2:0], delay_time[5:0]} + + mmcm_pll_frac_count_calc[37:0] = + { 2'b00, pm_fall_frac_filtered[2:0], wf_fall_frac, + 1'b0, clkout0_divide_frac[2:0], 1'b1, wf_rise_frac, phase_calc[10:9], div_calc[13:12], dt[5:0], + 3'b000, 1'b0, ht_frac[5:0], lt_frac[5:0] //Removed PM_Rise bits +// pm_rise_frac_filtered[2], pm_rise_frac_filtered[1], pm_rise_frac_filtered[0], 1'b0, ht_frac[5:0], lt_frac[5:0] + } ; + + `ifdef DEBUG + $display("-%d.%d p%d>> :DADDR_9_15 frac30to28.frac_en.wf_r_frac.dt:%b%d%d_%b:DADDR_7_13 pm_f_frac_filtered_29to27.wf_f_frac_26:%b%d:DADDR_8_14.pm_r_frac_filt_15to13.ht_frac.lt_frac:%b%b%b:", divide, frac, phase, clkout0_divide_frac, 1, wf_rise_frac, dt, pm_fall_frac_filtered, wf_fall_frac, 3'b000, ht_frac, lt_frac); + `endif + + end +endfunction + + diff --git a/src/ip/clk_wiz_0/mmcm_pll_drp_func_us_plus_mmcm.vh b/src/ip/clk_wiz_0/mmcm_pll_drp_func_us_plus_mmcm.vh new file mode 100755 index 0000000..fd26211 --- /dev/null +++ b/src/ip/clk_wiz_0/mmcm_pll_drp_func_us_plus_mmcm.vh @@ -0,0 +1,886 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Company: AMD +// Engineer: Jim Tatsukawa. Updated by Ralf Krueger +// Date: 7/30/2014 +// Design Name: MMCME4 DRP +// Module Name: mmcme4_drp_func.h +// Version: 1.31 +// Target Devices: UltraScale Plus Architecture +// Tool versions: 2017.1 +// Description: This header provides the functions necessary to +// calculate the DRP register values for UltraScal+ MMCM. +// +// Revision Notes: 3/22 - Updating lookup_low/lookup_high (CR) +// 4/13 - Fractional divide function in mmcm_frac_count_calc function +// 2/28/17 - Updated for Ultrascale Plus +// +// (c) Copyright 2009-2017, 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// This file contains confidential and proprietary information +// of AMD and is protected under U.S. and international copyright +// and other intellectual property laws. +// +// DISCLAIMER +// This disclaimer is not a license and does not grant any +// rights to the materials distributed herewith. Except as +// otherwise provided in a valid license issued to you by +// AMD, and to the maximum extent permitted by applicable +// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +// WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES +// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +// (2) AMD shall not be liable (whether in contract or tort, +// including negligence, or under any other theory of +// liability) for any loss or damage of any kind or nature +// related to, arising under or in connection with these +// materials, including for any direct, or any indirect, +// special, incidental, or consequential loss or damage +// (including loss of data, profits, goodwill, or any type of +// loss or damage suffered as a result of any action brought +// by a third party) even if such damage or loss was +// reasonably foreseeable or AMD had been advised of the +// possibility of the same. +// +// CRITICAL APPLICATIONS +// AMD products are not designed or intended to be fail- +// safe, or for use in any application requiring fail-safe +// performance, such as life-support or safety devices or +// systems, Class III medical devices, nuclear facilities, +// applications related to the deployment of airbags, or any +// other applications that could lead to death, personal +// injury, or severe property or environmental damage +// (individually and collectively, "Critical +// Applications"). Customer assumes the sole risk and +// liability of any use of AMD products in Critical +// Applications, subject only to applicable laws and +// regulations governing limitations on product liability. +// +// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +// PART OF THIS FILE AT ALL TIMES. +//////////////////////////////////////////////////////////// +// +/////////////////////////////////////////////////////////////////////////////// + +// These are user functions that should not be modified. Changes to the defines +// or code within the functions may alter the accuracy of the calculations. + +// Define debug to provide extra messages during elaboration +//`define DEBUG 1 + +// FRAC_PRECISION describes the width of the fractional portion of the fixed +// point numbers. These should not be modified, they are for development only +`define FRAC_PRECISION 10 +// FIXED_WIDTH describes the total size for fixed point calculations(int+frac). +// Warning: L.50 and below will not calculate properly with FIXED_WIDTHs +// greater than 32 +`define FIXED_WIDTH 32 + +// This function takes a fixed point number and rounds it to the nearest +// fractional precision bit. +function [`FIXED_WIDTH:1] round_frac + ( + // Input is (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point number + input [`FIXED_WIDTH:1] decimal, + + // This describes the precision of the fraction, for example a value + // of 1 would modify the fractional so that instead of being a .16 + // fractional, it would be a .1 (rounded to the nearest 0.5 in turn) + input [`FIXED_WIDTH:1] precision + ); + + begin + + `ifdef DEBUG + $display("round_frac - decimal: %h, precision: %h", decimal, precision); + `endif + // If the fractional precision bit is high then round up + if( decimal[(`FRAC_PRECISION-precision)] == 1'b1) begin + round_frac = decimal + (1'b1 << (`FRAC_PRECISION-precision)); + end else begin + round_frac = decimal; + end + `ifdef DEBUG + $display("round_frac: %h", round_frac); + `endif + end +endfunction + +// This function calculates high_time, low_time, w_edge, and no_count +// of a non-fractional counter based on the divide and duty cycle +// +// NOTE: high_time and low_time are returned as integers between 0 and 63 +// inclusive. 64 should equal 6'b000000 (in other words it is okay to +// ignore the overflow) +function [13:0] mmcm_pll_divider + ( + input [7:0] divide, // Max divide is 128 + input [31:0] duty_cycle // Duty cycle is multiplied by 100,000 + ); + + reg [`FIXED_WIDTH:1] duty_cycle_fix; + + // High/Low time is initially calculated with a wider integer to prevent a + // calculation error when it overflows to 64. + reg [6:0] high_time; + reg [6:0] low_time; + reg w_edge; + reg no_count; + + reg [`FIXED_WIDTH:1] temp; + + begin + // Duty Cycle must be between 0 and 1,000 + if(duty_cycle <=0 || duty_cycle >= 100000) begin +`ifndef SYNTHESIS + $display("ERROR: duty_cycle: %d is invalid", duty_cycle); + `endif + $finish; + end + + // Convert to FIXED_WIDTH-FRAC_PRECISION.FRAC_PRECISION fixed point + duty_cycle_fix = (duty_cycle << `FRAC_PRECISION) / 100_000; + + `ifdef DEBUG + $display("duty_cycle_fix: %h", duty_cycle_fix); + `endif + + // If the divide is 1 nothing needs to be set except the no_count bit. + // Other values are dummies + if(divide == 7'h01) begin + high_time = 7'h01; + w_edge = 1'b0; + low_time = 7'h01; + no_count = 1'b1; + end else begin + temp = round_frac(duty_cycle_fix*divide, 1); + + // comes from above round_frac + high_time = temp[`FRAC_PRECISION+7:`FRAC_PRECISION+1]; + // If the duty cycle * divide rounded is .5 or greater then this bit + // is set. + w_edge = temp[`FRAC_PRECISION]; // comes from round_frac + + // If the high time comes out to 0, it needs to be set to at least 1 + // and w_edge set to 0 + if(high_time == 7'h00) begin + high_time = 7'h01; + w_edge = 1'b0; + end + + if(high_time == divide) begin + high_time = divide - 1; + w_edge = 1'b1; + end + + // Calculate low_time based on the divide setting and set no_count to + // 0 as it is only used when divide is 1. + low_time = divide - high_time; + no_count = 1'b0; + end + + // Set the return value. + mmcm_pll_divider = {w_edge,no_count,high_time[5:0],low_time[5:0]}; + end +endfunction + +// This function calculates mx, delay_time, and phase_mux +// of a non-fractional counter based on the divide and phase +// +// NOTE: The only valid value for the MX bits is 2'b00 to ensure the coarse mux +// is used. +function [10:0] mmcm_pll_phase + ( + // divide must be an integer (use fractional if not) + // assumed that divide already checked to be valid + input [7:0] divide, // Max divide is 128 + + // Phase is given in degrees (-360,000 to 360,000) + input signed [31:0] phase + ); + + reg [`FIXED_WIDTH:1] phase_in_cycles; + reg [`FIXED_WIDTH:1] phase_fixed; + reg [1:0] mx; + reg [5:0] delay_time; + reg [2:0] phase_mux; + + reg [`FIXED_WIDTH:1] temp; + + begin +`ifdef DEBUG + $display("mmcm_phase-divide:%d,phase:%d", divide, phase); +`endif + + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + // If phase is less than 0, convert it to a positive phase shift + // Convert to (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point + if(phase < 0) begin + phase_fixed = ( (phase + 360000) << `FRAC_PRECISION ) / 1000; + end else begin + phase_fixed = ( phase << `FRAC_PRECISION ) / 1000; + end + + // Put phase in terms of decimal number of vco clock cycles + phase_in_cycles = ( phase_fixed * divide ) / 360; + +`ifdef DEBUG + $display("phase_in_cycles: %h", phase_in_cycles); +`endif + + temp = round_frac(phase_in_cycles, 3); + + // set mx to 2'b00 that the phase mux from the VCO is enabled + mx = 2'b00; + phase_mux = temp[`FRAC_PRECISION:`FRAC_PRECISION-2]; + delay_time = temp[`FRAC_PRECISION+6:`FRAC_PRECISION+1]; + + `ifdef DEBUG + $display("temp: %h", temp); + `endif + + // Setup the return value + mmcm_pll_phase={mx, phase_mux, delay_time}; + end +endfunction + +// This function takes the divide value and outputs the necessary lock values +function [39:0] mmcm_pll_lock_lookup + ( + input [7:0] divide // Max M divide is 128 in UltrascalePlus + ); + + reg [5119:0] lookup; + + begin + lookup = { + // This table is composed of: + // LockRefDly_LockFBDly_LockCnt_LockSatHigh_UnlockCnt + 40'b00110_00110_1111101000_1111101001_0000000001, // M=1 (not allowed) + 40'b00110_00110_1111101000_1111101001_0000000001, // M=2 + 40'b01000_01000_1111101000_1111101001_0000000001, // M=3 + 40'b01011_01011_1111101000_1111101001_0000000001, // M=4 + 40'b01110_01110_1111101000_1111101001_0000000001, // M=5 + 40'b10001_10001_1111101000_1111101001_0000000001, // M=6 + 40'b10011_10011_1111101000_1111101001_0000000001, // M=7 + 40'b10110_10110_1111101000_1111101001_0000000001, + 40'b11001_11001_1111101000_1111101001_0000000001, + 40'b11100_11100_1111101000_1111101001_0000000001, + 40'b11111_11111_1110000100_1111101001_0000000001, + 40'b11111_11111_1100111001_1111101001_0000000001, + 40'b11111_11111_1011101110_1111101001_0000000001, + 40'b11111_11111_1010111100_1111101001_0000000001, + 40'b11111_11111_1010001010_1111101001_0000000001, + 40'b11111_11111_1001110001_1111101001_0000000001, + 40'b11111_11111_1000111111_1111101001_0000000001, + 40'b11111_11111_1000100110_1111101001_0000000001, + 40'b11111_11111_1000001101_1111101001_0000000001, + 40'b11111_11111_0111110100_1111101001_0000000001, + 40'b11111_11111_0111011011_1111101001_0000000001, + 40'b11111_11111_0111000010_1111101001_0000000001, + 40'b11111_11111_0110101001_1111101001_0000000001, + 40'b11111_11111_0110010000_1111101001_0000000001, + 40'b11111_11111_0110010000_1111101001_0000000001, + 40'b11111_11111_0101110111_1111101001_0000000001, + 40'b11111_11111_0101011110_1111101001_0000000001, + 40'b11111_11111_0101011110_1111101001_0000000001, + 40'b11111_11111_0101000101_1111101001_0000000001, + 40'b11111_11111_0101000101_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100101100_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0100010011_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, + 40'b11111_11111_0011111010_1111101001_0000000001, // M=127 + 40'b11111_11111_0011111010_1111101001_0000000001 // M=128 + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + mmcm_pll_lock_lookup = lookup[ ((128-divide)*40) +: 40]; + `ifdef DEBUG + $display("lock_lookup: %b", mmcm_pll_lock_lookup); + `endif + end +endfunction + +// This function takes the divide value and the bandwidth setting of the MMCM +// and outputs the digital filter settings necessary. +function [9:0] mmcm_pll_filter_lookup + ( + input [7:0] divide, // input [7:0] divide // Max M divide is 128 in UltraScalePlus + input [8*9:0] BANDWIDTH + ); + + reg [1279:0] lookup_low; + reg [1279:0] lookup_high; + + reg [9:0] lookup_entry; + + begin + lookup_low = { + // CP_RES_LFHF + 10'b0011_1111_11, // M=1 - not legal + 10'b0011_1111_11, // M=2 + 10'b0011_1101_11, // M=3 + 10'b0011_0101_11, // M=4 + 10'b0011_1001_11, // M=5 + 10'b0011_1110_11, // M=6 + 10'b0011_1110_11, // M=7 + 10'b0011_0001_11, + 10'b0011_0110_11, + 10'b0011_0110_11, + 10'b0011_0110_11, + 10'b0011_1010_11, + 10'b0011_1010_11, + 10'b0011_1010_11, + 10'b0100_0110_11, + 10'b0011_1100_11, + 10'b1110_0110_11, + 10'b1111_0110_11, + 10'b1110_1010_11, + 10'b1110_1010_11, + 10'b1111_1010_11, + 10'b1111_1010_11, + 10'b1111_1010_11, + 10'b1111_1010_11, + 10'b1111_1010_11, + 10'b1101_1100_11, + 10'b1101_1100_11, + 10'b1101_1100_11, + 10'b1110_1100_11, + 10'b1110_1100_11, + 10'b1110_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1110_0010_11, + 10'b1110_0010_11, + 10'b1110_0010_11, + 10'b1110_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, // M=127 + 10'b1101_1000_11 // M=128 +}; + + lookup_high = { + // CP_RES_LFHF + 10'b0111_1111_11, // M=1 - not legal + 10'b0111_1111_11, // M=2 + 10'b1110_1111_11, // M=3 + 10'b1111_1111_11, // M=4 + 10'b1111_1011_11, // M=5 + 10'b1111_1101_11, // M=6 + 10'b1111_0011_11, // M=7 + 10'b1110_0101_11, + 10'b1111_1001_11, + 10'b1111_1001_11, + 10'b1110_1110_11, + 10'b1111_1110_11, + 10'b1111_0001_11, + 10'b1111_0001_11, + 10'b1111_0001_11, + 10'b1110_0110_11, + 10'b1110_0110_11, + 10'b1111_0110_11, + 10'b1110_1010_11, + 10'b1110_1010_11, + 10'b1111_1010_11, + 10'b1111_1010_11, + 10'b1111_1010_11, + 10'b1111_1010_11, + 10'b1111_1010_11, + 10'b1101_1100_11, + 10'b1101_1100_11, + 10'b1101_1100_11, + 10'b1110_1100_11, + 10'b1110_1100_11, + 10'b1110_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1111_1100_11, + 10'b1110_0010_11, + 10'b1110_0010_11, + 10'b1110_0010_11, + 10'b1110_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1111_0010_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1100_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1101_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1110_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1111_0100_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11, + 10'b1101_1000_11 // M=128 +}; + + // Set lookup_entry with the explicit bits from lookup with a part select + if(BANDWIDTH == "LOW") begin + // Low Bandwidth + mmcm_pll_filter_lookup = lookup_low[ ((128-divide)*10) +: 10]; + end else begin + // High or optimized bandwidth + mmcm_pll_filter_lookup = lookup_high[ ((128-divide)*10) +: 10]; + end + + `ifdef DEBUG + $display("filter_lookup: %b", mmcm_pll_filter_lookup); + `endif + end +endfunction + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +function [37:0] mmcm_pll_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle // Multiplied by 100,000 + ); + + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_pll_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + // w_edge[13], no_count[12], high_time[11:6], low_time[5:0] + div_calc = mmcm_pll_divider(divide, duty_cycle); + // mx[10:9], pm[8:6], dt[5:0] + phase_calc = mmcm_pll_phase(divide, phase); + + // Return value is the upper and lower address of counter + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + `ifdef DEBUG + $display("div:%d dc:%d phase:%d ht:%d lt:%d ed:%d nc:%d mx:%d dt:%d pm:%d", + divide, duty_cycle, phase, div_calc[11:6], div_calc[5:0], + div_calc[13], div_calc[12], + phase_calc[16:15], phase_calc[5:0], phase_calc[14:12]); + `endif + + mmcm_pll_count_calc = + { + // Upper Address + 6'h00, phase_calc[10:9], div_calc[13:12], phase_calc[5:0], + // Lower Address + phase_calc[8:6], 1'b0, div_calc[11:0] + }; + end +endfunction + + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +// for fractional multiply/divide functions. +// +// +function [37:0] mmcm_frac_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle, // Multiplied by 100,000. Not programmable in fractional + input [9:0] frac // Multiplied by 1000 + ); + + //Required for fractional divide calculations + reg [7:0] lt_frac; + reg [7:0] ht_frac; + + reg /*[7:0]*/ wf_fall_frac; + reg /*[7:0]*/ wf_rise_frac; + + reg [31:0] a; + reg [7:0] pm_rise_frac_filtered ; + reg [7:0] pm_fall_frac_filtered ; + reg [7:0] clkout0_divide_int; + reg [2:0] clkout0_divide_frac; + reg [7:0] even_part_high; + reg [7:0] even_part_low; + + reg [7:0] odd; + reg [7:0] odd_and_frac; + + reg [7:0] pm_fall; + reg [7:0] pm_rise; + reg [7:0] dt; + reg [7:0] dt_int; + reg [63:0] dt_calc; + + reg [7:0] pm_rise_frac; + reg [7:0] pm_fall_frac; + + reg [31:0] a_per_in_octets; + reg [31:0] a_phase_in_cycles; + + parameter precision = 0.125; + + reg [31:0] phase_fixed; // changed to 31:0 from 32:1 jt 5/2/11 + reg [31: 0] phase_pos; + reg [31: 0] phase_vco; + reg [31:0] temp;// changed to 31:0 from 32:1 jt 5/2/11 + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("mmcm_frac_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + //convert phase to fixed + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + + // Return value is + // Transfer data + // RESERVED [37:36] + // FRAC_TIME [35:33] + // FRAC_WF_FALL [32] + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + + + clkout0_divide_frac = frac / 125; + clkout0_divide_int = divide; + + even_part_high = clkout0_divide_int >> 1;//$rtoi(clkout0_divide_int / 2); + even_part_low = even_part_high; + + odd = clkout0_divide_int - even_part_high - even_part_low; + odd_and_frac = (8*odd) + clkout0_divide_frac; + + lt_frac = even_part_high - (odd_and_frac <= 9);//IF(odd_and_frac>9,even_part_high, even_part_high - 1) + ht_frac = even_part_low - (odd_and_frac <= 8);//IF(odd_and_frac>8,even_part_low, even_part_low- 1) + + pm_fall = {odd[6:0],2'b00} + {6'h00, clkout0_divide_frac[2:1]}; // using >> instead of clkout0_divide_frac / 2 + pm_rise = 0; //0 + + wf_fall_frac = ((odd_and_frac >=2) && (odd_and_frac <=9)) || (clkout0_divide_int == 2 && clkout0_divide_frac == 1); //IF(odd_and_frac>=2,IF(odd_and_frac <= 9,1,0),0) + wf_rise_frac = (odd_and_frac >=1) && (odd_and_frac <=8); //IF(odd_and_frac>=1,IF(odd_and_frac <= 8,1,0),0) + + + + //Calculate phase in fractional cycles + a_per_in_octets = (8 * divide) + (frac / 125) ; + a_phase_in_cycles = (phase+10) * a_per_in_octets / 360000 ;//Adding 1 due to rounding errors + pm_rise_frac = (a_phase_in_cycles[7:0] ==8'h00)?8'h00:a_phase_in_cycles[7:0] - {a_phase_in_cycles[7:3],3'b000}; + + dt_calc = ((phase+10) * a_per_in_octets / 8 )/360000 ;//TRUNC(phase* divide / 360); //or_simply (a_per_in_octets / 8) + dt = dt_calc[7:0]; + + pm_rise_frac_filtered = (pm_rise_frac >=8) ? (pm_rise_frac ) - 8: pm_rise_frac ; //((phase_fixed * (divide + frac / 1000)) / 360) - {pm_rise_frac[7:3],3'b000};//$rtoi(clkout0_phase * clkout0_divide / 45);//a; + + dt_int = dt + (& pm_rise_frac[7:4]); //IF(pm_rise_overwriting>7,dt+1,dt) + pm_fall_frac = pm_fall + pm_rise_frac; + pm_fall_frac_filtered = pm_fall + pm_rise_frac - {pm_fall_frac[7:3], 3'b000}; + + div_calc = mmcm_pll_divider(divide, duty_cycle); //Use to determine edge[7], no count[6] + phase_calc = mmcm_pll_phase(divide, phase);// returns{mx[1:0], phase_mux[2:0], delay_time[5:0]} + + mmcm_frac_count_calc[37:0] = + { 2'b00, pm_fall_frac_filtered[2:0], wf_fall_frac, + 1'b0, clkout0_divide_frac[2:0], 1'b1, wf_rise_frac, phase_calc[10:9], 2'b00, dt[5:0], + pm_rise_frac_filtered[2], pm_rise_frac_filtered[1], pm_rise_frac_filtered[0], 1'b0, ht_frac[5:0], lt_frac[5:0] + } ; + + `ifdef DEBUG + $display("-%d.%d p%d>> :DADDR_9_15 frac30to28.frac_en.wf_r_frac.dt:%b%d%d_%b:DADDR_7_13 pm_f_frac_filtered_29to27.wf_f_frac_26:%b%d:DADDR_8_14.pm_r_frac_filt_15to13.ht_frac.lt_frac:%b%b%b:", divide, frac, phase, clkout0_divide_frac, 1, wf_rise_frac, dt, pm_fall_frac_filtered, wf_fall_frac, pm_rise_frac_filtered, ht_frac, lt_frac); + `endif + + end +endfunction + diff --git a/src/ip/clk_wiz_0/mmcm_pll_drp_func_us_plus_pll.vh b/src/ip/clk_wiz_0/mmcm_pll_drp_func_us_plus_pll.vh new file mode 100755 index 0000000..0899943 --- /dev/null +++ b/src/ip/clk_wiz_0/mmcm_pll_drp_func_us_plus_pll.vh @@ -0,0 +1,561 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Company: AMD +// Engineer: Jim Tatsukawa, Ralf Krueger, updated for Ultrascale+ +// Date: 6/15/2015 +// Design Name: PLLE4 DRP +// Module Name: plle4_drp_func.h +// Version: 2.0 +// Target Devices: UltraScale+ Architecture +// Tool versions: 2017.1 +// Description: This header provides the functions necessary to +// calculate the DRP register values for the V6 PLL. +// +// Revision Notes: 8/11 - PLLE3 updated for PLLE3 file 4564419 +// Revision Notes: 6/15 - pll_filter_lookup fixed for max M of 19 +// M_Rise bits have been removed for PLLE3 +// Revision Notes: 2/28/17 - pll_filter_lookup and CPRES updated for +// Ultrascale+ and for max M of 21 +// +// (c) Copyright 2009-2017, 2023 Advanced Micro Devices, Inc. All rights reserved. +// +// This file contains confidential and proprietary information +// of AMD and is protected under U.S. and international copyright +// and other intellectual property laws. +// +// DISCLAIMER +// This disclaimer is not a license and does not grant any +// rights to the materials distributed herewith. Except as +// otherwise provided in a valid license issued to you by +// AMD, and to the maximum extent permitted by applicable +// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND +// WITH ALL FAULTS, AND AMD HEREBY DISCLAIMS ALL WARRANTIES +// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING +// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON- +// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and +// (2) AMD shall not be liable (whether in contract or tort, +// including negligence, or under any other theory of +// liability) for any loss or damage of any kind or nature +// related to, arising under or in connection with these +// materials, including for any direct, or any indirect, +// special, incidental, or consequential loss or damage +// (including loss of data, profits, goodwill, or any type of +// loss or damage suffered as a result of any action brought +// by a third party) even if such damage or loss was +// reasonably foreseeable or AMD had been advised of the +// possibility of the same. +// +// CRITICAL APPLICATIONS +// AMD products are not designed or intended to be fail- +// safe, or for use in any application requiring fail-safe +// performance, such as life-support or safety devices or +// systems, Class III medical devices, nuclear facilities, +// applications related to the deployment of airbags, or any +// other applications that could lead to death, personal +// injury, or severe property or environmental damage +// (individually and collectively, "Critical +// Applications"). Customer assumes the sole risk and +// liability of any use of AMD products in Critical +// Applications, subject only to applicable laws and +// regulations governing limitations on product liability. +// +// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS +// PART OF THIS FILE AT ALL TIMES. +//////////////////////////////////////////////////////////// +// +/////////////////////////////////////////////////////////////////////////////// + +// These are user functions that should not be modified. Changes to the defines +// or code within the functions may alter the accuracy of the calculations. + +// Define debug to provide extra messages durring elaboration +//`define DEBUG 1 + +// FRAC_PRECISION describes the width of the fractional portion of the fixed +// point numbers. These should not be modified, they are for development +// only +`define FRAC_PRECISION 10 +// FIXED_WIDTH describes the total size for fixed point calculations(int+frac). +// Warning: L.50 and below will not calculate properly with FIXED_WIDTHs +// greater than 32 +`define FIXED_WIDTH 32 + +// This function takes a fixed point number and rounds it to the nearest +// fractional precision bit. +function [`FIXED_WIDTH:1] round_frac + ( + // Input is (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point number + input [`FIXED_WIDTH:1] decimal, + + // This describes the precision of the fraction, for example a value + // of 1 would modify the fractional so that instead of being a .16 + // fractional, it would be a .1 (rounded to the nearest 0.5 in turn) + input [`FIXED_WIDTH:1] precision + ); + + begin + + `ifdef DEBUG + $display("round_frac - decimal: %h, precision: %h", decimal, precision); + `endif + // If the fractional precision bit is high then round up + if( decimal[(`FRAC_PRECISION-precision)] == 1'b1) begin + round_frac = decimal + (1'b1 << (`FRAC_PRECISION-precision)); + end else begin + round_frac = decimal; + end + `ifdef DEBUG + $display("round_frac: %h", round_frac); + `endif + end +endfunction + +// This function calculates high_time, low_time, w_edge, and no_count +// of a non-fractional counter based on the divide and duty cycle +// +// NOTE: high_time and low_time are returned as integers between 0 and 63 +// inclusive. 64 should equal 6'b000000 (in other words it is okay to +// ignore the overflow) +function [13:0] mmcm_pll_divider + ( + input [7:0] divide, // Max divide is 128 + input [31:0] duty_cycle // Duty cycle is multiplied by 100,000 + ); + + reg [`FIXED_WIDTH:1] duty_cycle_fix; + + // High/Low time is initially calculated with a wider integer to prevent a + // calculation error when it overflows to 64. + reg [6:0] high_time; + reg [6:0] low_time; + reg w_edge; + reg no_count; + + reg [`FIXED_WIDTH:1] temp; + + begin + // Duty Cycle must be between 0 and 1,000 + if(duty_cycle <=0 || duty_cycle >= 100000) begin +`ifndef SYNTHESIS + $display("ERROR: duty_cycle: %d is invalid", duty_cycle); + `endif + $finish; + end + + // Convert to FIXED_WIDTH-FRAC_PRECISION.FRAC_PRECISION fixed point + duty_cycle_fix = (duty_cycle << `FRAC_PRECISION) / 100_000; + + `ifdef DEBUG + $display("duty_cycle_fix: %h", duty_cycle_fix); + `endif + + // If the divide is 1 nothing needs to be set except the no_count bit. + // Other values are dummies + if(divide == 7'h01) begin + high_time = 7'h01; + w_edge = 1'b0; + low_time = 7'h01; + no_count = 1'b1; + end else begin + temp = round_frac(duty_cycle_fix*divide, 1); + + // comes from above round_frac + high_time = temp[`FRAC_PRECISION+7:`FRAC_PRECISION+1]; + // If the duty cycle * divide rounded is .5 or greater then this bit + // is set. + w_edge = temp[`FRAC_PRECISION]; // comes from round_frac + + // If the high time comes out to 0, it needs to be set to at least 1 + // and w_edge set to 0 + if(high_time == 7'h00) begin + high_time = 7'h01; + w_edge = 1'b0; + end + + if(high_time == divide) begin + high_time = divide - 1; + w_edge = 1'b1; + end + + // Calculate low_time based on the divide setting and set no_count to + // 0 as it is only used when divide is 1. + low_time = divide - high_time; + no_count = 1'b0; + end + + // Set the return value. + mmcm_pll_divider = {w_edge,no_count,high_time[5:0],low_time[5:0]}; + end +endfunction + +// This function calculates mx, delay_time, and phase_mux +// of a non-fractional counter based on the divide and phase +// +// NOTE: The only valid value for the MX bits is 2'b00 to ensure the coarse mux +// is used. +function [10:0] mmcm_pll_phase + ( + // divide must be an integer (use fractional if not) + // assumed that divide already checked to be valid + input [7:0] divide, // Max divide is 128 + + // Phase is given in degrees (-360,000 to 360,000) + input signed [31:0] phase + ); + + reg [`FIXED_WIDTH:1] phase_in_cycles; + reg [`FIXED_WIDTH:1] phase_fixed; + reg [1:0] mx; + reg [5:0] delay_time; + reg [2:0] phase_mux; + + reg [`FIXED_WIDTH:1] temp; + + begin +`ifdef DEBUG + $display("pll_phase-divide:%d,phase:%d", + divide, phase); +`endif + + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); +`endif + $finish; + end + + // If phase is less than 0, convert it to a positive phase shift + // Convert to (FIXED_WIDTH-FRAC_PRECISION).FRAC_PRECISION fixed point + if(phase < 0) begin + phase_fixed = ( (phase + 360000) << `FRAC_PRECISION ) / 1000; + end else begin + phase_fixed = ( phase << `FRAC_PRECISION ) / 1000; + end + + // Put phase in terms of decimal number of vco clock cycles + phase_in_cycles = ( phase_fixed * divide ) / 360; + +`ifdef DEBUG + $display("phase_in_cycles: %h", phase_in_cycles); +`endif + + + temp = round_frac(phase_in_cycles, 3); + + // set mx to 2'b00 that the phase mux from the VCO is enabled + mx = 2'b00; + phase_mux = temp[`FRAC_PRECISION:`FRAC_PRECISION-2]; + delay_time = temp[`FRAC_PRECISION+6:`FRAC_PRECISION+1]; + + `ifdef DEBUG + $display("temp: %h", temp); + `endif + + // Setup the return value + mmcm_pll_phase={mx, phase_mux, delay_time}; + end +endfunction + +// This function takes the divide value and outputs the necessary lock values +function [39:0] mmcm_pll_lock_lookup + ( + input [6:0] divide // Max divide is 21 + ); + + reg [839:0] lookup; + + begin + lookup = { + // This table is composed of: + // LockRefDly_LockFBDly_LockCnt_LockSatHigh_UnlockCnt + 40'b00110_00110_1111101000_1111101001_0000000001, //1 illegal in Ultrascale+ + 40'b00110_00110_1111101000_1111101001_0000000001, //2 + 40'b01000_01000_1111101000_1111101001_0000000001, //3 + 40'b01011_01011_1111101000_1111101001_0000000001, //4 + 40'b01110_01110_1111101000_1111101001_0000000001, //5 + 40'b10001_10001_1111101000_1111101001_0000000001, //6 + 40'b10011_10011_1111101000_1111101001_0000000001, //7 + 40'b10110_10110_1111101000_1111101001_0000000001, //8 + 40'b11001_11001_1111101000_1111101001_0000000001, //9 + 40'b11100_11100_1111101000_1111101001_0000000001, //10 + 40'b11111_11111_1110000100_1111101001_0000000001, //11 + 40'b11111_11111_1100111001_1111101001_0000000001, //12 + 40'b11111_11111_1011101110_1111101001_0000000001, //13 + 40'b11111_11111_1010111100_1111101001_0000000001, //14 + 40'b11111_11111_1010001010_1111101001_0000000001, //15 + 40'b11111_11111_1001110001_1111101001_0000000001, //16 + 40'b11111_11111_1000111111_1111101001_0000000001, //17 + 40'b11111_11111_1000100110_1111101001_0000000001, //18 + 40'b11111_11111_1000001101_1111101001_0000000001, //19 + 40'b11111_11111_0111110100_1111101001_0000000001, //20 + 40'b11111_11111_0111011011_1111101001_0000000001 //21 + }; + + // Set lookup_entry with the explicit bits from lookup with a part select + mmcm_pll_lock_lookup = lookup[ ((21-divide)*40) +: 40]; + `ifdef DEBUG + $display("lock_lookup: %b", pll_lock_lookup); + `endif + end +endfunction + +// This function takes the divide value and the bandwidth setting of the PLL +// and outputs the digital filter settings necessary. Removing bandwidth setting for PLLE3. +function [9:0] mmcm_pll_filter_lookup + ( + input [6:0] divide // Max divide is 21 + ); + + reg [209:0] lookup; + reg [9:0] lookup_entry; + + begin + + lookup = { + // CP_RES_LFHF + 10'b0011_0111_11, //1 not legal in Ultrascale+ + 10'b0011_0111_11, //2 + 10'b0011_0011_11, //3 + 10'b0011_1001_11, //4 + 10'b0011_0001_11, //5 + 10'b0100_1110_11, //6 + 10'b0011_0110_11, //7 + 10'b0011_1010_11, //8 + 10'b0111_1001_11, //9 + 10'b0111_1001_11, //10 + 10'b0101_0110_11, //11 + 10'b1100_0101_11, //12 + 10'b0101_1010_11, //13 + 10'b0110_0110_11, //14 + 10'b0110_1010_11, //15 + 10'b0111_0110_11, //16 + 10'b1111_0101_11, //17 + 10'b1100_0110_11, //18 + 10'b1110_0001_11, //19 + 10'b1101_0110_11, //20 + 10'b1111_0001_11 //21 + }; + + mmcm_pll_filter_lookup = lookup [ ((21-divide)*10) +: 10]; + + `ifdef DEBUG + $display("filter_lookup: %b", pll_filter_lookup); + `endif + end +endfunction + +// This function set the CLKOUTPHY divide settings to match +// the desired CLKOUTPHY_MODE setting. To create VCO_X2, then +// the CLKOUTPHY will be set to 2'b00 since the VCO is internally +// doubled and 2'b00 will represent divide by 1. Similarly "VCO" +// will need to divide the doubled clock VCO clock frequency by +// 2 therefore 2'b01 will match a divide by 2.And VCO_HALF will +// need to divide the doubled VCO by 4, therefore 2'b10 +function [9:0] mmcm_pll_clkoutphy_calc + ( + input [8*9:0] CLKOUTPHY_MODE + ); + + if(CLKOUTPHY_MODE == "VCO_X2") begin + mmcm_pll_clkoutphy_calc= 2'b00; + end else if(CLKOUTPHY_MODE == "VCO") begin + mmcm_pll_clkoutphy_calc= 2'b01; + end else if(CLKOUTPHY_MODE == "CLKIN") begin + mmcm_pll_clkoutphy_calc= 2'b11; + end else begin // Assume "VCO_HALF" + mmcm_pll_clkoutphy_calc= 2'b10; + end + +endfunction + + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +function [37:0] mmcm_pll_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle // Multiplied by 100,000 + ); + + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("pll_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + // w_edge[13], no_count[12], high_time[11:6], low_time[5:0] + div_calc = mmcm_pll_divider(divide, duty_cycle); + // mx[10:9], pm[8:6], dt[5:0] + phase_calc = mmcm_pll_phase(divide, phase); + + // Return value is the upper and lower address of counter + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + `ifdef DEBUG + $display("div:%d dc:%d phase:%d ht:%d lt:%d ed:%d nc:%d mx:%d dt:%d pm:%d", + divide, duty_cycle, phase, div_calc[11:6], div_calc[5:0], + div_calc[13], div_calc[12], + phase_calc[16:15], phase_calc[5:0], 3'b000); //Removed PM_Rise bits + `endif + + mmcm_pll_count_calc = + { + // Upper Address + 6'h00, phase_calc[10:9], div_calc[13:12], phase_calc[5:0], + // Lower Address + phase_calc[8:6], 1'b0, div_calc[11:0] + }; + end +endfunction + + +// This function takes in the divide, phase, and duty cycle +// setting to calculate the upper and lower counter registers. +// for fractional multiply/divide functions. +// +// +function [37:0] mmcm_pll_frac_count_calc + ( + input [7:0] divide, // Max divide is 128 + input signed [31:0] phase, + input [31:0] duty_cycle, // Multiplied by 1,000 + input [9:0] frac // Multiplied by 1000 + ); + + //Required for fractional divide calculations + reg [7:0] lt_frac; + reg [7:0] ht_frac; + + reg /*[7:0]*/ wf_fall_frac; + reg /*[7:0]*/ wf_rise_frac; + + reg [31:0] a; + reg [7:0] pm_rise_frac_filtered ; + reg [7:0] pm_fall_frac_filtered ; + reg [7:0] clkout0_divide_int; + reg [2:0] clkout0_divide_frac; + reg [7:0] even_part_high; + reg [7:0] even_part_low; + + reg [7:0] odd; + reg [7:0] odd_and_frac; + + reg [7:0] pm_fall; + reg [7:0] pm_rise; + reg [7:0] dt; + reg [7:0] dt_int; + reg [63:0] dt_calc; + + reg [7:0] pm_rise_frac; + reg [7:0] pm_fall_frac; + + reg [31:0] a_per_in_octets; + reg [31:0] a_phase_in_cycles; + + parameter precision = 0.125; + + reg [31:0] phase_fixed; // changed to 31:0 from 32:1 jt 5/2/11 + reg [31: 0] phase_pos; + reg [31: 0] phase_vco; + reg [31:0] temp;// changed to 31:0 from 32:1 jt 5/2/11 + reg [13:0] div_calc; + reg [16:0] phase_calc; + + begin + `ifdef DEBUG + $display("pll_frac_count_calc- divide:%h, phase:%d, duty_cycle:%d", + divide, phase, duty_cycle); + `endif + + //convert phase to fixed + if ((phase < -360000) || (phase > 360000)) begin +`ifndef SYNTHESIS + $display("ERROR: phase of $phase is not between -360000 and 360000"); + `endif + $finish; + end + + + // Return value is + // Transfer data + // RESERVED [37:36] + // FRAC_TIME [35:33] + // FRAC_WF_FALL [32] + // Upper address is: + // RESERVED [31:26] + // MX [25:24] + // EDGE [23] + // NOCOUNT [22] + // DELAY_TIME [21:16] + // Lower Address is: + // PHASE_MUX [15:13] + // RESERVED [12] + // HIGH_TIME [11:6] + // LOW_TIME [5:0] + + + + clkout0_divide_frac = frac / 125; + clkout0_divide_int = divide; + + even_part_high = clkout0_divide_int >> 1;//$rtoi(clkout0_divide_int / 2); + even_part_low = even_part_high; + + odd = clkout0_divide_int - even_part_high - even_part_low; + odd_and_frac = (8*odd) + clkout0_divide_frac; + + lt_frac = even_part_high - (odd_and_frac <= 9);//IF(odd_and_frac>9,even_part_high, even_part_high - 1) + ht_frac = even_part_low - (odd_and_frac <= 8);//IF(odd_and_frac>8,even_part_low, even_part_low- 1) + + pm_fall = {odd[6:0],2'b00} + {6'h00, clkout0_divide_frac[2:1]}; // using >> instead of clkout0_divide_frac / 2 + pm_rise = 0; //0 + + wf_fall_frac = (odd_and_frac >=2) && (odd_and_frac <=9);//IF(odd_and_frac>=2,IF(odd_and_frac <= 9,1,0),0) + wf_rise_frac = (odd_and_frac >=1) && (odd_and_frac <=8);//IF(odd_and_frac>=1,IF(odd_and_frac <= 8,1,0),0) + + + + //Calculate phase in fractional cycles + a_per_in_octets = (8 * divide) + (frac / 125) ; + a_phase_in_cycles = (phase+10) * a_per_in_octets / 360000 ;//Adding 1 due to rounding errors + pm_rise_frac = (a_phase_in_cycles[7:0] ==8'h00)?8'h00:a_phase_in_cycles[7:0] - {a_phase_in_cycles[7:3],3'b000}; + + dt_calc = ((phase+10) * a_per_in_octets / 8 )/360000 ;//TRUNC(phase* divide / 360); //or_simply (a_per_in_octets / 8) + dt = dt_calc[7:0]; + + pm_rise_frac_filtered = (pm_rise_frac >=8) ? (pm_rise_frac ) - 8: pm_rise_frac ; //((phase_fixed * (divide + frac / 1000)) / 360) - {pm_rise_frac[7:3],3'b000};//$rtoi(clkout0_phase * clkout0_divide / 45);//a; + + dt_int = dt + (& pm_rise_frac[7:4]); //IF(pm_rise_overwriting>7,dt+1,dt) + pm_fall_frac = pm_fall + pm_rise_frac; + pm_fall_frac_filtered = pm_fall + pm_rise_frac - {pm_fall_frac[7:3], 3'b000}; + + div_calc = mmcm_pll_divider(divide, duty_cycle); //Use to determine edge[7], no count[6] + phase_calc = mmcm_pll_phase(divide, phase);// returns{mx[1:0], phase_mux[2:0], delay_time[5:0]} + + mmcm_pll_frac_count_calc[37:0] = + { 2'b00, pm_fall_frac_filtered[2:0], wf_fall_frac, + 1'b0, clkout0_divide_frac[2:0], 1'b1, wf_rise_frac, phase_calc[10:9], div_calc[13:12], dt[5:0], + 3'b000, 1'b0, ht_frac[5:0], lt_frac[5:0] //Removed PM_Rise bits + } ; + + `ifdef DEBUG + $display("-%d.%d p%d>> :DADDR_9_15 frac30to28.frac_en.wf_r_frac.dt:%b%d%d_%b:DADDR_7_13 pm_f_frac_filtered_29to27.wf_f_frac_26:%b%d:DADDR_8_14.pm_r_frac_filt_15to13.ht_frac.lt_frac:%b%b%b:", divide, frac, phase, clkout0_divide_frac, 1, wf_rise_frac, dt, pm_fall_frac_filtered, wf_fall_frac, 3'b000, ht_frac, lt_frac); + `endif + + end +endfunction + -- GitLab